aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless
diff options
context:
space:
mode:
authorEmmanuel Grumbach <emmanuel.grumbach@intel.com>2016-02-27 14:59:03 -0500
committerEmmanuel Grumbach <emmanuel.grumbach@intel.com>2016-02-27 14:59:03 -0500
commit51bcc7386a01074452c585e421a24dfc7b19063b (patch)
treef9c7633d6d4349c0e21b23090b857a0fcd790418 /drivers/net/wireless
parentc89e333d5e4a27f736c960b29040b261c21563a5 (diff)
parent50ee738d7271fe825e4024cdfa5c5301a871e2c2 (diff)
Merge tag 'mac80211-next-for-davem-2016-02-26' into next2
Here's another round of updates for -next: * big A-MSDU RX performance improvement (avoid linearize of paged RX) * rfkill changes: cleanups, documentation, platform properties * basic PBSS support in cfg80211 * MU-MIMO action frame processing support * BlockAck reordering & duplicate detection offload support * various cleanups & little fixes
Diffstat (limited to 'drivers/net/wireless')
-rw-r--r--drivers/net/wireless/ath/ath10k/mac.c7
-rw-r--r--drivers/net/wireless/ath/ath9k/htc_drv_main.c7
-rw-r--r--drivers/net/wireless/ath/ath9k/main.c8
-rw-r--r--drivers/net/wireless/ath/carl9170/main.c8
-rw-r--r--drivers/net/wireless/ath/wcn36xx/main.c8
-rw-r--r--drivers/net/wireless/ath/wil6210/cfg80211.c10
-rw-r--r--drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c8
-rw-r--r--drivers/net/wireless/intel/iwlegacy/4965-mac.c8
-rw-r--r--drivers/net/wireless/intel/iwlegacy/4965.h4
-rw-r--r--drivers/net/wireless/intel/iwlwifi/dvm/lib.c20
-rw-r--r--drivers/net/wireless/intel/iwlwifi/dvm/mac80211.c9
-rw-r--r--drivers/net/wireless/intel/iwlwifi/mvm/d3.c15
-rw-r--r--drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c11
-rw-r--r--drivers/net/wireless/intel/iwlwifi/mvm/tx.c2
-rw-r--r--drivers/net/wireless/mac80211_hwsim.c12
-rw-r--r--drivers/net/wireless/marvell/mwl8k.c10
-rw-r--r--drivers/net/wireless/mediatek/mt7601u/main.c8
-rw-r--r--drivers/net/wireless/ralink/rt2x00/rt2800lib.c7
-rw-r--r--drivers/net/wireless/ralink/rt2x00/rt2800lib.h4
-rw-r--r--drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c6
-rw-r--r--drivers/net/wireless/realtek/rtlwifi/core.c8
-rw-r--r--drivers/net/wireless/rsi/rsi_91x_mac80211.c19
-rw-r--r--drivers/net/wireless/st/cw1200/sta.c4
-rw-r--r--drivers/net/wireless/st/cw1200/sta.h4
-rw-r--r--drivers/net/wireless/ti/wlcore/main.c8
25 files changed, 121 insertions, 94 deletions
diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c
index 6146a293601a..368de5e5a04f 100644
--- a/drivers/net/wireless/ath/ath10k/mac.c
+++ b/drivers/net/wireless/ath/ath10k/mac.c
@@ -6366,12 +6366,13 @@ static u64 ath10k_get_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
6366 6366
6367static int ath10k_ampdu_action(struct ieee80211_hw *hw, 6367static int ath10k_ampdu_action(struct ieee80211_hw *hw,
6368 struct ieee80211_vif *vif, 6368 struct ieee80211_vif *vif,
6369 enum ieee80211_ampdu_mlme_action action, 6369 struct ieee80211_ampdu_params *params)
6370 struct ieee80211_sta *sta, u16 tid, u16 *ssn,
6371 u8 buf_size, bool amsdu)
6372{ 6370{
6373 struct ath10k *ar = hw->priv; 6371 struct ath10k *ar = hw->priv;
6374 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); 6372 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
6373 struct ieee80211_sta *sta = params->sta;
6374 enum ieee80211_ampdu_mlme_action action = params->action;
6375 u16 tid = params->tid;
6375 6376
6376 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac ampdu vdev_id %i sta %pM tid %hu action %d\n", 6377 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac ampdu vdev_id %i sta %pM tid %hu action %d\n",
6377 arvif->vdev_id, sta->addr, tid, action); 6378 arvif->vdev_id, sta->addr, tid, action);
diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_main.c b/drivers/net/wireless/ath/ath9k/htc_drv_main.c
index fe1fd1a5ae15..639294a9e34d 100644
--- a/drivers/net/wireless/ath/ath9k/htc_drv_main.c
+++ b/drivers/net/wireless/ath/ath9k/htc_drv_main.c
@@ -1657,13 +1657,14 @@ static void ath9k_htc_reset_tsf(struct ieee80211_hw *hw,
1657 1657
1658static int ath9k_htc_ampdu_action(struct ieee80211_hw *hw, 1658static int ath9k_htc_ampdu_action(struct ieee80211_hw *hw,
1659 struct ieee80211_vif *vif, 1659 struct ieee80211_vif *vif,
1660 enum ieee80211_ampdu_mlme_action action, 1660 struct ieee80211_ampdu_params *params)
1661 struct ieee80211_sta *sta,
1662 u16 tid, u16 *ssn, u8 buf_size, bool amsdu)
1663{ 1661{
1664 struct ath9k_htc_priv *priv = hw->priv; 1662 struct ath9k_htc_priv *priv = hw->priv;
1665 struct ath9k_htc_sta *ista; 1663 struct ath9k_htc_sta *ista;
1666 int ret = 0; 1664 int ret = 0;
1665 struct ieee80211_sta *sta = params->sta;
1666 enum ieee80211_ampdu_mlme_action action = params->action;
1667 u16 tid = params->tid;
1667 1668
1668 mutex_lock(&priv->mutex); 1669 mutex_lock(&priv->mutex);
1669 ath9k_htc_ps_wakeup(priv); 1670 ath9k_htc_ps_wakeup(priv);
diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c
index c1b33fdcca08..cf58a304e9f0 100644
--- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/drivers/net/wireless/ath/ath9k/main.c
@@ -1864,14 +1864,16 @@ static void ath9k_reset_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
1864 1864
1865static int ath9k_ampdu_action(struct ieee80211_hw *hw, 1865static int ath9k_ampdu_action(struct ieee80211_hw *hw,
1866 struct ieee80211_vif *vif, 1866 struct ieee80211_vif *vif,
1867 enum ieee80211_ampdu_mlme_action action, 1867 struct ieee80211_ampdu_params *params)
1868 struct ieee80211_sta *sta,
1869 u16 tid, u16 *ssn, u8 buf_size, bool amsdu)
1870{ 1868{
1871 struct ath_softc *sc = hw->priv; 1869 struct ath_softc *sc = hw->priv;
1872 struct ath_common *common = ath9k_hw_common(sc->sc_ah); 1870 struct ath_common *common = ath9k_hw_common(sc->sc_ah);
1873 bool flush = false; 1871 bool flush = false;
1874 int ret = 0; 1872 int ret = 0;
1873 struct ieee80211_sta *sta = params->sta;
1874 enum ieee80211_ampdu_mlme_action action = params->action;
1875 u16 tid = params->tid;
1876 u16 *ssn = &params->ssn;
1875 1877
1876 mutex_lock(&sc->mutex); 1878 mutex_lock(&sc->mutex);
1877 1879
diff --git a/drivers/net/wireless/ath/carl9170/main.c b/drivers/net/wireless/ath/carl9170/main.c
index 19d3d64416bf..4d1527a2e292 100644
--- a/drivers/net/wireless/ath/carl9170/main.c
+++ b/drivers/net/wireless/ath/carl9170/main.c
@@ -1413,10 +1413,12 @@ static void carl9170_ampdu_work(struct work_struct *work)
1413 1413
1414static int carl9170_op_ampdu_action(struct ieee80211_hw *hw, 1414static int carl9170_op_ampdu_action(struct ieee80211_hw *hw,
1415 struct ieee80211_vif *vif, 1415 struct ieee80211_vif *vif,
1416 enum ieee80211_ampdu_mlme_action action, 1416 struct ieee80211_ampdu_params *params)
1417 struct ieee80211_sta *sta,
1418 u16 tid, u16 *ssn, u8 buf_size, bool amsdu)
1419{ 1417{
1418 struct ieee80211_sta *sta = params->sta;
1419 enum ieee80211_ampdu_mlme_action action = params->action;
1420 u16 tid = params->tid;
1421 u16 *ssn = &params->ssn;
1420 struct ar9170 *ar = hw->priv; 1422 struct ar9170 *ar = hw->priv;
1421 struct carl9170_sta_info *sta_info = (void *) sta->drv_priv; 1423 struct carl9170_sta_info *sta_info = (void *) sta->drv_priv;
1422 struct carl9170_sta_tid *tid_info; 1424 struct carl9170_sta_tid *tid_info;
diff --git a/drivers/net/wireless/ath/wcn36xx/main.c b/drivers/net/wireless/ath/wcn36xx/main.c
index 7c169abdbafe..a27279c2c695 100644
--- a/drivers/net/wireless/ath/wcn36xx/main.c
+++ b/drivers/net/wireless/ath/wcn36xx/main.c
@@ -857,12 +857,14 @@ static int wcn36xx_resume(struct ieee80211_hw *hw)
857 857
858static int wcn36xx_ampdu_action(struct ieee80211_hw *hw, 858static int wcn36xx_ampdu_action(struct ieee80211_hw *hw,
859 struct ieee80211_vif *vif, 859 struct ieee80211_vif *vif,
860 enum ieee80211_ampdu_mlme_action action, 860 struct ieee80211_ampdu_params *params)
861 struct ieee80211_sta *sta, u16 tid, u16 *ssn,
862 u8 buf_size, bool amsdu)
863{ 861{
864 struct wcn36xx *wcn = hw->priv; 862 struct wcn36xx *wcn = hw->priv;
865 struct wcn36xx_sta *sta_priv = NULL; 863 struct wcn36xx_sta *sta_priv = NULL;
864 struct ieee80211_sta *sta = params->sta;
865 enum ieee80211_ampdu_mlme_action action = params->action;
866 u16 tid = params->tid;
867 u16 *ssn = &params->ssn;
866 868
867 wcn36xx_dbg(WCN36XX_DBG_MAC, "mac ampdu action action %d tid %d\n", 869 wcn36xx_dbg(WCN36XX_DBG_MAC, "mac ampdu action action %d tid %d\n",
868 action, tid); 870 action, tid);
diff --git a/drivers/net/wireless/ath/wil6210/cfg80211.c b/drivers/net/wireless/ath/wil6210/cfg80211.c
index 20d07ef679e8..1f231cd08138 100644
--- a/drivers/net/wireless/ath/wil6210/cfg80211.c
+++ b/drivers/net/wireless/ath/wil6210/cfg80211.c
@@ -422,6 +422,11 @@ static int wil_cfg80211_connect(struct wiphy *wiphy,
422 if (sme->privacy && !rsn_eid) 422 if (sme->privacy && !rsn_eid)
423 wil_info(wil, "WSC connection\n"); 423 wil_info(wil, "WSC connection\n");
424 424
425 if (sme->pbss) {
426 wil_err(wil, "connect - PBSS not yet supported\n");
427 return -EOPNOTSUPP;
428 }
429
425 bss = cfg80211_get_bss(wiphy, sme->channel, sme->bssid, 430 bss = cfg80211_get_bss(wiphy, sme->channel, sme->bssid,
426 sme->ssid, sme->ssid_len, 431 sme->ssid, sme->ssid_len,
427 IEEE80211_BSS_TYPE_ESS, IEEE80211_PRIVACY_ANY); 432 IEEE80211_BSS_TYPE_ESS, IEEE80211_PRIVACY_ANY);
@@ -870,6 +875,11 @@ static int wil_cfg80211_start_ap(struct wiphy *wiphy,
870 return -EINVAL; 875 return -EINVAL;
871 } 876 }
872 877
878 if (info->pbss) {
879 wil_err(wil, "AP: PBSS not yet supported\n");
880 return -EOPNOTSUPP;
881 }
882
873 switch (info->hidden_ssid) { 883 switch (info->hidden_ssid) {
874 case NL80211_HIDDEN_SSID_NOT_IN_USE: 884 case NL80211_HIDDEN_SSID_NOT_IN_USE:
875 hidden_ssid = WMI_HIDDEN_SSID_DISABLED; 885 hidden_ssid = WMI_HIDDEN_SSID_DISABLED;
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c
index bec2dc1ca2e4..61ae2768132a 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c
@@ -818,13 +818,15 @@ brcms_ops_sta_add(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
818static int 818static int
819brcms_ops_ampdu_action(struct ieee80211_hw *hw, 819brcms_ops_ampdu_action(struct ieee80211_hw *hw,
820 struct ieee80211_vif *vif, 820 struct ieee80211_vif *vif,
821 enum ieee80211_ampdu_mlme_action action, 821 struct ieee80211_ampdu_params *params)
822 struct ieee80211_sta *sta, u16 tid, u16 *ssn,
823 u8 buf_size, bool amsdu)
824{ 822{
825 struct brcms_info *wl = hw->priv; 823 struct brcms_info *wl = hw->priv;
826 struct scb *scb = &wl->wlc->pri_scb; 824 struct scb *scb = &wl->wlc->pri_scb;
827 int status; 825 int status;
826 struct ieee80211_sta *sta = params->sta;
827 enum ieee80211_ampdu_mlme_action action = params->action;
828 u16 tid = params->tid;
829 u8 buf_size = params->buf_size;
828 830
829 if (WARN_ON(scb->magic != SCB_MAGIC)) 831 if (WARN_ON(scb->magic != SCB_MAGIC))
830 return -EIDRM; 832 return -EIDRM;
diff --git a/drivers/net/wireless/intel/iwlegacy/4965-mac.c b/drivers/net/wireless/intel/iwlegacy/4965-mac.c
index fd38aa0763e4..b75f4ef3cdc7 100644
--- a/drivers/net/wireless/intel/iwlegacy/4965-mac.c
+++ b/drivers/net/wireless/intel/iwlegacy/4965-mac.c
@@ -5982,12 +5982,14 @@ il4965_mac_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
5982 5982
5983int 5983int
5984il4965_mac_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif, 5984il4965_mac_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
5985 enum ieee80211_ampdu_mlme_action action, 5985 struct ieee80211_ampdu_params *params)
5986 struct ieee80211_sta *sta, u16 tid, u16 * ssn,
5987 u8 buf_size, bool amsdu)
5988{ 5986{
5989 struct il_priv *il = hw->priv; 5987 struct il_priv *il = hw->priv;
5990 int ret = -EINVAL; 5988 int ret = -EINVAL;
5989 struct ieee80211_sta *sta = params->sta;
5990 enum ieee80211_ampdu_mlme_action action = params->action;
5991 u16 tid = params->tid;
5992 u16 *ssn = &params->ssn;
5991 5993
5992 D_HT("A-MPDU action on addr %pM tid %d\n", sta->addr, tid); 5994 D_HT("A-MPDU action on addr %pM tid %d\n", sta->addr, tid);
5993 5995
diff --git a/drivers/net/wireless/intel/iwlegacy/4965.h b/drivers/net/wireless/intel/iwlegacy/4965.h
index 8ab8706f9422..e432715e02d8 100644
--- a/drivers/net/wireless/intel/iwlegacy/4965.h
+++ b/drivers/net/wireless/intel/iwlegacy/4965.h
@@ -182,9 +182,7 @@ void il4965_mac_update_tkip_key(struct ieee80211_hw *hw,
182 struct ieee80211_sta *sta, u32 iv32, 182 struct ieee80211_sta *sta, u32 iv32,
183 u16 *phase1key); 183 u16 *phase1key);
184int il4965_mac_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif, 184int il4965_mac_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
185 enum ieee80211_ampdu_mlme_action action, 185 struct ieee80211_ampdu_params *params);
186 struct ieee80211_sta *sta, u16 tid, u16 * ssn,
187 u8 buf_size, bool amsdu);
188int il4965_mac_sta_add(struct ieee80211_hw *hw, struct ieee80211_vif *vif, 186int il4965_mac_sta_add(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
189 struct ieee80211_sta *sta); 187 struct ieee80211_sta *sta);
190void 188void
diff --git a/drivers/net/wireless/intel/iwlwifi/dvm/lib.c b/drivers/net/wireless/intel/iwlwifi/dvm/lib.c
index 4841be2aa499..1799469268ea 100644
--- a/drivers/net/wireless/intel/iwlwifi/dvm/lib.c
+++ b/drivers/net/wireless/intel/iwlwifi/dvm/lib.c
@@ -943,14 +943,16 @@ static void iwlagn_wowlan_program_keys(struct ieee80211_hw *hw,
943 switch (key->cipher) { 943 switch (key->cipher) {
944 case WLAN_CIPHER_SUITE_TKIP: 944 case WLAN_CIPHER_SUITE_TKIP:
945 if (sta) { 945 if (sta) {
946 u64 pn64;
947
946 tkip_sc = data->rsc_tsc->all_tsc_rsc.tkip.unicast_rsc; 948 tkip_sc = data->rsc_tsc->all_tsc_rsc.tkip.unicast_rsc;
947 tkip_tx_sc = &data->rsc_tsc->all_tsc_rsc.tkip.tsc; 949 tkip_tx_sc = &data->rsc_tsc->all_tsc_rsc.tkip.tsc;
948 950
949 rx_p1ks = data->tkip->rx_uni; 951 rx_p1ks = data->tkip->rx_uni;
950 952
951 ieee80211_get_key_tx_seq(key, &seq); 953 pn64 = atomic64_read(&key->tx_pn);
952 tkip_tx_sc->iv16 = cpu_to_le16(seq.tkip.iv16); 954 tkip_tx_sc->iv16 = cpu_to_le16(TKIP_PN_TO_IV16(pn64));
953 tkip_tx_sc->iv32 = cpu_to_le32(seq.tkip.iv32); 955 tkip_tx_sc->iv32 = cpu_to_le32(TKIP_PN_TO_IV32(pn64));
954 956
955 ieee80211_get_tkip_p1k_iv(key, seq.tkip.iv32, p1k); 957 ieee80211_get_tkip_p1k_iv(key, seq.tkip.iv32, p1k);
956 iwlagn_convert_p1k(p1k, data->tkip->tx.p1k); 958 iwlagn_convert_p1k(p1k, data->tkip->tx.p1k);
@@ -996,19 +998,13 @@ static void iwlagn_wowlan_program_keys(struct ieee80211_hw *hw,
996 break; 998 break;
997 case WLAN_CIPHER_SUITE_CCMP: 999 case WLAN_CIPHER_SUITE_CCMP:
998 if (sta) { 1000 if (sta) {
999 u8 *pn = seq.ccmp.pn; 1001 u64 pn64;
1000 1002
1001 aes_sc = data->rsc_tsc->all_tsc_rsc.aes.unicast_rsc; 1003 aes_sc = data->rsc_tsc->all_tsc_rsc.aes.unicast_rsc;
1002 aes_tx_sc = &data->rsc_tsc->all_tsc_rsc.aes.tsc; 1004 aes_tx_sc = &data->rsc_tsc->all_tsc_rsc.aes.tsc;
1003 1005
1004 ieee80211_get_key_tx_seq(key, &seq); 1006 pn64 = atomic64_read(&key->tx_pn);
1005 aes_tx_sc->pn = cpu_to_le64( 1007 aes_tx_sc->pn = cpu_to_le64(pn64);
1006 (u64)pn[5] |
1007 ((u64)pn[4] << 8) |
1008 ((u64)pn[3] << 16) |
1009 ((u64)pn[2] << 24) |
1010 ((u64)pn[1] << 32) |
1011 ((u64)pn[0] << 40));
1012 } else 1008 } else
1013 aes_sc = data->rsc_tsc->all_tsc_rsc.aes.multicast_rsc; 1009 aes_sc = data->rsc_tsc->all_tsc_rsc.aes.multicast_rsc;
1014 1010
diff --git a/drivers/net/wireless/intel/iwlwifi/dvm/mac80211.c b/drivers/net/wireless/intel/iwlwifi/dvm/mac80211.c
index 4db4cb7aa73a..c63ea79571ff 100644
--- a/drivers/net/wireless/intel/iwlwifi/dvm/mac80211.c
+++ b/drivers/net/wireless/intel/iwlwifi/dvm/mac80211.c
@@ -732,12 +732,15 @@ static inline bool iwl_enable_tx_ampdu(const struct iwl_cfg *cfg)
732 732
733static int iwlagn_mac_ampdu_action(struct ieee80211_hw *hw, 733static int iwlagn_mac_ampdu_action(struct ieee80211_hw *hw,
734 struct ieee80211_vif *vif, 734 struct ieee80211_vif *vif,
735 enum ieee80211_ampdu_mlme_action action, 735 struct ieee80211_ampdu_params *params)
736 struct ieee80211_sta *sta, u16 tid, u16 *ssn,
737 u8 buf_size, bool amsdu)
738{ 736{
739 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); 737 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw);
740 int ret = -EINVAL; 738 int ret = -EINVAL;
739 struct ieee80211_sta *sta = params->sta;
740 enum ieee80211_ampdu_mlme_action action = params->action;
741 u16 tid = params->tid;
742 u16 *ssn = &params->ssn;
743 u8 buf_size = params->buf_size;
741 struct iwl_station_priv *sta_priv = (void *) sta->drv_priv; 744 struct iwl_station_priv *sta_priv = (void *) sta->drv_priv;
742 745
743 IWL_DEBUG_HT(priv, "A-MPDU action on addr %pM tid %d\n", 746 IWL_DEBUG_HT(priv, "A-MPDU action on addr %pM tid %d\n",
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/d3.c b/drivers/net/wireless/intel/iwlwifi/mvm/d3.c
index 346376187ef8..5214482a0403 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/d3.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/d3.c
@@ -251,16 +251,19 @@ static void iwl_mvm_wowlan_program_keys(struct ieee80211_hw *hw,
251 return; 251 return;
252 case WLAN_CIPHER_SUITE_TKIP: 252 case WLAN_CIPHER_SUITE_TKIP:
253 if (sta) { 253 if (sta) {
254 u64 pn64;
255
254 tkip_sc = data->rsc_tsc->all_tsc_rsc.tkip.unicast_rsc; 256 tkip_sc = data->rsc_tsc->all_tsc_rsc.tkip.unicast_rsc;
255 tkip_tx_sc = &data->rsc_tsc->all_tsc_rsc.tkip.tsc; 257 tkip_tx_sc = &data->rsc_tsc->all_tsc_rsc.tkip.tsc;
256 258
257 rx_p1ks = data->tkip->rx_uni; 259 rx_p1ks = data->tkip->rx_uni;
258 260
259 ieee80211_get_key_tx_seq(key, &seq); 261 pn64 = atomic64_read(&key->tx_pn);
260 tkip_tx_sc->iv16 = cpu_to_le16(seq.tkip.iv16); 262 tkip_tx_sc->iv16 = cpu_to_le16(TKIP_PN_TO_IV16(pn64));
261 tkip_tx_sc->iv32 = cpu_to_le32(seq.tkip.iv32); 263 tkip_tx_sc->iv32 = cpu_to_le32(TKIP_PN_TO_IV32(pn64));
262 264
263 ieee80211_get_tkip_p1k_iv(key, seq.tkip.iv32, p1k); 265 ieee80211_get_tkip_p1k_iv(key, TKIP_PN_TO_IV32(pn64),
266 p1k);
264 iwl_mvm_convert_p1k(p1k, data->tkip->tx.p1k); 267 iwl_mvm_convert_p1k(p1k, data->tkip->tx.p1k);
265 268
266 memcpy(data->tkip->mic_keys.tx, 269 memcpy(data->tkip->mic_keys.tx,
@@ -1614,7 +1617,9 @@ static void iwl_mvm_d3_update_keys(struct ieee80211_hw *hw,
1614 case WLAN_CIPHER_SUITE_TKIP: 1617 case WLAN_CIPHER_SUITE_TKIP:
1615 iwl_mvm_tkip_sc_to_seq(&sc->tkip.tsc, &seq); 1618 iwl_mvm_tkip_sc_to_seq(&sc->tkip.tsc, &seq);
1616 iwl_mvm_set_tkip_rx_seq(sc->tkip.unicast_rsc, key); 1619 iwl_mvm_set_tkip_rx_seq(sc->tkip.unicast_rsc, key);
1617 ieee80211_set_key_tx_seq(key, &seq); 1620 atomic64_set(&key->tx_pn,
1621 (u64)seq.tkip.iv16 |
1622 ((u64)seq.tkip.iv32 << 16));
1618 break; 1623 break;
1619 } 1624 }
1620 1625
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
index 01476f545695..53156810185d 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
@@ -837,13 +837,16 @@ iwl_mvm_ampdu_check_trigger(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
837 837
838static int iwl_mvm_mac_ampdu_action(struct ieee80211_hw *hw, 838static int iwl_mvm_mac_ampdu_action(struct ieee80211_hw *hw,
839 struct ieee80211_vif *vif, 839 struct ieee80211_vif *vif,
840 enum ieee80211_ampdu_mlme_action action, 840 struct ieee80211_ampdu_params *params)
841 struct ieee80211_sta *sta, u16 tid,
842 u16 *ssn, u8 buf_size, bool amsdu)
843{ 841{
844 struct iwl_mvm *mvm = IWL_MAC80211_GET_MVM(hw); 842 struct iwl_mvm *mvm = IWL_MAC80211_GET_MVM(hw);
845 int ret; 843 int ret;
846 bool tx_agg_ref = false; 844 bool tx_agg_ref = false;
845 struct ieee80211_sta *sta = params->sta;
846 enum ieee80211_ampdu_mlme_action action = params->action;
847 u16 tid = params->tid;
848 u16 *ssn = &params->ssn;
849 u8 buf_size = params->buf_size;
847 850
848 IWL_DEBUG_HT(mvm, "A-MPDU action on addr %pM tid %d: action %d\n", 851 IWL_DEBUG_HT(mvm, "A-MPDU action on addr %pM tid %d: action %d\n",
849 sta->addr, tid, action); 852 sta->addr, tid, action);
@@ -2582,7 +2585,7 @@ static int iwl_mvm_mac_set_key(struct ieee80211_hw *hw,
2582 switch (key->cipher) { 2585 switch (key->cipher) {
2583 case WLAN_CIPHER_SUITE_TKIP: 2586 case WLAN_CIPHER_SUITE_TKIP:
2584 key->flags |= IEEE80211_KEY_FLAG_GENERATE_MMIC; 2587 key->flags |= IEEE80211_KEY_FLAG_GENERATE_MMIC;
2585 key->flags |= IEEE80211_KEY_FLAG_GENERATE_IV; 2588 key->flags |= IEEE80211_KEY_FLAG_PUT_IV_SPACE;
2586 break; 2589 break;
2587 case WLAN_CIPHER_SUITE_CCMP: 2590 case WLAN_CIPHER_SUITE_CCMP:
2588 key->flags |= IEEE80211_KEY_FLAG_PUT_IV_SPACE; 2591 key->flags |= IEEE80211_KEY_FLAG_PUT_IV_SPACE;
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
index 5d73db2534a0..caec54ba617a 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
@@ -299,6 +299,8 @@ static void iwl_mvm_set_tx_cmd_crypto(struct iwl_mvm *mvm,
299 299
300 case WLAN_CIPHER_SUITE_TKIP: 300 case WLAN_CIPHER_SUITE_TKIP:
301 tx_cmd->sec_ctl = TX_CMD_SEC_TKIP; 301 tx_cmd->sec_ctl = TX_CMD_SEC_TKIP;
302 pn = atomic64_inc_return(&keyconf->tx_pn);
303 ieee80211_tkip_add_iv(crypto_hdr, keyconf, pn);
302 ieee80211_get_tkip_p2k(keyconf, skb_frag, tx_cmd->key); 304 ieee80211_get_tkip_p2k(keyconf, skb_frag, tx_cmd->key);
303 break; 305 break;
304 306
diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c
index c32889a1e39c..ee37af1066d2 100644
--- a/drivers/net/wireless/mac80211_hwsim.c
+++ b/drivers/net/wireless/mac80211_hwsim.c
@@ -1333,10 +1333,8 @@ static void mac80211_hwsim_tx(struct ieee80211_hw *hw,
1333 data->tx_bytes += skb->len; 1333 data->tx_bytes += skb->len;
1334 ack = mac80211_hwsim_tx_frame_no_nl(hw, skb, channel); 1334 ack = mac80211_hwsim_tx_frame_no_nl(hw, skb, channel);
1335 1335
1336 if (ack && skb->len >= 16) { 1336 if (ack && skb->len >= 16)
1337 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
1338 mac80211_hwsim_monitor_ack(channel, hdr->addr2); 1337 mac80211_hwsim_monitor_ack(channel, hdr->addr2);
1339 }
1340 1338
1341 ieee80211_tx_info_clear_status(txi); 1339 ieee80211_tx_info_clear_status(txi);
1342 1340
@@ -1845,10 +1843,12 @@ static int mac80211_hwsim_testmode_cmd(struct ieee80211_hw *hw,
1845 1843
1846static int mac80211_hwsim_ampdu_action(struct ieee80211_hw *hw, 1844static int mac80211_hwsim_ampdu_action(struct ieee80211_hw *hw,
1847 struct ieee80211_vif *vif, 1845 struct ieee80211_vif *vif,
1848 enum ieee80211_ampdu_mlme_action action, 1846 struct ieee80211_ampdu_params *params)
1849 struct ieee80211_sta *sta, u16 tid, u16 *ssn,
1850 u8 buf_size, bool amsdu)
1851{ 1847{
1848 struct ieee80211_sta *sta = params->sta;
1849 enum ieee80211_ampdu_mlme_action action = params->action;
1850 u16 tid = params->tid;
1851
1852 switch (action) { 1852 switch (action) {
1853 case IEEE80211_AMPDU_TX_START: 1853 case IEEE80211_AMPDU_TX_START:
1854 ieee80211_start_tx_ba_cb_irqsafe(vif, sta->addr, tid); 1854 ieee80211_start_tx_ba_cb_irqsafe(vif, sta->addr, tid);
diff --git a/drivers/net/wireless/marvell/mwl8k.c b/drivers/net/wireless/marvell/mwl8k.c
index 30e3aaae32e2..088429d0a634 100644
--- a/drivers/net/wireless/marvell/mwl8k.c
+++ b/drivers/net/wireless/marvell/mwl8k.c
@@ -5421,11 +5421,13 @@ static int mwl8k_get_survey(struct ieee80211_hw *hw, int idx,
5421 5421
5422static int 5422static int
5423mwl8k_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif, 5423mwl8k_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
5424 enum ieee80211_ampdu_mlme_action action, 5424 struct ieee80211_ampdu_params *params)
5425 struct ieee80211_sta *sta, u16 tid, u16 *ssn,
5426 u8 buf_size, bool amsdu)
5427{ 5425{
5428 5426 struct ieee80211_sta *sta = params->sta;
5427 enum ieee80211_ampdu_mlme_action action = params->action;
5428 u16 tid = params->tid;
5429 u16 *ssn = &params->ssn;
5430 u8 buf_size = params->buf_size;
5429 int i, rc = 0; 5431 int i, rc = 0;
5430 struct mwl8k_priv *priv = hw->priv; 5432 struct mwl8k_priv *priv = hw->priv;
5431 struct mwl8k_ampdu_stream *stream; 5433 struct mwl8k_ampdu_stream *stream;
diff --git a/drivers/net/wireless/mediatek/mt7601u/main.c b/drivers/net/wireless/mediatek/mt7601u/main.c
index f715eee39851..e70dd9523911 100644
--- a/drivers/net/wireless/mediatek/mt7601u/main.c
+++ b/drivers/net/wireless/mediatek/mt7601u/main.c
@@ -334,11 +334,13 @@ static int mt7601u_set_rts_threshold(struct ieee80211_hw *hw, u32 value)
334 334
335static int 335static int
336mt76_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif, 336mt76_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
337 enum ieee80211_ampdu_mlme_action action, 337 struct ieee80211_ampdu_params *params)
338 struct ieee80211_sta *sta, u16 tid, u16 *ssn, u8 buf_size,
339 bool amsdu)
340{ 338{
341 struct mt7601u_dev *dev = hw->priv; 339 struct mt7601u_dev *dev = hw->priv;
340 struct ieee80211_sta *sta = params->sta;
341 enum ieee80211_ampdu_mlme_action action = params->action;
342 u16 tid = params->tid;
343 u16 *ssn = &params->ssn;
342 struct mt76_sta *msta = (struct mt76_sta *) sta->drv_priv; 344 struct mt76_sta *msta = (struct mt76_sta *) sta->drv_priv;
343 345
344 WARN_ON(msta->wcid.idx > GROUP_WCID(0)); 346 WARN_ON(msta->wcid.idx > GROUP_WCID(0));
diff --git a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
index 9733b31a780d..69c1c09687a3 100644
--- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
@@ -7935,10 +7935,11 @@ u64 rt2800_get_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
7935EXPORT_SYMBOL_GPL(rt2800_get_tsf); 7935EXPORT_SYMBOL_GPL(rt2800_get_tsf);
7936 7936
7937int rt2800_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif, 7937int rt2800_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
7938 enum ieee80211_ampdu_mlme_action action, 7938 struct ieee80211_ampdu_params *params)
7939 struct ieee80211_sta *sta, u16 tid, u16 *ssn,
7940 u8 buf_size, bool amsdu)
7941{ 7939{
7940 struct ieee80211_sta *sta = params->sta;
7941 enum ieee80211_ampdu_mlme_action action = params->action;
7942 u16 tid = params->tid;
7942 struct rt2x00_sta *sta_priv = (struct rt2x00_sta *)sta->drv_priv; 7943 struct rt2x00_sta *sta_priv = (struct rt2x00_sta *)sta->drv_priv;
7943 int ret = 0; 7944 int ret = 0;
7944 7945
diff --git a/drivers/net/wireless/ralink/rt2x00/rt2800lib.h b/drivers/net/wireless/ralink/rt2x00/rt2800lib.h
index 440790b92b19..83f1a44fb9b4 100644
--- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.h
+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.h
@@ -218,9 +218,7 @@ int rt2800_conf_tx(struct ieee80211_hw *hw,
218 const struct ieee80211_tx_queue_params *params); 218 const struct ieee80211_tx_queue_params *params);
219u64 rt2800_get_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif); 219u64 rt2800_get_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif);
220int rt2800_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif, 220int rt2800_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
221 enum ieee80211_ampdu_mlme_action action, 221 struct ieee80211_ampdu_params *params);
222 struct ieee80211_sta *sta, u16 tid, u16 *ssn,
223 u8 buf_size, bool amsdu);
224int rt2800_get_survey(struct ieee80211_hw *hw, int idx, 222int rt2800_get_survey(struct ieee80211_hw *hw, int idx,
225 struct survey_info *survey); 223 struct survey_info *survey);
226void rt2800_disable_wpdma(struct rt2x00_dev *rt2x00dev); 224void rt2800_disable_wpdma(struct rt2x00_dev *rt2x00dev);
diff --git a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c
index 6aed923a709a..7d820c395375 100644
--- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c
+++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c
@@ -5375,13 +5375,13 @@ static int rtl8xxxu_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
5375 5375
5376static int 5376static int
5377rtl8xxxu_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif, 5377rtl8xxxu_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
5378 enum ieee80211_ampdu_mlme_action action, 5378 struct ieee80211_ampdu_params *params)
5379 struct ieee80211_sta *sta, u16 tid, u16 *ssn, u8 buf_size,
5380 bool amsdu)
5381{ 5379{
5382 struct rtl8xxxu_priv *priv = hw->priv; 5380 struct rtl8xxxu_priv *priv = hw->priv;
5383 struct device *dev = &priv->udev->dev; 5381 struct device *dev = &priv->udev->dev;
5384 u8 ampdu_factor, ampdu_density; 5382 u8 ampdu_factor, ampdu_density;
5383 struct ieee80211_sta *sta = params->sta;
5384 enum ieee80211_ampdu_mlme_action action = params->action;
5385 5385
5386 switch (action) { 5386 switch (action) {
5387 case IEEE80211_AMPDU_TX_START: 5387 case IEEE80211_AMPDU_TX_START:
diff --git a/drivers/net/wireless/realtek/rtlwifi/core.c b/drivers/net/wireless/realtek/rtlwifi/core.c
index 4ae421ef30d9..f2507610314b 100644
--- a/drivers/net/wireless/realtek/rtlwifi/core.c
+++ b/drivers/net/wireless/realtek/rtlwifi/core.c
@@ -1371,11 +1371,13 @@ static void rtl_op_sta_notify(struct ieee80211_hw *hw,
1371 1371
1372static int rtl_op_ampdu_action(struct ieee80211_hw *hw, 1372static int rtl_op_ampdu_action(struct ieee80211_hw *hw,
1373 struct ieee80211_vif *vif, 1373 struct ieee80211_vif *vif,
1374 enum ieee80211_ampdu_mlme_action action, 1374 struct ieee80211_ampdu_params *params)
1375 struct ieee80211_sta *sta, u16 tid, u16 *ssn,
1376 u8 buf_size, bool amsdu)
1377{ 1375{
1378 struct rtl_priv *rtlpriv = rtl_priv(hw); 1376 struct rtl_priv *rtlpriv = rtl_priv(hw);
1377 struct ieee80211_sta *sta = params->sta;
1378 enum ieee80211_ampdu_mlme_action action = params->action;
1379 u16 tid = params->tid;
1380 u16 *ssn = &params->ssn;
1379 1381
1380 switch (action) { 1382 switch (action) {
1381 case IEEE80211_AMPDU_TX_START: 1383 case IEEE80211_AMPDU_TX_START:
diff --git a/drivers/net/wireless/rsi/rsi_91x_mac80211.c b/drivers/net/wireless/rsi/rsi_91x_mac80211.c
index b5bcc933a2a6..4df992de7d07 100644
--- a/drivers/net/wireless/rsi/rsi_91x_mac80211.c
+++ b/drivers/net/wireless/rsi/rsi_91x_mac80211.c
@@ -659,29 +659,24 @@ static int rsi_mac80211_set_key(struct ieee80211_hw *hw,
659 * informs the f/w regarding this. 659 * informs the f/w regarding this.
660 * @hw: Pointer to the ieee80211_hw structure. 660 * @hw: Pointer to the ieee80211_hw structure.
661 * @vif: Pointer to the ieee80211_vif structure. 661 * @vif: Pointer to the ieee80211_vif structure.
662 * @action: ieee80211_ampdu_mlme_action enum. 662 * @params: Pointer to A-MPDU action parameters
663 * @sta: Pointer to the ieee80211_sta structure.
664 * @tid: Traffic identifier.
665 * @ssn: Pointer to ssn value.
666 * @buf_size: Buffer size (for kernel version > 2.6.38).
667 * @amsdu: is AMSDU in AMPDU allowed
668 * 663 *
669 * Return: status: 0 on success, negative error code on failure. 664 * Return: status: 0 on success, negative error code on failure.
670 */ 665 */
671static int rsi_mac80211_ampdu_action(struct ieee80211_hw *hw, 666static int rsi_mac80211_ampdu_action(struct ieee80211_hw *hw,
672 struct ieee80211_vif *vif, 667 struct ieee80211_vif *vif,
673 enum ieee80211_ampdu_mlme_action action, 668 struct ieee80211_ampdu_params *params)
674 struct ieee80211_sta *sta,
675 unsigned short tid,
676 unsigned short *ssn,
677 unsigned char buf_size,
678 bool amsdu)
679{ 669{
680 int status = -EOPNOTSUPP; 670 int status = -EOPNOTSUPP;
681 struct rsi_hw *adapter = hw->priv; 671 struct rsi_hw *adapter = hw->priv;
682 struct rsi_common *common = adapter->priv; 672 struct rsi_common *common = adapter->priv;
683 u16 seq_no = 0; 673 u16 seq_no = 0;
684 u8 ii = 0; 674 u8 ii = 0;
675 struct ieee80211_sta *sta = params->sta;
676 enum ieee80211_ampdu_mlme_action action = params->action;
677 u16 tid = params->tid;
678 u16 *ssn = &params->ssn;
679 u8 buf_size = params->buf_size;
685 680
686 for (ii = 0; ii < RSI_MAX_VIFS; ii++) { 681 for (ii = 0; ii < RSI_MAX_VIFS; ii++) {
687 if (vif == adapter->vifs[ii]) 682 if (vif == adapter->vifs[ii])
diff --git a/drivers/net/wireless/st/cw1200/sta.c b/drivers/net/wireless/st/cw1200/sta.c
index 06321c799c90..d0ddcde6c695 100644
--- a/drivers/net/wireless/st/cw1200/sta.c
+++ b/drivers/net/wireless/st/cw1200/sta.c
@@ -2129,9 +2129,7 @@ void cw1200_mcast_timeout(unsigned long arg)
2129 2129
2130int cw1200_ampdu_action(struct ieee80211_hw *hw, 2130int cw1200_ampdu_action(struct ieee80211_hw *hw,
2131 struct ieee80211_vif *vif, 2131 struct ieee80211_vif *vif,
2132 enum ieee80211_ampdu_mlme_action action, 2132 struct ieee80211_ampdu_params *params)
2133 struct ieee80211_sta *sta, u16 tid, u16 *ssn,
2134 u8 buf_size, bool amsdu)
2135{ 2133{
2136 /* Aggregation is implemented fully in firmware, 2134 /* Aggregation is implemented fully in firmware,
2137 * including block ack negotiation. Do not allow 2135 * including block ack negotiation. Do not allow
diff --git a/drivers/net/wireless/st/cw1200/sta.h b/drivers/net/wireless/st/cw1200/sta.h
index bebb3379017f..a0bacaa39b31 100644
--- a/drivers/net/wireless/st/cw1200/sta.h
+++ b/drivers/net/wireless/st/cw1200/sta.h
@@ -109,9 +109,7 @@ void cw1200_bss_info_changed(struct ieee80211_hw *dev,
109 u32 changed); 109 u32 changed);
110int cw1200_ampdu_action(struct ieee80211_hw *hw, 110int cw1200_ampdu_action(struct ieee80211_hw *hw,
111 struct ieee80211_vif *vif, 111 struct ieee80211_vif *vif,
112 enum ieee80211_ampdu_mlme_action action, 112 struct ieee80211_ampdu_params *params);
113 struct ieee80211_sta *sta, u16 tid, u16 *ssn,
114 u8 buf_size, bool amsdu);
115 113
116void cw1200_suspend_resume(struct cw1200_common *priv, 114void cw1200_suspend_resume(struct cw1200_common *priv,
117 struct wsm_suspend_resume *arg); 115 struct wsm_suspend_resume *arg);
diff --git a/drivers/net/wireless/ti/wlcore/main.c b/drivers/net/wireless/ti/wlcore/main.c
index d1109c4f0f0d..45662cf3169f 100644
--- a/drivers/net/wireless/ti/wlcore/main.c
+++ b/drivers/net/wireless/ti/wlcore/main.c
@@ -5187,14 +5187,16 @@ out:
5187 5187
5188static int wl1271_op_ampdu_action(struct ieee80211_hw *hw, 5188static int wl1271_op_ampdu_action(struct ieee80211_hw *hw,
5189 struct ieee80211_vif *vif, 5189 struct ieee80211_vif *vif,
5190 enum ieee80211_ampdu_mlme_action action, 5190 struct ieee80211_ampdu_params *params)
5191 struct ieee80211_sta *sta, u16 tid, u16 *ssn,
5192 u8 buf_size, bool amsdu)
5193{ 5191{
5194 struct wl1271 *wl = hw->priv; 5192 struct wl1271 *wl = hw->priv;
5195 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif); 5193 struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif);
5196 int ret; 5194 int ret;
5197 u8 hlid, *ba_bitmap; 5195 u8 hlid, *ba_bitmap;
5196 struct ieee80211_sta *sta = params->sta;
5197 enum ieee80211_ampdu_mlme_action action = params->action;
5198 u16 tid = params->tid;
5199 u16 *ssn = &params->ssn;
5198 5200
5199 wl1271_debug(DEBUG_MAC80211, "mac80211 ampdu action %d tid %d", action, 5201 wl1271_debug(DEBUG_MAC80211, "mac80211 ampdu action %d tid %d", action,
5200 tid); 5202 tid);