| .. | .. |
|---|
| 1 | +/* SPDX-License-Identifier: GPL-2.0 */ |
|---|
| 1 | 2 | /****************************************************************************** |
|---|
| 2 | 3 | * |
|---|
| 3 | 4 | * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. |
|---|
| 4 | | - * |
|---|
| 5 | | - * This program is free software; you can redistribute it and/or modify it |
|---|
| 6 | | - * under the terms of version 2 of the GNU General Public License as |
|---|
| 7 | | - * published by the Free Software Foundation. |
|---|
| 8 | | - * |
|---|
| 9 | | - * This program is distributed in the hope that it will be useful, but WITHOUT |
|---|
| 10 | | - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|---|
| 11 | | - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
|---|
| 12 | | - * more details. |
|---|
| 13 | | - * |
|---|
| 14 | | - * You should have received a copy of the GNU General Public License along with |
|---|
| 15 | | - * this program; if not, see <http://www.gnu.org/licenses/>. |
|---|
| 16 | 5 | * |
|---|
| 17 | 6 | * Modifications for inclusion into the Linux staging tree are |
|---|
| 18 | 7 | * Copyright(c) 2010 Larry Finger. All rights reserved. |
|---|
| .. | .. |
|---|
| 25 | 14 | #ifndef __IEEE80211_H |
|---|
| 26 | 15 | #define __IEEE80211_H |
|---|
| 27 | 16 | |
|---|
| 28 | | -#include "osdep_service.h" |
|---|
| 29 | | -#include "drv_types.h" |
|---|
| 30 | | -#include "wifi.h" |
|---|
| 31 | | -#include <linux/compiler.h> |
|---|
| 32 | | -#include <linux/wireless.h> |
|---|
| 17 | +#include <linux/ieee80211.h> |
|---|
| 33 | 18 | |
|---|
| 34 | | -#define MGMT_QUEUE_NUM 5 |
|---|
| 35 | | -#define ETH_ALEN 6 |
|---|
| 36 | 19 | #define IEEE_CMD_SET_WPA_PARAM 1 |
|---|
| 37 | 20 | #define IEEE_CMD_SET_WPA_IE 2 |
|---|
| 38 | 21 | #define IEEE_CMD_SET_ENCRYPTION 3 |
|---|
| .. | .. |
|---|
| 113 | 96 | } u; |
|---|
| 114 | 97 | }; |
|---|
| 115 | 98 | |
|---|
| 116 | | -#define IEEE80211_DATA_LEN 2304 |
|---|
| 117 | | -/* Maximum size for the MA-UNITDATA primitive, 802.11 standard section |
|---|
| 118 | | - * 6.2.1.1.2. |
|---|
| 119 | | - * |
|---|
| 120 | | - * The figure in section 7.1.2 suggests a body size of up to 2312 |
|---|
| 121 | | - * bytes is allowed, which is a bit confusing, I suspect this |
|---|
| 122 | | - * represents the 2304 bytes of real data, plus a possible 8 bytes of |
|---|
| 123 | | - * WEP IV and ICV. (this interpretation suggested by Ramiro Barreiro) |
|---|
| 124 | | - */ |
|---|
| 125 | | - |
|---|
| 126 | | -#define IEEE80211_HLEN 30 |
|---|
| 127 | | -#define IEEE80211_FRAME_LEN (IEEE80211_DATA_LEN + IEEE80211_HLEN) |
|---|
| 128 | | - |
|---|
| 129 | | -/* this is stolen from ipw2200 driver */ |
|---|
| 130 | | -#define IEEE_IBSS_MAC_HASH_SIZE 31 |
|---|
| 131 | | - |
|---|
| 132 | | -struct ieee_ibss_seq { |
|---|
| 133 | | - u8 mac[ETH_ALEN]; |
|---|
| 134 | | - u16 seq_num; |
|---|
| 135 | | - u16 frag_num; |
|---|
| 136 | | - unsigned long packet_time; |
|---|
| 137 | | - struct list_head list; |
|---|
| 138 | | -}; |
|---|
| 139 | | - |
|---|
| 140 | | -struct ieee80211_hdr { |
|---|
| 141 | | - __le16 frame_ctl; |
|---|
| 142 | | - __le16 duration_id; |
|---|
| 143 | | - u8 addr1[ETH_ALEN]; |
|---|
| 144 | | - u8 addr2[ETH_ALEN]; |
|---|
| 145 | | - u8 addr3[ETH_ALEN]; |
|---|
| 146 | | - __le16 seq_ctl; |
|---|
| 147 | | - u8 addr4[ETH_ALEN]; |
|---|
| 148 | | -} __packed __aligned(2); |
|---|
| 149 | | - |
|---|
| 150 | | -struct ieee80211_hdr_3addr { |
|---|
| 151 | | - __le16 frame_ctl; |
|---|
| 152 | | - __le16 duration_id; |
|---|
| 153 | | - u8 addr1[ETH_ALEN]; |
|---|
| 154 | | - u8 addr2[ETH_ALEN]; |
|---|
| 155 | | - u8 addr3[ETH_ALEN]; |
|---|
| 156 | | - __le16 seq_ctl; |
|---|
| 157 | | -} __packed __aligned(2); |
|---|
| 158 | | - |
|---|
| 159 | | -struct ieee80211_hdr_qos { |
|---|
| 160 | | - __le16 frame_ctl; |
|---|
| 161 | | - __le16 duration_id; |
|---|
| 162 | | - u8 addr1[ETH_ALEN]; |
|---|
| 163 | | - u8 addr2[ETH_ALEN]; |
|---|
| 164 | | - u8 addr3[ETH_ALEN]; |
|---|
| 165 | | - __le16 seq_ctl; |
|---|
| 166 | | - u8 addr4[ETH_ALEN]; |
|---|
| 167 | | - __le16 qc; |
|---|
| 168 | | -} __packed __aligned(2); |
|---|
| 169 | | - |
|---|
| 170 | | -struct ieee80211_hdr_3addr_qos { |
|---|
| 171 | | - __le16 frame_ctl; |
|---|
| 172 | | - __le16 duration_id; |
|---|
| 173 | | - u8 addr1[ETH_ALEN]; |
|---|
| 174 | | - u8 addr2[ETH_ALEN]; |
|---|
| 175 | | - u8 addr3[ETH_ALEN]; |
|---|
| 176 | | - __le16 seq_ctl; |
|---|
| 177 | | - __le16 qc; |
|---|
| 178 | | -} __packed; |
|---|
| 179 | | - |
|---|
| 180 | | -struct eapol { |
|---|
| 181 | | - u8 snap[6]; |
|---|
| 182 | | - __be16 ethertype; |
|---|
| 183 | | - u8 version; |
|---|
| 184 | | - u8 type; |
|---|
| 185 | | - __le16 length; |
|---|
| 186 | | -} __packed; |
|---|
| 187 | | - |
|---|
| 188 | | -enum eap_type { |
|---|
| 189 | | - EAP_PACKET = 0, |
|---|
| 190 | | - EAPOL_START, |
|---|
| 191 | | - EAPOL_LOGOFF, |
|---|
| 192 | | - EAPOL_KEY, |
|---|
| 193 | | - EAPOL_ENCAP_ASF_ALERT |
|---|
| 194 | | -}; |
|---|
| 195 | | - |
|---|
| 196 | | -#define IEEE80211_3ADDR_LEN 24 |
|---|
| 197 | | -#define IEEE80211_4ADDR_LEN 30 |
|---|
| 198 | | -#define IEEE80211_FCS_LEN 4 |
|---|
| 199 | | - |
|---|
| 200 | 99 | #define MIN_FRAG_THRESHOLD 256U |
|---|
| 201 | 100 | #define MAX_FRAG_THRESHOLD 2346U |
|---|
| 202 | 101 | |
|---|
| 203 | | -/* Frame control field constants */ |
|---|
| 204 | | -#define IEEE80211_FCTL_VERS 0x0002 |
|---|
| 205 | | -#define IEEE80211_FCTL_FTYPE 0x000c |
|---|
| 206 | | -#define IEEE80211_FCTL_STYPE 0x00f0 |
|---|
| 207 | | -#define IEEE80211_FCTL_TODS 0x0100 |
|---|
| 208 | | -#define IEEE80211_FCTL_FROMDS 0x0200 |
|---|
| 209 | | -#define IEEE80211_FCTL_MOREFRAGS 0x0400 |
|---|
| 210 | | -#define IEEE80211_FCTL_RETRY 0x0800 |
|---|
| 211 | | -#define IEEE80211_FCTL_PM 0x1000 |
|---|
| 212 | | -#define IEEE80211_FCTL_MOREDATA 0x2000 |
|---|
| 213 | | -#define IEEE80211_FCTL_WEP 0x4000 |
|---|
| 214 | | -#define IEEE80211_FCTL_ORDER 0x8000 |
|---|
| 215 | | - |
|---|
| 216 | | -#define IEEE80211_FTYPE_MGMT 0x0000 |
|---|
| 217 | | -#define IEEE80211_FTYPE_CTL 0x0004 |
|---|
| 218 | | -#define IEEE80211_FTYPE_DATA 0x0008 |
|---|
| 219 | | - |
|---|
| 220 | | -/* management */ |
|---|
| 221 | | -#define IEEE80211_STYPE_ASSOC_REQ 0x0000 |
|---|
| 222 | | -#define IEEE80211_STYPE_ASSOC_RESP 0x0010 |
|---|
| 223 | | -#define IEEE80211_STYPE_REASSOC_REQ 0x0020 |
|---|
| 224 | | -#define IEEE80211_STYPE_REASSOC_RESP 0x0030 |
|---|
| 225 | | -#define IEEE80211_STYPE_PROBE_REQ 0x0040 |
|---|
| 226 | | -#define IEEE80211_STYPE_PROBE_RESP 0x0050 |
|---|
| 227 | | -#define IEEE80211_STYPE_BEACON 0x0080 |
|---|
| 228 | | -#define IEEE80211_STYPE_ATIM 0x0090 |
|---|
| 229 | | -#define IEEE80211_STYPE_DISASSOC 0x00A0 |
|---|
| 230 | | -#define IEEE80211_STYPE_AUTH 0x00B0 |
|---|
| 231 | | -#define IEEE80211_STYPE_DEAUTH 0x00C0 |
|---|
| 232 | | - |
|---|
| 233 | | -/* control */ |
|---|
| 234 | | -#define IEEE80211_STYPE_PSPOLL 0x00A0 |
|---|
| 235 | | -#define IEEE80211_STYPE_RTS 0x00B0 |
|---|
| 236 | | -#define IEEE80211_STYPE_CTS 0x00C0 |
|---|
| 237 | | -#define IEEE80211_STYPE_ACK 0x00D0 |
|---|
| 238 | | -#define IEEE80211_STYPE_CFEND 0x00E0 |
|---|
| 239 | | -#define IEEE80211_STYPE_CFENDACK 0x00F0 |
|---|
| 240 | | - |
|---|
| 241 | | -/* data */ |
|---|
| 242 | | -#define IEEE80211_STYPE_DATA 0x0000 |
|---|
| 243 | | -#define IEEE80211_STYPE_DATA_CFACK 0x0010 |
|---|
| 244 | | -#define IEEE80211_STYPE_DATA_CFPOLL 0x0020 |
|---|
| 245 | | -#define IEEE80211_STYPE_DATA_CFACKPOLL 0x0030 |
|---|
| 246 | | -#define IEEE80211_STYPE_NULLFUNC 0x0040 |
|---|
| 247 | | -#define IEEE80211_STYPE_CFACK 0x0050 |
|---|
| 248 | | -#define IEEE80211_STYPE_CFPOLL 0x0060 |
|---|
| 249 | | -#define IEEE80211_STYPE_CFACKPOLL 0x0070 |
|---|
| 250 | | -#define IEEE80211_QOS_DATAGRP 0x0080 |
|---|
| 251 | | - |
|---|
| 252 | | -#define IEEE80211_SCTL_FRAG 0x000F |
|---|
| 253 | | -#define IEEE80211_SCTL_SEQ 0xFFF0 |
|---|
| 254 | | - |
|---|
| 255 | 102 | /* QoS,QOS */ |
|---|
| 256 | 103 | #define NORMAL_ACK 0 |
|---|
| 257 | | -#define NO_ACK 1 |
|---|
| 258 | | -#define NON_EXPLICIT_ACK 2 |
|---|
| 259 | | -#define BLOCK_ACK 3 |
|---|
| 260 | | - |
|---|
| 261 | | -#ifndef ETH_P_PAE |
|---|
| 262 | | -#define ETH_P_PAE 0x888E /* Port Access Entity (IEEE 802.1X) */ |
|---|
| 263 | | -#endif /* ETH_P_PAE */ |
|---|
| 264 | | - |
|---|
| 265 | | -#define ETH_P_PREAUTH 0x88C7 /* IEEE 802.11i pre-authentication */ |
|---|
| 266 | | - |
|---|
| 267 | | -#define ETH_P_ECONET 0x0018 |
|---|
| 268 | | - |
|---|
| 269 | | -#ifndef ETH_P_80211_RAW |
|---|
| 270 | | -#define ETH_P_80211_RAW (ETH_P_ECONET + 1) |
|---|
| 271 | | -#endif |
|---|
| 272 | 104 | |
|---|
| 273 | 105 | /* IEEE 802.11 defines */ |
|---|
| 274 | 106 | |
|---|
| .. | .. |
|---|
| 283 | 115 | |
|---|
| 284 | 116 | #define SNAP_SIZE sizeof(struct ieee80211_snap_hdr) |
|---|
| 285 | 117 | |
|---|
| 286 | | -#define WLAN_FC_GET_TYPE(fc) ((fc) & IEEE80211_FCTL_FTYPE) |
|---|
| 287 | | -#define WLAN_FC_GET_STYPE(fc) ((fc) & IEEE80211_FCTL_STYPE) |
|---|
| 288 | | - |
|---|
| 289 | | -#define WLAN_QC_GET_TID(qc) ((qc) & 0x0f) |
|---|
| 290 | | - |
|---|
| 291 | | -#define WLAN_GET_SEQ_FRAG(seq) ((seq) & IEEE80211_SCTL_FRAG) |
|---|
| 292 | | -#define WLAN_GET_SEQ_SEQ(seq) ((seq) & IEEE80211_SCTL_SEQ) |
|---|
| 293 | | - |
|---|
| 294 | | -/* Authentication algorithms */ |
|---|
| 295 | | -#define WLAN_AUTH_OPEN 0 |
|---|
| 296 | | -#define WLAN_AUTH_SHARED_KEY 1 |
|---|
| 297 | | - |
|---|
| 298 | | -#define WLAN_AUTH_CHALLENGE_LEN 128 |
|---|
| 299 | | - |
|---|
| 300 | | -#define WLAN_CAPABILITY_BSS BIT(0) |
|---|
| 301 | | -#define WLAN_CAPABILITY_IBSS BIT(1) |
|---|
| 302 | | -#define WLAN_CAPABILITY_CF_POLLABLE BIT(2) |
|---|
| 303 | | -#define WLAN_CAPABILITY_CF_POLL_REQUEST BIT(3) |
|---|
| 304 | | -#define WLAN_CAPABILITY_PRIVACY BIT(4) |
|---|
| 305 | | -#define WLAN_CAPABILITY_SHORT_PREAMBLE BIT(5) |
|---|
| 306 | | -#define WLAN_CAPABILITY_PBCC BIT(6) |
|---|
| 307 | | -#define WLAN_CAPABILITY_CHANNEL_AGILITY BIT(7) |
|---|
| 308 | | -#define WLAN_CAPABILITY_SHORT_SLOT BIT(10) |
|---|
| 309 | | - |
|---|
| 310 | | -/* Information Element IDs */ |
|---|
| 311 | | -#define WLAN_EID_SSID 0 |
|---|
| 312 | | -#define WLAN_EID_SUPP_RATES 1 |
|---|
| 313 | | -#define WLAN_EID_FH_PARAMS 2 |
|---|
| 314 | | -#define WLAN_EID_DS_PARAMS 3 |
|---|
| 315 | | -#define WLAN_EID_CF_PARAMS 4 |
|---|
| 316 | | -#define WLAN_EID_TIM 5 |
|---|
| 317 | | -#define WLAN_EID_IBSS_PARAMS 6 |
|---|
| 318 | | -#define WLAN_EID_CHALLENGE 16 |
|---|
| 319 | | -#define WLAN_EID_RSN 48 |
|---|
| 320 | | -#define WLAN_EID_GENERIC 221 |
|---|
| 321 | | - |
|---|
| 322 | | -#define IEEE80211_MGMT_HDR_LEN 24 |
|---|
| 323 | | -#define IEEE80211_DATA_HDR3_LEN 24 |
|---|
| 324 | | -#define IEEE80211_DATA_HDR4_LEN 30 |
|---|
| 325 | | - |
|---|
| 326 | | -#define IEEE80211_STATMASK_SIGNAL BIT(0) |
|---|
| 327 | | -#define IEEE80211_STATMASK_RSSI BIT(1) |
|---|
| 328 | | -#define IEEE80211_STATMASK_NOISE BIT(2) |
|---|
| 329 | | -#define IEEE80211_STATMASK_RATE BIT(3) |
|---|
| 330 | | -#define IEEE80211_STATMASK_WEMASK 0x7 |
|---|
| 331 | | - |
|---|
| 332 | | -#define IEEE80211_CCK_MODULATION BIT(0) |
|---|
| 333 | | -#define IEEE80211_OFDM_MODULATION BIT(1) |
|---|
| 334 | | - |
|---|
| 335 | | -#define IEEE80211_24GHZ_BAND BIT(0) |
|---|
| 336 | | -#define IEEE80211_52GHZ_BAND BIT(1) |
|---|
| 337 | | - |
|---|
| 338 | 118 | #define IEEE80211_CCK_RATE_LEN 4 |
|---|
| 339 | 119 | #define IEEE80211_NUM_OFDM_RATESLEN 8 |
|---|
| 340 | 120 | |
|---|
| .. | .. |
|---|
| 342 | 122 | #define IEEE80211_CCK_RATE_2MB 0x04 |
|---|
| 343 | 123 | #define IEEE80211_CCK_RATE_5MB 0x0B |
|---|
| 344 | 124 | #define IEEE80211_CCK_RATE_11MB 0x16 |
|---|
| 345 | | -#define IEEE80211_OFDM_RATE_LEN 8 |
|---|
| 346 | 125 | #define IEEE80211_OFDM_RATE_6MB 0x0C |
|---|
| 347 | 126 | #define IEEE80211_OFDM_RATE_9MB 0x12 |
|---|
| 348 | 127 | #define IEEE80211_OFDM_RATE_12MB 0x18 |
|---|
| .. | .. |
|---|
| 353 | 132 | #define IEEE80211_OFDM_RATE_54MB 0x6C |
|---|
| 354 | 133 | #define IEEE80211_BASIC_RATE_MASK 0x80 |
|---|
| 355 | 134 | |
|---|
| 356 | | -#define IEEE80211_CCK_RATE_1MB_MASK BIT(0) |
|---|
| 357 | | -#define IEEE80211_CCK_RATE_2MB_MASK BIT(1) |
|---|
| 358 | | -#define IEEE80211_CCK_RATE_5MB_MASK BIT(2) |
|---|
| 359 | | -#define IEEE80211_CCK_RATE_11MB_MASK BIT(3) |
|---|
| 360 | | -#define IEEE80211_OFDM_RATE_6MB_MASK BIT(4) |
|---|
| 361 | | -#define IEEE80211_OFDM_RATE_9MB_MASK BIT(5) |
|---|
| 362 | | -#define IEEE80211_OFDM_RATE_12MB_MASK BIT(6) |
|---|
| 363 | | -#define IEEE80211_OFDM_RATE_18MB_MASK BIT(7) |
|---|
| 364 | | -#define IEEE80211_OFDM_RATE_24MB_MASK BIT(8) |
|---|
| 365 | | -#define IEEE80211_OFDM_RATE_36MB_MASK BIT(9) |
|---|
| 366 | | -#define IEEE80211_OFDM_RATE_48MB_MASK BIT(10) |
|---|
| 367 | | -#define IEEE80211_OFDM_RATE_54MB_MASK BIT(11) |
|---|
| 368 | | - |
|---|
| 369 | | -#define IEEE80211_CCK_RATES_MASK 0x0000000F |
|---|
| 370 | | -#define IEEE80211_CCK_BASIC_RATES_MASK (IEEE80211_CCK_RATE_1MB_MASK | \ |
|---|
| 371 | | - IEEE80211_CCK_RATE_2MB_MASK) |
|---|
| 372 | | -#define IEEE80211_CCK_DEFAULT_RATES_MASK (IEEE80211_CCK_BASIC_RATES_MASK | \ |
|---|
| 373 | | - IEEE80211_CCK_RATE_5MB_MASK | \ |
|---|
| 374 | | - IEEE80211_CCK_RATE_11MB_MASK) |
|---|
| 375 | | - |
|---|
| 376 | | -#define IEEE80211_OFDM_RATES_MASK 0x00000FF0 |
|---|
| 377 | | -#define IEEE80211_OFDM_BASIC_RATES_MASK (IEEE80211_OFDM_RATE_6MB_MASK | \ |
|---|
| 378 | | - IEEE80211_OFDM_RATE_12MB_MASK | \ |
|---|
| 379 | | - IEEE80211_OFDM_RATE_24MB_MASK) |
|---|
| 380 | | -#define IEEE80211_OFDM_DEFAULT_RATES_MASK (IEEE80211_OFDM_BASIC_RATES_MASK | \ |
|---|
| 381 | | - IEEE80211_OFDM_RATE_9MB_MASK | \ |
|---|
| 382 | | - IEEE80211_OFDM_RATE_18MB_MASK | \ |
|---|
| 383 | | - IEEE80211_OFDM_RATE_36MB_MASK | \ |
|---|
| 384 | | - IEEE80211_OFDM_RATE_48MB_MASK | \ |
|---|
| 385 | | - IEEE80211_OFDM_RATE_54MB_MASK) |
|---|
| 386 | | -#define IEEE80211_DEFAULT_RATES_MASK (IEEE80211_OFDM_DEFAULT_RATES_MASK | \ |
|---|
| 387 | | - IEEE80211_CCK_DEFAULT_RATES_MASK) |
|---|
| 388 | | - |
|---|
| 389 | | -#define IEEE80211_NUM_OFDM_RATES 8 |
|---|
| 390 | | -#define IEEE80211_NUM_CCK_RATES 4 |
|---|
| 391 | | -#define IEEE80211_OFDM_SHIFT_MASK_A 4 |
|---|
| 392 | | - |
|---|
| 393 | | -/* NOTE: This data is for statistical purposes; not all hardware provides this |
|---|
| 394 | | - * information for frames received. Not setting these will not cause |
|---|
| 395 | | - * any adverse affects. |
|---|
| 396 | | - */ |
|---|
| 397 | | -struct ieee80211_rx_stats { |
|---|
| 398 | | - s8 rssi; |
|---|
| 399 | | - u8 signal; |
|---|
| 400 | | - u8 noise; |
|---|
| 401 | | - u8 received_channel; |
|---|
| 402 | | - u16 rate; /* in 100 kbps */ |
|---|
| 403 | | - u8 mask; |
|---|
| 404 | | - u8 freq; |
|---|
| 405 | | - u16 len; |
|---|
| 406 | | -}; |
|---|
| 407 | | - |
|---|
| 408 | | -/* IEEE 802.11 requires that STA supports concurrent reception of at least |
|---|
| 409 | | - * three fragmented frames. This define can be increased to support more |
|---|
| 410 | | - * concurrent frames, but it should be noted that each entry can consume about |
|---|
| 411 | | - * 2 kB of RAM and increasing cache size will slow down frame reassembly. |
|---|
| 412 | | - */ |
|---|
| 413 | | -#define IEEE80211_FRAG_CACHE_LEN 4 |
|---|
| 414 | | - |
|---|
| 415 | | -struct ieee80211_frag_entry { |
|---|
| 416 | | - u32 first_frag_time; |
|---|
| 417 | | - uint seq; |
|---|
| 418 | | - uint last_frag; |
|---|
| 419 | | - uint qos; /*jackson*/ |
|---|
| 420 | | - uint tid; /*jackson*/ |
|---|
| 421 | | - struct sk_buff *skb; |
|---|
| 422 | | - u8 src_addr[ETH_ALEN]; |
|---|
| 423 | | - u8 dst_addr[ETH_ALEN]; |
|---|
| 424 | | -}; |
|---|
| 425 | | - |
|---|
| 426 | | -struct ieee80211_stats { |
|---|
| 427 | | - uint tx_unicast_frames; |
|---|
| 428 | | - uint tx_multicast_frames; |
|---|
| 429 | | - uint tx_fragments; |
|---|
| 430 | | - uint tx_unicast_octets; |
|---|
| 431 | | - uint tx_multicast_octets; |
|---|
| 432 | | - uint tx_deferred_transmissions; |
|---|
| 433 | | - uint tx_single_retry_frames; |
|---|
| 434 | | - uint tx_multiple_retry_frames; |
|---|
| 435 | | - uint tx_retry_limit_exceeded; |
|---|
| 436 | | - uint tx_discards; |
|---|
| 437 | | - uint rx_unicast_frames; |
|---|
| 438 | | - uint rx_multicast_frames; |
|---|
| 439 | | - uint rx_fragments; |
|---|
| 440 | | - uint rx_unicast_octets; |
|---|
| 441 | | - uint rx_multicast_octets; |
|---|
| 442 | | - uint rx_fcs_errors; |
|---|
| 443 | | - uint rx_discards_no_buffer; |
|---|
| 444 | | - uint tx_discards_wrong_sa; |
|---|
| 445 | | - uint rx_discards_undecryptable; |
|---|
| 446 | | - uint rx_message_in_msg_fragments; |
|---|
| 447 | | - uint rx_message_in_bad_msg_fragments; |
|---|
| 448 | | -}; |
|---|
| 449 | | - |
|---|
| 450 | | -struct ieee80211_softmac_stats { |
|---|
| 451 | | - uint rx_ass_ok; |
|---|
| 452 | | - uint rx_ass_err; |
|---|
| 453 | | - uint rx_probe_rq; |
|---|
| 454 | | - uint tx_probe_rs; |
|---|
| 455 | | - uint tx_beacons; |
|---|
| 456 | | - uint rx_auth_rq; |
|---|
| 457 | | - uint rx_auth_rs_ok; |
|---|
| 458 | | - uint rx_auth_rs_err; |
|---|
| 459 | | - uint tx_auth_rq; |
|---|
| 460 | | - uint no_auth_rs; |
|---|
| 461 | | - uint no_ass_rs; |
|---|
| 462 | | - uint tx_ass_rq; |
|---|
| 463 | | - uint rx_ass_rq; |
|---|
| 464 | | - uint tx_probe_rq; |
|---|
| 465 | | - uint reassoc; |
|---|
| 466 | | - uint swtxstop; |
|---|
| 467 | | - uint swtxawake; |
|---|
| 468 | | -}; |
|---|
| 469 | | - |
|---|
| 470 | | -#define SEC_KEY_1 BIT(0) |
|---|
| 471 | | -#define SEC_KEY_2 BIT(1) |
|---|
| 472 | | -#define SEC_KEY_3 BIT(2) |
|---|
| 473 | | -#define SEC_KEY_4 BIT(3) |
|---|
| 474 | | -#define SEC_ACTIVE_KEY BIT(4) |
|---|
| 475 | | -#define SEC_AUTH_MODE BIT(5) |
|---|
| 476 | | -#define SEC_UNICAST_GROUP BIT(6) |
|---|
| 477 | | -#define SEC_LEVEL BIT(7) |
|---|
| 478 | | -#define SEC_ENABLED BIT(8) |
|---|
| 479 | | - |
|---|
| 480 | | -#define SEC_LEVEL_0 0 /* None */ |
|---|
| 481 | | -#define SEC_LEVEL_1 1 /* WEP 40 and 104 bit */ |
|---|
| 482 | | -#define SEC_LEVEL_2 2 /* Level 1 + TKIP */ |
|---|
| 483 | | -#define SEC_LEVEL_2_CKIP 3 /* Level 1 + CKIP */ |
|---|
| 484 | | -#define SEC_LEVEL_3 4 /* Level 2 + CCMP */ |
|---|
| 485 | | - |
|---|
| 486 | 135 | #define WEP_KEYS 4 |
|---|
| 487 | | -#define WEP_KEY_LEN 13 |
|---|
| 488 | 136 | |
|---|
| 489 | | -struct ieee80211_security { |
|---|
| 490 | | - u16 active_key:2, |
|---|
| 491 | | - enabled:1, |
|---|
| 492 | | - auth_mode:2, |
|---|
| 493 | | - auth_algo:4, |
|---|
| 494 | | - unicast_uses_group:1; |
|---|
| 495 | | - u8 key_sizes[WEP_KEYS]; |
|---|
| 496 | | - u8 keys[WEP_KEYS][WEP_KEY_LEN]; |
|---|
| 497 | | - u8 level; |
|---|
| 498 | | - u16 flags; |
|---|
| 499 | | -} __packed; |
|---|
| 500 | | - |
|---|
| 501 | | -/* |
|---|
| 502 | | - * |
|---|
| 503 | | - * 802.11 data frame from AP |
|---|
| 504 | | - * |
|---|
| 505 | | - * ,-------------------------------------------------------------------. |
|---|
| 506 | | - * Bytes | 2 | 2 | 6 | 6 | 6 | 2 | 0..2312 | 4 | |
|---|
| 507 | | - * |------|------|---------|---------|---------|------|---------|------| |
|---|
| 508 | | - * Desc. | ctrl | dura | DA/RA | TA | SA | Sequ | frame | fcs | |
|---|
| 509 | | - * | | tion | (BSSID) | | | ence | data | | |
|---|
| 510 | | - * `-------------------------------------------------------------------' |
|---|
| 511 | | - * |
|---|
| 512 | | - * Total: 28-2340 bytes |
|---|
| 513 | | - * |
|---|
| 514 | | - */ |
|---|
| 515 | | - |
|---|
| 516 | | -struct ieee80211_header_data { |
|---|
| 517 | | - __le16 frame_ctl; |
|---|
| 518 | | - __le16 duration_id; |
|---|
| 519 | | - u8 addr1[6]; |
|---|
| 520 | | - u8 addr2[6]; |
|---|
| 521 | | - u8 addr3[6]; |
|---|
| 522 | | - __le16 seq_ctrl; |
|---|
| 523 | | -} __packed __aligned(2); |
|---|
| 524 | | - |
|---|
| 525 | | -#define BEACON_PROBE_SSID_ID_POSITION 12 |
|---|
| 526 | | - |
|---|
| 527 | | -/* Management Frame Information Element Types */ |
|---|
| 528 | | -#define MFIE_TYPE_SSID 0 |
|---|
| 529 | | -#define MFIE_TYPE_RATES 1 |
|---|
| 530 | | -#define MFIE_TYPE_FH_SET 2 |
|---|
| 531 | | -#define MFIE_TYPE_DS_SET 3 |
|---|
| 532 | | -#define MFIE_TYPE_CF_SET 4 |
|---|
| 533 | | -#define MFIE_TYPE_TIM 5 |
|---|
| 534 | | -#define MFIE_TYPE_IBSS_SET 6 |
|---|
| 535 | | -#define MFIE_TYPE_CHALLENGE 16 |
|---|
| 536 | | -#define MFIE_TYPE_ERP 42 |
|---|
| 537 | | -#define MFIE_TYPE_RSN 48 |
|---|
| 538 | | -#define MFIE_TYPE_RATES_EX 50 |
|---|
| 539 | | -#define MFIE_TYPE_GENERIC 221 |
|---|
| 540 | | - |
|---|
| 541 | | -struct ieee80211_info_element_hdr { |
|---|
| 542 | | - u8 id; |
|---|
| 543 | | - u8 len; |
|---|
| 544 | | -} __packed; |
|---|
| 545 | | - |
|---|
| 546 | | -struct ieee80211_info_element { |
|---|
| 547 | | - u8 id; |
|---|
| 548 | | - u8 len; |
|---|
| 549 | | - u8 data[0]; |
|---|
| 550 | | -} __packed; |
|---|
| 551 | | - |
|---|
| 552 | | -/* |
|---|
| 553 | | - * These are the data types that can make up management packets |
|---|
| 554 | | - * |
|---|
| 555 | | - __le16 auth_algorithm; |
|---|
| 556 | | - __le16 auth_sequence; |
|---|
| 557 | | - __le16 beacon_interval; |
|---|
| 558 | | - __le16 capability; |
|---|
| 559 | | - u8 current_ap[ETH_ALEN]; |
|---|
| 560 | | - __le16 listen_interval; |
|---|
| 561 | | - struct { |
|---|
| 562 | | - u16 association_id:14, reserved:2; |
|---|
| 563 | | - } __packed; |
|---|
| 564 | | - __le32 time_stamp[2]; |
|---|
| 565 | | - __le16 reason; |
|---|
| 566 | | - __le16 status; |
|---|
| 567 | | -*/ |
|---|
| 568 | | - |
|---|
| 569 | | -#define IEEE80211_DEFAULT_TX_ESSID "Penguin" |
|---|
| 570 | | -#define IEEE80211_DEFAULT_BASIC_RATE 10 |
|---|
| 571 | | - |
|---|
| 572 | | -struct ieee80211_authentication { |
|---|
| 573 | | - struct ieee80211_header_data header; |
|---|
| 574 | | - __le16 algorithm; |
|---|
| 575 | | - __le16 transaction; |
|---|
| 576 | | - __le16 status; |
|---|
| 577 | | -} __packed; |
|---|
| 578 | | - |
|---|
| 579 | | -struct ieee80211_probe_response { |
|---|
| 580 | | - struct ieee80211_header_data header; |
|---|
| 581 | | - __le32 time_stamp[2]; |
|---|
| 582 | | - __le16 beacon_interval; |
|---|
| 583 | | - __le16 capability; |
|---|
| 584 | | - struct ieee80211_info_element info_element; |
|---|
| 585 | | -} __packed; |
|---|
| 586 | | - |
|---|
| 587 | | -struct ieee80211_probe_request { |
|---|
| 588 | | - struct ieee80211_header_data header; |
|---|
| 589 | | -} __packed; |
|---|
| 590 | | - |
|---|
| 591 | | -struct ieee80211_assoc_request_frame { |
|---|
| 592 | | - struct ieee80211_hdr_3addr header; |
|---|
| 593 | | - __le16 capability; |
|---|
| 594 | | - __le16 listen_interval; |
|---|
| 595 | | - struct ieee80211_info_element_hdr info_element; |
|---|
| 596 | | -} __packed; |
|---|
| 597 | | - |
|---|
| 598 | | -struct ieee80211_assoc_response_frame { |
|---|
| 599 | | - struct ieee80211_hdr_3addr header; |
|---|
| 600 | | - __le16 capability; |
|---|
| 601 | | - __le16 status; |
|---|
| 602 | | - __le16 aid; |
|---|
| 603 | | -} __packed; |
|---|
| 604 | | - |
|---|
| 605 | | -struct ieee80211_txb { |
|---|
| 606 | | - u8 nr_frags; |
|---|
| 607 | | - u8 encrypted; |
|---|
| 608 | | - u16 reserved; |
|---|
| 609 | | - u16 frag_size; |
|---|
| 610 | | - u16 payload_size; |
|---|
| 611 | | - struct sk_buff *fragments[0]; |
|---|
| 612 | | -}; |
|---|
| 613 | | - |
|---|
| 614 | | -/* SWEEP TABLE ENTRIES NUMBER*/ |
|---|
| 615 | | -#define MAX_SWEEP_TAB_ENTRIES 42 |
|---|
| 616 | | -#define MAX_SWEEP_TAB_ENTRIES_PER_PACKET 7 |
|---|
| 617 | 137 | /* MAX_RATES_LENGTH needs to be 12. The spec says 8, and many APs |
|---|
| 618 | 138 | * only use 8, and then use extended rates for the remaining supported |
|---|
| 619 | 139 | * rates. Other APs, however, stick all of their supported rates on the |
|---|
| 620 | 140 | * main rates information element... |
|---|
| 621 | 141 | */ |
|---|
| 622 | 142 | #define MAX_RATES_LENGTH ((u8)12) |
|---|
| 623 | | -#define MAX_RATES_EX_LENGTH ((u8)16) |
|---|
| 624 | | -#define MAX_NETWORK_COUNT 128 |
|---|
| 625 | | -#define MAX_CHANNEL_NUMBER 161 |
|---|
| 626 | | -#define IEEE80211_SOFTMAC_SCAN_TIME 400 |
|---|
| 627 | | -/*(HZ / 2)*/ |
|---|
| 628 | | -#define IEEE80211_SOFTMAC_ASSOC_RETRY_TIME (HZ * 2) |
|---|
| 629 | | - |
|---|
| 630 | | -#define CRC_LENGTH 4U |
|---|
| 631 | | - |
|---|
| 632 | 143 | #define MAX_WPA_IE_LEN 128 |
|---|
| 633 | | - |
|---|
| 634 | | -#define NETWORK_EMPTY_ESSID BIT(0) |
|---|
| 635 | | -#define NETWORK_HAS_OFDM BIT(1) |
|---|
| 636 | | -#define NETWORK_HAS_CCK BIT(2) |
|---|
| 637 | | - |
|---|
| 638 | | -#define IEEE80211_DTIM_MBCAST 4 |
|---|
| 639 | | -#define IEEE80211_DTIM_UCAST 2 |
|---|
| 640 | | -#define IEEE80211_DTIM_VALID 1 |
|---|
| 641 | | -#define IEEE80211_DTIM_INVALID 0 |
|---|
| 642 | | - |
|---|
| 643 | | -#define IEEE80211_PS_DISABLED 0 |
|---|
| 644 | | -#define IEEE80211_PS_UNICAST IEEE80211_DTIM_UCAST |
|---|
| 645 | | -#define IEEE80211_PS_MBCAST IEEE80211_DTIM_MBCAST |
|---|
| 646 | | -#define IW_ESSID_MAX_SIZE 32 |
|---|
| 647 | | -/* |
|---|
| 648 | | - * join_res: |
|---|
| 649 | | - * -1: authentication fail |
|---|
| 650 | | - * -2: association fail |
|---|
| 651 | | - * > 0: TID |
|---|
| 652 | | - */ |
|---|
| 653 | | - |
|---|
| 654 | | -enum ieee80211_state { |
|---|
| 655 | | - /* the card is not linked at all */ |
|---|
| 656 | | - IEEE80211_NOLINK = 0, |
|---|
| 657 | | - /* IEEE80211_ASSOCIATING* are for BSS client mode |
|---|
| 658 | | - * the driver shall not perform RX filtering unless |
|---|
| 659 | | - * the state is LINKED. |
|---|
| 660 | | - * The driver shall just check for the state LINKED and |
|---|
| 661 | | - * defaults to NOLINK for ALL the other states (including |
|---|
| 662 | | - * LINKED_SCANNING) |
|---|
| 663 | | - */ |
|---|
| 664 | | - /* the association procedure will start (wq scheduling)*/ |
|---|
| 665 | | - IEEE80211_ASSOCIATING, |
|---|
| 666 | | - IEEE80211_ASSOCIATING_RETRY, |
|---|
| 667 | | - /* the association procedure is sending AUTH request*/ |
|---|
| 668 | | - IEEE80211_ASSOCIATING_AUTHENTICATING, |
|---|
| 669 | | - /* the association procedure has successfully authenticated |
|---|
| 670 | | - * and is sending association request |
|---|
| 671 | | - */ |
|---|
| 672 | | - IEEE80211_ASSOCIATING_AUTHENTICATED, |
|---|
| 673 | | - /* the link is ok. the card associated to a BSS or linked |
|---|
| 674 | | - * to a ibss cell or acting as an AP and creating the bss |
|---|
| 675 | | - */ |
|---|
| 676 | | - IEEE80211_LINKED, |
|---|
| 677 | | - /* same as LINKED, but the driver shall apply RX filter |
|---|
| 678 | | - * rules as we are in NO_LINK mode. As the card is still |
|---|
| 679 | | - * logically linked, but it is doing a syncro site survey |
|---|
| 680 | | - * then it will be back to LINKED state. |
|---|
| 681 | | - */ |
|---|
| 682 | | - IEEE80211_LINKED_SCANNING, |
|---|
| 683 | | -}; |
|---|
| 684 | | - |
|---|
| 685 | | -#define DEFAULT_MAX_SCAN_AGE (15 * HZ) |
|---|
| 686 | | -#define DEFAULT_FTS 2346 |
|---|
| 687 | | - |
|---|
| 688 | | -#define CFG_IEEE80211_RESERVE_FCS BIT(0) |
|---|
| 689 | | -#define CFG_IEEE80211_COMPUTE_FCS BIT(1) |
|---|
| 690 | | - |
|---|
| 691 | | -#define MAXTID 16 |
|---|
| 692 | | - |
|---|
| 693 | | -#define IEEE_A BIT(0) |
|---|
| 694 | | -#define IEEE_B BIT(1) |
|---|
| 695 | | -#define IEEE_G BIT(2) |
|---|
| 696 | | -#define IEEE_MODE_MASK (IEEE_A | IEEE_B | IEEE_G) |
|---|
| 697 | | - |
|---|
| 698 | | -static inline int ieee80211_is_empty_essid(const char *essid, int essid_len) |
|---|
| 699 | | -{ |
|---|
| 700 | | - /* Single white space is for Linksys APs */ |
|---|
| 701 | | - if (essid_len == 1 && essid[0] == ' ') |
|---|
| 702 | | - return 1; |
|---|
| 703 | | - /* Otherwise, if the entire essid is 0, we assume it is hidden */ |
|---|
| 704 | | - while (essid_len) { |
|---|
| 705 | | - essid_len--; |
|---|
| 706 | | - if (essid[essid_len] != '\0') |
|---|
| 707 | | - return 0; |
|---|
| 708 | | - } |
|---|
| 709 | | - return 1; |
|---|
| 710 | | -} |
|---|
| 711 | | - |
|---|
| 712 | | -static inline int ieee80211_get_hdrlen(u16 fc) |
|---|
| 713 | | -{ |
|---|
| 714 | | - int hdrlen = 24; |
|---|
| 715 | | - |
|---|
| 716 | | - switch (WLAN_FC_GET_TYPE(fc)) { |
|---|
| 717 | | - case IEEE80211_FTYPE_DATA: |
|---|
| 718 | | - if (fc & IEEE80211_QOS_DATAGRP) |
|---|
| 719 | | - hdrlen += 2; |
|---|
| 720 | | - if ((fc & IEEE80211_FCTL_FROMDS) && (fc & IEEE80211_FCTL_TODS)) |
|---|
| 721 | | - hdrlen += 6; /* Addr4 */ |
|---|
| 722 | | - break; |
|---|
| 723 | | - case IEEE80211_FTYPE_CTL: |
|---|
| 724 | | - switch (WLAN_FC_GET_STYPE(fc)) { |
|---|
| 725 | | - case IEEE80211_STYPE_CTS: |
|---|
| 726 | | - case IEEE80211_STYPE_ACK: |
|---|
| 727 | | - hdrlen = 10; |
|---|
| 728 | | - break; |
|---|
| 729 | | - default: |
|---|
| 730 | | - hdrlen = 16; |
|---|
| 731 | | - break; |
|---|
| 732 | | - } |
|---|
| 733 | | - break; |
|---|
| 734 | | - } |
|---|
| 735 | | - return hdrlen; |
|---|
| 736 | | -} |
|---|
| 737 | 144 | |
|---|
| 738 | 145 | struct registry_priv; |
|---|
| 739 | 146 | |
|---|
| 740 | 147 | u8 *r8712_set_ie(u8 *pbuf, sint index, uint len, u8 *source, uint *frlen); |
|---|
| 741 | 148 | u8 *r8712_get_ie(u8 *pbuf, sint index, uint *len, sint limit); |
|---|
| 742 | | -unsigned char *r8712_get_wpa_ie(unsigned char *pie, uint *rsn_ie_len, int limit); |
|---|
| 149 | +unsigned char *r8712_get_wpa_ie(unsigned char *pie, uint *rsn_ie_len, |
|---|
| 150 | + int limit); |
|---|
| 743 | 151 | unsigned char *r8712_get_wpa2_ie(unsigned char *pie, uint *rsn_ie_len, |
|---|
| 744 | 152 | int limit); |
|---|
| 745 | 153 | int r8712_parse_wpa_ie(u8 *wpa_ie, int wpa_ie_len, int *group_cipher, |
|---|