| 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 |