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

Side by Side Diff: chromeos/drivers/ath6kl/os/linux/wireless_ext.c

Issue 3579004: ath6kl: Bringing in the upstream version (Closed) Base URL: http://git.chromium.org/git/kernel.git
Patch Set: Created 10 years, 2 months 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 * 2 // Copyright (c) 2004-2010 Atheros Communications Inc.
3 * Copyright (c) 2004-2010 Atheros Communications Inc. 3 // All rights reserved.
4 * All rights reserved.
5 *
6 *
7 // This program is free software; you can redistribute it and/or modify
8 // it under the terms of the GNU General Public License version 2 as
9 // published by the Free Software Foundation;
10 // 4 //
11 // Software distributed under the License is distributed on an "AS 5 //
12 // IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or 6 //
13 // implied. See the License for the specific language governing 7 // Permission to use, copy, modify, and/or distribute this software for any
14 // rights and limitations under the License. 8 // purpose with or without fee is hereby granted, provided that the above
9 // copyright notice and this permission notice appear in all copies.
10 //
11 // THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12 // WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13 // MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14 // ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15 // WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16 // ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17 // OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15 // 18 //
16 // 19 //
17 * 20 //
18 */ 21 // Author(s): ="Atheros"
22 //------------------------------------------------------------------------------
19 23
20 #include "ar6000_drv.h" 24 #include "ar6000_drv.h"
21 25
26 #define IWE_STREAM_ADD_EVENT(p1, p2, p3, p4, p5) \
27 iwe_stream_add_event((p1), (p2), (p3), (p4), (p5))
28
29 #define IWE_STREAM_ADD_POINT(p1, p2, p3, p4, p5) \
30 iwe_stream_add_point((p1), (p2), (p3), (p4), (p5))
31
32 #define IWE_STREAM_ADD_VALUE(p1, p2, p3, p4, p5, p6) \
33 iwe_stream_add_value((p1), (p2), (p3), (p4), (p5), (p6))
34
22 static void ar6000_set_quality(struct iw_quality *iq, A_INT8 rssi); 35 static void ar6000_set_quality(struct iw_quality *iq, A_INT8 rssi);
23 extern unsigned int wmitimeout; 36 extern unsigned int wmitimeout;
24 extern A_WAITQUEUE_HEAD arEvent; 37 extern A_WAITQUEUE_HEAD arEvent;
25 38
26 #if WIRELESS_EXT > 14 39 #if WIRELESS_EXT > 14
27 /* 40 /*
28 * Encode a WPA or RSN information element as a custom 41 * Encode a WPA or RSN information element as a custom
29 * element using the hostap format. 42 * element using the hostap format.
30 */ 43 */
31 static u_int 44 static u_int
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
94 end_buf = param->end_buf; 107 end_buf = param->end_buf;
95 108
96 cie = &ni->ni_cie; 109 cie = &ni->ni_cie;
97 110
98 if ((end_buf - current_ev) > IW_EV_ADDR_LEN) 111 if ((end_buf - current_ev) > IW_EV_ADDR_LEN)
99 { 112 {
100 A_MEMZERO(&iwe, sizeof(iwe)); 113 A_MEMZERO(&iwe, sizeof(iwe));
101 iwe.cmd = SIOCGIWAP; 114 iwe.cmd = SIOCGIWAP;
102 iwe.u.ap_addr.sa_family = ARPHRD_ETHER; 115 iwe.u.ap_addr.sa_family = ARPHRD_ETHER;
103 A_MEMCPY(iwe.u.ap_addr.sa_data, ni->ni_macaddr, 6); 116 A_MEMCPY(iwe.u.ap_addr.sa_data, ni->ni_macaddr, 6);
104 current_ev = iwe_stream_add_event( 117 current_ev = IWE_STREAM_ADD_EVENT(param->info, current_ev, end_buf,
105 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27) 118 &iwe, IW_EV_ADDR_LEN);
106 param->info,
107 #endif
108 current_ev, end_buf, &iwe,
109 IW_EV_ADDR_LEN);
110 } 119 }
111 param->bytes_needed += IW_EV_ADDR_LEN; 120 param->bytes_needed += IW_EV_ADDR_LEN;
112 121
113 data_len = cie->ie_ssid[1] + IW_EV_POINT_LEN; 122 data_len = cie->ie_ssid[1] + IW_EV_POINT_LEN;
114 if ((end_buf - current_ev) > data_len) 123 if ((end_buf - current_ev) > data_len)
115 { 124 {
116 A_MEMZERO(&iwe, sizeof(iwe)); 125 A_MEMZERO(&iwe, sizeof(iwe));
117 iwe.cmd = SIOCGIWESSID; 126 iwe.cmd = SIOCGIWESSID;
118 iwe.u.data.flags = 1; 127 iwe.u.data.flags = 1;
119 iwe.u.data.length = cie->ie_ssid[1]; 128 iwe.u.data.length = cie->ie_ssid[1];
120 current_ev = iwe_stream_add_point( 129 current_ev = IWE_STREAM_ADD_POINT(param->info, current_ev, end_buf,
121 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27) 130 &iwe, (char*)&cie->ie_ssid[2]);
122 param->info,
123 #endif
124 current_ev, end_buf, &iwe,
125 (char*)&cie->ie_ssid[2]);
126 } 131 }
127 param->bytes_needed += data_len; 132 param->bytes_needed += data_len;
128 133
129 if (cie->ie_capInfo & (IEEE80211_CAPINFO_ESS|IEEE80211_CAPINFO_IBSS)) { 134 if (cie->ie_capInfo & (IEEE80211_CAPINFO_ESS|IEEE80211_CAPINFO_IBSS)) {
130 if ((end_buf - current_ev) > IW_EV_UINT_LEN) 135 if ((end_buf - current_ev) > IW_EV_UINT_LEN)
131 { 136 {
132 A_MEMZERO(&iwe, sizeof(iwe)); 137 A_MEMZERO(&iwe, sizeof(iwe));
133 iwe.cmd = SIOCGIWMODE; 138 iwe.cmd = SIOCGIWMODE;
134 iwe.u.mode = cie->ie_capInfo & IEEE80211_CAPINFO_ESS ? 139 iwe.u.mode = cie->ie_capInfo & IEEE80211_CAPINFO_ESS ?
135 IW_MODE_MASTER : IW_MODE_ADHOC; 140 IW_MODE_MASTER : IW_MODE_ADHOC;
136 current_ev = iwe_stream_add_event( 141 current_ev = IWE_STREAM_ADD_EVENT(param->info, current_ev, end_buf,
137 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27) 142 &iwe, IW_EV_UINT_LEN);
138 param->info,
139 #endif
140 current_ev, end_buf, &iwe,
141 IW_EV_UINT_LEN);
142 } 143 }
143 param->bytes_needed += IW_EV_UINT_LEN; 144 param->bytes_needed += IW_EV_UINT_LEN;
144 } 145 }
145 146
146 if ((end_buf - current_ev) > IW_EV_FREQ_LEN) 147 if ((end_buf - current_ev) > IW_EV_FREQ_LEN)
147 { 148 {
148 A_MEMZERO(&iwe, sizeof(iwe)); 149 A_MEMZERO(&iwe, sizeof(iwe));
149 iwe.cmd = SIOCGIWFREQ; 150 iwe.cmd = SIOCGIWFREQ;
150 iwe.u.freq.m = cie->ie_chan * 100000; 151 iwe.u.freq.m = cie->ie_chan * 100000;
151 iwe.u.freq.e = 1; 152 iwe.u.freq.e = 1;
152 current_ev = iwe_stream_add_event( 153 current_ev = IWE_STREAM_ADD_EVENT(param->info, current_ev, end_buf,
153 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27) 154 &iwe, IW_EV_FREQ_LEN);
154 param->info,
155 #endif
156 current_ev, end_buf, &iwe,
157 IW_EV_FREQ_LEN);
158 } 155 }
159 param->bytes_needed += IW_EV_FREQ_LEN; 156 param->bytes_needed += IW_EV_FREQ_LEN;
160 157
161 if ((end_buf - current_ev) > IW_EV_QUAL_LEN) 158 if ((end_buf - current_ev) > IW_EV_QUAL_LEN)
162 { 159 {
163 A_MEMZERO(&iwe, sizeof(iwe)); 160 A_MEMZERO(&iwe, sizeof(iwe));
164 iwe.cmd = IWEVQUAL; 161 iwe.cmd = IWEVQUAL;
165 ar6000_set_quality(&iwe.u.qual, ni->ni_snr); 162 ar6000_set_quality(&iwe.u.qual, ni->ni_snr);
166 current_ev = iwe_stream_add_event( 163 current_ev = IWE_STREAM_ADD_EVENT(param->info, current_ev, end_buf,
167 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27) 164 &iwe, IW_EV_QUAL_LEN);
168 param->info,
169 #endif
170 current_ev, end_buf, &iwe,
171 IW_EV_QUAL_LEN);
172 } 165 }
173 param->bytes_needed += IW_EV_QUAL_LEN; 166 param->bytes_needed += IW_EV_QUAL_LEN;
174 167
175 if ((end_buf - current_ev) > IW_EV_POINT_LEN) 168 if ((end_buf - current_ev) > IW_EV_POINT_LEN)
176 { 169 {
177 A_MEMZERO(&iwe, sizeof(iwe)); 170 A_MEMZERO(&iwe, sizeof(iwe));
178 iwe.cmd = SIOCGIWENCODE; 171 iwe.cmd = SIOCGIWENCODE;
179 if (cie->ie_capInfo & IEEE80211_CAPINFO_PRIVACY) { 172 if (cie->ie_capInfo & IEEE80211_CAPINFO_PRIVACY) {
180 iwe.u.data.flags = IW_ENCODE_ENABLED | IW_ENCODE_NOKEY; 173 iwe.u.data.flags = IW_ENCODE_ENABLED | IW_ENCODE_NOKEY;
181 } else { 174 } else {
182 iwe.u.data.flags = IW_ENCODE_DISABLED; 175 iwe.u.data.flags = IW_ENCODE_DISABLED;
183 } 176 }
184 iwe.u.data.length = 0; 177 iwe.u.data.length = 0;
185 current_ev = iwe_stream_add_point( 178 current_ev = IWE_STREAM_ADD_POINT(param->info, current_ev, end_buf,
186 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27) 179 &iwe, "");
187 param->info,
188 #endif
189 current_ev, end_buf, &iwe, "");
190 } 180 }
191 param->bytes_needed += IW_EV_POINT_LEN; 181 param->bytes_needed += IW_EV_POINT_LEN;
192 182
193 /* supported bit rate */ 183 /* supported bit rate */
194 A_MEMZERO(&iwe, sizeof(iwe)); 184 A_MEMZERO(&iwe, sizeof(iwe));
195 iwe.cmd = SIOCGIWRATE; 185 iwe.cmd = SIOCGIWRATE;
196 iwe.u.bitrate.fixed = 0; 186 iwe.u.bitrate.fixed = 0;
197 iwe.u.bitrate.disabled = 0; 187 iwe.u.bitrate.disabled = 0;
198 iwe.u.bitrate.value = 0; 188 iwe.u.bitrate.value = 0;
199 current_val = current_ev + IW_EV_LCP_LEN; 189 current_val = current_ev + IW_EV_LCP_LEN;
200 param->bytes_needed += IW_EV_LCP_LEN; 190 param->bytes_needed += IW_EV_LCP_LEN;
201 191
202 if (cie->ie_rates != NULL) { 192 if (cie->ie_rates != NULL) {
203 rate_len = cie->ie_rates[1]; 193 rate_len = cie->ie_rates[1];
204 data_len = (rate_len * (IW_EV_PARAM_LEN - IW_EV_LCP_LEN)); 194 data_len = (rate_len * (IW_EV_PARAM_LEN - IW_EV_LCP_LEN));
205 if ((end_buf - current_ev) > data_len) 195 if ((end_buf - current_ev) > data_len)
206 { 196 {
207 for (j = 0; j < rate_len; j++) { 197 for (j = 0; j < rate_len; j++) {
208 unsigned char val; 198 unsigned char val;
209 val = cie->ie_rates[2 + j]; 199 val = cie->ie_rates[2 + j];
210 iwe.u.bitrate.value = 200 iwe.u.bitrate.value =
211 (val >= 0x80)? ((val - 0x80) * 500000): (val * 500000); 201 (val >= 0x80)? ((val - 0x80) * 500000): (val * 500000);
212 current_val = iwe_stream_add_value( 202 current_val = IWE_STREAM_ADD_VALUE(param->info, current_ev,
213 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27) 203 current_val, end_buf,
214 param->info, 204 &iwe, IW_EV_PARAM_LEN);
215 #endif
216 current_ev,
217 current_val,
218 end_buf,
219 &iwe,
220 IW_EV_PARAM_LEN);
221 } 205 }
222 } 206 }
223 param->bytes_needed += data_len; 207 param->bytes_needed += data_len;
224 } 208 }
225 209
226 if (cie->ie_xrates != NULL) { 210 if (cie->ie_xrates != NULL) {
227 rate_len = cie->ie_xrates[1]; 211 rate_len = cie->ie_xrates[1];
228 data_len = (rate_len * (IW_EV_PARAM_LEN - IW_EV_LCP_LEN)); 212 data_len = (rate_len * (IW_EV_PARAM_LEN - IW_EV_LCP_LEN));
229 if ((end_buf - current_ev) > data_len) 213 if ((end_buf - current_ev) > data_len)
230 { 214 {
231 for (j = 0; j < rate_len; j++) { 215 for (j = 0; j < rate_len; j++) {
232 unsigned char val; 216 unsigned char val;
233 val = cie->ie_xrates[2 + j]; 217 val = cie->ie_xrates[2 + j];
234 iwe.u.bitrate.value = 218 iwe.u.bitrate.value =
235 (val >= 0x80)? ((val - 0x80) * 500000): (val * 500000); 219 (val >= 0x80)? ((val - 0x80) * 500000): (val * 500000);
236 current_val = iwe_stream_add_value( 220 current_val = IWE_STREAM_ADD_VALUE(param->info, current_ev,
237 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27) 221 current_val, end_buf,
238 param->info, 222 &iwe, IW_EV_PARAM_LEN);
239 #endif
240 current_ev,
241 current_val,
242 end_buf,
243 &iwe,
244 IW_EV_PARAM_LEN);
245 } 223 }
246 } 224 }
247 param->bytes_needed += data_len; 225 param->bytes_needed += data_len;
248 } 226 }
249 /* remove fixed header if no rates were added */ 227 /* remove fixed header if no rates were added */
250 if ((current_val - current_ev) > IW_EV_LCP_LEN) 228 if ((current_val - current_ev) > IW_EV_LCP_LEN)
251 current_ev = current_val; 229 current_ev = current_val;
252 230
253 #if WIRELESS_EXT >= 18 231 #if WIRELESS_EXT >= 18
254 /* IE */ 232 /* IE */
255 if (cie->ie_wpa != NULL) { 233 if (cie->ie_wpa != NULL) {
256 data_len = cie->ie_wpa[1] + 2 + IW_EV_POINT_LEN; 234 data_len = cie->ie_wpa[1] + 2 + IW_EV_POINT_LEN;
257 if ((end_buf - current_ev) > data_len) 235 if ((end_buf - current_ev) > data_len)
258 { 236 {
259 A_MEMZERO(&iwe, sizeof(iwe)); 237 A_MEMZERO(&iwe, sizeof(iwe));
260 iwe.cmd = IWEVGENIE; 238 iwe.cmd = IWEVGENIE;
261 iwe.u.data.length = cie->ie_wpa[1] + 2; 239 iwe.u.data.length = cie->ie_wpa[1] + 2;
262 current_ev = iwe_stream_add_point( 240 current_ev = IWE_STREAM_ADD_POINT(param->info, current_ev, end_buf,
263 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27) 241 &iwe, (char*)cie->ie_wpa);
264 param->info,
265 #endif
266 current_ev, end_buf, &iwe, (char*)cie->ie_wpa);
267 } 242 }
268 param->bytes_needed += data_len; 243 param->bytes_needed += data_len;
269 } 244 }
270 245
271 if (cie->ie_rsn != NULL && cie->ie_rsn[0] == IEEE80211_ELEMID_RSN) { 246 if (cie->ie_rsn != NULL && cie->ie_rsn[0] == IEEE80211_ELEMID_RSN) {
272 data_len = cie->ie_rsn[1] + 2 + IW_EV_POINT_LEN; 247 data_len = cie->ie_rsn[1] + 2 + IW_EV_POINT_LEN;
273 if ((end_buf - current_ev) > data_len) 248 if ((end_buf - current_ev) > data_len)
274 { 249 {
275 A_MEMZERO(&iwe, sizeof(iwe)); 250 A_MEMZERO(&iwe, sizeof(iwe));
276 iwe.cmd = IWEVGENIE; 251 iwe.cmd = IWEVGENIE;
277 iwe.u.data.length = cie->ie_rsn[1] + 2; 252 iwe.u.data.length = cie->ie_rsn[1] + 2;
278 current_ev = iwe_stream_add_point( 253 current_ev = IWE_STREAM_ADD_POINT(param->info, current_ev, end_buf,
279 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27) 254 &iwe, (char*)cie->ie_rsn);
280 param->info,
281 #endif
282 current_ev, end_buf, &iwe, (char*)cie->ie_rsn);
283 } 255 }
284 param->bytes_needed += data_len; 256 param->bytes_needed += data_len;
285 } 257 }
286 258
287 #endif /* WIRELESS_EXT >= 18 */ 259 #endif /* WIRELESS_EXT >= 18 */
288 260
289 if ((end_buf - current_ev) > IW_EV_CHAR_LEN) 261 if ((end_buf - current_ev) > IW_EV_CHAR_LEN)
290 { 262 {
291 /* protocol */ 263 /* protocol */
292 A_MEMZERO(&iwe, sizeof(iwe)); 264 A_MEMZERO(&iwe, sizeof(iwe));
293 iwe.cmd = SIOCGIWNAME; 265 iwe.cmd = SIOCGIWNAME;
294 switch (get_bss_phy_capability(ni)) { 266 switch (get_bss_phy_capability(ni)) {
295 case WMI_11A_CAPABILITY: 267 case WMI_11A_CAPABILITY:
296 snprintf(iwe.u.name, IFNAMSIZ, "IEEE 802.11a"); 268 snprintf(iwe.u.name, IFNAMSIZ, "IEEE 802.11a");
297 break; 269 break;
298 case WMI_11G_CAPABILITY: 270 case WMI_11G_CAPABILITY:
299 snprintf(iwe.u.name, IFNAMSIZ, "IEEE 802.11g"); 271 snprintf(iwe.u.name, IFNAMSIZ, "IEEE 802.11g");
300 break; 272 break;
301 case WMI_11NA_CAPABILITY: 273 case WMI_11NA_CAPABILITY:
302 snprintf(iwe.u.name, IFNAMSIZ, "IEEE 802.11na"); 274 snprintf(iwe.u.name, IFNAMSIZ, "IEEE 802.11na");
303 break; 275 break;
304 case WMI_11NG_CAPABILITY: 276 case WMI_11NG_CAPABILITY:
305 snprintf(iwe.u.name, IFNAMSIZ, "IEEE 802.11ng"); 277 snprintf(iwe.u.name, IFNAMSIZ, "IEEE 802.11ng");
306 break; 278 break;
307 default: 279 default:
308 snprintf(iwe.u.name, IFNAMSIZ, "IEEE 802.11b"); 280 snprintf(iwe.u.name, IFNAMSIZ, "IEEE 802.11b");
309 break; 281 break;
310 } 282 }
311 current_ev = iwe_stream_add_event( 283 current_ev = IWE_STREAM_ADD_EVENT(param->info, current_ev, end_buf,
312 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27) 284 &iwe, IW_EV_CHAR_LEN);
313 param->info,
314 #endif
315 current_ev, end_buf, &iwe, IW_EV_CHAR_LEN);
316 } 285 }
317 param->bytes_needed += IW_EV_CHAR_LEN; 286 param->bytes_needed += IW_EV_CHAR_LEN;
318 287
319 #if WIRELESS_EXT > 14 288 #if WIRELESS_EXT > 14
320 A_MEMZERO(&iwe, sizeof(iwe)); 289 A_MEMZERO(&iwe, sizeof(iwe));
321 iwe.cmd = IWEVCUSTOM; 290 iwe.cmd = IWEVCUSTOM;
322 iwe.u.data.length = snprintf(buf, sizeof(buf), "bcn_int=%d", cie->ie_beaconI nt); 291 iwe.u.data.length = snprintf(buf, sizeof(buf), "bcn_int=%d", cie->ie_beaconI nt);
323 data_len = iwe.u.data.length + IW_EV_POINT_LEN; 292 data_len = iwe.u.data.length + IW_EV_POINT_LEN;
324 if ((end_buf - current_ev) > data_len) 293 if ((end_buf - current_ev) > data_len)
325 { 294 {
326 current_ev = iwe_stream_add_point( 295 current_ev = IWE_STREAM_ADD_POINT(param->info, current_ev, end_buf,
327 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27) 296 &iwe, buf);
328 param->info,
329 #endif
330 current_ev, end_buf, &iwe, buf);
331 } 297 }
332 param->bytes_needed += data_len; 298 param->bytes_needed += data_len;
333 299
334 #if WIRELESS_EXT < 18 300 #if WIRELESS_EXT < 18
335 if (cie->ie_wpa != NULL) { 301 if (cie->ie_wpa != NULL) {
336 static const char wpa_leader[] = "wpa_ie="; 302 static const char wpa_leader[] = "wpa_ie=";
337 data_len = (sizeof(wpa_leader) - 1) + ((cie->ie_wpa[1]+2) * 2) + IW_EV_P OINT_LEN; 303 data_len = (sizeof(wpa_leader) - 1) + ((cie->ie_wpa[1]+2) * 2) + IW_EV_P OINT_LEN;
338 if ((end_buf - current_ev) > data_len) 304 if ((end_buf - current_ev) > data_len)
339 { 305 {
340 A_MEMZERO(&iwe, sizeof(iwe)); 306 A_MEMZERO(&iwe, sizeof(iwe));
341 iwe.cmd = IWEVCUSTOM; 307 iwe.cmd = IWEVCUSTOM;
342 iwe.u.data.length = encode_ie(buf, sizeof(buf), cie->ie_wpa, 308 iwe.u.data.length = encode_ie(buf, sizeof(buf), cie->ie_wpa,
343 cie->ie_wpa[1]+2, 309 cie->ie_wpa[1]+2,
344 wpa_leader, sizeof(wpa_leader)-1); 310 wpa_leader, sizeof(wpa_leader)-1);
345 311
346 if (iwe.u.data.length != 0) { 312 if (iwe.u.data.length != 0) {
347 current_ev = iwe_stream_add_point( 313 current_ev = IWE_STREAM_ADD_POINT(param->info, current_ev,
348 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27) 314 end_buf, &iwe, buf);
349 param->info,
350 #endif
351 current_ev, end_buf, &iwe, buf);
352 } 315 }
353 } 316 }
354 param->bytes_needed += data_len; 317 param->bytes_needed += data_len;
355 } 318 }
356 319
357 if (cie->ie_rsn != NULL && cie->ie_rsn[0] == IEEE80211_ELEMID_RSN) { 320 if (cie->ie_rsn != NULL && cie->ie_rsn[0] == IEEE80211_ELEMID_RSN) {
358 static const char rsn_leader[] = "rsn_ie="; 321 static const char rsn_leader[] = "rsn_ie=";
359 data_len = (sizeof(rsn_leader) - 1) + ((cie->ie_rsn[1]+2) * 2) + IW_EV_P OINT_LEN; 322 data_len = (sizeof(rsn_leader) - 1) + ((cie->ie_rsn[1]+2) * 2) + IW_EV_P OINT_LEN;
360 if ((end_buf - current_ev) > data_len) 323 if ((end_buf - current_ev) > data_len)
361 { 324 {
362 A_MEMZERO(&iwe, sizeof(iwe)); 325 A_MEMZERO(&iwe, sizeof(iwe));
363 iwe.cmd = IWEVCUSTOM; 326 iwe.cmd = IWEVCUSTOM;
364 iwe.u.data.length = encode_ie(buf, sizeof(buf), cie->ie_rsn, 327 iwe.u.data.length = encode_ie(buf, sizeof(buf), cie->ie_rsn,
365 cie->ie_rsn[1]+2, 328 cie->ie_rsn[1]+2,
366 rsn_leader, sizeof(rsn_leader)-1); 329 rsn_leader, sizeof(rsn_leader)-1);
367 330
368 if (iwe.u.data.length != 0) { 331 if (iwe.u.data.length != 0) {
369 current_ev = iwe_stream_add_point( 332 current_ev = IWE_STREAM_ADD_POINT(param->info, current_ev,
370 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27) 333 end_buf, &iwe, buf);
371 param->info,
372 #endif
373 current_ev, end_buf, &iwe, buf);
374 } 334 }
375 } 335 }
376 param->bytes_needed += data_len; 336 param->bytes_needed += data_len;
377 } 337 }
378 #endif /* WIRELESS_EXT < 18 */ 338 #endif /* WIRELESS_EXT < 18 */
379 339
380 if (cie->ie_wmm != NULL) { 340 if (cie->ie_wmm != NULL) {
381 static const char wmm_leader[] = "wmm_ie="; 341 static const char wmm_leader[] = "wmm_ie=";
382 data_len = (sizeof(wmm_leader) - 1) + ((cie->ie_wmm[1]+2) * 2) + IW_EV_P OINT_LEN; 342 data_len = (sizeof(wmm_leader) - 1) + ((cie->ie_wmm[1]+2) * 2) + IW_EV_P OINT_LEN;
383 if ((end_buf - current_ev) > data_len) 343 if ((end_buf - current_ev) > data_len)
384 { 344 {
385 A_MEMZERO(&iwe, sizeof(iwe)); 345 A_MEMZERO(&iwe, sizeof(iwe));
386 iwe.cmd = IWEVCUSTOM; 346 iwe.cmd = IWEVCUSTOM;
387 iwe.u.data.length = encode_ie(buf, sizeof(buf), cie->ie_wmm, 347 iwe.u.data.length = encode_ie(buf, sizeof(buf), cie->ie_wmm,
388 cie->ie_wmm[1]+2, 348 cie->ie_wmm[1]+2,
389 wmm_leader, sizeof(wmm_leader)-1); 349 wmm_leader, sizeof(wmm_leader)-1);
390 if (iwe.u.data.length != 0) { 350 if (iwe.u.data.length != 0) {
391 current_ev = iwe_stream_add_point( 351 current_ev = IWE_STREAM_ADD_POINT(param->info, current_ev,
392 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27) 352 end_buf, &iwe, buf);
393 param->info,
394 #endif
395 current_ev, end_buf, &iwe, buf);
396 } 353 }
397 } 354 }
398 param->bytes_needed += data_len; 355 param->bytes_needed += data_len;
399 } 356 }
400 357
401 if (cie->ie_ath != NULL) { 358 if (cie->ie_ath != NULL) {
402 static const char ath_leader[] = "ath_ie="; 359 static const char ath_leader[] = "ath_ie=";
403 data_len = (sizeof(ath_leader) - 1) + ((cie->ie_ath[1]+2) * 2) + IW_EV_P OINT_LEN; 360 data_len = (sizeof(ath_leader) - 1) + ((cie->ie_ath[1]+2) * 2) + IW_EV_P OINT_LEN;
404 if ((end_buf - current_ev) > data_len) 361 if ((end_buf - current_ev) > data_len)
405 { 362 {
406 A_MEMZERO(&iwe, sizeof(iwe)); 363 A_MEMZERO(&iwe, sizeof(iwe));
407 iwe.cmd = IWEVCUSTOM; 364 iwe.cmd = IWEVCUSTOM;
408 iwe.u.data.length = encode_ie(buf, sizeof(buf), cie->ie_ath, 365 iwe.u.data.length = encode_ie(buf, sizeof(buf), cie->ie_ath,
409 cie->ie_ath[1]+2, 366 cie->ie_ath[1]+2,
410 ath_leader, sizeof(ath_leader)-1); 367 ath_leader, sizeof(ath_leader)-1);
411 if (iwe.u.data.length != 0) { 368 if (iwe.u.data.length != 0) {
412 current_ev = iwe_stream_add_point( 369 current_ev = IWE_STREAM_ADD_POINT(param->info, current_ev,
413 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27) 370 end_buf, &iwe, buf);
414 param->info,
415 #endif
416 current_ev, end_buf, &iwe, buf);
417 } 371 }
418 } 372 }
419 param->bytes_needed += data_len; 373 param->bytes_needed += data_len;
420 } 374 }
421 375
422 #ifdef WAPI_ENABLE 376 #ifdef WAPI_ENABLE
423 if (cie->ie_wapi != NULL) { 377 if (cie->ie_wapi != NULL) {
424 static const char wapi_leader[] = "wapi_ie="; 378 static const char wapi_leader[] = "wapi_ie=";
425 data_len = (sizeof(wapi_leader) - 1) + ((cie->ie_wapi[1] + 2) * 2) + IW_ EV_POINT_LEN; 379 data_len = (sizeof(wapi_leader) - 1) + ((cie->ie_wapi[1] + 2) * 2) + IW_ EV_POINT_LEN;
426 if ((end_buf - current_ev) > data_len) { 380 if ((end_buf - current_ev) > data_len) {
427 A_MEMZERO(&iwe, sizeof(iwe)); 381 A_MEMZERO(&iwe, sizeof(iwe));
428 iwe.cmd = IWEVCUSTOM; 382 iwe.cmd = IWEVCUSTOM;
429 iwe.u.data.length = encode_ie(buf, sizeof(buf), cie->ie_wapi, 383 iwe.u.data.length = encode_ie(buf, sizeof(buf), cie->ie_wapi,
430 cie->ie_wapi[1] + 2, 384 cie->ie_wapi[1] + 2,
431 wapi_leader, sizeof(wapi_leader) - 1); 385 wapi_leader, sizeof(wapi_leader) - 1);
432 if (iwe.u.data.length != 0) { 386 if (iwe.u.data.length != 0) {
433 current_ev = iwe_stream_add_point( 387 current_ev = IWE_STREAM_ADD_POINT(param->info, current_ev,
434 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27) 388 end_buf, &iwe, buf);
435 param->info,
436 #endif
437 current_ev, end_buf, &iwe, buf);
438 } 389 }
439 } 390 }
440 param->bytes_needed += data_len; 391 param->bytes_needed += data_len;
441 } 392 }
442 #endif /* WAPI_ENABLE */ 393 #endif /* WAPI_ENABLE */
443 394
444 #endif /* WIRELESS_EXT > 14 */ 395 #endif /* WIRELESS_EXT > 14 */
445 396
446 #if WIRELESS_EXT >= 18 397 #if WIRELESS_EXT >= 18
447 if (cie->ie_wsc != NULL) { 398 if (cie->ie_wsc != NULL) {
448 data_len = (cie->ie_wsc[1] + 2) + IW_EV_POINT_LEN; 399 data_len = (cie->ie_wsc[1] + 2) + IW_EV_POINT_LEN;
449 if ((end_buf - current_ev) > data_len) 400 if ((end_buf - current_ev) > data_len)
450 { 401 {
451 A_MEMZERO(&iwe, sizeof(iwe)); 402 A_MEMZERO(&iwe, sizeof(iwe));
452 iwe.cmd = IWEVGENIE; 403 iwe.cmd = IWEVGENIE;
453 iwe.u.data.length = cie->ie_wsc[1] + 2; 404 iwe.u.data.length = cie->ie_wsc[1] + 2;
454 current_ev = iwe_stream_add_point( 405 current_ev = IWE_STREAM_ADD_POINT(param->info, current_ev, end_buf,
455 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27) 406 &iwe, (char*)cie->ie_wsc);
456 param->info,
457 #endif
458 current_ev, end_buf, &iwe, (char*)cie->ie_wsc);
459 } 407 }
460 param->bytes_needed += data_len; 408 param->bytes_needed += data_len;
461 } 409 }
462 #endif /* WIRELESS_EXT >= 18 */ 410 #endif /* WIRELESS_EXT >= 18 */
463 411
464 param->current_ev = current_ev; 412 param->current_ev = current_ev;
465 } 413 }
466 414
467 int 415 int
468 ar6000_ioctl_giwscan(struct net_device *dev, 416 ar6000_ioctl_giwscan(struct net_device *dev,
(...skipping 12 matching lines...) Expand all
481 return -EIO; 429 return -EIO;
482 } 430 }
483 431
484 if (ar->arWmiReady == FALSE) { 432 if (ar->arWmiReady == FALSE) {
485 return -EIO; 433 return -EIO;
486 } 434 }
487 435
488 param.current_ev = extra; 436 param.current_ev = extra;
489 param.end_buf = extra + data->length; 437 param.end_buf = extra + data->length;
490 param.bytes_needed = 0; 438 param.bytes_needed = 0;
491 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)
492 param.info = info; 439 param.info = info;
493 #endif
494 440
495 /* Translate data to WE format */ 441 /* Translate data to WE format */
496 wmi_iterate_nodes(ar->arWmi, ar6000_scan_node, &param); 442 wmi_iterate_nodes(ar->arWmi, ar6000_scan_node, &param);
497 443
498 /* check if bytes needed is greater than bytes consumed */ 444 /* check if bytes needed is greater than bytes consumed */
499 if (param.bytes_needed > (param.current_ev - extra)) 445 if (param.bytes_needed > (param.current_ev - extra))
500 { 446 {
501 /* Request one byte more than needed, because when "data->length" equals bytes_needed, 447 /* Request one byte more than needed, because when "data->length" equals bytes_needed,
502 it is not possible to add the last event data as all iwe_stream_add_xxxx x() functions 448 it is not possible to add the last event data as all iwe_stream_add_xxxx x() functions
503 checks whether (cur_ptr + ev_len) < end_ptr, due to this one more retry would happen*/ 449 checks whether (cur_ptr + ev_len) < end_ptr, due to this one more retry would happen*/
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after
761 /* 707 /*
762 * SIOCSIWRATE 708 * SIOCSIWRATE
763 */ 709 */
764 int 710 int
765 ar6000_ioctl_siwrate(struct net_device *dev, 711 ar6000_ioctl_siwrate(struct net_device *dev,
766 struct iw_request_info *info, 712 struct iw_request_info *info,
767 struct iw_param *rrq, char *extra) 713 struct iw_param *rrq, char *extra)
768 { 714 {
769 AR_SOFTC_T *ar = (AR_SOFTC_T *)ar6k_priv(dev); 715 AR_SOFTC_T *ar = (AR_SOFTC_T *)ar6k_priv(dev);
770 A_UINT32 kbps; 716 A_UINT32 kbps;
717 A_INT8 rate_idx;
771 718
772 if (is_iwioctl_allowed(ar->arNextMode, info->cmd) != A_OK) { 719 if (is_iwioctl_allowed(ar->arNextMode, info->cmd) != A_OK) {
773 A_PRINTF("wext_ioctl: cmd=0x%x not allowed in this mode\n", info->cmd); 720 A_PRINTF("wext_ioctl: cmd=0x%x not allowed in this mode\n", info->cmd);
774 return -EOPNOTSUPP; 721 return -EOPNOTSUPP;
775 } 722 }
776 723
777 if (rrq->fixed) { 724 if (rrq->fixed) {
778 kbps = rrq->value / 1000; /* rrq->value is in bps */ 725 kbps = rrq->value / 1000; /* rrq->value is in bps */
779 } else { 726 } else {
780 kbps = -1; /* -1 indicates auto rate */ 727 kbps = -1; /* -1 indicates auto rate */
781 } 728 }
782 if(kbps != -1 && wmi_validate_bitrate(ar->arWmi, kbps) == A_EINVAL) 729 if(kbps != -1 && wmi_validate_bitrate(ar->arWmi, kbps, &rate_idx) != A_OK)
783 { 730 {
784 AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("BitRate is not Valid %d\n", kbps)); 731 AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("BitRate is not Valid %d\n", kbps));
785 return -EINVAL; 732 return -EINVAL;
786 } 733 }
787 ar->arBitRate = kbps; 734 ar->arBitRate = kbps;
788 if(ar->arWmiReady == TRUE) 735 if(ar->arWmiReady == TRUE)
789 { 736 {
790 if (wmi_set_bitrate_cmd(ar->arWmi, kbps, -1, -1) != A_OK) { 737 if (wmi_set_bitrate_cmd(ar->arWmi, kbps, -1, -1) != A_OK) {
791 return -EINVAL; 738 return -EINVAL;
792 } 739 }
(...skipping 1612 matching lines...) Expand 10 before | Expand all | Expand 10 after
2405 if (ar->arConnected != TRUE) { 2352 if (ar->arConnected != TRUE) {
2406 return -EINVAL; 2353 return -EINVAL;
2407 } 2354 }
2408 2355
2409 A_MEMCPY(&ap_addr->sa_data, ar->arBssid, sizeof(ar->arBssid)); 2356 A_MEMCPY(&ap_addr->sa_data, ar->arBssid, sizeof(ar->arBssid));
2410 ap_addr->sa_family = ARPHRD_ETHER; 2357 ap_addr->sa_family = ARPHRD_ETHER;
2411 2358
2412 return 0; 2359 return 0;
2413 } 2360 }
2414 2361
2415 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,13) 2362 #if (WIRELESS_EXT >= 18)
2416 /* 2363 /*
2417 * SIOCSIWMLME 2364 * SIOCSIWMLME
2418 */ 2365 */
2419 int 2366 int
2420 ar6000_ioctl_siwmlme(struct net_device *dev, 2367 ar6000_ioctl_siwmlme(struct net_device *dev,
2421 struct iw_request_info *info, 2368 struct iw_request_info *info,
2422 struct iw_point *data, char *extra) 2369 struct iw_point *data, char *extra)
2423 { 2370 {
2424 AR_SOFTC_T *ar = (AR_SOFTC_T *)ar6k_priv(dev); 2371 AR_SOFTC_T *ar = (AR_SOFTC_T *)ar6k_priv(dev);
2425 2372
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
2482 /* fall through */ 2429 /* fall through */
2483 default: 2430 default:
2484 up(&ar->arSem); 2431 up(&ar->arSem);
2485 return -EOPNOTSUPP; 2432 return -EOPNOTSUPP;
2486 } 2433 }
2487 } 2434 }
2488 2435
2489 up(&ar->arSem); 2436 up(&ar->arSem);
2490 return 0; 2437 return 0;
2491 } 2438 }
2492 #endif /* LINUX_VERSION_CODE */ 2439 #endif /* WIRELESS_EXT >= 18 */
2493 2440
2494 /* 2441 /*
2495 * SIOCGIWAPLIST 2442 * SIOCGIWAPLIST
2496 */ 2443 */
2497 int 2444 int
2498 ar6000_ioctl_iwaplist(struct net_device *dev, 2445 ar6000_ioctl_iwaplist(struct net_device *dev,
2499 struct iw_request_info *info, 2446 struct iw_request_info *info,
2500 struct iw_point *data, char *extra) 2447 struct iw_point *data, char *extra)
2501 { 2448 {
2502 return -EIO; /* for now */ 2449 return -EIO; /* for now */
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
2556 #if WIRELESS_EXT >= 18 2503 #if WIRELESS_EXT >= 18
2557 if (data->pointer && (data->length == sizeof(struct iw_scan_req))) 2504 if (data->pointer && (data->length == sizeof(struct iw_scan_req)))
2558 { 2505 {
2559 if ((data->flags & IW_SCAN_THIS_ESSID) == IW_SCAN_THIS_ESSID) 2506 if ((data->flags & IW_SCAN_THIS_ESSID) == IW_SCAN_THIS_ESSID)
2560 { 2507 {
2561 struct iw_scan_req req; 2508 struct iw_scan_req req;
2562 if (copy_from_user(&req, data->pointer, sizeof(struct iw_scan_req))) 2509 if (copy_from_user(&req, data->pointer, sizeof(struct iw_scan_req)))
2563 return -EIO; 2510 return -EIO;
2564 if (wmi_probedSsid_cmd(ar->arWmi, 1, SPECIFIC_SSID_FLAG, req.essid_l en, req.essid) != A_OK) 2511 if (wmi_probedSsid_cmd(ar->arWmi, 1, SPECIFIC_SSID_FLAG, req.essid_l en, req.essid) != A_OK)
2565 return -EIO; 2512 return -EIO;
2513 ar->scanSpecificSsid = 1;
2566 } 2514 }
2567 else 2515 else
2568 { 2516 {
2569 if (wmi_probedSsid_cmd(ar->arWmi, 1, DISABLE_SSID_FLAG, 0, NULL) != A_OK) 2517 if (ar->scanSpecificSsid) {
2570 return -EIO; 2518 if (wmi_probedSsid_cmd(ar->arWmi, 1, DISABLE_SSID_FLAG, 0, NULL) != A_OK)
2519 return -EIO;
2520 ar->scanSpecificSsid = 0;
2521 }
2571 } 2522 }
2572 } 2523 }
2573 else 2524 else
2574 { 2525 {
2575 if (wmi_probedSsid_cmd(ar->arWmi, 1, DISABLE_SSID_FLAG, 0, NULL) != A_OK ) 2526 if (ar->scanSpecificSsid) {
2576 return -EIO; 2527 if (wmi_probedSsid_cmd(ar->arWmi, 1, DISABLE_SSID_FLAG, 0, NULL) != A_OK)
2528 return -EIO;
2529 ar->scanSpecificSsid = 0;
2530 }
2577 } 2531 }
2578 #endif 2532 #endif
2579 #endif /* ANDROID_ENV */ 2533 #endif /* ANDROID_ENV */
2580 2534
2581 if (wmi_startscan_cmd(ar->arWmi, WMI_LONG_SCAN, FALSE, FALSE, \ 2535 if (wmi_startscan_cmd(ar->arWmi, WMI_LONG_SCAN, FALSE, FALSE, \
2582 0, 0, 0, NULL) != A_OK) { 2536 0, 0, 0, NULL) != A_OK) {
2583 ret = -EIO; 2537 ret = -EIO;
2584 } 2538 }
2585 2539
2586 if (ret == 0) { 2540 if (ret == 0) {
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
2713 (iw_handler) NULL /* not used */, /* SIOCSIWPRIV */ 2667 (iw_handler) NULL /* not used */, /* SIOCSIWPRIV */
2714 (iw_handler) NULL /* kernel code */, /* SIOCGIWPRIV */ 2668 (iw_handler) NULL /* kernel code */, /* SIOCGIWPRIV */
2715 (iw_handler) NULL /* not used */, /* SIOCSIWSTATS */ 2669 (iw_handler) NULL /* not used */, /* SIOCSIWSTATS */
2716 (iw_handler) NULL /* kernel code */, /* SIOCGIWSTATS */ 2670 (iw_handler) NULL /* kernel code */, /* SIOCGIWSTATS */
2717 (iw_handler) NULL, /* SIOCSIWSPY */ 2671 (iw_handler) NULL, /* SIOCSIWSPY */
2718 (iw_handler) NULL, /* SIOCGIWSPY */ 2672 (iw_handler) NULL, /* SIOCGIWSPY */
2719 (iw_handler) NULL, /* SIOCSIWTHRSPY */ 2673 (iw_handler) NULL, /* SIOCSIWTHRSPY */
2720 (iw_handler) NULL, /* SIOCGIWTHRSPY */ 2674 (iw_handler) NULL, /* SIOCGIWTHRSPY */
2721 (iw_handler) ar6000_ioctl_siwap, /* SIOCSIWAP */ 2675 (iw_handler) ar6000_ioctl_siwap, /* SIOCSIWAP */
2722 (iw_handler) ar6000_ioctl_giwap, /* SIOCGIWAP */ 2676 (iw_handler) ar6000_ioctl_giwap, /* SIOCGIWAP */
2723 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,13) 2677 #if (WIRELESS_EXT >= 18)
2724 (iw_handler) ar6000_ioctl_siwmlme, /* SIOCSIWMLME */ 2678 (iw_handler) ar6000_ioctl_siwmlme, /* SIOCSIWMLME */
2725 #else 2679 #else
2726 (iw_handler) NULL, /* -- hole -- */ 2680 (iw_handler) NULL, /* -- hole -- */
2727 #endif /* LINUX_VERSION_CODE */ 2681 #endif /* WIRELESS_EXT >= 18 */
2728 (iw_handler) ar6000_ioctl_iwaplist, /* SIOCGIWAPLIST */ 2682 (iw_handler) ar6000_ioctl_iwaplist, /* SIOCGIWAPLIST */
2729 (iw_handler) ar6000_ioctl_siwscan, /* SIOCSIWSCAN */ 2683 (iw_handler) ar6000_ioctl_siwscan, /* SIOCSIWSCAN */
2730 (iw_handler) ar6000_ioctl_giwscan, /* SIOCGIWSCAN */ 2684 (iw_handler) ar6000_ioctl_giwscan, /* SIOCGIWSCAN */
2731 (iw_handler) W_PROTO(ar6000_ioctl_siwessid),/* SIOCSIWESSID */ 2685 (iw_handler) W_PROTO(ar6000_ioctl_siwessid),/* SIOCSIWESSID */
2732 (iw_handler) ar6000_ioctl_giwessid, /* SIOCGIWESSID */ 2686 (iw_handler) ar6000_ioctl_giwessid, /* SIOCGIWESSID */
2733 (iw_handler) NULL, /* SIOCSIWNICKN */ 2687 (iw_handler) NULL, /* SIOCSIWNICKN */
2734 (iw_handler) NULL, /* SIOCGIWNICKN */ 2688 (iw_handler) NULL, /* SIOCGIWNICKN */
2735 (iw_handler) NULL, /* -- hole -- */ 2689 (iw_handler) NULL, /* -- hole -- */
2736 (iw_handler) NULL, /* -- hole -- */ 2690 (iw_handler) NULL, /* -- hole -- */
2737 (iw_handler) ar6000_ioctl_siwrate, /* SIOCSIWRATE */ 2691 (iw_handler) ar6000_ioctl_siwrate, /* SIOCSIWRATE */
(...skipping 24 matching lines...) Expand all
2762 (iw_handler) ar6000_ioctl_siwpmksa, /* SIOCSIWPMKSA */ 2716 (iw_handler) ar6000_ioctl_siwpmksa, /* SIOCSIWPMKSA */
2763 #endif // WIRELESS_EXT >= 18 2717 #endif // WIRELESS_EXT >= 18
2764 }; 2718 };
2765 2719
2766 struct iw_handler_def ath_iw_handler_def = { 2720 struct iw_handler_def ath_iw_handler_def = {
2767 .standard = (iw_handler *)ath_handlers, 2721 .standard = (iw_handler *)ath_handlers,
2768 .num_standard = ARRAY_SIZE(ath_handlers), 2722 .num_standard = ARRAY_SIZE(ath_handlers),
2769 .private = NULL, 2723 .private = NULL,
2770 .num_private = 0, 2724 .num_private = 0,
2771 }; 2725 };
OLDNEW
« no previous file with comments | « chromeos/drivers/ath6kl/os/linux/netbuf.c ('k') | chromeos/drivers/ath6kl/reorder/aggr_rx_internal.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698