Loading include/net/cfg80211.h +8 −0 Original line number Original line Diff line number Diff line Loading @@ -1197,6 +1197,10 @@ struct cfg80211_pmksa { * (also see nl80211.h @NL80211_ATTR_WIPHY_ANTENNA_TX). * (also see nl80211.h @NL80211_ATTR_WIPHY_ANTENNA_TX). * * * @get_antenna: Get current antenna configuration from device (tx_ant, rx_ant). * @get_antenna: Get current antenna configuration from device (tx_ant, rx_ant). * * @set_ringparam: Set tx and rx ring sizes. * * @get_ringparam: Get tx and rx ring current and maximum sizes. */ */ struct cfg80211_ops { struct cfg80211_ops { int (*suspend)(struct wiphy *wiphy); int (*suspend)(struct wiphy *wiphy); Loading Loading @@ -1364,6 +1368,10 @@ struct cfg80211_ops { int (*set_antenna)(struct wiphy *wiphy, u32 tx_ant, u32 rx_ant); int (*set_antenna)(struct wiphy *wiphy, u32 tx_ant, u32 rx_ant); int (*get_antenna)(struct wiphy *wiphy, u32 *tx_ant, u32 *rx_ant); int (*get_antenna)(struct wiphy *wiphy, u32 *tx_ant, u32 *rx_ant); int (*set_ringparam)(struct wiphy *wiphy, u32 tx, u32 rx); void (*get_ringparam)(struct wiphy *wiphy, u32 *tx, u32 *tx_max, u32 *rx, u32 *rx_max); }; }; /* /* Loading net/wireless/ethtool.c +33 −0 Original line number Original line Diff line number Diff line #include <linux/utsname.h> #include <linux/utsname.h> #include <net/cfg80211.h> #include <net/cfg80211.h> #include "core.h" #include "ethtool.h" #include "ethtool.h" static void cfg80211_get_drvinfo(struct net_device *dev, static void cfg80211_get_drvinfo(struct net_device *dev, Loading Loading @@ -37,9 +38,41 @@ static void cfg80211_get_regs(struct net_device *dev, struct ethtool_regs *regs, regs->len = 0; regs->len = 0; } } static void cfg80211_get_ringparam(struct net_device *dev, struct ethtool_ringparam *rp) { struct wireless_dev *wdev = dev->ieee80211_ptr; struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); memset(rp, 0, sizeof(*rp)); if (rdev->ops->get_ringparam) rdev->ops->get_ringparam(wdev->wiphy, &rp->tx_pending, &rp->tx_max_pending, &rp->rx_pending, &rp->rx_max_pending); } static int cfg80211_set_ringparam(struct net_device *dev, struct ethtool_ringparam *rp) { struct wireless_dev *wdev = dev->ieee80211_ptr; struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); if (rp->rx_mini_pending != 0 || rp->rx_jumbo_pending != 0) return -EINVAL; if (rdev->ops->set_ringparam) return rdev->ops->set_ringparam(wdev->wiphy, rp->tx_pending, rp->rx_pending); return -ENOTSUPP; } const struct ethtool_ops cfg80211_ethtool_ops = { const struct ethtool_ops cfg80211_ethtool_ops = { .get_drvinfo = cfg80211_get_drvinfo, .get_drvinfo = cfg80211_get_drvinfo, .get_regs_len = cfg80211_get_regs_len, .get_regs_len = cfg80211_get_regs_len, .get_regs = cfg80211_get_regs, .get_regs = cfg80211_get_regs, .get_link = ethtool_op_get_link, .get_link = ethtool_op_get_link, .get_ringparam = cfg80211_get_ringparam, .set_ringparam = cfg80211_set_ringparam, }; }; Loading
include/net/cfg80211.h +8 −0 Original line number Original line Diff line number Diff line Loading @@ -1197,6 +1197,10 @@ struct cfg80211_pmksa { * (also see nl80211.h @NL80211_ATTR_WIPHY_ANTENNA_TX). * (also see nl80211.h @NL80211_ATTR_WIPHY_ANTENNA_TX). * * * @get_antenna: Get current antenna configuration from device (tx_ant, rx_ant). * @get_antenna: Get current antenna configuration from device (tx_ant, rx_ant). * * @set_ringparam: Set tx and rx ring sizes. * * @get_ringparam: Get tx and rx ring current and maximum sizes. */ */ struct cfg80211_ops { struct cfg80211_ops { int (*suspend)(struct wiphy *wiphy); int (*suspend)(struct wiphy *wiphy); Loading Loading @@ -1364,6 +1368,10 @@ struct cfg80211_ops { int (*set_antenna)(struct wiphy *wiphy, u32 tx_ant, u32 rx_ant); int (*set_antenna)(struct wiphy *wiphy, u32 tx_ant, u32 rx_ant); int (*get_antenna)(struct wiphy *wiphy, u32 *tx_ant, u32 *rx_ant); int (*get_antenna)(struct wiphy *wiphy, u32 *tx_ant, u32 *rx_ant); int (*set_ringparam)(struct wiphy *wiphy, u32 tx, u32 rx); void (*get_ringparam)(struct wiphy *wiphy, u32 *tx, u32 *tx_max, u32 *rx, u32 *rx_max); }; }; /* /* Loading
net/wireless/ethtool.c +33 −0 Original line number Original line Diff line number Diff line #include <linux/utsname.h> #include <linux/utsname.h> #include <net/cfg80211.h> #include <net/cfg80211.h> #include "core.h" #include "ethtool.h" #include "ethtool.h" static void cfg80211_get_drvinfo(struct net_device *dev, static void cfg80211_get_drvinfo(struct net_device *dev, Loading Loading @@ -37,9 +38,41 @@ static void cfg80211_get_regs(struct net_device *dev, struct ethtool_regs *regs, regs->len = 0; regs->len = 0; } } static void cfg80211_get_ringparam(struct net_device *dev, struct ethtool_ringparam *rp) { struct wireless_dev *wdev = dev->ieee80211_ptr; struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); memset(rp, 0, sizeof(*rp)); if (rdev->ops->get_ringparam) rdev->ops->get_ringparam(wdev->wiphy, &rp->tx_pending, &rp->tx_max_pending, &rp->rx_pending, &rp->rx_max_pending); } static int cfg80211_set_ringparam(struct net_device *dev, struct ethtool_ringparam *rp) { struct wireless_dev *wdev = dev->ieee80211_ptr; struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); if (rp->rx_mini_pending != 0 || rp->rx_jumbo_pending != 0) return -EINVAL; if (rdev->ops->set_ringparam) return rdev->ops->set_ringparam(wdev->wiphy, rp->tx_pending, rp->rx_pending); return -ENOTSUPP; } const struct ethtool_ops cfg80211_ethtool_ops = { const struct ethtool_ops cfg80211_ethtool_ops = { .get_drvinfo = cfg80211_get_drvinfo, .get_drvinfo = cfg80211_get_drvinfo, .get_regs_len = cfg80211_get_regs_len, .get_regs_len = cfg80211_get_regs_len, .get_regs = cfg80211_get_regs, .get_regs = cfg80211_get_regs, .get_link = ethtool_op_get_link, .get_link = ethtool_op_get_link, .get_ringparam = cfg80211_get_ringparam, .set_ringparam = cfg80211_set_ringparam, }; };