1 /* 2 * Copyright (c) 2010 Broadcom Corporation 3 * 4 * Permission to use, copy, modify, and/or distribute this software for any 5 * purpose with or without fee is hereby granted, provided that the above 6 * copyright notice and this permission notice appear in all copies. 7 * 8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY 11 * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION 13 * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN 14 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 15 */ 16 17 #ifndef _wlioctl_h_ 18 #define _wlioctl_h_ 19 20 #include <linux/ieee80211.h> 21 #ifdef BRCM_FULLMAC 22 #include <proto/bcmeth.h> 23 #endif 24 #include <proto/bcmevent.h> 25 #include <proto/802.11.h> 26 #include <bcmwifi.h> 27 28 #ifndef INTF_NAME_SIZ 29 #define INTF_NAME_SIZ 16 30 #endif 31 32 #ifdef BRCM_FULLMAC 33 34 #define WL_BSS_INFO_VERSION 108 /* current ver of wl_bss_info struct */ 35 36 /* BSS info structure 37 * Applications MUST CHECK ie_offset field and length field to access IEs and 38 * next bss_info structure in a vector (in wl_scan_results_t) 39 */ 40 typedef struct wl_bss_info { 41 u32 version; /* version field */ 42 u32 length; /* byte length of data in this record, 43 * starting at version and including IEs 44 */ 45 u8 BSSID[ETH_ALEN]; 46 u16 beacon_period; /* units are Kusec */ 47 u16 capability; /* Capability information */ 48 u8 SSID_len; 49 u8 SSID[32]; 50 struct { 51 uint count; /* # rates in this set */ 52 u8 rates[16]; /* rates in 500kbps units w/hi bit set if basic */ 53 } rateset; /* supported rates */ 54 chanspec_t chanspec; /* chanspec for bss */ 55 u16 atim_window; /* units are Kusec */ 56 u8 dtim_period; /* DTIM period */ 57 s16 RSSI; /* receive signal strength (in dBm) */ 58 s8 phy_noise; /* noise (in dBm) */ 59 60 u8 n_cap; /* BSS is 802.11N Capable */ 61 u32 nbss_cap; /* 802.11N BSS Capabilities (based on HT_CAP_*) */ 62 u8 ctl_ch; /* 802.11N BSS control channel number */ 63 u32 reserved32[1]; /* Reserved for expansion of BSS properties */ 64 u8 flags; /* flags */ 65 u8 reserved[3]; /* Reserved for expansion of BSS properties */ 66 u8 basic_mcs[MCSSET_LEN]; /* 802.11N BSS required MCS set */ 67 68 u16 ie_offset; /* offset at which IEs start, from beginning */ 69 u32 ie_length; /* byte length of Information Elements */ 70 s16 SNR; /* average SNR of during frame reception */ 71 /* Add new fields here */ 72 /* variable length Information Elements */ 73 } wl_bss_info_t; 74 #endif /* BRCM_FULLMAC */ 75 76 typedef struct wlc_ssid { 77 u32 SSID_len; 78 unsigned char SSID[32]; 79 } wlc_ssid_t; 80 81 #ifdef BRCM_FULLMAC 82 typedef struct chan_scandata { 83 u8 txpower; 84 u8 pad; 85 chanspec_t channel; /* Channel num, bw, ctrl_sb and band */ 86 u32 channel_mintime; 87 u32 channel_maxtime; 88 } chan_scandata_t; 89 90 typedef enum wl_scan_type { 91 EXTDSCAN_FOREGROUND_SCAN, 92 EXTDSCAN_BACKGROUND_SCAN, 93 EXTDSCAN_FORCEDBACKGROUND_SCAN 94 } wl_scan_type_t; 95 96 #define WLC_EXTDSCAN_MAX_SSID 5 97 98 #define WL_BSS_FLAGS_FROM_BEACON 0x01 /* bss_info derived from beacon */ 99 #define WL_BSS_FLAGS_FROM_CACHE 0x02 /* bss_info collected from cache */ 100 #define WL_BSS_FLAGS_RSSI_ONCHANNEL 0x04 /* rssi info was received on channel (vs offchannel) */ 101 102 typedef struct wl_extdscan_params { 103 s8 nprobes; /* 0, passive, otherwise active */ 104 s8 split_scan; /* split scan */ 105 s8 band; /* band */ 106 s8 pad; 107 wlc_ssid_t ssid[WLC_EXTDSCAN_MAX_SSID]; /* ssid list */ 108 u32 tx_rate; /* in 500ksec units */ 109 wl_scan_type_t scan_type; /* enum */ 110 s32 channel_num; 111 chan_scandata_t channel_list[1]; /* list of chandata structs */ 112 } wl_extdscan_params_t; 113 114 #define WL_EXTDSCAN_PARAMS_FIXED_SIZE (sizeof(wl_extdscan_params_t) - sizeof(chan_scandata_t)) 115 116 #define WL_BSSTYPE_INFRA 1 117 #define WL_BSSTYPE_INDEP 0 118 #define WL_BSSTYPE_ANY 2 119 120 /* Bitmask for scan_type */ 121 #define WL_SCANFLAGS_PASSIVE 0x01 /* force passive scan */ 122 #define WL_SCANFLAGS_RESERVED 0x02 /* Reserved */ 123 #define WL_SCANFLAGS_PROHIBITED 0x04 /* allow scanning prohibited channels */ 124 125 typedef struct wl_scan_params { 126 wlc_ssid_t ssid; /* default: {0, ""} */ 127 u8 bssid[ETH_ALEN]; /* default: bcast */ 128 s8 bss_type; /* default: any, 129 * DOT11_BSSTYPE_ANY/INFRASTRUCTURE/INDEPENDENT 130 */ 131 u8 scan_type; /* flags, 0 use default */ 132 s32 nprobes; /* -1 use default, number of probes per channel */ 133 s32 active_time; /* -1 use default, dwell time per channel for 134 * active scanning 135 */ 136 s32 passive_time; /* -1 use default, dwell time per channel 137 * for passive scanning 138 */ 139 s32 home_time; /* -1 use default, dwell time for the home channel 140 * between channel scans 141 */ 142 s32 channel_num; /* count of channels and ssids that follow 143 * 144 * low half is count of channels in channel_list, 0 145 * means default (use all available channels) 146 * 147 * high half is entries in wlc_ssid_t array that 148 * follows channel_list, aligned for s32 (4 bytes) 149 * meaning an odd channel count implies a 2-byte pad 150 * between end of channel_list and first ssid 151 * 152 * if ssid count is zero, single ssid in the fixed 153 * parameter portion is assumed, otherwise ssid in 154 * the fixed portion is ignored 155 */ 156 u16 channel_list[1]; /* list of chanspecs */ 157 } wl_scan_params_t; 158 159 /* size of wl_scan_params not including variable length array */ 160 #define WL_SCAN_PARAMS_FIXED_SIZE 64 161 162 /* masks for channel and ssid count */ 163 #define WL_SCAN_PARAMS_COUNT_MASK 0x0000ffff 164 #define WL_SCAN_PARAMS_NSSID_SHIFT 16 165 166 #define WL_SCAN_ACTION_START 1 167 #define WL_SCAN_ACTION_CONTINUE 2 168 #define WL_SCAN_ACTION_ABORT 3 169 170 #define ISCAN_REQ_VERSION 1 171 172 /* incremental scan struct */ 173 typedef struct wl_iscan_params { 174 u32 version; 175 u16 action; 176 u16 scan_duration; 177 wl_scan_params_t params; 178 } wl_iscan_params_t; 179 180 /* 3 fields + size of wl_scan_params, not including variable length array */ 181 #define WL_ISCAN_PARAMS_FIXED_SIZE (offsetof(wl_iscan_params_t, params) + sizeof(wlc_ssid_t)) 182 183 typedef struct wl_scan_results { 184 u32 buflen; 185 u32 version; 186 u32 count; 187 wl_bss_info_t bss_info[1]; 188 } wl_scan_results_t; 189 190 /* size of wl_scan_results not including variable length array */ 191 #define WL_SCAN_RESULTS_FIXED_SIZE (sizeof(wl_scan_results_t) - sizeof(wl_bss_info_t)) 192 193 /* wl_iscan_results status values */ 194 #define WL_SCAN_RESULTS_SUCCESS 0 195 #define WL_SCAN_RESULTS_PARTIAL 1 196 #define WL_SCAN_RESULTS_PENDING 2 197 #define WL_SCAN_RESULTS_ABORTED 3 198 #define WL_SCAN_RESULTS_NO_MEM 4 199 200 #define ESCAN_REQ_VERSION 1 201 202 typedef struct wl_escan_params { 203 u32 version; 204 u16 action; 205 u16 sync_id; 206 wl_scan_params_t params; 207 } wl_escan_params_t; 208 209 #define WL_ESCAN_PARAMS_FIXED_SIZE (offsetof(wl_escan_params_t, params) + sizeof(wlc_ssid_t)) 210 211 typedef struct wl_escan_result { 212 u32 buflen; 213 u32 version; 214 u16 sync_id; 215 u16 bss_count; 216 wl_bss_info_t bss_info[1]; 217 } wl_escan_result_t; 218 219 #define WL_ESCAN_RESULTS_FIXED_SIZE (sizeof(wl_escan_result_t) - sizeof(wl_bss_info_t)) 220 221 /* incremental scan results struct */ 222 typedef struct wl_iscan_results { 223 u32 status; 224 wl_scan_results_t results; 225 } wl_iscan_results_t; 226 227 /* size of wl_iscan_results not including variable length array */ 228 #define WL_ISCAN_RESULTS_FIXED_SIZE \ 229 (WL_SCAN_RESULTS_FIXED_SIZE + offsetof(wl_iscan_results_t, results)) 230 231 typedef struct wl_probe_params { 232 wlc_ssid_t ssid; 233 u8 bssid[ETH_ALEN]; 234 u8 mac[ETH_ALEN]; 235 } wl_probe_params_t; 236 #endif /* BRCM_FULLMAC */ 237 238 #define WL_NUMRATES 16 /* max # of rates in a rateset */ 239 typedef struct wl_rateset { 240 u32 count; /* # rates in this set */ 241 u8 rates[WL_NUMRATES]; /* rates in 500kbps units w/hi bit set if basic */ 242 } wl_rateset_t; 243 244 #ifdef BRCM_FULLMAC 245 typedef struct wl_rateset_args { 246 u32 count; /* # rates in this set */ 247 u8 rates[WL_NUMRATES]; /* rates in 500kbps units w/hi bit set if basic */ 248 u8 mcs[MCSSET_LEN]; /* supported mcs index bit map */ 249 } wl_rateset_args_t; 250 251 /* u32 list */ 252 typedef struct wl_u32_list { 253 /* in - # of elements, out - # of entries */ 254 u32 count; 255 /* variable length u32 list */ 256 u32 element[1]; 257 } wl_u32_list_t; 258 259 /* used for association with a specific BSSID and chanspec list */ 260 typedef struct wl_assoc_params { 261 u8 bssid[ETH_ALEN]; /* 00:00:00:00:00:00: broadcast scan */ 262 s32 chanspec_num; /* 0: all available channels, 263 * otherwise count of chanspecs in chanspec_list 264 */ 265 chanspec_t chanspec_list[1]; /* list of chanspecs */ 266 } wl_assoc_params_t; 267 #define WL_ASSOC_PARAMS_FIXED_SIZE (sizeof(wl_assoc_params_t) - sizeof(chanspec_t)) 268 269 /* used for reassociation/roam to a specific BSSID and channel */ 270 typedef wl_assoc_params_t wl_reassoc_params_t; 271 #define WL_REASSOC_PARAMS_FIXED_SIZE WL_ASSOC_PARAMS_FIXED_SIZE 272 273 /* used for join with or without a specific bssid and channel list */ 274 typedef struct wl_join_params { 275 wlc_ssid_t ssid; 276 wl_assoc_params_t params; /* optional field, but it must include the fixed portion 277 * of the wl_assoc_params_t struct when it does present. 278 */ 279 } wl_join_params_t; 280 #define WL_JOIN_PARAMS_FIXED_SIZE (sizeof(wl_join_params_t) - sizeof(chanspec_t)) 281 282 #endif /* BRCM_FULLMAC */ 283 284 /* defines used by the nrate iovar */ 285 #define NRATE_MCS_INUSE 0x00000080 /* MSC in use,indicates b0-6 holds an mcs */ 286 #define NRATE_RATE_MASK 0x0000007f /* rate/mcs value */ 287 #define NRATE_STF_MASK 0x0000ff00 /* stf mode mask: siso, cdd, stbc, sdm */ 288 #define NRATE_STF_SHIFT 8 /* stf mode shift */ 289 #define NRATE_OVERRIDE 0x80000000 /* bit indicates override both rate & mode */ 290 #define NRATE_OVERRIDE_MCS_ONLY 0x40000000 /* bit indicate to override mcs only */ 291 #define NRATE_SGI_MASK 0x00800000 /* sgi mode */ 292 #define NRATE_SGI_SHIFT 23 /* sgi mode */ 293 #define NRATE_LDPC_CODING 0x00400000 /* bit indicates adv coding in use */ 294 #define NRATE_LDPC_SHIFT 22 /* ldpc shift */ 295 296 #define NRATE_STF_SISO 0 /* stf mode SISO */ 297 #define NRATE_STF_CDD 1 /* stf mode CDD */ 298 #define NRATE_STF_STBC 2 /* stf mode STBC */ 299 #define NRATE_STF_SDM 3 /* stf mode SDM */ 300 301 #define ANTENNA_NUM_1 1 /* total number of antennas to be used */ 302 #define ANTENNA_NUM_2 2 303 #define ANTENNA_NUM_3 3 304 #define ANTENNA_NUM_4 4 305 306 #define ANT_SELCFG_AUTO 0x80 /* bit indicates antenna sel AUTO */ 307 #define ANT_SELCFG_MASK 0x33 /* antenna configuration mask */ 308 #define ANT_SELCFG_MAX 4 /* max number of antenna configurations */ 309 #define ANT_SELCFG_TX_UNICAST 0 /* unicast tx antenna configuration */ 310 #define ANT_SELCFG_RX_UNICAST 1 /* unicast rx antenna configuration */ 311 #define ANT_SELCFG_TX_DEF 2 /* default tx antenna configuration */ 312 #define ANT_SELCFG_RX_DEF 3 /* default rx antenna configuration */ 313 314 #define MAX_STREAMS_SUPPORTED 4 /* max number of streams supported */ 315 316 typedef struct { 317 u8 ant_config[ANT_SELCFG_MAX]; /* antenna configuration */ 318 u8 num_antcfg; /* number of available antenna configurations */ 319 } wlc_antselcfg_t; 320 321 #define HIGHEST_SINGLE_STREAM_MCS 7 /* MCS values greater than this enable multiple streams */ 322 323 #ifdef BRCM_FULLMAC 324 #define MAX_CCA_CHANNELS 38 /* Max number of 20 Mhz wide channels */ 325 #define MAX_CCA_SECS 60 /* CCA keeps this many seconds history */ 326 327 #define IBSS_MED 15 /* Mediom in-bss congestion percentage */ 328 #define IBSS_HI 25 /* Hi in-bss congestion percentage */ 329 #define OBSS_MED 12 330 #define OBSS_HI 25 331 #define INTERFER_MED 5 332 #define INTERFER_HI 10 333 334 #define CCA_FLAG_2G_ONLY 0x01 /* Return a channel from 2.4 Ghz band */ 335 #define CCA_FLAG_5G_ONLY 0x02 /* Return a channel from 2.4 Ghz band */ 336 #define CCA_FLAG_IGNORE_DURATION 0x04 /* Ignore dwell time for each channel */ 337 #define CCA_FLAGS_PREFER_1_6_11 0x10 338 #define CCA_FLAG_IGNORE_INTERFER 0x20 /* do not exlude channel based on interfer level */ 339 340 #define CCA_ERRNO_BAND 1 /* After filtering for band pref, no choices left */ 341 #define CCA_ERRNO_DURATION 2 /* After filtering for duration, no choices left */ 342 #define CCA_ERRNO_PREF_CHAN 3 /* After filtering for chan pref, no choices left */ 343 #define CCA_ERRNO_INTERFER 4 /* After filtering for interference, no choices left */ 344 #define CCA_ERRNO_TOO_FEW 5 /* Only 1 channel was input */ 345 346 typedef struct { 347 u32 duration; /* millisecs spent sampling this channel */ 348 u32 congest_ibss; /* millisecs in our bss (presumably this traffic will */ 349 /* move if cur bss moves channels) */ 350 u32 congest_obss; /* traffic not in our bss */ 351 u32 interference; /* millisecs detecting a non 802.11 interferer. */ 352 u32 timestamp; /* second timestamp */ 353 } cca_congest_t; 354 355 typedef struct { 356 chanspec_t chanspec; /* Which channel? */ 357 u8 num_secs; /* How many secs worth of data */ 358 cca_congest_t secs[1]; /* Data */ 359 } cca_congest_channel_req_t; 360 361 #endif /* BRCM_FULLMAC */ 362 363 #define WLC_CNTRY_BUF_SZ 4 /* Country string is 3 bytes + NUL */ 364 365 #ifdef BRCM_FULLMAC 366 typedef struct wl_country { 367 char country_abbrev[WLC_CNTRY_BUF_SZ]; /* nul-terminated country code used in 368 * the Country IE 369 */ 370 s32 rev; /* revision specifier for ccode 371 * on set, -1 indicates unspecified. 372 * on get, rev >= 0 373 */ 374 char ccode[WLC_CNTRY_BUF_SZ]; /* nul-terminated built-in country code. 375 * variable length, but fixed size in 376 * struct allows simple allocation for 377 * expected country strings <= 3 chars. 378 */ 379 } wl_country_t; 380 381 typedef struct wl_channels_in_country { 382 u32 buflen; 383 u32 band; 384 char country_abbrev[WLC_CNTRY_BUF_SZ]; 385 u32 count; 386 u32 channel[1]; 387 } wl_channels_in_country_t; 388 389 typedef struct wl_country_list { 390 u32 buflen; 391 u32 band_set; 392 u32 band; 393 u32 count; 394 char country_abbrev[1]; 395 } wl_country_list_t; 396 397 #define WL_NUM_RPI_BINS 8 398 #define WL_RM_TYPE_BASIC 1 399 #define WL_RM_TYPE_CCA 2 400 #define WL_RM_TYPE_RPI 3 401 402 #define WL_RM_FLAG_PARALLEL (1<<0) 403 404 #define WL_RM_FLAG_LATE (1<<1) 405 #define WL_RM_FLAG_INCAPABLE (1<<2) 406 #define WL_RM_FLAG_REFUSED (1<<3) 407 408 typedef struct wl_rm_req_elt { 409 s8 type; 410 s8 flags; 411 chanspec_t chanspec; 412 u32 token; /* token for this measurement */ 413 u32 tsf_h; /* TSF high 32-bits of Measurement start time */ 414 u32 tsf_l; /* TSF low 32-bits */ 415 u32 dur; /* TUs */ 416 } wl_rm_req_elt_t; 417 418 typedef struct wl_rm_req { 419 u32 token; /* overall measurement set token */ 420 u32 count; /* number of measurement requests */ 421 void *cb; /* completion callback function: may be NULL */ 422 void *cb_arg; /* arg to completion callback function */ 423 wl_rm_req_elt_t req[1]; /* variable length block of requests */ 424 } wl_rm_req_t; 425 #define WL_RM_REQ_FIXED_LEN offsetof(wl_rm_req_t, req) 426 427 typedef struct wl_rm_rep_elt { 428 s8 type; 429 s8 flags; 430 chanspec_t chanspec; 431 u32 token; /* token for this measurement */ 432 u32 tsf_h; /* TSF high 32-bits of Measurement start time */ 433 u32 tsf_l; /* TSF low 32-bits */ 434 u32 dur; /* TUs */ 435 u32 len; /* byte length of data block */ 436 u8 data[1]; /* variable length data block */ 437 } wl_rm_rep_elt_t; 438 #define WL_RM_REP_ELT_FIXED_LEN 24 /* length excluding data block */ 439 440 #define WL_RPI_REP_BIN_NUM 8 441 typedef struct wl_rm_rpi_rep { 442 u8 rpi[WL_RPI_REP_BIN_NUM]; 443 s8 rpi_max[WL_RPI_REP_BIN_NUM]; 444 } wl_rm_rpi_rep_t; 445 446 typedef struct wl_rm_rep { 447 u32 token; /* overall measurement set token */ 448 u32 len; /* length of measurement report block */ 449 wl_rm_rep_elt_t rep[1]; /* variable length block of reports */ 450 } wl_rm_rep_t; 451 #define WL_RM_REP_FIXED_LEN 8 452 #endif /* BRCM_FULLMAC */ 453 454 /* Enumerate crypto algorithms */ 455 #define CRYPTO_ALGO_OFF 0 456 #define CRYPTO_ALGO_WEP1 1 457 #define CRYPTO_ALGO_TKIP 2 458 #define CRYPTO_ALGO_WEP128 3 459 #define CRYPTO_ALGO_AES_CCM 4 460 #define CRYPTO_ALGO_AES_RESERVED1 5 461 #define CRYPTO_ALGO_AES_RESERVED2 6 462 #define CRYPTO_ALGO_NALG 7 463 464 #define WSEC_GEN_MIC_ERROR 0x0001 465 #define WSEC_GEN_REPLAY 0x0002 466 #define WSEC_GEN_ICV_ERROR 0x0004 467 468 #define WL_SOFT_KEY (1 << 0) /* Indicates this key is using soft encrypt */ 469 #define WL_PRIMARY_KEY (1 << 1) /* Indicates this key is the primary (ie tx) key */ 470 #define WL_KF_RES_4 (1 << 4) /* Reserved for backward compat */ 471 #define WL_KF_RES_5 (1 << 5) /* Reserved for backward compat */ 472 #define WL_IBSS_PEER_GROUP_KEY (1 << 6) /* Indicates a group key for a IBSS PEER */ 473 474 typedef struct wl_wsec_key { 475 u32 index; /* key index */ 476 u32 len; /* key length */ 477 u8 data[WLAN_MAX_KEY_LEN]; /* key data */ 478 u32 pad_1[18]; 479 u32 algo; /* CRYPTO_ALGO_AES_CCM, CRYPTO_ALGO_WEP128, etc */ 480 u32 flags; /* misc flags */ 481 u32 pad_2[2]; 482 int pad_3; 483 int iv_initialized; /* has IV been initialized already? */ 484 int pad_4; 485 /* Rx IV */ 486 struct { 487 u32 hi; /* upper 32 bits of IV */ 488 u16 lo; /* lower 16 bits of IV */ 489 } rxiv; 490 u32 pad_5[2]; 491 u8 ea[ETH_ALEN]; /* per station */ 492 } wl_wsec_key_t; 493 494 #define WSEC_MIN_PSK_LEN 8 495 #define WSEC_MAX_PSK_LEN 64 496 497 /* Flag for key material needing passhash'ing */ 498 #define WSEC_PASSPHRASE (1<<0) 499 500 /* receptacle for WLC_SET_WSEC_PMK parameter */ 501 typedef struct { 502 unsigned short key_len; /* octets in key material */ 503 unsigned short flags; /* key handling qualification */ 504 u8 key[WSEC_MAX_PSK_LEN]; /* PMK material */ 505 } wsec_pmk_t; 506 507 /* wireless security bitvec */ 508 #define WEP_ENABLED 0x0001 509 #define TKIP_ENABLED 0x0002 510 #define AES_ENABLED 0x0004 511 #define WSEC_SWFLAG 0x0008 512 #define SES_OW_ENABLED 0x0040 /* to go into transition mode without setting wep */ 513 514 /* WPA authentication mode bitvec */ 515 #define WPA_AUTH_DISABLED 0x0000 /* Legacy (i.e., non-WPA) */ 516 #define WPA_AUTH_NONE 0x0001 /* none (IBSS) */ 517 #define WPA_AUTH_UNSPECIFIED 0x0002 /* over 802.1x */ 518 #define WPA_AUTH_PSK 0x0004 /* Pre-shared key */ 519 #define WPA_AUTH_RESERVED1 0x0008 520 #define WPA_AUTH_RESERVED2 0x0010 521 /* #define WPA_AUTH_8021X 0x0020 *//* 802.1x, reserved */ 522 #define WPA2_AUTH_RESERVED1 0x0020 523 #define WPA2_AUTH_UNSPECIFIED 0x0040 /* over 802.1x */ 524 #define WPA2_AUTH_PSK 0x0080 /* Pre-shared key */ 525 #define WPA2_AUTH_RESERVED3 0x0200 526 #define WPA2_AUTH_RESERVED4 0x0400 527 #define WPA2_AUTH_RESERVED5 0x0800 528 529 /* pmkid */ 530 #define MAXPMKID 16 531 532 typedef struct _pmkid { 533 u8 BSSID[ETH_ALEN]; 534 u8 PMKID[WLAN_PMKID_LEN]; 535 } pmkid_t; 536 537 typedef struct _pmkid_list { 538 u32 npmkid; 539 pmkid_t pmkid[1]; 540 } pmkid_list_t; 541 542 typedef struct _pmkid_cand { 543 u8 BSSID[ETH_ALEN]; 544 u8 preauth; 545 } pmkid_cand_t; 546 547 typedef struct _pmkid_cand_list { 548 u32 npmkid_cand; 549 pmkid_cand_t pmkid_cand[1]; 550 } pmkid_cand_list_t; 551 552 typedef struct wl_led_info { 553 u32 index; /* led index */ 554 u32 behavior; 555 u8 activehi; 556 } wl_led_info_t; 557 558 /* R_REG and W_REG struct passed through ioctl */ 559 typedef struct { 560 u32 byteoff; /* byte offset of the field in d11regs_t */ 561 u32 val; /* read/write value of the field */ 562 u32 size; /* sizeof the field */ 563 uint band; /* band (optional) */ 564 } rw_reg_t; 565 566 567 #ifdef BRCM_FULLMAC 568 /* Used to get specific STA parameters */ 569 typedef struct { 570 u32 val; 571 u8 ea[ETH_ALEN]; 572 } scb_val_t; 573 #endif /* BRCM_FULLMAC */ 574 575 /* channel encoding */ 576 typedef struct channel_info { 577 int hw_channel; 578 int target_channel; 579 int scan_channel; 580 } channel_info_t; 581 582 /* For ioctls that take a list of MAC addresses */ 583 struct maclist { 584 uint count; /* number of MAC addresses */ 585 u8 ea[1][ETH_ALEN]; /* variable length array of MAC addresses */ 586 }; 587 588 /* get pkt count struct passed through ioctl */ 589 typedef struct get_pktcnt { 590 uint rx_good_pkt; 591 uint rx_bad_pkt; 592 uint tx_good_pkt; 593 uint tx_bad_pkt; 594 uint rx_ocast_good_pkt; /* unicast packets destined for others */ 595 } get_pktcnt_t; 596 597 #ifdef BRCM_FULLMAC 598 /* Linux network driver ioctl encoding */ 599 typedef struct wl_ioctl { 600 uint cmd; /* common ioctl definition */ 601 void *buf; /* pointer to user buffer */ 602 uint len; /* length of user buffer */ 603 u8 set; /* get or set request (optional) */ 604 uint used; /* bytes read or written (optional) */ 605 uint needed; /* bytes needed (optional) */ 606 } wl_ioctl_t; 607 #endif /* BRCM_FULLMAC */ 608 609 610 /* 611 * Structure for passing hardware and software 612 * revision info up from the driver. 613 */ 614 typedef struct wlc_rev_info { 615 uint vendorid; /* PCI vendor id */ 616 uint deviceid; /* device id of chip */ 617 uint radiorev; /* radio revision */ 618 uint chiprev; /* chip revision */ 619 uint corerev; /* core revision */ 620 uint boardid; /* board identifier (usu. PCI sub-device id) */ 621 uint boardvendor; /* board vendor (usu. PCI sub-vendor id) */ 622 uint boardrev; /* board revision */ 623 uint driverrev; /* driver version */ 624 uint ucoderev; /* microcode version */ 625 uint bus; /* bus type */ 626 uint chipnum; /* chip number */ 627 uint phytype; /* phy type */ 628 uint phyrev; /* phy revision */ 629 uint anarev; /* anacore rev */ 630 uint chippkg; /* chip package info */ 631 } wlc_rev_info_t; 632 633 #define WL_REV_INFO_LEGACY_LENGTH 48 634 635 #ifdef BRCM_FULLMAC 636 #define WLC_IOCTL_SMLEN 256 /* "small" length ioctl buffer required */ 637 #define WLC_IOCTL_MEDLEN 1536 /* "med" length ioctl buffer required */ 638 #define WLC_IOCTL_MAXLEN 8192 639 #endif 640 641 /* common ioctl definitions */ 642 #define WLC_GET_MAGIC 0 643 #define WLC_GET_VERSION 1 644 #define WLC_UP 2 645 #define WLC_DOWN 3 646 #define WLC_GET_LOOP 4 647 #define WLC_SET_LOOP 5 648 #define WLC_DUMP 6 649 #define WLC_GET_MSGLEVEL 7 650 #define WLC_SET_MSGLEVEL 8 651 #define WLC_GET_PROMISC 9 652 #define WLC_SET_PROMISC 10 653 #define WLC_OVERLAY_IOCTL 11 654 #define WLC_GET_RATE 12 655 /* #define WLC_SET_RATE 13 *//* no longer supported */ 656 #define WLC_GET_INSTANCE 14 657 /* #define WLC_GET_FRAG 15 *//* no longer supported */ 658 /* #define WLC_SET_FRAG 16 *//* no longer supported */ 659 /* #define WLC_GET_RTS 17 *//* no longer supported */ 660 /* #define WLC_SET_RTS 18 *//* no longer supported */ 661 #define WLC_GET_INFRA 19 662 #define WLC_SET_INFRA 20 663 #define WLC_GET_AUTH 21 664 #define WLC_SET_AUTH 22 665 #define WLC_GET_BSSID 23 666 #define WLC_SET_BSSID 24 667 #define WLC_GET_SSID 25 668 #define WLC_SET_SSID 26 669 #define WLC_RESTART 27 670 /* #define WLC_DUMP_SCB 28 *//* no longer supported */ 671 #define WLC_GET_CHANNEL 29 672 #define WLC_SET_CHANNEL 30 673 #define WLC_GET_SRL 31 674 #define WLC_SET_SRL 32 675 #define WLC_GET_LRL 33 676 #define WLC_SET_LRL 34 677 #define WLC_GET_PLCPHDR 35 678 #define WLC_SET_PLCPHDR 36 679 #define WLC_GET_RADIO 37 680 #define WLC_SET_RADIO 38 681 #define WLC_GET_PHYTYPE 39 682 #define WLC_DUMP_RATE 40 683 #define WLC_SET_RATE_PARAMS 41 684 #define WLC_GET_FIXRATE 42 685 #define WLC_SET_FIXRATE 43 686 /* #define WLC_GET_WEP 42 *//* no longer supported */ 687 /* #define WLC_SET_WEP 43 *//* no longer supported */ 688 #define WLC_GET_KEY 44 689 #define WLC_SET_KEY 45 690 #define WLC_GET_REGULATORY 46 691 #define WLC_SET_REGULATORY 47 692 #define WLC_GET_PASSIVE_SCAN 48 693 #define WLC_SET_PASSIVE_SCAN 49 694 #define WLC_SCAN 50 695 #define WLC_SCAN_RESULTS 51 696 #define WLC_DISASSOC 52 697 #define WLC_REASSOC 53 698 #define WLC_GET_ROAM_TRIGGER 54 699 #define WLC_SET_ROAM_TRIGGER 55 700 #define WLC_GET_ROAM_DELTA 56 701 #define WLC_SET_ROAM_DELTA 57 702 #define WLC_GET_ROAM_SCAN_PERIOD 58 703 #define WLC_SET_ROAM_SCAN_PERIOD 59 704 #define WLC_EVM 60 /* diag */ 705 #define WLC_GET_TXANT 61 706 #define WLC_SET_TXANT 62 707 #define WLC_GET_ANTDIV 63 708 #define WLC_SET_ANTDIV 64 709 /* #define WLC_GET_TXPWR 65 *//* no longer supported */ 710 /* #define WLC_SET_TXPWR 66 *//* no longer supported */ 711 #define WLC_GET_CLOSED 67 712 #define WLC_SET_CLOSED 68 713 #define WLC_GET_MACLIST 69 714 #define WLC_SET_MACLIST 70 715 #define WLC_GET_RATESET 71 716 #define WLC_SET_RATESET 72 717 /* #define WLC_GET_LOCALE 73 *//* no longer supported */ 718 #define WLC_LONGTRAIN 74 719 #define WLC_GET_BCNPRD 75 720 #define WLC_SET_BCNPRD 76 721 #define WLC_GET_DTIMPRD 77 722 #define WLC_SET_DTIMPRD 78 723 #define WLC_GET_SROM 79 724 #define WLC_SET_SROM 80 725 #define WLC_GET_WEP_RESTRICT 81 726 #define WLC_SET_WEP_RESTRICT 82 727 #define WLC_GET_COUNTRY 83 728 #define WLC_SET_COUNTRY 84 729 #define WLC_GET_PM 85 730 #define WLC_SET_PM 86 731 #define WLC_GET_WAKE 87 732 #define WLC_SET_WAKE 88 733 /* #define WLC_GET_D11CNTS 89 *//* -> "counters" iovar */ 734 #define WLC_GET_FORCELINK 90 /* ndis only */ 735 #define WLC_SET_FORCELINK 91 /* ndis only */ 736 #define WLC_FREQ_ACCURACY 92 /* diag */ 737 #define WLC_CARRIER_SUPPRESS 93 /* diag */ 738 #define WLC_GET_PHYREG 94 739 #define WLC_SET_PHYREG 95 740 #define WLC_GET_RADIOREG 96 741 #define WLC_SET_RADIOREG 97 742 #define WLC_GET_REVINFO 98 743 #define WLC_GET_UCANTDIV 99 744 #define WLC_SET_UCANTDIV 100 745 #define WLC_R_REG 101 746 #define WLC_W_REG 102 747 /* #define WLC_DIAG_LOOPBACK 103 old tray diag */ 748 /* #define WLC_RESET_D11CNTS 104 *//* -> "reset_d11cnts" iovar */ 749 #define WLC_GET_MACMODE 105 750 #define WLC_SET_MACMODE 106 751 #define WLC_GET_MONITOR 107 752 #define WLC_SET_MONITOR 108 753 #define WLC_GET_GMODE 109 754 #define WLC_SET_GMODE 110 755 #define WLC_GET_LEGACY_ERP 111 756 #define WLC_SET_LEGACY_ERP 112 757 #define WLC_GET_RX_ANT 113 758 #define WLC_GET_CURR_RATESET 114 /* current rateset */ 759 #define WLC_GET_SCANSUPPRESS 115 760 #define WLC_SET_SCANSUPPRESS 116 761 #define WLC_GET_AP 117 762 #define WLC_SET_AP 118 763 #define WLC_GET_EAP_RESTRICT 119 764 #define WLC_SET_EAP_RESTRICT 120 765 #define WLC_SCB_AUTHORIZE 121 766 #define WLC_SCB_DEAUTHORIZE 122 767 #define WLC_GET_WDSLIST 123 768 #define WLC_SET_WDSLIST 124 769 #define WLC_GET_ATIM 125 770 #define WLC_SET_ATIM 126 771 #define WLC_GET_RSSI 127 772 #define WLC_GET_PHYANTDIV 128 773 #define WLC_SET_PHYANTDIV 129 774 #define WLC_AP_RX_ONLY 130 775 #define WLC_GET_TX_PATH_PWR 131 776 #define WLC_SET_TX_PATH_PWR 132 777 #define WLC_GET_WSEC 133 778 #define WLC_SET_WSEC 134 779 #define WLC_GET_PHY_NOISE 135 780 #define WLC_GET_BSS_INFO 136 781 #define WLC_GET_PKTCNTS 137 782 #define WLC_GET_LAZYWDS 138 783 #define WLC_SET_LAZYWDS 139 784 #define WLC_GET_BANDLIST 140 785 #define WLC_GET_BAND 141 786 #define WLC_SET_BAND 142 787 #define WLC_SCB_DEAUTHENTICATE 143 788 #define WLC_GET_SHORTSLOT 144 789 #define WLC_GET_SHORTSLOT_OVERRIDE 145 790 #define WLC_SET_SHORTSLOT_OVERRIDE 146 791 #define WLC_GET_SHORTSLOT_RESTRICT 147 792 #define WLC_SET_SHORTSLOT_RESTRICT 148 793 #define WLC_GET_GMODE_PROTECTION 149 794 #define WLC_GET_GMODE_PROTECTION_OVERRIDE 150 795 #define WLC_SET_GMODE_PROTECTION_OVERRIDE 151 796 #define WLC_UPGRADE 152 797 /* #define WLC_GET_MRATE 153 *//* no longer supported */ 798 /* #define WLC_SET_MRATE 154 *//* no longer supported */ 799 #define WLC_GET_IGNORE_BCNS 155 800 #define WLC_SET_IGNORE_BCNS 156 801 #define WLC_GET_SCB_TIMEOUT 157 802 #define WLC_SET_SCB_TIMEOUT 158 803 #define WLC_GET_ASSOCLIST 159 804 #define WLC_GET_CLK 160 805 #define WLC_SET_CLK 161 806 #define WLC_GET_UP 162 807 #define WLC_OUT 163 808 #define WLC_GET_WPA_AUTH 164 809 #define WLC_SET_WPA_AUTH 165 810 #define WLC_GET_UCFLAGS 166 811 #define WLC_SET_UCFLAGS 167 812 #define WLC_GET_PWRIDX 168 813 #define WLC_SET_PWRIDX 169 814 #define WLC_GET_TSSI 170 815 #define WLC_GET_SUP_RATESET_OVERRIDE 171 816 #define WLC_SET_SUP_RATESET_OVERRIDE 172 817 /* #define WLC_SET_FAST_TIMER 173 *//* no longer supported */ 818 /* #define WLC_GET_FAST_TIMER 174 *//* no longer supported */ 819 /* #define WLC_SET_SLOW_TIMER 175 *//* no longer supported */ 820 /* #define WLC_GET_SLOW_TIMER 176 *//* no longer supported */ 821 /* #define WLC_DUMP_PHYREGS 177 *//* no longer supported */ 822 #define WLC_GET_PROTECTION_CONTROL 178 823 #define WLC_SET_PROTECTION_CONTROL 179 824 #define WLC_GET_PHYLIST 180 825 #define WLC_ENCRYPT_STRENGTH 181 /* ndis only */ 826 #define WLC_DECRYPT_STATUS 182 /* ndis only */ 827 #define WLC_GET_KEY_SEQ 183 828 #define WLC_GET_SCAN_CHANNEL_TIME 184 829 #define WLC_SET_SCAN_CHANNEL_TIME 185 830 #define WLC_GET_SCAN_UNASSOC_TIME 186 831 #define WLC_SET_SCAN_UNASSOC_TIME 187 832 #define WLC_GET_SCAN_HOME_TIME 188 833 #define WLC_SET_SCAN_HOME_TIME 189 834 #define WLC_GET_SCAN_NPROBES 190 835 #define WLC_SET_SCAN_NPROBES 191 836 #define WLC_GET_PRB_RESP_TIMEOUT 192 837 #define WLC_SET_PRB_RESP_TIMEOUT 193 838 #define WLC_GET_ATTEN 194 839 #define WLC_SET_ATTEN 195 840 #define WLC_GET_SHMEM 196 /* diag */ 841 #define WLC_SET_SHMEM 197 /* diag */ 842 /* #define WLC_GET_GMODE_PROTECTION_CTS 198 *//* no longer supported */ 843 /* #define WLC_SET_GMODE_PROTECTION_CTS 199 *//* no longer supported */ 844 #define WLC_SET_WSEC_TEST 200 845 #define WLC_SCB_DEAUTHENTICATE_FOR_REASON 201 846 #define WLC_TKIP_COUNTERMEASURES 202 847 #define WLC_GET_PIOMODE 203 848 #define WLC_SET_PIOMODE 204 849 #define WLC_SET_ASSOC_PREFER 205 850 #define WLC_GET_ASSOC_PREFER 206 851 #define WLC_SET_ROAM_PREFER 207 852 #define WLC_GET_ROAM_PREFER 208 853 #define WLC_SET_LED 209 854 #define WLC_GET_LED 210 855 #define WLC_RESERVED6 211 856 #define WLC_RESERVED7 212 857 #define WLC_GET_CHANNEL_QA 213 858 #define WLC_START_CHANNEL_QA 214 859 #define WLC_GET_CHANNEL_SEL 215 860 #define WLC_START_CHANNEL_SEL 216 861 #define WLC_GET_VALID_CHANNELS 217 862 #define WLC_GET_FAKEFRAG 218 863 #define WLC_SET_FAKEFRAG 219 864 #define WLC_GET_PWROUT_PERCENTAGE 220 865 #define WLC_SET_PWROUT_PERCENTAGE 221 866 #define WLC_SET_BAD_FRAME_PREEMPT 222 867 #define WLC_GET_BAD_FRAME_PREEMPT 223 868 #define WLC_SET_LEAP_LIST 224 869 #define WLC_GET_LEAP_LIST 225 870 #define WLC_GET_CWMIN 226 871 #define WLC_SET_CWMIN 227 872 #define WLC_GET_CWMAX 228 873 #define WLC_SET_CWMAX 229 874 #define WLC_GET_WET 230 875 #define WLC_SET_WET 231 876 #define WLC_GET_PUB 232 877 /* #define WLC_SET_GLACIAL_TIMER 233 *//* no longer supported */ 878 /* #define WLC_GET_GLACIAL_TIMER 234 *//* no longer supported */ 879 #define WLC_GET_KEY_PRIMARY 235 880 #define WLC_SET_KEY_PRIMARY 236 881 /* #define WLC_DUMP_RADIOREGS 237 *//* no longer supported */ 882 #define WLC_RESERVED4 238 883 #define WLC_RESERVED5 239 884 #define WLC_UNSET_CALLBACK 240 885 #define WLC_SET_CALLBACK 241 886 #define WLC_GET_RADAR 242 887 #define WLC_SET_RADAR 243 888 #define WLC_SET_SPECT_MANAGMENT 244 889 #define WLC_GET_SPECT_MANAGMENT 245 890 #define WLC_WDS_GET_REMOTE_HWADDR 246 /* handled in wl_linux.c/wl_vx.c */ 891 #define WLC_WDS_GET_WPA_SUP 247 892 #define WLC_SET_CS_SCAN_TIMER 248 893 #define WLC_GET_CS_SCAN_TIMER 249 894 #define WLC_MEASURE_REQUEST 250 895 #define WLC_INIT 251 896 #define WLC_SEND_QUIET 252 897 #define WLC_KEEPALIVE 253 898 #define WLC_SEND_PWR_CONSTRAINT 254 899 #define WLC_UPGRADE_STATUS 255 900 #define WLC_CURRENT_PWR 256 901 #define WLC_GET_SCAN_PASSIVE_TIME 257 902 #define WLC_SET_SCAN_PASSIVE_TIME 258 903 #define WLC_LEGACY_LINK_BEHAVIOR 259 904 #define WLC_GET_CHANNELS_IN_COUNTRY 260 905 #define WLC_GET_COUNTRY_LIST 261 906 #define WLC_GET_VAR 262 /* get value of named variable */ 907 #define WLC_SET_VAR 263 /* set named variable to value */ 908 #define WLC_NVRAM_GET 264 /* deprecated */ 909 #define WLC_NVRAM_SET 265 910 #define WLC_NVRAM_DUMP 266 911 #define WLC_REBOOT 267 912 #define WLC_SET_WSEC_PMK 268 913 #define WLC_GET_AUTH_MODE 269 914 #define WLC_SET_AUTH_MODE 270 915 #define WLC_GET_WAKEENTRY 271 916 #define WLC_SET_WAKEENTRY 272 917 #define WLC_NDCONFIG_ITEM 273 /* currently handled in wl_oid.c */ 918 #define WLC_NVOTPW 274 919 #define WLC_OTPW 275 920 #define WLC_IOV_BLOCK_GET 276 921 #define WLC_IOV_MODULES_GET 277 922 #define WLC_SOFT_RESET 278 923 #define WLC_GET_ALLOW_MODE 279 924 #define WLC_SET_ALLOW_MODE 280 925 #define WLC_GET_DESIRED_BSSID 281 926 #define WLC_SET_DESIRED_BSSID 282 927 #define WLC_DISASSOC_MYAP 283 928 #define WLC_GET_RESERVED10 284 929 #define WLC_GET_RESERVED11 285 930 #define WLC_GET_RESERVED12 286 931 #define WLC_GET_RESERVED13 287 932 #define WLC_GET_RESERVED14 288 933 #define WLC_SET_RESERVED15 289 934 #define WLC_SET_RESERVED16 290 935 #define WLC_GET_RESERVED17 291 936 #define WLC_GET_RESERVED18 292 937 #define WLC_GET_RESERVED19 293 938 #define WLC_SET_RESERVED1A 294 939 #define WLC_GET_RESERVED1B 295 940 #define WLC_GET_RESERVED1C 296 941 #define WLC_GET_RESERVED1D 297 942 #define WLC_SET_RESERVED1E 298 943 #define WLC_GET_RESERVED1F 299 944 #define WLC_GET_RESERVED20 300 945 #define WLC_GET_RESERVED21 301 946 #define WLC_GET_RESERVED22 302 947 #define WLC_GET_RESERVED23 303 948 #define WLC_GET_RESERVED24 304 949 #define WLC_SET_RESERVED25 305 950 #define WLC_GET_RESERVED26 306 951 #define WLC_NPHY_SAMPLE_COLLECT 307 /* Nphy sample collect mode */ 952 #define WLC_UM_PRIV 308 /* for usermode driver private ioctl */ 953 #define WLC_GET_CMD 309 954 /* #define WLC_LAST 310 *//* Never used - can be reused */ 955 #define WLC_RESERVED8 311 956 #define WLC_RESERVED9 312 957 #define WLC_RESERVED1 313 958 #define WLC_RESERVED2 314 959 #define WLC_RESERVED3 315 960 #define WLC_LAST 316 961 962 #ifndef EPICTRL_COOKIE 963 #define EPICTRL_COOKIE 0xABADCEDE 964 #endif 965 966 #define WL_DECRYPT_STATUS_SUCCESS 1 967 #define WL_DECRYPT_STATUS_FAILURE 2 968 #define WL_DECRYPT_STATUS_UNKNOWN 3 969 970 /* allows user-mode app to poll the status of USB image upgrade */ 971 #define WLC_UPGRADE_SUCCESS 0 972 #define WLC_UPGRADE_PENDING 1 973 974 /* WLC_GET_AUTH, WLC_SET_AUTH values */ 975 #define WL_AUTH_OPEN_SYSTEM 0 /* d11 open authentication */ 976 #define WL_AUTH_SHARED_KEY 1 /* d11 shared authentication */ 977 #define WL_AUTH_OPEN_SHARED 2 /* try open, then shared if open failed w/rc 13 */ 978 979 /* Bit masks for radio disabled status - returned by WL_GET_RADIO */ 980 #define WL_RADIO_SW_DISABLE (1<<0) 981 #define WL_RADIO_HW_DISABLE (1<<1) 982 #define WL_RADIO_MPC_DISABLE (1<<2) 983 #define WL_RADIO_COUNTRY_DISABLE (1<<3) /* some countries don't support any channel */ 984 985 #define WL_SPURAVOID_OFF 0 986 #define WL_SPURAVOID_ON1 1 987 #define WL_SPURAVOID_ON2 2 988 989 /* Override bit for WLC_SET_TXPWR. if set, ignore other level limits */ 990 #define WL_TXPWR_OVERRIDE (1U<<31) 991 992 #define WL_PHY_PAVARS_LEN 6 /* Phy type, Band range, chain, a1, b0, b1 */ 993 994 typedef struct wl_po { 995 u16 phy_type; /* Phy type */ 996 u16 band; 997 u16 cckpo; 998 u32 ofdmpo; 999 u16 mcspo[8]; 1000 } wl_po_t; 1001 1002 /* a large TX Power as an init value to factor out of min() calculations, 1003 * keep low enough to fit in an s8, units are .25 dBm 1004 */ 1005 #define WLC_TXPWR_MAX (127) /* ~32 dBm = 1,500 mW */ 1006 1007 /* "diag" iovar argument and error code */ 1008 #define WL_DIAG_INTERRUPT 1 /* d11 loopback interrupt test */ 1009 #define WL_DIAG_LOOPBACK 2 /* d11 loopback data test */ 1010 #define WL_DIAG_MEMORY 3 /* d11 memory test */ 1011 #define WL_DIAG_LED 4 /* LED test */ 1012 #define WL_DIAG_REG 5 /* d11/phy register test */ 1013 #define WL_DIAG_SROM 6 /* srom read/crc test */ 1014 #define WL_DIAG_DMA 7 /* DMA test */ 1015 1016 #define WL_DIAGERR_SUCCESS 0 1017 #define WL_DIAGERR_FAIL_TO_RUN 1 /* unable to run requested diag */ 1018 #define WL_DIAGERR_NOT_SUPPORTED 2 /* diag requested is not supported */ 1019 #define WL_DIAGERR_INTERRUPT_FAIL 3 /* loopback interrupt test failed */ 1020 #define WL_DIAGERR_LOOPBACK_FAIL 4 /* loopback data test failed */ 1021 #define WL_DIAGERR_SROM_FAIL 5 /* srom read failed */ 1022 #define WL_DIAGERR_SROM_BADCRC 6 /* srom crc failed */ 1023 #define WL_DIAGERR_REG_FAIL 7 /* d11/phy register test failed */ 1024 #define WL_DIAGERR_MEMORY_FAIL 8 /* d11 memory test failed */ 1025 #define WL_DIAGERR_NOMEM 9 /* diag test failed due to no memory */ 1026 #define WL_DIAGERR_DMA_FAIL 10 /* DMA test failed */ 1027 1028 #define WL_DIAGERR_MEMORY_TIMEOUT 11 /* d11 memory test didn't finish in time */ 1029 #define WL_DIAGERR_MEMORY_BADPATTERN 12 /* d11 memory test result in bad pattern */ 1030 1031 /* band types */ 1032 #define WLC_BAND_AUTO 0 /* auto-select */ 1033 #define WLC_BAND_5G 1 /* 5 Ghz */ 1034 #define WLC_BAND_2G 2 /* 2.4 Ghz */ 1035 #define WLC_BAND_ALL 3 /* all bands */ 1036 1037 /* band range returned by band_range iovar */ 1038 #define WL_CHAN_FREQ_RANGE_2G 0 1039 #define WL_CHAN_FREQ_RANGE_5GL 1 1040 #define WL_CHAN_FREQ_RANGE_5GM 2 1041 #define WL_CHAN_FREQ_RANGE_5GH 3 1042 1043 /* phy types (returned by WLC_GET_PHYTPE) */ 1044 #define WLC_PHY_TYPE_A 0 1045 #define WLC_PHY_TYPE_B 1 1046 #define WLC_PHY_TYPE_G 2 1047 #define WLC_PHY_TYPE_N 4 1048 #define WLC_PHY_TYPE_LP 5 1049 #define WLC_PHY_TYPE_SSN 6 1050 #define WLC_PHY_TYPE_HT 7 1051 #define WLC_PHY_TYPE_LCN 8 1052 #define WLC_PHY_TYPE_NULL 0xf 1053 1054 /* MAC list modes */ 1055 #define WLC_MACMODE_DISABLED 0 /* MAC list disabled */ 1056 #define WLC_MACMODE_DENY 1 /* Deny specified (i.e. allow unspecified) */ 1057 #define WLC_MACMODE_ALLOW 2 /* Allow specified (i.e. deny unspecified) */ 1058 1059 /* 1060 * 54g modes (basic bits may still be overridden) 1061 * 1062 * GMODE_LEGACY_B Rateset: 1b, 2b, 5.5, 11 1063 * Preamble: Long 1064 * Shortslot: Off 1065 * GMODE_AUTO Rateset: 1b, 2b, 5.5b, 11b, 18, 24, 36, 54 1066 * Extended Rateset: 6, 9, 12, 48 1067 * Preamble: Long 1068 * Shortslot: Auto 1069 * GMODE_ONLY Rateset: 1b, 2b, 5.5b, 11b, 18, 24b, 36, 54 1070 * Extended Rateset: 6b, 9, 12b, 48 1071 * Preamble: Short required 1072 * Shortslot: Auto 1073 * GMODE_B_DEFERRED Rateset: 1b, 2b, 5.5b, 11b, 18, 24, 36, 54 1074 * Extended Rateset: 6, 9, 12, 48 1075 * Preamble: Long 1076 * Shortslot: On 1077 * GMODE_PERFORMANCE Rateset: 1b, 2b, 5.5b, 6b, 9, 11b, 12b, 18, 24b, 36, 48, 54 1078 * Preamble: Short required 1079 * Shortslot: On and required 1080 * GMODE_LRS Rateset: 1b, 2b, 5.5b, 11b 1081 * Extended Rateset: 6, 9, 12, 18, 24, 36, 48, 54 1082 * Preamble: Long 1083 * Shortslot: Auto 1084 */ 1085 #define GMODE_LEGACY_B 0 1086 #define GMODE_AUTO 1 1087 #define GMODE_ONLY 2 1088 #define GMODE_B_DEFERRED 3 1089 #define GMODE_PERFORMANCE 4 1090 #define GMODE_LRS 5 1091 #define GMODE_MAX 6 1092 1093 /* values for PLCPHdr_override */ 1094 #define WLC_PLCP_AUTO -1 1095 #define WLC_PLCP_SHORT 0 1096 #define WLC_PLCP_LONG 1 1097 1098 /* values for g_protection_override and n_protection_override */ 1099 #define WLC_PROTECTION_AUTO -1 1100 #define WLC_PROTECTION_OFF 0 1101 #define WLC_PROTECTION_ON 1 1102 #define WLC_PROTECTION_MMHDR_ONLY 2 1103 #define WLC_PROTECTION_CTS_ONLY 3 1104 1105 /* values for g_protection_control and n_protection_control */ 1106 #define WLC_PROTECTION_CTL_OFF 0 1107 #define WLC_PROTECTION_CTL_LOCAL 1 1108 #define WLC_PROTECTION_CTL_OVERLAP 2 1109 1110 /* values for n_protection */ 1111 #define WLC_N_PROTECTION_OFF 0 1112 #define WLC_N_PROTECTION_OPTIONAL 1 1113 #define WLC_N_PROTECTION_20IN40 2 1114 #define WLC_N_PROTECTION_MIXEDMODE 3 1115 1116 /* values for n_preamble_type */ 1117 #define WLC_N_PREAMBLE_MIXEDMODE 0 1118 #define WLC_N_PREAMBLE_GF 1 1119 #define WLC_N_PREAMBLE_GF_BRCM 2 1120 1121 /* values for band specific 40MHz capabilities */ 1122 #define WLC_N_BW_20ALL 0 1123 #define WLC_N_BW_40ALL 1 1124 #define WLC_N_BW_20IN2G_40IN5G 2 1125 1126 /* values to force tx/rx chain */ 1127 #define WLC_N_TXRX_CHAIN0 0 1128 #define WLC_N_TXRX_CHAIN1 1 1129 1130 /* bitflags for SGI support (sgi_rx iovar) */ 1131 #define WLC_N_SGI_20 0x01 1132 #define WLC_N_SGI_40 0x02 1133 1134 /* Values for PM */ 1135 #define PM_OFF 0 1136 #define PM_MAX 1 1137 1138 /* interference mitigation options */ 1139 #define INTERFERE_OVRRIDE_OFF -1 /* interference override off */ 1140 #define INTERFERE_NONE 0 /* off */ 1141 #define NON_WLAN 1 /* foreign/non 802.11 interference, no auto detect */ 1142 #define WLAN_MANUAL 2 /* ACI: no auto detection */ 1143 #define WLAN_AUTO 3 /* ACI: auto detect */ 1144 #define WLAN_AUTO_W_NOISE 4 /* ACI: auto - detect and non 802.11 interference */ 1145 #define AUTO_ACTIVE (1 << 7) /* Auto is currently active */ 1146 1147 #define WL_RSSI_ANT_VERSION 1 /* current version of wl_rssi_ant_t */ 1148 #define WL_ANT_RX_MAX 2 /* max 2 receive antennas */ 1149 #define WL_ANT_HT_RX_MAX 3 /* max 3 receive antennas/cores */ 1150 #define WL_ANT_IDX_1 0 /* antenna index 1 */ 1151 #define WL_ANT_IDX_2 1 /* antenna index 2 */ 1152 1153 #ifndef WL_RSSI_ANT_MAX 1154 #define WL_RSSI_ANT_MAX 4 /* max possible rx antennas */ 1155 #elif WL_RSSI_ANT_MAX != 4 1156 #error "WL_RSSI_ANT_MAX does not match" 1157 #endif 1158 1159 /* RSSI per antenna */ 1160 typedef struct { 1161 u32 version; /* version field */ 1162 u32 count; /* number of valid antenna rssi */ 1163 s8 rssi_ant[WL_RSSI_ANT_MAX]; /* rssi per antenna */ 1164 } wl_rssi_ant_t; 1165 1166 #define NUM_PWRCTRL_RATES 12 1167 1168 typedef struct { 1169 u8 txpwr_band_max[NUM_PWRCTRL_RATES]; /* User set target */ 1170 u8 txpwr_limit[NUM_PWRCTRL_RATES]; /* reg and local power limit */ 1171 u8 txpwr_local_max; /* local max according to the AP */ 1172 u8 txpwr_local_constraint; /* local constraint according to the AP */ 1173 u8 txpwr_chan_reg_max; /* Regulatory max for this channel */ 1174 u8 txpwr_target[2][NUM_PWRCTRL_RATES]; /* Latest target for 2.4 and 5 Ghz */ 1175 u8 txpwr_est_Pout[2]; /* Latest estimate for 2.4 and 5 Ghz */ 1176 u8 txpwr_opo[NUM_PWRCTRL_RATES]; /* On G phy, OFDM power offset */ 1177 u8 txpwr_bphy_cck_max[NUM_PWRCTRL_RATES]; /* Max CCK power for this band (SROM) */ 1178 u8 txpwr_bphy_ofdm_max; /* Max OFDM power for this band (SROM) */ 1179 u8 txpwr_aphy_max[NUM_PWRCTRL_RATES]; /* Max power for A band (SROM) */ 1180 s8 txpwr_antgain[2]; /* Ant gain for each band - from SROM */ 1181 u8 txpwr_est_Pout_gofdm; /* Pwr estimate for 2.4 OFDM */ 1182 } tx_power_legacy_t; 1183 1184 #define WL_TX_POWER_RATES_LEGACY 45 1185 #define WL_TX_POWER_MCS20_FIRST 12 1186 #define WL_TX_POWER_MCS20_NUM 16 1187 #define WL_TX_POWER_MCS40_FIRST 28 1188 #define WL_TX_POWER_MCS40_NUM 17 1189 1190 1191 #define WL_TX_POWER_RATES 101 1192 #define WL_TX_POWER_CCK_FIRST 0 1193 #define WL_TX_POWER_CCK_NUM 4 1194 #define WL_TX_POWER_OFDM_FIRST 4 /* Index for first 20MHz OFDM SISO rate */ 1195 #define WL_TX_POWER_OFDM20_CDD_FIRST 12 /* Index for first 20MHz OFDM CDD rate */ 1196 #define WL_TX_POWER_OFDM40_SISO_FIRST 52 /* Index for first 40MHz OFDM SISO rate */ 1197 #define WL_TX_POWER_OFDM40_CDD_FIRST 60 /* Index for first 40MHz OFDM CDD rate */ 1198 #define WL_TX_POWER_OFDM_NUM 8 1199 #define WL_TX_POWER_MCS20_SISO_FIRST 20 /* Index for first 20MHz MCS SISO rate */ 1200 #define WL_TX_POWER_MCS20_CDD_FIRST 28 /* Index for first 20MHz MCS CDD rate */ 1201 #define WL_TX_POWER_MCS20_STBC_FIRST 36 /* Index for first 20MHz MCS STBC rate */ 1202 #define WL_TX_POWER_MCS20_SDM_FIRST 44 /* Index for first 20MHz MCS SDM rate */ 1203 #define WL_TX_POWER_MCS40_SISO_FIRST 68 /* Index for first 40MHz MCS SISO rate */ 1204 #define WL_TX_POWER_MCS40_CDD_FIRST 76 /* Index for first 40MHz MCS CDD rate */ 1205 #define WL_TX_POWER_MCS40_STBC_FIRST 84 /* Index for first 40MHz MCS STBC rate */ 1206 #define WL_TX_POWER_MCS40_SDM_FIRST 92 /* Index for first 40MHz MCS SDM rate */ 1207 #define WL_TX_POWER_MCS_1_STREAM_NUM 8 1208 #define WL_TX_POWER_MCS_2_STREAM_NUM 8 1209 #define WL_TX_POWER_MCS_32 100 /* Index for 40MHz rate MCS 32 */ 1210 #define WL_TX_POWER_MCS_32_NUM 1 1211 1212 /* sslpnphy specifics */ 1213 #define WL_TX_POWER_MCS20_SISO_FIRST_SSN 12 /* Index for first 20MHz MCS SISO rate */ 1214 1215 /* tx_power_t.flags bits */ 1216 #define WL_TX_POWER_F_ENABLED 1 1217 #define WL_TX_POWER_F_HW 2 1218 #define WL_TX_POWER_F_MIMO 4 1219 #define WL_TX_POWER_F_SISO 8 1220 1221 typedef struct { 1222 u32 flags; 1223 chanspec_t chanspec; /* txpwr report for this channel */ 1224 chanspec_t local_chanspec; /* channel on which we are associated */ 1225 u8 local_max; /* local max according to the AP */ 1226 u8 local_constraint; /* local constraint according to the AP */ 1227 s8 antgain[2]; /* Ant gain for each band - from SROM */ 1228 u8 rf_cores; /* count of RF Cores being reported */ 1229 u8 est_Pout[4]; /* Latest tx power out estimate per RF chain */ 1230 u8 est_Pout_act[4]; /* Latest tx power out estimate per RF chain 1231 * without adjustment 1232 */ 1233 u8 est_Pout_cck; /* Latest CCK tx power out estimate */ 1234 u8 tx_power_max[4]; /* Maximum target power among all rates */ 1235 u8 tx_power_max_rate_ind[4]; /* Index of the rate with the max target power */ 1236 u8 user_limit[WL_TX_POWER_RATES]; /* User limit */ 1237 u8 reg_limit[WL_TX_POWER_RATES]; /* Regulatory power limit */ 1238 u8 board_limit[WL_TX_POWER_RATES]; /* Max power board can support (SROM) */ 1239 u8 target[WL_TX_POWER_RATES]; /* Latest target power */ 1240 } tx_power_t; 1241 1242 typedef struct tx_inst_power { 1243 u8 txpwr_est_Pout[2]; /* Latest estimate for 2.4 and 5 Ghz */ 1244 u8 txpwr_est_Pout_gofdm; /* Pwr estimate for 2.4 OFDM */ 1245 } tx_inst_power_t; 1246 1247 /* Message levels */ 1248 #define WL_ERROR_VAL 0x00000001 1249 #define WL_TRACE_VAL 0x00000002 1250 #define WL_AMPDU_VAL 0x20000000 1251 #define WL_FFPLD_VAL 0x40000000 1252 1253 /* maximum channels returned by the get valid channels iovar */ 1254 #define WL_NUMCHANNELS 64 1255 #define WL_NUMCHANSPECS 100 1256 1257 struct tsinfo_arg { 1258 u8 octets[3]; 1259 }; 1260 1261 #define NFIFO 6 /* # tx/rx fifopairs */ 1262 1263 #define WL_CNT_T_VERSION 7 /* current version of wl_cnt_t struct */ 1264 1265 struct wl_cnt { 1266 u16 version; /* see definition of WL_CNT_T_VERSION */ 1267 u16 length; /* length of entire structure */ 1268 1269 /* transmit stat counters */ 1270 u32 txframe; /* tx data frames */ 1271 u32 txbyte; /* tx data bytes */ 1272 u32 txretrans; /* tx mac retransmits */ 1273 u32 txerror; /* tx data errors (derived: sum of others) */ 1274 u32 txctl; /* tx management frames */ 1275 u32 txprshort; /* tx short preamble frames */ 1276 u32 txserr; /* tx status errors */ 1277 u32 txnobuf; /* tx out of buffers errors */ 1278 u32 txnoassoc; /* tx discard because we're not associated */ 1279 u32 txrunt; /* tx runt frames */ 1280 u32 txchit; /* tx header cache hit (fastpath) */ 1281 u32 txcmiss; /* tx header cache miss (slowpath) */ 1282 u32 ieee_tx_status; /* calls to ieee80211_tx_status */ 1283 u32 ieee_tx; /* tx calls frm mac0211 */ 1284 u32 ieee_rx; /* calls to ieee_rx */ 1285 1286 /* transmit chip error counters */ 1287 u32 txuflo; /* tx fifo underflows */ 1288 u32 txphyerr; /* tx phy errors (indicated in tx status) */ 1289 u32 txphycrs; 1290 1291 /* receive stat counters */ 1292 u32 rxframe; /* rx data frames */ 1293 u32 rxbyte; /* rx data bytes */ 1294 u32 rxerror; /* rx data errors (derived: sum of others) */ 1295 u32 rxctl; /* rx management frames */ 1296 u32 rxnobuf; /* rx out of buffers errors */ 1297 u32 rxnondata; /* rx non data frames in the data channel errors */ 1298 u32 rxbadds; /* rx bad DS errors */ 1299 u32 rxbadcm; /* rx bad control or management frames */ 1300 u32 rxfragerr; /* rx fragmentation errors */ 1301 u32 rxrunt; /* rx runt frames */ 1302 u32 rxgiant; /* rx giant frames */ 1303 u32 rxnoscb; /* rx no scb error */ 1304 u32 rxbadproto; /* rx invalid frames */ 1305 u32 rxbadsrcmac; /* rx frames with Invalid Src Mac */ 1306 u32 rxbadda; /* rx frames tossed for invalid da */ 1307 u32 rxfilter; /* rx frames filtered out */ 1308 1309 /* receive chip error counters */ 1310 u32 rxoflo; /* rx fifo overflow errors */ 1311 u32 rxuflo[NFIFO]; /* rx dma descriptor underflow errors */ 1312 1313 u32 d11cnt_txrts_off; /* d11cnt txrts value when reset d11cnt */ 1314 u32 d11cnt_rxcrc_off; /* d11cnt rxcrc value when reset d11cnt */ 1315 u32 d11cnt_txnocts_off; /* d11cnt txnocts value when reset d11cnt */ 1316 1317 /* misc counters */ 1318 u32 dmade; /* tx/rx dma descriptor errors */ 1319 u32 dmada; /* tx/rx dma data errors */ 1320 u32 dmape; /* tx/rx dma descriptor protocol errors */ 1321 u32 reset; /* reset count */ 1322 u32 tbtt; /* cnts the TBTT int's */ 1323 u32 txdmawar; 1324 u32 pkt_callback_reg_fail; /* callbacks register failure */ 1325 1326 /* MAC counters: 32-bit version of d11.h's macstat_t */ 1327 u32 txallfrm; /* total number of frames sent, incl. Data, ACK, RTS, CTS, 1328 * Control Management (includes retransmissions) 1329 */ 1330 u32 txrtsfrm; /* number of RTS sent out by the MAC */ 1331 u32 txctsfrm; /* number of CTS sent out by the MAC */ 1332 u32 txackfrm; /* number of ACK frames sent out */ 1333 u32 txdnlfrm; /* Not used */ 1334 u32 txbcnfrm; /* beacons transmitted */ 1335 u32 txfunfl[8]; /* per-fifo tx underflows */ 1336 u32 txtplunfl; /* Template underflows (mac was too slow to transmit ACK/CTS 1337 * or BCN) 1338 */ 1339 u32 txphyerror; /* Transmit phy error, type of error is reported in tx-status for 1340 * driver enqueued frames 1341 */ 1342 u32 rxfrmtoolong; /* Received frame longer than legal limit (2346 bytes) */ 1343 u32 rxfrmtooshrt; /* Received frame did not contain enough bytes for its frame type */ 1344 u32 rxinvmachdr; /* Either the protocol version != 0 or frame type not 1345 * data/control/management 1346 */ 1347 u32 rxbadfcs; /* number of frames for which the CRC check failed in the MAC */ 1348 u32 rxbadplcp; /* parity check of the PLCP header failed */ 1349 u32 rxcrsglitch; /* PHY was able to correlate the preamble but not the header */ 1350 u32 rxstrt; /* Number of received frames with a good PLCP 1351 * (i.e. passing parity check) 1352 */ 1353 u32 rxdfrmucastmbss; /* Number of received DATA frames with good FCS and matching RA */ 1354 u32 rxmfrmucastmbss; /* number of received mgmt frames with good FCS and matching RA */ 1355 u32 rxcfrmucast; /* number of received CNTRL frames with good FCS and matching RA */ 1356 u32 rxrtsucast; /* number of unicast RTS addressed to the MAC (good FCS) */ 1357 u32 rxctsucast; /* number of unicast CTS addressed to the MAC (good FCS) */ 1358 u32 rxackucast; /* number of ucast ACKS received (good FCS) */ 1359 u32 rxdfrmocast; /* number of received DATA frames (good FCS and not matching RA) */ 1360 u32 rxmfrmocast; /* number of received MGMT frames (good FCS and not matching RA) */ 1361 u32 rxcfrmocast; /* number of received CNTRL frame (good FCS and not matching RA) */ 1362 u32 rxrtsocast; /* number of received RTS not addressed to the MAC */ 1363 u32 rxctsocast; /* number of received CTS not addressed to the MAC */ 1364 u32 rxdfrmmcast; /* number of RX Data multicast frames received by the MAC */ 1365 u32 rxmfrmmcast; /* number of RX Management multicast frames received by the MAC */ 1366 u32 rxcfrmmcast; /* number of RX Control multicast frames received by the MAC 1367 * (unlikely to see these) 1368 */ 1369 u32 rxbeaconmbss; /* beacons received from member of BSS */ 1370 u32 rxdfrmucastobss; /* number of unicast frames addressed to the MAC from 1371 * other BSS (WDS FRAME) 1372 */ 1373 u32 rxbeaconobss; /* beacons received from other BSS */ 1374 u32 rxrsptmout; /* Number of response timeouts for transmitted frames 1375 * expecting a response 1376 */ 1377 u32 bcntxcancl; /* transmit beacons canceled due to receipt of beacon (IBSS) */ 1378 u32 rxf0ovfl; /* Number of receive fifo 0 overflows */ 1379 u32 rxf1ovfl; /* Number of receive fifo 1 overflows (obsolete) */ 1380 u32 rxf2ovfl; /* Number of receive fifo 2 overflows (obsolete) */ 1381 u32 txsfovfl; /* Number of transmit status fifo overflows (obsolete) */ 1382 u32 pmqovfl; /* Number of PMQ overflows */ 1383 u32 rxcgprqfrm; /* Number of received Probe requests that made it into 1384 * the PRQ fifo 1385 */ 1386 u32 rxcgprsqovfl; /* Rx Probe Request Que overflow in the AP */ 1387 u32 txcgprsfail; /* Tx Probe Response Fail. AP sent probe response but did 1388 * not get ACK 1389 */ 1390 u32 txcgprssuc; /* Tx Probe Response Success (ACK was received) */ 1391 u32 prs_timeout; /* Number of probe requests that were dropped from the PRQ 1392 * fifo because a probe response could not be sent out within 1393 * the time limit defined in M_PRS_MAXTIME 1394 */ 1395 u32 rxnack; 1396 u32 frmscons; 1397 u32 txnack; 1398 u32 txglitch_nack; /* obsolete */ 1399 u32 txburst; /* obsolete */ 1400 1401 /* 802.11 MIB counters, pp. 614 of 802.11 reaff doc. */ 1402 u32 txfrag; /* dot11TransmittedFragmentCount */ 1403 u32 txmulti; /* dot11MulticastTransmittedFrameCount */ 1404 u32 txfail; /* dot11FailedCount */ 1405 u32 txretry; /* dot11RetryCount */ 1406 u32 txretrie; /* dot11MultipleRetryCount */ 1407 u32 rxdup; /* dot11FrameduplicateCount */ 1408 u32 txrts; /* dot11RTSSuccessCount */ 1409 u32 txnocts; /* dot11RTSFailureCount */ 1410 u32 txnoack; /* dot11ACKFailureCount */ 1411 u32 rxfrag; /* dot11ReceivedFragmentCount */ 1412 u32 rxmulti; /* dot11MulticastReceivedFrameCount */ 1413 u32 rxcrc; /* dot11FCSErrorCount */ 1414 u32 txfrmsnt; /* dot11TransmittedFrameCount (bogus MIB?) */ 1415 u32 rxundec; /* dot11WEPUndecryptableCount */ 1416 1417 /* WPA2 counters (see rxundec for DecryptFailureCount) */ 1418 u32 tkipmicfaill; /* TKIPLocalMICFailures */ 1419 u32 tkipcntrmsr; /* TKIPCounterMeasuresInvoked */ 1420 u32 tkipreplay; /* TKIPReplays */ 1421 u32 ccmpfmterr; /* CCMPFormatErrors */ 1422 u32 ccmpreplay; /* CCMPReplays */ 1423 u32 ccmpundec; /* CCMPDecryptErrors */ 1424 u32 fourwayfail; /* FourWayHandshakeFailures */ 1425 u32 wepundec; /* dot11WEPUndecryptableCount */ 1426 u32 wepicverr; /* dot11WEPICVErrorCount */ 1427 u32 decsuccess; /* DecryptSuccessCount */ 1428 u32 tkipicverr; /* TKIPICVErrorCount */ 1429 u32 wepexcluded; /* dot11WEPExcludedCount */ 1430 1431 u32 rxundec_mcst; /* dot11WEPUndecryptableCount */ 1432 1433 /* WPA2 counters (see rxundec for DecryptFailureCount) */ 1434 u32 tkipmicfaill_mcst; /* TKIPLocalMICFailures */ 1435 u32 tkipcntrmsr_mcst; /* TKIPCounterMeasuresInvoked */ 1436 u32 tkipreplay_mcst; /* TKIPReplays */ 1437 u32 ccmpfmterr_mcst; /* CCMPFormatErrors */ 1438 u32 ccmpreplay_mcst; /* CCMPReplays */ 1439 u32 ccmpundec_mcst; /* CCMPDecryptErrors */ 1440 u32 fourwayfail_mcst; /* FourWayHandshakeFailures */ 1441 u32 wepundec_mcst; /* dot11WEPUndecryptableCount */ 1442 u32 wepicverr_mcst; /* dot11WEPICVErrorCount */ 1443 u32 decsuccess_mcst; /* DecryptSuccessCount */ 1444 u32 tkipicverr_mcst; /* TKIPICVErrorCount */ 1445 u32 wepexcluded_mcst; /* dot11WEPExcludedCount */ 1446 1447 u32 txchanrej; /* Tx frames suppressed due to channel rejection */ 1448 u32 txexptime; /* Tx frames suppressed due to timer expiration */ 1449 u32 psmwds; /* Count PSM watchdogs */ 1450 u32 phywatchdog; /* Count Phy watchdogs (triggered by ucode) */ 1451 1452 /* MBSS counters, AP only */ 1453 u32 prq_entries_handled; /* PRQ entries read in */ 1454 u32 prq_undirected_entries; /* which were bcast bss & ssid */ 1455 u32 prq_bad_entries; /* which could not be translated to info */ 1456 u32 atim_suppress_count; /* TX suppressions on ATIM fifo */ 1457 u32 bcn_template_not_ready; /* Template marked in use on send bcn ... */ 1458 u32 bcn_template_not_ready_done; /* ...but "DMA done" interrupt rcvd */ 1459 u32 late_tbtt_dpc; /* TBTT DPC did not happen in time */ 1460 1461 /* per-rate receive stat counters */ 1462 u32 rx1mbps; /* packets rx at 1Mbps */ 1463 u32 rx2mbps; /* packets rx at 2Mbps */ 1464 u32 rx5mbps5; /* packets rx at 5.5Mbps */ 1465 u32 rx6mbps; /* packets rx at 6Mbps */ 1466 u32 rx9mbps; /* packets rx at 9Mbps */ 1467 u32 rx11mbps; /* packets rx at 11Mbps */ 1468 u32 rx12mbps; /* packets rx at 12Mbps */ 1469 u32 rx18mbps; /* packets rx at 18Mbps */ 1470 u32 rx24mbps; /* packets rx at 24Mbps */ 1471 u32 rx36mbps; /* packets rx at 36Mbps */ 1472 u32 rx48mbps; /* packets rx at 48Mbps */ 1473 u32 rx54mbps; /* packets rx at 54Mbps */ 1474 u32 rx108mbps; /* packets rx at 108mbps */ 1475 u32 rx162mbps; /* packets rx at 162mbps */ 1476 u32 rx216mbps; /* packets rx at 216 mbps */ 1477 u32 rx270mbps; /* packets rx at 270 mbps */ 1478 u32 rx324mbps; /* packets rx at 324 mbps */ 1479 u32 rx378mbps; /* packets rx at 378 mbps */ 1480 u32 rx432mbps; /* packets rx at 432 mbps */ 1481 u32 rx486mbps; /* packets rx at 486 mbps */ 1482 u32 rx540mbps; /* packets rx at 540 mbps */ 1483 1484 /* pkteng rx frame stats */ 1485 u32 pktengrxducast; /* unicast frames rxed by the pkteng code */ 1486 u32 pktengrxdmcast; /* multicast frames rxed by the pkteng code */ 1487 1488 u32 rfdisable; /* count of radio disables */ 1489 u32 bphy_rxcrsglitch; /* PHY count of bphy glitches */ 1490 1491 u32 txmpdu_sgi; /* count for sgi transmit */ 1492 u32 rxmpdu_sgi; /* count for sgi received */ 1493 u32 txmpdu_stbc; /* count for stbc transmit */ 1494 u32 rxmpdu_stbc; /* count for stbc received */ 1495 }; 1496 1497 #define WL_DELTA_STATS_T_VERSION 1 /* current version of wl_delta_stats_t struct */ 1498 1499 typedef struct { 1500 u16 version; /* see definition of WL_DELTA_STATS_T_VERSION */ 1501 u16 length; /* length of entire structure */ 1502 1503 /* transmit stat counters */ 1504 u32 txframe; /* tx data frames */ 1505 u32 txbyte; /* tx data bytes */ 1506 u32 txretrans; /* tx mac retransmits */ 1507 u32 txfail; /* tx failures */ 1508 1509 /* receive stat counters */ 1510 u32 rxframe; /* rx data frames */ 1511 u32 rxbyte; /* rx data bytes */ 1512 1513 /* per-rate receive stat counters */ 1514 u32 rx1mbps; /* packets rx at 1Mbps */ 1515 u32 rx2mbps; /* packets rx at 2Mbps */ 1516 u32 rx5mbps5; /* packets rx at 5.5Mbps */ 1517 u32 rx6mbps; /* packets rx at 6Mbps */ 1518 u32 rx9mbps; /* packets rx at 9Mbps */ 1519 u32 rx11mbps; /* packets rx at 11Mbps */ 1520 u32 rx12mbps; /* packets rx at 12Mbps */ 1521 u32 rx18mbps; /* packets rx at 18Mbps */ 1522 u32 rx24mbps; /* packets rx at 24Mbps */ 1523 u32 rx36mbps; /* packets rx at 36Mbps */ 1524 u32 rx48mbps; /* packets rx at 48Mbps */ 1525 u32 rx54mbps; /* packets rx at 54Mbps */ 1526 u32 rx108mbps; /* packets rx at 108mbps */ 1527 u32 rx162mbps; /* packets rx at 162mbps */ 1528 u32 rx216mbps; /* packets rx at 216 mbps */ 1529 u32 rx270mbps; /* packets rx at 270 mbps */ 1530 u32 rx324mbps; /* packets rx at 324 mbps */ 1531 u32 rx378mbps; /* packets rx at 378 mbps */ 1532 u32 rx432mbps; /* packets rx at 432 mbps */ 1533 u32 rx486mbps; /* packets rx at 486 mbps */ 1534 u32 rx540mbps; /* packets rx at 540 mbps */ 1535 } wl_delta_stats_t; 1536 1537 #define WL_WME_CNT_VERSION 1 /* current version of wl_wme_cnt_t */ 1538 1539 typedef struct { 1540 u32 packets; 1541 u32 bytes; 1542 } wl_traffic_stats_t; 1543 1544 typedef struct { 1545 u16 version; /* see definition of WL_WME_CNT_VERSION */ 1546 u16 length; /* length of entire structure */ 1547 1548 wl_traffic_stats_t tx[AC_COUNT]; /* Packets transmitted */ 1549 wl_traffic_stats_t tx_failed[AC_COUNT]; /* Packets dropped or failed to transmit */ 1550 wl_traffic_stats_t rx[AC_COUNT]; /* Packets received */ 1551 wl_traffic_stats_t rx_failed[AC_COUNT]; /* Packets failed to receive */ 1552 1553 wl_traffic_stats_t forward[AC_COUNT]; /* Packets forwarded by AP */ 1554 1555 wl_traffic_stats_t tx_expired[AC_COUNT]; /* packets dropped due to lifetime expiry */ 1556 1557 } wl_wme_cnt_t; 1558 1559 struct wl_msglevel2 { 1560 u32 low; 1561 u32 high; 1562 }; 1563 1564 #ifdef WLBA 1565 1566 #define WLC_BA_CNT_VERSION 1 /* current version of wlc_ba_cnt_t */ 1567 1568 /* block ack related stats */ 1569 typedef struct wlc_ba_cnt { 1570 u16 version; /* WLC_BA_CNT_VERSION */ 1571 u16 length; /* length of entire structure */ 1572 1573 /* transmit stat counters */ 1574 u32 txpdu; /* pdus sent */ 1575 u32 txsdu; /* sdus sent */ 1576 u32 txfc; /* tx side flow controlled packets */ 1577 u32 txfci; /* tx side flow control initiated */ 1578 u32 txretrans; /* retransmitted pdus */ 1579 u32 txbatimer; /* ba resend due to timer */ 1580 u32 txdrop; /* dropped packets */ 1581 u32 txaddbareq; /* addba req sent */ 1582 u32 txaddbaresp; /* addba resp sent */ 1583 u32 txdelba; /* delba sent */ 1584 u32 txba; /* ba sent */ 1585 u32 txbar; /* bar sent */ 1586 u32 txpad[4]; /* future */ 1587 1588 /* receive side counters */ 1589 u32 rxpdu; /* pdus recd */ 1590 u32 rxqed; /* pdus buffered before sending up */ 1591 u32 rxdup; /* duplicate pdus */ 1592 u32 rxnobuf; /* pdus discarded due to no buf */ 1593 u32 rxaddbareq; /* addba req recd */ 1594 u32 rxaddbaresp; /* addba resp recd */ 1595 u32 rxdelba; /* delba recd */ 1596 u32 rxba; /* ba recd */ 1597 u32 rxbar; /* bar recd */ 1598 u32 rxinvba; /* invalid ba recd */ 1599 u32 rxbaholes; /* ba recd with holes */ 1600 u32 rxunexp; /* unexpected packets */ 1601 u32 rxpad[4]; /* future */ 1602 } wlc_ba_cnt_t; 1603 #endif /* WLBA */ 1604 1605 /* structure for per-tid ampdu control */ 1606 struct ampdu_tid_control { 1607 u8 tid; /* tid */ 1608 u8 enable; /* enable/disable */ 1609 }; 1610 1611 /* structure for identifying ea/tid for sending addba/delba */ 1612 struct ampdu_ea_tid { 1613 u8 ea[ETH_ALEN]; /* Station address */ 1614 u8 tid; /* tid */ 1615 }; 1616 /* structure for identifying retry/tid for retry_limit_tid/rr_retry_limit_tid */ 1617 struct ampdu_retry_tid { 1618 u8 tid; /* tid */ 1619 u8 retry; /* retry value */ 1620 }; 1621 1622 1623 /* Software feature flag defines used by wlfeatureflag */ 1624 #define WL_SWFL_NOHWRADIO 0x0004 1625 #define WL_SWFL_FLOWCONTROL 0x0008 /* Enable backpressure to OS stack */ 1626 #define WL_SWFL_WLBSSSORT 0x0010 /* Per-port supports sorting of BSS */ 1627 1628 #define WL_LIFETIME_MAX 0xFFFF /* Max value in ms */ 1629 1630 1631 /* Pattern matching filter. Specifies an offset within received packets to 1632 * start matching, the pattern to match, the size of the pattern, and a bitmask 1633 * that indicates which bits within the pattern should be matched. 1634 */ 1635 typedef struct wl_pkt_filter_pattern { 1636 u32 offset; /* Offset within received packet to start pattern matching. 1637 * Offset '0' is the first byte of the ethernet header. 1638 */ 1639 u32 size_bytes; /* Size of the pattern. Bitmask must be the same size. */ 1640 u8 mask_and_pattern[1]; /* Variable length mask and pattern data. mask starts 1641 * at offset 0. Pattern immediately follows mask. 1642 */ 1643 } wl_pkt_filter_pattern_t; 1644 1645 /* IOVAR "pkt_filter_add" parameter. Used to install packet filters. */ 1646 typedef struct wl_pkt_filter { 1647 u32 id; /* Unique filter id, specified by app. */ 1648 u32 type; /* Filter type (WL_PKT_FILTER_TYPE_xxx). */ 1649 u32 negate_match; /* Negate the result of filter matches */ 1650 union { /* Filter definitions */ 1651 wl_pkt_filter_pattern_t pattern; /* Pattern matching filter */ 1652 } u; 1653 } wl_pkt_filter_t; 1654 1655 #define WL_PKT_FILTER_FIXED_LEN offsetof(wl_pkt_filter_t, u) 1656 #define WL_PKT_FILTER_PATTERN_FIXED_LEN offsetof(wl_pkt_filter_pattern_t, mask_and_pattern) 1657 1658 /* IOVAR "pkt_filter_enable" parameter. */ 1659 typedef struct wl_pkt_filter_enable { 1660 u32 id; /* Unique filter id */ 1661 u32 enable; /* Enable/disable bool */ 1662 } wl_pkt_filter_enable_t; 1663 1664 1665 #define WLC_RSSI_INVALID 0 /* invalid RSSI value */ 1666 1667 /* n-mode support capability */ 1668 /* 2x2 includes both 1x1 & 2x2 devices 1669 * reserved #define 2 for future when we want to separate 1x1 & 2x2 and 1670 * control it independently 1671 */ 1672 #define WL_11N_2x2 1 1673 #define WL_11N_3x3 3 1674 #define WL_11N_4x4 4 1675 1676 /* define 11n feature disable flags */ 1677 #define WLFEATURE_DISABLE_11N 0x00000001 1678 #define WLFEATURE_DISABLE_11N_STBC_TX 0x00000002 1679 #define WLFEATURE_DISABLE_11N_STBC_RX 0x00000004 1680 #define WLFEATURE_DISABLE_11N_SGI_TX 0x00000008 1681 #define WLFEATURE_DISABLE_11N_SGI_RX 0x00000010 1682 #define WLFEATURE_DISABLE_11N_AMPDU_TX 0x00000020 1683 #define WLFEATURE_DISABLE_11N_AMPDU_RX 0x00000040 1684 #define WLFEATURE_DISABLE_11N_GF 0x00000080 1685 1686 #define WL_EVENTING_MASK_LEN 16 1687 1688 #define TOE_TX_CSUM_OL 0x00000001 1689 #define TOE_RX_CSUM_OL 0x00000002 1690 1691 #define PM_OFF 0 1692 #define PM_MAX 1 1693 #define PM_FAST 2 1694 1695 typedef enum sup_auth_status { 1696 WLC_SUP_DISCONNECTED = 0, 1697 WLC_SUP_CONNECTING, 1698 WLC_SUP_IDREQUIRED, 1699 WLC_SUP_AUTHENTICATING, 1700 WLC_SUP_AUTHENTICATED, 1701 WLC_SUP_KEYXCHANGE, 1702 WLC_SUP_KEYED, 1703 WLC_SUP_TIMEOUT, 1704 WLC_SUP_LAST_BASIC_STATE, 1705 WLC_SUP_KEYXCHANGE_WAIT_M1 = WLC_SUP_AUTHENTICATED, 1706 WLC_SUP_KEYXCHANGE_PREP_M2 = WLC_SUP_KEYXCHANGE, 1707 WLC_SUP_KEYXCHANGE_WAIT_M3 = WLC_SUP_LAST_BASIC_STATE, 1708 WLC_SUP_KEYXCHANGE_PREP_M4, 1709 WLC_SUP_KEYXCHANGE_WAIT_G1, 1710 WLC_SUP_KEYXCHANGE_PREP_G2 1711 } sup_auth_status_t; 1712 #endif /* _wlioctl_h_ */ 1713