diff options
Diffstat (limited to 'net/mac80211/agg-rx.c')
-rw-r--r-- | net/mac80211/agg-rx.c | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/net/mac80211/agg-rx.c b/net/mac80211/agg-rx.c index bc064d7933ff..51c7dc3c4c3b 100644 --- a/net/mac80211/agg-rx.c +++ b/net/mac80211/agg-rx.c | |||
@@ -41,7 +41,8 @@ void __ieee80211_stop_rx_ba_session(struct sta_info *sta, u16 tid, | |||
41 | sta->sta.addr, tid); | 41 | sta->sta.addr, tid); |
42 | #endif /* CONFIG_MAC80211_HT_DEBUG */ | 42 | #endif /* CONFIG_MAC80211_HT_DEBUG */ |
43 | 43 | ||
44 | if (drv_ampdu_action(local, IEEE80211_AMPDU_RX_STOP, | 44 | if (drv_ampdu_action(local, &sta->sdata->vif, |
45 | IEEE80211_AMPDU_RX_STOP, | ||
45 | &sta->sta, tid, NULL)) | 46 | &sta->sta, tid, NULL)) |
46 | printk(KERN_DEBUG "HW problem - can not stop rx " | 47 | printk(KERN_DEBUG "HW problem - can not stop rx " |
47 | "aggregation for tid %d\n", tid); | 48 | "aggregation for tid %d\n", tid); |
@@ -85,10 +86,6 @@ void ieee80211_sta_stop_rx_ba_session(struct ieee80211_sub_if_data *sdata, u8 *r | |||
85 | struct ieee80211_local *local = sdata->local; | 86 | struct ieee80211_local *local = sdata->local; |
86 | struct sta_info *sta; | 87 | struct sta_info *sta; |
87 | 88 | ||
88 | /* stop HW Rx aggregation. ampdu_action existence | ||
89 | * already verified in session init so we add the BUG_ON */ | ||
90 | BUG_ON(!local->ops->ampdu_action); | ||
91 | |||
92 | rcu_read_lock(); | 89 | rcu_read_lock(); |
93 | 90 | ||
94 | sta = sta_info_get(local, ra); | 91 | sta = sta_info_get(local, ra); |
@@ -170,7 +167,7 @@ static void ieee80211_send_addba_resp(struct ieee80211_sub_if_data *sdata, u8 *d | |||
170 | mgmt->u.action.u.addba_resp.timeout = cpu_to_le16(timeout); | 167 | mgmt->u.action.u.addba_resp.timeout = cpu_to_le16(timeout); |
171 | mgmt->u.action.u.addba_resp.status = cpu_to_le16(status); | 168 | mgmt->u.action.u.addba_resp.status = cpu_to_le16(status); |
172 | 169 | ||
173 | ieee80211_tx_skb(sdata, skb, 1); | 170 | ieee80211_tx_skb(sdata, skb); |
174 | } | 171 | } |
175 | 172 | ||
176 | void ieee80211_process_addba_request(struct ieee80211_local *local, | 173 | void ieee80211_process_addba_request(struct ieee80211_local *local, |
@@ -210,9 +207,9 @@ void ieee80211_process_addba_request(struct ieee80211_local *local, | |||
210 | * check if configuration can support the BA policy | 207 | * check if configuration can support the BA policy |
211 | * and if buffer size does not exceeds max value */ | 208 | * and if buffer size does not exceeds max value */ |
212 | /* XXX: check own ht delayed BA capability?? */ | 209 | /* XXX: check own ht delayed BA capability?? */ |
213 | if (((ba_policy != 1) | 210 | if (((ba_policy != 1) && |
214 | && (!(sta->sta.ht_cap.cap & IEEE80211_HT_CAP_DELAY_BA))) | 211 | (!(sta->sta.ht_cap.cap & IEEE80211_HT_CAP_DELAY_BA))) || |
215 | || (buf_size > IEEE80211_MAX_AMPDU_BUF)) { | 212 | (buf_size > IEEE80211_MAX_AMPDU_BUF)) { |
216 | status = WLAN_STATUS_INVALID_QOS_PARAM; | 213 | status = WLAN_STATUS_INVALID_QOS_PARAM; |
217 | #ifdef CONFIG_MAC80211_HT_DEBUG | 214 | #ifdef CONFIG_MAC80211_HT_DEBUG |
218 | if (net_ratelimit()) | 215 | if (net_ratelimit()) |
@@ -284,7 +281,8 @@ void ieee80211_process_addba_request(struct ieee80211_local *local, | |||
284 | goto end; | 281 | goto end; |
285 | } | 282 | } |
286 | 283 | ||
287 | ret = drv_ampdu_action(local, IEEE80211_AMPDU_RX_START, | 284 | ret = drv_ampdu_action(local, &sta->sdata->vif, |
285 | IEEE80211_AMPDU_RX_START, | ||
288 | &sta->sta, tid, &start_seq_num); | 286 | &sta->sta, tid, &start_seq_num); |
289 | #ifdef CONFIG_MAC80211_HT_DEBUG | 287 | #ifdef CONFIG_MAC80211_HT_DEBUG |
290 | printk(KERN_DEBUG "Rx A-MPDU request on tid %d result %d\n", tid, ret); | 288 | printk(KERN_DEBUG "Rx A-MPDU request on tid %d result %d\n", tid, ret); |