aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2015-03-31 16:39:04 -0400
committerDavid S. Miller <davem@davemloft.net>2015-03-31 16:39:04 -0400
commit7b6249bba940f57c20cdde793b306ca3831778c7 (patch)
tree24caf2ec9ea6fca08fe225228614807d0919b4b2 /drivers/net
parentfbcb21705930f2930f506149d0b8d36dfbe45107 (diff)
parent2c44be81f0fc147eed9dc63e2601318b2c007aeb (diff)
Merge tag 'mac80211-next-for-davem-2015-03-30' of git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next
Johannes Berg says: ==================== Lots of updates for net-next; along with the usual flurry of small fixes, cleanups and internal features we have: * VHT support for TDLS and IBSS (conditional on drivers though) * first TX performance improvements (the biggest will come later) * many suspend/resume (race) fixes * name_assign_type support from Tom Gundersen ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/wireless/ath/ath10k/mac.c3
-rw-r--r--drivers/net/wireless/ath/ath6kl/cfg80211.c15
-rw-r--r--drivers/net/wireless/ath/ath6kl/cfg80211.h1
-rw-r--r--drivers/net/wireless/ath/ath6kl/core.c4
-rw-r--r--drivers/net/wireless/ath/wil6210/cfg80211.c2
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/cfg80211.c3
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/p2p.c3
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/p2p.h1
-rw-r--r--drivers/net/wireless/cw1200/sta.c4
-rw-r--r--drivers/net/wireless/ipw2x00/Kconfig2
-rw-r--r--drivers/net/wireless/iwlwifi/dvm/mac80211.c15
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/coex.c2
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/coex_legacy.c2
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/mvm.h4
-rw-r--r--drivers/net/wireless/libertas/cfg.c6
-rw-r--r--drivers/net/wireless/mac80211_hwsim.c103
-rw-r--r--drivers/net/wireless/mwifiex/cfg80211.c13
-rw-r--r--drivers/net/wireless/mwifiex/main.c6
-rw-r--r--drivers/net/wireless/mwifiex/main.h1
-rw-r--r--drivers/net/wireless/orinoco/Kconfig2
-rw-r--r--drivers/net/wireless/ti/wl18xx/event.c4
21 files changed, 145 insertions, 51 deletions
diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c
index 5d2db069d46e..6fd7189b7b01 100644
--- a/drivers/net/wireless/ath/ath10k/mac.c
+++ b/drivers/net/wireless/ath/ath10k/mac.c
@@ -1412,7 +1412,8 @@ static void ath10k_peer_assoc_h_crypto(struct ath10k *ar,
1412 lockdep_assert_held(&ar->conf_mutex); 1412 lockdep_assert_held(&ar->conf_mutex);
1413 1413
1414 bss = cfg80211_get_bss(ar->hw->wiphy, ar->hw->conf.chandef.chan, 1414 bss = cfg80211_get_bss(ar->hw->wiphy, ar->hw->conf.chandef.chan,
1415 info->bssid, NULL, 0, 0, 0); 1415 info->bssid, NULL, 0, IEEE80211_BSS_TYPE_ANY,
1416 IEEE80211_PRIVACY_ANY);
1416 if (bss) { 1417 if (bss) {
1417 const struct cfg80211_bss_ies *ies; 1418 const struct cfg80211_bss_ies *ies;
1418 1419
diff --git a/drivers/net/wireless/ath/ath6kl/cfg80211.c b/drivers/net/wireless/ath/ath6kl/cfg80211.c
index e2978037d858..cce4625a53ad 100644
--- a/drivers/net/wireless/ath/ath6kl/cfg80211.c
+++ b/drivers/net/wireless/ath/ath6kl/cfg80211.c
@@ -686,20 +686,21 @@ ath6kl_add_bss_if_needed(struct ath6kl_vif *vif,
686{ 686{
687 struct ath6kl *ar = vif->ar; 687 struct ath6kl *ar = vif->ar;
688 struct cfg80211_bss *bss; 688 struct cfg80211_bss *bss;
689 u16 cap_mask, cap_val; 689 u16 cap_val;
690 enum ieee80211_bss_type bss_type;
690 u8 *ie; 691 u8 *ie;
691 692
692 if (nw_type & ADHOC_NETWORK) { 693 if (nw_type & ADHOC_NETWORK) {
693 cap_mask = WLAN_CAPABILITY_IBSS;
694 cap_val = WLAN_CAPABILITY_IBSS; 694 cap_val = WLAN_CAPABILITY_IBSS;
695 bss_type = IEEE80211_BSS_TYPE_IBSS;
695 } else { 696 } else {
696 cap_mask = WLAN_CAPABILITY_ESS;
697 cap_val = WLAN_CAPABILITY_ESS; 697 cap_val = WLAN_CAPABILITY_ESS;
698 bss_type = IEEE80211_BSS_TYPE_ESS;
698 } 699 }
699 700
700 bss = cfg80211_get_bss(ar->wiphy, chan, bssid, 701 bss = cfg80211_get_bss(ar->wiphy, chan, bssid,
701 vif->ssid, vif->ssid_len, 702 vif->ssid, vif->ssid_len,
702 cap_mask, cap_val); 703 bss_type, IEEE80211_PRIVACY_ANY);
703 if (bss == NULL) { 704 if (bss == NULL) {
704 /* 705 /*
705 * Since cfg80211 may not yet know about the BSS, 706 * Since cfg80211 may not yet know about the BSS,
@@ -1495,6 +1496,7 @@ static int ath6kl_cfg80211_set_power_mgmt(struct wiphy *wiphy,
1495 1496
1496static struct wireless_dev *ath6kl_cfg80211_add_iface(struct wiphy *wiphy, 1497static struct wireless_dev *ath6kl_cfg80211_add_iface(struct wiphy *wiphy,
1497 const char *name, 1498 const char *name,
1499 unsigned char name_assign_type,
1498 enum nl80211_iftype type, 1500 enum nl80211_iftype type,
1499 u32 *flags, 1501 u32 *flags,
1500 struct vif_params *params) 1502 struct vif_params *params)
@@ -1513,7 +1515,7 @@ static struct wireless_dev *ath6kl_cfg80211_add_iface(struct wiphy *wiphy,
1513 return ERR_PTR(-EINVAL); 1515 return ERR_PTR(-EINVAL);
1514 } 1516 }
1515 1517
1516 wdev = ath6kl_interface_add(ar, name, type, if_idx, nw_type); 1518 wdev = ath6kl_interface_add(ar, name, name_assign_type, type, if_idx, nw_type);
1517 if (!wdev) 1519 if (!wdev)
1518 return ERR_PTR(-ENOMEM); 1520 return ERR_PTR(-ENOMEM);
1519 1521
@@ -3633,13 +3635,14 @@ void ath6kl_cfg80211_vif_cleanup(struct ath6kl_vif *vif)
3633} 3635}
3634 3636
3635struct wireless_dev *ath6kl_interface_add(struct ath6kl *ar, const char *name, 3637struct wireless_dev *ath6kl_interface_add(struct ath6kl *ar, const char *name,
3638 unsigned char name_assign_type,
3636 enum nl80211_iftype type, 3639 enum nl80211_iftype type,
3637 u8 fw_vif_idx, u8 nw_type) 3640 u8 fw_vif_idx, u8 nw_type)
3638{ 3641{
3639 struct net_device *ndev; 3642 struct net_device *ndev;
3640 struct ath6kl_vif *vif; 3643 struct ath6kl_vif *vif;
3641 3644
3642 ndev = alloc_netdev(sizeof(*vif), name, NET_NAME_UNKNOWN, ether_setup); 3645 ndev = alloc_netdev(sizeof(*vif), name, name_assign_type, ether_setup);
3643 if (!ndev) 3646 if (!ndev)
3644 return NULL; 3647 return NULL;
3645 3648
diff --git a/drivers/net/wireless/ath/ath6kl/cfg80211.h b/drivers/net/wireless/ath/ath6kl/cfg80211.h
index b59becd91aea..5aa57a7639bf 100644
--- a/drivers/net/wireless/ath/ath6kl/cfg80211.h
+++ b/drivers/net/wireless/ath/ath6kl/cfg80211.h
@@ -25,6 +25,7 @@ enum ath6kl_cfg_suspend_mode {
25}; 25};
26 26
27struct wireless_dev *ath6kl_interface_add(struct ath6kl *ar, const char *name, 27struct wireless_dev *ath6kl_interface_add(struct ath6kl *ar, const char *name,
28 unsigned char name_assign_type,
28 enum nl80211_iftype type, 29 enum nl80211_iftype type,
29 u8 fw_vif_idx, u8 nw_type); 30 u8 fw_vif_idx, u8 nw_type);
30void ath6kl_cfg80211_ch_switch_notify(struct ath6kl_vif *vif, int freq, 31void ath6kl_cfg80211_ch_switch_notify(struct ath6kl_vif *vif, int freq,
diff --git a/drivers/net/wireless/ath/ath6kl/core.c b/drivers/net/wireless/ath/ath6kl/core.c
index 0df74b245af4..4ec02cea0f43 100644
--- a/drivers/net/wireless/ath/ath6kl/core.c
+++ b/drivers/net/wireless/ath/ath6kl/core.c
@@ -211,8 +211,8 @@ int ath6kl_core_init(struct ath6kl *ar, enum ath6kl_htc_type htc_type)
211 rtnl_lock(); 211 rtnl_lock();
212 212
213 /* Add an initial station interface */ 213 /* Add an initial station interface */
214 wdev = ath6kl_interface_add(ar, "wlan%d", NL80211_IFTYPE_STATION, 0, 214 wdev = ath6kl_interface_add(ar, "wlan%d", NET_NAME_ENUM,
215 INFRA_NETWORK); 215 NL80211_IFTYPE_STATION, 0, INFRA_NETWORK);
216 216
217 rtnl_unlock(); 217 rtnl_unlock();
218 218
diff --git a/drivers/net/wireless/ath/wil6210/cfg80211.c b/drivers/net/wireless/ath/wil6210/cfg80211.c
index 4bd708c8716c..47d14db59b93 100644
--- a/drivers/net/wireless/ath/wil6210/cfg80211.c
+++ b/drivers/net/wireless/ath/wil6210/cfg80211.c
@@ -409,7 +409,7 @@ static int wil_cfg80211_connect(struct wiphy *wiphy,
409 409
410 bss = cfg80211_get_bss(wiphy, sme->channel, sme->bssid, 410 bss = cfg80211_get_bss(wiphy, sme->channel, sme->bssid,
411 sme->ssid, sme->ssid_len, 411 sme->ssid, sme->ssid_len,
412 WLAN_CAPABILITY_ESS, WLAN_CAPABILITY_ESS); 412 IEEE80211_BSS_TYPE_ESS, IEEE80211_PRIVACY_ANY);
413 if (!bss) { 413 if (!bss) {
414 wil_err(wil, "Unable to find BSS\n"); 414 wil_err(wil, "Unable to find BSS\n");
415 return -ENOENT; 415 return -ENOENT;
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/brcm80211/brcmfmac/cfg80211.c
index 9b805c9fd51e..8a15ebbce4a3 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/cfg80211.c
+++ b/drivers/net/wireless/brcm80211/brcmfmac/cfg80211.c
@@ -625,6 +625,7 @@ static bool brcmf_is_ibssmode(struct brcmf_cfg80211_vif *vif)
625 625
626static struct wireless_dev *brcmf_cfg80211_add_iface(struct wiphy *wiphy, 626static struct wireless_dev *brcmf_cfg80211_add_iface(struct wiphy *wiphy,
627 const char *name, 627 const char *name,
628 unsigned char name_assign_type,
628 enum nl80211_iftype type, 629 enum nl80211_iftype type,
629 u32 *flags, 630 u32 *flags,
630 struct vif_params *params) 631 struct vif_params *params)
@@ -648,7 +649,7 @@ static struct wireless_dev *brcmf_cfg80211_add_iface(struct wiphy *wiphy,
648 case NL80211_IFTYPE_P2P_CLIENT: 649 case NL80211_IFTYPE_P2P_CLIENT:
649 case NL80211_IFTYPE_P2P_GO: 650 case NL80211_IFTYPE_P2P_GO:
650 case NL80211_IFTYPE_P2P_DEVICE: 651 case NL80211_IFTYPE_P2P_DEVICE:
651 wdev = brcmf_p2p_add_vif(wiphy, name, type, flags, params); 652 wdev = brcmf_p2p_add_vif(wiphy, name, name_assign_type, type, flags, params);
652 if (!IS_ERR(wdev)) 653 if (!IS_ERR(wdev))
653 brcmf_cfg80211_update_proto_addr_mode(wdev); 654 brcmf_cfg80211_update_proto_addr_mode(wdev);
654 return wdev; 655 return wdev;
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/p2p.c b/drivers/net/wireless/brcm80211/brcmfmac/p2p.c
index 98d82ec52de1..710fbe570eb2 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/p2p.c
+++ b/drivers/net/wireless/brcm80211/brcmfmac/p2p.c
@@ -2246,11 +2246,13 @@ static void brcmf_p2p_delete_p2pdev(struct brcmf_p2p_info *p2p,
2246 * 2246 *
2247 * @wiphy: wiphy device of new interface. 2247 * @wiphy: wiphy device of new interface.
2248 * @name: name of the new interface. 2248 * @name: name of the new interface.
2249 * @name_assign_type: origin of the interface name
2249 * @type: nl80211 interface type. 2250 * @type: nl80211 interface type.
2250 * @flags: not used. 2251 * @flags: not used.
2251 * @params: contains mac address for P2P device. 2252 * @params: contains mac address for P2P device.
2252 */ 2253 */
2253struct wireless_dev *brcmf_p2p_add_vif(struct wiphy *wiphy, const char *name, 2254struct wireless_dev *brcmf_p2p_add_vif(struct wiphy *wiphy, const char *name,
2255 unsigned char name_assign_type,
2254 enum nl80211_iftype type, u32 *flags, 2256 enum nl80211_iftype type, u32 *flags,
2255 struct vif_params *params) 2257 struct vif_params *params)
2256{ 2258{
@@ -2310,6 +2312,7 @@ struct wireless_dev *brcmf_p2p_add_vif(struct wiphy *wiphy, const char *name,
2310 } 2312 }
2311 2313
2312 strncpy(ifp->ndev->name, name, sizeof(ifp->ndev->name) - 1); 2314 strncpy(ifp->ndev->name, name, sizeof(ifp->ndev->name) - 1);
2315 ifp->ndev->name_assign_type = name_assign_type;
2313 err = brcmf_net_attach(ifp, true); 2316 err = brcmf_net_attach(ifp, true);
2314 if (err) { 2317 if (err) {
2315 brcmf_err("Registering netdevice failed\n"); 2318 brcmf_err("Registering netdevice failed\n");
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/p2p.h b/drivers/net/wireless/brcm80211/brcmfmac/p2p.h
index 6821b26224be..872f382d9e49 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/p2p.h
+++ b/drivers/net/wireless/brcm80211/brcmfmac/p2p.h
@@ -149,6 +149,7 @@ struct brcmf_p2p_info {
149s32 brcmf_p2p_attach(struct brcmf_cfg80211_info *cfg); 149s32 brcmf_p2p_attach(struct brcmf_cfg80211_info *cfg);
150void brcmf_p2p_detach(struct brcmf_p2p_info *p2p); 150void brcmf_p2p_detach(struct brcmf_p2p_info *p2p);
151struct wireless_dev *brcmf_p2p_add_vif(struct wiphy *wiphy, const char *name, 151struct wireless_dev *brcmf_p2p_add_vif(struct wiphy *wiphy, const char *name,
152 unsigned char name_assign_type,
152 enum nl80211_iftype type, u32 *flags, 153 enum nl80211_iftype type, u32 *flags,
153 struct vif_params *params); 154 struct vif_params *params);
154int brcmf_p2p_del_vif(struct wiphy *wiphy, struct wireless_dev *wdev); 155int brcmf_p2p_del_vif(struct wiphy *wiphy, struct wireless_dev *wdev);
diff --git a/drivers/net/wireless/cw1200/sta.c b/drivers/net/wireless/cw1200/sta.c
index 89bc18cd6700..b0f65fa09428 100644
--- a/drivers/net/wireless/cw1200/sta.c
+++ b/drivers/net/wireless/cw1200/sta.c
@@ -1240,8 +1240,8 @@ static void cw1200_do_join(struct cw1200_common *priv)
1240 1240
1241 bssid = priv->vif->bss_conf.bssid; 1241 bssid = priv->vif->bss_conf.bssid;
1242 1242
1243 bss = cfg80211_get_bss(priv->hw->wiphy, priv->channel, 1243 bss = cfg80211_get_bss(priv->hw->wiphy, priv->channel, bssid, NULL, 0,
1244 bssid, NULL, 0, 0, 0); 1244 IEEE80211_BSS_TYPE_ANY, IEEE80211_PRIVACY_ANY);
1245 1245
1246 if (!bss && !conf->ibss_joined) { 1246 if (!bss && !conf->ibss_joined) {
1247 wsm_unlock_tx(priv); 1247 wsm_unlock_tx(priv);
diff --git a/drivers/net/wireless/ipw2x00/Kconfig b/drivers/net/wireless/ipw2x00/Kconfig
index 21de4fe6cf2d..d6ec44d7a391 100644
--- a/drivers/net/wireless/ipw2x00/Kconfig
+++ b/drivers/net/wireless/ipw2x00/Kconfig
@@ -66,7 +66,7 @@ config IPW2100_DEBUG
66config IPW2200 66config IPW2200
67 tristate "Intel PRO/Wireless 2200BG and 2915ABG Network Connection" 67 tristate "Intel PRO/Wireless 2200BG and 2915ABG Network Connection"
68 depends on PCI && CFG80211 68 depends on PCI && CFG80211
69 select CFG80211_WEXT 69 select CFG80211_WEXT_EXPORT
70 select WIRELESS_EXT 70 select WIRELESS_EXT
71 select WEXT_SPY 71 select WEXT_SPY
72 select WEXT_PRIV 72 select WEXT_PRIV
diff --git a/drivers/net/wireless/iwlwifi/dvm/mac80211.c b/drivers/net/wireless/iwlwifi/dvm/mac80211.c
index 47e64e8b9517..5707ba5ce23f 100644
--- a/drivers/net/wireless/iwlwifi/dvm/mac80211.c
+++ b/drivers/net/wireless/iwlwifi/dvm/mac80211.c
@@ -1129,20 +1129,23 @@ done:
1129 IWL_DEBUG_MAC80211(priv, "leave\n"); 1129 IWL_DEBUG_MAC80211(priv, "leave\n");
1130} 1130}
1131 1131
1132static void iwlagn_mac_rssi_callback(struct ieee80211_hw *hw, 1132static void iwlagn_mac_event_callback(struct ieee80211_hw *hw,
1133 struct ieee80211_vif *vif, 1133 struct ieee80211_vif *vif,
1134 enum ieee80211_rssi_event rssi_event) 1134 const struct ieee80211_event *event)
1135{ 1135{
1136 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); 1136 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw);
1137 1137
1138 if (event->type != RSSI_EVENT)
1139 return;
1140
1138 IWL_DEBUG_MAC80211(priv, "enter\n"); 1141 IWL_DEBUG_MAC80211(priv, "enter\n");
1139 mutex_lock(&priv->mutex); 1142 mutex_lock(&priv->mutex);
1140 1143
1141 if (priv->lib->bt_params && 1144 if (priv->lib->bt_params &&
1142 priv->lib->bt_params->advanced_bt_coexist) { 1145 priv->lib->bt_params->advanced_bt_coexist) {
1143 if (rssi_event == RSSI_EVENT_LOW) 1146 if (event->u.rssi.data == RSSI_EVENT_LOW)
1144 priv->bt_enable_pspoll = true; 1147 priv->bt_enable_pspoll = true;
1145 else if (rssi_event == RSSI_EVENT_HIGH) 1148 else if (event->u.rssi.data == RSSI_EVENT_HIGH)
1146 priv->bt_enable_pspoll = false; 1149 priv->bt_enable_pspoll = false;
1147 1150
1148 iwlagn_send_advance_bt_config(priv); 1151 iwlagn_send_advance_bt_config(priv);
@@ -1613,7 +1616,7 @@ const struct ieee80211_ops iwlagn_hw_ops = {
1613 .channel_switch = iwlagn_mac_channel_switch, 1616 .channel_switch = iwlagn_mac_channel_switch,
1614 .flush = iwlagn_mac_flush, 1617 .flush = iwlagn_mac_flush,
1615 .tx_last_beacon = iwlagn_mac_tx_last_beacon, 1618 .tx_last_beacon = iwlagn_mac_tx_last_beacon,
1616 .rssi_callback = iwlagn_mac_rssi_callback, 1619 .event_callback = iwlagn_mac_event_callback,
1617 .set_tim = iwlagn_mac_set_tim, 1620 .set_tim = iwlagn_mac_set_tim,
1618}; 1621};
1619 1622
diff --git a/drivers/net/wireless/iwlwifi/mvm/coex.c b/drivers/net/wireless/iwlwifi/mvm/coex.c
index 638ec0945009..877f19bbae7e 100644
--- a/drivers/net/wireless/iwlwifi/mvm/coex.c
+++ b/drivers/net/wireless/iwlwifi/mvm/coex.c
@@ -1024,7 +1024,7 @@ static void iwl_mvm_bt_rssi_iterator(void *_data, u8 *mac,
1024} 1024}
1025 1025
1026void iwl_mvm_bt_rssi_event(struct iwl_mvm *mvm, struct ieee80211_vif *vif, 1026void iwl_mvm_bt_rssi_event(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
1027 enum ieee80211_rssi_event rssi_event) 1027 enum ieee80211_rssi_event_data rssi_event)
1028{ 1028{
1029 struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif); 1029 struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif);
1030 struct iwl_bt_iterator_data data = { 1030 struct iwl_bt_iterator_data data = {
diff --git a/drivers/net/wireless/iwlwifi/mvm/coex_legacy.c b/drivers/net/wireless/iwlwifi/mvm/coex_legacy.c
index 05d31713ed38..5535ec9766cb 100644
--- a/drivers/net/wireless/iwlwifi/mvm/coex_legacy.c
+++ b/drivers/net/wireless/iwlwifi/mvm/coex_legacy.c
@@ -1069,7 +1069,7 @@ static void iwl_mvm_bt_rssi_iterator(void *_data, u8 *mac,
1069} 1069}
1070 1070
1071void iwl_mvm_bt_rssi_event_old(struct iwl_mvm *mvm, struct ieee80211_vif *vif, 1071void iwl_mvm_bt_rssi_event_old(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
1072 enum ieee80211_rssi_event rssi_event) 1072 enum ieee80211_rssi_event_data rssi_event)
1073{ 1073{
1074 struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif); 1074 struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif);
1075 struct iwl_bt_iterator_data data = { 1075 struct iwl_bt_iterator_data data = {
diff --git a/drivers/net/wireless/iwlwifi/mvm/mvm.h b/drivers/net/wireless/iwlwifi/mvm/mvm.h
index e10172d69eaa..95cad68ab069 100644
--- a/drivers/net/wireless/iwlwifi/mvm/mvm.h
+++ b/drivers/net/wireless/iwlwifi/mvm/mvm.h
@@ -1251,7 +1251,7 @@ int iwl_mvm_rx_bt_coex_notif(struct iwl_mvm *mvm,
1251 struct iwl_rx_cmd_buffer *rxb, 1251 struct iwl_rx_cmd_buffer *rxb,
1252 struct iwl_device_cmd *cmd); 1252 struct iwl_device_cmd *cmd);
1253void iwl_mvm_bt_rssi_event(struct iwl_mvm *mvm, struct ieee80211_vif *vif, 1253void iwl_mvm_bt_rssi_event(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
1254 enum ieee80211_rssi_event rssi_event); 1254 enum ieee80211_rssi_event_data);
1255void iwl_mvm_bt_coex_vif_change(struct iwl_mvm *mvm); 1255void iwl_mvm_bt_coex_vif_change(struct iwl_mvm *mvm);
1256u16 iwl_mvm_coex_agg_time_limit(struct iwl_mvm *mvm, 1256u16 iwl_mvm_coex_agg_time_limit(struct iwl_mvm *mvm,
1257 struct ieee80211_sta *sta); 1257 struct ieee80211_sta *sta);
@@ -1271,7 +1271,7 @@ int iwl_mvm_rx_bt_coex_notif_old(struct iwl_mvm *mvm,
1271 struct iwl_rx_cmd_buffer *rxb, 1271 struct iwl_rx_cmd_buffer *rxb,
1272 struct iwl_device_cmd *cmd); 1272 struct iwl_device_cmd *cmd);
1273void iwl_mvm_bt_rssi_event_old(struct iwl_mvm *mvm, struct ieee80211_vif *vif, 1273void iwl_mvm_bt_rssi_event_old(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
1274 enum ieee80211_rssi_event rssi_event); 1274 enum ieee80211_rssi_event_data);
1275u16 iwl_mvm_coex_agg_time_limit_old(struct iwl_mvm *mvm, 1275u16 iwl_mvm_coex_agg_time_limit_old(struct iwl_mvm *mvm,
1276 struct ieee80211_sta *sta); 1276 struct ieee80211_sta *sta);
1277bool iwl_mvm_bt_coex_is_mimo_allowed_old(struct iwl_mvm *mvm, 1277bool iwl_mvm_bt_coex_is_mimo_allowed_old(struct iwl_mvm *mvm,
diff --git a/drivers/net/wireless/libertas/cfg.c b/drivers/net/wireless/libertas/cfg.c
index a92985a6ea21..1a4d558022d8 100644
--- a/drivers/net/wireless/libertas/cfg.c
+++ b/drivers/net/wireless/libertas/cfg.c
@@ -1356,8 +1356,8 @@ static int lbs_cfg_connect(struct wiphy *wiphy, struct net_device *dev,
1356 1356
1357 /* Find the BSS we want using available scan results */ 1357 /* Find the BSS we want using available scan results */
1358 bss = cfg80211_get_bss(wiphy, sme->channel, sme->bssid, 1358 bss = cfg80211_get_bss(wiphy, sme->channel, sme->bssid,
1359 sme->ssid, sme->ssid_len, 1359 sme->ssid, sme->ssid_len, IEEE80211_BSS_TYPE_ESS,
1360 WLAN_CAPABILITY_ESS, WLAN_CAPABILITY_ESS); 1360 IEEE80211_PRIVACY_ANY);
1361 if (!bss) { 1361 if (!bss) {
1362 wiphy_err(wiphy, "assoc: bss %pM not in scan results\n", 1362 wiphy_err(wiphy, "assoc: bss %pM not in scan results\n",
1363 sme->bssid); 1363 sme->bssid);
@@ -2000,7 +2000,7 @@ static int lbs_join_ibss(struct wiphy *wiphy, struct net_device *dev,
2000 * bss list is populated already */ 2000 * bss list is populated already */
2001 bss = cfg80211_get_bss(wiphy, params->chandef.chan, params->bssid, 2001 bss = cfg80211_get_bss(wiphy, params->chandef.chan, params->bssid,
2002 params->ssid, params->ssid_len, 2002 params->ssid, params->ssid_len,
2003 WLAN_CAPABILITY_IBSS, WLAN_CAPABILITY_IBSS); 2003 IEEE80211_BSS_TYPE_IBSS, IEEE80211_PRIVACY_ANY);
2004 2004
2005 if (bss) { 2005 if (bss) {
2006 ret = lbs_ibss_join_existing(priv, params, bss); 2006 ret = lbs_ibss_join_existing(priv, params, bss);
diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c
index d56b7859a437..d5c0a1af08b9 100644
--- a/drivers/net/wireless/mac80211_hwsim.c
+++ b/drivers/net/wireless/mac80211_hwsim.c
@@ -330,6 +330,83 @@ static const struct ieee80211_rate hwsim_rates[] = {
330 { .bitrate = 540 } 330 { .bitrate = 540 }
331}; 331};
332 332
333#define OUI_QCA 0x001374
334#define QCA_NL80211_SUBCMD_TEST 1
335enum qca_nl80211_vendor_subcmds {
336 QCA_WLAN_VENDOR_ATTR_TEST = 8,
337 QCA_WLAN_VENDOR_ATTR_MAX = QCA_WLAN_VENDOR_ATTR_TEST
338};
339
340static const struct nla_policy
341hwsim_vendor_test_policy[QCA_WLAN_VENDOR_ATTR_MAX + 1] = {
342 [QCA_WLAN_VENDOR_ATTR_MAX] = { .type = NLA_U32 },
343};
344
345static int mac80211_hwsim_vendor_cmd_test(struct wiphy *wiphy,
346 struct wireless_dev *wdev,
347 const void *data, int data_len)
348{
349 struct sk_buff *skb;
350 struct nlattr *tb[QCA_WLAN_VENDOR_ATTR_MAX + 1];
351 int err;
352 u32 val;
353
354 err = nla_parse(tb, QCA_WLAN_VENDOR_ATTR_MAX, data, data_len,
355 hwsim_vendor_test_policy);
356 if (err)
357 return err;
358 if (!tb[QCA_WLAN_VENDOR_ATTR_TEST])
359 return -EINVAL;
360 val = nla_get_u32(tb[QCA_WLAN_VENDOR_ATTR_TEST]);
361 wiphy_debug(wiphy, "%s: test=%u\n", __func__, val);
362
363 /* Send a vendor event as a test. Note that this would not normally be
364 * done within a command handler, but rather, based on some other
365 * trigger. For simplicity, this command is used to trigger the event
366 * here.
367 *
368 * event_idx = 0 (index in mac80211_hwsim_vendor_commands)
369 */
370 skb = cfg80211_vendor_event_alloc(wiphy, wdev, 100, 0, GFP_KERNEL);
371 if (skb) {
372 /* skb_put() or nla_put() will fill up data within
373 * NL80211_ATTR_VENDOR_DATA.
374 */
375
376 /* Add vendor data */
377 nla_put_u32(skb, QCA_WLAN_VENDOR_ATTR_TEST, val + 1);
378
379 /* Send the event - this will call nla_nest_end() */
380 cfg80211_vendor_event(skb, GFP_KERNEL);
381 }
382
383 /* Send a response to the command */
384 skb = cfg80211_vendor_cmd_alloc_reply_skb(wiphy, 10);
385 if (!skb)
386 return -ENOMEM;
387
388 /* skb_put() or nla_put() will fill up data within
389 * NL80211_ATTR_VENDOR_DATA
390 */
391 nla_put_u32(skb, QCA_WLAN_VENDOR_ATTR_TEST, val + 2);
392
393 return cfg80211_vendor_cmd_reply(skb);
394}
395
396static struct wiphy_vendor_command mac80211_hwsim_vendor_commands[] = {
397 {
398 .info = { .vendor_id = OUI_QCA,
399 .subcmd = QCA_NL80211_SUBCMD_TEST },
400 .flags = WIPHY_VENDOR_CMD_NEED_NETDEV,
401 .doit = mac80211_hwsim_vendor_cmd_test,
402 }
403};
404
405/* Advertise support vendor specific events */
406static const struct nl80211_vendor_cmd_info mac80211_hwsim_vendor_events[] = {
407 { .vendor_id = OUI_QCA, .subcmd = 1 },
408};
409
333static const struct ieee80211_iface_limit hwsim_if_limits[] = { 410static const struct ieee80211_iface_limit hwsim_if_limits[] = {
334 { .max = 1, .types = BIT(NL80211_IFTYPE_ADHOC) }, 411 { .max = 1, .types = BIT(NL80211_IFTYPE_ADHOC) },
335 { .max = 2048, .types = BIT(NL80211_IFTYPE_STATION) | 412 { .max = 2048, .types = BIT(NL80211_IFTYPE_STATION) |
@@ -906,8 +983,7 @@ static void mac80211_hwsim_tx_frame_nl(struct ieee80211_hw *hw,
906 goto nla_put_failure; 983 goto nla_put_failure;
907 } 984 }
908 985
909 if (nla_put(skb, HWSIM_ATTR_ADDR_TRANSMITTER, 986 if (nla_put(skb, HWSIM_ATTR_ADDR_TRANSMITTER, ETH_ALEN, hdr->addr2))
910 ETH_ALEN, data->addresses[1].addr))
911 goto nla_put_failure; 987 goto nla_put_failure;
912 988
913 /* We get the skb->data */ 989 /* We get the skb->data */
@@ -1522,21 +1598,16 @@ static void mac80211_hwsim_bss_info_changed(struct ieee80211_hw *hw,
1522 vp->aid = info->aid; 1598 vp->aid = info->aid;
1523 } 1599 }
1524 1600
1525 if (changed & BSS_CHANGED_BEACON_INT) {
1526 wiphy_debug(hw->wiphy, " BCNINT: %d\n", info->beacon_int);
1527 data->beacon_int = info->beacon_int * 1024;
1528 }
1529
1530 if (changed & BSS_CHANGED_BEACON_ENABLED) { 1601 if (changed & BSS_CHANGED_BEACON_ENABLED) {
1531 wiphy_debug(hw->wiphy, " BCN EN: %d\n", info->enable_beacon); 1602 wiphy_debug(hw->wiphy, " BCN EN: %d (BI=%u)\n",
1603 info->enable_beacon, info->beacon_int);
1532 vp->bcn_en = info->enable_beacon; 1604 vp->bcn_en = info->enable_beacon;
1533 if (data->started && 1605 if (data->started &&
1534 !hrtimer_is_queued(&data->beacon_timer.timer) && 1606 !hrtimer_is_queued(&data->beacon_timer.timer) &&
1535 info->enable_beacon) { 1607 info->enable_beacon) {
1536 u64 tsf, until_tbtt; 1608 u64 tsf, until_tbtt;
1537 u32 bcn_int; 1609 u32 bcn_int;
1538 if (WARN_ON(!data->beacon_int)) 1610 data->beacon_int = info->beacon_int * 1024;
1539 data->beacon_int = 1000 * 1024;
1540 tsf = mac80211_hwsim_get_tsf(hw, vif); 1611 tsf = mac80211_hwsim_get_tsf(hw, vif);
1541 bcn_int = data->beacon_int; 1612 bcn_int = data->beacon_int;
1542 until_tbtt = bcn_int - do_div(tsf, bcn_int); 1613 until_tbtt = bcn_int - do_div(tsf, bcn_int);
@@ -1550,8 +1621,10 @@ static void mac80211_hwsim_bss_info_changed(struct ieee80211_hw *hw,
1550 mac80211_hwsim_bcn_en_iter, &count); 1621 mac80211_hwsim_bcn_en_iter, &count);
1551 wiphy_debug(hw->wiphy, " beaconing vifs remaining: %u", 1622 wiphy_debug(hw->wiphy, " beaconing vifs remaining: %u",
1552 count); 1623 count);
1553 if (count == 0) 1624 if (count == 0) {
1554 tasklet_hrtimer_cancel(&data->beacon_timer); 1625 tasklet_hrtimer_cancel(&data->beacon_timer);
1626 data->beacon_int = 0;
1627 }
1555 } 1628 }
1556 } 1629 }
1557 1630
@@ -2420,6 +2493,12 @@ static int mac80211_hwsim_new_radio(struct genl_info *info,
2420 hw->max_rates = 4; 2493 hw->max_rates = 4;
2421 hw->max_rate_tries = 11; 2494 hw->max_rate_tries = 11;
2422 2495
2496 hw->wiphy->vendor_commands = mac80211_hwsim_vendor_commands;
2497 hw->wiphy->n_vendor_commands =
2498 ARRAY_SIZE(mac80211_hwsim_vendor_commands);
2499 hw->wiphy->vendor_events = mac80211_hwsim_vendor_events;
2500 hw->wiphy->n_vendor_events = ARRAY_SIZE(mac80211_hwsim_vendor_events);
2501
2423 if (param->reg_strict) 2502 if (param->reg_strict)
2424 hw->wiphy->regulatory_flags |= REGULATORY_STRICT_REG; 2503 hw->wiphy->regulatory_flags |= REGULATORY_STRICT_REG;
2425 if (param->regd) { 2504 if (param->regd) {
@@ -2611,7 +2690,7 @@ static struct mac80211_hwsim_data *get_hwsim_data_ref_from_addr(const u8 *addr)
2611 2690
2612 spin_lock_bh(&hwsim_radio_lock); 2691 spin_lock_bh(&hwsim_radio_lock);
2613 list_for_each_entry(data, &hwsim_radios, list) { 2692 list_for_each_entry(data, &hwsim_radios, list) {
2614 if (memcmp(data->addresses[1].addr, addr, ETH_ALEN) == 0) { 2693 if (mac80211_hwsim_addr_match(data, addr)) {
2615 _found = true; 2694 _found = true;
2616 break; 2695 break;
2617 } 2696 }
diff --git a/drivers/net/wireless/mwifiex/cfg80211.c b/drivers/net/wireless/mwifiex/cfg80211.c
index 8e1f681f960b..6f8993c12373 100644
--- a/drivers/net/wireless/mwifiex/cfg80211.c
+++ b/drivers/net/wireless/mwifiex/cfg80211.c
@@ -1954,13 +1954,13 @@ done:
1954 if (mode == NL80211_IFTYPE_ADHOC) 1954 if (mode == NL80211_IFTYPE_ADHOC)
1955 bss = cfg80211_get_bss(priv->wdev.wiphy, channel, 1955 bss = cfg80211_get_bss(priv->wdev.wiphy, channel,
1956 bssid, ssid, ssid_len, 1956 bssid, ssid, ssid_len,
1957 WLAN_CAPABILITY_IBSS, 1957 IEEE80211_BSS_TYPE_IBSS,
1958 WLAN_CAPABILITY_IBSS); 1958 IEEE80211_PRIVACY_ANY);
1959 else 1959 else
1960 bss = cfg80211_get_bss(priv->wdev.wiphy, channel, 1960 bss = cfg80211_get_bss(priv->wdev.wiphy, channel,
1961 bssid, ssid, ssid_len, 1961 bssid, ssid, ssid_len,
1962 WLAN_CAPABILITY_ESS, 1962 IEEE80211_BSS_TYPE_ESS,
1963 WLAN_CAPABILITY_ESS); 1963 IEEE80211_PRIVACY_ANY);
1964 1964
1965 if (!bss) { 1965 if (!bss) {
1966 if (is_scanning_required) { 1966 if (is_scanning_required) {
@@ -2398,10 +2398,11 @@ mwifiex_setup_ht_caps(struct ieee80211_sta_ht_cap *ht_info,
2398} 2398}
2399 2399
2400/* 2400/*
2401 * create a new virtual interface with the given name 2401 * create a new virtual interface with the given name and name assign type
2402 */ 2402 */
2403struct wireless_dev *mwifiex_add_virtual_intf(struct wiphy *wiphy, 2403struct wireless_dev *mwifiex_add_virtual_intf(struct wiphy *wiphy,
2404 const char *name, 2404 const char *name,
2405 unsigned char name_assign_type,
2405 enum nl80211_iftype type, 2406 enum nl80211_iftype type,
2406 u32 *flags, 2407 u32 *flags,
2407 struct vif_params *params) 2408 struct vif_params *params)
@@ -2521,7 +2522,7 @@ struct wireless_dev *mwifiex_add_virtual_intf(struct wiphy *wiphy,
2521 } 2522 }
2522 2523
2523 dev = alloc_netdev_mqs(sizeof(struct mwifiex_private *), name, 2524 dev = alloc_netdev_mqs(sizeof(struct mwifiex_private *), name,
2524 NET_NAME_UNKNOWN, ether_setup, 2525 name_assign_type, ether_setup,
2525 IEEE80211_NUM_ACS, 1); 2526 IEEE80211_NUM_ACS, 1);
2526 if (!dev) { 2527 if (!dev) {
2527 wiphy_err(wiphy, "no memory available for netdevice\n"); 2528 wiphy_err(wiphy, "no memory available for netdevice\n");
diff --git a/drivers/net/wireless/mwifiex/main.c b/drivers/net/wireless/mwifiex/main.c
index 74488aba92bd..d73a9217b9da 100644
--- a/drivers/net/wireless/mwifiex/main.c
+++ b/drivers/net/wireless/mwifiex/main.c
@@ -468,7 +468,7 @@ static void mwifiex_fw_dpc(const struct firmware *firmware, void *context)
468 468
469 rtnl_lock(); 469 rtnl_lock();
470 /* Create station interface by default */ 470 /* Create station interface by default */
471 wdev = mwifiex_add_virtual_intf(adapter->wiphy, "mlan%d", 471 wdev = mwifiex_add_virtual_intf(adapter->wiphy, "mlan%d", NET_NAME_ENUM,
472 NL80211_IFTYPE_STATION, NULL, NULL); 472 NL80211_IFTYPE_STATION, NULL, NULL);
473 if (IS_ERR(wdev)) { 473 if (IS_ERR(wdev)) {
474 dev_err(adapter->dev, "cannot create default STA interface\n"); 474 dev_err(adapter->dev, "cannot create default STA interface\n");
@@ -477,7 +477,7 @@ static void mwifiex_fw_dpc(const struct firmware *firmware, void *context)
477 } 477 }
478 478
479 if (driver_mode & MWIFIEX_DRIVER_MODE_UAP) { 479 if (driver_mode & MWIFIEX_DRIVER_MODE_UAP) {
480 wdev = mwifiex_add_virtual_intf(adapter->wiphy, "uap%d", 480 wdev = mwifiex_add_virtual_intf(adapter->wiphy, "uap%d", NET_NAME_ENUM,
481 NL80211_IFTYPE_AP, NULL, NULL); 481 NL80211_IFTYPE_AP, NULL, NULL);
482 if (IS_ERR(wdev)) { 482 if (IS_ERR(wdev)) {
483 dev_err(adapter->dev, "cannot create AP interface\n"); 483 dev_err(adapter->dev, "cannot create AP interface\n");
@@ -487,7 +487,7 @@ static void mwifiex_fw_dpc(const struct firmware *firmware, void *context)
487 } 487 }
488 488
489 if (driver_mode & MWIFIEX_DRIVER_MODE_P2P) { 489 if (driver_mode & MWIFIEX_DRIVER_MODE_P2P) {
490 wdev = mwifiex_add_virtual_intf(adapter->wiphy, "p2p%d", 490 wdev = mwifiex_add_virtual_intf(adapter->wiphy, "p2p%d", NET_NAME_ENUM,
491 NL80211_IFTYPE_P2P_CLIENT, NULL, 491 NL80211_IFTYPE_P2P_CLIENT, NULL,
492 NULL); 492 NULL);
493 if (IS_ERR(wdev)) { 493 if (IS_ERR(wdev)) {
diff --git a/drivers/net/wireless/mwifiex/main.h b/drivers/net/wireless/mwifiex/main.h
index 16be45e9a66a..ad8db61aeeef 100644
--- a/drivers/net/wireless/mwifiex/main.h
+++ b/drivers/net/wireless/mwifiex/main.h
@@ -1322,6 +1322,7 @@ u8 mwifiex_chan_type_to_sec_chan_offset(enum nl80211_channel_type chan_type);
1322 1322
1323struct wireless_dev *mwifiex_add_virtual_intf(struct wiphy *wiphy, 1323struct wireless_dev *mwifiex_add_virtual_intf(struct wiphy *wiphy,
1324 const char *name, 1324 const char *name,
1325 unsigned char name_assign_type,
1325 enum nl80211_iftype type, 1326 enum nl80211_iftype type,
1326 u32 *flags, 1327 u32 *flags,
1327 struct vif_params *params); 1328 struct vif_params *params);
diff --git a/drivers/net/wireless/orinoco/Kconfig b/drivers/net/wireless/orinoco/Kconfig
index 6d831d4d1b5f..f6fa3f4e294f 100644
--- a/drivers/net/wireless/orinoco/Kconfig
+++ b/drivers/net/wireless/orinoco/Kconfig
@@ -2,7 +2,7 @@ config HERMES
2 tristate "Hermes chipset 802.11b support (Orinoco/Prism2/Symbol)" 2 tristate "Hermes chipset 802.11b support (Orinoco/Prism2/Symbol)"
3 depends on (PPC_PMAC || PCI || PCMCIA) 3 depends on (PPC_PMAC || PCI || PCMCIA)
4 depends on CFG80211 4 depends on CFG80211
5 select CFG80211_WEXT 5 select CFG80211_WEXT_EXPORT
6 select WIRELESS_EXT 6 select WIRELESS_EXT
7 select WEXT_SPY 7 select WEXT_SPY
8 select WEXT_PRIV 8 select WEXT_PRIV
diff --git a/drivers/net/wireless/ti/wl18xx/event.c b/drivers/net/wireless/ti/wl18xx/event.c
index c28f06854195..548bb9e7e91e 100644
--- a/drivers/net/wireless/ti/wl18xx/event.c
+++ b/drivers/net/wireless/ti/wl18xx/event.c
@@ -77,7 +77,7 @@ static int wlcore_smart_config_sync_event(struct wl1271 *wl, u8 sync_channel,
77 wl1271_debug(DEBUG_EVENT, 77 wl1271_debug(DEBUG_EVENT,
78 "SMART_CONFIG_SYNC_EVENT_ID, freq: %d (chan: %d band %d)", 78 "SMART_CONFIG_SYNC_EVENT_ID, freq: %d (chan: %d band %d)",
79 freq, sync_channel, sync_band); 79 freq, sync_channel, sync_band);
80 skb = cfg80211_vendor_event_alloc(wl->hw->wiphy, 20, 80 skb = cfg80211_vendor_event_alloc(wl->hw->wiphy, NULL, 20,
81 WLCORE_VENDOR_EVENT_SC_SYNC, 81 WLCORE_VENDOR_EVENT_SC_SYNC,
82 GFP_KERNEL); 82 GFP_KERNEL);
83 83
@@ -98,7 +98,7 @@ static int wlcore_smart_config_decode_event(struct wl1271 *wl,
98 wl1271_debug(DEBUG_EVENT, "SMART_CONFIG_DECODE_EVENT_ID"); 98 wl1271_debug(DEBUG_EVENT, "SMART_CONFIG_DECODE_EVENT_ID");
99 wl1271_dump_ascii(DEBUG_EVENT, "SSID:", ssid, ssid_len); 99 wl1271_dump_ascii(DEBUG_EVENT, "SSID:", ssid, ssid_len);
100 100
101 skb = cfg80211_vendor_event_alloc(wl->hw->wiphy, 101 skb = cfg80211_vendor_event_alloc(wl->hw->wiphy, NULL,
102 ssid_len + pwd_len + 20, 102 ssid_len + pwd_len + 20,
103 WLCORE_VENDOR_EVENT_SC_DECODE, 103 WLCORE_VENDOR_EVENT_SC_DECODE,
104 GFP_KERNEL); 104 GFP_KERNEL);