Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

mac80211: add vif to testmode cmd

Pass the wdev from cfg80211 on to the driver as the vif
if given and it's valid for the driver.

Signed-off-by: David Spinadel <david.spinadel@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>

authored by

David Spinadel and committed by
Johannes Berg
52981cd7 fc73f11f

+19 -6
+1
drivers/net/wireless/mac80211_hwsim.c
··· 1364 1364 static int hwsim_fops_ps_write(void *dat, u64 val); 1365 1365 1366 1366 static int mac80211_hwsim_testmode_cmd(struct ieee80211_hw *hw, 1367 + struct ieee80211_vif *vif, 1367 1368 void *data, int len) 1368 1369 { 1369 1370 struct mac80211_hwsim_data *hwsim = hw->priv;
+2 -1
drivers/net/wireless/ti/wlcore/testmode.c
··· 356 356 return ret; 357 357 } 358 358 359 - int wl1271_tm_cmd(struct ieee80211_hw *hw, void *data, int len) 359 + int wl1271_tm_cmd(struct ieee80211_hw *hw, struct ieee80211_vif *vif, 360 + void *data, int len) 360 361 { 361 362 struct wl1271 *wl = hw->priv; 362 363 struct nlattr *tb[WL1271_TM_ATTR_MAX + 1];
+2 -1
drivers/net/wireless/ti/wlcore/testmode.h
··· 26 26 27 27 #include <net/mac80211.h> 28 28 29 - int wl1271_tm_cmd(struct ieee80211_hw *hw, void *data, int len); 29 + int wl1271_tm_cmd(struct ieee80211_hw *hw, struct ieee80211_vif *vif, 30 + void *data, int len); 30 31 31 32 #endif /* __WL1271_TESTMODE_H__ */
+4 -3
include/net/mac80211.h
··· 2516 2516 * in IEEE 802.11-2007 section 17.3.8.6 and modify ACK timeout 2517 2517 * accordingly. This callback is not required and may sleep. 2518 2518 * 2519 - * @testmode_cmd: Implement a cfg80211 test mode command. 2520 - * The callback can sleep. 2519 + * @testmode_cmd: Implement a cfg80211 test mode command. The passed @vif may 2520 + * be %NULL. The callback can sleep. 2521 2521 * @testmode_dump: Implement a cfg80211 test mode dump. The callback can sleep. 2522 2522 * 2523 2523 * @flush: Flush all pending frames from the hardware queue, making sure ··· 2778 2778 void (*rfkill_poll)(struct ieee80211_hw *hw); 2779 2779 void (*set_coverage_class)(struct ieee80211_hw *hw, u8 coverage_class); 2780 2780 #ifdef CONFIG_NL80211_TESTMODE 2781 - int (*testmode_cmd)(struct ieee80211_hw *hw, void *data, int len); 2781 + int (*testmode_cmd)(struct ieee80211_hw *hw, struct ieee80211_vif *vif, 2782 + void *data, int len); 2782 2783 int (*testmode_dump)(struct ieee80211_hw *hw, struct sk_buff *skb, 2783 2784 struct netlink_callback *cb, 2784 2785 void *data, int len);
+10 -1
net/mac80211/cfg.c
··· 2305 2305 void *data, int len) 2306 2306 { 2307 2307 struct ieee80211_local *local = wiphy_priv(wiphy); 2308 + struct ieee80211_vif *vif = NULL; 2308 2309 2309 2310 if (!local->ops->testmode_cmd) 2310 2311 return -EOPNOTSUPP; 2311 2312 2312 - return local->ops->testmode_cmd(&local->hw, data, len); 2313 + if (wdev) { 2314 + struct ieee80211_sub_if_data *sdata; 2315 + 2316 + sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); 2317 + if (sdata->flags & IEEE80211_SDATA_IN_DRIVER) 2318 + vif = &sdata->vif; 2319 + } 2320 + 2321 + return local->ops->testmode_cmd(&local->hw, vif, data, len); 2313 2322 } 2314 2323 2315 2324 static int ieee80211_testmode_dump(struct wiphy *wiphy,