diff options
-rw-r--r-- | drivers/net/wireless/ath/ar9170/main.c | 3 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/htc_drv_main.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/main.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/ath/carl9170/main.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn.c | 3 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn.h | 3 | ||||
-rw-r--r-- | drivers/net/wireless/mac80211_hwsim.c | 3 | ||||
-rw-r--r-- | drivers/net/wireless/mwl8k.c | 3 | ||||
-rw-r--r-- | drivers/net/wireless/rt2x00/rt2800lib.c | 3 | ||||
-rw-r--r-- | drivers/net/wireless/rt2x00/rt2800lib.h | 3 | ||||
-rw-r--r-- | drivers/net/wireless/rtlwifi/core.c | 3 | ||||
-rw-r--r-- | include/net/mac80211.h | 7 | ||||
-rw-r--r-- | net/mac80211/agg-rx.c | 4 | ||||
-rw-r--r-- | net/mac80211/agg-tx.c | 20 | ||||
-rw-r--r-- | net/mac80211/driver-ops.h | 6 | ||||
-rw-r--r-- | net/mac80211/driver-trace.h | 11 | ||||
-rw-r--r-- | net/mac80211/sta_info.h | 2 |
17 files changed, 56 insertions, 24 deletions
diff --git a/drivers/net/wireless/ath/ar9170/main.c b/drivers/net/wireless/ath/ar9170/main.c index 32bf79e6a320..a9111e1161fd 100644 --- a/drivers/net/wireless/ath/ar9170/main.c +++ b/drivers/net/wireless/ath/ar9170/main.c | |||
@@ -1945,7 +1945,8 @@ static int ar9170_conf_tx(struct ieee80211_hw *hw, u16 queue, | |||
1945 | static int ar9170_ampdu_action(struct ieee80211_hw *hw, | 1945 | static int ar9170_ampdu_action(struct ieee80211_hw *hw, |
1946 | struct ieee80211_vif *vif, | 1946 | struct ieee80211_vif *vif, |
1947 | enum ieee80211_ampdu_mlme_action action, | 1947 | enum ieee80211_ampdu_mlme_action action, |
1948 | struct ieee80211_sta *sta, u16 tid, u16 *ssn) | 1948 | struct ieee80211_sta *sta, u16 tid, u16 *ssn, |
1949 | u8 buf_size) | ||
1949 | { | 1950 | { |
1950 | switch (action) { | 1951 | switch (action) { |
1951 | case IEEE80211_AMPDU_RX_START: | 1952 | case IEEE80211_AMPDU_RX_START: |
diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_main.c b/drivers/net/wireless/ath/ath9k/htc_drv_main.c index 187af5b4440d..f14f37d29f45 100644 --- a/drivers/net/wireless/ath/ath9k/htc_drv_main.c +++ b/drivers/net/wireless/ath/ath9k/htc_drv_main.c | |||
@@ -1549,7 +1549,7 @@ static int ath9k_htc_ampdu_action(struct ieee80211_hw *hw, | |||
1549 | struct ieee80211_vif *vif, | 1549 | struct ieee80211_vif *vif, |
1550 | enum ieee80211_ampdu_mlme_action action, | 1550 | enum ieee80211_ampdu_mlme_action action, |
1551 | struct ieee80211_sta *sta, | 1551 | struct ieee80211_sta *sta, |
1552 | u16 tid, u16 *ssn) | 1552 | u16 tid, u16 *ssn, u8 buf_size) |
1553 | { | 1553 | { |
1554 | struct ath9k_htc_priv *priv = hw->priv; | 1554 | struct ath9k_htc_priv *priv = hw->priv; |
1555 | struct ath9k_htc_sta *ista; | 1555 | struct ath9k_htc_sta *ista; |
diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c index 174c016ef89d..c03184e7bffe 100644 --- a/drivers/net/wireless/ath/ath9k/main.c +++ b/drivers/net/wireless/ath/ath9k/main.c | |||
@@ -2165,7 +2165,7 @@ static int ath9k_ampdu_action(struct ieee80211_hw *hw, | |||
2165 | struct ieee80211_vif *vif, | 2165 | struct ieee80211_vif *vif, |
2166 | enum ieee80211_ampdu_mlme_action action, | 2166 | enum ieee80211_ampdu_mlme_action action, |
2167 | struct ieee80211_sta *sta, | 2167 | struct ieee80211_sta *sta, |
2168 | u16 tid, u16 *ssn) | 2168 | u16 tid, u16 *ssn, u8 buf_size) |
2169 | { | 2169 | { |
2170 | struct ath_wiphy *aphy = hw->priv; | 2170 | struct ath_wiphy *aphy = hw->priv; |
2171 | struct ath_softc *sc = aphy->sc; | 2171 | struct ath_softc *sc = aphy->sc; |
diff --git a/drivers/net/wireless/ath/carl9170/main.c b/drivers/net/wireless/ath/carl9170/main.c index 870df8c42622..ecfb80b059d1 100644 --- a/drivers/net/wireless/ath/carl9170/main.c +++ b/drivers/net/wireless/ath/carl9170/main.c | |||
@@ -1279,7 +1279,7 @@ static int carl9170_op_ampdu_action(struct ieee80211_hw *hw, | |||
1279 | struct ieee80211_vif *vif, | 1279 | struct ieee80211_vif *vif, |
1280 | enum ieee80211_ampdu_mlme_action action, | 1280 | enum ieee80211_ampdu_mlme_action action, |
1281 | struct ieee80211_sta *sta, | 1281 | struct ieee80211_sta *sta, |
1282 | u16 tid, u16 *ssn) | 1282 | u16 tid, u16 *ssn, u8 buf_size) |
1283 | { | 1283 | { |
1284 | struct ar9170 *ar = hw->priv; | 1284 | struct ar9170 *ar = hw->priv; |
1285 | struct carl9170_sta_info *sta_info = (void *) sta->drv_priv; | 1285 | struct carl9170_sta_info *sta_info = (void *) sta->drv_priv; |
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c index 36335b1b54d4..8b045a401d62 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn.c | |||
@@ -3393,7 +3393,8 @@ int iwlagn_mac_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd, | |||
3393 | int iwlagn_mac_ampdu_action(struct ieee80211_hw *hw, | 3393 | int iwlagn_mac_ampdu_action(struct ieee80211_hw *hw, |
3394 | struct ieee80211_vif *vif, | 3394 | struct ieee80211_vif *vif, |
3395 | enum ieee80211_ampdu_mlme_action action, | 3395 | enum ieee80211_ampdu_mlme_action action, |
3396 | struct ieee80211_sta *sta, u16 tid, u16 *ssn) | 3396 | struct ieee80211_sta *sta, u16 tid, u16 *ssn, |
3397 | u8 buf_size) | ||
3397 | { | 3398 | { |
3398 | struct iwl_priv *priv = hw->priv; | 3399 | struct iwl_priv *priv = hw->priv; |
3399 | int ret = -EINVAL; | 3400 | int ret = -EINVAL; |
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.h b/drivers/net/wireless/iwlwifi/iwl-agn.h index da303585f801..822221a97e80 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn.h +++ b/drivers/net/wireless/iwlwifi/iwl-agn.h | |||
@@ -349,7 +349,8 @@ void iwlagn_mac_update_tkip_key(struct ieee80211_hw *hw, | |||
349 | int iwlagn_mac_ampdu_action(struct ieee80211_hw *hw, | 349 | int iwlagn_mac_ampdu_action(struct ieee80211_hw *hw, |
350 | struct ieee80211_vif *vif, | 350 | struct ieee80211_vif *vif, |
351 | enum ieee80211_ampdu_mlme_action action, | 351 | enum ieee80211_ampdu_mlme_action action, |
352 | struct ieee80211_sta *sta, u16 tid, u16 *ssn); | 352 | struct ieee80211_sta *sta, u16 tid, u16 *ssn, |
353 | u8 buf_size); | ||
353 | int iwlagn_mac_sta_add(struct ieee80211_hw *hw, | 354 | int iwlagn_mac_sta_add(struct ieee80211_hw *hw, |
354 | struct ieee80211_vif *vif, | 355 | struct ieee80211_vif *vif, |
355 | struct ieee80211_sta *sta); | 356 | struct ieee80211_sta *sta); |
diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c index 454f045ddff3..5d39b2840584 100644 --- a/drivers/net/wireless/mac80211_hwsim.c +++ b/drivers/net/wireless/mac80211_hwsim.c | |||
@@ -943,7 +943,8 @@ static int mac80211_hwsim_testmode_cmd(struct ieee80211_hw *hw, | |||
943 | static int mac80211_hwsim_ampdu_action(struct ieee80211_hw *hw, | 943 | static int mac80211_hwsim_ampdu_action(struct ieee80211_hw *hw, |
944 | struct ieee80211_vif *vif, | 944 | struct ieee80211_vif *vif, |
945 | enum ieee80211_ampdu_mlme_action action, | 945 | enum ieee80211_ampdu_mlme_action action, |
946 | struct ieee80211_sta *sta, u16 tid, u16 *ssn) | 946 | struct ieee80211_sta *sta, u16 tid, u16 *ssn, |
947 | u8 buf_size) | ||
947 | { | 948 | { |
948 | switch (action) { | 949 | switch (action) { |
949 | case IEEE80211_AMPDU_TX_START: | 950 | case IEEE80211_AMPDU_TX_START: |
diff --git a/drivers/net/wireless/mwl8k.c b/drivers/net/wireless/mwl8k.c index 809f2bf27958..106b427d0064 100644 --- a/drivers/net/wireless/mwl8k.c +++ b/drivers/net/wireless/mwl8k.c | |||
@@ -4356,7 +4356,8 @@ static int mwl8k_get_survey(struct ieee80211_hw *hw, int idx, | |||
4356 | static int | 4356 | static int |
4357 | mwl8k_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif, | 4357 | mwl8k_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif, |
4358 | enum ieee80211_ampdu_mlme_action action, | 4358 | enum ieee80211_ampdu_mlme_action action, |
4359 | struct ieee80211_sta *sta, u16 tid, u16 *ssn) | 4359 | struct ieee80211_sta *sta, u16 tid, u16 *ssn, |
4360 | u8 buf_size) | ||
4360 | { | 4361 | { |
4361 | switch (action) { | 4362 | switch (action) { |
4362 | case IEEE80211_AMPDU_RX_START: | 4363 | case IEEE80211_AMPDU_RX_START: |
diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c index a25be625ee90..f8ba01cbc6dd 100644 --- a/drivers/net/wireless/rt2x00/rt2800lib.c +++ b/drivers/net/wireless/rt2x00/rt2800lib.c | |||
@@ -3533,7 +3533,8 @@ EXPORT_SYMBOL_GPL(rt2800_get_tsf); | |||
3533 | 3533 | ||
3534 | int rt2800_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif, | 3534 | int rt2800_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif, |
3535 | enum ieee80211_ampdu_mlme_action action, | 3535 | enum ieee80211_ampdu_mlme_action action, |
3536 | struct ieee80211_sta *sta, u16 tid, u16 *ssn) | 3536 | struct ieee80211_sta *sta, u16 tid, u16 *ssn, |
3537 | u8 buf_size) | ||
3537 | { | 3538 | { |
3538 | int ret = 0; | 3539 | int ret = 0; |
3539 | 3540 | ||
diff --git a/drivers/net/wireless/rt2x00/rt2800lib.h b/drivers/net/wireless/rt2x00/rt2800lib.h index e3c995a9dec4..3efafb78ff77 100644 --- a/drivers/net/wireless/rt2x00/rt2800lib.h +++ b/drivers/net/wireless/rt2x00/rt2800lib.h | |||
@@ -198,7 +198,8 @@ int rt2800_conf_tx(struct ieee80211_hw *hw, u16 queue_idx, | |||
198 | u64 rt2800_get_tsf(struct ieee80211_hw *hw); | 198 | u64 rt2800_get_tsf(struct ieee80211_hw *hw); |
199 | int rt2800_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif, | 199 | int rt2800_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif, |
200 | enum ieee80211_ampdu_mlme_action action, | 200 | enum ieee80211_ampdu_mlme_action action, |
201 | struct ieee80211_sta *sta, u16 tid, u16 *ssn); | 201 | struct ieee80211_sta *sta, u16 tid, u16 *ssn, |
202 | u8 buf_size); | ||
202 | int rt2800_get_survey(struct ieee80211_hw *hw, int idx, | 203 | int rt2800_get_survey(struct ieee80211_hw *hw, int idx, |
203 | struct survey_info *survey); | 204 | struct survey_info *survey); |
204 | 205 | ||
diff --git a/drivers/net/wireless/rtlwifi/core.c b/drivers/net/wireless/rtlwifi/core.c index d6a924a05654..25d2d667ffba 100644 --- a/drivers/net/wireless/rtlwifi/core.c +++ b/drivers/net/wireless/rtlwifi/core.c | |||
@@ -748,7 +748,8 @@ static void rtl_op_sta_notify(struct ieee80211_hw *hw, | |||
748 | static int rtl_op_ampdu_action(struct ieee80211_hw *hw, | 748 | static int rtl_op_ampdu_action(struct ieee80211_hw *hw, |
749 | struct ieee80211_vif *vif, | 749 | struct ieee80211_vif *vif, |
750 | enum ieee80211_ampdu_mlme_action action, | 750 | enum ieee80211_ampdu_mlme_action action, |
751 | struct ieee80211_sta *sta, u16 tid, u16 * ssn) | 751 | struct ieee80211_sta *sta, u16 tid, u16 *ssn, |
752 | u8 buf_size) | ||
752 | { | 753 | { |
753 | struct rtl_priv *rtlpriv = rtl_priv(hw); | 754 | struct rtl_priv *rtlpriv = rtl_priv(hw); |
754 | 755 | ||
diff --git a/include/net/mac80211.h b/include/net/mac80211.h index d024fc563e7b..5afe341b4010 100644 --- a/include/net/mac80211.h +++ b/include/net/mac80211.h | |||
@@ -1731,6 +1731,10 @@ enum ieee80211_ampdu_mlme_action { | |||
1731 | * ieee80211_ampdu_mlme_action. Starting sequence number (@ssn) | 1731 | * ieee80211_ampdu_mlme_action. Starting sequence number (@ssn) |
1732 | * is the first frame we expect to perform the action on. Notice | 1732 | * is the first frame we expect to perform the action on. Notice |
1733 | * that TX/RX_STOP can pass NULL for this parameter. | 1733 | * that TX/RX_STOP can pass NULL for this parameter. |
1734 | * The @buf_size parameter is only valid when the action is set to | ||
1735 | * %IEEE80211_AMPDU_TX_OPERATIONAL and indicates the peer's reorder | ||
1736 | * buffer size (number of subframes) for this session -- aggregates | ||
1737 | * containing more subframes than this may not be transmitted to the peer. | ||
1734 | * Returns a negative error code on failure. | 1738 | * Returns a negative error code on failure. |
1735 | * The callback can sleep. | 1739 | * The callback can sleep. |
1736 | * | 1740 | * |
@@ -1833,7 +1837,8 @@ struct ieee80211_ops { | |||
1833 | int (*ampdu_action)(struct ieee80211_hw *hw, | 1837 | int (*ampdu_action)(struct ieee80211_hw *hw, |
1834 | struct ieee80211_vif *vif, | 1838 | struct ieee80211_vif *vif, |
1835 | enum ieee80211_ampdu_mlme_action action, | 1839 | enum ieee80211_ampdu_mlme_action action, |
1836 | struct ieee80211_sta *sta, u16 tid, u16 *ssn); | 1840 | struct ieee80211_sta *sta, u16 tid, u16 *ssn, |
1841 | u8 buf_size); | ||
1837 | int (*get_survey)(struct ieee80211_hw *hw, int idx, | 1842 | int (*get_survey)(struct ieee80211_hw *hw, int idx, |
1838 | struct survey_info *survey); | 1843 | struct survey_info *survey); |
1839 | void (*rfkill_poll)(struct ieee80211_hw *hw); | 1844 | void (*rfkill_poll)(struct ieee80211_hw *hw); |
diff --git a/net/mac80211/agg-rx.c b/net/mac80211/agg-rx.c index 002db5e86eb6..1f51f4162426 100644 --- a/net/mac80211/agg-rx.c +++ b/net/mac80211/agg-rx.c | |||
@@ -76,7 +76,7 @@ void ___ieee80211_stop_rx_ba_session(struct sta_info *sta, u16 tid, | |||
76 | #endif /* CONFIG_MAC80211_HT_DEBUG */ | 76 | #endif /* CONFIG_MAC80211_HT_DEBUG */ |
77 | 77 | ||
78 | if (drv_ampdu_action(local, sta->sdata, IEEE80211_AMPDU_RX_STOP, | 78 | if (drv_ampdu_action(local, sta->sdata, IEEE80211_AMPDU_RX_STOP, |
79 | &sta->sta, tid, NULL)) | 79 | &sta->sta, tid, NULL, 0)) |
80 | printk(KERN_DEBUG "HW problem - can not stop rx " | 80 | printk(KERN_DEBUG "HW problem - can not stop rx " |
81 | "aggregation for tid %d\n", tid); | 81 | "aggregation for tid %d\n", tid); |
82 | 82 | ||
@@ -297,7 +297,7 @@ void ieee80211_process_addba_request(struct ieee80211_local *local, | |||
297 | } | 297 | } |
298 | 298 | ||
299 | ret = drv_ampdu_action(local, sta->sdata, IEEE80211_AMPDU_RX_START, | 299 | ret = drv_ampdu_action(local, sta->sdata, IEEE80211_AMPDU_RX_START, |
300 | &sta->sta, tid, &start_seq_num); | 300 | &sta->sta, tid, &start_seq_num, 0); |
301 | #ifdef CONFIG_MAC80211_HT_DEBUG | 301 | #ifdef CONFIG_MAC80211_HT_DEBUG |
302 | printk(KERN_DEBUG "Rx A-MPDU request on tid %d result %d\n", tid, ret); | 302 | printk(KERN_DEBUG "Rx A-MPDU request on tid %d result %d\n", tid, ret); |
303 | #endif /* CONFIG_MAC80211_HT_DEBUG */ | 303 | #endif /* CONFIG_MAC80211_HT_DEBUG */ |
diff --git a/net/mac80211/agg-tx.c b/net/mac80211/agg-tx.c index 9cc472c6a6a5..42f7c9007331 100644 --- a/net/mac80211/agg-tx.c +++ b/net/mac80211/agg-tx.c | |||
@@ -190,7 +190,7 @@ int ___ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid, | |||
190 | 190 | ||
191 | ret = drv_ampdu_action(local, sta->sdata, | 191 | ret = drv_ampdu_action(local, sta->sdata, |
192 | IEEE80211_AMPDU_TX_STOP, | 192 | IEEE80211_AMPDU_TX_STOP, |
193 | &sta->sta, tid, NULL); | 193 | &sta->sta, tid, NULL, 0); |
194 | 194 | ||
195 | /* HW shall not deny going back to legacy */ | 195 | /* HW shall not deny going back to legacy */ |
196 | if (WARN_ON(ret)) { | 196 | if (WARN_ON(ret)) { |
@@ -311,7 +311,7 @@ void ieee80211_tx_ba_session_handle_start(struct sta_info *sta, int tid) | |||
311 | start_seq_num = sta->tid_seq[tid] >> 4; | 311 | start_seq_num = sta->tid_seq[tid] >> 4; |
312 | 312 | ||
313 | ret = drv_ampdu_action(local, sdata, IEEE80211_AMPDU_TX_START, | 313 | ret = drv_ampdu_action(local, sdata, IEEE80211_AMPDU_TX_START, |
314 | &sta->sta, tid, &start_seq_num); | 314 | &sta->sta, tid, &start_seq_num, 0); |
315 | if (ret) { | 315 | if (ret) { |
316 | #ifdef CONFIG_MAC80211_HT_DEBUG | 316 | #ifdef CONFIG_MAC80211_HT_DEBUG |
317 | printk(KERN_DEBUG "BA request denied - HW unavailable for" | 317 | printk(KERN_DEBUG "BA request denied - HW unavailable for" |
@@ -487,7 +487,8 @@ static void ieee80211_agg_tx_operational(struct ieee80211_local *local, | |||
487 | 487 | ||
488 | drv_ampdu_action(local, sta->sdata, | 488 | drv_ampdu_action(local, sta->sdata, |
489 | IEEE80211_AMPDU_TX_OPERATIONAL, | 489 | IEEE80211_AMPDU_TX_OPERATIONAL, |
490 | &sta->sta, tid, NULL); | 490 | &sta->sta, tid, NULL, |
491 | sta->ampdu_mlme.tid_tx[tid]->buf_size); | ||
491 | 492 | ||
492 | /* | 493 | /* |
493 | * synchronize with TX path, while splicing the TX path | 494 | * synchronize with TX path, while splicing the TX path |
@@ -742,9 +743,11 @@ void ieee80211_process_addba_resp(struct ieee80211_local *local, | |||
742 | { | 743 | { |
743 | struct tid_ampdu_tx *tid_tx; | 744 | struct tid_ampdu_tx *tid_tx; |
744 | u16 capab, tid; | 745 | u16 capab, tid; |
746 | u8 buf_size; | ||
745 | 747 | ||
746 | capab = le16_to_cpu(mgmt->u.action.u.addba_resp.capab); | 748 | capab = le16_to_cpu(mgmt->u.action.u.addba_resp.capab); |
747 | tid = (capab & IEEE80211_ADDBA_PARAM_TID_MASK) >> 2; | 749 | tid = (capab & IEEE80211_ADDBA_PARAM_TID_MASK) >> 2; |
750 | buf_size = (capab & IEEE80211_ADDBA_PARAM_BUF_SIZE_MASK) >> 6; | ||
748 | 751 | ||
749 | mutex_lock(&sta->ampdu_mlme.mtx); | 752 | mutex_lock(&sta->ampdu_mlme.mtx); |
750 | 753 | ||
@@ -767,12 +770,23 @@ void ieee80211_process_addba_resp(struct ieee80211_local *local, | |||
767 | 770 | ||
768 | if (le16_to_cpu(mgmt->u.action.u.addba_resp.status) | 771 | if (le16_to_cpu(mgmt->u.action.u.addba_resp.status) |
769 | == WLAN_STATUS_SUCCESS) { | 772 | == WLAN_STATUS_SUCCESS) { |
773 | /* | ||
774 | * IEEE 802.11-2007 7.3.1.14: | ||
775 | * In an ADDBA Response frame, when the Status Code field | ||
776 | * is set to 0, the Buffer Size subfield is set to a value | ||
777 | * of at least 1. | ||
778 | */ | ||
779 | if (!buf_size) | ||
780 | goto out; | ||
781 | |||
770 | if (test_and_set_bit(HT_AGG_STATE_RESPONSE_RECEIVED, | 782 | if (test_and_set_bit(HT_AGG_STATE_RESPONSE_RECEIVED, |
771 | &tid_tx->state)) { | 783 | &tid_tx->state)) { |
772 | /* ignore duplicate response */ | 784 | /* ignore duplicate response */ |
773 | goto out; | 785 | goto out; |
774 | } | 786 | } |
775 | 787 | ||
788 | tid_tx->buf_size = buf_size; | ||
789 | |||
776 | if (test_bit(HT_AGG_STATE_DRV_READY, &tid_tx->state)) | 790 | if (test_bit(HT_AGG_STATE_DRV_READY, &tid_tx->state)) |
777 | ieee80211_agg_tx_operational(local, sta, tid); | 791 | ieee80211_agg_tx_operational(local, sta, tid); |
778 | 792 | ||
diff --git a/net/mac80211/driver-ops.h b/net/mac80211/driver-ops.h index 98d589960a49..78af32d4bc58 100644 --- a/net/mac80211/driver-ops.h +++ b/net/mac80211/driver-ops.h | |||
@@ -382,17 +382,17 @@ static inline int drv_ampdu_action(struct ieee80211_local *local, | |||
382 | struct ieee80211_sub_if_data *sdata, | 382 | struct ieee80211_sub_if_data *sdata, |
383 | enum ieee80211_ampdu_mlme_action action, | 383 | enum ieee80211_ampdu_mlme_action action, |
384 | struct ieee80211_sta *sta, u16 tid, | 384 | struct ieee80211_sta *sta, u16 tid, |
385 | u16 *ssn) | 385 | u16 *ssn, u8 buf_size) |
386 | { | 386 | { |
387 | int ret = -EOPNOTSUPP; | 387 | int ret = -EOPNOTSUPP; |
388 | 388 | ||
389 | might_sleep(); | 389 | might_sleep(); |
390 | 390 | ||
391 | trace_drv_ampdu_action(local, sdata, action, sta, tid, ssn); | 391 | trace_drv_ampdu_action(local, sdata, action, sta, tid, ssn, buf_size); |
392 | 392 | ||
393 | if (local->ops->ampdu_action) | 393 | if (local->ops->ampdu_action) |
394 | ret = local->ops->ampdu_action(&local->hw, &sdata->vif, action, | 394 | ret = local->ops->ampdu_action(&local->hw, &sdata->vif, action, |
395 | sta, tid, ssn); | 395 | sta, tid, ssn, buf_size); |
396 | 396 | ||
397 | trace_drv_return_int(local, ret); | 397 | trace_drv_return_int(local, ret); |
398 | 398 | ||
diff --git a/net/mac80211/driver-trace.h b/net/mac80211/driver-trace.h index 49c84218b2f4..fbabbc2f181a 100644 --- a/net/mac80211/driver-trace.h +++ b/net/mac80211/driver-trace.h | |||
@@ -784,9 +784,9 @@ TRACE_EVENT(drv_ampdu_action, | |||
784 | struct ieee80211_sub_if_data *sdata, | 784 | struct ieee80211_sub_if_data *sdata, |
785 | enum ieee80211_ampdu_mlme_action action, | 785 | enum ieee80211_ampdu_mlme_action action, |
786 | struct ieee80211_sta *sta, u16 tid, | 786 | struct ieee80211_sta *sta, u16 tid, |
787 | u16 *ssn), | 787 | u16 *ssn, u8 buf_size), |
788 | 788 | ||
789 | TP_ARGS(local, sdata, action, sta, tid, ssn), | 789 | TP_ARGS(local, sdata, action, sta, tid, ssn, buf_size), |
790 | 790 | ||
791 | TP_STRUCT__entry( | 791 | TP_STRUCT__entry( |
792 | LOCAL_ENTRY | 792 | LOCAL_ENTRY |
@@ -794,6 +794,7 @@ TRACE_EVENT(drv_ampdu_action, | |||
794 | __field(u32, action) | 794 | __field(u32, action) |
795 | __field(u16, tid) | 795 | __field(u16, tid) |
796 | __field(u16, ssn) | 796 | __field(u16, ssn) |
797 | __field(u8, buf_size) | ||
797 | VIF_ENTRY | 798 | VIF_ENTRY |
798 | ), | 799 | ), |
799 | 800 | ||
@@ -804,11 +805,13 @@ TRACE_EVENT(drv_ampdu_action, | |||
804 | __entry->action = action; | 805 | __entry->action = action; |
805 | __entry->tid = tid; | 806 | __entry->tid = tid; |
806 | __entry->ssn = ssn ? *ssn : 0; | 807 | __entry->ssn = ssn ? *ssn : 0; |
808 | __entry->buf_size = buf_size; | ||
807 | ), | 809 | ), |
808 | 810 | ||
809 | TP_printk( | 811 | TP_printk( |
810 | LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT " action:%d tid:%d", | 812 | LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT " action:%d tid:%d buf:%d", |
811 | LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->action, __entry->tid | 813 | LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->action, |
814 | __entry->tid, __entry->buf_size | ||
812 | ) | 815 | ) |
813 | ); | 816 | ); |
814 | 817 | ||
diff --git a/net/mac80211/sta_info.h b/net/mac80211/sta_info.h index bbdd2a86a94b..ca0b69060ef7 100644 --- a/net/mac80211/sta_info.h +++ b/net/mac80211/sta_info.h | |||
@@ -82,6 +82,7 @@ enum ieee80211_sta_info_flags { | |||
82 | * @state: session state (see above) | 82 | * @state: session state (see above) |
83 | * @stop_initiator: initiator of a session stop | 83 | * @stop_initiator: initiator of a session stop |
84 | * @tx_stop: TX DelBA frame when stopping | 84 | * @tx_stop: TX DelBA frame when stopping |
85 | * @buf_size: reorder buffer size at receiver | ||
85 | * | 86 | * |
86 | * This structure's lifetime is managed by RCU, assignments to | 87 | * This structure's lifetime is managed by RCU, assignments to |
87 | * the array holding it must hold the aggregation mutex. | 88 | * the array holding it must hold the aggregation mutex. |
@@ -101,6 +102,7 @@ struct tid_ampdu_tx { | |||
101 | u8 dialog_token; | 102 | u8 dialog_token; |
102 | u8 stop_initiator; | 103 | u8 stop_initiator; |
103 | bool tx_stop; | 104 | bool tx_stop; |
105 | u8 buf_size; | ||
104 | }; | 106 | }; |
105 | 107 | ||
106 | /** | 108 | /** |