diff options
author | David S. Miller <davem@davemloft.net> | 2009-12-02 01:13:38 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-12-02 01:13:38 -0500 |
commit | ff9c38bba37937adb909cceb2a6521f2e92e17c6 (patch) | |
tree | 93bd6152d9fa28348be99ef1c788040cc7b7a94d /net/mac80211 | |
parent | 65c0cfafce9575319fb6f70080fbe226e5617e3b (diff) | |
parent | b2722b1c3a893ec6021508da15b32282ec79f4da (diff) |
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
Conflicts:
net/mac80211/ht.c
Diffstat (limited to 'net/mac80211')
-rw-r--r-- | net/mac80211/agg-rx.c | 4 | ||||
-rw-r--r-- | net/mac80211/agg-tx.c | 17 | ||||
-rw-r--r-- | net/mac80211/ht.c | 7 | ||||
-rw-r--r-- | net/mac80211/ieee80211_i.h | 2 |
4 files changed, 13 insertions, 17 deletions
diff --git a/net/mac80211/agg-rx.c b/net/mac80211/agg-rx.c index 614c65d62ae4..51c7dc3c4c3b 100644 --- a/net/mac80211/agg-rx.c +++ b/net/mac80211/agg-rx.c | |||
@@ -86,10 +86,6 @@ void ieee80211_sta_stop_rx_ba_session(struct ieee80211_sub_if_data *sdata, u8 *r | |||
86 | struct ieee80211_local *local = sdata->local; | 86 | struct ieee80211_local *local = sdata->local; |
87 | struct sta_info *sta; | 87 | struct sta_info *sta; |
88 | 88 | ||
89 | /* stop HW Rx aggregation. ampdu_action existence | ||
90 | * already verified in session init so we add the BUG_ON */ | ||
91 | BUG_ON(!local->ops->ampdu_action); | ||
92 | |||
93 | rcu_read_lock(); | 89 | rcu_read_lock(); |
94 | 90 | ||
95 | sta = sta_info_get(local, ra); | 91 | sta = sta_info_get(local, ra); |
diff --git a/net/mac80211/agg-tx.c b/net/mac80211/agg-tx.c index adf01fcd462e..5e3a7eccef5a 100644 --- a/net/mac80211/agg-tx.c +++ b/net/mac80211/agg-tx.c | |||
@@ -124,13 +124,18 @@ void ieee80211_send_bar(struct ieee80211_sub_if_data *sdata, u8 *ra, u16 tid, u1 | |||
124 | ieee80211_tx_skb(sdata, skb); | 124 | ieee80211_tx_skb(sdata, skb); |
125 | } | 125 | } |
126 | 126 | ||
127 | static int ___ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid, | 127 | int ___ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid, |
128 | enum ieee80211_back_parties initiator) | 128 | enum ieee80211_back_parties initiator) |
129 | { | 129 | { |
130 | struct ieee80211_local *local = sta->local; | 130 | struct ieee80211_local *local = sta->local; |
131 | int ret; | 131 | int ret; |
132 | u8 *state; | 132 | u8 *state; |
133 | 133 | ||
134 | #ifdef CONFIG_MAC80211_HT_DEBUG | ||
135 | printk(KERN_DEBUG "Tx BA session stop requested for %pM tid %u\n", | ||
136 | sta->sta.addr, tid); | ||
137 | #endif /* CONFIG_MAC80211_HT_DEBUG */ | ||
138 | |||
134 | state = &sta->ampdu_mlme.tid_state_tx[tid]; | 139 | state = &sta->ampdu_mlme.tid_state_tx[tid]; |
135 | 140 | ||
136 | if (*state == HT_AGG_STATE_OPERATIONAL) | 141 | if (*state == HT_AGG_STATE_OPERATIONAL) |
@@ -145,7 +150,6 @@ static int ___ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid, | |||
145 | 150 | ||
146 | /* HW shall not deny going back to legacy */ | 151 | /* HW shall not deny going back to legacy */ |
147 | if (WARN_ON(ret)) { | 152 | if (WARN_ON(ret)) { |
148 | *state = HT_AGG_STATE_OPERATIONAL; | ||
149 | /* | 153 | /* |
150 | * We may have pending packets get stuck in this case... | 154 | * We may have pending packets get stuck in this case... |
151 | * Not bothering with a workaround for now. | 155 | * Not bothering with a workaround for now. |
@@ -515,11 +519,6 @@ int __ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid, | |||
515 | goto unlock; | 519 | goto unlock; |
516 | } | 520 | } |
517 | 521 | ||
518 | #ifdef CONFIG_MAC80211_HT_DEBUG | ||
519 | printk(KERN_DEBUG "Tx BA session stop requested for %pM tid %u\n", | ||
520 | sta->sta.addr, tid); | ||
521 | #endif /* CONFIG_MAC80211_HT_DEBUG */ | ||
522 | |||
523 | ret = ___ieee80211_stop_tx_ba_session(sta, tid, initiator); | 522 | ret = ___ieee80211_stop_tx_ba_session(sta, tid, initiator); |
524 | 523 | ||
525 | unlock: | 524 | unlock: |
@@ -534,7 +533,7 @@ int ieee80211_stop_tx_ba_session(struct ieee80211_sta *pubsta, u16 tid, | |||
534 | struct ieee80211_sub_if_data *sdata = sta->sdata; | 533 | struct ieee80211_sub_if_data *sdata = sta->sdata; |
535 | struct ieee80211_local *local = sdata->local; | 534 | struct ieee80211_local *local = sdata->local; |
536 | 535 | ||
537 | if (WARN_ON(!local->ops->ampdu_action)) | 536 | if (!local->ops->ampdu_action) |
538 | return -EINVAL; | 537 | return -EINVAL; |
539 | 538 | ||
540 | if (tid >= STA_TID_NUM) | 539 | if (tid >= STA_TID_NUM) |
diff --git a/net/mac80211/ht.c b/net/mac80211/ht.c index 15c9d4f94cee..3787455fb696 100644 --- a/net/mac80211/ht.c +++ b/net/mac80211/ht.c | |||
@@ -160,10 +160,9 @@ void ieee80211_process_delba(struct ieee80211_sub_if_data *sdata, | |||
160 | WLAN_BACK_INITIATOR, 0); | 160 | WLAN_BACK_INITIATOR, 0); |
161 | else { /* WLAN_BACK_RECIPIENT */ | 161 | else { /* WLAN_BACK_RECIPIENT */ |
162 | spin_lock_bh(&sta->lock); | 162 | spin_lock_bh(&sta->lock); |
163 | sta->ampdu_mlme.tid_state_tx[tid] = | 163 | if (sta->ampdu_mlme.tid_state_tx[tid] & HT_ADDBA_REQUESTED_MSK) |
164 | HT_AGG_STATE_OPERATIONAL; | 164 | ___ieee80211_stop_tx_ba_session(sta, tid, |
165 | WLAN_BACK_RECIPIENT); | ||
165 | spin_unlock_bh(&sta->lock); | 166 | spin_unlock_bh(&sta->lock); |
166 | ieee80211_stop_tx_ba_session(&sta->sta, tid, | ||
167 | WLAN_BACK_RECIPIENT); | ||
168 | } | 167 | } |
169 | } | 168 | } |
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h index ab2894211638..039affa7c871 100644 --- a/net/mac80211/ieee80211_i.h +++ b/net/mac80211/ieee80211_i.h | |||
@@ -995,6 +995,8 @@ void ieee80211_process_addba_request(struct ieee80211_local *local, | |||
995 | 995 | ||
996 | int __ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid, | 996 | int __ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid, |
997 | enum ieee80211_back_parties initiator); | 997 | enum ieee80211_back_parties initiator); |
998 | int ___ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid, | ||
999 | enum ieee80211_back_parties initiator); | ||
998 | 1000 | ||
999 | /* Spectrum management */ | 1001 | /* Spectrum management */ |
1000 | void ieee80211_process_measurement_req(struct ieee80211_sub_if_data *sdata, | 1002 | void ieee80211_process_measurement_req(struct ieee80211_sub_if_data *sdata, |