OLD | NEW |
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 Loading... |
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 Loading... |
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, ¶m); | 442 wmi_iterate_nodes(ar->arWmi, ar6000_scan_node, ¶m); |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 }; |
OLD | NEW |