}
 
 static void vector_get_ringparam(struct net_device *netdev,
-                               struct ethtool_ringparam *ring)
+                                struct ethtool_ringparam *ring,
+                                struct kernel_ethtool_ringparam *kernel_ring,
+                                struct netlink_ext_ack *extack)
 {
        struct vector_private *vp = netdev_priv(netdev);
 
 
 }
 
 static void c_can_get_ringparam(struct net_device *netdev,
-                               struct ethtool_ringparam *ring)
+                               struct ethtool_ringparam *ring,
+                               struct kernel_ethtool_ringparam *kernel_ring,
+                               struct netlink_ext_ack *extack)
 {
        struct c_can_priv *priv = netdev_priv(netdev);
 
 
 }
 
 static void
-typhoon_get_ringparam(struct net_device *dev, struct ethtool_ringparam *ering)
+typhoon_get_ringparam(struct net_device *dev, struct ethtool_ringparam *ering,
+                     struct kernel_ethtool_ringparam *kernel_ering,
+                     struct netlink_ext_ack *extack)
 {
        ering->rx_max_pending = RXENT_ENTRIES;
        ering->tx_max_pending = TXLO_ENTRIES - 1;
 
 }
 
 static void ena_get_ringparam(struct net_device *netdev,
-                             struct ethtool_ringparam *ring)
+                             struct ethtool_ringparam *ring,
+                             struct kernel_ethtool_ringparam *kernel_ring,
+                             struct netlink_ext_ack *extack)
 {
        struct ena_adapter *adapter = netdev_priv(netdev);
 
 }
 
 static int ena_set_ringparam(struct net_device *netdev,
-                            struct ethtool_ringparam *ring)
+                            struct ethtool_ringparam *ring,
+                            struct kernel_ethtool_ringparam *kernel_ring,
+                            struct netlink_ext_ack *extack)
 {
        struct ena_adapter *adapter = netdev_priv(netdev);
        u32 new_tx_size, new_rx_size;
 
 }
 
 static void pcnet32_get_ringparam(struct net_device *dev,
-                                 struct ethtool_ringparam *ering)
+                                 struct ethtool_ringparam *ering,
+                                 struct kernel_ethtool_ringparam *kernel_ering,
+                                 struct netlink_ext_ack *extack)
 {
        struct pcnet32_private *lp = netdev_priv(dev);
 
 }
 
 static int pcnet32_set_ringparam(struct net_device *dev,
-                                struct ethtool_ringparam *ering)
+                                struct ethtool_ringparam *ering,
+                                struct kernel_ethtool_ringparam *kernel_ering,
+                                struct netlink_ext_ack *extack)
 {
        struct pcnet32_private *lp = netdev_priv(dev);
        unsigned long flags;
 
        return pdata->phy_if.module_eeprom(pdata, eeprom, data);
 }
 
-static void xgbe_get_ringparam(struct net_device *netdev,
-                              struct ethtool_ringparam *ringparam)
+static void
+xgbe_get_ringparam(struct net_device *netdev,
+                  struct ethtool_ringparam *ringparam,
+                  struct kernel_ethtool_ringparam *kernel_ringparam,
+                  struct netlink_ext_ack *extack)
 {
        struct xgbe_prv_data *pdata = netdev_priv(netdev);
 
 }
 
 static int xgbe_set_ringparam(struct net_device *netdev,
-                             struct ethtool_ringparam *ringparam)
+                             struct ethtool_ringparam *ringparam,
+                             struct kernel_ethtool_ringparam *kernel_ringparam,
+                             struct netlink_ext_ack *extack)
 {
        struct xgbe_prv_data *pdata = netdev_priv(netdev);
        unsigned int rx, tx;
 
 }
 
 static void aq_get_ringparam(struct net_device *ndev,
-                            struct ethtool_ringparam *ring)
+                            struct ethtool_ringparam *ring,
+                            struct kernel_ethtool_ringparam *kernel_ring,
+                            struct netlink_ext_ack *extack)
 {
        struct aq_nic_s *aq_nic = netdev_priv(ndev);
        struct aq_nic_cfg_s *cfg;
 }
 
 static int aq_set_ringparam(struct net_device *ndev,
-                           struct ethtool_ringparam *ring)
+                           struct ethtool_ringparam *ring,
+                           struct kernel_ethtool_ringparam *kernel_ring,
+                           struct netlink_ext_ack *extack)
 {
        struct aq_nic_s *aq_nic = netdev_priv(ndev);
        const struct aq_hw_caps_s *hw_caps;
 
 }
 
 static void atl1_get_ringparam(struct net_device *netdev,
-       struct ethtool_ringparam *ring)
+                              struct ethtool_ringparam *ring,
+                              struct kernel_ethtool_ringparam *kernel_ring,
+                              struct netlink_ext_ack *extack)
 {
        struct atl1_adapter *adapter = netdev_priv(netdev);
        struct atl1_tpd_ring *txdr = &adapter->tpd_ring;
 }
 
 static int atl1_set_ringparam(struct net_device *netdev,
-       struct ethtool_ringparam *ring)
+                             struct ethtool_ringparam *ring,
+                             struct kernel_ethtool_ringparam *kernel_ring,
+                             struct netlink_ext_ack *extack)
 {
        struct atl1_adapter *adapter = netdev_priv(netdev);
        struct atl1_tpd_ring *tpdr = &adapter->tpd_ring;
 
 }
 
 static void b44_get_ringparam(struct net_device *dev,
-                             struct ethtool_ringparam *ering)
+                             struct ethtool_ringparam *ering,
+                             struct kernel_ethtool_ringparam *kernel_ering,
+                             struct netlink_ext_ack *extack)
 {
        struct b44 *bp = netdev_priv(dev);
 
 }
 
 static int b44_set_ringparam(struct net_device *dev,
-                            struct ethtool_ringparam *ering)
+                            struct ethtool_ringparam *ering,
+                            struct kernel_ethtool_ringparam *kernel_ering,
+                            struct netlink_ext_ack *extack)
 {
        struct b44 *bp = netdev_priv(dev);
 
 
        }
 }
 
-static void bcm_enet_get_ringparam(struct net_device *dev,
-                                  struct ethtool_ringparam *ering)
+static void
+bcm_enet_get_ringparam(struct net_device *dev,
+                      struct ethtool_ringparam *ering,
+                      struct kernel_ethtool_ringparam *kernel_ering,
+                      struct netlink_ext_ack *extack)
 {
        struct bcm_enet_priv *priv;
 
 }
 
 static int bcm_enet_set_ringparam(struct net_device *dev,
-                                 struct ethtool_ringparam *ering)
+                                 struct ethtool_ringparam *ering,
+                                 struct kernel_ethtool_ringparam *kernel_ering,
+                                 struct netlink_ext_ack *extack)
 {
        struct bcm_enet_priv *priv;
        int was_running;
        }
 }
 
-static void bcm_enetsw_get_ringparam(struct net_device *dev,
-                                    struct ethtool_ringparam *ering)
+static void
+bcm_enetsw_get_ringparam(struct net_device *dev,
+                        struct ethtool_ringparam *ering,
+                        struct kernel_ethtool_ringparam *kernel_ering,
+                        struct netlink_ext_ack *extack)
 {
        struct bcm_enet_priv *priv;
 
        ering->tx_pending = priv->tx_ring_size;
 }
 
-static int bcm_enetsw_set_ringparam(struct net_device *dev,
-                                   struct ethtool_ringparam *ering)
+static int
+bcm_enetsw_set_ringparam(struct net_device *dev,
+                        struct ethtool_ringparam *ering,
+                        struct kernel_ethtool_ringparam *kernel_ering,
+                        struct netlink_ext_ack *extack)
 {
        struct bcm_enet_priv *priv;
        int was_running;
 
 }
 
 static void
-bnx2_get_ringparam(struct net_device *dev, struct ethtool_ringparam *ering)
+bnx2_get_ringparam(struct net_device *dev, struct ethtool_ringparam *ering,
+                  struct kernel_ethtool_ringparam *kernel_ering,
+                  struct netlink_ext_ack *extack)
 {
        struct bnx2 *bp = netdev_priv(dev);
 
 }
 
 static int
-bnx2_set_ringparam(struct net_device *dev, struct ethtool_ringparam *ering)
+bnx2_set_ringparam(struct net_device *dev, struct ethtool_ringparam *ering,
+                  struct kernel_ethtool_ringparam *kernel_ering,
+                  struct netlink_ext_ack *extack)
 {
        struct bnx2 *bp = netdev_priv(dev);
        int rc;
 
 }
 
 static void bnx2x_get_ringparam(struct net_device *dev,
-                               struct ethtool_ringparam *ering)
+                               struct ethtool_ringparam *ering,
+                               struct kernel_ethtool_ringparam *kernel_ering,
+                               struct netlink_ext_ack *extack)
 {
        struct bnx2x *bp = netdev_priv(dev);
 
 }
 
 static int bnx2x_set_ringparam(struct net_device *dev,
-                              struct ethtool_ringparam *ering)
+                              struct ethtool_ringparam *ering,
+                              struct kernel_ethtool_ringparam *kernel_ering,
+                              struct netlink_ext_ack *extack)
 {
        struct bnx2x *bp = netdev_priv(dev);
 
 
 }
 
 static void bnxt_get_ringparam(struct net_device *dev,
-                              struct ethtool_ringparam *ering)
+                              struct ethtool_ringparam *ering,
+                              struct kernel_ethtool_ringparam *kernel_ering,
+                              struct netlink_ext_ack *extack)
 {
        struct bnxt *bp = netdev_priv(dev);
 
 }
 
 static int bnxt_set_ringparam(struct net_device *dev,
-                             struct ethtool_ringparam *ering)
+                             struct ethtool_ringparam *ering,
+                             struct kernel_ethtool_ringparam *kernel_ering,
+                             struct netlink_ext_ack *extack)
 {
        struct bnxt *bp = netdev_priv(dev);
 
 
        return r;
 }
 
-static void tg3_get_ringparam(struct net_device *dev, struct ethtool_ringparam *ering)
+static void tg3_get_ringparam(struct net_device *dev,
+                             struct ethtool_ringparam *ering,
+                             struct kernel_ethtool_ringparam *kernel_ering,
+                             struct netlink_ext_ack *extack)
 {
        struct tg3 *tp = netdev_priv(dev);
 
        ering->tx_pending = tp->napi[0].tx_pending;
 }
 
-static int tg3_set_ringparam(struct net_device *dev, struct ethtool_ringparam *ering)
+static int tg3_set_ringparam(struct net_device *dev,
+                            struct ethtool_ringparam *ering,
+                            struct kernel_ethtool_ringparam *kernel_ering,
+                            struct netlink_ext_ack *extack)
 {
        struct tg3 *tp = netdev_priv(dev);
        int i, irq_sync = 0, err = 0;
 
 
 static void
 bnad_get_ringparam(struct net_device *netdev,
-                  struct ethtool_ringparam *ringparam)
+                  struct ethtool_ringparam *ringparam,
+                  struct kernel_ethtool_ringparam *kernel_ringparam,
+                  struct netlink_ext_ack *extack)
 {
        struct bnad *bnad = netdev_priv(netdev);
 
 
 static int
 bnad_set_ringparam(struct net_device *netdev,
-                  struct ethtool_ringparam *ringparam)
+                  struct ethtool_ringparam *ringparam,
+                  struct kernel_ethtool_ringparam *kernel_ringparam,
+                  struct netlink_ext_ack *extack)
 {
        int i, current_err, err = 0;
        struct bnad *bnad = netdev_priv(netdev);
 
 }
 
 static void macb_get_ringparam(struct net_device *netdev,
-                              struct ethtool_ringparam *ring)
+                              struct ethtool_ringparam *ring,
+                              struct kernel_ethtool_ringparam *kernel_ring,
+                              struct netlink_ext_ack *extack)
 {
        struct macb *bp = netdev_priv(netdev);
 
 }
 
 static int macb_set_ringparam(struct net_device *netdev,
-                             struct ethtool_ringparam *ring)
+                             struct ethtool_ringparam *ring,
+                             struct kernel_ethtool_ringparam *kernel_ring,
+                             struct netlink_ext_ack *extack)
 {
        struct macb *bp = netdev_priv(netdev);
        u32 new_rx_size, new_tx_size;
 
 
 static void
 lio_ethtool_get_ringparam(struct net_device *netdev,
-                         struct ethtool_ringparam *ering)
+                         struct ethtool_ringparam *ering,
+                         struct kernel_ethtool_ringparam *kernel_ering,
+                         struct netlink_ext_ack *extack)
 {
        struct lio *lio = GET_LIO(netdev);
        struct octeon_device *oct = lio->oct_dev;
        return 0;
 }
 
-static int lio_ethtool_set_ringparam(struct net_device *netdev,
-                                    struct ethtool_ringparam *ering)
+static int
+lio_ethtool_set_ringparam(struct net_device *netdev,
+                         struct ethtool_ringparam *ering,
+                         struct kernel_ethtool_ringparam *kernel_ering,
+                         struct netlink_ext_ack *extack)
 {
        u32 rx_count, tx_count, rx_count_old, tx_count_old;
        struct lio *lio = GET_LIO(netdev);
 
 }
 
 static void nicvf_get_ringparam(struct net_device *netdev,
-                               struct ethtool_ringparam *ring)
+                               struct ethtool_ringparam *ring,
+                               struct kernel_ethtool_ringparam *kernel_ring,
+                               struct netlink_ext_ack *extack)
 {
        struct nicvf *nic = netdev_priv(netdev);
        struct queue_set *qs = nic->qs;
 }
 
 static int nicvf_set_ringparam(struct net_device *netdev,
-                              struct ethtool_ringparam *ring)
+                              struct ethtool_ringparam *ring,
+                              struct kernel_ethtool_ringparam *kernel_ring,
+                              struct netlink_ext_ack *extack)
 {
        struct nicvf *nic = netdev_priv(netdev);
        struct queue_set *qs = nic->qs;
 
        return 0;
 }
 
-static void get_sge_param(struct net_device *dev, struct ethtool_ringparam *e)
+static void get_sge_param(struct net_device *dev, struct ethtool_ringparam *e,
+                         struct kernel_ethtool_ringparam *kernel_e,
+                         struct netlink_ext_ack *extack)
 {
        struct adapter *adapter = dev->ml_priv;
        int jumbo_fl = t1_is_T1B(adapter) ? 1 : 0;
        e->tx_pending = adapter->params.sge.cmdQ_size[0];
 }
 
-static int set_sge_param(struct net_device *dev, struct ethtool_ringparam *e)
+static int set_sge_param(struct net_device *dev, struct ethtool_ringparam *e,
+                        struct kernel_ethtool_ringparam *kernel_e,
+                        struct netlink_ext_ack *extack)
 {
        struct adapter *adapter = dev->ml_priv;
        int jumbo_fl = t1_is_T1B(adapter) ? 1 : 0;
 
        return 0;
 }
 
-static void get_sge_param(struct net_device *dev, struct ethtool_ringparam *e)
+static void get_sge_param(struct net_device *dev, struct ethtool_ringparam *e,
+                         struct kernel_ethtool_ringparam *kernel_e,
+                         struct netlink_ext_ack *extack)
 {
        struct port_info *pi = netdev_priv(dev);
        struct adapter *adapter = pi->adapter;
        e->tx_pending = q->txq_size[0];
 }
 
-static int set_sge_param(struct net_device *dev, struct ethtool_ringparam *e)
+static int set_sge_param(struct net_device *dev, struct ethtool_ringparam *e,
+                        struct kernel_ethtool_ringparam *kernel_e,
+                        struct netlink_ext_ack *extack)
 {
        struct port_info *pi = netdev_priv(dev);
        struct adapter *adapter = pi->adapter;
 
        return 0;
 }
 
-static void get_sge_param(struct net_device *dev, struct ethtool_ringparam *e)
+static void get_sge_param(struct net_device *dev, struct ethtool_ringparam *e,
+                         struct kernel_ethtool_ringparam *kernel_e,
+                         struct netlink_ext_ack *extack)
 {
        const struct port_info *pi = netdev_priv(dev);
        const struct sge *s = &pi->adapter->sge;
        e->tx_pending = s->ethtxq[pi->first_qset].q.size;
 }
 
-static int set_sge_param(struct net_device *dev, struct ethtool_ringparam *e)
+static int set_sge_param(struct net_device *dev, struct ethtool_ringparam *e,
+                        struct kernel_ethtool_ringparam *kernel_e,
+                        struct netlink_ext_ack *extack)
 {
        int i;
        const struct port_info *pi = netdev_priv(dev);
 
  * first Queue Set.
  */
 static void cxgb4vf_get_ringparam(struct net_device *dev,
-                                 struct ethtool_ringparam *rp)
+                                 struct ethtool_ringparam *rp,
+                                 struct kernel_ethtool_ringparam *kernel_rp,
+                                 struct netlink_ext_ack *extack)
 {
        const struct port_info *pi = netdev_priv(dev);
        const struct sge *s = &pi->adapter->sge;
  * device -- after vetting them of course!
  */
 static int cxgb4vf_set_ringparam(struct net_device *dev,
-                                struct ethtool_ringparam *rp)
+                                struct ethtool_ringparam *rp,
+                                struct kernel_ethtool_ringparam *kernel_rp,
+                                struct netlink_ext_ack *extack)
 {
        const struct port_info *pi = netdev_priv(dev);
        struct adapter *adapter = pi->adapter;
 
 }
 
 static void enic_get_ringparam(struct net_device *netdev,
-                              struct ethtool_ringparam *ring)
+                              struct ethtool_ringparam *ring,
+                              struct kernel_ethtool_ringparam *kernel_ring,
+                              struct netlink_ext_ack *extack)
 {
        struct enic *enic = netdev_priv(netdev);
        struct vnic_enet_config *c = &enic->config;
 }
 
 static int enic_set_ringparam(struct net_device *netdev,
-                             struct ethtool_ringparam *ring)
+                             struct ethtool_ringparam *ring,
+                             struct kernel_ethtool_ringparam *kernel_ring,
+                             struct netlink_ext_ack *extack)
 {
        struct enic *enic = netdev_priv(netdev);
        struct vnic_enet_config *c = &enic->config;
 
 }
 
 static void gmac_get_ringparam(struct net_device *netdev,
-                              struct ethtool_ringparam *rp)
+                              struct ethtool_ringparam *rp,
+                              struct kernel_ethtool_ringparam *kernel_rp,
+                              struct netlink_ext_ack *extack)
 {
        struct gemini_ethernet_port *port = netdev_priv(netdev);
 
 }
 
 static int gmac_set_ringparam(struct net_device *netdev,
-                             struct ethtool_ringparam *rp)
+                             struct ethtool_ringparam *rp,
+                             struct kernel_ethtool_ringparam *kernel_rp,
+                             struct netlink_ext_ack *extack)
 {
        struct gemini_ethernet_port *port = netdev_priv(netdev);
        int err = 0;
 
 }
 
 static void be_get_ringparam(struct net_device *netdev,
-                            struct ethtool_ringparam *ring)
+                            struct ethtool_ringparam *ring,
+                            struct kernel_ethtool_ringparam *kernel_ring,
+                            struct netlink_ext_ack *extack)
 {
        struct be_adapter *adapter = netdev_priv(netdev);
 
 
 }
 
 static void ethoc_get_ringparam(struct net_device *dev,
-                               struct ethtool_ringparam *ring)
+                               struct ethtool_ringparam *ring,
+                               struct kernel_ethtool_ringparam *kernel_ring,
+                               struct netlink_ext_ack *extack)
 {
        struct ethoc *priv = netdev_priv(dev);
 
 }
 
 static int ethoc_set_ringparam(struct net_device *dev,
-                              struct ethtool_ringparam *ring)
+                              struct ethtool_ringparam *ring,
+                              struct kernel_ethtool_ringparam *kernel_ring,
+                              struct netlink_ext_ack *extack)
 {
        struct ethoc *priv = netdev_priv(dev);
 
 
        strlcpy(info->bus_info, dev_name(&netdev->dev), sizeof(info->bus_info));
 }
 
-static void ftgmac100_get_ringparam(struct net_device *netdev,
-                                   struct ethtool_ringparam *ering)
+static void
+ftgmac100_get_ringparam(struct net_device *netdev,
+                       struct ethtool_ringparam *ering,
+                       struct kernel_ethtool_ringparam *kernel_ering,
+                       struct netlink_ext_ack *extack)
 {
        struct ftgmac100 *priv = netdev_priv(netdev);
 
        ering->tx_pending = priv->tx_q_entries;
 }
 
-static int ftgmac100_set_ringparam(struct net_device *netdev,
-                                  struct ethtool_ringparam *ering)
+static int
+ftgmac100_set_ringparam(struct net_device *netdev,
+                       struct ethtool_ringparam *ering,
+                       struct kernel_ethtool_ringparam *kernel_ering,
+                       struct netlink_ext_ack *extack)
 {
        struct ftgmac100 *priv = netdev_priv(netdev);
 
 
 }
 
 static void enetc_get_ringparam(struct net_device *ndev,
-                               struct ethtool_ringparam *ring)
+                               struct ethtool_ringparam *ring,
+                               struct kernel_ethtool_ringparam *kernel_ring,
+                               struct netlink_ext_ack *extack)
 {
        struct enetc_ndev_priv *priv = netdev_priv(ndev);
 
 
  * rx, rx_mini, and rx_jumbo rings are the same size, as mini and
  * jumbo are ignored by the driver */
 static void gfar_gringparam(struct net_device *dev,
-                           struct ethtool_ringparam *rvals)
+                           struct ethtool_ringparam *rvals,
+                           struct kernel_ethtool_ringparam *kernel_rvals,
+                           struct netlink_ext_ack *extack)
 {
        struct gfar_private *priv = netdev_priv(dev);
        struct gfar_priv_tx_q *tx_queue = NULL;
  * necessary so that we don't mess things up while we're in motion.
  */
 static int gfar_sringparam(struct net_device *dev,
-                          struct ethtool_ringparam *rvals)
+                          struct ethtool_ringparam *rvals,
+                          struct kernel_ethtool_ringparam *kernel_rvals,
+                          struct netlink_ext_ack *extack)
 {
        struct gfar_private *priv = netdev_priv(dev);
        int err = 0, i;
 
 
 static void
 uec_get_ringparam(struct net_device *netdev,
-                    struct ethtool_ringparam *ring)
+                 struct ethtool_ringparam *ring,
+                 struct kernel_ethtool_ringparam *kernel_ring,
+                 struct netlink_ext_ack *extack)
 {
        struct ucc_geth_private *ugeth = netdev_priv(netdev);
        struct ucc_geth_info *ug_info = ugeth->ug_info;
 
 static int
 uec_set_ringparam(struct net_device *netdev,
-                    struct ethtool_ringparam *ring)
+                 struct ethtool_ringparam *ring,
+                 struct kernel_ethtool_ringparam *kernel_ring,
+                 struct netlink_ext_ack *extack)
 {
        struct ucc_geth_private *ugeth = netdev_priv(netdev);
        struct ucc_geth_info *ug_info = ugeth->ug_info;
 
 }
 
 static void gve_get_ringparam(struct net_device *netdev,
-                             struct ethtool_ringparam *cmd)
+                             struct ethtool_ringparam *cmd,
+                             struct kernel_ethtool_ringparam *kernel_cmd,
+                             struct netlink_ext_ack *extack)
 {
        struct gve_priv *priv = netdev_priv(netdev);
 
 
  * hns_get_ringparam - get ring parameter
  * @net_dev: net device
  * @param: ethtool parameter
+ * @kernel_param: ethtool external parameter
+ * @extack: netlink extended ACK report struct
  */
 static void hns_get_ringparam(struct net_device *net_dev,
-                             struct ethtool_ringparam *param)
+                             struct ethtool_ringparam *param,
+                             struct kernel_ethtool_ringparam *kernel_param,
+                             struct netlink_ext_ack *extack)
 {
        struct hns_nic_priv *priv = netdev_priv(net_dev);
        struct hnae_ae_ops *ops;
 
 }
 
 static void hns3_get_ringparam(struct net_device *netdev,
-                              struct ethtool_ringparam *param)
+                              struct ethtool_ringparam *param,
+                              struct kernel_ethtool_ringparam *kernel_param,
+                              struct netlink_ext_ack *extack)
 {
        struct hns3_nic_priv *priv = netdev_priv(netdev);
        struct hnae3_handle *h = priv->ae_handle;
 }
 
 static int hns3_set_ringparam(struct net_device *ndev,
-                             struct ethtool_ringparam *param)
+                             struct ethtool_ringparam *param,
+                             struct kernel_ethtool_ringparam *kernel_param,
+                             struct netlink_ext_ack *extack)
 {
        struct hns3_nic_priv *priv = netdev_priv(ndev);
        struct hnae3_handle *h = priv->ae_handle;
 
 }
 
 static void hinic_get_ringparam(struct net_device *netdev,
-                               struct ethtool_ringparam *ring)
+                               struct ethtool_ringparam *ring,
+                               struct kernel_ethtool_ringparam *kernel_ring,
+                               struct netlink_ext_ack *extack)
 {
        struct hinic_dev *nic_dev = netdev_priv(netdev);
 
 }
 
 static int hinic_set_ringparam(struct net_device *netdev,
-                              struct ethtool_ringparam *ring)
+                              struct ethtool_ringparam *ring,
+                              struct kernel_ethtool_ringparam *kernel_ring,
+                              struct netlink_ext_ack *extack)
 {
        struct hinic_dev *nic_dev = netdev_priv(netdev);
        u16 new_sq_depth, new_rq_depth;
 
        return 0;
 }
 
-static void emac_ethtool_get_ringparam(struct net_device *ndev,
-                                      struct ethtool_ringparam *rp)
+static void
+emac_ethtool_get_ringparam(struct net_device *ndev,
+                          struct ethtool_ringparam *rp,
+                          struct kernel_ethtool_ringparam *kernel_rp,
+                          struct netlink_ext_ack *extack)
 {
        rp->rx_max_pending = rp->rx_pending = NUM_RX_BUFF;
        rp->tx_max_pending = rp->tx_pending = NUM_TX_BUFF;
 
 }
 
 static void ibmvnic_get_ringparam(struct net_device *netdev,
-                                 struct ethtool_ringparam *ring)
+                                 struct ethtool_ringparam *ring,
+                                 struct kernel_ethtool_ringparam *kernel_ring,
+                                 struct netlink_ext_ack *extack)
 {
        struct ibmvnic_adapter *adapter = netdev_priv(netdev);
 
 }
 
 static int ibmvnic_set_ringparam(struct net_device *netdev,
-                                struct ethtool_ringparam *ring)
+                                struct ethtool_ringparam *ring,
+                                struct kernel_ethtool_ringparam *kernel_ring,
+                                struct netlink_ext_ack *extack)
 {
        struct ibmvnic_adapter *adapter = netdev_priv(netdev);
        int ret;
 
 }
 
 static void e100_get_ringparam(struct net_device *netdev,
-       struct ethtool_ringparam *ring)
+                              struct ethtool_ringparam *ring,
+                              struct kernel_ethtool_ringparam *kernel_ring,
+                              struct netlink_ext_ack *extack)
 {
        struct nic *nic = netdev_priv(netdev);
        struct param_range *rfds = &nic->params.rfds;
 }
 
 static int e100_set_ringparam(struct net_device *netdev,
-       struct ethtool_ringparam *ring)
+                             struct ethtool_ringparam *ring,
+                             struct kernel_ethtool_ringparam *kernel_ring,
+                             struct netlink_ext_ack *extack)
 {
        struct nic *nic = netdev_priv(netdev);
        struct param_range *rfds = &nic->params.rfds;
 
 }
 
 static void e1000_get_ringparam(struct net_device *netdev,
-                               struct ethtool_ringparam *ring)
+                               struct ethtool_ringparam *ring,
+                               struct kernel_ethtool_ringparam *kernel_ring,
+                               struct netlink_ext_ack *extack)
 {
        struct e1000_adapter *adapter = netdev_priv(netdev);
        struct e1000_hw *hw = &adapter->hw;
 }
 
 static int e1000_set_ringparam(struct net_device *netdev,
-                              struct ethtool_ringparam *ring)
+                              struct ethtool_ringparam *ring,
+                              struct kernel_ethtool_ringparam *kernel_ring,
+                              struct netlink_ext_ack *extack)
 {
        struct e1000_adapter *adapter = netdev_priv(netdev);
        struct e1000_hw *hw = &adapter->hw;
 
 }
 
 static void e1000_get_ringparam(struct net_device *netdev,
-                               struct ethtool_ringparam *ring)
+                               struct ethtool_ringparam *ring,
+                               struct kernel_ethtool_ringparam *kernel_ring,
+                               struct netlink_ext_ack *extack)
 {
        struct e1000_adapter *adapter = netdev_priv(netdev);
 
 }
 
 static int e1000_set_ringparam(struct net_device *netdev,
-                              struct ethtool_ringparam *ring)
+                              struct ethtool_ringparam *ring,
+                              struct kernel_ethtool_ringparam *kernel_ring,
+                              struct netlink_ext_ack *extack)
 {
        struct e1000_adapter *adapter = netdev_priv(netdev);
        struct e1000_ring *temp_tx = NULL, *temp_rx = NULL;
 
 }
 
 static void fm10k_get_ringparam(struct net_device *netdev,
-                               struct ethtool_ringparam *ring)
+                               struct ethtool_ringparam *ring,
+                               struct kernel_ethtool_ringparam *kernel_ring,
+                               struct netlink_ext_ack *extack)
 {
        struct fm10k_intfc *interface = netdev_priv(netdev);
 
 }
 
 static int fm10k_set_ringparam(struct net_device *netdev,
-                              struct ethtool_ringparam *ring)
+                              struct ethtool_ringparam *ring,
+                              struct kernel_ethtool_ringparam *kernel_ring,
+                              struct netlink_ext_ack *extack)
 {
        struct fm10k_intfc *interface = netdev_priv(netdev);
        struct fm10k_ring *temp_ring;
 
 }
 
 static void i40e_get_ringparam(struct net_device *netdev,
-                              struct ethtool_ringparam *ring)
+                              struct ethtool_ringparam *ring,
+                              struct kernel_ethtool_ringparam *kernel_ring,
+                              struct netlink_ext_ack *extack)
 {
        struct i40e_netdev_priv *np = netdev_priv(netdev);
        struct i40e_pf *pf = np->vsi->back;
 }
 
 static int i40e_set_ringparam(struct net_device *netdev,
-                             struct ethtool_ringparam *ring)
+                             struct ethtool_ringparam *ring,
+                             struct kernel_ethtool_ringparam *kernel_ring,
+                             struct netlink_ext_ack *extack)
 {
        struct i40e_ring *tx_rings = NULL, *rx_rings = NULL;
        struct i40e_netdev_priv *np = netdev_priv(netdev);
 
  * iavf_get_ringparam - Get ring parameters
  * @netdev: network interface device structure
  * @ring: ethtool ringparam structure
+ * @kernel_ring: ethtool extenal ringparam structure
+ * @extack: netlink extended ACK report struct
  *
  * Returns current ring parameters. TX and RX rings are reported separately,
  * but the number of rings is not reported.
  **/
 static void iavf_get_ringparam(struct net_device *netdev,
-                              struct ethtool_ringparam *ring)
+                              struct ethtool_ringparam *ring,
+                              struct kernel_ethtool_ringparam *kernel_ring,
+                              struct netlink_ext_ack *extack)
 {
        struct iavf_adapter *adapter = netdev_priv(netdev);
 
  * iavf_set_ringparam - Set ring parameters
  * @netdev: network interface device structure
  * @ring: ethtool ringparam structure
+ * @kernel_ring: ethtool external ringparam structure
+ * @extack: netlink extended ACK report struct
  *
  * Sets ring parameters. TX and RX rings are controlled separately, but the
  * number of rings is not specified, so all rings get the same settings.
  **/
 static int iavf_set_ringparam(struct net_device *netdev,
-                             struct ethtool_ringparam *ring)
+                             struct ethtool_ringparam *ring,
+                             struct kernel_ethtool_ringparam *kernel_ring,
+                             struct netlink_ext_ack *extack)
 {
        struct iavf_adapter *adapter = netdev_priv(netdev);
        u32 new_rx_count, new_tx_count;
 
 }
 
 static void
-ice_get_ringparam(struct net_device *netdev, struct ethtool_ringparam *ring)
+ice_get_ringparam(struct net_device *netdev, struct ethtool_ringparam *ring,
+                 struct kernel_ethtool_ringparam *kernel_ring,
+                 struct netlink_ext_ack *extack)
 {
        struct ice_netdev_priv *np = netdev_priv(netdev);
        struct ice_vsi *vsi = np->vsi;
 }
 
 static int
-ice_set_ringparam(struct net_device *netdev, struct ethtool_ringparam *ring)
+ice_set_ringparam(struct net_device *netdev, struct ethtool_ringparam *ring,
+                 struct kernel_ethtool_ringparam *kernel_ring,
+                 struct netlink_ext_ack *extack)
 {
        struct ice_netdev_priv *np = netdev_priv(netdev);
        struct ice_tx_ring *xdp_rings = NULL;
 
 }
 
 static void igb_get_ringparam(struct net_device *netdev,
-                             struct ethtool_ringparam *ring)
+                             struct ethtool_ringparam *ring,
+                             struct kernel_ethtool_ringparam *kernel_ring,
+                             struct netlink_ext_ack *extack)
 {
        struct igb_adapter *adapter = netdev_priv(netdev);
 
 }
 
 static int igb_set_ringparam(struct net_device *netdev,
-                            struct ethtool_ringparam *ring)
+                            struct ethtool_ringparam *ring,
+                            struct kernel_ethtool_ringparam *kernel_ring,
+                            struct netlink_ext_ack *extack)
 {
        struct igb_adapter *adapter = netdev_priv(netdev);
        struct igb_ring *temp_ring;
 
 }
 
 static void igbvf_get_ringparam(struct net_device *netdev,
-                               struct ethtool_ringparam *ring)
+                               struct ethtool_ringparam *ring,
+                               struct kernel_ethtool_ringparam *kernel_ring,
+                               struct netlink_ext_ack *extack)
 {
        struct igbvf_adapter *adapter = netdev_priv(netdev);
        struct igbvf_ring *tx_ring = adapter->tx_ring;
 }
 
 static int igbvf_set_ringparam(struct net_device *netdev,
-                              struct ethtool_ringparam *ring)
+                              struct ethtool_ringparam *ring,
+                              struct kernel_ethtool_ringparam *kernel_ring,
+                              struct netlink_ext_ack *extack)
 {
        struct igbvf_adapter *adapter = netdev_priv(netdev);
        struct igbvf_ring *temp_ring;
 
        return ret_val;
 }
 
-static void igc_ethtool_get_ringparam(struct net_device *netdev,
-                                     struct ethtool_ringparam *ring)
+static void
+igc_ethtool_get_ringparam(struct net_device *netdev,
+                         struct ethtool_ringparam *ring,
+                         struct kernel_ethtool_ringparam *kernel_ering,
+                         struct netlink_ext_ack *extack)
 {
        struct igc_adapter *adapter = netdev_priv(netdev);
 
        ring->tx_pending = adapter->tx_ring_count;
 }
 
-static int igc_ethtool_set_ringparam(struct net_device *netdev,
-                                    struct ethtool_ringparam *ring)
+static int
+igc_ethtool_set_ringparam(struct net_device *netdev,
+                         struct ethtool_ringparam *ring,
+                         struct kernel_ethtool_ringparam *kernel_ering,
+                         struct netlink_ext_ack *extack)
 {
        struct igc_adapter *adapter = netdev_priv(netdev);
        struct igc_ring *temp_ring;
 
 
 static void
 ixgb_get_ringparam(struct net_device *netdev,
-               struct ethtool_ringparam *ring)
+                  struct ethtool_ringparam *ring,
+                  struct kernel_ethtool_ringparam *kernel_ring,
+                  struct netlink_ext_ack *extack)
 {
        struct ixgb_adapter *adapter = netdev_priv(netdev);
        struct ixgb_desc_ring *txdr = &adapter->tx_ring;
 
 static int
 ixgb_set_ringparam(struct net_device *netdev,
-               struct ethtool_ringparam *ring)
+                  struct ethtool_ringparam *ring,
+                  struct kernel_ethtool_ringparam *kernel_ring,
+                  struct netlink_ext_ack *extack)
 {
        struct ixgb_adapter *adapter = netdev_priv(netdev);
        struct ixgb_desc_ring *txdr = &adapter->tx_ring;
 
 }
 
 static void ixgbe_get_ringparam(struct net_device *netdev,
-                               struct ethtool_ringparam *ring)
+                               struct ethtool_ringparam *ring,
+                               struct kernel_ethtool_ringparam *kernel_ring,
+                               struct netlink_ext_ack *extack)
 {
        struct ixgbe_adapter *adapter = netdev_priv(netdev);
        struct ixgbe_ring *tx_ring = adapter->tx_ring[0];
 }
 
 static int ixgbe_set_ringparam(struct net_device *netdev,
-                              struct ethtool_ringparam *ring)
+                              struct ethtool_ringparam *ring,
+                              struct kernel_ethtool_ringparam *kernel_ring,
+                              struct netlink_ext_ack *extack)
 {
        struct ixgbe_adapter *adapter = netdev_priv(netdev);
        struct ixgbe_ring *temp_ring;
 
 }
 
 static void ixgbevf_get_ringparam(struct net_device *netdev,
-                                 struct ethtool_ringparam *ring)
+                                 struct ethtool_ringparam *ring,
+                                 struct kernel_ethtool_ringparam *kernel_ring,
+                                 struct netlink_ext_ack *extack)
 {
        struct ixgbevf_adapter *adapter = netdev_priv(netdev);
 
 }
 
 static int ixgbevf_set_ringparam(struct net_device *netdev,
-                                struct ethtool_ringparam *ring)
+                                struct ethtool_ringparam *ring,
+                                struct kernel_ethtool_ringparam *kernel_ring,
+                                struct netlink_ext_ack *extack)
 {
        struct ixgbevf_adapter *adapter = netdev_priv(netdev);
        struct ixgbevf_ring *tx_ring = NULL, *rx_ring = NULL;
 
 }
 
 static void
-mv643xx_eth_get_ringparam(struct net_device *dev, struct ethtool_ringparam *er)
+mv643xx_eth_get_ringparam(struct net_device *dev, struct ethtool_ringparam *er,
+                         struct kernel_ethtool_ringparam *kernel_er,
+                         struct netlink_ext_ack *extack)
 {
        struct mv643xx_eth_private *mp = netdev_priv(dev);
 
 }
 
 static int
-mv643xx_eth_set_ringparam(struct net_device *dev, struct ethtool_ringparam *er)
+mv643xx_eth_set_ringparam(struct net_device *dev, struct ethtool_ringparam *er,
+                         struct kernel_ethtool_ringparam *kernel_er,
+                         struct netlink_ext_ack *extack)
 {
        struct mv643xx_eth_private *mp = netdev_priv(dev);
 
 
 }
 
 
-static void mvneta_ethtool_get_ringparam(struct net_device *netdev,
-                                        struct ethtool_ringparam *ring)
+static void
+mvneta_ethtool_get_ringparam(struct net_device *netdev,
+                            struct ethtool_ringparam *ring,
+                            struct kernel_ethtool_ringparam *kernel_ring,
+                            struct netlink_ext_ack *extack)
 {
        struct mvneta_port *pp = netdev_priv(netdev);
 
        ring->tx_pending = pp->tx_ring_size;
 }
 
-static int mvneta_ethtool_set_ringparam(struct net_device *dev,
-                                       struct ethtool_ringparam *ring)
+static int
+mvneta_ethtool_set_ringparam(struct net_device *dev,
+                            struct ethtool_ringparam *ring,
+                            struct kernel_ethtool_ringparam *kernel_ring,
+                            struct netlink_ext_ack *extack)
 {
        struct mvneta_port *pp = netdev_priv(dev);
 
 
                sizeof(drvinfo->bus_info));
 }
 
-static void mvpp2_ethtool_get_ringparam(struct net_device *dev,
-                                       struct ethtool_ringparam *ring)
+static void
+mvpp2_ethtool_get_ringparam(struct net_device *dev,
+                           struct ethtool_ringparam *ring,
+                           struct kernel_ethtool_ringparam *kernel_ring,
+                           struct netlink_ext_ack *extack)
 {
        struct mvpp2_port *port = netdev_priv(dev);
 
        ring->tx_pending = port->tx_ring_size;
 }
 
-static int mvpp2_ethtool_set_ringparam(struct net_device *dev,
-                                      struct ethtool_ringparam *ring)
+static int
+mvpp2_ethtool_set_ringparam(struct net_device *dev,
+                           struct ethtool_ringparam *ring,
+                           struct kernel_ethtool_ringparam *kernel_ring,
+                           struct netlink_ext_ack *extack)
 {
        struct mvpp2_port *port = netdev_priv(dev);
        u16 prev_rx_ring_size = port->rx_ring_size;
 
 }
 
 static void otx2_get_ringparam(struct net_device *netdev,
-                              struct ethtool_ringparam *ring)
+                              struct ethtool_ringparam *ring,
+                              struct kernel_ethtool_ringparam *kernel_ring,
+                              struct netlink_ext_ack *extack)
 {
        struct otx2_nic *pfvf = netdev_priv(netdev);
        struct otx2_qset *qs = &pfvf->qset;
 }
 
 static int otx2_set_ringparam(struct net_device *netdev,
-                             struct ethtool_ringparam *ring)
+                             struct ethtool_ringparam *ring,
+                             struct kernel_ethtool_ringparam *kernel_ring,
+                             struct netlink_ext_ack *extack)
 {
        struct otx2_nic *pfvf = netdev_priv(netdev);
        bool if_up = netif_running(netdev);
 
 }
 
 static void skge_get_ring_param(struct net_device *dev,
-                               struct ethtool_ringparam *p)
+                               struct ethtool_ringparam *p,
+                               struct kernel_ethtool_ringparam *kernel_p,
+                               struct netlink_ext_ack *extack)
 {
        struct skge_port *skge = netdev_priv(dev);
 
 }
 
 static int skge_set_ring_param(struct net_device *dev,
-                              struct ethtool_ringparam *p)
+                              struct ethtool_ringparam *p,
+                              struct kernel_ethtool_ringparam *kernel_p,
+                              struct netlink_ext_ack *extack)
 {
        struct skge_port *skge = netdev_priv(dev);
        int err = 0;
 
 }
 
 static void sky2_get_ringparam(struct net_device *dev,
-                              struct ethtool_ringparam *ering)
+                              struct ethtool_ringparam *ering,
+                              struct kernel_ethtool_ringparam *kernel_ering,
+                              struct netlink_ext_ack *extack)
 {
        struct sky2_port *sky2 = netdev_priv(dev);
 
 }
 
 static int sky2_set_ringparam(struct net_device *dev,
-                             struct ethtool_ringparam *ering)
+                             struct ethtool_ringparam *ering,
+                             struct kernel_ethtool_ringparam *kernel_ering,
+                             struct netlink_ext_ack *extack)
 {
        struct sky2_port *sky2 = netdev_priv(dev);
 
 
 }
 
 static int mlx4_en_set_ringparam(struct net_device *dev,
-                                struct ethtool_ringparam *param)
+                                struct ethtool_ringparam *param,
+                                struct kernel_ethtool_ringparam *kernel_param,
+                                struct netlink_ext_ack *extack)
 {
        struct mlx4_en_priv *priv = netdev_priv(dev);
        struct mlx4_en_dev *mdev = priv->mdev;
 }
 
 static void mlx4_en_get_ringparam(struct net_device *dev,
-                                 struct ethtool_ringparam *param)
+                                 struct ethtool_ringparam *param,
+                                 struct kernel_ethtool_ringparam *kernel_param,
+                                 struct netlink_ext_ack *extack)
 {
        struct mlx4_en_priv *priv = netdev_priv(dev);
 
 
 }
 
 static void mlx5e_get_ringparam(struct net_device *dev,
-                               struct ethtool_ringparam *param)
+                               struct ethtool_ringparam *param,
+                               struct kernel_ethtool_ringparam *kernel_param,
+                               struct netlink_ext_ack *extack)
 {
        struct mlx5e_priv *priv = netdev_priv(dev);
 
 }
 
 static int mlx5e_set_ringparam(struct net_device *dev,
-                              struct ethtool_ringparam *param)
+                              struct ethtool_ringparam *param,
+                              struct kernel_ethtool_ringparam *kernel_param,
+                              struct netlink_ext_ack *extack)
 {
        struct mlx5e_priv *priv = netdev_priv(dev);
 
 
        }
 }
 
-static void mlx5e_rep_get_ringparam(struct net_device *dev,
-                               struct ethtool_ringparam *param)
+static void
+mlx5e_rep_get_ringparam(struct net_device *dev,
+                       struct ethtool_ringparam *param,
+                       struct kernel_ethtool_ringparam *kernel_param,
+                       struct netlink_ext_ack *extack)
 {
        struct mlx5e_priv *priv = netdev_priv(dev);
 
        mlx5e_ethtool_get_ringparam(priv, param);
 }
 
-static int mlx5e_rep_set_ringparam(struct net_device *dev,
-                              struct ethtool_ringparam *param)
+static int
+mlx5e_rep_set_ringparam(struct net_device *dev,
+                       struct ethtool_ringparam *param,
+                       struct kernel_ethtool_ringparam *kernel_param,
+                       struct netlink_ext_ack *extack)
 {
        struct mlx5e_priv *priv = netdev_priv(dev);
 
 
 }
 
 static int mlx5i_set_ringparam(struct net_device *dev,
-                              struct ethtool_ringparam *param)
+                              struct ethtool_ringparam *param,
+                              struct kernel_ethtool_ringparam *kernel_param,
+                              struct netlink_ext_ack *extack)
 {
        struct mlx5e_priv *priv = mlx5i_epriv(dev);
 
 }
 
 static void mlx5i_get_ringparam(struct net_device *dev,
-                               struct ethtool_ringparam *param)
+                               struct ethtool_ringparam *param,
+                               struct kernel_ethtool_ringparam *kernel_param,
+                               struct netlink_ext_ack *extack)
 {
        struct mlx5e_priv *priv = mlx5i_epriv(dev);
 
 
        memcpy_fromio(p, priv->base, MLXBF_GIGE_MMIO_REG_SZ);
 }
 
-static void mlxbf_gige_get_ringparam(struct net_device *netdev,
-                                    struct ethtool_ringparam *ering)
+static void
+mlxbf_gige_get_ringparam(struct net_device *netdev,
+                        struct ethtool_ringparam *ering,
+                        struct kernel_ethtool_ringparam *kernel_ering,
+                        struct netlink_ext_ack *extack)
 {
        struct mlxbf_gige *priv = netdev_priv(netdev);
 
 
  * netdev_get_ringparam - get tx/rx ring parameters
  * @dev:       Network device.
  * @ring:      Ethtool RING settings data structure.
+ * @kernel_ring:       Ethtool external RING settings data structure.
+ * @extack:    Netlink handle.
  *
  * This procedure returns the TX/RX ring settings.
  */
 static void netdev_get_ringparam(struct net_device *dev,
-       struct ethtool_ringparam *ring)
+                                struct ethtool_ringparam *ring,
+                                struct kernel_ethtool_ringparam *kernel_ring,
+                                struct netlink_ext_ack *extack)
 {
        struct dev_priv *priv = netdev_priv(dev);
        struct dev_info *hw_priv = priv->adapter;
 
 
 static void
 myri10ge_get_ringparam(struct net_device *netdev,
-                      struct ethtool_ringparam *ring)
+                      struct ethtool_ringparam *ring,
+                      struct kernel_ethtool_ringparam *kernel_ring,
+                      struct netlink_ext_ack *extack)
 {
        struct myri10ge_priv *mgp = netdev_priv(netdev);
 
 
        return 0;
 }
 
-static void s2io_ethtool_gringparam(struct net_device *dev,
-                                   struct ethtool_ringparam *ering)
+static void
+s2io_ethtool_gringparam(struct net_device *dev,
+                       struct ethtool_ringparam *ering,
+                       struct kernel_ethtool_ringparam *kernel_ering,
+                       struct netlink_ext_ack *extack)
 {
        struct s2io_nic *sp = netdev_priv(dev);
        int i, tx_desc_count = 0, rx_desc_count = 0;
 
 }
 
 static void nfp_net_get_ringparam(struct net_device *netdev,
-                                 struct ethtool_ringparam *ring)
+                                 struct ethtool_ringparam *ring,
+                                 struct kernel_ethtool_ringparam *kernel_ring,
+                                 struct netlink_ext_ack *extack)
 {
        struct nfp_net *nn = netdev_priv(netdev);
 
 }
 
 static int nfp_net_set_ringparam(struct net_device *netdev,
-                                struct ethtool_ringparam *ring)
+                                struct ethtool_ringparam *ring,
+                                struct kernel_ethtool_ringparam *kernel_ring,
+                                struct netlink_ext_ack *extack)
 {
        struct nfp_net *nn = netdev_priv(netdev);
        u32 rxd_cnt, txd_cnt;
 
        return ret;
 }
 
-static void nv_get_ringparam(struct net_device *dev, struct ethtool_ringparam* ring)
+static void nv_get_ringparam(struct net_device *dev,
+                            struct ethtool_ringparam *ring,
+                            struct kernel_ethtool_ringparam *kernel_ring,
+                            struct netlink_ext_ack *extack)
 {
        struct fe_priv *np = netdev_priv(dev);
 
        ring->tx_pending = np->tx_ring_size;
 }
 
-static int nv_set_ringparam(struct net_device *dev, struct ethtool_ringparam* ring)
+static int nv_set_ringparam(struct net_device *dev,
+                           struct ethtool_ringparam *ring,
+                           struct kernel_ethtool_ringparam *kernel_ring,
+                           struct netlink_ext_ack *extack)
 {
        struct fe_priv *np = netdev_priv(dev);
        u8 __iomem *base = get_hwbase(dev);
 
  * pch_gbe_get_ringparam - Report ring sizes
  * @netdev:  Network interface device structure
  * @ring:    Ring param structure
+ * @kernel_ring:       Ring external param structure
+ * @extack:    netlink handle
  */
 static void pch_gbe_get_ringparam(struct net_device *netdev,
-                                       struct ethtool_ringparam *ring)
+                                 struct ethtool_ringparam *ring,
+                                 struct kernel_ethtool_ringparam *kernel_ring,
+                                 struct netlink_ext_ack *extack)
 {
        struct pch_gbe_adapter *adapter = netdev_priv(netdev);
        struct pch_gbe_tx_ring *txdr = adapter->tx_ring;
  * pch_gbe_set_ringparam - Set ring sizes
  * @netdev:  Network interface device structure
  * @ring:    Ring param structure
+ * @kernel_ring:       Ring external param structure
+ * @extack:    netlink handle
  * Returns
  *     0:                      Successful.
  *     Negative value:         Failed.
  */
 static int pch_gbe_set_ringparam(struct net_device *netdev,
-                                       struct ethtool_ringparam *ring)
+                                struct ethtool_ringparam *ring,
+                                struct kernel_ethtool_ringparam *kernel_ring,
+                                struct netlink_ext_ack *extack)
 {
        struct pch_gbe_adapter *adapter = netdev_priv(netdev);
        struct pch_gbe_tx_ring *txdr, *tx_old;
 
 
 static void
 pasemi_mac_ethtool_get_ringparam(struct net_device *netdev,
-                                struct ethtool_ringparam *ering)
+                                struct ethtool_ringparam *ering,
+                                struct kernel_ethtool_ringparam *kernel_ering,
+                                struct netlink_ext_ack *extack)
 {
        struct pasemi_mac *mac = netdev_priv(netdev);
 
 
 }
 
 static void ionic_get_ringparam(struct net_device *netdev,
-                               struct ethtool_ringparam *ring)
+                               struct ethtool_ringparam *ring,
+                               struct kernel_ethtool_ringparam *kernel_ring,
+                               struct netlink_ext_ack *extack)
 {
        struct ionic_lif *lif = netdev_priv(netdev);
 
 }
 
 static int ionic_set_ringparam(struct net_device *netdev,
-                              struct ethtool_ringparam *ring)
+                              struct ethtool_ringparam *ring,
+                              struct kernel_ethtool_ringparam *kernel_ring,
+                              struct netlink_ext_ack *extack)
 {
        struct ionic_lif *lif = netdev_priv(netdev);
        struct ionic_queue_params qparam;
 
 
 static void
 netxen_nic_get_ringparam(struct net_device *dev,
-               struct ethtool_ringparam *ring)
+                        struct ethtool_ringparam *ring,
+                        struct kernel_ethtool_ringparam *kernel_ring,
+                        struct netlink_ext_ack *extack)
 {
        struct netxen_adapter *adapter = netdev_priv(dev);
 
 
 static int
 netxen_nic_set_ringparam(struct net_device *dev,
-               struct ethtool_ringparam *ring)
+                        struct ethtool_ringparam *ring,
+                        struct kernel_ethtool_ringparam *kernel_ring,
+                        struct netlink_ext_ack *extack)
 {
        struct netxen_adapter *adapter = netdev_priv(dev);
        u16 max_rcv_desc = MAX_RCV_DESCRIPTORS_10G;
 
 }
 
 static void qede_get_ringparam(struct net_device *dev,
-                              struct ethtool_ringparam *ering)
+                              struct ethtool_ringparam *ering,
+                              struct kernel_ethtool_ringparam *kernel_ering,
+                              struct netlink_ext_ack *extack)
 {
        struct qede_dev *edev = netdev_priv(dev);
 
 }
 
 static int qede_set_ringparam(struct net_device *dev,
-                             struct ethtool_ringparam *ering)
+                             struct ethtool_ringparam *ering,
+                             struct kernel_ethtool_ringparam *kernel_ering,
+                             struct netlink_ext_ack *extack)
 {
        struct qede_dev *edev = netdev_priv(dev);
 
 
 
 static void
 qlcnic_get_ringparam(struct net_device *dev,
-               struct ethtool_ringparam *ring)
+                    struct ethtool_ringparam *ring,
+                    struct kernel_ethtool_ringparam *kernel_ring,
+                    struct netlink_ext_ack *extack)
 {
        struct qlcnic_adapter *adapter = netdev_priv(dev);
 
 
 static int
 qlcnic_set_ringparam(struct net_device *dev,
-               struct ethtool_ringparam *ring)
+                    struct ethtool_ringparam *ring,
+                    struct kernel_ethtool_ringparam *kernel_ring,
+                    struct netlink_ext_ack *extack)
 {
        struct qlcnic_adapter *adapter = netdev_priv(dev);
        u16 num_rxd, num_jumbo_rxd, num_txd;
 
 }
 
 static void emac_get_ringparam(struct net_device *netdev,
-                              struct ethtool_ringparam *ring)
+                              struct ethtool_ringparam *ring,
+                              struct kernel_ethtool_ringparam *kernel_ring,
+                              struct netlink_ext_ack *extack)
 {
        struct emac_adapter *adpt = netdev_priv(netdev);
 
 }
 
 static int emac_set_ringparam(struct net_device *netdev,
-                             struct ethtool_ringparam *ring)
+                             struct ethtool_ringparam *ring,
+                             struct kernel_ethtool_ringparam *kernel_ring,
+                             struct netlink_ext_ack *extack)
 {
        struct emac_adapter *adpt = netdev_priv(netdev);
 
 
 }
 
 static void
-qcaspi_get_ringparam(struct net_device *dev, struct ethtool_ringparam *ring)
+qcaspi_get_ringparam(struct net_device *dev, struct ethtool_ringparam *ring,
+                    struct kernel_ethtool_ringparam *kernel_ring,
+                    struct netlink_ext_ack *extack)
 {
        struct qcaspi *qca = netdev_priv(dev);
 
 }
 
 static int
-qcaspi_set_ringparam(struct net_device *dev, struct ethtool_ringparam *ring)
+qcaspi_set_ringparam(struct net_device *dev, struct ethtool_ringparam *ring,
+                    struct kernel_ethtool_ringparam *kernel_ring,
+                    struct netlink_ext_ack *extack)
 {
        const struct net_device_ops *ops = dev->netdev_ops;
        struct qcaspi *qca = netdev_priv(dev);
 
 }
 
 static void cp_get_ringparam(struct net_device *dev,
-                               struct ethtool_ringparam *ring)
+                            struct ethtool_ringparam *ring,
+                            struct kernel_ethtool_ringparam *kernel_ring,
+                            struct netlink_ext_ack *extack)
 {
        ring->rx_max_pending = CP_RX_RING_SIZE;
        ring->tx_max_pending = CP_TX_RING_SIZE;
 
 }
 
 static void rtl8169_get_ringparam(struct net_device *dev,
-                                 struct ethtool_ringparam *data)
+                                 struct ethtool_ringparam *data,
+                                 struct kernel_ethtool_ringparam *kernel_data,
+                                 struct netlink_ext_ack *extack)
 {
        data->rx_max_pending = NUM_RX_DESC;
        data->rx_pending = NUM_RX_DESC;
 
 }
 
 static void ravb_get_ringparam(struct net_device *ndev,
-                              struct ethtool_ringparam *ring)
+                              struct ethtool_ringparam *ring,
+                              struct kernel_ethtool_ringparam *kernel_ring,
+                              struct netlink_ext_ack *extack)
 {
        struct ravb_private *priv = netdev_priv(ndev);
 
 }
 
 static int ravb_set_ringparam(struct net_device *ndev,
-                             struct ethtool_ringparam *ring)
+                             struct ethtool_ringparam *ring,
+                             struct kernel_ethtool_ringparam *kernel_ring,
+                             struct netlink_ext_ack *extack)
 {
        struct ravb_private *priv = netdev_priv(ndev);
        const struct ravb_hw_info *info = priv->info;
 
 }
 
 static void sh_eth_get_ringparam(struct net_device *ndev,
-                                struct ethtool_ringparam *ring)
+                                struct ethtool_ringparam *ring,
+                                struct kernel_ethtool_ringparam *kernel_ring,
+                                struct netlink_ext_ack *extack)
 {
        struct sh_eth_private *mdp = netdev_priv(ndev);
 
 }
 
 static int sh_eth_set_ringparam(struct net_device *ndev,
-                               struct ethtool_ringparam *ring)
+                               struct ethtool_ringparam *ring,
+                               struct kernel_ethtool_ringparam *kernel_ring,
+                               struct netlink_ext_ack *extack)
 {
        struct sh_eth_private *mdp = netdev_priv(ndev);
        int ret;
 
 /* This is the maximum number of descriptor rings supported by the QDMA */
 #define EFX_EF100_MAX_DMAQ_SIZE 16384UL
 
-static void ef100_ethtool_get_ringparam(struct net_device *net_dev,
-                                       struct ethtool_ringparam *ring)
+static void
+ef100_ethtool_get_ringparam(struct net_device *net_dev,
+                           struct ethtool_ringparam *ring,
+                           struct kernel_ethtool_ringparam *kernel_ring,
+                           struct netlink_ext_ack *extack)
 {
        struct efx_nic *efx = netdev_priv(net_dev);
 
 
        return 0;
 }
 
-static void efx_ethtool_get_ringparam(struct net_device *net_dev,
-                                     struct ethtool_ringparam *ring)
+static void
+efx_ethtool_get_ringparam(struct net_device *net_dev,
+                         struct ethtool_ringparam *ring,
+                         struct kernel_ethtool_ringparam *kernel_ring,
+                         struct netlink_ext_ack *extack)
 {
        struct efx_nic *efx = netdev_priv(net_dev);
 
        ring->tx_pending = efx->txq_entries;
 }
 
-static int efx_ethtool_set_ringparam(struct net_device *net_dev,
-                                    struct ethtool_ringparam *ring)
+static int
+efx_ethtool_set_ringparam(struct net_device *net_dev,
+                         struct ethtool_ringparam *ring,
+                         struct kernel_ethtool_ringparam *kernel_ring,
+                         struct netlink_ext_ack *extack)
 {
        struct efx_nic *efx = netdev_priv(net_dev);
        u32 txq_entries;
 
        return 0;
 }
 
-static void ef4_ethtool_get_ringparam(struct net_device *net_dev,
-                                     struct ethtool_ringparam *ring)
+static void
+ef4_ethtool_get_ringparam(struct net_device *net_dev,
+                         struct ethtool_ringparam *ring,
+                         struct kernel_ethtool_ringparam *kernel_ring,
+                         struct netlink_ext_ack *extack)
 {
        struct ef4_nic *efx = netdev_priv(net_dev);
 
        ring->tx_pending = efx->txq_entries;
 }
 
-static int ef4_ethtool_set_ringparam(struct net_device *net_dev,
-                                    struct ethtool_ringparam *ring)
+static int
+ef4_ethtool_set_ringparam(struct net_device *net_dev,
+                         struct ethtool_ringparam *ring,
+                         struct kernel_ethtool_ringparam *kernel_ring,
+                         struct netlink_ext_ack *extack)
 {
        struct ef4_nic *efx = netdev_priv(net_dev);
        u32 txq_entries;
 
 }
 
 static void stmmac_get_ringparam(struct net_device *netdev,
-                                struct ethtool_ringparam *ring)
+                                struct ethtool_ringparam *ring,
+                                struct kernel_ethtool_ringparam *kernel_ring,
+                                struct netlink_ext_ack *extack)
 {
        struct stmmac_priv *priv = netdev_priv(netdev);
 
 }
 
 static int stmmac_set_ringparam(struct net_device *netdev,
-                               struct ethtool_ringparam *ring)
+                               struct ethtool_ringparam *ring,
+                               struct kernel_ethtool_ringparam *kernel_ring,
+                               struct netlink_ext_ack *extack)
 {
        if (ring->rx_mini_pending || ring->rx_jumbo_pending ||
            ring->rx_pending < DMA_MIN_RX_SIZE ||
 
  * bdx_get_ringparam - report ring sizes
  * @netdev
  * @ring
+ * @kernel_ring
+ * @extack
  */
 static void
-bdx_get_ringparam(struct net_device *netdev, struct ethtool_ringparam *ring)
+bdx_get_ringparam(struct net_device *netdev, struct ethtool_ringparam *ring,
+                 struct kernel_ethtool_ringparam *kernel_ring,
+                 struct netlink_ext_ack *extack)
 {
        struct bdx_priv *priv = netdev_priv(netdev);
 
  * bdx_set_ringparam - set ring sizes
  * @netdev
  * @ring
+ * @kernel_ring
+ * @extack
  */
 static int
-bdx_set_ringparam(struct net_device *netdev, struct ethtool_ringparam *ring)
+bdx_set_ringparam(struct net_device *netdev, struct ethtool_ringparam *ring,
+                 struct kernel_ethtool_ringparam *kernel_ring,
+                 struct netlink_ext_ack *extack)
 {
        struct bdx_priv *priv = netdev_priv(netdev);
        int rx_size = 0;
 
        return am65_cpsw_nuss_update_tx_chns(common, chs->tx_count);
 }
 
-static void am65_cpsw_get_ringparam(struct net_device *ndev,
-                                   struct ethtool_ringparam *ering)
+static void
+am65_cpsw_get_ringparam(struct net_device *ndev,
+                       struct ethtool_ringparam *ering,
+                       struct kernel_ethtool_ringparam *kernel_ering,
+                       struct netlink_ext_ack *extack)
 {
        struct am65_cpsw_common *common = am65_ndev_to_common(ndev);
 
 
 }
 
 static void cpmac_get_ringparam(struct net_device *dev,
-                                               struct ethtool_ringparam *ring)
+                               struct ethtool_ringparam *ring,
+                               struct kernel_ethtool_ringparam *kernel_ring,
+                               struct netlink_ext_ack *extack)
 {
        struct cpmac_priv *priv = netdev_priv(dev);
 
 }
 
 static int cpmac_set_ringparam(struct net_device *dev,
-                                               struct ethtool_ringparam *ring)
+                              struct ethtool_ringparam *ring,
+                              struct kernel_ethtool_ringparam *kernel_ring,
+                              struct netlink_ext_ack *extack)
 {
        struct cpmac_priv *priv = netdev_priv(dev);
 
 
 }
 
 void cpsw_get_ringparam(struct net_device *ndev,
-                       struct ethtool_ringparam *ering)
+                       struct ethtool_ringparam *ering,
+                       struct kernel_ethtool_ringparam *kernel_ering,
+                       struct netlink_ext_ack *extack)
 {
        struct cpsw_priv *priv = netdev_priv(ndev);
        struct cpsw_common *cpsw = priv->cpsw;
 }
 
 int cpsw_set_ringparam(struct net_device *ndev,
-                      struct ethtool_ringparam *ering)
+                      struct ethtool_ringparam *ering,
+                      struct kernel_ethtool_ringparam *kernel_ering,
+                      struct netlink_ext_ack *extack)
 {
        struct cpsw_common *cpsw = ndev_to_cpsw(ndev);
        int descs_num, ret;
 
 int cpsw_set_eee(struct net_device *ndev, struct ethtool_eee *edata);
 int cpsw_nway_reset(struct net_device *ndev);
 void cpsw_get_ringparam(struct net_device *ndev,
-                       struct ethtool_ringparam *ering);
+                       struct ethtool_ringparam *ering,
+                       struct kernel_ethtool_ringparam *kernel_ering,
+                       struct netlink_ext_ack *extack);
 int cpsw_set_ringparam(struct net_device *ndev,
-                      struct ethtool_ringparam *ering);
+                      struct ethtool_ringparam *ering,
+                      struct kernel_ethtool_ringparam *kernel_ering,
+                      struct netlink_ext_ack *extack);
 int cpsw_set_channels_common(struct net_device *ndev,
                             struct ethtool_channels *chs,
                             cpdma_handler_fn rx_handler);
 
 
 static void
 spider_net_ethtool_get_ringparam(struct net_device *netdev,
-                                struct ethtool_ringparam *ering)
+                                struct ethtool_ringparam *ering,
+                                struct kernel_ethtool_ringparam *kernel_ering,
+                                struct netlink_ext_ack *extack)
 {
        struct spider_net_card *card = netdev_priv(netdev);
 
 
  * ethtool support
  */
 
-static void ll_temac_ethtools_get_ringparam(struct net_device *ndev,
-                                           struct ethtool_ringparam *ering)
+static void
+ll_temac_ethtools_get_ringparam(struct net_device *ndev,
+                               struct ethtool_ringparam *ering,
+                               struct kernel_ethtool_ringparam *kernel_ering,
+                               struct netlink_ext_ack *extack)
 {
        struct temac_local *lp = netdev_priv(ndev);
 
        ering->tx_pending = lp->tx_bd_num;
 }
 
-static int ll_temac_ethtools_set_ringparam(struct net_device *ndev,
-                                          struct ethtool_ringparam *ering)
+static int
+ll_temac_ethtools_set_ringparam(struct net_device *ndev,
+                               struct ethtool_ringparam *ering,
+                               struct kernel_ethtool_ringparam *kernel_ering,
+                               struct netlink_ext_ack *extack)
 {
        struct temac_local *lp = netdev_priv(ndev);
 
 
        data[39] = axienet_dma_in32(lp, XAXIDMA_RX_TDESC_OFFSET);
 }
 
-static void axienet_ethtools_get_ringparam(struct net_device *ndev,
-                                          struct ethtool_ringparam *ering)
+static void
+axienet_ethtools_get_ringparam(struct net_device *ndev,
+                              struct ethtool_ringparam *ering,
+                              struct kernel_ethtool_ringparam *kernel_ering,
+                              struct netlink_ext_ack *extack)
 {
        struct axienet_local *lp = netdev_priv(ndev);
 
        ering->tx_pending = lp->tx_bd_num;
 }
 
-static int axienet_ethtools_set_ringparam(struct net_device *ndev,
-                                         struct ethtool_ringparam *ering)
+static int
+axienet_ethtools_set_ringparam(struct net_device *ndev,
+                              struct ethtool_ringparam *ering,
+                              struct kernel_ethtool_ringparam *kernel_ering,
+                              struct netlink_ext_ack *extack)
 {
        struct axienet_local *lp = netdev_priv(ndev);
 
 
 }
 
 static void netvsc_get_ringparam(struct net_device *ndev,
-                                struct ethtool_ringparam *ring)
+                                struct ethtool_ringparam *ring,
+                                struct kernel_ethtool_ringparam *kernel_ring,
+                                struct netlink_ext_ack *extack)
 {
        struct net_device_context *ndevctx = netdev_priv(ndev);
        struct netvsc_device *nvdev = rtnl_dereference(ndevctx->nvdev);
 }
 
 static int netvsc_set_ringparam(struct net_device *ndev,
-                               struct ethtool_ringparam *ring)
+                               struct ethtool_ringparam *ring,
+                               struct kernel_ethtool_ringparam *kernel_ring,
+                               struct netlink_ext_ack *extack)
 {
        struct net_device_context *ndevctx = netdev_priv(ndev);
        struct netvsc_device *nvdev = rtnl_dereference(ndevctx->nvdev);
 
 }
 
 static void nsim_get_ringparam(struct net_device *dev,
-                              struct ethtool_ringparam *ring)
+                              struct ethtool_ringparam *ring,
+                              struct kernel_ethtool_ringparam *kernel_ring,
+                              struct netlink_ext_ack *extack)
 {
        struct netdevsim *ns = netdev_priv(dev);
 
 }
 
 static int nsim_set_ringparam(struct net_device *dev,
-                             struct ethtool_ringparam *ring)
+                             struct ethtool_ringparam *ring,
+                             struct kernel_ethtool_ringparam *kernel_ring,
+                             struct netlink_ext_ack *extack)
 {
        struct netdevsim *ns = netdev_priv(dev);
 
 
 }
 
 static void rtl8152_get_ringparam(struct net_device *netdev,
-                                 struct ethtool_ringparam *ring)
+                                 struct ethtool_ringparam *ring,
+                                 struct kernel_ethtool_ringparam *kernel_ring,
+                                 struct netlink_ext_ack *extack)
 {
        struct r8152 *tp = netdev_priv(netdev);
 
 }
 
 static int rtl8152_set_ringparam(struct net_device *netdev,
-                                struct ethtool_ringparam *ring)
+                                struct ethtool_ringparam *ring,
+                                struct kernel_ethtool_ringparam *kernel_ring,
+                                struct netlink_ext_ack *extack)
 {
        struct r8152 *tp = netdev_priv(netdev);
 
 
 }
 
 static void virtnet_get_ringparam(struct net_device *dev,
-                               struct ethtool_ringparam *ring)
+                                 struct ethtool_ringparam *ring,
+                                 struct kernel_ethtool_ringparam *kernel_ring,
+                                 struct netlink_ext_ack *extack)
 {
        struct virtnet_info *vi = netdev_priv(dev);
 
 
        return 0;
 }
 
-
 static void
 vmxnet3_get_ringparam(struct net_device *netdev,
-                     struct ethtool_ringparam *param)
+                     struct ethtool_ringparam *param,
+                     struct kernel_ethtool_ringparam *kernel_param,
+                     struct netlink_ext_ack *extack)
 {
        struct vmxnet3_adapter *adapter = netdev_priv(netdev);
 
        param->rx_jumbo_pending = adapter->rx_ring2_size;
 }
 
-
 static int
 vmxnet3_set_ringparam(struct net_device *netdev,
-                     struct ethtool_ringparam *param)
+                     struct ethtool_ringparam *param,
+                     struct kernel_ethtool_ringparam *kernel_param,
+                     struct netlink_ext_ack *extack)
 {
        struct vmxnet3_adapter *adapter = netdev_priv(netdev);
        u32 new_tx_ring_size, new_rx_ring_size, new_rx_ring2_size;
 
 }
 
 static void qeth_get_ringparam(struct net_device *dev,
-                              struct ethtool_ringparam *param)
+                              struct ethtool_ringparam *param,
+                              struct kernel_ethtool_ringparam *kernel_param,
+                              struct netlink_ext_ack *extack)
 {
        struct qeth_card *card = dev->ml_priv;
 
 
                                struct kernel_ethtool_coalesce *,
                                struct netlink_ext_ack *);
        void    (*get_ringparam)(struct net_device *,
-                                struct ethtool_ringparam *);
+                                struct ethtool_ringparam *,
+                                struct kernel_ethtool_ringparam *,
+                                struct netlink_ext_ack *);
        int     (*set_ringparam)(struct net_device *,
-                                struct ethtool_ringparam *);
+                                struct ethtool_ringparam *,
+                                struct kernel_ethtool_ringparam *,
+                                struct netlink_ext_ack *);
        void    (*get_pause_stats)(struct net_device *dev,
                                   struct ethtool_pause_stats *pause_stats);
        void    (*get_pauseparam)(struct net_device *,
 
 static int ethtool_get_ringparam(struct net_device *dev, void __user *useraddr)
 {
        struct ethtool_ringparam ringparam = { .cmd = ETHTOOL_GRINGPARAM };
+       struct kernel_ethtool_ringparam kernel_ringparam = {};
 
        if (!dev->ethtool_ops->get_ringparam)
                return -EOPNOTSUPP;
 
-       dev->ethtool_ops->get_ringparam(dev, &ringparam);
+       dev->ethtool_ops->get_ringparam(dev, &ringparam,
+                                       &kernel_ringparam, NULL);
 
        if (copy_to_user(useraddr, &ringparam, sizeof(ringparam)))
                return -EFAULT;
 static int ethtool_set_ringparam(struct net_device *dev, void __user *useraddr)
 {
        struct ethtool_ringparam ringparam, max = { .cmd = ETHTOOL_GRINGPARAM };
+       struct kernel_ethtool_ringparam kernel_ringparam;
        int ret;
 
        if (!dev->ethtool_ops->set_ringparam || !dev->ethtool_ops->get_ringparam)
        if (copy_from_user(&ringparam, useraddr, sizeof(ringparam)))
                return -EFAULT;
 
-       dev->ethtool_ops->get_ringparam(dev, &max);
+       dev->ethtool_ops->get_ringparam(dev, &max, &kernel_ringparam, NULL);
 
        /* ensure new ring parameters are within the maximums */
        if (ringparam.rx_pending > max.rx_max_pending ||
            ringparam.tx_pending > max.tx_max_pending)
                return -EINVAL;
 
-       ret = dev->ethtool_ops->set_ringparam(dev, &ringparam);
+       ret = dev->ethtool_ops->set_ringparam(dev, &ringparam,
+                                             &kernel_ringparam, NULL);
        if (!ret)
                ethtool_notify(dev, ETHTOOL_MSG_RINGS_NTF, NULL);
        return ret;
 
                              struct genl_info *info)
 {
        struct rings_reply_data *data = RINGS_REPDATA(reply_base);
+       struct netlink_ext_ack *extack = info ? info->extack : NULL;
        struct net_device *dev = reply_base->dev;
        int ret;
 
        ret = ethnl_ops_begin(dev);
        if (ret < 0)
                return ret;
-       dev->ethtool_ops->get_ringparam(dev, &data->ringparam);
+       dev->ethtool_ops->get_ringparam(dev, &data->ringparam,
+                                       &data->kernel_ringparam, extack);
        ethnl_ops_complete(dev);
 
        return 0;
        ret = ethnl_ops_begin(dev);
        if (ret < 0)
                goto out_rtnl;
-       ops->get_ringparam(dev, &ringparam);
+       ops->get_ringparam(dev, &ringparam, &kernel_ringparam, info->extack);
 
        ethnl_update_u32(&ringparam.rx_pending, tb[ETHTOOL_A_RINGS_RX], &mod);
        ethnl_update_u32(&ringparam.rx_mini_pending,
                goto out_ops;
        }
 
-       ret = dev->ethtool_ops->set_ringparam(dev, &ringparam);
+       ret = dev->ethtool_ops->set_ringparam(dev, &ringparam,
+                                             &kernel_ringparam, info->extack);
        if (ret < 0)
                goto out_ops;
        ethtool_notify(dev, ETHTOOL_MSG_RINGS_NTF, NULL);
 
 #include "driver-ops.h"
 
 static int ieee80211_set_ringparam(struct net_device *dev,
-                                  struct ethtool_ringparam *rp)
+                                  struct ethtool_ringparam *rp,
+                                  struct kernel_ethtool_ringparam *kernel_rp,
+                                  struct netlink_ext_ack *extack)
 {
        struct ieee80211_local *local = wiphy_priv(dev->ieee80211_ptr->wiphy);
 
 }
 
 static void ieee80211_get_ringparam(struct net_device *dev,
-                                   struct ethtool_ringparam *rp)
+                                   struct ethtool_ringparam *rp,
+                                   struct kernel_ethtool_ringparam *kernel_rp,
+                                   struct netlink_ext_ack *extack)
 {
        struct ieee80211_local *local = wiphy_priv(dev->ieee80211_ptr->wiphy);