Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1524)

Side by Side Diff: chromeos/compat-wireless/net/mac80211/ht.c

Issue 5326002: Update compat-wireless to 2.6.36-5-spn (Closed) Base URL: http://git.chromium.org/git/kernel.git@master
Patch Set: Created 10 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * HT handling 2 * HT handling
3 * 3 *
4 * Copyright 2003, Jouni Malinen <jkmaline@cc.hut.fi> 4 * Copyright 2003, Jouni Malinen <jkmaline@cc.hut.fi>
5 * Copyright 2002-2005, Instant802 Networks, Inc. 5 * Copyright 2002-2005, Instant802 Networks, Inc.
6 * Copyright 2005-2006, Devicescape Software, Inc. 6 * Copyright 2005-2006, Devicescape Software, Inc.
7 * Copyright 2006-2007 Jiri Benc <jbenc@suse.cz> 7 * Copyright 2006-2007 Jiri Benc <jbenc@suse.cz>
8 * Copyright 2007, Michael Wu <flamingice@sourmilk.net> 8 * Copyright 2007, Michael Wu <flamingice@sourmilk.net>
9 * Copyright 2007-2010, Intel Corporation 9 * Copyright 2007-2010, Intel Corporation
10 * 10 *
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
94 i < IEEE80211_HT_MCS_MASK_LEN; i++) 94 i < IEEE80211_HT_MCS_MASK_LEN; i++)
95 ht_cap->mcs.rx_mask[i] = 95 ht_cap->mcs.rx_mask[i] =
96 sband->ht_cap.mcs.rx_mask[i] & 96 sband->ht_cap.mcs.rx_mask[i] &
97 ht_cap_ie->mcs.rx_mask[i]; 97 ht_cap_ie->mcs.rx_mask[i];
98 98
99 /* handle MCS rate 32 too */ 99 /* handle MCS rate 32 too */
100 if (sband->ht_cap.mcs.rx_mask[32/8] & ht_cap_ie->mcs.rx_mask[32/8] & 1) 100 if (sband->ht_cap.mcs.rx_mask[32/8] & ht_cap_ie->mcs.rx_mask[32/8] & 1)
101 ht_cap->mcs.rx_mask[32/8] |= 1; 101 ht_cap->mcs.rx_mask[32/8] |= 1;
102 } 102 }
103 103
104 void ieee80211_sta_tear_down_BA_sessions(struct sta_info *sta, bool tx) 104 void ieee80211_sta_tear_down_BA_sessions(struct sta_info *sta)
105 { 105 {
106 int i; 106 int i;
107 107
108 cancel_work_sync(&sta->ampdu_mlme.work); 108 cancel_work_sync(&sta->ampdu_mlme.work);
109 109
110 for (i = 0; i < STA_TID_NUM; i++) { 110 for (i = 0; i < STA_TID_NUM; i++) {
111 » » __ieee80211_stop_tx_ba_session(sta, i, WLAN_BACK_INITIATOR, tx); 111 » » __ieee80211_stop_tx_ba_session(sta, i, WLAN_BACK_INITIATOR);
112 __ieee80211_stop_rx_ba_session(sta, i, WLAN_BACK_RECIPIENT, 112 __ieee80211_stop_rx_ba_session(sta, i, WLAN_BACK_RECIPIENT,
113 » » » » » WLAN_REASON_QSTA_LEAVE_QBSS, tx); 113 » » » » » WLAN_REASON_QSTA_LEAVE_QBSS);
114 } 114 }
115 } 115 }
116 116
117 void ieee80211_ba_session_work(struct work_struct *work) 117 void ieee80211_ba_session_work(struct work_struct *work)
118 { 118 {
119 struct sta_info *sta = 119 struct sta_info *sta =
120 container_of(work, struct sta_info, ampdu_mlme.work); 120 container_of(work, struct sta_info, ampdu_mlme.work);
121 struct tid_ampdu_tx *tid_tx; 121 struct tid_ampdu_tx *tid_tx;
122 int tid; 122 int tid;
123 123
124 /* 124 /*
125 * When this flag is set, new sessions should be 125 * When this flag is set, new sessions should be
126 * blocked, and existing sessions will be torn 126 * blocked, and existing sessions will be torn
127 * down by the code that set the flag, so this 127 * down by the code that set the flag, so this
128 * need not run. 128 * need not run.
129 */ 129 */
130 if (test_sta_flags(sta, WLAN_STA_BLOCK_BA)) 130 if (test_sta_flags(sta, WLAN_STA_BLOCK_BA))
131 return; 131 return;
132 132
133 mutex_lock(&sta->ampdu_mlme.mtx); 133 mutex_lock(&sta->ampdu_mlme.mtx);
134 for (tid = 0; tid < STA_TID_NUM; tid++) { 134 for (tid = 0; tid < STA_TID_NUM; tid++) {
135 if (test_and_clear_bit(tid, sta->ampdu_mlme.tid_rx_timer_expired )) 135 if (test_and_clear_bit(tid, sta->ampdu_mlme.tid_rx_timer_expired ))
136 ___ieee80211_stop_rx_ba_session( 136 ___ieee80211_stop_rx_ba_session(
137 sta, tid, WLAN_BACK_RECIPIENT, 137 sta, tid, WLAN_BACK_RECIPIENT,
138 » » » » WLAN_REASON_QSTA_TIMEOUT, true); 138 » » » » WLAN_REASON_QSTA_TIMEOUT);
139 139
140 tid_tx = sta->ampdu_mlme.tid_tx[tid]; 140 tid_tx = sta->ampdu_mlme.tid_tx[tid];
141 if (!tid_tx) 141 if (!tid_tx)
142 continue; 142 continue;
143 143
144 if (test_bit(HT_AGG_STATE_WANT_START, &tid_tx->state)) 144 if (test_bit(HT_AGG_STATE_WANT_START, &tid_tx->state))
145 ieee80211_tx_ba_session_handle_start(sta, tid); 145 ieee80211_tx_ba_session_handle_start(sta, tid);
146 else if (test_and_clear_bit(HT_AGG_STATE_WANT_STOP, 146 else if (test_and_clear_bit(HT_AGG_STATE_WANT_STOP,
147 &tid_tx->state)) 147 &tid_tx->state))
148 ___ieee80211_stop_tx_ba_session(sta, tid, 148 ___ieee80211_stop_tx_ba_session(sta, tid,
149 » » » » » » » WLAN_BACK_INITIATOR, 149 » » » » » » » WLAN_BACK_INITIATOR);
150 » » » » » » » true);
151 } 150 }
152 mutex_unlock(&sta->ampdu_mlme.mtx); 151 mutex_unlock(&sta->ampdu_mlme.mtx);
153 } 152 }
154 153
155 void ieee80211_send_delba(struct ieee80211_sub_if_data *sdata, 154 void ieee80211_send_delba(struct ieee80211_sub_if_data *sdata,
156 const u8 *da, u16 tid, 155 const u8 *da, u16 tid,
157 u16 initiator, u16 reason_code) 156 u16 initiator, u16 reason_code)
158 { 157 {
159 struct ieee80211_local *local = sdata->local; 158 struct ieee80211_local *local = sdata->local;
160 struct sk_buff *skb; 159 struct sk_buff *skb;
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
208 initiator = (params & IEEE80211_DELBA_PARAM_INITIATOR_MASK) >> 11; 207 initiator = (params & IEEE80211_DELBA_PARAM_INITIATOR_MASK) >> 11;
209 208
210 #ifdef CONFIG_MAC80211_HT_DEBUG 209 #ifdef CONFIG_MAC80211_HT_DEBUG
211 if (net_ratelimit()) 210 if (net_ratelimit())
212 printk(KERN_DEBUG "delba from %pM (%s) tid %d reason code %d\n", 211 printk(KERN_DEBUG "delba from %pM (%s) tid %d reason code %d\n",
213 mgmt->sa, initiator ? "initiator" : "recipient", tid, 212 mgmt->sa, initiator ? "initiator" : "recipient", tid,
214 le16_to_cpu(mgmt->u.action.u.delba.reason_code)); 213 le16_to_cpu(mgmt->u.action.u.delba.reason_code));
215 #endif /* CONFIG_MAC80211_HT_DEBUG */ 214 #endif /* CONFIG_MAC80211_HT_DEBUG */
216 215
217 if (initiator == WLAN_BACK_INITIATOR) 216 if (initiator == WLAN_BACK_INITIATOR)
218 » » __ieee80211_stop_rx_ba_session(sta, tid, WLAN_BACK_INITIATOR, 0, 217 » » __ieee80211_stop_rx_ba_session(sta, tid, WLAN_BACK_INITIATOR, 0) ;
219 » » » » » true);
220 else 218 else
221 » » __ieee80211_stop_tx_ba_session(sta, tid, WLAN_BACK_RECIPIENT, 219 » » __ieee80211_stop_tx_ba_session(sta, tid, WLAN_BACK_RECIPIENT);
222 » » » » » true);
223 } 220 }
224 221
225 int ieee80211_send_smps_action(struct ieee80211_sub_if_data *sdata, 222 int ieee80211_send_smps_action(struct ieee80211_sub_if_data *sdata,
226 enum ieee80211_smps_mode smps, const u8 *da, 223 enum ieee80211_smps_mode smps, const u8 *da,
227 const u8 *bssid) 224 const u8 *bssid)
228 { 225 {
229 struct ieee80211_local *local = sdata->local; 226 struct ieee80211_local *local = sdata->local;
230 struct sk_buff *skb; 227 struct sk_buff *skb;
231 struct ieee80211_mgmt *action_frame; 228 struct ieee80211_mgmt *action_frame;
232 229
(...skipping 28 matching lines...) Expand all
261 WLAN_HT_SMPS_CONTROL_DYNAMIC; 258 WLAN_HT_SMPS_CONTROL_DYNAMIC;
262 break; 259 break;
263 } 260 }
264 261
265 /* we'll do more on status of this frame */ 262 /* we'll do more on status of this frame */
266 IEEE80211_SKB_CB(skb)->flags |= IEEE80211_TX_CTL_REQ_TX_STATUS; 263 IEEE80211_SKB_CB(skb)->flags |= IEEE80211_TX_CTL_REQ_TX_STATUS;
267 ieee80211_tx_skb(sdata, skb); 264 ieee80211_tx_skb(sdata, skb);
268 265
269 return 0; 266 return 0;
270 } 267 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698