aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2009-12-02 01:13:38 -0500
committerDavid S. Miller <davem@davemloft.net>2009-12-02 01:13:38 -0500
commitff9c38bba37937adb909cceb2a6521f2e92e17c6 (patch)
tree93bd6152d9fa28348be99ef1c788040cc7b7a94d /net/mac80211
parent65c0cfafce9575319fb6f70080fbe226e5617e3b (diff)
parentb2722b1c3a893ec6021508da15b32282ec79f4da (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.c4
-rw-r--r--net/mac80211/agg-tx.c17
-rw-r--r--net/mac80211/ht.c7
-rw-r--r--net/mac80211/ieee80211_i.h2
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
127static int ___ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid, 127int ___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
996int __ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid, 996int __ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid,
997 enum ieee80211_back_parties initiator); 997 enum ieee80211_back_parties initiator);
998int ___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 */
1000void ieee80211_process_measurement_req(struct ieee80211_sub_if_data *sdata, 1002void ieee80211_process_measurement_req(struct ieee80211_sub_if_data *sdata,