1 /* 2 * Custom OID/ioctl definitions for 3 * Broadcom 802.11abg Networking Device Driver 4 * 5 * Definitions subject to change without notice. 6 * 7 * Copyright (C) 1999-2013, Broadcom Corporation 8 * 9 * Permission to use, copy, modify, and/or distribute this software for any 10 * purpose with or without fee is hereby granted, provided that the above 11 * copyright notice and this permission notice appear in all copies. 12 * 13 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 14 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 15 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY 16 * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 17 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION 18 * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN 19 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 20 * 21 * 22 * $Id: wlioctl.h 386120 2013-02-19 19:25:44Z $ 23 */ 24 25 #ifndef _wlioctl_h_ 26 #define _wlioctl_h_ 27 28 #include <typedefs.h> 29 #include <proto/ethernet.h> 30 #include <proto/bcmeth.h> 31 #include <proto/bcmevent.h> 32 #include <proto/802.11.h> 33 #include <bcmwifi_channels.h> 34 #include <bcmwifi_rates.h> 35 36 #ifndef LINUX_POSTMOGRIFY_REMOVAL 37 #include <bcm_mpool_pub.h> 38 #include <bcmcdc.h> 39 #endif /* LINUX_POSTMOGRIFY_REMOVAL */ 40 41 /* LINUX_POSTMOGRIFY_REMOVAL: undefined during compile phase, so its 42 * a no-op for most cases. For hybrid and other open source releases, 43 * its defined during a second pass and mogrified out for distribution. 44 */ 45 46 47 #ifndef LINUX_POSTMOGRIFY_REMOVAL 48 49 #ifndef INTF_NAME_SIZ 50 #define INTF_NAME_SIZ 16 51 #endif 52 53 /* Used to send ioctls over the transport pipe */ 54 typedef struct remote_ioctl { 55 cdc_ioctl_t msg; 56 uint data_len; 57 char intf_name[INTF_NAME_SIZ]; 58 } rem_ioctl_t; 59 #define REMOTE_SIZE sizeof(rem_ioctl_t) 60 61 62 typedef struct { 63 uint32 num; 64 chanspec_t list[1]; 65 } chanspec_list_t; 66 67 #define ACTION_FRAME_SIZE 1800 68 69 typedef struct wl_action_frame { 70 struct ether_addr da; 71 uint16 len; 72 uint32 packetId; 73 uint8 data[ACTION_FRAME_SIZE]; 74 } wl_action_frame_t; 75 76 #define WL_WIFI_ACTION_FRAME_SIZE sizeof(struct wl_action_frame) 77 78 typedef struct ssid_info 79 { 80 uint8 ssid_len; /* the length of SSID */ 81 uint8 ssid[32]; /* SSID string */ 82 } ssid_info_t; 83 84 typedef struct wl_af_params { 85 uint32 channel; 86 int32 dwell_time; 87 struct ether_addr BSSID; 88 wl_action_frame_t action_frame; 89 } wl_af_params_t; 90 91 #define WL_WIFI_AF_PARAMS_SIZE sizeof(struct wl_af_params) 92 93 #define MFP_TEST_FLAG_NORMAL 0 94 #define MFP_TEST_FLAG_ANY_KEY 1 95 typedef struct wl_sa_query { 96 uint32 flag; 97 uint8 action; 98 uint16 id; 99 struct ether_addr da; 100 } wl_sa_query_t; 101 102 #endif /* LINUX_POSTMOGRIFY_REMOVAL */ 103 104 /* require default structure packing */ 105 #define BWL_DEFAULT_PACKING 106 #include <packed_section_start.h> 107 108 109 #ifndef LINUX_POSTMOGRIFY_REMOVAL 110 /* Legacy structure to help keep backward compatible wl tool and tray app */ 111 112 #define LEGACY_WL_BSS_INFO_VERSION 107 /* older version of wl_bss_info struct */ 113 114 typedef struct wl_bss_info_107 { 115 uint32 version; /* version field */ 116 uint32 length; /* byte length of data in this record, 117 * starting at version and including IEs 118 */ 119 struct ether_addr BSSID; 120 uint16 beacon_period; /* units are Kusec */ 121 uint16 capability; /* Capability information */ 122 uint8 SSID_len; 123 uint8 SSID[32]; 124 struct { 125 uint count; /* # rates in this set */ 126 uint8 rates[16]; /* rates in 500kbps units w/hi bit set if basic */ 127 } rateset; /* supported rates */ 128 uint8 channel; /* Channel no. */ 129 uint16 atim_window; /* units are Kusec */ 130 uint8 dtim_period; /* DTIM period */ 131 int16 RSSI; /* receive signal strength (in dBm) */ 132 int8 phy_noise; /* noise (in dBm) */ 133 uint32 ie_length; /* byte length of Information Elements */ 134 /* variable length Information Elements */ 135 } wl_bss_info_107_t; 136 137 /* 138 * Per-BSS information structure. 139 */ 140 141 #define LEGACY2_WL_BSS_INFO_VERSION 108 /* old version of wl_bss_info struct */ 142 143 /* BSS info structure 144 * Applications MUST CHECK ie_offset field and length field to access IEs and 145 * next bss_info structure in a vector (in wl_scan_results_t) 146 */ 147 typedef struct wl_bss_info_108 { 148 uint32 version; /* version field */ 149 uint32 length; /* byte length of data in this record, 150 * starting at version and including IEs 151 */ 152 struct ether_addr BSSID; 153 uint16 beacon_period; /* units are Kusec */ 154 uint16 capability; /* Capability information */ 155 uint8 SSID_len; 156 uint8 SSID[32]; 157 struct { 158 uint count; /* # rates in this set */ 159 uint8 rates[16]; /* rates in 500kbps units w/hi bit set if basic */ 160 } rateset; /* supported rates */ 161 chanspec_t chanspec; /* chanspec for bss */ 162 uint16 atim_window; /* units are Kusec */ 163 uint8 dtim_period; /* DTIM period */ 164 int16 RSSI; /* receive signal strength (in dBm) */ 165 int8 phy_noise; /* noise (in dBm) */ 166 167 uint8 n_cap; /* BSS is 802.11N Capable */ 168 uint32 nbss_cap; /* 802.11N BSS Capabilities (based on HT_CAP_*) */ 169 uint8 ctl_ch; /* 802.11N BSS control channel number */ 170 uint32 reserved32[1]; /* Reserved for expansion of BSS properties */ 171 uint8 flags; /* flags */ 172 uint8 reserved[3]; /* Reserved for expansion of BSS properties */ 173 uint8 basic_mcs[MCSSET_LEN]; /* 802.11N BSS required MCS set */ 174 175 uint16 ie_offset; /* offset at which IEs start, from beginning */ 176 uint32 ie_length; /* byte length of Information Elements */ 177 /* Add new fields here */ 178 /* variable length Information Elements */ 179 } wl_bss_info_108_t; 180 181 #endif /* LINUX_POSTMOGRIFY_REMOVAL */ 182 183 #define WL_BSS_INFO_VERSION 109 /* current version of wl_bss_info struct */ 184 185 /* BSS info structure 186 * Applications MUST CHECK ie_offset field and length field to access IEs and 187 * next bss_info structure in a vector (in wl_scan_results_t) 188 */ 189 typedef struct wl_bss_info { 190 uint32 version; /* version field */ 191 uint32 length; /* byte length of data in this record, 192 * starting at version and including IEs 193 */ 194 struct ether_addr BSSID; 195 uint16 beacon_period; /* units are Kusec */ 196 uint16 capability; /* Capability information */ 197 uint8 SSID_len; 198 uint8 SSID[32]; 199 struct { 200 uint count; /* # rates in this set */ 201 uint8 rates[16]; /* rates in 500kbps units w/hi bit set if basic */ 202 } rateset; /* supported rates */ 203 chanspec_t chanspec; /* chanspec for bss */ 204 uint16 atim_window; /* units are Kusec */ 205 uint8 dtim_period; /* DTIM period */ 206 int16 RSSI; /* receive signal strength (in dBm) */ 207 int8 phy_noise; /* noise (in dBm) */ 208 209 uint8 n_cap; /* BSS is 802.11N Capable */ 210 uint32 nbss_cap; /* 802.11N+AC BSS Capabilities */ 211 uint8 ctl_ch; /* 802.11N BSS control channel number */ 212 uint8 padding1[3]; /* explicit struct alignment padding */ 213 uint16 vht_rxmcsmap; /* VHT rx mcs map (802.11ac VHT_CAP_MCS_MAP_*) */ 214 uint16 vht_txmcsmap; /* VHT tx mcs map (802.11ac VHT_CAP_MCS_MAP_*) */ 215 uint8 flags; /* flags */ 216 uint8 vht_cap; /* BSS is vht capable */ 217 uint8 reserved[2]; /* Reserved for expansion of BSS properties */ 218 uint8 basic_mcs[MCSSET_LEN]; /* 802.11N BSS required MCS set */ 219 220 uint16 ie_offset; /* offset at which IEs start, from beginning */ 221 uint32 ie_length; /* byte length of Information Elements */ 222 int16 SNR; /* average SNR of during frame reception */ 223 /* Add new fields here */ 224 /* variable length Information Elements */ 225 } wl_bss_info_t; 226 227 /* bss_info_cap_t flags */ 228 #define WL_BSS_FLAGS_FROM_BEACON 0x01 /* bss_info derived from beacon */ 229 #define WL_BSS_FLAGS_FROM_CACHE 0x02 /* bss_info collected from cache */ 230 #define WL_BSS_FLAGS_RSSI_ONCHANNEL 0x04 /* rssi info was received on channel (vs offchannel) */ 231 232 /* bssinfo flag for nbss_cap */ 233 #define VHT_BI_SGI_80MHZ 0x00000100 234 235 #ifndef LINUX_POSTMOGRIFY_REMOVAL 236 237 typedef struct wl_bsscfg { 238 uint32 wsec; 239 uint32 WPA_auth; 240 uint32 wsec_index; 241 uint32 associated; 242 uint32 BSS; 243 uint32 phytest_on; 244 struct ether_addr prev_BSSID; 245 struct ether_addr BSSID; 246 uint32 targetbss_wpa2_flags; 247 uint32 assoc_type; 248 uint32 assoc_state; 249 } wl_bsscfg_t; 250 251 typedef struct wl_bss_config { 252 uint32 atim_window; 253 uint32 beacon_period; 254 uint32 chanspec; 255 } wl_bss_config_t; 256 257 #define DLOAD_HANDLER_VER 1 /* Downloader version */ 258 #define DLOAD_FLAG_VER_MASK 0xf000 /* Downloader version mask */ 259 #define DLOAD_FLAG_VER_SHIFT 12 /* Downloader version shift */ 260 261 #define DL_CRC_NOT_INUSE 0x0001 262 263 /* generic download types & flags */ 264 enum { 265 DL_TYPE_UCODE = 1, 266 DL_TYPE_CLM = 2 267 }; 268 269 /* ucode type values */ 270 enum { 271 UCODE_FW, 272 INIT_VALS, 273 BS_INIT_VALS 274 }; 275 276 struct wl_dload_data { 277 uint16 flag; 278 uint16 dload_type; 279 uint32 len; 280 uint32 crc; 281 uint8 data[1]; 282 }; 283 typedef struct wl_dload_data wl_dload_data_t; 284 285 struct wl_ucode_info { 286 uint32 ucode_type; 287 uint32 num_chunks; 288 uint32 chunk_len; 289 uint32 chunk_num; 290 uint8 data_chunk[1]; 291 }; 292 typedef struct wl_ucode_info wl_ucode_info_t; 293 294 struct wl_clm_dload_info { 295 uint32 ds_id; 296 uint32 clm_total_len; 297 uint32 num_chunks; 298 uint32 chunk_len; 299 uint32 chunk_offset; 300 uint8 data_chunk[1]; 301 }; 302 typedef struct wl_clm_dload_info wl_clm_dload_info_t; 303 304 #endif /* LINUX_POSTMOGRIFY_REMOVAL */ 305 306 typedef struct wlc_ssid { 307 uint32 SSID_len; 308 uchar SSID[DOT11_MAX_SSID_LEN]; 309 } wlc_ssid_t; 310 311 #ifndef LINUX_POSTMOGRIFY_REMOVAL 312 313 #define MAX_PREFERRED_AP_NUM 5 314 typedef struct wlc_fastssidinfo { 315 uint32 SSID_channel[MAX_PREFERRED_AP_NUM]; 316 wlc_ssid_t SSID_info[MAX_PREFERRED_AP_NUM]; 317 } wlc_fastssidinfo_t; 318 319 typedef BWL_PRE_PACKED_STRUCT struct wnm_url { 320 uint8 len; 321 uint8 data[1]; 322 } BWL_POST_PACKED_STRUCT wnm_url_t; 323 324 typedef struct chan_scandata { 325 uint8 txpower; 326 uint8 pad; 327 chanspec_t channel; /* Channel num, bw, ctrl_sb and band */ 328 uint32 channel_mintime; 329 uint32 channel_maxtime; 330 } chan_scandata_t; 331 332 typedef enum wl_scan_type { 333 EXTDSCAN_FOREGROUND_SCAN, 334 EXTDSCAN_BACKGROUND_SCAN, 335 EXTDSCAN_FORCEDBACKGROUND_SCAN 336 } wl_scan_type_t; 337 338 #define WLC_EXTDSCAN_MAX_SSID 5 339 340 typedef struct wl_extdscan_params { 341 int8 nprobes; /* 0, passive, otherwise active */ 342 int8 split_scan; /* split scan */ 343 int8 band; /* band */ 344 int8 pad; 345 wlc_ssid_t ssid[WLC_EXTDSCAN_MAX_SSID]; /* ssid list */ 346 uint32 tx_rate; /* in 500ksec units */ 347 wl_scan_type_t scan_type; /* enum */ 348 int32 channel_num; 349 chan_scandata_t channel_list[1]; /* list of chandata structs */ 350 } wl_extdscan_params_t; 351 352 #define WL_EXTDSCAN_PARAMS_FIXED_SIZE (sizeof(wl_extdscan_params_t) - sizeof(chan_scandata_t)) 353 354 #define WL_BSSTYPE_INFRA 1 355 #define WL_BSSTYPE_INDEP 0 356 #define WL_BSSTYPE_ANY 2 357 358 /* Bitmask for scan_type */ 359 #define WL_SCANFLAGS_PASSIVE 0x01 /* force passive scan */ 360 #define WL_SCANFLAGS_RESERVED 0x02 /* Reserved */ 361 #define WL_SCANFLAGS_PROHIBITED 0x04 /* allow scanning prohibited channels */ 362 #define WL_SCANFLAGS_OFFCHAN 0x08 /* allow scanning/reporting off-channel APs */ 363 #define WL_SCANFLAGS_HOTSPOT 0x10 /* automatic ANQP to hotspot APs */ 364 365 #define WL_SCAN_PARAMS_SSID_MAX 10 366 367 typedef struct wl_scan_params { 368 wlc_ssid_t ssid; /* default: {0, ""} */ 369 struct ether_addr bssid; /* default: bcast */ 370 int8 bss_type; /* default: any, 371 * DOT11_BSSTYPE_ANY/INFRASTRUCTURE/INDEPENDENT 372 */ 373 uint8 scan_type; /* flags, 0 use default */ 374 int32 nprobes; /* -1 use default, number of probes per channel */ 375 int32 active_time; /* -1 use default, dwell time per channel for 376 * active scanning 377 */ 378 int32 passive_time; /* -1 use default, dwell time per channel 379 * for passive scanning 380 */ 381 int32 home_time; /* -1 use default, dwell time for the home channel 382 * between channel scans 383 */ 384 int32 channel_num; /* count of channels and ssids that follow 385 * 386 * low half is count of channels in channel_list, 0 387 * means default (use all available channels) 388 * 389 * high half is entries in wlc_ssid_t array that 390 * follows channel_list, aligned for int32 (4 bytes) 391 * meaning an odd channel count implies a 2-byte pad 392 * between end of channel_list and first ssid 393 * 394 * if ssid count is zero, single ssid in the fixed 395 * parameter portion is assumed, otherwise ssid in 396 * the fixed portion is ignored 397 */ 398 uint16 channel_list[1]; /* list of chanspecs */ 399 } wl_scan_params_t; 400 401 /* size of wl_scan_params not including variable length array */ 402 #define WL_SCAN_PARAMS_FIXED_SIZE 64 403 404 /* masks for channel and ssid count */ 405 #define WL_SCAN_PARAMS_COUNT_MASK 0x0000ffff 406 #define WL_SCAN_PARAMS_NSSID_SHIFT 16 407 408 #define WL_SCAN_ACTION_START 1 409 #define WL_SCAN_ACTION_CONTINUE 2 410 #define WL_SCAN_ACTION_ABORT 3 411 412 #define ISCAN_REQ_VERSION 1 413 414 /* incremental scan struct */ 415 typedef struct wl_iscan_params { 416 uint32 version; 417 uint16 action; 418 uint16 scan_duration; 419 wl_scan_params_t params; 420 } wl_iscan_params_t; 421 422 /* 3 fields + size of wl_scan_params, not including variable length array */ 423 #define WL_ISCAN_PARAMS_FIXED_SIZE (OFFSETOF(wl_iscan_params_t, params) + sizeof(wlc_ssid_t)) 424 #endif /* LINUX_POSTMOGRIFY_REMOVAL */ 425 426 typedef struct wl_scan_results { 427 uint32 buflen; 428 uint32 version; 429 uint32 count; 430 wl_bss_info_t bss_info[1]; 431 } wl_scan_results_t; 432 433 #ifndef LINUX_POSTMOGRIFY_REMOVAL 434 /* size of wl_scan_results not including variable length array */ 435 #define WL_SCAN_RESULTS_FIXED_SIZE (sizeof(wl_scan_results_t) - sizeof(wl_bss_info_t)) 436 437 /* wl_iscan_results status values */ 438 #define WL_SCAN_RESULTS_SUCCESS 0 439 #define WL_SCAN_RESULTS_PARTIAL 1 440 #define WL_SCAN_RESULTS_PENDING 2 441 #define WL_SCAN_RESULTS_ABORTED 3 442 #define WL_SCAN_RESULTS_NO_MEM 4 443 444 /* Used in EXT_STA */ 445 #define DNGL_RXCTXT_SIZE 45 446 447 448 #define ESCAN_REQ_VERSION 1 449 450 typedef struct wl_escan_params { 451 uint32 version; 452 uint16 action; 453 uint16 sync_id; 454 wl_scan_params_t params; 455 } wl_escan_params_t; 456 457 #define WL_ESCAN_PARAMS_FIXED_SIZE (OFFSETOF(wl_escan_params_t, params) + sizeof(wlc_ssid_t)) 458 459 typedef struct wl_escan_result { 460 uint32 buflen; 461 uint32 version; 462 uint16 sync_id; 463 uint16 bss_count; 464 wl_bss_info_t bss_info[1]; 465 } wl_escan_result_t; 466 467 #define WL_ESCAN_RESULTS_FIXED_SIZE (sizeof(wl_escan_result_t) - sizeof(wl_bss_info_t)) 468 469 /* incremental scan results struct */ 470 typedef struct wl_iscan_results { 471 uint32 status; 472 wl_scan_results_t results; 473 } wl_iscan_results_t; 474 475 /* size of wl_iscan_results not including variable length array */ 476 #define WL_ISCAN_RESULTS_FIXED_SIZE \ 477 (WL_SCAN_RESULTS_FIXED_SIZE + OFFSETOF(wl_iscan_results_t, results)) 478 479 typedef struct wl_probe_params { 480 wlc_ssid_t ssid; 481 struct ether_addr bssid; 482 struct ether_addr mac; 483 } wl_probe_params_t; 484 #endif /* LINUX_POSTMOGRIFY_REMOVAL */ 485 486 #define WL_MAXRATES_IN_SET 16 /* max # of rates in a rateset */ 487 typedef struct wl_rateset { 488 uint32 count; /* # rates in this set */ 489 uint8 rates[WL_MAXRATES_IN_SET]; /* rates in 500kbps units w/hi bit set if basic */ 490 } wl_rateset_t; 491 492 typedef struct wl_rateset_args { 493 uint32 count; /* # rates in this set */ 494 uint8 rates[WL_MAXRATES_IN_SET]; /* rates in 500kbps units w/hi bit set if basic */ 495 uint8 mcs[MCSSET_LEN]; /* supported mcs index bit map */ 496 uint16 vht_mcs[VHT_CAP_MCS_MAP_NSS_MAX]; /* supported mcs index bit map per nss */ 497 } wl_rateset_args_t; 498 499 /* uint32 list */ 500 typedef struct wl_uint32_list { 501 /* in - # of elements, out - # of entries */ 502 uint32 count; 503 /* variable length uint32 list */ 504 uint32 element[1]; 505 } wl_uint32_list_t; 506 507 /* used for association with a specific BSSID and chanspec list */ 508 typedef struct wl_assoc_params { 509 struct ether_addr bssid; /* 00:00:00:00:00:00: broadcast scan */ 510 uint16 bssid_cnt; /* 0: use chanspec_num, and the single bssid, 511 * otherwise count of chanspecs in chanspec_list 512 * AND paired bssids following chanspec_list 513 */ 514 int32 chanspec_num; /* 0: all available channels, 515 * otherwise count of chanspecs in chanspec_list 516 */ 517 chanspec_t chanspec_list[1]; /* list of chanspecs */ 518 } wl_assoc_params_t; 519 #define WL_ASSOC_PARAMS_FIXED_SIZE OFFSETOF(wl_assoc_params_t, chanspec_list) 520 521 /* used for reassociation/roam to a specific BSSID and channel */ 522 typedef wl_assoc_params_t wl_reassoc_params_t; 523 #define WL_REASSOC_PARAMS_FIXED_SIZE WL_ASSOC_PARAMS_FIXED_SIZE 524 525 /* used for association to a specific BSSID and channel */ 526 typedef wl_assoc_params_t wl_join_assoc_params_t; 527 #define WL_JOIN_ASSOC_PARAMS_FIXED_SIZE WL_ASSOC_PARAMS_FIXED_SIZE 528 529 /* used for join with or without a specific bssid and channel list */ 530 typedef struct wl_join_params { 531 wlc_ssid_t ssid; 532 wl_assoc_params_t params; /* optional field, but it must include the fixed portion 533 * of the wl_assoc_params_t struct when it does present. 534 */ 535 } wl_join_params_t; 536 537 #ifndef LINUX_POSTMOGRIFY_REMOVAL 538 #define WL_JOIN_PARAMS_FIXED_SIZE (OFFSETOF(wl_join_params_t, params) + \ 539 WL_ASSOC_PARAMS_FIXED_SIZE) 540 /* scan params for extended join */ 541 typedef struct wl_join_scan_params { 542 uint8 scan_type; /* 0 use default, active or passive scan */ 543 int32 nprobes; /* -1 use default, number of probes per channel */ 544 int32 active_time; /* -1 use default, dwell time per channel for 545 * active scanning 546 */ 547 int32 passive_time; /* -1 use default, dwell time per channel 548 * for passive scanning 549 */ 550 int32 home_time; /* -1 use default, dwell time for the home channel 551 * between channel scans 552 */ 553 } wl_join_scan_params_t; 554 555 /* extended join params */ 556 typedef struct wl_extjoin_params { 557 wlc_ssid_t ssid; /* {0, ""}: wildcard scan */ 558 wl_join_scan_params_t scan; 559 wl_join_assoc_params_t assoc; /* optional field, but it must include the fixed portion 560 * of the wl_join_assoc_params_t struct when it does 561 * present. 562 */ 563 } wl_extjoin_params_t; 564 #define WL_EXTJOIN_PARAMS_FIXED_SIZE (OFFSETOF(wl_extjoin_params_t, assoc) + \ 565 WL_JOIN_ASSOC_PARAMS_FIXED_SIZE) 566 567 /* All builds use the new 11ac ratespec/chanspec */ 568 #undef D11AC_IOTYPES 569 #define D11AC_IOTYPES 570 571 #ifndef D11AC_IOTYPES 572 573 /* defines used by the nrate iovar */ 574 #define NRATE_MCS_INUSE 0x00000080 /* MSC in use,indicates b0-6 holds an mcs */ 575 #define NRATE_RATE_MASK 0x0000007f /* rate/mcs value */ 576 #define NRATE_STF_MASK 0x0000ff00 /* stf mode mask: siso, cdd, stbc, sdm */ 577 #define NRATE_STF_SHIFT 8 /* stf mode shift */ 578 #define NRATE_OVERRIDE 0x80000000 /* bit indicates override both rate & mode */ 579 #define NRATE_OVERRIDE_MCS_ONLY 0x40000000 /* bit indicate to override mcs only */ 580 #define NRATE_SGI_MASK 0x00800000 /* sgi mode */ 581 #define NRATE_SGI_SHIFT 23 /* sgi mode */ 582 #define NRATE_LDPC_CODING 0x00400000 /* bit indicates adv coding in use */ 583 #define NRATE_LDPC_SHIFT 22 /* ldpc shift */ 584 585 #define NRATE_STF_SISO 0 /* stf mode SISO */ 586 #define NRATE_STF_CDD 1 /* stf mode CDD */ 587 #define NRATE_STF_STBC 2 /* stf mode STBC */ 588 #define NRATE_STF_SDM 3 /* stf mode SDM */ 589 590 #else /* D11AC_IOTYPES */ 591 592 /* WL_RSPEC defines for rate information */ 593 #define WL_RSPEC_RATE_MASK 0x000000FF /* rate or HT MCS value */ 594 #define WL_RSPEC_VHT_MCS_MASK 0x0000000F /* VHT MCS value */ 595 #define WL_RSPEC_VHT_NSS_MASK 0x000000F0 /* VHT Nss value */ 596 #define WL_RSPEC_VHT_NSS_SHIFT 4 /* VHT Nss value shift */ 597 #define WL_RSPEC_TXEXP_MASK 0x00000300 598 #define WL_RSPEC_TXEXP_SHIFT 8 599 #define WL_RSPEC_BW_MASK 0x00070000 /* bandwidth mask */ 600 #define WL_RSPEC_BW_SHIFT 16 /* bandwidth shift */ 601 #define WL_RSPEC_STBC 0x00100000 /* STBC encoding, Nsts = 2 x Nss */ 602 #define WL_RSPEC_TXBF 0x00200000 /* bit indicates TXBF mode */ 603 #define WL_RSPEC_LDPC 0x00400000 /* bit indicates adv coding in use */ 604 #define WL_RSPEC_SGI 0x00800000 /* Short GI mode */ 605 #define WL_RSPEC_ENCODING_MASK 0x03000000 /* Encoding of Rate/MCS field */ 606 #define WL_RSPEC_OVERRIDE_RATE 0x40000000 /* bit indicate to override mcs only */ 607 #define WL_RSPEC_OVERRIDE_MODE 0x80000000 /* bit indicates override both rate & mode */ 608 609 /* WL_RSPEC_ENCODING field defs */ 610 #define WL_RSPEC_ENCODE_RATE 0x00000000 /* Legacy rate is stored in RSPEC_RATE_MASK */ 611 #define WL_RSPEC_ENCODE_HT 0x01000000 /* HT MCS is stored in RSPEC_RATE_MASK */ 612 #define WL_RSPEC_ENCODE_VHT 0x02000000 /* VHT MCS and Nss is stored in RSPEC_RATE_MASK */ 613 614 /* WL_RSPEC_BW field defs */ 615 #define WL_RSPEC_BW_UNSPECIFIED 0 616 #define WL_RSPEC_BW_20MHZ 0x00010000 617 #define WL_RSPEC_BW_40MHZ 0x00020000 618 #define WL_RSPEC_BW_80MHZ 0x00030000 619 #define WL_RSPEC_BW_160MHZ 0x00040000 620 621 /* Legacy defines for the nrate iovar */ 622 #define OLD_NRATE_MCS_INUSE 0x00000080 /* MSC in use,indicates b0-6 holds an mcs */ 623 #define OLD_NRATE_RATE_MASK 0x0000007f /* rate/mcs value */ 624 #define OLD_NRATE_STF_MASK 0x0000ff00 /* stf mode mask: siso, cdd, stbc, sdm */ 625 #define OLD_NRATE_STF_SHIFT 8 /* stf mode shift */ 626 #define OLD_NRATE_OVERRIDE 0x80000000 /* bit indicates override both rate & mode */ 627 #define OLD_NRATE_OVERRIDE_MCS_ONLY 0x40000000 /* bit indicate to override mcs only */ 628 #define OLD_NRATE_SGI 0x00800000 /* sgi mode */ 629 #define OLD_NRATE_LDPC_CODING 0x00400000 /* bit indicates adv coding in use */ 630 631 #define OLD_NRATE_STF_SISO 0 /* stf mode SISO */ 632 #define OLD_NRATE_STF_CDD 1 /* stf mode CDD */ 633 #define OLD_NRATE_STF_STBC 2 /* stf mode STBC */ 634 #define OLD_NRATE_STF_SDM 3 /* stf mode SDM */ 635 636 #endif /* D11AC_IOTYPES */ 637 638 #define ANTENNA_NUM_1 1 /* total number of antennas to be used */ 639 #define ANTENNA_NUM_2 2 640 #define ANTENNA_NUM_3 3 641 #define ANTENNA_NUM_4 4 642 643 #define ANT_SELCFG_AUTO 0x80 /* bit indicates antenna sel AUTO */ 644 #define ANT_SELCFG_MASK 0x33 /* antenna configuration mask */ 645 #define ANT_SELCFG_MAX 4 /* max number of antenna configurations */ 646 #define ANT_SELCFG_TX_UNICAST 0 /* unicast tx antenna configuration */ 647 #define ANT_SELCFG_RX_UNICAST 1 /* unicast rx antenna configuration */ 648 #define ANT_SELCFG_TX_DEF 2 /* default tx antenna configuration */ 649 #define ANT_SELCFG_RX_DEF 3 /* default rx antenna configuration */ 650 651 #define MAX_STREAMS_SUPPORTED 4 /* max number of streams supported */ 652 653 typedef struct { 654 uint8 ant_config[ANT_SELCFG_MAX]; /* antenna configuration */ 655 uint8 num_antcfg; /* number of available antenna configurations */ 656 } wlc_antselcfg_t; 657 658 #define HIGHEST_SINGLE_STREAM_MCS 7 /* MCS values greater than this enable multiple streams */ 659 660 #define MAX_CCA_CHANNELS 38 /* Max number of 20 Mhz wide channels */ 661 #define MAX_CCA_SECS 60 /* CCA keeps this many seconds history */ 662 663 #define IBSS_MED 15 /* Mediom in-bss congestion percentage */ 664 #define IBSS_HI 25 /* Hi in-bss congestion percentage */ 665 #define OBSS_MED 12 666 #define OBSS_HI 25 667 #define INTERFER_MED 5 668 #define INTERFER_HI 10 669 670 #define CCA_FLAG_2G_ONLY 0x01 /* Return a channel from 2.4 Ghz band */ 671 #define CCA_FLAG_5G_ONLY 0x02 /* Return a channel from 2.4 Ghz band */ 672 #define CCA_FLAG_IGNORE_DURATION 0x04 /* Ignore dwell time for each channel */ 673 #define CCA_FLAGS_PREFER_1_6_11 0x10 674 #define CCA_FLAG_IGNORE_INTERFER 0x20 /* do not exlude channel based on interfer level */ 675 676 #define CCA_ERRNO_BAND 1 /* After filtering for band pref, no choices left */ 677 #define CCA_ERRNO_DURATION 2 /* After filtering for duration, no choices left */ 678 #define CCA_ERRNO_PREF_CHAN 3 /* After filtering for chan pref, no choices left */ 679 #define CCA_ERRNO_INTERFER 4 /* After filtering for interference, no choices left */ 680 #define CCA_ERRNO_TOO_FEW 5 /* Only 1 channel was input */ 681 682 typedef struct { 683 uint32 duration; /* millisecs spent sampling this channel */ 684 uint32 congest_ibss; /* millisecs in our bss (presumably this traffic will */ 685 /* move if cur bss moves channels) */ 686 uint32 congest_obss; /* traffic not in our bss */ 687 uint32 interference; /* millisecs detecting a non 802.11 interferer. */ 688 uint32 timestamp; /* second timestamp */ 689 } cca_congest_t; 690 691 typedef struct { 692 chanspec_t chanspec; /* Which channel? */ 693 uint8 num_secs; /* How many secs worth of data */ 694 cca_congest_t secs[1]; /* Data */ 695 } cca_congest_channel_req_t; 696 697 /* interference source detection and identification mode */ 698 #define ITFR_MODE_DISABLE 0 /* disable feature */ 699 #define ITFR_MODE_MANUAL_ENABLE 1 /* enable manual detection */ 700 #define ITFR_MODE_AUTO_ENABLE 2 /* enable auto detection */ 701 702 /* interference sources */ 703 enum interference_source { 704 ITFR_NONE = 0, /* interference */ 705 ITFR_PHONE, /* wireless phone */ 706 ITFR_VIDEO_CAMERA, /* wireless video camera */ 707 ITFR_MICROWAVE_OVEN, /* microwave oven */ 708 ITFR_BABY_MONITOR, /* wireless baby monitor */ 709 ITFR_BLUETOOTH, /* bluetooth */ 710 ITFR_VIDEO_CAMERA_OR_BABY_MONITOR, /* wireless camera or baby monitor */ 711 ITFR_BLUETOOTH_OR_BABY_MONITOR, /* bluetooth or baby monitor */ 712 ITFR_VIDEO_CAMERA_OR_PHONE, /* video camera or phone */ 713 ITFR_UNIDENTIFIED /* interference from unidentified source */ 714 }; 715 716 /* structure for interference source report */ 717 typedef struct { 718 uint32 flags; /* flags. bit definitions below */ 719 uint32 source; /* last detected interference source */ 720 uint32 timestamp; /* second timestamp on interferenced flag change */ 721 } interference_source_rep_t; 722 723 /* bit definitions for flags in interference source report */ 724 #define ITFR_INTERFERENCED 1 /* interference detected */ 725 #define ITFR_HOME_CHANNEL 2 /* home channel has interference */ 726 #define ITFR_NOISY_ENVIRONMENT 4 /* noisy environemnt so feature stopped */ 727 728 #endif /* LINUX_POSTMOGRIFY_REMOVAL */ 729 730 #define WLC_CNTRY_BUF_SZ 4 /* Country string is 3 bytes + NUL */ 731 732 #ifndef LINUX_POSTMOGRIFY_REMOVAL 733 734 typedef struct wl_country { 735 char country_abbrev[WLC_CNTRY_BUF_SZ]; /* nul-terminated country code used in 736 * the Country IE 737 */ 738 int32 rev; /* revision specifier for ccode 739 * on set, -1 indicates unspecified. 740 * on get, rev >= 0 741 */ 742 char ccode[WLC_CNTRY_BUF_SZ]; /* nul-terminated built-in country code. 743 * variable length, but fixed size in 744 * struct allows simple allocation for 745 * expected country strings <= 3 chars. 746 */ 747 } wl_country_t; 748 749 typedef struct wl_channels_in_country { 750 uint32 buflen; 751 uint32 band; 752 char country_abbrev[WLC_CNTRY_BUF_SZ]; 753 uint32 count; 754 uint32 channel[1]; 755 } wl_channels_in_country_t; 756 757 typedef struct wl_country_list { 758 uint32 buflen; 759 uint32 band_set; 760 uint32 band; 761 uint32 count; 762 char country_abbrev[1]; 763 } wl_country_list_t; 764 765 #define WL_NUM_RPI_BINS 8 766 #define WL_RM_TYPE_BASIC 1 767 #define WL_RM_TYPE_CCA 2 768 #define WL_RM_TYPE_RPI 3 769 770 #define WL_RM_FLAG_PARALLEL (1<<0) 771 772 #define WL_RM_FLAG_LATE (1<<1) 773 #define WL_RM_FLAG_INCAPABLE (1<<2) 774 #define WL_RM_FLAG_REFUSED (1<<3) 775 776 typedef struct wl_rm_req_elt { 777 int8 type; 778 int8 flags; 779 chanspec_t chanspec; 780 uint32 token; /* token for this measurement */ 781 uint32 tsf_h; /* TSF high 32-bits of Measurement start time */ 782 uint32 tsf_l; /* TSF low 32-bits */ 783 uint32 dur; /* TUs */ 784 } wl_rm_req_elt_t; 785 786 typedef struct wl_rm_req { 787 uint32 token; /* overall measurement set token */ 788 uint32 count; /* number of measurement requests */ 789 void *cb; /* completion callback function: may be NULL */ 790 void *cb_arg; /* arg to completion callback function */ 791 wl_rm_req_elt_t req[1]; /* variable length block of requests */ 792 } wl_rm_req_t; 793 #define WL_RM_REQ_FIXED_LEN OFFSETOF(wl_rm_req_t, req) 794 795 typedef struct wl_rm_rep_elt { 796 int8 type; 797 int8 flags; 798 chanspec_t chanspec; 799 uint32 token; /* token for this measurement */ 800 uint32 tsf_h; /* TSF high 32-bits of Measurement start time */ 801 uint32 tsf_l; /* TSF low 32-bits */ 802 uint32 dur; /* TUs */ 803 uint32 len; /* byte length of data block */ 804 uint8 data[1]; /* variable length data block */ 805 } wl_rm_rep_elt_t; 806 #define WL_RM_REP_ELT_FIXED_LEN 24 /* length excluding data block */ 807 808 #define WL_RPI_REP_BIN_NUM 8 809 typedef struct wl_rm_rpi_rep { 810 uint8 rpi[WL_RPI_REP_BIN_NUM]; 811 int8 rpi_max[WL_RPI_REP_BIN_NUM]; 812 } wl_rm_rpi_rep_t; 813 814 typedef struct wl_rm_rep { 815 uint32 token; /* overall measurement set token */ 816 uint32 len; /* length of measurement report block */ 817 wl_rm_rep_elt_t rep[1]; /* variable length block of reports */ 818 } wl_rm_rep_t; 819 #define WL_RM_REP_FIXED_LEN 8 820 821 822 typedef enum sup_auth_status { 823 /* Basic supplicant authentication states */ 824 WLC_SUP_DISCONNECTED = 0, 825 WLC_SUP_CONNECTING, 826 WLC_SUP_IDREQUIRED, 827 WLC_SUP_AUTHENTICATING, 828 WLC_SUP_AUTHENTICATED, 829 WLC_SUP_KEYXCHANGE, 830 WLC_SUP_KEYED, 831 WLC_SUP_TIMEOUT, 832 WLC_SUP_LAST_BASIC_STATE, 833 834 /* Extended supplicant authentication states */ 835 /* Waiting to receive handshake msg M1 */ 836 WLC_SUP_KEYXCHANGE_WAIT_M1 = WLC_SUP_AUTHENTICATED, 837 /* Preparing to send handshake msg M2 */ 838 WLC_SUP_KEYXCHANGE_PREP_M2 = WLC_SUP_KEYXCHANGE, 839 /* Waiting to receive handshake msg M3 */ 840 WLC_SUP_KEYXCHANGE_WAIT_M3 = WLC_SUP_LAST_BASIC_STATE, 841 WLC_SUP_KEYXCHANGE_PREP_M4, /* Preparing to send handshake msg M4 */ 842 WLC_SUP_KEYXCHANGE_WAIT_G1, /* Waiting to receive handshake msg G1 */ 843 WLC_SUP_KEYXCHANGE_PREP_G2 /* Preparing to send handshake msg G2 */ 844 } sup_auth_status_t; 845 #endif /* LINUX_POSTMOGRIFY_REMOVAL */ 846 847 /* Enumerate crypto algorithms */ 848 #define CRYPTO_ALGO_OFF 0 849 #define CRYPTO_ALGO_WEP1 1 850 #define CRYPTO_ALGO_TKIP 2 851 #define CRYPTO_ALGO_WEP128 3 852 #define CRYPTO_ALGO_AES_CCM 4 853 #define CRYPTO_ALGO_AES_OCB_MSDU 5 854 #define CRYPTO_ALGO_AES_OCB_MPDU 6 855 #if !defined(BCMEXTCCX) 856 #define CRYPTO_ALGO_NALG 7 857 #else 858 #define CRYPTO_ALGO_CKIP 7 859 #define CRYPTO_ALGO_CKIP_MMH 8 860 #define CRYPTO_ALGO_WEP_MMH 9 861 #define CRYPTO_ALGO_NALG 10 862 #endif 863 #define CRYPTO_ALGO_PMK 12 /* for 802.1x supp to set PMK before 4-way */ 864 #define CRYPTO_ALGO_BIP 13 /* 802.11w BIP (aes cmac) */ 865 866 #define WSEC_GEN_MIC_ERROR 0x0001 867 #define WSEC_GEN_REPLAY 0x0002 868 #define WSEC_GEN_ICV_ERROR 0x0004 869 #define WSEC_GEN_MFP_ACT_ERROR 0x0008 870 #define WSEC_GEN_MFP_DISASSOC_ERROR 0x0010 871 #define WSEC_GEN_MFP_DEAUTH_ERROR 0x0020 872 873 #define WL_SOFT_KEY (1 << 0) /* Indicates this key is using soft encrypt */ 874 #define WL_PRIMARY_KEY (1 << 1) /* Indicates this key is the primary (ie tx) key */ 875 #if defined(BCMEXTCCX) 876 #define WL_CKIP_KP (1 << 4) /* CMIC */ 877 #define WL_CKIP_MMH (1 << 5) /* CKIP */ 878 #else 879 #define WL_KF_RES_4 (1 << 4) /* Reserved for backward compat */ 880 #define WL_KF_RES_5 (1 << 5) /* Reserved for backward compat */ 881 #endif 882 #define WL_IBSS_PEER_GROUP_KEY (1 << 6) /* Indicates a group key for a IBSS PEER */ 883 884 typedef struct wl_wsec_key { 885 uint32 index; /* key index */ 886 uint32 len; /* key length */ 887 uint8 data[DOT11_MAX_KEY_SIZE]; /* key data */ 888 uint32 pad_1[18]; 889 uint32 algo; /* CRYPTO_ALGO_AES_CCM, CRYPTO_ALGO_WEP128, etc */ 890 uint32 flags; /* misc flags */ 891 uint32 pad_2[2]; 892 int pad_3; 893 int iv_initialized; /* has IV been initialized already? */ 894 int pad_4; 895 /* Rx IV */ 896 struct { 897 uint32 hi; /* upper 32 bits of IV */ 898 uint16 lo; /* lower 16 bits of IV */ 899 } rxiv; 900 uint32 pad_5[2]; 901 struct ether_addr ea; /* per station */ 902 } wl_wsec_key_t; 903 904 #define WSEC_MIN_PSK_LEN 8 905 #define WSEC_MAX_PSK_LEN 64 906 907 /* Flag for key material needing passhash'ing */ 908 #define WSEC_PASSPHRASE (1<<0) 909 910 /* receptacle for WLC_SET_WSEC_PMK parameter */ 911 typedef struct { 912 ushort key_len; /* octets in key material */ 913 ushort flags; /* key handling qualification */ 914 uint8 key[WSEC_MAX_PSK_LEN]; /* PMK material */ 915 } wsec_pmk_t; 916 917 /* wireless security bitvec */ 918 #define WEP_ENABLED 0x0001 919 #define TKIP_ENABLED 0x0002 920 #define AES_ENABLED 0x0004 921 #define WSEC_SWFLAG 0x0008 922 #define SES_OW_ENABLED 0x0040 /* to go into transition mode without setting wep */ 923 924 /* wsec macros for operating on the above definitions */ 925 #define WSEC_WEP_ENABLED(wsec) ((wsec) & WEP_ENABLED) 926 #define WSEC_TKIP_ENABLED(wsec) ((wsec) & TKIP_ENABLED) 927 #define WSEC_AES_ENABLED(wsec) ((wsec) & AES_ENABLED) 928 929 #define WSEC_ENABLED(wsec) ((wsec) & (WEP_ENABLED | TKIP_ENABLED | AES_ENABLED)) 930 #define WSEC_SES_OW_ENABLED(wsec) ((wsec) & SES_OW_ENABLED) 931 932 #define MFP_CAPABLE 0x0200 933 #define MFP_REQUIRED 0x0400 934 #define MFP_SHA256 0x0800 /* a special configuration for STA for WIFI test tool */ 935 936 /* WPA authentication mode bitvec */ 937 #define WPA_AUTH_DISABLED 0x0000 /* Legacy (i.e., non-WPA) */ 938 #define WPA_AUTH_NONE 0x0001 /* none (IBSS) */ 939 #define WPA_AUTH_UNSPECIFIED 0x0002 /* over 802.1x */ 940 #define WPA_AUTH_PSK 0x0004 /* Pre-shared key */ 941 #if defined(BCMEXTCCX) 942 #define WPA_AUTH_CCKM 0x0008 /* CCKM */ 943 #define WPA2_AUTH_CCKM 0x0010 /* CCKM2 */ 944 #endif 945 /* #define WPA_AUTH_8021X 0x0020 */ /* 802.1x, reserved */ 946 #define WPA2_AUTH_UNSPECIFIED 0x0040 /* over 802.1x */ 947 #define WPA2_AUTH_PSK 0x0080 /* Pre-shared key */ 948 #define BRCM_AUTH_PSK 0x0100 /* BRCM specific PSK */ 949 #define BRCM_AUTH_DPT 0x0200 /* DPT PSK without group keys */ 950 #define WPA2_AUTH_MFP 0x1000 /* MFP (11w) in contrast to CCX */ 951 #define WPA2_AUTH_TPK 0x2000 /* TDLS Peer Key */ 952 #define WPA2_AUTH_FT 0x4000 /* Fast Transition. */ 953 #define WPA_AUTH_PFN_ANY 0xffffffff /* for PFN, match only ssid */ 954 955 /* pmkid */ 956 #define MAXPMKID 16 957 958 typedef struct _pmkid { 959 struct ether_addr BSSID; 960 uint8 PMKID[WPA2_PMKID_LEN]; 961 } pmkid_t; 962 963 typedef struct _pmkid_list { 964 uint32 npmkid; 965 pmkid_t pmkid[1]; 966 } pmkid_list_t; 967 968 typedef struct _pmkid_cand { 969 struct ether_addr BSSID; 970 uint8 preauth; 971 } pmkid_cand_t; 972 973 typedef struct _pmkid_cand_list { 974 uint32 npmkid_cand; 975 pmkid_cand_t pmkid_cand[1]; 976 } pmkid_cand_list_t; 977 978 #ifndef LINUX_POSTMOGRIFY_REMOVAL 979 typedef struct wl_assoc_info { 980 uint32 req_len; 981 uint32 resp_len; 982 uint32 flags; 983 struct dot11_assoc_req req; 984 struct ether_addr reassoc_bssid; /* used in reassoc's */ 985 struct dot11_assoc_resp resp; 986 } wl_assoc_info_t; 987 988 /* flags */ 989 #define WLC_ASSOC_REQ_IS_REASSOC 0x01 /* assoc req was actually a reassoc */ 990 991 typedef struct wl_led_info { 992 uint32 index; /* led index */ 993 uint32 behavior; 994 uint8 activehi; 995 } wl_led_info_t; 996 997 998 /* srom read/write struct passed through ioctl */ 999 typedef struct { 1000 uint byteoff; /* byte offset */ 1001 uint nbytes; /* number of bytes */ 1002 uint16 buf[1]; 1003 } srom_rw_t; 1004 1005 /* similar cis (srom or otp) struct [iovar: may not be aligned] */ 1006 typedef struct { 1007 uint32 source; /* cis source */ 1008 uint32 byteoff; /* byte offset */ 1009 uint32 nbytes; /* number of bytes */ 1010 /* data follows here */ 1011 } cis_rw_t; 1012 1013 #define WLC_CIS_DEFAULT 0 /* built-in default */ 1014 #define WLC_CIS_SROM 1 /* source is sprom */ 1015 #define WLC_CIS_OTP 2 /* source is otp */ 1016 1017 /* R_REG and W_REG struct passed through ioctl */ 1018 typedef struct { 1019 uint32 byteoff; /* byte offset of the field in d11regs_t */ 1020 uint32 val; /* read/write value of the field */ 1021 uint32 size; /* sizeof the field */ 1022 uint band; /* band (optional) */ 1023 } rw_reg_t; 1024 1025 /* Structure used by GET/SET_ATTEN ioctls - it controls power in b/g-band */ 1026 /* PCL - Power Control Loop */ 1027 /* current gain setting is replaced by user input */ 1028 #define WL_ATTEN_APP_INPUT_PCL_OFF 0 /* turn off PCL, apply supplied input */ 1029 #define WL_ATTEN_PCL_ON 1 /* turn on PCL */ 1030 /* current gain setting is maintained */ 1031 #define WL_ATTEN_PCL_OFF 2 /* turn off PCL. */ 1032 1033 typedef struct { 1034 uint16 auto_ctrl; /* WL_ATTEN_XX */ 1035 uint16 bb; /* Baseband attenuation */ 1036 uint16 radio; /* Radio attenuation */ 1037 uint16 txctl1; /* Radio TX_CTL1 value */ 1038 } atten_t; 1039 1040 /* Per-AC retry parameters */ 1041 struct wme_tx_params_s { 1042 uint8 short_retry; 1043 uint8 short_fallback; 1044 uint8 long_retry; 1045 uint8 long_fallback; 1046 uint16 max_rate; /* In units of 512 Kbps */ 1047 }; 1048 1049 typedef struct wme_tx_params_s wme_tx_params_t; 1050 1051 #define WL_WME_TX_PARAMS_IO_BYTES (sizeof(wme_tx_params_t) * AC_COUNT) 1052 1053 typedef struct wl_plc_nodelist { 1054 uint count; /* Number of nodes */ 1055 struct _node { 1056 struct ether_addr ea; /* Node ether address */ 1057 uint32 node_type; /* Node type */ 1058 uint32 cost; /* PLC affinity */ 1059 } node[1]; 1060 } wl_plc_nodelist_t; 1061 1062 typedef struct wl_plc_params { 1063 uint32 cmd; /* Command */ 1064 bool plc_failover; /* PLC failover control/status */ 1065 struct ether_addr node_ea; /* Node ether address */ 1066 uint32 cost; /* Link cost or mac cost */ 1067 } wl_plc_params_t; 1068 1069 #define PLC_CMD_FAILOVER 1 1070 #define PLC_CMD_MAC_COST 2 1071 #define PLC_CMD_LINK_COST 3 1072 #define PLC_CMD_NODE_LIST 4 1073 1074 #define NODE_TYPE_UNKNOWN 0 /* Unknown link */ 1075 #define NODE_TYPE_WIFI_ONLY 1 /* Pure Wireless STA node */ 1076 #define NODE_TYPE_PLC_ONLY 2 /* Pure PLC only node */ 1077 #define NODE_TYPE_WIFI_PLC 3 /* WiFi PLC capable node */ 1078 1079 /* defines used by poweridx iovar - it controls power in a-band */ 1080 /* current gain setting is maintained */ 1081 #define WL_PWRIDX_PCL_OFF -2 /* turn off PCL. */ 1082 #define WL_PWRIDX_PCL_ON -1 /* turn on PCL */ 1083 #define WL_PWRIDX_LOWER_LIMIT -2 /* lower limit */ 1084 #define WL_PWRIDX_UPPER_LIMIT 63 /* upper limit */ 1085 /* value >= 0 causes 1086 * - input to be set to that value 1087 * - PCL to be off 1088 */ 1089 1090 /* Used to get specific link/ac parameters */ 1091 typedef struct { 1092 int ac; 1093 uint8 val; 1094 struct ether_addr ea; 1095 } link_val_t; 1096 1097 #define BCM_MAC_STATUS_INDICATION (0x40010200L) 1098 1099 typedef struct { 1100 uint16 ver; /* version of this struct */ 1101 uint16 len; /* length in bytes of this structure */ 1102 uint16 cap; /* sta's advertised capabilities */ 1103 uint32 flags; /* flags defined below */ 1104 uint32 idle; /* time since data pkt rx'd from sta */ 1105 struct ether_addr ea; /* Station address */ 1106 wl_rateset_t rateset; /* rateset in use */ 1107 uint32 in; /* seconds elapsed since associated */ 1108 uint32 listen_interval_inms; /* Min Listen interval in ms for this STA */ 1109 uint32 tx_pkts; /* # of packets transmitted */ 1110 uint32 tx_failures; /* # of packets failed */ 1111 uint32 rx_ucast_pkts; /* # of unicast packets received */ 1112 uint32 rx_mcast_pkts; /* # of multicast packets received */ 1113 uint32 tx_rate; /* Rate of last successful tx frame */ 1114 uint32 rx_rate; /* Rate of last successful rx frame */ 1115 uint32 rx_decrypt_succeeds; /* # of packet decrypted successfully */ 1116 uint32 rx_decrypt_failures; /* # of packet decrypted unsuccessfully */ 1117 } sta_info_t; 1118 1119 #define WL_OLD_STAINFO_SIZE OFFSETOF(sta_info_t, tx_pkts) 1120 1121 #define WL_STA_VER 3 1122 1123 /* Flags for sta_info_t indicating properties of STA */ 1124 #define WL_STA_BRCM 0x1 /* Running a Broadcom driver */ 1125 #define WL_STA_WME 0x2 /* WMM association */ 1126 #define WL_STA_UNUSED 0x4 1127 #define WL_STA_AUTHE 0x8 /* Authenticated */ 1128 #define WL_STA_ASSOC 0x10 /* Associated */ 1129 #define WL_STA_AUTHO 0x20 /* Authorized */ 1130 #define WL_STA_WDS 0x40 /* Wireless Distribution System */ 1131 #define WL_STA_WDS_LINKUP 0x80 /* WDS traffic/probes flowing properly */ 1132 #define WL_STA_PS 0x100 /* STA is in power save mode from AP's viewpoint */ 1133 #define WL_STA_APSD_BE 0x200 /* APSD delv/trigger for AC_BE is default enabled */ 1134 #define WL_STA_APSD_BK 0x400 /* APSD delv/trigger for AC_BK is default enabled */ 1135 #define WL_STA_APSD_VI 0x800 /* APSD delv/trigger for AC_VI is default enabled */ 1136 #define WL_STA_APSD_VO 0x1000 /* APSD delv/trigger for AC_VO is default enabled */ 1137 #define WL_STA_N_CAP 0x2000 /* STA 802.11n capable */ 1138 #define WL_STA_SCBSTATS 0x4000 /* Per STA debug stats */ 1139 1140 #define WL_WDS_LINKUP WL_STA_WDS_LINKUP /* deprecated */ 1141 1142 /* Values for TX Filter override mode */ 1143 #define WLC_TXFILTER_OVERRIDE_DISABLED 0 1144 #define WLC_TXFILTER_OVERRIDE_ENABLED 1 1145 1146 #endif /* LINUX_POSTMOGRIFY_REMOVAL */ 1147 1148 /* Used to get specific STA parameters */ 1149 typedef struct { 1150 uint32 val; 1151 struct ether_addr ea; 1152 } scb_val_t; 1153 1154 /* Used by iovar versions of some ioctls, i.e. WLC_SCB_AUTHORIZE et al */ 1155 typedef struct { 1156 uint32 code; 1157 scb_val_t ioctl_args; 1158 } authops_t; 1159 1160 /* channel encoding */ 1161 typedef struct channel_info { 1162 int hw_channel; 1163 int target_channel; 1164 int scan_channel; 1165 } channel_info_t; 1166 1167 /* For ioctls that take a list of MAC addresses */ 1168 struct maclist { 1169 uint count; /* number of MAC addresses */ 1170 struct ether_addr ea[1]; /* variable length array of MAC addresses */ 1171 }; 1172 1173 #ifndef LINUX_POSTMOGRIFY_REMOVAL 1174 /* get pkt count struct passed through ioctl */ 1175 typedef struct get_pktcnt { 1176 uint rx_good_pkt; 1177 uint rx_bad_pkt; 1178 uint tx_good_pkt; 1179 uint tx_bad_pkt; 1180 uint rx_ocast_good_pkt; /* unicast packets destined for others */ 1181 } get_pktcnt_t; 1182 1183 /* NINTENDO2 */ 1184 #define LQ_IDX_MIN 0 1185 #define LQ_IDX_MAX 1 1186 #define LQ_IDX_AVG 2 1187 #define LQ_IDX_SUM 2 1188 #define LQ_IDX_LAST 3 1189 #define LQ_STOP_MONITOR 0 1190 #define LQ_START_MONITOR 1 1191 1192 /* Get averages RSSI, Rx PHY rate and SNR values */ 1193 typedef struct { 1194 int rssi[LQ_IDX_LAST]; /* Array to keep min, max, avg rssi */ 1195 int snr[LQ_IDX_LAST]; /* Array to keep min, max, avg snr */ 1196 int isvalid; /* Flag indicating whether above data is valid */ 1197 } wl_lq_t; /* Link Quality */ 1198 1199 typedef enum wl_wakeup_reason_type { 1200 LCD_ON = 1, 1201 LCD_OFF, 1202 DRC1_WAKE, 1203 DRC2_WAKE, 1204 REASON_LAST 1205 } wl_wr_type_t; 1206 1207 typedef struct { 1208 /* Unique filter id */ 1209 uint32 id; 1210 1211 /* stores the reason for the last wake up */ 1212 uint8 reason; 1213 } wl_wr_t; 1214 1215 /* Get MAC specific rate histogram command */ 1216 typedef struct { 1217 struct ether_addr ea; /* MAC Address */ 1218 uint8 ac_cat; /* Access Category */ 1219 uint8 num_pkts; /* Number of packet entries to be averaged */ 1220 } wl_mac_ratehisto_cmd_t; /* MAC Specific Rate Histogram command */ 1221 1222 /* Get MAC rate histogram response */ 1223 typedef struct { 1224 uint32 rate[DOT11_RATE_MAX + 1]; /* Rates */ 1225 uint32 mcs[WL_RATESET_SZ_HT_MCS * WL_TX_CHAINS_MAX]; /* MCS counts */ 1226 uint32 vht[WL_RATESET_SZ_VHT_MCS][WL_TX_CHAINS_MAX]; /* VHT counts */ 1227 uint32 tsf_timer[2][2]; /* Start and End time for 8bytes value */ 1228 } wl_mac_ratehisto_res_t; /* MAC Specific Rate Histogram Response */ 1229 1230 /* Values for TX Filter override mode */ 1231 #define WLC_TXFILTER_OVERRIDE_DISABLED 0 1232 #define WLC_TXFILTER_OVERRIDE_ENABLED 1 1233 1234 #define WL_IOCTL_ACTION_GET 0x0 1235 #define WL_IOCTL_ACTION_SET 0x1 1236 #define WL_IOCTL_ACTION_OVL_IDX_MASK 0x1e 1237 #define WL_IOCTL_ACTION_OVL_RSV 0x20 1238 #define WL_IOCTL_ACTION_OVL 0x40 1239 #define WL_IOCTL_ACTION_MASK 0x7e 1240 #define WL_IOCTL_ACTION_OVL_SHIFT 1 1241 1242 #endif /* LINUX_POSTMOGRIFY_REMOVAL */ 1243 1244 /* Linux network driver ioctl encoding */ 1245 typedef struct wl_ioctl { 1246 uint cmd; /* common ioctl definition */ 1247 void *buf; /* pointer to user buffer */ 1248 uint len; /* length of user buffer */ 1249 uint8 set; /* 1=set IOCTL; 0=query IOCTL */ 1250 uint used; /* bytes read or written (optional) */ 1251 uint needed; /* bytes needed (optional) */ 1252 } wl_ioctl_t; 1253 1254 #ifndef LINUX_POSTMOGRIFY_REMOVAL 1255 1256 /* reference to wl_ioctl_t struct used by usermode driver */ 1257 #define ioctl_subtype set /* subtype param */ 1258 #define ioctl_pid used /* pid param */ 1259 #define ioctl_status needed /* status param */ 1260 1261 /* 1262 * Structure for passing hardware and software 1263 * revision info up from the driver. 1264 */ 1265 typedef struct wlc_rev_info { 1266 uint vendorid; /* PCI vendor id */ 1267 uint deviceid; /* device id of chip */ 1268 uint radiorev; /* radio revision */ 1269 uint chiprev; /* chip revision */ 1270 uint corerev; /* core revision */ 1271 uint boardid; /* board identifier (usu. PCI sub-device id) */ 1272 uint boardvendor; /* board vendor (usu. PCI sub-vendor id) */ 1273 uint boardrev; /* board revision */ 1274 uint driverrev; /* driver version */ 1275 uint ucoderev; /* microcode version */ 1276 uint bus; /* bus type */ 1277 uint chipnum; /* chip number */ 1278 uint phytype; /* phy type */ 1279 uint phyrev; /* phy revision */ 1280 uint anarev; /* anacore rev */ 1281 uint chippkg; /* chip package info */ 1282 uint nvramrev; /* nvram revision number */ 1283 } wlc_rev_info_t; 1284 1285 #define WL_REV_INFO_LEGACY_LENGTH 48 1286 1287 #define WL_BRAND_MAX 10 1288 typedef struct wl_instance_info { 1289 uint instance; 1290 char brand[WL_BRAND_MAX]; 1291 } wl_instance_info_t; 1292 1293 /* structure to change size of tx fifo */ 1294 typedef struct wl_txfifo_sz { 1295 uint16 magic; 1296 uint16 fifo; 1297 uint16 size; 1298 } wl_txfifo_sz_t; 1299 /* magic pattern used for mismatch driver and wl */ 1300 #define WL_TXFIFO_SZ_MAGIC 0xa5a5 1301 1302 /* Transfer info about an IOVar from the driver */ 1303 /* Max supported IOV name size in bytes, + 1 for nul termination */ 1304 #define WLC_IOV_NAME_LEN 30 1305 typedef struct wlc_iov_trx_s { 1306 uint8 module; 1307 uint8 type; 1308 char name[WLC_IOV_NAME_LEN]; 1309 } wlc_iov_trx_t; 1310 1311 /* check this magic number */ 1312 #define WLC_IOCTL_MAGIC 0x14e46c77 1313 1314 /* bump this number if you change the ioctl interface */ 1315 #ifdef D11AC_IOTYPES 1316 #define WLC_IOCTL_VERSION 2 1317 #define WLC_IOCTL_VERSION_LEGACY_IOTYPES 1 1318 #else 1319 #define WLC_IOCTL_VERSION 1 1320 #endif /* D11AC_IOTYPES */ 1321 #endif /* LINUX_POSTMOGRIFY_REMOVAL */ 1322 1323 #define WLC_IOCTL_MAXLEN 8192 /* max length ioctl buffer required */ 1324 #define WLC_IOCTL_SMLEN 256 /* "small" length ioctl buffer required */ 1325 #define WLC_IOCTL_MEDLEN 1536 /* "med" length ioctl buffer required */ 1326 #if defined(LCNCONF) || defined(LCN40CONF) 1327 #define WLC_SAMPLECOLLECT_MAXLEN 8192 /* Max Sample Collect buffer */ 1328 #else 1329 #define WLC_SAMPLECOLLECT_MAXLEN 10240 /* Max Sample Collect buffer for two cores */ 1330 #endif 1331 1332 /* common ioctl definitions */ 1333 #define WLC_GET_MAGIC 0 1334 #define WLC_GET_VERSION 1 1335 #define WLC_UP 2 1336 #define WLC_DOWN 3 1337 #define WLC_GET_LOOP 4 1338 #define WLC_SET_LOOP 5 1339 #define WLC_DUMP 6 1340 #define WLC_GET_MSGLEVEL 7 1341 #define WLC_SET_MSGLEVEL 8 1342 #define WLC_GET_PROMISC 9 1343 #define WLC_SET_PROMISC 10 1344 /* #define WLC_OVERLAY_IOCTL 11 */ /* not supported */ 1345 #define WLC_GET_RATE 12 1346 #define WLC_GET_MAX_RATE 13 1347 #define WLC_GET_INSTANCE 14 1348 /* #define WLC_GET_FRAG 15 */ /* no longer supported */ 1349 /* #define WLC_SET_FRAG 16 */ /* no longer supported */ 1350 /* #define WLC_GET_RTS 17 */ /* no longer supported */ 1351 /* #define WLC_SET_RTS 18 */ /* no longer supported */ 1352 #define WLC_GET_INFRA 19 1353 #define WLC_SET_INFRA 20 1354 #define WLC_GET_AUTH 21 1355 #define WLC_SET_AUTH 22 1356 #define WLC_GET_BSSID 23 1357 #define WLC_SET_BSSID 24 1358 #define WLC_GET_SSID 25 1359 #define WLC_SET_SSID 26 1360 #define WLC_RESTART 27 1361 #define WLC_TERMINATED 28 1362 /* #define WLC_DUMP_SCB 28 */ /* no longer supported */ 1363 #define WLC_GET_CHANNEL 29 1364 #define WLC_SET_CHANNEL 30 1365 #define WLC_GET_SRL 31 1366 #define WLC_SET_SRL 32 1367 #define WLC_GET_LRL 33 1368 #define WLC_SET_LRL 34 1369 #define WLC_GET_PLCPHDR 35 1370 #define WLC_SET_PLCPHDR 36 1371 #define WLC_GET_RADIO 37 1372 #define WLC_SET_RADIO 38 1373 #define WLC_GET_PHYTYPE 39 1374 #define WLC_DUMP_RATE 40 1375 #define WLC_SET_RATE_PARAMS 41 1376 #define WLC_GET_FIXRATE 42 1377 #define WLC_SET_FIXRATE 43 1378 /* #define WLC_GET_WEP 42 */ /* no longer supported */ 1379 /* #define WLC_SET_WEP 43 */ /* no longer supported */ 1380 #define WLC_GET_KEY 44 1381 #define WLC_SET_KEY 45 1382 #define WLC_GET_REGULATORY 46 1383 #define WLC_SET_REGULATORY 47 1384 #define WLC_GET_PASSIVE_SCAN 48 1385 #define WLC_SET_PASSIVE_SCAN 49 1386 #define WLC_SCAN 50 1387 #define WLC_SCAN_RESULTS 51 1388 #define WLC_DISASSOC 52 1389 #define WLC_REASSOC 53 1390 #define WLC_GET_ROAM_TRIGGER 54 1391 #define WLC_SET_ROAM_TRIGGER 55 1392 #define WLC_GET_ROAM_DELTA 56 1393 #define WLC_SET_ROAM_DELTA 57 1394 #define WLC_GET_ROAM_SCAN_PERIOD 58 1395 #define WLC_SET_ROAM_SCAN_PERIOD 59 1396 #define WLC_EVM 60 /* diag */ 1397 #define WLC_GET_TXANT 61 1398 #define WLC_SET_TXANT 62 1399 #define WLC_GET_ANTDIV 63 1400 #define WLC_SET_ANTDIV 64 1401 /* #define WLC_GET_TXPWR 65 */ /* no longer supported */ 1402 /* #define WLC_SET_TXPWR 66 */ /* no longer supported */ 1403 #define WLC_GET_CLOSED 67 1404 #define WLC_SET_CLOSED 68 1405 #define WLC_GET_MACLIST 69 1406 #define WLC_SET_MACLIST 70 1407 #define WLC_GET_RATESET 71 1408 #define WLC_SET_RATESET 72 1409 /* #define WLC_GET_LOCALE 73 */ /* no longer supported */ 1410 #define WLC_LONGTRAIN 74 1411 #define WLC_GET_BCNPRD 75 1412 #define WLC_SET_BCNPRD 76 1413 #define WLC_GET_DTIMPRD 77 1414 #define WLC_SET_DTIMPRD 78 1415 #define WLC_GET_SROM 79 1416 #define WLC_SET_SROM 80 1417 #define WLC_GET_WEP_RESTRICT 81 1418 #define WLC_SET_WEP_RESTRICT 82 1419 #define WLC_GET_COUNTRY 83 1420 #define WLC_SET_COUNTRY 84 1421 #define WLC_GET_PM 85 1422 #define WLC_SET_PM 86 1423 #define WLC_GET_WAKE 87 1424 #define WLC_SET_WAKE 88 1425 /* #define WLC_GET_D11CNTS 89 */ /* -> "counters" iovar */ 1426 #define WLC_GET_FORCELINK 90 /* ndis only */ 1427 #define WLC_SET_FORCELINK 91 /* ndis only */ 1428 #define WLC_FREQ_ACCURACY 92 /* diag */ 1429 #define WLC_CARRIER_SUPPRESS 93 /* diag */ 1430 #define WLC_GET_PHYREG 94 1431 #define WLC_SET_PHYREG 95 1432 #define WLC_GET_RADIOREG 96 1433 #define WLC_SET_RADIOREG 97 1434 #define WLC_GET_REVINFO 98 1435 #define WLC_GET_UCANTDIV 99 1436 #define WLC_SET_UCANTDIV 100 1437 #define WLC_R_REG 101 1438 #define WLC_W_REG 102 1439 /* #define WLC_DIAG_LOOPBACK 103 old tray diag */ 1440 /* #define WLC_RESET_D11CNTS 104 */ /* -> "reset_d11cnts" iovar */ 1441 #define WLC_GET_MACMODE 105 1442 #define WLC_SET_MACMODE 106 1443 #define WLC_GET_MONITOR 107 1444 #define WLC_SET_MONITOR 108 1445 #define WLC_GET_GMODE 109 1446 #define WLC_SET_GMODE 110 1447 #define WLC_GET_LEGACY_ERP 111 1448 #define WLC_SET_LEGACY_ERP 112 1449 #define WLC_GET_RX_ANT 113 1450 #define WLC_GET_CURR_RATESET 114 /* current rateset */ 1451 #define WLC_GET_SCANSUPPRESS 115 1452 #define WLC_SET_SCANSUPPRESS 116 1453 #define WLC_GET_AP 117 1454 #define WLC_SET_AP 118 1455 #define WLC_GET_EAP_RESTRICT 119 1456 #define WLC_SET_EAP_RESTRICT 120 1457 #define WLC_SCB_AUTHORIZE 121 1458 #define WLC_SCB_DEAUTHORIZE 122 1459 #define WLC_GET_WDSLIST 123 1460 #define WLC_SET_WDSLIST 124 1461 #define WLC_GET_ATIM 125 1462 #define WLC_SET_ATIM 126 1463 #define WLC_GET_RSSI 127 1464 #define WLC_GET_PHYANTDIV 128 1465 #define WLC_SET_PHYANTDIV 129 1466 #define WLC_AP_RX_ONLY 130 1467 #define WLC_GET_TX_PATH_PWR 131 1468 #define WLC_SET_TX_PATH_PWR 132 1469 #define WLC_GET_WSEC 133 1470 #define WLC_SET_WSEC 134 1471 #define WLC_GET_PHY_NOISE 135 1472 #define WLC_GET_BSS_INFO 136 1473 #define WLC_GET_PKTCNTS 137 1474 #define WLC_GET_LAZYWDS 138 1475 #define WLC_SET_LAZYWDS 139 1476 #define WLC_GET_BANDLIST 140 1477 1478 #ifndef LINUX_POSTMOGRIFY_REMOVAL 1479 #define WLC_GET_BAND 141 1480 #define WLC_SET_BAND 142 1481 #define WLC_SCB_DEAUTHENTICATE 143 1482 #define WLC_GET_SHORTSLOT 144 1483 #define WLC_GET_SHORTSLOT_OVERRIDE 145 1484 #define WLC_SET_SHORTSLOT_OVERRIDE 146 1485 #define WLC_GET_SHORTSLOT_RESTRICT 147 1486 #define WLC_SET_SHORTSLOT_RESTRICT 148 1487 #define WLC_GET_GMODE_PROTECTION 149 1488 #define WLC_GET_GMODE_PROTECTION_OVERRIDE 150 1489 #define WLC_SET_GMODE_PROTECTION_OVERRIDE 151 1490 #define WLC_UPGRADE 152 1491 /* #define WLC_GET_MRATE 153 */ /* no longer supported */ 1492 /* #define WLC_SET_MRATE 154 */ /* no longer supported */ 1493 #define WLC_GET_IGNORE_BCNS 155 1494 #define WLC_SET_IGNORE_BCNS 156 1495 #define WLC_GET_SCB_TIMEOUT 157 1496 #define WLC_SET_SCB_TIMEOUT 158 1497 #define WLC_GET_ASSOCLIST 159 1498 #define WLC_GET_CLK 160 1499 #define WLC_SET_CLK 161 1500 #define WLC_GET_UP 162 1501 #define WLC_OUT 163 1502 #define WLC_GET_WPA_AUTH 164 1503 #define WLC_SET_WPA_AUTH 165 1504 #define WLC_GET_UCFLAGS 166 1505 #define WLC_SET_UCFLAGS 167 1506 #define WLC_GET_PWRIDX 168 1507 #define WLC_SET_PWRIDX 169 1508 #define WLC_GET_TSSI 170 1509 #define WLC_GET_SUP_RATESET_OVERRIDE 171 1510 #define WLC_SET_SUP_RATESET_OVERRIDE 172 1511 /* #define WLC_SET_FAST_TIMER 173 */ /* no longer supported */ 1512 /* #define WLC_GET_FAST_TIMER 174 */ /* no longer supported */ 1513 /* #define WLC_SET_SLOW_TIMER 175 */ /* no longer supported */ 1514 /* #define WLC_GET_SLOW_TIMER 176 */ /* no longer supported */ 1515 /* #define WLC_DUMP_PHYREGS 177 */ /* no longer supported */ 1516 #define WLC_GET_PROTECTION_CONTROL 178 1517 #define WLC_SET_PROTECTION_CONTROL 179 1518 #endif /* LINUX_POSTMOGRIFY_REMOVAL */ 1519 #define WLC_GET_PHYLIST 180 1520 #ifndef LINUX_POSTMOGRIFY_REMOVAL 1521 #define WLC_ENCRYPT_STRENGTH 181 /* ndis only */ 1522 #define WLC_DECRYPT_STATUS 182 /* ndis only */ 1523 #define WLC_GET_KEY_SEQ 183 1524 #define WLC_GET_SCAN_CHANNEL_TIME 184 1525 #define WLC_SET_SCAN_CHANNEL_TIME 185 1526 #define WLC_GET_SCAN_UNASSOC_TIME 186 1527 #define WLC_SET_SCAN_UNASSOC_TIME 187 1528 #define WLC_GET_SCAN_HOME_TIME 188 1529 #define WLC_SET_SCAN_HOME_TIME 189 1530 #define WLC_GET_SCAN_NPROBES 190 1531 #define WLC_SET_SCAN_NPROBES 191 1532 #define WLC_GET_PRB_RESP_TIMEOUT 192 1533 #define WLC_SET_PRB_RESP_TIMEOUT 193 1534 #define WLC_GET_ATTEN 194 1535 #define WLC_SET_ATTEN 195 1536 #define WLC_GET_SHMEM 196 /* diag */ 1537 #define WLC_SET_SHMEM 197 /* diag */ 1538 /* #define WLC_GET_GMODE_PROTECTION_CTS 198 */ /* no longer supported */ 1539 /* #define WLC_SET_GMODE_PROTECTION_CTS 199 */ /* no longer supported */ 1540 #define WLC_SET_WSEC_TEST 200 1541 #endif /* LINUX_POSTMOGRIFY_REMOVAL */ 1542 #define WLC_SCB_DEAUTHENTICATE_FOR_REASON 201 1543 #ifndef LINUX_POSTMOGRIFY_REMOVAL 1544 #define WLC_TKIP_COUNTERMEASURES 202 1545 #define WLC_GET_PIOMODE 203 1546 #define WLC_SET_PIOMODE 204 1547 #define WLC_SET_ASSOC_PREFER 205 1548 #define WLC_GET_ASSOC_PREFER 206 1549 #define WLC_SET_ROAM_PREFER 207 1550 #define WLC_GET_ROAM_PREFER 208 1551 #define WLC_SET_LED 209 1552 #define WLC_GET_LED 210 1553 #define WLC_GET_INTERFERENCE_MODE 211 1554 #define WLC_SET_INTERFERENCE_MODE 212 1555 #define WLC_GET_CHANNEL_QA 213 1556 #define WLC_START_CHANNEL_QA 214 1557 #define WLC_GET_CHANNEL_SEL 215 1558 #define WLC_START_CHANNEL_SEL 216 1559 #endif /* LINUX_POSTMOGRIFY_REMOVAL */ 1560 #define WLC_GET_VALID_CHANNELS 217 1561 #define WLC_GET_FAKEFRAG 218 1562 #define WLC_SET_FAKEFRAG 219 1563 #define WLC_GET_PWROUT_PERCENTAGE 220 1564 #define WLC_SET_PWROUT_PERCENTAGE 221 1565 #define WLC_SET_BAD_FRAME_PREEMPT 222 1566 #define WLC_GET_BAD_FRAME_PREEMPT 223 1567 #define WLC_SET_LEAP_LIST 224 1568 #define WLC_GET_LEAP_LIST 225 1569 #define WLC_GET_CWMIN 226 1570 #define WLC_SET_CWMIN 227 1571 #define WLC_GET_CWMAX 228 1572 #define WLC_SET_CWMAX 229 1573 #define WLC_GET_WET 230 1574 #define WLC_SET_WET 231 1575 #define WLC_GET_PUB 232 1576 /* #define WLC_SET_GLACIAL_TIMER 233 */ /* no longer supported */ 1577 /* #define WLC_GET_GLACIAL_TIMER 234 */ /* no longer supported */ 1578 #define WLC_GET_KEY_PRIMARY 235 1579 #define WLC_SET_KEY_PRIMARY 236 1580 1581 #ifndef LINUX_POSTMOGRIFY_REMOVAL 1582 1583 /* #define WLC_DUMP_RADIOREGS 237 */ /* no longer supported */ 1584 #define WLC_GET_ACI_ARGS 238 1585 #define WLC_SET_ACI_ARGS 239 1586 #define WLC_UNSET_CALLBACK 240 1587 #define WLC_SET_CALLBACK 241 1588 #define WLC_GET_RADAR 242 1589 #define WLC_SET_RADAR 243 1590 #define WLC_SET_SPECT_MANAGMENT 244 1591 #define WLC_GET_SPECT_MANAGMENT 245 1592 #define WLC_WDS_GET_REMOTE_HWADDR 246 /* handled in wl_linux.c/wl_vx.c */ 1593 #define WLC_WDS_GET_WPA_SUP 247 1594 #define WLC_SET_CS_SCAN_TIMER 248 1595 #define WLC_GET_CS_SCAN_TIMER 249 1596 #define WLC_MEASURE_REQUEST 250 1597 #define WLC_INIT 251 1598 #define WLC_SEND_QUIET 252 1599 #define WLC_KEEPALIVE 253 1600 #define WLC_SEND_PWR_CONSTRAINT 254 1601 #define WLC_UPGRADE_STATUS 255 1602 #define WLC_CURRENT_PWR 256 1603 #define WLC_GET_SCAN_PASSIVE_TIME 257 1604 #define WLC_SET_SCAN_PASSIVE_TIME 258 1605 #define WLC_LEGACY_LINK_BEHAVIOR 259 1606 #define WLC_GET_CHANNELS_IN_COUNTRY 260 1607 #define WLC_GET_COUNTRY_LIST 261 1608 #endif /* LINUX_POSTMOGRIFY_REMOVAL */ 1609 #define WLC_GET_VAR 262 /* get value of named variable */ 1610 #define WLC_SET_VAR 263 /* set named variable to value */ 1611 #ifndef LINUX_POSTMOGRIFY_REMOVAL 1612 #define WLC_NVRAM_GET 264 /* deprecated */ 1613 #define WLC_NVRAM_SET 265 1614 #define WLC_NVRAM_DUMP 266 1615 #define WLC_REBOOT 267 1616 #endif /* LINUX_POSTMOGRIFY_REMOVAL */ 1617 #define WLC_SET_WSEC_PMK 268 1618 #ifndef LINUX_POSTMOGRIFY_REMOVAL 1619 #define WLC_GET_AUTH_MODE 269 1620 #define WLC_SET_AUTH_MODE 270 1621 #define WLC_GET_WAKEENTRY 271 1622 #define WLC_SET_WAKEENTRY 272 1623 #define WLC_NDCONFIG_ITEM 273 /* currently handled in wl_oid.c */ 1624 #define WLC_NVOTPW 274 1625 #define WLC_OTPW 275 1626 #define WLC_IOV_BLOCK_GET 276 1627 #define WLC_IOV_MODULES_GET 277 1628 #define WLC_SOFT_RESET 278 1629 #define WLC_GET_ALLOW_MODE 279 1630 #define WLC_SET_ALLOW_MODE 280 1631 #define WLC_GET_DESIRED_BSSID 281 1632 #define WLC_SET_DESIRED_BSSID 282 1633 #define WLC_DISASSOC_MYAP 283 1634 #define WLC_GET_NBANDS 284 /* for Dongle EXT_STA support */ 1635 #define WLC_GET_BANDSTATES 285 /* for Dongle EXT_STA support */ 1636 #define WLC_GET_WLC_BSS_INFO 286 /* for Dongle EXT_STA support */ 1637 #define WLC_GET_ASSOC_INFO 287 /* for Dongle EXT_STA support */ 1638 #define WLC_GET_OID_PHY 288 /* for Dongle EXT_STA support */ 1639 #define WLC_SET_OID_PHY 289 /* for Dongle EXT_STA support */ 1640 #define WLC_SET_ASSOC_TIME 290 /* for Dongle EXT_STA support */ 1641 #define WLC_GET_DESIRED_SSID 291 /* for Dongle EXT_STA support */ 1642 #define WLC_GET_CHANSPEC 292 /* for Dongle EXT_STA support */ 1643 #define WLC_GET_ASSOC_STATE 293 /* for Dongle EXT_STA support */ 1644 #define WLC_SET_PHY_STATE 294 /* for Dongle EXT_STA support */ 1645 #define WLC_GET_SCAN_PENDING 295 /* for Dongle EXT_STA support */ 1646 #define WLC_GET_SCANREQ_PENDING 296 /* for Dongle EXT_STA support */ 1647 #define WLC_GET_PREV_ROAM_REASON 297 /* for Dongle EXT_STA support */ 1648 #define WLC_SET_PREV_ROAM_REASON 298 /* for Dongle EXT_STA support */ 1649 #define WLC_GET_BANDSTATES_PI 299 /* for Dongle EXT_STA support */ 1650 #define WLC_GET_PHY_STATE 300 /* for Dongle EXT_STA support */ 1651 #define WLC_GET_BSS_WPA_RSN 301 /* for Dongle EXT_STA support */ 1652 #define WLC_GET_BSS_WPA2_RSN 302 /* for Dongle EXT_STA support */ 1653 #define WLC_GET_BSS_BCN_TS 303 /* for Dongle EXT_STA support */ 1654 #define WLC_GET_INT_DISASSOC 304 /* for Dongle EXT_STA support */ 1655 #define WLC_SET_NUM_PEERS 305 /* for Dongle EXT_STA support */ 1656 #define WLC_GET_NUM_BSS 306 /* for Dongle EXT_STA support */ 1657 #define WLC_PHY_SAMPLE_COLLECT 307 /* phy sample collect mode */ 1658 /* #define WLC_UM_PRIV 308 */ /* Deprecated: usermode driver */ 1659 #define WLC_GET_CMD 309 1660 /* #define WLC_LAST 310 */ /* Never used - can be reused */ 1661 #define WLC_SET_INTERFERENCE_OVERRIDE_MODE 311 /* set inter mode override */ 1662 #define WLC_GET_INTERFERENCE_OVERRIDE_MODE 312 /* get inter mode override */ 1663 /* #define WLC_GET_WAI_RESTRICT 313 */ /* for WAPI, deprecated use iovar instead */ 1664 /* #define WLC_SET_WAI_RESTRICT 314 */ /* for WAPI, deprecated use iovar instead */ 1665 /* #define WLC_SET_WAI_REKEY 315 */ /* for WAPI, deprecated use iovar instead */ 1666 #define WLC_SET_NAT_CONFIG 316 /* for configuring NAT filter driver */ 1667 #define WLC_GET_NAT_STATE 317 1668 #define WLC_GET_RSSI_QDB 318 /* qdB portion of the RSSI */ 1669 #define WLC_LAST 319 1670 1671 #ifndef EPICTRL_COOKIE 1672 #define EPICTRL_COOKIE 0xABADCEDE 1673 #endif 1674 1675 /* vx wlc ioctl's offset */ 1676 #define CMN_IOCTL_OFF 0x180 1677 1678 /* 1679 * custom OID support 1680 * 1681 * 0xFF - implementation specific OID 1682 * 0xE4 - first byte of Broadcom PCI vendor ID 1683 * 0x14 - second byte of Broadcom PCI vendor ID 1684 * 0xXX - the custom OID number 1685 */ 1686 1687 /* begin 0x1f values beyond the start of the ET driver range. */ 1688 #define WL_OID_BASE 0xFFE41420 1689 1690 /* NDIS overrides */ 1691 #define OID_WL_GETINSTANCE (WL_OID_BASE + WLC_GET_INSTANCE) 1692 #define OID_WL_GET_FORCELINK (WL_OID_BASE + WLC_GET_FORCELINK) 1693 #define OID_WL_SET_FORCELINK (WL_OID_BASE + WLC_SET_FORCELINK) 1694 #define OID_WL_ENCRYPT_STRENGTH (WL_OID_BASE + WLC_ENCRYPT_STRENGTH) 1695 #define OID_WL_DECRYPT_STATUS (WL_OID_BASE + WLC_DECRYPT_STATUS) 1696 #define OID_LEGACY_LINK_BEHAVIOR (WL_OID_BASE + WLC_LEGACY_LINK_BEHAVIOR) 1697 #define OID_WL_NDCONFIG_ITEM (WL_OID_BASE + WLC_NDCONFIG_ITEM) 1698 1699 /* EXT_STA Dongle suuport */ 1700 #define OID_STA_CHANSPEC (WL_OID_BASE + WLC_GET_CHANSPEC) 1701 #define OID_STA_NBANDS (WL_OID_BASE + WLC_GET_NBANDS) 1702 #define OID_STA_GET_PHY (WL_OID_BASE + WLC_GET_OID_PHY) 1703 #define OID_STA_SET_PHY (WL_OID_BASE + WLC_SET_OID_PHY) 1704 #define OID_STA_ASSOC_TIME (WL_OID_BASE + WLC_SET_ASSOC_TIME) 1705 #define OID_STA_DESIRED_SSID (WL_OID_BASE + WLC_GET_DESIRED_SSID) 1706 #define OID_STA_SET_PHY_STATE (WL_OID_BASE + WLC_SET_PHY_STATE) 1707 #define OID_STA_SCAN_PENDING (WL_OID_BASE + WLC_GET_SCAN_PENDING) 1708 #define OID_STA_SCANREQ_PENDING (WL_OID_BASE + WLC_GET_SCANREQ_PENDING) 1709 #define OID_STA_GET_ROAM_REASON (WL_OID_BASE + WLC_GET_PREV_ROAM_REASON) 1710 #define OID_STA_SET_ROAM_REASON (WL_OID_BASE + WLC_SET_PREV_ROAM_REASON) 1711 #define OID_STA_GET_PHY_STATE (WL_OID_BASE + WLC_GET_PHY_STATE) 1712 #define OID_STA_INT_DISASSOC (WL_OID_BASE + WLC_GET_INT_DISASSOC) 1713 #define OID_STA_SET_NUM_PEERS (WL_OID_BASE + WLC_SET_NUM_PEERS) 1714 #define OID_STA_GET_NUM_BSS (WL_OID_BASE + WLC_GET_NUM_BSS) 1715 1716 /* NAT filter driver support */ 1717 #define OID_NAT_SET_CONFIG (WL_OID_BASE + WLC_SET_NAT_CONFIG) 1718 #define OID_NAT_GET_STATE (WL_OID_BASE + WLC_GET_NAT_STATE) 1719 1720 #define WL_DECRYPT_STATUS_SUCCESS 1 1721 #define WL_DECRYPT_STATUS_FAILURE 2 1722 #define WL_DECRYPT_STATUS_UNKNOWN 3 1723 1724 /* allows user-mode app to poll the status of USB image upgrade */ 1725 #define WLC_UPGRADE_SUCCESS 0 1726 #define WLC_UPGRADE_PENDING 1 1727 1728 #ifdef CONFIG_USBRNDIS_RETAIL 1729 /* struct passed in for WLC_NDCONFIG_ITEM */ 1730 typedef struct { 1731 char *name; 1732 void *param; 1733 } ndconfig_item_t; 1734 #endif 1735 1736 1737 /* WLC_GET_AUTH, WLC_SET_AUTH values */ 1738 #define WL_AUTH_OPEN_SYSTEM 0 /* d11 open authentication */ 1739 #define WL_AUTH_SHARED_KEY 1 /* d11 shared authentication */ 1740 #define WL_AUTH_OPEN_SHARED 2 /* try open, then shared if open failed w/rc 13 */ 1741 #endif /* LINUX_POSTMOGRIFY_REMOVAL */ 1742 1743 /* Bit masks for radio disabled status - returned by WL_GET_RADIO */ 1744 #define WL_RADIO_SW_DISABLE (1<<0) 1745 #define WL_RADIO_HW_DISABLE (1<<1) 1746 #define WL_RADIO_MPC_DISABLE (1<<2) 1747 #define WL_RADIO_COUNTRY_DISABLE (1<<3) /* some countries don't support any channel */ 1748 1749 #define WL_SPURAVOID_OFF 0 1750 #define WL_SPURAVOID_ON1 1 1751 #define WL_SPURAVOID_ON2 2 1752 1753 1754 #define WL_4335_SPURAVOID_ON1 1 1755 #define WL_4335_SPURAVOID_ON2 2 1756 #define WL_4335_SPURAVOID_ON3 3 1757 #define WL_4335_SPURAVOID_ON4 4 1758 #define WL_4335_SPURAVOID_ON5 5 1759 #define WL_4335_SPURAVOID_ON6 6 1760 #define WL_4335_SPURAVOID_ON7 7 1761 #define WL_4335_SPURAVOID_ON8 8 1762 #define WL_4335_SPURAVOID_ON9 9 1763 1764 /* Override bit for WLC_SET_TXPWR. if set, ignore other level limits */ 1765 #define WL_TXPWR_OVERRIDE (1U<<31) 1766 #define WL_TXPWR_NEG (1U<<30) 1767 1768 #ifndef LINUX_POSTMOGRIFY_REMOVAL 1769 #define WL_PHY_PAVARS_LEN 32 /* Phy type, Band range, chain, a1[0], b0[0], b1[0] ... */ 1770 1771 #define WL_PHY_PAVAR_VER 1 /* pavars version */ 1772 #define WL_PHY_PAVARS2_NUM 3 /* a1, b0, b1 */ 1773 typedef struct wl_pavars2 { 1774 uint16 ver; /* version of this struct */ 1775 uint16 len; /* len of this structure */ 1776 uint16 inuse; /* driver return 1 for a1,b0,b1 in current band range */ 1777 uint16 phy_type; /* phy type */ 1778 uint16 bandrange; 1779 uint16 chain; 1780 uint16 inpa[WL_PHY_PAVARS2_NUM]; /* phy pavars for one band range */ 1781 } wl_pavars2_t; 1782 1783 typedef struct wl_po { 1784 uint16 phy_type; /* Phy type */ 1785 uint16 band; 1786 uint16 cckpo; 1787 uint32 ofdmpo; 1788 uint16 mcspo[8]; 1789 } wl_po_t; 1790 1791 /* a large TX Power as an init value to factor out of MIN() calculations, 1792 * keep low enough to fit in an int8, units are .25 dBm 1793 */ 1794 #define WLC_TXPWR_MAX (127) /* ~32 dBm = 1,500 mW */ 1795 1796 /* "diag" iovar argument and error code */ 1797 #define WL_DIAG_INTERRUPT 1 /* d11 loopback interrupt test */ 1798 #define WL_DIAG_LOOPBACK 2 /* d11 loopback data test */ 1799 #define WL_DIAG_MEMORY 3 /* d11 memory test */ 1800 #define WL_DIAG_LED 4 /* LED test */ 1801 #define WL_DIAG_REG 5 /* d11/phy register test */ 1802 #define WL_DIAG_SROM 6 /* srom read/crc test */ 1803 #define WL_DIAG_DMA 7 /* DMA test */ 1804 #define WL_DIAG_LOOPBACK_EXT 8 /* enhenced d11 loopback data test */ 1805 1806 #define WL_DIAGERR_SUCCESS 0 1807 #define WL_DIAGERR_FAIL_TO_RUN 1 /* unable to run requested diag */ 1808 #define WL_DIAGERR_NOT_SUPPORTED 2 /* diag requested is not supported */ 1809 #define WL_DIAGERR_INTERRUPT_FAIL 3 /* loopback interrupt test failed */ 1810 #define WL_DIAGERR_LOOPBACK_FAIL 4 /* loopback data test failed */ 1811 #define WL_DIAGERR_SROM_FAIL 5 /* srom read failed */ 1812 #define WL_DIAGERR_SROM_BADCRC 6 /* srom crc failed */ 1813 #define WL_DIAGERR_REG_FAIL 7 /* d11/phy register test failed */ 1814 #define WL_DIAGERR_MEMORY_FAIL 8 /* d11 memory test failed */ 1815 #define WL_DIAGERR_NOMEM 9 /* diag test failed due to no memory */ 1816 #define WL_DIAGERR_DMA_FAIL 10 /* DMA test failed */ 1817 1818 #define WL_DIAGERR_MEMORY_TIMEOUT 11 /* d11 memory test didn't finish in time */ 1819 #define WL_DIAGERR_MEMORY_BADPATTERN 12 /* d11 memory test result in bad pattern */ 1820 1821 /* band types */ 1822 #define WLC_BAND_AUTO 0 /* auto-select */ 1823 #define WLC_BAND_5G 1 /* 5 Ghz */ 1824 #define WLC_BAND_2G 2 /* 2.4 Ghz */ 1825 #define WLC_BAND_ALL 3 /* all bands */ 1826 1827 /* band range returned by band_range iovar */ 1828 #define WL_CHAN_FREQ_RANGE_2G 0 1829 #define WL_CHAN_FREQ_RANGE_5GL 1 1830 #define WL_CHAN_FREQ_RANGE_5GM 2 1831 #define WL_CHAN_FREQ_RANGE_5GH 3 1832 1833 #define WL_CHAN_FREQ_RANGE_5GLL_5BAND 4 1834 #define WL_CHAN_FREQ_RANGE_5GLH_5BAND 5 1835 #define WL_CHAN_FREQ_RANGE_5GML_5BAND 6 1836 #define WL_CHAN_FREQ_RANGE_5GMH_5BAND 7 1837 #define WL_CHAN_FREQ_RANGE_5GH_5BAND 8 1838 1839 #define WL_CHAN_FREQ_RANGE_5G_BAND0 1 1840 #define WL_CHAN_FREQ_RANGE_5G_BAND1 2 1841 #define WL_CHAN_FREQ_RANGE_5G_BAND2 3 1842 #define WL_CHAN_FREQ_RANGE_5G_BAND3 4 1843 1844 #define WL_CHAN_FREQ_RANGE_5G_4BAND 5 1845 #endif /* LINUX_POSTMOGRIFY_REMOVAL */ 1846 1847 /* phy types (returned by WLC_GET_PHYTPE) */ 1848 #define WLC_PHY_TYPE_A 0 1849 #define WLC_PHY_TYPE_B 1 1850 #define WLC_PHY_TYPE_G 2 1851 #define WLC_PHY_TYPE_N 4 1852 #define WLC_PHY_TYPE_LP 5 1853 #define WLC_PHY_TYPE_SSN 6 1854 #define WLC_PHY_TYPE_HT 7 1855 #define WLC_PHY_TYPE_LCN 8 1856 #define WLC_PHY_TYPE_LCN40 10 1857 #define WLC_PHY_TYPE_AC 11 1858 #define WLC_PHY_TYPE_NULL 0xf 1859 1860 /* Values for PM */ 1861 #define PM_OFF 0 1862 #define PM_MAX 1 1863 #define PM_FAST 2 1864 #define PM_FORCE_OFF 3 /* use this bit to force PM off even bt is active */ 1865 1866 #ifndef LINUX_POSTMOGRIFY_REMOVAL 1867 /* MAC list modes */ 1868 #define WLC_MACMODE_DISABLED 0 /* MAC list disabled */ 1869 #define WLC_MACMODE_DENY 1 /* Deny specified (i.e. allow unspecified) */ 1870 #define WLC_MACMODE_ALLOW 2 /* Allow specified (i.e. deny unspecified) */ 1871 1872 /* 1873 * 54g modes (basic bits may still be overridden) 1874 * 1875 * GMODE_LEGACY_B Rateset: 1b, 2b, 5.5, 11 1876 * Preamble: Long 1877 * Shortslot: Off 1878 * GMODE_AUTO Rateset: 1b, 2b, 5.5b, 11b, 18, 24, 36, 54 1879 * Extended Rateset: 6, 9, 12, 48 1880 * Preamble: Long 1881 * Shortslot: Auto 1882 * GMODE_ONLY Rateset: 1b, 2b, 5.5b, 11b, 18, 24b, 36, 54 1883 * Extended Rateset: 6b, 9, 12b, 48 1884 * Preamble: Short required 1885 * Shortslot: Auto 1886 * GMODE_B_DEFERRED Rateset: 1b, 2b, 5.5b, 11b, 18, 24, 36, 54 1887 * Extended Rateset: 6, 9, 12, 48 1888 * Preamble: Long 1889 * Shortslot: On 1890 * GMODE_PERFORMANCE Rateset: 1b, 2b, 5.5b, 6b, 9, 11b, 12b, 18, 24b, 36, 48, 54 1891 * Preamble: Short required 1892 * Shortslot: On and required 1893 * GMODE_LRS Rateset: 1b, 2b, 5.5b, 11b 1894 * Extended Rateset: 6, 9, 12, 18, 24, 36, 48, 54 1895 * Preamble: Long 1896 * Shortslot: Auto 1897 */ 1898 #define GMODE_LEGACY_B 0 1899 #define GMODE_AUTO 1 1900 #define GMODE_ONLY 2 1901 #define GMODE_B_DEFERRED 3 1902 #define GMODE_PERFORMANCE 4 1903 #define GMODE_LRS 5 1904 #define GMODE_MAX 6 1905 1906 /* values for PLCPHdr_override */ 1907 #define WLC_PLCP_AUTO -1 1908 #define WLC_PLCP_SHORT 0 1909 #define WLC_PLCP_LONG 1 1910 1911 /* values for g_protection_override and n_protection_override */ 1912 #define WLC_PROTECTION_AUTO -1 1913 #define WLC_PROTECTION_OFF 0 1914 #define WLC_PROTECTION_ON 1 1915 #define WLC_PROTECTION_MMHDR_ONLY 2 1916 #define WLC_PROTECTION_CTS_ONLY 3 1917 1918 /* values for g_protection_control and n_protection_control */ 1919 #define WLC_PROTECTION_CTL_OFF 0 1920 #define WLC_PROTECTION_CTL_LOCAL 1 1921 #define WLC_PROTECTION_CTL_OVERLAP 2 1922 1923 /* values for n_protection */ 1924 #define WLC_N_PROTECTION_OFF 0 1925 #define WLC_N_PROTECTION_OPTIONAL 1 1926 #define WLC_N_PROTECTION_20IN40 2 1927 #define WLC_N_PROTECTION_MIXEDMODE 3 1928 1929 /* values for n_preamble_type */ 1930 #define WLC_N_PREAMBLE_MIXEDMODE 0 1931 #define WLC_N_PREAMBLE_GF 1 1932 #define WLC_N_PREAMBLE_GF_BRCM 2 1933 1934 /* values for band specific 40MHz capabilities (deprecated) */ 1935 #define WLC_N_BW_20ALL 0 1936 #define WLC_N_BW_40ALL 1 1937 #define WLC_N_BW_20IN2G_40IN5G 2 1938 1939 #define WLC_BW_20MHZ_BIT (1<<0) 1940 #define WLC_BW_40MHZ_BIT (1<<1) 1941 #define WLC_BW_80MHZ_BIT (1<<2) 1942 1943 /* Bandwidth capabilities */ 1944 #define WLC_BW_CAP_20MHZ (WLC_BW_20MHZ_BIT) 1945 #define WLC_BW_CAP_40MHZ (WLC_BW_40MHZ_BIT|WLC_BW_20MHZ_BIT) 1946 #define WLC_BW_CAP_80MHZ (WLC_BW_80MHZ_BIT|WLC_BW_40MHZ_BIT|WLC_BW_20MHZ_BIT) 1947 #define WLC_BW_CAP_UNRESTRICTED 0xFF 1948 1949 #define WL_BW_CAP_20MHZ(bw_cap) (((bw_cap) & WLC_BW_20MHZ_BIT) ? TRUE : FALSE) 1950 #define WL_BW_CAP_40MHZ(bw_cap) (((bw_cap) & WLC_BW_40MHZ_BIT) ? TRUE : FALSE) 1951 #define WL_BW_CAP_80MHZ(bw_cap) (((bw_cap) & WLC_BW_80MHZ_BIT) ? TRUE : FALSE) 1952 1953 /* values to force tx/rx chain */ 1954 #define WLC_N_TXRX_CHAIN0 0 1955 #define WLC_N_TXRX_CHAIN1 1 1956 1957 /* bitflags for SGI support (sgi_rx iovar) */ 1958 #define WLC_N_SGI_20 0x01 1959 #define WLC_N_SGI_40 0x02 1960 #define WLC_VHT_SGI_80 0x04 1961 1962 /* when sgi_tx==WLC_SGI_ALL, bypass rate selection, enable sgi for all mcs */ 1963 #define WLC_SGI_ALL 0x02 1964 1965 #define LISTEN_INTERVAL 10 1966 /* interference mitigation options */ 1967 #define INTERFERE_OVRRIDE_OFF -1 /* interference override off */ 1968 #define INTERFERE_NONE 0 /* off */ 1969 #define NON_WLAN 1 /* foreign/non 802.11 interference, no auto detect */ 1970 #define WLAN_MANUAL 2 /* ACI: no auto detection */ 1971 #define WLAN_AUTO 3 /* ACI: auto detect */ 1972 #define WLAN_AUTO_W_NOISE 4 /* ACI: auto - detect and non 802.11 interference */ 1973 #define AUTO_ACTIVE (1 << 7) /* Auto is currently active */ 1974 1975 /* AP environment */ 1976 #define AP_ENV_DETECT_NOT_USED 0 /* We aren't using AP environment detection */ 1977 #define AP_ENV_DENSE 1 /* "Corporate" or other AP dense environment */ 1978 #define AP_ENV_SPARSE 2 /* "Home" or other sparse environment */ 1979 #define AP_ENV_INDETERMINATE 3 /* AP environment hasn't been identified */ 1980 1981 typedef struct wl_aci_args { 1982 int enter_aci_thresh; /* Trigger level to start detecting ACI */ 1983 int exit_aci_thresh; /* Trigger level to exit ACI mode */ 1984 int usec_spin; /* microsecs to delay between rssi samples */ 1985 int glitch_delay; /* interval between ACI scans when glitch count is consistently high */ 1986 uint16 nphy_adcpwr_enter_thresh; /* ADC power to enter ACI mitigation mode */ 1987 uint16 nphy_adcpwr_exit_thresh; /* ADC power to exit ACI mitigation mode */ 1988 uint16 nphy_repeat_ctr; /* Number of tries per channel to compute power */ 1989 uint16 nphy_num_samples; /* Number of samples to compute power on one channel */ 1990 uint16 nphy_undetect_window_sz; /* num of undetects to exit ACI Mitigation mode */ 1991 uint16 nphy_b_energy_lo_aci; /* low ACI power energy threshold for bphy */ 1992 uint16 nphy_b_energy_md_aci; /* mid ACI power energy threshold for bphy */ 1993 uint16 nphy_b_energy_hi_aci; /* high ACI power energy threshold for bphy */ 1994 uint16 nphy_noise_noassoc_glitch_th_up; /* wl interference 4 */ 1995 uint16 nphy_noise_noassoc_glitch_th_dn; 1996 uint16 nphy_noise_assoc_glitch_th_up; 1997 uint16 nphy_noise_assoc_glitch_th_dn; 1998 uint16 nphy_noise_assoc_aci_glitch_th_up; 1999 uint16 nphy_noise_assoc_aci_glitch_th_dn; 2000 uint16 nphy_noise_assoc_enter_th; 2001 uint16 nphy_noise_noassoc_enter_th; 2002 uint16 nphy_noise_assoc_rx_glitch_badplcp_enter_th; 2003 uint16 nphy_noise_noassoc_crsidx_incr; 2004 uint16 nphy_noise_assoc_crsidx_incr; 2005 uint16 nphy_noise_crsidx_decr; 2006 } wl_aci_args_t; 2007 2008 #define TRIGGER_NOW 0 2009 #define TRIGGER_CRS 0x01 2010 #define TRIGGER_CRSDEASSERT 0x02 2011 #define TRIGGER_GOODFCS 0x04 2012 #define TRIGGER_BADFCS 0x08 2013 #define TRIGGER_BADPLCP 0x10 2014 #define TRIGGER_CRSGLITCH 0x20 2015 #define WL_ACI_ARGS_LEGACY_LENGTH 16 /* bytes of pre NPHY aci args */ 2016 #define WL_SAMPLECOLLECT_T_VERSION 2 /* version of wl_samplecollect_args_t struct */ 2017 typedef struct wl_samplecollect_args { 2018 /* version 0 fields */ 2019 uint8 coll_us; 2020 int cores; 2021 /* add'l version 1 fields */ 2022 uint16 version; /* see definition of WL_SAMPLECOLLECT_T_VERSION */ 2023 uint16 length; /* length of entire structure */ 2024 int8 trigger; 2025 uint16 timeout; 2026 uint16 mode; 2027 uint32 pre_dur; 2028 uint32 post_dur; 2029 uint8 gpio_sel; 2030 bool downsamp; 2031 bool be_deaf; 2032 bool agc; /* loop from init gain and going down */ 2033 bool filter; /* override high pass corners to lowest */ 2034 /* add'l version 2 fields */ 2035 uint8 trigger_state; 2036 uint8 module_sel1; 2037 uint8 module_sel2; 2038 uint16 nsamps; 2039 int bitStart; 2040 uint32 gpioCapMask; 2041 } wl_samplecollect_args_t; 2042 2043 #define WL_SAMPLEDATA_HEADER_TYPE 1 2044 #define WL_SAMPLEDATA_HEADER_SIZE 80 /* sample collect header size (bytes) */ 2045 #define WL_SAMPLEDATA_TYPE 2 2046 #define WL_SAMPLEDATA_SEQ 0xff /* sequence # */ 2047 #define WL_SAMPLEDATA_MORE_DATA 0x100 /* more data mask */ 2048 #define WL_SAMPLEDATA_T_VERSION 1 /* version of wl_samplecollect_args_t struct */ 2049 /* version for unpacked sample data, int16 {(I,Q),Core(0..N)} */ 2050 #define WL_SAMPLEDATA_T_VERSION_SPEC_AN 2 2051 2052 typedef struct wl_sampledata { 2053 uint16 version; /* structure version */ 2054 uint16 size; /* size of structure */ 2055 uint16 tag; /* Header/Data */ 2056 uint16 length; /* data length */ 2057 uint32 flag; /* bit def */ 2058 } wl_sampledata_t; 2059 2060 /* WL_OTA START */ 2061 2062 #define WL_OTA_ARG_PARSE_BLK_SIZE 1200 2063 #define WL_OTA_TEST_MAX_NUM_RATE 30 2064 #define WL_OTA_TEST_MAX_NUM_SEQ 100 2065 2066 /* OTA Test Status */ 2067 enum { 2068 WL_OTA_TEST_IDLE, /* Default Idle state */ 2069 WL_OTA_TEST_ACTIVE, /* Test Running */ 2070 WL_OTA_TEST_SUCCESS, /* Successfully Finished Test */ 2071 WL_OTA_TEST_FAIL /* Test Failed in the Middle */ 2072 }; 2073 /* OTA SYNC Status */ 2074 enum { 2075 WL_OTA_SYNC_IDLE, /* Idle state */ 2076 WL_OTA_SYNC_ACTIVE, /* Waiting for Sync */ 2077 WL_OTA_SYNC_FAIL /* Sync pkt not recieved */ 2078 }; 2079 2080 /* Various error states dut can get stuck during test */ 2081 enum { 2082 WL_OTA_SKIP_TEST_CAL_FAIL = 1, /* Phy calibration failed */ 2083 WL_OTA_SKIP_TEST_SYNCH_FAIL, /* Sync Packet not recieved */ 2084 WL_OTA_SKIP_TEST_FILE_DWNLD_FAIL, /* Cmd flow file download failed */ 2085 WL_OTA_SKIP_TEST_NO_TEST_FOUND, /* No test found in Flow file */ 2086 WL_OTA_SKIP_TEST_WL_NOT_UP, /* WL UP failed */ 2087 WL_OTA_SKIP_TEST_UNKNOWN_CALL /* Unintentional scheduling on ota test */ 2088 }; 2089 2090 /* Differentiator for ota_tx and ota_rx */ 2091 enum { 2092 WL_OTA_TEST_TX, /* ota_tx */ 2093 WL_OTA_TEST_RX /* ota_rx */ 2094 }; 2095 2096 /* Catch 3 modes of operation: 20Mhz, 40Mhz, 20 in 40 Mhz */ 2097 enum { 2098 WL_OTA_TEST_BW_20_IN_40MHZ, /* 20 in 40 operation */ 2099 WL_OTA_TEST_BW_20MHZ, /* 20 Mhz operation */ 2100 WL_OTA_TEST_BW_40MHZ /* full 40Mhz operation */ 2101 }; 2102 typedef struct ota_rate_info { 2103 uint8 rate_cnt; /* Total number of rates */ 2104 uint8 rate_val_mbps[WL_OTA_TEST_MAX_NUM_RATE]; /* array of rates from 1mbps to 130mbps */ 2105 /* for legacy rates : ratein mbps * 2 */ 2106 /* for HT rates : mcs index */ 2107 } ota_rate_info_t; 2108 2109 typedef struct ota_power_info { 2110 int8 pwr_ctrl_on; /* power control on/off */ 2111 int8 start_pwr; /* starting power/index */ 2112 int8 delta_pwr; /* delta power/index */ 2113 int8 end_pwr; /* end power/index */ 2114 } ota_power_info_t; 2115 2116 typedef struct ota_packetengine { 2117 uint16 delay; /* Inter-packet delay */ 2118 /* for ota_tx, delay is tx ifs in micro seconds */ 2119 /* for ota_rx, delay is wait time in milliseconds */ 2120 uint16 nframes; /* Number of frames */ 2121 uint16 length; /* Packet length */ 2122 } ota_packetengine_t; 2123 2124 /* Test info vector */ 2125 typedef struct wl_ota_test_args { 2126 uint8 cur_test; /* test phase */ 2127 uint8 chan; /* channel */ 2128 uint8 bw; /* bandwidth */ 2129 char control_band; /* control band */ 2130 uint8 stf_mode; /* stf mode */ 2131 ota_rate_info_t rt_info; /* Rate info */ 2132 ota_packetengine_t pkteng; /* packeteng info */ 2133 uint8 txant; /* tx antenna */ 2134 uint8 rxant; /* rx antenna */ 2135 ota_power_info_t pwr_info; /* power sweep info */ 2136 uint8 wait_for_sync; /* wait for sync or not */ 2137 } wl_ota_test_args_t; 2138 2139 typedef struct wl_ota_test_vector { 2140 wl_ota_test_args_t test_arg[WL_OTA_TEST_MAX_NUM_SEQ]; /* Test argument struct */ 2141 uint16 test_cnt; /* Total no of test */ 2142 bool file_dwnld_valid; /* File successfully downloaded */ 2143 uint8 sync_timeout; /* sync packet timeout */ 2144 int8 sync_fail_action; /* sync fail action */ 2145 struct ether_addr sync_mac; /* macaddress for sync pkt */ 2146 struct ether_addr tx_mac; /* macaddress for tx */ 2147 struct ether_addr rx_mac; /* macaddress for rx */ 2148 int8 loop_test; /* dbg feature to loop the test */ 2149 } wl_ota_test_vector_t; 2150 2151 2152 /* struct copied back form dongle to host to query the status */ 2153 typedef struct wl_ota_test_status { 2154 int16 cur_test_cnt; /* test phase */ 2155 int8 skip_test_reason; /* skip test reasoin */ 2156 wl_ota_test_args_t test_arg; /* cur test arg details */ 2157 uint16 test_cnt; /* total no of test downloaded */ 2158 bool file_dwnld_valid; /* file successfully downloaded ? */ 2159 uint8 sync_timeout; /* sync timeout */ 2160 int8 sync_fail_action; /* sync fail action */ 2161 struct ether_addr sync_mac; /* macaddress for sync pkt */ 2162 struct ether_addr tx_mac; /* tx mac address */ 2163 struct ether_addr rx_mac; /* rx mac address */ 2164 uint8 test_stage; /* check the test status */ 2165 int8 loop_test; /* Debug feature to puts test enfine in a loop */ 2166 uint8 sync_status; /* sync status */ 2167 } wl_ota_test_status_t; 2168 2169 /* WL_OTA END */ 2170 2171 /* wl_radar_args_t */ 2172 typedef struct { 2173 int npulses; /* required number of pulses at n * t_int */ 2174 int ncontig; /* required number of pulses at t_int */ 2175 int min_pw; /* minimum pulse width (20 MHz clocks) */ 2176 int max_pw; /* maximum pulse width (20 MHz clocks) */ 2177 uint16 thresh0; /* Radar detection, thresh 0 */ 2178 uint16 thresh1; /* Radar detection, thresh 1 */ 2179 uint16 blank; /* Radar detection, blank control */ 2180 uint16 fmdemodcfg; /* Radar detection, fmdemod config */ 2181 int npulses_lp; /* Radar detection, minimum long pulses */ 2182 int min_pw_lp; /* Minimum pulsewidth for long pulses */ 2183 int max_pw_lp; /* Maximum pulsewidth for long pulses */ 2184 int min_fm_lp; /* Minimum fm for long pulses */ 2185 int max_span_lp; /* Maximum deltat for long pulses */ 2186 int min_deltat; /* Minimum spacing between pulses */ 2187 int max_deltat; /* Maximum spacing between pulses */ 2188 uint16 autocorr; /* Radar detection, autocorr on or off */ 2189 uint16 st_level_time; /* Radar detection, start_timing level */ 2190 uint16 t2_min; /* minimum clocks needed to remain in state 2 */ 2191 uint32 version; /* version */ 2192 uint32 fra_pulse_err; /* sample error margin for detecting French radar pulsed */ 2193 int npulses_fra; /* Radar detection, minimum French pulses set */ 2194 int npulses_stg2; /* Radar detection, minimum staggered-2 pulses set */ 2195 int npulses_stg3; /* Radar detection, minimum staggered-3 pulses set */ 2196 uint16 percal_mask; /* defines which period cal is masked from radar detection */ 2197 int quant; /* quantization resolution to pulse positions */ 2198 uint32 min_burst_intv_lp; /* minimum burst to burst interval for bin3 radar */ 2199 uint32 max_burst_intv_lp; /* maximum burst to burst interval for bin3 radar */ 2200 int nskip_rst_lp; /* number of skipped pulses before resetting lp buffer */ 2201 int max_pw_tol; /* maximum tollerance allowed in detected pulse width for radar detection */ 2202 uint16 feature_mask; /* 16-bit mask to specify enabled features */ 2203 } wl_radar_args_t; 2204 2205 #define WL_RADAR_ARGS_VERSION 2 2206 2207 typedef struct { 2208 uint32 version; /* version */ 2209 uint16 thresh0_20_lo; /* Radar detection, thresh 0 (range 5250-5350MHz) for BW 20MHz */ 2210 uint16 thresh1_20_lo; /* Radar detection, thresh 1 (range 5250-5350MHz) for BW 20MHz */ 2211 uint16 thresh0_40_lo; /* Radar detection, thresh 0 (range 5250-5350MHz) for BW 40MHz */ 2212 uint16 thresh1_40_lo; /* Radar detection, thresh 1 (range 5250-5350MHz) for BW 40MHz */ 2213 uint16 thresh0_80_lo; /* Radar detection, thresh 0 (range 5250-5350MHz) for BW 80MHz */ 2214 uint16 thresh1_80_lo; /* Radar detection, thresh 1 (range 5250-5350MHz) for BW 80MHz */ 2215 uint16 thresh0_160_lo; /* Radar detection, thresh 0 (range 5250-5350MHz) for BW 160MHz */ 2216 uint16 thresh1_160_lo; /* Radar detection, thresh 1 (range 5250-5350MHz) for BW 160MHz */ 2217 uint16 thresh0_20_hi; /* Radar detection, thresh 0 (range 5470-5725MHz) for BW 20MHz */ 2218 uint16 thresh1_20_hi; /* Radar detection, thresh 1 (range 5470-5725MHz) for BW 20MHz */ 2219 uint16 thresh0_40_hi; /* Radar detection, thresh 0 (range 5470-5725MHz) for BW 40MHz */ 2220 uint16 thresh1_40_hi; /* Radar detection, thresh 1 (range 5470-5725MHz) for BW 40MHz */ 2221 uint16 thresh0_80_hi; /* Radar detection, thresh 0 (range 5470-5725MHz) for BW 80MHz */ 2222 uint16 thresh1_80_hi; /* Radar detection, thresh 1 (range 5470-5725MHz) for BW 80MHz */ 2223 uint16 thresh0_160_hi; /* Radar detection, thresh 0 (range 5470-5725MHz) for BW 160MHz */ 2224 uint16 thresh1_160_hi; /* Radar detection, thresh 1 (range 5470-5725MHz) for BW 160MHz */ 2225 } wl_radar_thr_t; 2226 2227 #define WL_RADAR_THR_VERSION 2 2228 #define WL_THRESHOLD_LO_BAND 70 /* range from 5250MHz - 5350MHz */ 2229 2230 /* radar iovar SET defines */ 2231 #define WL_RADAR_DETECTOR_OFF 0 /* radar detector off */ 2232 #define WL_RADAR_DETECTOR_ON 1 /* radar detector on */ 2233 #define WL_RADAR_SIMULATED 2 /* force radar detector to declare 2234 * detection once 2235 */ 2236 #define WL_RSSI_ANT_VERSION 1 /* current version of wl_rssi_ant_t */ 2237 #define WL_ANT_RX_MAX 2 /* max 2 receive antennas */ 2238 #define WL_ANT_HT_RX_MAX 3 /* max 3 receive antennas/cores */ 2239 #define WL_ANT_IDX_1 0 /* antenna index 1 */ 2240 #define WL_ANT_IDX_2 1 /* antenna index 2 */ 2241 2242 #ifndef WL_RSSI_ANT_MAX 2243 #define WL_RSSI_ANT_MAX 4 /* max possible rx antennas */ 2244 #elif WL_RSSI_ANT_MAX != 4 2245 #error "WL_RSSI_ANT_MAX does not match" 2246 #endif 2247 2248 /* RSSI per antenna */ 2249 typedef struct { 2250 uint32 version; /* version field */ 2251 uint32 count; /* number of valid antenna rssi */ 2252 int8 rssi_ant[WL_RSSI_ANT_MAX]; /* rssi per antenna */ 2253 } wl_rssi_ant_t; 2254 2255 /* dfs_status iovar-related defines */ 2256 2257 /* cac - channel availability check, 2258 * ism - in-service monitoring 2259 * csa - channel switching announcement 2260 */ 2261 2262 /* cac state values */ 2263 #define WL_DFS_CACSTATE_IDLE 0 /* state for operating in non-radar channel */ 2264 #define WL_DFS_CACSTATE_PREISM_CAC 1 /* CAC in progress */ 2265 #define WL_DFS_CACSTATE_ISM 2 /* ISM in progress */ 2266 #define WL_DFS_CACSTATE_CSA 3 /* csa */ 2267 #define WL_DFS_CACSTATE_POSTISM_CAC 4 /* ISM CAC */ 2268 #define WL_DFS_CACSTATE_PREISM_OOC 5 /* PREISM OOC */ 2269 #define WL_DFS_CACSTATE_POSTISM_OOC 6 /* POSTISM OOC */ 2270 #define WL_DFS_CACSTATES 7 /* this many states exist */ 2271 2272 /* data structure used in 'dfs_status' wl interface, which is used to query dfs status */ 2273 typedef struct { 2274 uint state; /* noted by WL_DFS_CACSTATE_XX. */ 2275 uint duration; /* time spent in ms in state. */ 2276 /* as dfs enters ISM state, it removes the operational channel from quiet channel 2277 * list and notes the channel in channel_cleared. set to 0 if no channel is cleared 2278 */ 2279 chanspec_t chanspec_cleared; 2280 /* chanspec cleared used to be a uint, add another to uint16 to maintain size */ 2281 uint16 pad; 2282 } wl_dfs_status_t; 2283 2284 #define NUM_PWRCTRL_RATES 12 2285 2286 typedef struct { 2287 uint8 txpwr_band_max[NUM_PWRCTRL_RATES]; /* User set target */ 2288 uint8 txpwr_limit[NUM_PWRCTRL_RATES]; /* reg and local power limit */ 2289 uint8 txpwr_local_max; /* local max according to the AP */ 2290 uint8 txpwr_local_constraint; /* local constraint according to the AP */ 2291 uint8 txpwr_chan_reg_max; /* Regulatory max for this channel */ 2292 uint8 txpwr_target[2][NUM_PWRCTRL_RATES]; /* Latest target for 2.4 and 5 Ghz */ 2293 uint8 txpwr_est_Pout[2]; /* Latest estimate for 2.4 and 5 Ghz */ 2294 uint8 txpwr_opo[NUM_PWRCTRL_RATES]; /* On G phy, OFDM power offset */ 2295 uint8 txpwr_bphy_cck_max[NUM_PWRCTRL_RATES]; /* Max CCK power for this band (SROM) */ 2296 uint8 txpwr_bphy_ofdm_max; /* Max OFDM power for this band (SROM) */ 2297 uint8 txpwr_aphy_max[NUM_PWRCTRL_RATES]; /* Max power for A band (SROM) */ 2298 int8 txpwr_antgain[2]; /* Ant gain for each band - from SROM */ 2299 uint8 txpwr_est_Pout_gofdm; /* Pwr estimate for 2.4 OFDM */ 2300 } tx_power_legacy_t; 2301 2302 #define WL_TX_POWER_RATES_LEGACY 45 2303 #define WL_TX_POWER_MCS20_FIRST 12 2304 #define WL_TX_POWER_MCS20_NUM 16 2305 #define WL_TX_POWER_MCS40_FIRST 28 2306 #define WL_TX_POWER_MCS40_NUM 17 2307 2308 typedef struct { 2309 uint32 flags; 2310 chanspec_t chanspec; /* txpwr report for this channel */ 2311 chanspec_t local_chanspec; /* channel on which we are associated */ 2312 uint8 local_max; /* local max according to the AP */ 2313 uint8 local_constraint; /* local constraint according to the AP */ 2314 int8 antgain[2]; /* Ant gain for each band - from SROM */ 2315 uint8 rf_cores; /* count of RF Cores being reported */ 2316 uint8 est_Pout[4]; /* Latest tx power out estimate per RF 2317 * chain without adjustment 2318 */ 2319 uint8 est_Pout_cck; /* Latest CCK tx power out estimate */ 2320 uint8 user_limit[WL_TX_POWER_RATES_LEGACY]; /* User limit */ 2321 uint8 reg_limit[WL_TX_POWER_RATES_LEGACY]; /* Regulatory power limit */ 2322 uint8 board_limit[WL_TX_POWER_RATES_LEGACY]; /* Max power board can support (SROM) */ 2323 uint8 target[WL_TX_POWER_RATES_LEGACY]; /* Latest target power */ 2324 } tx_power_legacy2_t; 2325 2326 /* TX Power index defines */ 2327 #define WL_NUM_RATES_CCK 4 /* 1, 2, 5.5, 11 Mbps */ 2328 #define WL_NUM_RATES_OFDM 8 /* 6, 9, 12, 18, 24, 36, 48, 54 Mbps SISO/CDD */ 2329 #define WL_NUM_RATES_MCS_1STREAM 8 /* MCS 0-7 1-stream rates - SISO/CDD/STBC/MCS */ 2330 #define WL_NUM_RATES_EXTRA_VHT 2 /* Additional VHT 11AC rates */ 2331 #define WL_NUM_RATES_VHT 10 2332 #define WL_NUM_RATES_MCS32 1 2333 2334 #define WLC_NUM_RATES_CCK WL_NUM_RATES_CCK 2335 #define WLC_NUM_RATES_OFDM WL_NUM_RATES_OFDM 2336 #define WLC_NUM_RATES_MCS_1_STREAM WL_NUM_RATES_MCS_1STREAM 2337 #define WLC_NUM_RATES_MCS_2_STREAM WL_NUM_RATES_MCS_1STREAM 2338 #define WLC_NUM_RATES_MCS32 WL_NUM_RATES_MCS32 2339 #define WL_TX_POWER_CCK_NUM WL_NUM_RATES_CCK 2340 #define WL_TX_POWER_OFDM_NUM WL_NUM_RATES_OFDM 2341 #define WL_TX_POWER_MCS_1_STREAM_NUM WL_NUM_RATES_MCS_1STREAM 2342 #define WL_TX_POWER_MCS_2_STREAM_NUM WL_NUM_RATES_MCS_1STREAM 2343 #define WL_TX_POWER_MCS_32_NUM WL_NUM_RATES_MCS32 2344 2345 #define WL_NUM_2x2_ELEMENTS 4 2346 #define WL_NUM_3x3_ELEMENTS 6 2347 2348 typedef struct txppr { 2349 /* start of 20MHz tx power limits */ 2350 int8 b20_1x1dsss[WL_NUM_RATES_CCK]; /* Legacy CCK/DSSS */ 2351 int8 b20_1x1ofdm[WL_NUM_RATES_OFDM]; /* Legacy OFDM transmission */ 2352 int8 b20_1x1mcs0[WL_NUM_RATES_MCS_1STREAM]; /* SISO MCS 0-7 */ 2353 2354 int8 b20_1x2dsss[WL_NUM_RATES_CCK]; /* Legacy CCK/DSSS */ 2355 int8 b20_1x2cdd_ofdm[WL_NUM_RATES_OFDM]; /* Legacy OFDM CDD transmission */ 2356 int8 b20_1x2cdd_mcs0[WL_NUM_RATES_MCS_1STREAM]; /* CDD MCS 0-7 */ 2357 int8 b20_2x2stbc_mcs0[WL_NUM_RATES_MCS_1STREAM]; /* STBC MCS 0-7 */ 2358 int8 b20_2x2sdm_mcs8[WL_NUM_RATES_MCS_1STREAM]; /* MCS 8-15 */ 2359 2360 int8 b20_1x3dsss[WL_NUM_RATES_CCK]; /* Legacy CCK/DSSS */ 2361 int8 b20_1x3cdd_ofdm[WL_NUM_RATES_OFDM]; /* Legacy OFDM CDD transmission */ 2362 int8 b20_1x3cdd_mcs0[WL_NUM_RATES_MCS_1STREAM]; /* 1 Nsts to 3 Tx Chain */ 2363 int8 b20_2x3stbc_mcs0[WL_NUM_RATES_MCS_1STREAM]; /* STBC MCS 0-7 */ 2364 int8 b20_2x3sdm_mcs8[WL_NUM_RATES_MCS_1STREAM]; /* 2 Nsts to 3 Tx Chain */ 2365 int8 b20_3x3sdm_mcs16[WL_NUM_RATES_MCS_1STREAM]; /* 3 Nsts to 3 Tx Chain */ 2366 2367 int8 b20_1x1vht[WL_NUM_RATES_EXTRA_VHT]; /* VHT8_9SS1 */ 2368 int8 b20_1x2cdd_vht[WL_NUM_RATES_EXTRA_VHT]; /* VHT8_9SS1_CDD1 */ 2369 int8 b20_2x2stbc_vht[WL_NUM_RATES_EXTRA_VHT]; /* VHT8_9SS1_STBC */ 2370 int8 b20_2x2sdm_vht[WL_NUM_RATES_EXTRA_VHT]; /* VHT8_9SS2 */ 2371 int8 b20_1x3cdd_vht[WL_NUM_RATES_EXTRA_VHT]; /* VHT8_9SS1_CDD2 */ 2372 int8 b20_2x3stbc_vht[WL_NUM_RATES_EXTRA_VHT]; /* VHT8_9SS1_STBC_SPEXP1 */ 2373 int8 b20_2x3sdm_vht[WL_NUM_RATES_EXTRA_VHT]; /* VHT8_9SS2_SPEXP1 */ 2374 int8 b20_3x3sdm_vht[WL_NUM_RATES_EXTRA_VHT]; /* VHT8_9SS3 */ 2375 2376 /* start of 40MHz tx power limits */ 2377 int8 b40_dummy1x1dsss[WL_NUM_RATES_CCK]; /* Legacy CCK/DSSS */ 2378 int8 b40_1x1ofdm[WL_NUM_RATES_OFDM]; /* Legacy OFDM transmission */ 2379 int8 b40_1x1mcs0[WL_NUM_RATES_MCS_1STREAM]; /* SISO MCS 0-7 */ 2380 2381 int8 b40_dummy1x2dsss[WL_NUM_RATES_CCK]; /* Legacy CCK/DSSS */ 2382 int8 b40_1x2cdd_ofdm[WL_NUM_RATES_OFDM]; /* Legacy OFDM CDD transmission */ 2383 int8 b40_1x2cdd_mcs0[WL_NUM_RATES_MCS_1STREAM]; /* CDD MCS 0-7 */ 2384 int8 b40_2x2stbc_mcs0[WL_NUM_RATES_MCS_1STREAM]; /* STBC MCS 0-7 */ 2385 int8 b40_2x2sdm_mcs8[WL_NUM_RATES_MCS_1STREAM]; /* MCS 8-15 */ 2386 2387 int8 b40_dummy1x3dsss[WL_NUM_RATES_CCK]; /* Legacy CCK/DSSS */ 2388 int8 b40_1x3cdd_ofdm[WL_NUM_RATES_OFDM]; /* Legacy OFDM CDD transmission */ 2389 int8 b40_1x3cdd_mcs0[WL_NUM_RATES_MCS_1STREAM]; /* 1 Nsts to 3 Tx Chain */ 2390 int8 b40_2x3stbc_mcs0[WL_NUM_RATES_MCS_1STREAM]; /* STBC MCS 0-7 */ 2391 int8 b40_2x3sdm_mcs8[WL_NUM_RATES_MCS_1STREAM]; /* 2 Nsts to 3 Tx Chain */ 2392 int8 b40_3x3sdm_mcs16[WL_NUM_RATES_MCS_1STREAM]; /* 3 Nsts to 3 Tx Chain */ 2393 2394 int8 b40_1x1vht[WL_NUM_RATES_EXTRA_VHT]; /* VHT8_9SS1 */ 2395 int8 b40_1x2cdd_vht[WL_NUM_RATES_EXTRA_VHT]; /* VHT8_9SS1_CDD1 */ 2396 int8 b40_2x2stbc_vht[WL_NUM_RATES_EXTRA_VHT]; /* VHT8_9SS1_STBC */ 2397 int8 b40_2x2sdm_vht[WL_NUM_RATES_EXTRA_VHT]; /* VHT8_9SS2 */ 2398 int8 b40_1x3cdd_vht[WL_NUM_RATES_EXTRA_VHT]; /* VHT8_9SS1_CDD2 */ 2399 int8 b40_2x3stbc_vht[WL_NUM_RATES_EXTRA_VHT]; /* VHT8_9SS1_STBC_SPEXP1 */ 2400 int8 b40_2x3sdm_vht[WL_NUM_RATES_EXTRA_VHT]; /* VHT8_9SS2_SPEXP1 */ 2401 int8 b40_3x3sdm_vht[WL_NUM_RATES_EXTRA_VHT]; /* VHT8_9SS3 */ 2402 2403 /* start of 20in40MHz tx power limits */ 2404 int8 b20in40_1x1dsss[WL_NUM_RATES_CCK]; /* Legacy CCK/DSSS */ 2405 int8 b20in40_1x1ofdm[WL_NUM_RATES_OFDM]; /* Legacy OFDM transmission */ 2406 int8 b20in40_1x1mcs0[WL_NUM_RATES_MCS_1STREAM]; /* SISO MCS 0-7 */ 2407 2408 int8 b20in40_1x2dsss[WL_NUM_RATES_CCK]; /* Legacy CCK/DSSS */ 2409 int8 b20in40_1x2cdd_ofdm[WL_NUM_RATES_OFDM]; /* Legacy OFDM CDD transmission */ 2410 int8 b20in40_1x2cdd_mcs0[WL_NUM_RATES_MCS_1STREAM]; /* CDD MCS 0-7 */ 2411 int8 b20in40_2x2stbc_mcs0[WL_NUM_RATES_MCS_1STREAM]; /* STBC MCS 0-7 */ 2412 int8 b20in40_2x2sdm_mcs8[WL_NUM_RATES_MCS_1STREAM]; /* MCS 8-15 */ 2413 2414 int8 b20in40_1x3dsss[WL_NUM_RATES_CCK]; /* Legacy CCK/DSSS */ 2415 int8 b20in40_1x3cdd_ofdm[WL_NUM_RATES_OFDM]; /* 20 in 40 MHz Legacy OFDM CDD */ 2416 int8 b20in40_1x3cdd_mcs0[WL_NUM_RATES_MCS_1STREAM]; /* 1 Nsts to 3 Tx Chain */ 2417 int8 b20in40_2x3stbc_mcs0[WL_NUM_RATES_MCS_1STREAM]; /* STBC MCS 0-7 */ 2418 int8 b20in40_2x3sdm_mcs8[WL_NUM_RATES_MCS_1STREAM]; /* 2 Nsts to 3 Tx Chain */ 2419 int8 b20in40_3x3sdm_mcs16[WL_NUM_RATES_MCS_1STREAM]; /* 3 Nsts to 3 Tx Chain */ 2420 2421 int8 b20in40_1x1vht[WL_NUM_RATES_EXTRA_VHT]; /* VHT8_9SS1 */ 2422 int8 b20in40_1x2cdd_vht[WL_NUM_RATES_EXTRA_VHT]; /* VHT8_9SS1_CDD1 */ 2423 int8 b20in40_2x2stbc_vht[WL_NUM_RATES_EXTRA_VHT]; /* VHT8_9SS1_STBC */ 2424 int8 b20in40_2x2sdm_vht[WL_NUM_RATES_EXTRA_VHT]; /* VHT8_9SS2 */ 2425 int8 b20in40_1x3cdd_vht[WL_NUM_RATES_EXTRA_VHT]; /* VHT8_9SS1_CDD2 */ 2426 int8 b20in40_2x3stbc_vht[WL_NUM_RATES_EXTRA_VHT]; /* VHT8_9SS1_STBC_SPEXP1 */ 2427 int8 b20in40_2x3sdm_vht[WL_NUM_RATES_EXTRA_VHT]; /* VHT8_9SS2_SPEXP1 */ 2428 int8 b20in40_3x3sdm_vht[WL_NUM_RATES_EXTRA_VHT]; /* VHT8_9SS3 */ 2429 2430 /* start of 80MHz tx power limits */ 2431 int8 b80_dummy1x1dsss[WL_NUM_RATES_CCK]; /* Legacy CCK/DSSS */ 2432 int8 b80_1x1ofdm[WL_NUM_RATES_OFDM]; /* Legacy OFDM transmission */ 2433 int8 b80_1x1mcs0[WL_NUM_RATES_MCS_1STREAM]; /* SISO MCS 0-7 */ 2434 2435 int8 b80_dummy1x2dsss[WL_NUM_RATES_CCK]; /* Legacy CCK/DSSS */ 2436 int8 b80_1x2cdd_ofdm[WL_NUM_RATES_OFDM]; /* Legacy OFDM CDD transmission */ 2437 int8 b80_1x2cdd_mcs0[WL_NUM_RATES_MCS_1STREAM]; /* CDD MCS 0-7 */ 2438 int8 b80_2x2stbc_mcs0[WL_NUM_RATES_MCS_1STREAM]; /* STBC MCS 0-7 */ 2439 int8 b80_2x2sdm_mcs8[WL_NUM_RATES_MCS_1STREAM]; /* MCS 8-15 */ 2440 2441 int8 b80_dummy1x3dsss[WL_NUM_RATES_CCK]; /* Legacy CCK/DSSS */ 2442 int8 b80_1x3cdd_ofdm[WL_NUM_RATES_OFDM]; /* Legacy OFDM CDD transmission */ 2443 int8 b80_1x3cdd_mcs0[WL_NUM_RATES_MCS_1STREAM]; /* 1 Nsts to 3 Tx Chain */ 2444 int8 b80_2x3stbc_mcs0[WL_NUM_RATES_MCS_1STREAM]; /* STBC MCS 0-7 */ 2445 int8 b80_2x3sdm_mcs8[WL_NUM_RATES_MCS_1STREAM]; /* 2 Nsts to 3 Tx Chain */ 2446 int8 b80_3x3sdm_mcs16[WL_NUM_RATES_MCS_1STREAM]; /* 3 Nsts to 3 Tx Chain */ 2447 2448 int8 b80_1x1vht[WL_NUM_RATES_EXTRA_VHT]; /* VHT8_9SS1 */ 2449 int8 b80_1x2cdd_vht[WL_NUM_RATES_EXTRA_VHT]; /* VHT8_9SS1_CDD1 */ 2450 int8 b80_2x2stbc_vht[WL_NUM_RATES_EXTRA_VHT]; /* VHT8_9SS1_STBC */ 2451 int8 b80_2x2sdm_vht[WL_NUM_RATES_EXTRA_VHT]; /* VHT8_9SS2 */ 2452 int8 b80_1x3cdd_vht[WL_NUM_RATES_EXTRA_VHT]; /* VHT8_9SS1_CDD2 */ 2453 int8 b80_2x3stbc_vht[WL_NUM_RATES_EXTRA_VHT]; /* VHT8_9SS1_STBC_SPEXP1 */ 2454 int8 b80_2x3sdm_vht[WL_NUM_RATES_EXTRA_VHT]; /* VHT8_9SS2_SPEXP1 */ 2455 int8 b80_3x3sdm_vht[WL_NUM_RATES_EXTRA_VHT]; /* VHT8_9SS3 */ 2456 2457 /* start of 20in80MHz tx power limits */ 2458 int8 b20in80_1x1dsss[WL_NUM_RATES_CCK]; /* Legacy CCK/DSSS */ 2459 int8 b20in80_1x1ofdm[WL_NUM_RATES_OFDM]; /* Legacy OFDM transmission */ 2460 int8 b20in80_1x1mcs0[WL_NUM_RATES_MCS_1STREAM]; /* SISO MCS 0-7 */ 2461 2462 int8 b20in80_1x2dsss[WL_NUM_RATES_CCK]; /* Legacy CCK/DSSS */ 2463 int8 b20in80_1x2cdd_ofdm[WL_NUM_RATES_OFDM]; /* Legacy OFDM CDD transmission */ 2464 int8 b20in80_1x2cdd_mcs0[WL_NUM_RATES_MCS_1STREAM]; /* CDD MCS 0-7 */ 2465 int8 b20in80_2x2stbc_mcs0[WL_NUM_RATES_MCS_1STREAM]; /* STBC MCS 0-7 */ 2466 int8 b20in80_2x2sdm_mcs8[WL_NUM_RATES_MCS_1STREAM]; /* MCS 8-15 */ 2467 2468 int8 b20in80_1x3dsss[WL_NUM_RATES_CCK]; /* Legacy CCK/DSSS */ 2469 int8 b20in80_1x3cdd_ofdm[WL_NUM_RATES_OFDM]; /* Legacy OFDM CDD transmission */ 2470 int8 b20in80_1x3cdd_mcs0[WL_NUM_RATES_MCS_1STREAM]; /* 1 Nsts to 3 Tx Chain */ 2471 int8 b20in80_2x3stbc_mcs0[WL_NUM_RATES_MCS_1STREAM]; /* STBC MCS 0-7 */ 2472 int8 b20in80_2x3sdm_mcs8[WL_NUM_RATES_MCS_1STREAM]; /* 2 Nsts to 3 Tx Chain */ 2473 int8 b20in80_3x3sdm_mcs16[WL_NUM_RATES_MCS_1STREAM]; /* 3 Nsts to 3 Tx Chain */ 2474 2475 int8 b20in80_1x1vht[WL_NUM_RATES_EXTRA_VHT]; /* VHT8_9SS1 */ 2476 int8 b20in80_1x2cdd_vht[WL_NUM_RATES_EXTRA_VHT]; /* VHT8_9SS1_CDD1 */ 2477 int8 b20in80_2x2stbc_vht[WL_NUM_RATES_EXTRA_VHT]; /* VHT8_9SS1_STBC */ 2478 int8 b20in80_2x2sdm_vht[WL_NUM_RATES_EXTRA_VHT]; /* VHT8_9SS2 */ 2479 int8 b20in80_1x3cdd_vht[WL_NUM_RATES_EXTRA_VHT]; /* VHT8_9SS1_CDD2 */ 2480 int8 b20in80_2x3stbc_vht[WL_NUM_RATES_EXTRA_VHT]; /* VHT8_9SS1_STBC_SPEXP1 */ 2481 int8 b20in80_2x3sdm_vht[WL_NUM_RATES_EXTRA_VHT]; /* VHT8_9SS2_SPEXP1 */ 2482 int8 b20in80_3x3sdm_vht[WL_NUM_RATES_EXTRA_VHT]; /* VHT8_9SS3 */ 2483 2484 /* start of 40in80MHz tx power limits */ 2485 int8 b40in80_dummy1x1dsss[WL_NUM_RATES_CCK]; /* Legacy CCK/DSSS */ 2486 int8 b40in80_1x1ofdm[WL_NUM_RATES_OFDM]; /* Legacy OFDM transmission */ 2487 int8 b40in80_1x1mcs0[WL_NUM_RATES_MCS_1STREAM]; /* SISO MCS 0-7 */ 2488 2489 int8 b40in80_dummy1x2dsss[WL_NUM_RATES_CCK]; /* Legacy CCK/DSSS */ 2490 int8 b40in80_1x2cdd_ofdm[WL_NUM_RATES_OFDM]; /* Legacy OFDM CDD transmission */ 2491 int8 b40in80_1x2cdd_mcs0[WL_NUM_RATES_MCS_1STREAM]; /* CDD MCS 0-7 */ 2492 int8 b40in80_2x2stbc_mcs0[WL_NUM_RATES_MCS_1STREAM]; /* STBC MCS 0-7 */ 2493 int8 b40in80_2x2sdm_mcs8[WL_NUM_RATES_MCS_1STREAM]; /* MCS 8-15 */ 2494 2495 int8 b40in80_dummy1x3dsss[WL_NUM_RATES_CCK]; /* Legacy CCK/DSSS */ 2496 int8 b40in80_1x3cdd_ofdm[WL_NUM_RATES_OFDM]; /* MHz Legacy OFDM CDD */ 2497 int8 b40in80_1x3cdd_mcs0[WL_NUM_RATES_MCS_1STREAM]; /* 1 Nsts to 3 Tx Chain */ 2498 int8 b40in80_2x3stbc_mcs0[WL_NUM_RATES_MCS_1STREAM]; /* STBC MCS 0-7 */ 2499 int8 b40in80_2x3sdm_mcs8[WL_NUM_RATES_MCS_1STREAM]; /* 2 Nsts to 3 Tx Chain */ 2500 int8 b40in80_3x3sdm_mcs16[WL_NUM_RATES_MCS_1STREAM]; /* 3 Nsts to 3 Tx Chain */ 2501 2502 int8 b40in80_1x1vht[WL_NUM_RATES_EXTRA_VHT]; /* VHT8_9SS1 */ 2503 int8 b40in80_1x2cdd_vht[WL_NUM_RATES_EXTRA_VHT]; /* VHT8_9SS1_CDD1 */ 2504 int8 b40in80_2x2stbc_vht[WL_NUM_RATES_EXTRA_VHT]; /* VHT8_9SS1_STBC */ 2505 int8 b40in80_2x2sdm_vht[WL_NUM_RATES_EXTRA_VHT]; /* VHT8_9SS2 */ 2506 int8 b40in80_1x3cdd_vht[WL_NUM_RATES_EXTRA_VHT]; /* VHT8_9SS1_CDD2 */ 2507 int8 b40in80_2x3stbc_vht[WL_NUM_RATES_EXTRA_VHT]; /* VHT8_9SS1_STBC_SPEXP1 */ 2508 int8 b40in80_2x3sdm_vht[WL_NUM_RATES_EXTRA_VHT]; /* VHT8_9SS2_SPEXP1 */ 2509 int8 b40in80_3x3sdm_vht[WL_NUM_RATES_EXTRA_VHT]; /* VHT8_9SS3 */ 2510 2511 int8 mcs32; /* C_CHECK - THIS NEEDS TO BE REMOVED THROUGHOUT THE CODE */ 2512 } txppr_t; 2513 2514 /* 20MHz */ 2515 #define WL_TX_POWER_CCK_FIRST OFFSETOF(txppr_t, b20_1x1dsss) 2516 #define WL_TX_POWER_OFDM20_FIRST OFFSETOF(txppr_t, b20_1x1ofdm) 2517 #define WL_TX_POWER_MCS20_SISO_FIRST OFFSETOF(txppr_t, b20_1x1mcs0) 2518 #define WL_TX_POWER_20_S1x1_FIRST OFFSETOF(txppr_t, b20_1x1mcs0) 2519 2520 #define WL_TX_POWER_CCK_CDD_S1x2_FIRST OFFSETOF(txppr_t, b20_1x2dsss) 2521 #define WL_TX_POWER_OFDM20_CDD_FIRST OFFSETOF(txppr_t, b20_1x2cdd_ofdm) 2522 #define WL_TX_POWER_MCS20_CDD_FIRST OFFSETOF(txppr_t, b20_1x2cdd_mcs0) 2523 #define WL_TX_POWER_20_S1x2_FIRST OFFSETOF(txppr_t, b20_1x2cdd_mcs0) 2524 #define WL_TX_POWER_MCS20_STBC_FIRST OFFSETOF(txppr_t, b20_2x2stbc_mcs0) 2525 #define WL_TX_POWER_MCS20_SDM_FIRST OFFSETOF(txppr_t, b20_2x2sdm_mcs8) 2526 #define WL_TX_POWER_20_S2x2_FIRST OFFSETOF(txppr_t, b20_2x2sdm_mcs8) 2527 2528 #define WL_TX_POWER_CCK_CDD_S1x3_FIRST OFFSETOF(txppr_t, b20_1x3dsss) 2529 #define WL_TX_POWER_OFDM20_CDD_S1x3_FIRST OFFSETOF(txppr_t, b20_1x3cdd_ofdm) 2530 #define WL_TX_POWER_20_S1x3_FIRST OFFSETOF(txppr_t, b20_1x3cdd_mcs0) 2531 #define WL_TX_POWER_20_STBC_S2x3_FIRST OFFSETOF(txppr_t, b20_2x3stbc_mcs0) 2532 #define WL_TX_POWER_20_S2x3_FIRST OFFSETOF(txppr_t, b20_2x3sdm_mcs8) 2533 #define WL_TX_POWER_20_S3x3_FIRST OFFSETOF(txppr_t, b20_3x3sdm_mcs16) 2534 2535 #define WL_TX_POWER_20_S1X1_VHT OFFSETOF(txppr_t, b20_1x1vht) 2536 #define WL_TX_POWER_20_S1X2_CDD_VHT OFFSETOF(txppr_t, b20_1x2cdd_vht) 2537 #define WL_TX_POWER_20_S2X2_STBC_VHT OFFSETOF(txppr_t, b20_2x2stbc_vht) 2538 #define WL_TX_POWER_20_S2X2_VHT OFFSETOF(txppr_t, b20_2x2sdm_vht) 2539 #define WL_TX_POWER_20_S1X3_CDD_VHT OFFSETOF(txppr_t, b20_1x3cdd_vht) 2540 #define WL_TX_POWER_20_S2X3_STBC_VHT OFFSETOF(txppr_t, b20_2x3stbc_vht) 2541 #define WL_TX_POWER_20_S2X3_VHT OFFSETOF(txppr_t, b20_2x3sdm_vht) 2542 #define WL_TX_POWER_20_S3X3_VHT OFFSETOF(txppr_t, b20_3x3sdm_vht) 2543 2544 /* 40MHz */ 2545 #define WL_TX_POWER_40_DUMMY_CCK_FIRST OFFSETOF(txppr_t, b40_dummy1x1dsss) 2546 #define WL_TX_POWER_OFDM40_FIRST OFFSETOF(txppr_t, b40_1x1ofdm) 2547 #define WL_TX_POWER_MCS40_SISO_FIRST OFFSETOF(txppr_t, b40_1x1mcs0) 2548 #define WL_TX_POWER_40_S1x1_FIRST OFFSETOF(txppr_t, b40_1x1mcs0) 2549 2550 #define WL_TX_POWER_40_DUMMY_CCK_CDD_S1x2_FIRST OFFSETOF(txppr_t, b40_dummy1x2dsss) 2551 #define WL_TX_POWER_OFDM40_CDD_FIRST OFFSETOF(txppr_t, b40_1x2cdd_ofdm) 2552 #define WL_TX_POWER_MCS40_CDD_FIRST OFFSETOF(txppr_t, b40_1x2cdd_mcs0) 2553 #define WL_TX_POWER_40_S1x2_FIRST OFFSETOF(txppr_t, b40_1x2cdd_mcs0) 2554 #define WL_TX_POWER_MCS40_STBC_FIRST OFFSETOF(txppr_t, b40_2x2stbc_mcs0) 2555 #define WL_TX_POWER_MCS40_SDM_FIRST OFFSETOF(txppr_t, b40_2x2sdm_mcs8) 2556 #define WL_TX_POWER_40_S2x2_FIRST OFFSETOF(txppr_t, b40_2x2sdm_mcs8) 2557 2558 #define WL_TX_POWER_40_DUMMY_CCK_CDD_S1x3_FIRST OFFSETOF(txppr_t, b40_dummy1x3dsss) 2559 #define WL_TX_POWER_OFDM40_CDD_S1x3_FIRST OFFSETOF(txppr_t, b40_1x3cdd_ofdm) 2560 #define WL_TX_POWER_40_S1x3_FIRST OFFSETOF(txppr_t, b40_1x3cdd_mcs0) 2561 #define WL_TX_POWER_40_STBC_S2x3_FIRST OFFSETOF(txppr_t, b40_2x3stbc_mcs0) 2562 #define WL_TX_POWER_40_S2x3_FIRST OFFSETOF(txppr_t, b40_2x3sdm_mcs8) 2563 #define WL_TX_POWER_40_S3x3_FIRST OFFSETOF(txppr_t, b40_3x3sdm_mcs16) 2564 2565 #define WL_TX_POWER_40_S1X1_VHT OFFSETOF(txppr_t, b40_1x1vht) 2566 #define WL_TX_POWER_40_S1X2_CDD_VHT OFFSETOF(txppr_t, b40_1x2cdd_vht) 2567 #define WL_TX_POWER_40_S2X2_STBC_VHT OFFSETOF(txppr_t, b40_2x2stbc_vht) 2568 #define WL_TX_POWER_40_S2X2_VHT OFFSETOF(txppr_t, b40_2x2sdm_vht) 2569 #define WL_TX_POWER_40_S1X3_CDD_VHT OFFSETOF(txppr_t, b40_1x3cdd_vht) 2570 #define WL_TX_POWER_40_S2X3_STBC_VHT OFFSETOF(txppr_t, b40_2x3stbc_vht) 2571 #define WL_TX_POWER_40_S2X3_VHT OFFSETOF(txppr_t, b40_2x3sdm_vht) 2572 #define WL_TX_POWER_40_S3X3_VHT OFFSETOF(txppr_t, b40_3x3sdm_vht) 2573 2574 /* 20 in 40MHz */ 2575 #define WL_TX_POWER_20UL_CCK_FIRST OFFSETOF(txppr_t, b20in40_1x1dsss) 2576 #define WL_TX_POWER_20UL_OFDM_FIRST OFFSETOF(txppr_t, b20in40_1x1ofdm) 2577 #define WL_TX_POWER_20UL_S1x1_FIRST OFFSETOF(txppr_t, b20in40_1x1mcs0) 2578 2579 #define WL_TX_POWER_CCK_20U_CDD_S1x2_FIRST OFFSETOF(txppr_t, b20in40_1x2dsss) 2580 #define WL_TX_POWER_20UL_OFDM_CDD_FIRST OFFSETOF(txppr_t, b20in40_1x2cdd_ofdm) 2581 #define WL_TX_POWER_20UL_S1x2_FIRST OFFSETOF(txppr_t, b20in40_1x2cdd_mcs0) 2582 #define WL_TX_POWER_20UL_STBC_S2x2_FIRST OFFSETOF(txppr_t, b20in40_2x2stbc_mcs0) 2583 #define WL_TX_POWER_20UL_S2x2_FIRST OFFSETOF(txppr_t, b20in40_2x2sdm_mcs8) 2584 2585 #define WL_TX_POWER_CCK_20U_CDD_S1x3_FIRST OFFSETOF(txppr_t, b20in40_1x3dsss) 2586 #define WL_TX_POWER_20UL_OFDM_CDD_S1x3_FIRST OFFSETOF(txppr_t, b20in40_1x3cdd_ofdm) 2587 #define WL_TX_POWER_20UL_S1x3_FIRST OFFSETOF(txppr_t, b20in40_1x3cdd_mcs0) 2588 #define WL_TX_POWER_20UL_STBC_S2x3_FIRST OFFSETOF(txppr_t, b20in40_2x3stbc_mcs0) 2589 #define WL_TX_POWER_20UL_S2x3_FIRST OFFSETOF(txppr_t, b20in40_2x3sdm_mcs8) 2590 #define WL_TX_POWER_20UL_S3x3_FIRST OFFSETOF(txppr_t, b20in40_3x3sdm_mcs16) 2591 2592 #define WL_TX_POWER_20UL_S1X1_VHT OFFSETOF(txppr_t, b20in40_1x1vht) 2593 #define WL_TX_POWER_20UL_S1X2_CDD_VHT OFFSETOF(txppr_t, b20in40_1x2cdd_vht) 2594 #define WL_TX_POWER_20UL_S2X2_STBC_VHT OFFSETOF(txppr_t, b20in40_2x2stbc_vht) 2595 #define WL_TX_POWER_20UL_S2X2_VHT OFFSETOF(txppr_t, b20in40_2x2sdm_vht) 2596 #define WL_TX_POWER_20UL_S1X3_CDD_VHT OFFSETOF(txppr_t, b20in40_1x3cdd_vht) 2597 #define WL_TX_POWER_20UL_S2X3_STBC_VHT OFFSETOF(txppr_t, b20in40_2x3stbc_vht) 2598 #define WL_TX_POWER_20UL_S2X3_VHT OFFSETOF(txppr_t, b20in40_2x3sdm_vht) 2599 #define WL_TX_POWER_20UL_S3X3_VHT OFFSETOF(txppr_t, b20in40_3x3sdm_vht) 2600 2601 /* 80MHz */ 2602 #define WL_TX_POWER_80_DUMMY_CCK_FIRST OFFSETOF(txppr_t, b80_dummy1x1dsss) 2603 #define WL_TX_POWER_OFDM80_FIRST OFFSETOF(txppr_t, b80_1x1ofdm) 2604 #define WL_TX_POWER_MCS80_SISO_FIRST OFFSETOF(txppr_t, b80_1x1mcs0) 2605 #define WL_TX_POWER_80_S1x1_FIRST OFFSETOF(txppr_t, b80_1x1mcs0) 2606 2607 #define WL_TX_POWER_80_DUMMY_CCK_CDD_S1x2_FIRST OFFSETOF(txppr_t, b80_dummy1x2dsss) 2608 #define WL_TX_POWER_OFDM80_CDD_FIRST OFFSETOF(txppr_t, b80_1x2cdd_ofdm) 2609 #define WL_TX_POWER_MCS80_CDD_FIRST OFFSETOF(txppr_t, b80_1x2cdd_mcs0) 2610 #define WL_TX_POWER_80_S1x2_FIRST OFFSETOF(txppr_t, b80_1x2cdd_mcs0) 2611 #define WL_TX_POWER_MCS80_STBC_FIRST OFFSETOF(txppr_t, b80_2x2stbc_mcs0) 2612 #define WL_TX_POWER_MCS80_SDM_FIRST OFFSETOF(txppr_t, b80_2x2sdm_mcs8) 2613 #define WL_TX_POWER_80_S2x2_FIRST OFFSETOF(txppr_t, b80_2x2sdm_mcs8) 2614 2615 #define WL_TX_POWER_80_DUMMY_CCK_CDD_S1x3_FIRST OFFSETOF(txppr_t, b80_dummy1x3dsss) 2616 #define WL_TX_POWER_OFDM80_CDD_S1x3_FIRST OFFSETOF(txppr_t, b80_1x3cdd_ofdm) 2617 #define WL_TX_POWER_80_S1x3_FIRST OFFSETOF(txppr_t, b80_1x3cdd_mcs0) 2618 #define WL_TX_POWER_80_STBC_S2x3_FIRST OFFSETOF(txppr_t, b80_2x3stbc_mcs0) 2619 #define WL_TX_POWER_80_S2x3_FIRST OFFSETOF(txppr_t, b80_2x3sdm_mcs8) 2620 #define WL_TX_POWER_80_S3x3_FIRST OFFSETOF(txppr_t, b80_3x3sdm_mcs16) 2621 2622 #define WL_TX_POWER_80_S1X1_VHT OFFSETOF(txppr_t, b80_1x1vht) 2623 #define WL_TX_POWER_80_S1X2_CDD_VHT OFFSETOF(txppr_t, b80_1x2cdd_vht) 2624 #define WL_TX_POWER_80_S2X2_STBC_VHT OFFSETOF(txppr_t, b80_2x2stbc_vht) 2625 #define WL_TX_POWER_80_S2X2_VHT OFFSETOF(txppr_t, b80_2x2sdm_vht) 2626 #define WL_TX_POWER_80_S1X3_CDD_VHT OFFSETOF(txppr_t, b80_1x3cdd_vht) 2627 #define WL_TX_POWER_80_S2X3_STBC_VHT OFFSETOF(txppr_t, b80_2x3stbc_vht) 2628 #define WL_TX_POWER_80_S2X3_VHT OFFSETOF(txppr_t, b80_2x3sdm_vht) 2629 #define WL_TX_POWER_80_S3X3_VHT OFFSETOF(txppr_t, b80_3x3sdm_vht) 2630 2631 /* 20 in 80MHz */ 2632 #define WL_TX_POWER_20UUL_CCK_FIRST OFFSETOF(txppr_t, b20in80_1x1dsss) 2633 #define WL_TX_POWER_20UUL_OFDM_FIRST OFFSETOF(txppr_t, b20in80_1x1ofdm) 2634 #define WL_TX_POWER_20UUL_S1x1_FIRST OFFSETOF(txppr_t, b20in80_1x1mcs0) 2635 2636 #define WL_TX_POWER_CCK_20UU_CDD_S1x2_FIRST OFFSETOF(txppr_t, b20in80_1x2dsss) 2637 #define WL_TX_POWER_20UUL_OFDM_CDD_FIRST OFFSETOF(txppr_t, b20in80_1x2cdd_ofdm) 2638 #define WL_TX_POWER_20UUL_S1x2_FIRST OFFSETOF(txppr_t, b20in80_1x2cdd_mcs0) 2639 #define WL_TX_POWER_20UUL_STBC_S2x2_FIRST OFFSETOF(txppr_t, b20in80_2x2stbc_mcs0) 2640 #define WL_TX_POWER_20UUL_S2x2_FIRST OFFSETOF(txppr_t, b20in80_2x2sdm_mcs8) 2641 2642 #define WL_TX_POWER_CCK_20UU_CDD_S1x3_FIRST OFFSETOF(txppr_t, b20in80_1x3dsss) 2643 #define WL_TX_POWER_20UUL_OFDM_CDD_S1x3_FIRST OFFSETOF(txppr_t, b20in80_1x3cdd_ofdm) 2644 #define WL_TX_POWER_20UUL_S1x3_FIRST OFFSETOF(txppr_t, b20in80_1x3cdd_mcs0) 2645 #define WL_TX_POWER_20UUL_STBC_S2x3_FIRST OFFSETOF(txppr_t, b20in80_2x3stbc_mcs0) 2646 #define WL_TX_POWER_20UUL_S2x3_FIRST OFFSETOF(txppr_t, b20in80_2x3sdm_mcs8) 2647 #define WL_TX_POWER_20UUL_S3x3_FIRST OFFSETOF(txppr_t, b20in80_3x3sdm_mcs16) 2648 2649 #define WL_TX_POWER_20UUL_S1X1_VHT OFFSETOF(txppr_t, b20in80_1x1vht) 2650 #define WL_TX_POWER_20UUL_S1X2_CDD_VHT OFFSETOF(txppr_t, b20in80_1x2cdd_vht) 2651 #define WL_TX_POWER_20UUL_S2X2_STBC_VHT OFFSETOF(txppr_t, b20in80_2x2stbc_vht) 2652 #define WL_TX_POWER_20UUL_S2X2_VHT OFFSETOF(txppr_t, b20in80_2x2sdm_vht) 2653 #define WL_TX_POWER_20UUL_S1X3_CDD_VHT OFFSETOF(txppr_t, b20in80_1x3cdd_vht) 2654 #define WL_TX_POWER_20UUL_S2X3_STBC_VHT OFFSETOF(txppr_t, b20in80_2x3stbc_vht) 2655 #define WL_TX_POWER_20UUL_S2X3_VHT OFFSETOF(txppr_t, b20in80_2x3sdm_vht) 2656 #define WL_TX_POWER_20UUL_S3X3_VHT OFFSETOF(txppr_t, b20in80_3x3sdm_vht) 2657 2658 /* 40 in 80MHz */ 2659 #define WL_TX_POWER_40UUL_DUMMY_CCK_FIRST OFFSETOF(txppr_t, b40in80_dummy1x1dsss) 2660 #define WL_TX_POWER_40UUL_OFDM_FIRST OFFSETOF(txppr_t, b40in80_1x1ofdm) 2661 #define WL_TX_POWER_40UUL_S1x1_FIRST OFFSETOF(txppr_t, b40in80_1x1mcs0) 2662 2663 #define WL_TX_POWER_CCK_40UU_DUMMY_CDD_S1x2_FIRST OFFSETOF(txppr_t, b40in80_dummy1x2dsss) 2664 #define WL_TX_POWER_40UUL_OFDM_CDD_FIRST OFFSETOF(txppr_t, b40in80_1x2cdd_ofdm) 2665 #define WL_TX_POWER_40UUL_S1x2_FIRST OFFSETOF(txppr_t, b40in80_1x2cdd_mcs0) 2666 #define WL_TX_POWER_40UUL_STBC_S2x2_FIRST OFFSETOF(txppr_t, b40in80_2x2stbc_mcs0) 2667 #define WL_TX_POWER_40UUL_S2x2_FIRST OFFSETOF(txppr_t, b40in80_2x2sdm_mcs8) 2668 2669 #define WL_TX_POWER_CCK_40UU_DUMMY_CDD_S1x3_FIRST OFFSETOF(txppr_t, b40in80_dummy1x3dsss) 2670 #define WL_TX_POWER_40UUL_OFDM_CDD_S1x3_FIRST OFFSETOF(txppr_t, b40in80_1x3cdd_ofdm) 2671 #define WL_TX_POWER_40UUL_S1x3_FIRST OFFSETOF(txppr_t, b40in80_1x3cdd_mcs0) 2672 #define WL_TX_POWER_40UUL_STBC_S2x3_FIRST OFFSETOF(txppr_t, b40in80_2x3stbc_mcs0) 2673 #define WL_TX_POWER_40UUL_S2x3_FIRST OFFSETOF(txppr_t, b40in80_2x3sdm_mcs8) 2674 #define WL_TX_POWER_40UUL_S3x3_FIRST OFFSETOF(txppr_t, b40in80_3x3sdm_mcs16) 2675 2676 #define WL_TX_POWER_40UUL_S1X1_VHT OFFSETOF(txppr_t, b40in80_1x1vht) 2677 #define WL_TX_POWER_40UUL_S1X2_CDD_VHT OFFSETOF(txppr_t, b40in80_1x2cdd_vht) 2678 #define WL_TX_POWER_40UUL_S2X2_STBC_VHT OFFSETOF(txppr_t, b40in80_2x2stbc_vht) 2679 #define WL_TX_POWER_40UUL_S2X2_VHT OFFSETOF(txppr_t, b40in80_2x2sdm_vht) 2680 #define WL_TX_POWER_40UUL_S1X3_CDD_VHT OFFSETOF(txppr_t, b40in80_1x3cdd_vht) 2681 #define WL_TX_POWER_40UUL_S2X3_STBC_VHT OFFSETOF(txppr_t, b40in80_2x3stbc_vht) 2682 #define WL_TX_POWER_40UUL_S2X3_VHT OFFSETOF(txppr_t, b40in80_2x3sdm_vht) 2683 #define WL_TX_POWER_40UUL_S3X3_VHT OFFSETOF(txppr_t, b40in80_3x3sdm_vht) 2684 2685 #define WL_TX_POWER_MCS_32 OFFSETOF(txppr_t, mcs32) /* C_CHECK remove later */ 2686 2687 #define WL_TX_POWER_RATES sizeof(struct txppr) 2688 2689 /* sslpnphy specifics */ 2690 #define WL_TX_POWER_MCS20_SISO_FIRST_SSN WL_TX_POWER_MCS20_SISO_FIRST 2691 #define WL_TX_POWER_MCS40_SISO_FIRST_SSN WL_TX_POWER_MCS40_SISO_FIRST 2692 2693 typedef struct { 2694 uint16 ver; /* version of this struct */ 2695 uint16 len; /* length in bytes of this structure */ 2696 uint32 flags; 2697 chanspec_t chanspec; /* txpwr report for this channel */ 2698 chanspec_t local_chanspec; /* channel on which we are associated */ 2699 uint32 buflen; /* ppr buffer length */ 2700 uint8 pprbuf[1]; /* Latest target power buffer */ 2701 } wl_txppr_t; 2702 2703 #define WL_TXPPR_VERSION 0 2704 #define WL_TXPPR_LENGTH (sizeof(wl_txppr_t)) 2705 #define TX_POWER_T_VERSION 44 2706 2707 /* Defines used with channel_bandwidth for curpower */ 2708 #define WL_BW_20MHZ 0 2709 #define WL_BW_40MHZ 1 2710 #define WL_BW_80MHZ 2 2711 #define WL_BW_160MHZ 3 2712 2713 /* tx_power_t.flags bits */ 2714 /* use for defined PPR_API */ 2715 #define WL_TX_POWER_F_ENABLED 1 2716 #define WL_TX_POWER_F_HW 2 2717 #define WL_TX_POWER_F_MIMO 4 2718 #define WL_TX_POWER_F_SISO 8 2719 #define WL_TX_POWER_F_HT 0x10 2720 #define WL_TX_POWER_F_VHT 0x20 2721 2722 typedef struct { 2723 uint32 flags; 2724 chanspec_t chanspec; /* txpwr report for this channel */ 2725 chanspec_t local_chanspec; /* channel on which we are associated */ 2726 uint8 local_max; /* local max according to the AP */ 2727 uint8 local_constraint; /* local constraint according to the AP */ 2728 int8 antgain[2]; /* Ant gain for each band - from SROM */ 2729 uint8 rf_cores; /* count of RF Cores being reported */ 2730 uint8 est_Pout[4]; /* Latest tx power out estimate per RF chain */ 2731 uint8 est_Pout_act[4]; /* Latest tx power out estimate per RF chain w/o adjustment */ 2732 uint8 est_Pout_cck; /* Latest CCK tx power out estimate */ 2733 uint8 tx_power_max[4]; /* Maximum target power among all rates */ 2734 uint tx_power_max_rate_ind[4]; /* Index of the rate with the max target power */ 2735 uint8 user_limit[WL_TX_POWER_RATES]; /* User limit */ 2736 int8 board_limit[WL_TX_POWER_RATES]; /* Max power board can support (SROM) */ 2737 int8 target[WL_TX_POWER_RATES]; /* Latest target power */ 2738 int8 clm_limits[WL_NUMRATES]; /* regulatory limits - 20, 40 or 80MHz */ 2739 int8 clm_limits_subchan1[WL_NUMRATES]; /* regulatory limits - 20in40 or 40in80 */ 2740 int8 clm_limits_subchan2[WL_NUMRATES]; /* regulatory limits - 20in80MHz */ 2741 int8 sar; /* SAR limit for display by wl executable */ 2742 int8 channel_bandwidth; /* 20, 40 or 80 MHz bandwidth? */ 2743 uint8 version; /* Version of the data format wlu <--> driver */ 2744 uint8 display_core; /* Displayed curpower core */ 2745 int8 target_offsets[4]; /* Target power offsets for current rate per core */ 2746 uint32 last_tx_ratespec; /* Ratespec for last transmition */ 2747 int8 SARLIMIT[MAX_STREAMS_SUPPORTED]; 2748 } tx_power_t; 2749 2750 typedef struct tx_inst_power { 2751 uint8 txpwr_est_Pout[2]; /* Latest estimate for 2.4 and 5 Ghz */ 2752 uint8 txpwr_est_Pout_gofdm; /* Pwr estimate for 2.4 OFDM */ 2753 } tx_inst_power_t; 2754 2755 2756 typedef struct { 2757 uint32 flags; 2758 chanspec_t chanspec; /* txpwr report for this channel */ 2759 chanspec_t local_chanspec; /* channel on which we are associated */ 2760 uint8 local_max; /* local max according to the AP */ 2761 uint8 local_constraint; /* local constraint according to the AP */ 2762 int8 antgain[2]; /* Ant gain for each band - from SROM */ 2763 uint8 rf_cores; /* count of RF Cores being reported */ 2764 uint8 est_Pout[4]; /* Latest tx power out estimate per RF chain */ 2765 uint8 est_Pout_act[4]; /* Latest tx power out estimate per RF chain 2766 * without adjustment 2767 */ 2768 uint8 est_Pout_cck; /* Latest CCK tx power out estimate */ 2769 uint8 tx_power_max[4]; /* Maximum target power among all rates */ 2770 uint tx_power_max_rate_ind[4]; /* Index of the rate with the max target power */ 2771 txppr_t user_limit; /* User limit */ 2772 txppr_t reg_limit; /* Regulatory power limit */ 2773 txppr_t board_limit; /* Max power board can support (SROM) */ 2774 txppr_t target; /* Latest target power */ 2775 } wl_txpwr_t; 2776 2777 #define WL_NUM_TXCHAIN_MAX 4 2778 typedef struct wl_txchain_pwr_offsets { 2779 int8 offset[WL_NUM_TXCHAIN_MAX]; /* quarter dBm signed offset for each chain */ 2780 } wl_txchain_pwr_offsets_t; 2781 2782 /* 802.11h measurement types */ 2783 #define WLC_MEASURE_TPC 1 2784 #define WLC_MEASURE_CHANNEL_BASIC 2 2785 #define WLC_MEASURE_CHANNEL_CCA 3 2786 #define WLC_MEASURE_CHANNEL_RPI 4 2787 2788 /* regulatory enforcement levels */ 2789 #define SPECT_MNGMT_OFF 0 /* both 11h and 11d disabled */ 2790 #define SPECT_MNGMT_LOOSE_11H 1 /* allow non-11h APs in scan lists */ 2791 #define SPECT_MNGMT_STRICT_11H 2 /* prune out non-11h APs from scan list */ 2792 #define SPECT_MNGMT_STRICT_11D 3 /* switch to 802.11D mode */ 2793 /* SPECT_MNGMT_LOOSE_11H_D - same as SPECT_MNGMT_LOOSE with the exception that Country IE 2794 * adoption is done regardless of capability spectrum_management 2795 */ 2796 #define SPECT_MNGMT_LOOSE_11H_D 4 /* operation defined above */ 2797 2798 #define WL_CHAN_VALID_HW (1 << 0) /* valid with current HW */ 2799 #define WL_CHAN_VALID_SW (1 << 1) /* valid with current country setting */ 2800 #define WL_CHAN_BAND_5G (1 << 2) /* 5GHz-band channel */ 2801 #define WL_CHAN_RADAR (1 << 3) /* radar sensitive channel */ 2802 #define WL_CHAN_INACTIVE (1 << 4) /* temporarily inactive due to radar */ 2803 #define WL_CHAN_PASSIVE (1 << 5) /* channel is in passive mode */ 2804 #define WL_CHAN_RESTRICTED (1 << 6) /* restricted use channel */ 2805 2806 /* BTC mode used by "btc_mode" iovar */ 2807 #define WL_BTC_DISABLE 0 /* disable BT coexistence */ 2808 #define WL_BTC_FULLTDM 1 /* full TDM COEX */ 2809 #define WL_BTC_ENABLE 1 /* full TDM COEX to maintain backward compatiblity */ 2810 #define WL_BTC_PREMPT 2 /* full TDM COEX with preemption */ 2811 #define WL_BTC_LITE 3 /* light weight coex for large isolation platform */ 2812 #define WL_BTC_PARALLEL 4 /* BT and WLAN run in parallel with separate antenna */ 2813 #define WL_BTC_HYBRID 5 /* hybrid coex, only ack is allowed to transmit in BT slot */ 2814 #define WL_BTC_DEFAULT 8 /* set the default mode for the device */ 2815 #define WL_INF_BTC_DISABLE 0 2816 #define WL_INF_BTC_ENABLE 1 2817 #define WL_INF_BTC_AUTO 3 2818 2819 /* BTC wire used by "btc_wire" iovar */ 2820 #define WL_BTC_DEFWIRE 0 /* use default wire setting */ 2821 #define WL_BTC_2WIRE 2 /* use 2-wire BTC */ 2822 #define WL_BTC_3WIRE 3 /* use 3-wire BTC */ 2823 #define WL_BTC_4WIRE 4 /* use 4-wire BTC */ 2824 2825 /* BTC flags: BTC configuration that can be set by host */ 2826 #define WL_BTC_FLAG_PREMPT (1 << 0) 2827 #define WL_BTC_FLAG_BT_DEF (1 << 1) 2828 #define WL_BTC_FLAG_ACTIVE_PROT (1 << 2) 2829 #define WL_BTC_FLAG_SIM_RSP (1 << 3) 2830 #define WL_BTC_FLAG_PS_PROTECT (1 << 4) 2831 #define WL_BTC_FLAG_SIM_TX_LP (1 << 5) 2832 #define WL_BTC_FLAG_ECI (1 << 6) 2833 #define WL_BTC_FLAG_LIGHT (1 << 7) 2834 #define WL_BTC_FLAG_PARALLEL (1 << 8) 2835 2836 /* Message levels */ 2837 #define WL_ERROR_VAL 0x00000001 2838 #define WL_TRACE_VAL 0x00000002 2839 #define WL_PRHDRS_VAL 0x00000004 2840 #define WL_PRPKT_VAL 0x00000008 2841 #define WL_INFORM_VAL 0x00000010 2842 #define WL_TMP_VAL 0x00000020 2843 #define WL_OID_VAL 0x00000040 2844 #define WL_RATE_VAL 0x00000080 2845 #define WL_ASSOC_VAL 0x00000100 2846 #define WL_PRUSR_VAL 0x00000200 2847 #define WL_PS_VAL 0x00000400 2848 #define WL_TXPWR_VAL 0x00000800 /* retired in TOT on 6/10/2009 */ 2849 #define WL_PORT_VAL 0x00001000 2850 #define WL_DUAL_VAL 0x00002000 2851 #define WL_WSEC_VAL 0x00004000 2852 #define WL_WSEC_DUMP_VAL 0x00008000 2853 #define WL_LOG_VAL 0x00010000 2854 #define WL_NRSSI_VAL 0x00020000 /* retired in TOT on 6/10/2009 */ 2855 #define WL_LOFT_VAL 0x00040000 /* retired in TOT on 6/10/2009 */ 2856 #define WL_REGULATORY_VAL 0x00080000 2857 #define WL_PHYCAL_VAL 0x00100000 /* retired in TOT on 6/10/2009 */ 2858 #define WL_RADAR_VAL 0x00200000 /* retired in TOT on 6/10/2009 */ 2859 #define WL_MPC_VAL 0x00400000 2860 #define WL_APSTA_VAL 0x00800000 2861 #define WL_DFS_VAL 0x01000000 2862 #define WL_BA_VAL 0x02000000 /* retired in TOT on 6/14/2010 */ 2863 #define WL_ACI_VAL 0x04000000 2864 #define WL_MBSS_VAL 0x04000000 2865 #define WL_CAC_VAL 0x08000000 2866 #define WL_AMSDU_VAL 0x10000000 2867 #define WL_AMPDU_VAL 0x20000000 2868 #define WL_FFPLD_VAL 0x40000000 2869 2870 /* wl_msg_level is full. For new bits take the next one and AND with 2871 * wl_msg_level2 in wl_dbg.h 2872 */ 2873 #define WL_DPT_VAL 0x00000001 2874 #define WL_SCAN_VAL 0x00000002 2875 #define WL_WOWL_VAL 0x00000004 2876 #define WL_COEX_VAL 0x00000008 2877 #define WL_RTDC_VAL 0x00000010 2878 #define WL_PROTO_VAL 0x00000020 2879 #define WL_BTA_VAL 0x00000040 2880 #define WL_CHANINT_VAL 0x00000080 2881 #define WL_THERMAL_VAL 0x00000100 /* retired in TOT on 6/10/2009 */ 2882 #define WL_P2P_VAL 0x00000200 2883 #define WL_ITFR_VAL 0x00000400 2884 #define WL_MCHAN_VAL 0x00000800 2885 #define WL_TDLS_VAL 0x00001000 2886 #define WL_MCNX_VAL 0x00002000 2887 #define WL_PROT_VAL 0x00004000 2888 #define WL_PSTA_VAL 0x00008000 2889 #define WL_TBTT_VAL 0x00010000 2890 #define WL_NIC_VAL 0x00020000 2891 #define WL_PWRSEL_VAL 0x00040000 2892 #define WL_TRF_MGMT_VAL 0x00080000 2893 #define WL_L2FILTER_VAL 0x00100000 2894 #define WL_TSO_VAL 0x00200000 2895 #define WL_MQ_VAL 0x00400000 2896 /* These 3 levels are currently not used in trunk but in Aardvark and Phoenix2 with != values */ 2897 #define WL_LPC_VAL 0x00800000 2898 #define WL_TXBF_VAL 0x01000000 2899 #define WL_P2PO_VAL 0x02000000 2900 /* This level is synchronized with other branches */ 2901 #define WL_WNM_VAL 0x04000000 2902 /* This level is currently not used in trunk but used in Phoenix2 */ 2903 #define WL_SRSCAN_VAL 0x08000000 2904 2905 /* use top-bit for WL_TIME_STAMP_VAL because this is a modifier 2906 * rather than a message-type of its own 2907 */ 2908 #define WL_TIMESTAMP_VAL 0x80000000 2909 2910 /* max # of leds supported by GPIO (gpio pin# == led index#) */ 2911 #define WL_LED_NUMGPIO 32 /* gpio 0-31 */ 2912 2913 /* led per-pin behaviors */ 2914 #define WL_LED_OFF 0 /* always off */ 2915 #define WL_LED_ON 1 /* always on */ 2916 #define WL_LED_ACTIVITY 2 /* activity */ 2917 #define WL_LED_RADIO 3 /* radio enabled */ 2918 #define WL_LED_ARADIO 4 /* 5 Ghz radio enabled */ 2919 #define WL_LED_BRADIO 5 /* 2.4Ghz radio enabled */ 2920 #define WL_LED_BGMODE 6 /* on if gmode, off if bmode */ 2921 #define WL_LED_WI1 7 2922 #define WL_LED_WI2 8 2923 #define WL_LED_WI3 9 2924 #define WL_LED_ASSOC 10 /* associated state indicator */ 2925 #define WL_LED_INACTIVE 11 /* null behavior (clears default behavior) */ 2926 #define WL_LED_ASSOCACT 12 /* on when associated; blink fast for activity */ 2927 #define WL_LED_WI4 13 2928 #define WL_LED_WI5 14 2929 #define WL_LED_BLINKSLOW 15 /* blink slow */ 2930 #define WL_LED_BLINKMED 16 /* blink med */ 2931 #define WL_LED_BLINKFAST 17 /* blink fast */ 2932 #define WL_LED_BLINKCUSTOM 18 /* blink custom */ 2933 #define WL_LED_BLINKPERIODIC 19 /* blink periodic (custom 1000ms / off 400ms) */ 2934 #define WL_LED_ASSOC_WITH_SEC 20 /* when connected with security */ 2935 /* keep on for 300 sec */ 2936 #define WL_LED_START_OFF 21 /* off upon boot, could be turned on later */ 2937 #define WL_LED_W6 22 /* off upon boot, could be turned on later */ 2938 #define WL_LED_WI7 23 /* off upon boot, could be turned on later */ 2939 #define WL_LED_NUMBEHAVIOR 24 2940 2941 /* led behavior numeric value format */ 2942 #define WL_LED_BEH_MASK 0x7f /* behavior mask */ 2943 #define WL_LED_AL_MASK 0x80 /* activelow (polarity) bit */ 2944 2945 /* maximum channels returned by the get valid channels iovar */ 2946 #define WL_NUMCHANNELS 64 2947 2948 /* max number of chanspecs (used by the iovar to calc. buf space) */ 2949 #define WL_NUMCHANSPECS 110 2950 2951 /* WDS link local endpoint WPA role */ 2952 #define WL_WDS_WPA_ROLE_AUTH 0 /* authenticator */ 2953 #define WL_WDS_WPA_ROLE_SUP 1 /* supplicant */ 2954 #define WL_WDS_WPA_ROLE_AUTO 255 /* auto, based on mac addr value */ 2955 2956 /* number of bytes needed to define a 128-bit mask for MAC event reporting */ 2957 #define WL_EVENTING_MASK_LEN 16 2958 2959 /* 2960 * Join preference iovar value is an array of tuples. Each tuple has a one-byte type, 2961 * a one-byte length, and a variable length value. RSSI type tuple must be present 2962 * in the array. 2963 * 2964 * Types are defined in "join preference types" section. 2965 * 2966 * Length is the value size in octets. It is reserved for WL_JOIN_PREF_WPA type tuple 2967 * and must be set to zero. 2968 * 2969 * Values are defined below. 2970 * 2971 * 1. RSSI - 2 octets 2972 * offset 0: reserved 2973 * offset 1: reserved 2974 * 2975 * 2. WPA - 2 + 12 * n octets (n is # tuples defined below) 2976 * offset 0: reserved 2977 * offset 1: # of tuples 2978 * offset 2: tuple 1 2979 * offset 14: tuple 2 2980 * ... 2981 * offset 2 + 12 * (n - 1) octets: tuple n 2982 * 2983 * struct wpa_cfg_tuple { 2984 * uint8 akm[DOT11_OUI_LEN+1]; akm suite 2985 * uint8 ucipher[DOT11_OUI_LEN+1]; unicast cipher suite 2986 * uint8 mcipher[DOT11_OUI_LEN+1]; multicast cipher suite 2987 * }; 2988 * 2989 * multicast cipher suite can be specified as a specific cipher suite or WL_WPA_ACP_MCS_ANY. 2990 * 2991 * 3. BAND - 2 octets 2992 * offset 0: reserved 2993 * offset 1: see "band preference" and "band types" 2994 * 2995 * 4. BAND RSSI - 2 octets 2996 * offset 0: band types 2997 * offset 1: +ve RSSI boost value in dB 2998 */ 2999 3000 /* join preference types */ 3001 #define WL_JOIN_PREF_RSSI 1 /* by RSSI */ 3002 #define WL_JOIN_PREF_WPA 2 /* by akm and ciphers */ 3003 #define WL_JOIN_PREF_BAND 3 /* by 802.11 band */ 3004 #define WL_JOIN_PREF_RSSI_DELTA 4 /* by 802.11 band only if RSSI delta condition matches */ 3005 #define WL_JOIN_PREF_TRANS_PREF 5 /* defined by requesting AP */ 3006 3007 /* band preference */ 3008 #define WLJP_BAND_ASSOC_PREF 255 /* use what WLC_SET_ASSOC_PREFER ioctl specifies */ 3009 3010 /* any multicast cipher suite */ 3011 #define WL_WPA_ACP_MCS_ANY "\x00\x00\x00\x00" 3012 3013 struct tsinfo_arg { 3014 uint8 octets[3]; 3015 }; 3016 #endif /* LINUX_POSTMOGRIFY_REMOVAL */ 3017 3018 #define NFIFO 6 /* # tx/rx fifopairs */ 3019 3020 #define WL_CNT_T_VERSION 8 /* current version of wl_cnt_t struct */ 3021 3022 typedef struct { 3023 uint16 version; /* see definition of WL_CNT_T_VERSION */ 3024 uint16 length; /* length of entire structure */ 3025 3026 /* transmit stat counters */ 3027 uint32 txframe; /* tx data frames */ 3028 uint32 txbyte; /* tx data bytes */ 3029 uint32 txretrans; /* tx mac retransmits */ 3030 uint32 txerror; /* tx data errors (derived: sum of others) */ 3031 uint32 txctl; /* tx management frames */ 3032 uint32 txprshort; /* tx short preamble frames */ 3033 uint32 txserr; /* tx status errors */ 3034 uint32 txnobuf; /* tx out of buffers errors */ 3035 uint32 txnoassoc; /* tx discard because we're not associated */ 3036 uint32 txrunt; /* tx runt frames */ 3037 uint32 txchit; /* tx header cache hit (fastpath) */ 3038 uint32 txcmiss; /* tx header cache miss (slowpath) */ 3039 3040 /* transmit chip error counters */ 3041 uint32 txuflo; /* tx fifo underflows */ 3042 uint32 txphyerr; /* tx phy errors (indicated in tx status) */ 3043 uint32 txphycrs; 3044 3045 /* receive stat counters */ 3046 uint32 rxframe; /* rx data frames */ 3047 uint32 rxbyte; /* rx data bytes */ 3048 uint32 rxerror; /* rx data errors (derived: sum of others) */ 3049 uint32 rxctl; /* rx management frames */ 3050 uint32 rxnobuf; /* rx out of buffers errors */ 3051 uint32 rxnondata; /* rx non data frames in the data channel errors */ 3052 uint32 rxbadds; /* rx bad DS errors */ 3053 uint32 rxbadcm; /* rx bad control or management frames */ 3054 uint32 rxfragerr; /* rx fragmentation errors */ 3055 uint32 rxrunt; /* rx runt frames */ 3056 uint32 rxgiant; /* rx giant frames */ 3057 uint32 rxnoscb; /* rx no scb error */ 3058 uint32 rxbadproto; /* rx invalid frames */ 3059 uint32 rxbadsrcmac; /* rx frames with Invalid Src Mac */ 3060 uint32 rxbadda; /* rx frames tossed for invalid da */ 3061 uint32 rxfilter; /* rx frames filtered out */ 3062 3063 /* receive chip error counters */ 3064 uint32 rxoflo; /* rx fifo overflow errors */ 3065 uint32 rxuflo[NFIFO]; /* rx dma descriptor underflow errors */ 3066 3067 uint32 d11cnt_txrts_off; /* d11cnt txrts value when reset d11cnt */ 3068 uint32 d11cnt_rxcrc_off; /* d11cnt rxcrc value when reset d11cnt */ 3069 uint32 d11cnt_txnocts_off; /* d11cnt txnocts value when reset d11cnt */ 3070 3071 /* misc counters */ 3072 uint32 dmade; /* tx/rx dma descriptor errors */ 3073 uint32 dmada; /* tx/rx dma data errors */ 3074 uint32 dmape; /* tx/rx dma descriptor protocol errors */ 3075 uint32 reset; /* reset count */ 3076 uint32 tbtt; /* cnts the TBTT int's */ 3077 uint32 txdmawar; 3078 uint32 pkt_callback_reg_fail; /* callbacks register failure */ 3079 3080 /* MAC counters: 32-bit version of d11.h's macstat_t */ 3081 uint32 txallfrm; /* total number of frames sent, incl. Data, ACK, RTS, CTS, 3082 * Control Management (includes retransmissions) 3083 */ 3084 uint32 txrtsfrm; /* number of RTS sent out by the MAC */ 3085 uint32 txctsfrm; /* number of CTS sent out by the MAC */ 3086 uint32 txackfrm; /* number of ACK frames sent out */ 3087 uint32 txdnlfrm; /* Not used */ 3088 uint32 txbcnfrm; /* beacons transmitted */ 3089 uint32 txfunfl[8]; /* per-fifo tx underflows */ 3090 uint32 txtplunfl; /* Template underflows (mac was too slow to transmit ACK/CTS 3091 * or BCN) 3092 */ 3093 uint32 txphyerror; /* Transmit phy error, type of error is reported in tx-status for 3094 * driver enqueued frames 3095 */ 3096 uint32 rxfrmtoolong; /* Received frame longer than legal limit (2346 bytes) */ 3097 uint32 rxfrmtooshrt; /* Received frame did not contain enough bytes for its frame type */ 3098 uint32 rxinvmachdr; /* Either the protocol version != 0 or frame type not 3099 * data/control/management 3100 */ 3101 uint32 rxbadfcs; /* number of frames for which the CRC check failed in the MAC */ 3102 uint32 rxbadplcp; /* parity check of the PLCP header failed */ 3103 uint32 rxcrsglitch; /* PHY was able to correlate the preamble but not the header */ 3104 uint32 rxstrt; /* Number of received frames with a good PLCP 3105 * (i.e. passing parity check) 3106 */ 3107 uint32 rxdfrmucastmbss; /* Number of received DATA frames with good FCS and matching RA */ 3108 uint32 rxmfrmucastmbss; /* number of received mgmt frames with good FCS and matching RA */ 3109 uint32 rxcfrmucast; /* number of received CNTRL frames with good FCS and matching RA */ 3110 uint32 rxrtsucast; /* number of unicast RTS addressed to the MAC (good FCS) */ 3111 uint32 rxctsucast; /* number of unicast CTS addressed to the MAC (good FCS) */ 3112 uint32 rxackucast; /* number of ucast ACKS received (good FCS) */ 3113 uint32 rxdfrmocast; /* number of received DATA frames (good FCS and not matching RA) */ 3114 uint32 rxmfrmocast; /* number of received MGMT frames (good FCS and not matching RA) */ 3115 uint32 rxcfrmocast; /* number of received CNTRL frame (good FCS and not matching RA) */ 3116 uint32 rxrtsocast; /* number of received RTS not addressed to the MAC */ 3117 uint32 rxctsocast; /* number of received CTS not addressed to the MAC */ 3118 uint32 rxdfrmmcast; /* number of RX Data multicast frames received by the MAC */ 3119 uint32 rxmfrmmcast; /* number of RX Management multicast frames received by the MAC */ 3120 uint32 rxcfrmmcast; /* number of RX Control multicast frames received by the MAC 3121 * (unlikely to see these) 3122 */ 3123 uint32 rxbeaconmbss; /* beacons received from member of BSS */ 3124 uint32 rxdfrmucastobss; /* number of unicast frames addressed to the MAC from 3125 * other BSS (WDS FRAME) 3126 */ 3127 uint32 rxbeaconobss; /* beacons received from other BSS */ 3128 uint32 rxrsptmout; /* Number of response timeouts for transmitted frames 3129 * expecting a response 3130 */ 3131 uint32 bcntxcancl; /* transmit beacons canceled due to receipt of beacon (IBSS) */ 3132 uint32 rxf0ovfl; /* Number of receive fifo 0 overflows */ 3133 uint32 rxf1ovfl; /* Number of receive fifo 1 overflows (obsolete) */ 3134 uint32 rxf2ovfl; /* Number of receive fifo 2 overflows (obsolete) */ 3135 uint32 txsfovfl; /* Number of transmit status fifo overflows (obsolete) */ 3136 uint32 pmqovfl; /* Number of PMQ overflows */ 3137 uint32 rxcgprqfrm; /* Number of received Probe requests that made it into 3138 * the PRQ fifo 3139 */ 3140 uint32 rxcgprsqovfl; /* Rx Probe Request Que overflow in the AP */ 3141 uint32 txcgprsfail; /* Tx Probe Response Fail. AP sent probe response but did 3142 * not get ACK 3143 */ 3144 uint32 txcgprssuc; /* Tx Probe Response Success (ACK was received) */ 3145 uint32 prs_timeout; /* Number of probe requests that were dropped from the PRQ 3146 * fifo because a probe response could not be sent out within 3147 * the time limit defined in M_PRS_MAXTIME 3148 */ 3149 uint32 rxnack; /* obsolete */ 3150 uint32 frmscons; /* obsolete */ 3151 uint32 txnack; /* obsolete */ 3152 uint32 txglitch_nack; /* obsolete */ 3153 uint32 txburst; /* obsolete */ 3154 3155 /* 802.11 MIB counters, pp. 614 of 802.11 reaff doc. */ 3156 uint32 txfrag; /* dot11TransmittedFragmentCount */ 3157 uint32 txmulti; /* dot11MulticastTransmittedFrameCount */ 3158 uint32 txfail; /* dot11FailedCount */ 3159 uint32 txretry; /* dot11RetryCount */ 3160 uint32 txretrie; /* dot11MultipleRetryCount */ 3161 uint32 rxdup; /* dot11FrameduplicateCount */ 3162 uint32 txrts; /* dot11RTSSuccessCount */ 3163 uint32 txnocts; /* dot11RTSFailureCount */ 3164 uint32 txnoack; /* dot11ACKFailureCount */ 3165 uint32 rxfrag; /* dot11ReceivedFragmentCount */ 3166 uint32 rxmulti; /* dot11MulticastReceivedFrameCount */ 3167 uint32 rxcrc; /* dot11FCSErrorCount */ 3168 uint32 txfrmsnt; /* dot11TransmittedFrameCount (bogus MIB?) */ 3169 uint32 rxundec; /* dot11WEPUndecryptableCount */ 3170 3171 /* WPA2 counters (see rxundec for DecryptFailureCount) */ 3172 uint32 tkipmicfaill; /* TKIPLocalMICFailures */ 3173 uint32 tkipcntrmsr; /* TKIPCounterMeasuresInvoked */ 3174 uint32 tkipreplay; /* TKIPReplays */ 3175 uint32 ccmpfmterr; /* CCMPFormatErrors */ 3176 uint32 ccmpreplay; /* CCMPReplays */ 3177 uint32 ccmpundec; /* CCMPDecryptErrors */ 3178 uint32 fourwayfail; /* FourWayHandshakeFailures */ 3179 uint32 wepundec; /* dot11WEPUndecryptableCount */ 3180 uint32 wepicverr; /* dot11WEPICVErrorCount */ 3181 uint32 decsuccess; /* DecryptSuccessCount */ 3182 uint32 tkipicverr; /* TKIPICVErrorCount */ 3183 uint32 wepexcluded; /* dot11WEPExcludedCount */ 3184 3185 uint32 txchanrej; /* Tx frames suppressed due to channel rejection */ 3186 uint32 psmwds; /* Count PSM watchdogs */ 3187 uint32 phywatchdog; /* Count Phy watchdogs (triggered by ucode) */ 3188 3189 /* MBSS counters, AP only */ 3190 uint32 prq_entries_handled; /* PRQ entries read in */ 3191 uint32 prq_undirected_entries; /* which were bcast bss & ssid */ 3192 uint32 prq_bad_entries; /* which could not be translated to info */ 3193 uint32 atim_suppress_count; /* TX suppressions on ATIM fifo */ 3194 uint32 bcn_template_not_ready; /* Template marked in use on send bcn ... */ 3195 uint32 bcn_template_not_ready_done; /* ...but "DMA done" interrupt rcvd */ 3196 uint32 late_tbtt_dpc; /* TBTT DPC did not happen in time */ 3197 3198 /* per-rate receive stat counters */ 3199 uint32 rx1mbps; /* packets rx at 1Mbps */ 3200 uint32 rx2mbps; /* packets rx at 2Mbps */ 3201 uint32 rx5mbps5; /* packets rx at 5.5Mbps */ 3202 uint32 rx6mbps; /* packets rx at 6Mbps */ 3203 uint32 rx9mbps; /* packets rx at 9Mbps */ 3204 uint32 rx11mbps; /* packets rx at 11Mbps */ 3205 uint32 rx12mbps; /* packets rx at 12Mbps */ 3206 uint32 rx18mbps; /* packets rx at 18Mbps */ 3207 uint32 rx24mbps; /* packets rx at 24Mbps */ 3208 uint32 rx36mbps; /* packets rx at 36Mbps */ 3209 uint32 rx48mbps; /* packets rx at 48Mbps */ 3210 uint32 rx54mbps; /* packets rx at 54Mbps */ 3211 uint32 rx108mbps; /* packets rx at 108mbps */ 3212 uint32 rx162mbps; /* packets rx at 162mbps */ 3213 uint32 rx216mbps; /* packets rx at 216 mbps */ 3214 uint32 rx270mbps; /* packets rx at 270 mbps */ 3215 uint32 rx324mbps; /* packets rx at 324 mbps */ 3216 uint32 rx378mbps; /* packets rx at 378 mbps */ 3217 uint32 rx432mbps; /* packets rx at 432 mbps */ 3218 uint32 rx486mbps; /* packets rx at 486 mbps */ 3219 uint32 rx540mbps; /* packets rx at 540 mbps */ 3220 3221 /* pkteng rx frame stats */ 3222 uint32 pktengrxducast; /* unicast frames rxed by the pkteng code */ 3223 uint32 pktengrxdmcast; /* multicast frames rxed by the pkteng code */ 3224 3225 uint32 rfdisable; /* count of radio disables */ 3226 uint32 bphy_rxcrsglitch; /* PHY count of bphy glitches */ 3227 3228 uint32 txexptime; /* Tx frames suppressed due to timer expiration */ 3229 3230 uint32 txmpdu_sgi; /* count for sgi transmit */ 3231 uint32 rxmpdu_sgi; /* count for sgi received */ 3232 uint32 txmpdu_stbc; /* count for stbc transmit */ 3233 uint32 rxmpdu_stbc; /* count for stbc received */ 3234 3235 uint32 rxundec_mcst; /* dot11WEPUndecryptableCount */ 3236 3237 /* WPA2 counters (see rxundec for DecryptFailureCount) */ 3238 uint32 tkipmicfaill_mcst; /* TKIPLocalMICFailures */ 3239 uint32 tkipcntrmsr_mcst; /* TKIPCounterMeasuresInvoked */ 3240 uint32 tkipreplay_mcst; /* TKIPReplays */ 3241 uint32 ccmpfmterr_mcst; /* CCMPFormatErrors */ 3242 uint32 ccmpreplay_mcst; /* CCMPReplays */ 3243 uint32 ccmpundec_mcst; /* CCMPDecryptErrors */ 3244 uint32 fourwayfail_mcst; /* FourWayHandshakeFailures */ 3245 uint32 wepundec_mcst; /* dot11WEPUndecryptableCount */ 3246 uint32 wepicverr_mcst; /* dot11WEPICVErrorCount */ 3247 uint32 decsuccess_mcst; /* DecryptSuccessCount */ 3248 uint32 tkipicverr_mcst; /* TKIPICVErrorCount */ 3249 uint32 wepexcluded_mcst; /* dot11WEPExcludedCount */ 3250 3251 uint32 dma_hang; /* count for dma hang */ 3252 uint32 reinit; /* count for reinit */ 3253 3254 uint32 pstatxucast; /* count of ucast frames xmitted on all psta assoc */ 3255 uint32 pstatxnoassoc; /* count of txnoassoc frames xmitted on all psta assoc */ 3256 uint32 pstarxucast; /* count of ucast frames received on all psta assoc */ 3257 uint32 pstarxbcmc; /* count of bcmc frames received on all psta */ 3258 uint32 pstatxbcmc; /* count of bcmc frames transmitted on all psta */ 3259 3260 uint32 cso_passthrough; /* hw cso required but passthrough */ 3261 uint32 chained; /* number of frames chained */ 3262 uint32 chainedsz1; /* number of chain size 1 frames */ 3263 uint32 unchained; /* number of frames not chained */ 3264 uint32 maxchainsz; /* max chain size so far */ 3265 uint32 currchainsz; /* current chain size */ 3266 uint32 cso_normal; /* hw cso hdr for normal process */ 3267 } wl_cnt_t; 3268 3269 #ifndef LINUX_POSTMOGRIFY_REMOVAL 3270 typedef struct { 3271 uint16 version; /* see definition of WL_CNT_T_VERSION */ 3272 uint16 length; /* length of entire structure */ 3273 3274 /* transmit stat counters */ 3275 uint32 txframe; /* tx data frames */ 3276 uint32 txbyte; /* tx data bytes */ 3277 uint32 txretrans; /* tx mac retransmits */ 3278 uint32 txerror; /* tx data errors (derived: sum of others) */ 3279 uint32 txctl; /* tx management frames */ 3280 uint32 txprshort; /* tx short preamble frames */ 3281 uint32 txserr; /* tx status errors */ 3282 uint32 txnobuf; /* tx out of buffers errors */ 3283 uint32 txnoassoc; /* tx discard because we're not associated */ 3284 uint32 txrunt; /* tx runt frames */ 3285 uint32 txchit; /* tx header cache hit (fastpath) */ 3286 uint32 txcmiss; /* tx header cache miss (slowpath) */ 3287 3288 /* transmit chip error counters */ 3289 uint32 txuflo; /* tx fifo underflows */ 3290 uint32 txphyerr; /* tx phy errors (indicated in tx status) */ 3291 uint32 txphycrs; 3292 3293 /* receive stat counters */ 3294 uint32 rxframe; /* rx data frames */ 3295 uint32 rxbyte; /* rx data bytes */ 3296 uint32 rxerror; /* rx data errors (derived: sum of others) */ 3297 uint32 rxctl; /* rx management frames */ 3298 uint32 rxnobuf; /* rx out of buffers errors */ 3299 uint32 rxnondata; /* rx non data frames in the data channel errors */ 3300 uint32 rxbadds; /* rx bad DS errors */ 3301 uint32 rxbadcm; /* rx bad control or management frames */ 3302 uint32 rxfragerr; /* rx fragmentation errors */ 3303 uint32 rxrunt; /* rx runt frames */ 3304 uint32 rxgiant; /* rx giant frames */ 3305 uint32 rxnoscb; /* rx no scb error */ 3306 uint32 rxbadproto; /* rx invalid frames */ 3307 uint32 rxbadsrcmac; /* rx frames with Invalid Src Mac */ 3308 uint32 rxbadda; /* rx frames tossed for invalid da */ 3309 uint32 rxfilter; /* rx frames filtered out */ 3310 3311 /* receive chip error counters */ 3312 uint32 rxoflo; /* rx fifo overflow errors */ 3313 uint32 rxuflo[NFIFO]; /* rx dma descriptor underflow errors */ 3314 3315 uint32 d11cnt_txrts_off; /* d11cnt txrts value when reset d11cnt */ 3316 uint32 d11cnt_rxcrc_off; /* d11cnt rxcrc value when reset d11cnt */ 3317 uint32 d11cnt_txnocts_off; /* d11cnt txnocts value when reset d11cnt */ 3318 3319 /* misc counters */ 3320 uint32 dmade; /* tx/rx dma descriptor errors */ 3321 uint32 dmada; /* tx/rx dma data errors */ 3322 uint32 dmape; /* tx/rx dma descriptor protocol errors */ 3323 uint32 reset; /* reset count */ 3324 uint32 tbtt; /* cnts the TBTT int's */ 3325 uint32 txdmawar; 3326 uint32 pkt_callback_reg_fail; /* callbacks register failure */ 3327 3328 /* MAC counters: 32-bit version of d11.h's macstat_t */ 3329 uint32 txallfrm; /* total number of frames sent, incl. Data, ACK, RTS, CTS, 3330 * Control Management (includes retransmissions) 3331 */ 3332 uint32 txrtsfrm; /* number of RTS sent out by the MAC */ 3333 uint32 txctsfrm; /* number of CTS sent out by the MAC */ 3334 uint32 txackfrm; /* number of ACK frames sent out */ 3335 uint32 txdnlfrm; /* Not used */ 3336 uint32 txbcnfrm; /* beacons transmitted */ 3337 uint32 txfunfl[8]; /* per-fifo tx underflows */ 3338 uint32 txtplunfl; /* Template underflows (mac was too slow to transmit ACK/CTS 3339 * or BCN) 3340 */ 3341 uint32 txphyerror; /* Transmit phy error, type of error is reported in tx-status for 3342 * driver enqueued frames 3343 */ 3344 uint32 rxfrmtoolong; /* Received frame longer than legal limit (2346 bytes) */ 3345 uint32 rxfrmtooshrt; /* Received frame did not contain enough bytes for its frame type */ 3346 uint32 rxinvmachdr; /* Either the protocol version != 0 or frame type not 3347 * data/control/management 3348 */ 3349 uint32 rxbadfcs; /* number of frames for which the CRC check failed in the MAC */ 3350 uint32 rxbadplcp; /* parity check of the PLCP header failed */ 3351 uint32 rxcrsglitch; /* PHY was able to correlate the preamble but not the header */ 3352 uint32 rxstrt; /* Number of received frames with a good PLCP 3353 * (i.e. passing parity check) 3354 */ 3355 uint32 rxdfrmucastmbss; /* Number of received DATA frames with good FCS and matching RA */ 3356 uint32 rxmfrmucastmbss; /* number of received mgmt frames with good FCS and matching RA */ 3357 uint32 rxcfrmucast; /* number of received CNTRL frames with good FCS and matching RA */ 3358 uint32 rxrtsucast; /* number of unicast RTS addressed to the MAC (good FCS) */ 3359 uint32 rxctsucast; /* number of unicast CTS addressed to the MAC (good FCS) */ 3360 uint32 rxackucast; /* number of ucast ACKS received (good FCS) */ 3361 uint32 rxdfrmocast; /* number of received DATA frames (good FCS and not matching RA) */ 3362 uint32 rxmfrmocast; /* number of received MGMT frames (good FCS and not matching RA) */ 3363 uint32 rxcfrmocast; /* number of received CNTRL frame (good FCS and not matching RA) */ 3364 uint32 rxrtsocast; /* number of received RTS not addressed to the MAC */ 3365 uint32 rxctsocast; /* number of received CTS not addressed to the MAC */ 3366 uint32 rxdfrmmcast; /* number of RX Data multicast frames received by the MAC */ 3367 uint32 rxmfrmmcast; /* number of RX Management multicast frames received by the MAC */ 3368 uint32 rxcfrmmcast; /* number of RX Control multicast frames received by the MAC 3369 * (unlikely to see these) 3370 */ 3371 uint32 rxbeaconmbss; /* beacons received from member of BSS */ 3372 uint32 rxdfrmucastobss; /* number of unicast frames addressed to the MAC from 3373 * other BSS (WDS FRAME) 3374 */ 3375 uint32 rxbeaconobss; /* beacons received from other BSS */ 3376 uint32 rxrsptmout; /* Number of response timeouts for transmitted frames 3377 * expecting a response 3378 */ 3379 uint32 bcntxcancl; /* transmit beacons canceled due to receipt of beacon (IBSS) */ 3380 uint32 rxf0ovfl; /* Number of receive fifo 0 overflows */ 3381 uint32 rxf1ovfl; /* Number of receive fifo 1 overflows (obsolete) */ 3382 uint32 rxf2ovfl; /* Number of receive fifo 2 overflows (obsolete) */ 3383 uint32 txsfovfl; /* Number of transmit status fifo overflows (obsolete) */ 3384 uint32 pmqovfl; /* Number of PMQ overflows */ 3385 uint32 rxcgprqfrm; /* Number of received Probe requests that made it into 3386 * the PRQ fifo 3387 */ 3388 uint32 rxcgprsqovfl; /* Rx Probe Request Que overflow in the AP */ 3389 uint32 txcgprsfail; /* Tx Probe Response Fail. AP sent probe response but did 3390 * not get ACK 3391 */ 3392 uint32 txcgprssuc; /* Tx Probe Response Success (ACK was received) */ 3393 uint32 prs_timeout; /* Number of probe requests that were dropped from the PRQ 3394 * fifo because a probe response could not be sent out within 3395 * the time limit defined in M_PRS_MAXTIME 3396 */ 3397 uint32 rxnack; 3398 uint32 frmscons; 3399 uint32 txnack; 3400 uint32 txglitch_nack; /* obsolete */ 3401 uint32 txburst; /* obsolete */ 3402 3403 /* 802.11 MIB counters, pp. 614 of 802.11 reaff doc. */ 3404 uint32 txfrag; /* dot11TransmittedFragmentCount */ 3405 uint32 txmulti; /* dot11MulticastTransmittedFrameCount */ 3406 uint32 txfail; /* dot11FailedCount */ 3407 uint32 txretry; /* dot11RetryCount */ 3408 uint32 txretrie; /* dot11MultipleRetryCount */ 3409 uint32 rxdup; /* dot11FrameduplicateCount */ 3410 uint32 txrts; /* dot11RTSSuccessCount */ 3411 uint32 txnocts; /* dot11RTSFailureCount */ 3412 uint32 txnoack; /* dot11ACKFailureCount */ 3413 uint32 rxfrag; /* dot11ReceivedFragmentCount */ 3414 uint32 rxmulti; /* dot11MulticastReceivedFrameCount */ 3415 uint32 rxcrc; /* dot11FCSErrorCount */ 3416 uint32 txfrmsnt; /* dot11TransmittedFrameCount (bogus MIB?) */ 3417 uint32 rxundec; /* dot11WEPUndecryptableCount */ 3418 3419 /* WPA2 counters (see rxundec for DecryptFailureCount) */ 3420 uint32 tkipmicfaill; /* TKIPLocalMICFailures */ 3421 uint32 tkipcntrmsr; /* TKIPCounterMeasuresInvoked */ 3422 uint32 tkipreplay; /* TKIPReplays */ 3423 uint32 ccmpfmterr; /* CCMPFormatErrors */ 3424 uint32 ccmpreplay; /* CCMPReplays */ 3425 uint32 ccmpundec; /* CCMPDecryptErrors */ 3426 uint32 fourwayfail; /* FourWayHandshakeFailures */ 3427 uint32 wepundec; /* dot11WEPUndecryptableCount */ 3428 uint32 wepicverr; /* dot11WEPICVErrorCount */ 3429 uint32 decsuccess; /* DecryptSuccessCount */ 3430 uint32 tkipicverr; /* TKIPICVErrorCount */ 3431 uint32 wepexcluded; /* dot11WEPExcludedCount */ 3432 3433 uint32 rxundec_mcst; /* dot11WEPUndecryptableCount */ 3434 3435 /* WPA2 counters (see rxundec for DecryptFailureCount) */ 3436 uint32 tkipmicfaill_mcst; /* TKIPLocalMICFailures */ 3437 uint32 tkipcntrmsr_mcst; /* TKIPCounterMeasuresInvoked */ 3438 uint32 tkipreplay_mcst; /* TKIPReplays */ 3439 uint32 ccmpfmterr_mcst; /* CCMPFormatErrors */ 3440 uint32 ccmpreplay_mcst; /* CCMPReplays */ 3441 uint32 ccmpundec_mcst; /* CCMPDecryptErrors */ 3442 uint32 fourwayfail_mcst; /* FourWayHandshakeFailures */ 3443 uint32 wepundec_mcst; /* dot11WEPUndecryptableCount */ 3444 uint32 wepicverr_mcst; /* dot11WEPICVErrorCount */ 3445 uint32 decsuccess_mcst; /* DecryptSuccessCount */ 3446 uint32 tkipicverr_mcst; /* TKIPICVErrorCount */ 3447 uint32 wepexcluded_mcst; /* dot11WEPExcludedCount */ 3448 3449 uint32 txchanrej; /* Tx frames suppressed due to channel rejection */ 3450 uint32 txexptime; /* Tx frames suppressed due to timer expiration */ 3451 uint32 psmwds; /* Count PSM watchdogs */ 3452 uint32 phywatchdog; /* Count Phy watchdogs (triggered by ucode) */ 3453 3454 /* MBSS counters, AP only */ 3455 uint32 prq_entries_handled; /* PRQ entries read in */ 3456 uint32 prq_undirected_entries; /* which were bcast bss & ssid */ 3457 uint32 prq_bad_entries; /* which could not be translated to info */ 3458 uint32 atim_suppress_count; /* TX suppressions on ATIM fifo */ 3459 uint32 bcn_template_not_ready; /* Template marked in use on send bcn ... */ 3460 uint32 bcn_template_not_ready_done; /* ...but "DMA done" interrupt rcvd */ 3461 uint32 late_tbtt_dpc; /* TBTT DPC did not happen in time */ 3462 3463 /* per-rate receive stat counters */ 3464 uint32 rx1mbps; /* packets rx at 1Mbps */ 3465 uint32 rx2mbps; /* packets rx at 2Mbps */ 3466 uint32 rx5mbps5; /* packets rx at 5.5Mbps */ 3467 uint32 rx6mbps; /* packets rx at 6Mbps */ 3468 uint32 rx9mbps; /* packets rx at 9Mbps */ 3469 uint32 rx11mbps; /* packets rx at 11Mbps */ 3470 uint32 rx12mbps; /* packets rx at 12Mbps */ 3471 uint32 rx18mbps; /* packets rx at 18Mbps */ 3472 uint32 rx24mbps; /* packets rx at 24Mbps */ 3473 uint32 rx36mbps; /* packets rx at 36Mbps */ 3474 uint32 rx48mbps; /* packets rx at 48Mbps */ 3475 uint32 rx54mbps; /* packets rx at 54Mbps */ 3476 uint32 rx108mbps; /* packets rx at 108mbps */ 3477 uint32 rx162mbps; /* packets rx at 162mbps */ 3478 uint32 rx216mbps; /* packets rx at 216 mbps */ 3479 uint32 rx270mbps; /* packets rx at 270 mbps */ 3480 uint32 rx324mbps; /* packets rx at 324 mbps */ 3481 uint32 rx378mbps; /* packets rx at 378 mbps */ 3482 uint32 rx432mbps; /* packets rx at 432 mbps */ 3483 uint32 rx486mbps; /* packets rx at 486 mbps */ 3484 uint32 rx540mbps; /* packets rx at 540 mbps */ 3485 3486 /* pkteng rx frame stats */ 3487 uint32 pktengrxducast; /* unicast frames rxed by the pkteng code */ 3488 uint32 pktengrxdmcast; /* multicast frames rxed by the pkteng code */ 3489 3490 uint32 rfdisable; /* count of radio disables */ 3491 uint32 bphy_rxcrsglitch; /* PHY count of bphy glitches */ 3492 3493 uint32 txmpdu_sgi; /* count for sgi transmit */ 3494 uint32 rxmpdu_sgi; /* count for sgi received */ 3495 uint32 txmpdu_stbc; /* count for stbc transmit */ 3496 uint32 rxmpdu_stbc; /* count for stbc received */ 3497 } wl_cnt_ver_six_t; 3498 3499 #define WL_DELTA_STATS_T_VERSION 1 /* current version of wl_delta_stats_t struct */ 3500 3501 typedef struct { 3502 uint16 version; /* see definition of WL_DELTA_STATS_T_VERSION */ 3503 uint16 length; /* length of entire structure */ 3504 3505 /* transmit stat counters */ 3506 uint32 txframe; /* tx data frames */ 3507 uint32 txbyte; /* tx data bytes */ 3508 uint32 txretrans; /* tx mac retransmits */ 3509 uint32 txfail; /* tx failures */ 3510 3511 /* receive stat counters */ 3512 uint32 rxframe; /* rx data frames */ 3513 uint32 rxbyte; /* rx data bytes */ 3514 3515 /* per-rate receive stat counters */ 3516 uint32 rx1mbps; /* packets rx at 1Mbps */ 3517 uint32 rx2mbps; /* packets rx at 2Mbps */ 3518 uint32 rx5mbps5; /* packets rx at 5.5Mbps */ 3519 uint32 rx6mbps; /* packets rx at 6Mbps */ 3520 uint32 rx9mbps; /* packets rx at 9Mbps */ 3521 uint32 rx11mbps; /* packets rx at 11Mbps */ 3522 uint32 rx12mbps; /* packets rx at 12Mbps */ 3523 uint32 rx18mbps; /* packets rx at 18Mbps */ 3524 uint32 rx24mbps; /* packets rx at 24Mbps */ 3525 uint32 rx36mbps; /* packets rx at 36Mbps */ 3526 uint32 rx48mbps; /* packets rx at 48Mbps */ 3527 uint32 rx54mbps; /* packets rx at 54Mbps */ 3528 uint32 rx108mbps; /* packets rx at 108mbps */ 3529 uint32 rx162mbps; /* packets rx at 162mbps */ 3530 uint32 rx216mbps; /* packets rx at 216 mbps */ 3531 uint32 rx270mbps; /* packets rx at 270 mbps */ 3532 uint32 rx324mbps; /* packets rx at 324 mbps */ 3533 uint32 rx378mbps; /* packets rx at 378 mbps */ 3534 uint32 rx432mbps; /* packets rx at 432 mbps */ 3535 uint32 rx486mbps; /* packets rx at 486 mbps */ 3536 uint32 rx540mbps; /* packets rx at 540 mbps */ 3537 } wl_delta_stats_t; 3538 #endif /* LINUX_POSTMOGRIFY_REMOVAL */ 3539 3540 #define WL_WME_CNT_VERSION 1 /* current version of wl_wme_cnt_t */ 3541 3542 typedef struct { 3543 uint32 packets; 3544 uint32 bytes; 3545 } wl_traffic_stats_t; 3546 3547 typedef struct { 3548 uint16 version; /* see definition of WL_WME_CNT_VERSION */ 3549 uint16 length; /* length of entire structure */ 3550 3551 wl_traffic_stats_t tx[AC_COUNT]; /* Packets transmitted */ 3552 wl_traffic_stats_t tx_failed[AC_COUNT]; /* Packets dropped or failed to transmit */ 3553 wl_traffic_stats_t rx[AC_COUNT]; /* Packets received */ 3554 wl_traffic_stats_t rx_failed[AC_COUNT]; /* Packets failed to receive */ 3555 3556 wl_traffic_stats_t forward[AC_COUNT]; /* Packets forwarded by AP */ 3557 3558 wl_traffic_stats_t tx_expired[AC_COUNT]; /* packets dropped due to lifetime expiry */ 3559 3560 } wl_wme_cnt_t; 3561 3562 #ifndef LINUX_POSTMOGRIFY_REMOVAL 3563 struct wl_msglevel2 { 3564 uint32 low; 3565 uint32 high; 3566 }; 3567 3568 typedef struct wl_mkeep_alive_pkt { 3569 uint16 version; /* Version for mkeep_alive */ 3570 uint16 length; /* length of fixed parameters in the structure */ 3571 uint32 period_msec; 3572 uint16 len_bytes; 3573 uint8 keep_alive_id; /* 0 - 3 for N = 4 */ 3574 uint8 data[1]; 3575 } wl_mkeep_alive_pkt_t; 3576 3577 #define WL_MKEEP_ALIVE_VERSION 1 3578 #define WL_MKEEP_ALIVE_FIXED_LEN OFFSETOF(wl_mkeep_alive_pkt_t, data) 3579 #define WL_MKEEP_ALIVE_PRECISION 500 3580 3581 #ifdef WLBA 3582 3583 #define WLC_BA_CNT_VERSION 1 /* current version of wlc_ba_cnt_t */ 3584 3585 /* block ack related stats */ 3586 typedef struct wlc_ba_cnt { 3587 uint16 version; /* WLC_BA_CNT_VERSION */ 3588 uint16 length; /* length of entire structure */ 3589 3590 /* transmit stat counters */ 3591 uint32 txpdu; /* pdus sent */ 3592 uint32 txsdu; /* sdus sent */ 3593 uint32 txfc; /* tx side flow controlled packets */ 3594 uint32 txfci; /* tx side flow control initiated */ 3595 uint32 txretrans; /* retransmitted pdus */ 3596 uint32 txbatimer; /* ba resend due to timer */ 3597 uint32 txdrop; /* dropped packets */ 3598 uint32 txaddbareq; /* addba req sent */ 3599 uint32 txaddbaresp; /* addba resp sent */ 3600 uint32 txdelba; /* delba sent */ 3601 uint32 txba; /* ba sent */ 3602 uint32 txbar; /* bar sent */ 3603 uint32 txpad[4]; /* future */ 3604 3605 /* receive side counters */ 3606 uint32 rxpdu; /* pdus recd */ 3607 uint32 rxqed; /* pdus buffered before sending up */ 3608 uint32 rxdup; /* duplicate pdus */ 3609 uint32 rxnobuf; /* pdus discarded due to no buf */ 3610 uint32 rxaddbareq; /* addba req recd */ 3611 uint32 rxaddbaresp; /* addba resp recd */ 3612 uint32 rxdelba; /* delba recd */ 3613 uint32 rxba; /* ba recd */ 3614 uint32 rxbar; /* bar recd */ 3615 uint32 rxinvba; /* invalid ba recd */ 3616 uint32 rxbaholes; /* ba recd with holes */ 3617 uint32 rxunexp; /* unexpected packets */ 3618 uint32 rxpad[4]; /* future */ 3619 } wlc_ba_cnt_t; 3620 #endif /* WLBA */ 3621 3622 /* structure for per-tid ampdu control */ 3623 struct ampdu_tid_control { 3624 uint8 tid; /* tid */ 3625 uint8 enable; /* enable/disable */ 3626 }; 3627 3628 /* structure for identifying ea/tid for sending addba/delba */ 3629 struct ampdu_ea_tid { 3630 struct ether_addr ea; /* Station address */ 3631 uint8 tid; /* tid */ 3632 }; 3633 /* structure for identifying retry/tid for retry_limit_tid/rr_retry_limit_tid */ 3634 struct ampdu_retry_tid { 3635 uint8 tid; /* tid */ 3636 uint8 retry; /* retry value */ 3637 }; 3638 3639 /* Different discovery modes for dpt */ 3640 #define DPT_DISCOVERY_MANUAL 0x01 /* manual discovery mode */ 3641 #define DPT_DISCOVERY_AUTO 0x02 /* auto discovery mode */ 3642 #define DPT_DISCOVERY_SCAN 0x04 /* scan-based discovery mode */ 3643 3644 /* different path selection values */ 3645 #define DPT_PATHSEL_AUTO 0 /* auto mode for path selection */ 3646 #define DPT_PATHSEL_DIRECT 1 /* always use direct DPT path */ 3647 #define DPT_PATHSEL_APPATH 2 /* always use AP path */ 3648 3649 /* different ops for deny list */ 3650 #define DPT_DENY_LIST_ADD 1 /* add to dpt deny list */ 3651 #define DPT_DENY_LIST_REMOVE 2 /* remove from dpt deny list */ 3652 3653 /* different ops for manual end point */ 3654 #define DPT_MANUAL_EP_CREATE 1 /* create manual dpt endpoint */ 3655 #define DPT_MANUAL_EP_MODIFY 2 /* modify manual dpt endpoint */ 3656 #define DPT_MANUAL_EP_DELETE 3 /* delete manual dpt endpoint */ 3657 3658 /* structure for dpt iovars */ 3659 typedef struct dpt_iovar { 3660 struct ether_addr ea; /* Station address */ 3661 uint8 mode; /* mode: depends on iovar */ 3662 uint32 pad; /* future */ 3663 } dpt_iovar_t; 3664 3665 /* flags to indicate DPT status */ 3666 #define DPT_STATUS_ACTIVE 0x01 /* link active (though may be suspended) */ 3667 #define DPT_STATUS_AES 0x02 /* link secured through AES encryption */ 3668 #define DPT_STATUS_FAILED 0x04 /* DPT link failed */ 3669 3670 #define DPT_FNAME_LEN 48 /* Max length of friendly name */ 3671 3672 typedef struct dpt_status { 3673 uint8 status; /* flags to indicate status */ 3674 uint8 fnlen; /* length of friendly name */ 3675 uchar name[DPT_FNAME_LEN]; /* friendly name */ 3676 uint32 rssi; /* RSSI of the link */ 3677 sta_info_t sta; /* sta info */ 3678 } dpt_status_t; 3679 3680 /* structure for dpt list */ 3681 typedef struct dpt_list { 3682 uint32 num; /* number of entries in struct */ 3683 dpt_status_t status[1]; /* per station info */ 3684 } dpt_list_t; 3685 3686 /* structure for dpt friendly name */ 3687 typedef struct dpt_fname { 3688 uint8 len; /* length of friendly name */ 3689 uchar name[DPT_FNAME_LEN]; /* friendly name */ 3690 } dpt_fname_t; 3691 3692 #define BDD_FNAME_LEN 32 /* Max length of friendly name */ 3693 typedef struct bdd_fname { 3694 uint8 len; /* length of friendly name */ 3695 uchar name[BDD_FNAME_LEN]; /* friendly name */ 3696 } bdd_fname_t; 3697 3698 /* structure for addts arguments */ 3699 /* For ioctls that take a list of TSPEC */ 3700 struct tslist { 3701 int count; /* number of tspecs */ 3702 struct tsinfo_arg tsinfo[1]; /* variable length array of tsinfo */ 3703 }; 3704 3705 #ifdef WLTDLS 3706 /* different ops for manual end point */ 3707 #define TDLS_MANUAL_EP_CREATE 1 /* create manual dpt endpoint */ 3708 #define TDLS_MANUAL_EP_MODIFY 2 /* modify manual dpt endpoint */ 3709 #define TDLS_MANUAL_EP_DELETE 3 /* delete manual dpt endpoint */ 3710 #define TDLS_MANUAL_EP_PM 4 /* put dpt endpoint in PM mode */ 3711 #define TDLS_MANUAL_EP_WAKE 5 /* wake up dpt endpoint from PM */ 3712 #define TDLS_MANUAL_EP_DISCOVERY 6 /* discover if endpoint is TDLS capable */ 3713 #define TDLS_MANUAL_EP_CHSW 7 /* channel switch */ 3714 #define TDLS_MANUAL_EP_WFD_TPQ 8 /* WiFi-Display Tunneled Probe reQuest */ 3715 3716 /* structure for tdls iovars */ 3717 typedef struct tdls_iovar { 3718 struct ether_addr ea; /* Station address */ 3719 uint8 mode; /* mode: depends on iovar */ 3720 chanspec_t chanspec; 3721 uint32 pad; /* future */ 3722 } tdls_iovar_t; 3723 3724 /* modes */ 3725 #define TDLS_WFD_IE_TX 0 3726 #define TDLS_WFD_IE_RX 1 3727 #define TDLS_WFD_PROBE_IE_TX 2 3728 #define TDLS_WFD_PROBE_IE_RX 3 3729 #define TDLS_WFD_IE_SIZE 512 3730 /* structure for tdls wfd ie */ 3731 typedef struct tdls_wfd_ie_iovar { 3732 struct ether_addr ea; /* Station address */ 3733 uint8 mode; 3734 uint16 length; 3735 uint8 data[TDLS_WFD_IE_SIZE]; 3736 } tdls_wfd_ie_iovar_t; 3737 #endif /* WLTDLS */ 3738 3739 /* structure for addts/delts arguments */ 3740 typedef struct tspec_arg { 3741 uint16 version; /* see definition of TSPEC_ARG_VERSION */ 3742 uint16 length; /* length of entire structure */ 3743 uint flag; /* bit field */ 3744 /* TSPEC Arguments */ 3745 struct tsinfo_arg tsinfo; /* TS Info bit field */ 3746 uint16 nom_msdu_size; /* (Nominal or fixed) MSDU Size (bytes) */ 3747 uint16 max_msdu_size; /* Maximum MSDU Size (bytes) */ 3748 uint min_srv_interval; /* Minimum Service Interval (us) */ 3749 uint max_srv_interval; /* Maximum Service Interval (us) */ 3750 uint inactivity_interval; /* Inactivity Interval (us) */ 3751 uint suspension_interval; /* Suspension Interval (us) */ 3752 uint srv_start_time; /* Service Start Time (us) */ 3753 uint min_data_rate; /* Minimum Data Rate (bps) */ 3754 uint mean_data_rate; /* Mean Data Rate (bps) */ 3755 uint peak_data_rate; /* Peak Data Rate (bps) */ 3756 uint max_burst_size; /* Maximum Burst Size (bytes) */ 3757 uint delay_bound; /* Delay Bound (us) */ 3758 uint min_phy_rate; /* Minimum PHY Rate (bps) */ 3759 uint16 surplus_bw; /* Surplus Bandwidth Allowance (range 1.0 to 8.0) */ 3760 uint16 medium_time; /* Medium Time (32 us/s periods) */ 3761 uint8 dialog_token; /* dialog token */ 3762 } tspec_arg_t; 3763 3764 /* tspec arg for desired station */ 3765 typedef struct tspec_per_sta_arg { 3766 struct ether_addr ea; 3767 struct tspec_arg ts; 3768 } tspec_per_sta_arg_t; 3769 3770 /* structure for max bandwidth for each access category */ 3771 typedef struct wme_max_bandwidth { 3772 uint32 ac[AC_COUNT]; /* max bandwidth for each access category */ 3773 } wme_max_bandwidth_t; 3774 3775 #define WL_WME_MBW_PARAMS_IO_BYTES (sizeof(wme_max_bandwidth_t)) 3776 3777 /* current version of wl_tspec_arg_t struct */ 3778 #define TSPEC_ARG_VERSION 2 /* current version of wl_tspec_arg_t struct */ 3779 #define TSPEC_ARG_LENGTH 55 /* argument length from tsinfo to medium_time */ 3780 #define TSPEC_DEFAULT_DIALOG_TOKEN 42 /* default dialog token */ 3781 #define TSPEC_DEFAULT_SBW_FACTOR 0x3000 /* default surplus bw */ 3782 3783 3784 #define WL_WOWL_KEEPALIVE_MAX_PACKET_SIZE 80 3785 #define WLC_WOWL_MAX_KEEPALIVE 2 3786 3787 /* define for flag */ 3788 #define TSPEC_PENDING 0 /* TSPEC pending */ 3789 #define TSPEC_ACCEPTED 1 /* TSPEC accepted */ 3790 #define TSPEC_REJECTED 2 /* TSPEC rejected */ 3791 #define TSPEC_UNKNOWN 3 /* TSPEC unknown */ 3792 #define TSPEC_STATUS_MASK 7 /* TSPEC status mask */ 3793 3794 3795 /* Software feature flag defines used by wlfeatureflag */ 3796 #ifdef WLAFTERBURNER 3797 #define WL_SWFL_ABBFL 0x0001 /* Allow Afterburner on systems w/o hardware BFL */ 3798 #define WL_SWFL_ABENCORE 0x0002 /* Allow AB on non-4318E chips */ 3799 #endif /* WLAFTERBURNER */ 3800 #define WL_SWFL_NOHWRADIO 0x0004 3801 #define WL_SWFL_FLOWCONTROL 0x0008 /* Enable backpressure to OS stack */ 3802 #define WL_SWFL_WLBSSSORT 0x0010 /* Per-port supports sorting of BSS */ 3803 3804 #define WL_LIFETIME_MAX 0xFFFF /* Max value in ms */ 3805 3806 /* Packet lifetime configuration per ac */ 3807 typedef struct wl_lifetime { 3808 uint32 ac; /* access class */ 3809 uint32 lifetime; /* Packet lifetime value in ms */ 3810 } wl_lifetime_t; 3811 3812 /* Channel Switch Announcement param */ 3813 typedef struct wl_chan_switch { 3814 uint8 mode; /* value 0 or 1 */ 3815 uint8 count; /* count # of beacons before switching */ 3816 chanspec_t chspec; /* chanspec */ 3817 uint8 reg; /* regulatory class */ 3818 } wl_chan_switch_t; 3819 3820 /* Roaming trigger definitions for WLC_SET_ROAM_TRIGGER. 3821 * 3822 * (-100 < value < 0) value is used directly as a roaming trigger in dBm 3823 * (0 <= value) value specifies a logical roaming trigger level from 3824 * the list below 3825 * 3826 * WLC_GET_ROAM_TRIGGER always returns roaming trigger value in dBm, never 3827 * the logical roam trigger value. 3828 */ 3829 #define WLC_ROAM_TRIGGER_DEFAULT 0 /* default roaming trigger */ 3830 #define WLC_ROAM_TRIGGER_BANDWIDTH 1 /* optimize for bandwidth roaming trigger */ 3831 #define WLC_ROAM_TRIGGER_DISTANCE 2 /* optimize for distance roaming trigger */ 3832 #define WLC_ROAM_TRIGGER_AUTO 3 /* auto-detect environment */ 3833 #define WLC_ROAM_TRIGGER_MAX_VALUE 3 /* max. valid value */ 3834 3835 #define WLC_ROAM_NEVER_ROAM_TRIGGER (-100) /* Avoid Roaming by setting a large value */ 3836 3837 /* Preferred Network Offload (PNO, formerly PFN) defines */ 3838 #define WPA_AUTH_PFN_ANY 0xffffffff /* for PFN, match only ssid */ 3839 3840 enum { 3841 PFN_LIST_ORDER, 3842 PFN_RSSI 3843 }; 3844 3845 enum { 3846 DISABLE, 3847 ENABLE 3848 }; 3849 3850 enum { 3851 OFF_ADAPT, 3852 SMART_ADAPT, 3853 STRICT_ADAPT, 3854 SLOW_ADAPT 3855 }; 3856 3857 #define SORT_CRITERIA_BIT 0 3858 #define AUTO_NET_SWITCH_BIT 1 3859 #define ENABLE_BKGRD_SCAN_BIT 2 3860 #define IMMEDIATE_SCAN_BIT 3 3861 #define AUTO_CONNECT_BIT 4 3862 #define ENABLE_BD_SCAN_BIT 5 3863 #define ENABLE_ADAPTSCAN_BIT 6 3864 #define IMMEDIATE_EVENT_BIT 8 3865 #define SUPPRESS_SSID_BIT 9 3866 #define ENABLE_NET_OFFLOAD_BIT 10 3867 3868 #define SORT_CRITERIA_MASK 0x0001 3869 #define AUTO_NET_SWITCH_MASK 0x0002 3870 #define ENABLE_BKGRD_SCAN_MASK 0x0004 3871 #define IMMEDIATE_SCAN_MASK 0x0008 3872 #define AUTO_CONNECT_MASK 0x0010 3873 3874 #define ENABLE_BD_SCAN_MASK 0x0020 3875 #define ENABLE_ADAPTSCAN_MASK 0x00c0 3876 #define IMMEDIATE_EVENT_MASK 0x0100 3877 #define SUPPRESS_SSID_MASK 0x0200 3878 #define ENABLE_NET_OFFLOAD_MASK 0x0400 3879 3880 #define PFN_VERSION 2 3881 #define PFN_SCANRESULT_VERSION 1 3882 #define MAX_PFN_LIST_COUNT 16 3883 3884 #define PFN_COMPLETE 1 3885 #define PFN_INCOMPLETE 0 3886 3887 #define DEFAULT_BESTN 2 3888 #define DEFAULT_MSCAN 0 3889 #define DEFAULT_REPEAT 10 3890 #define DEFAULT_EXP 2 3891 3892 /* PFN network info structure */ 3893 typedef struct wl_pfn_subnet_info { 3894 struct ether_addr BSSID; 3895 uint8 channel; /* channel number only */ 3896 uint8 SSID_len; 3897 uint8 SSID[32]; 3898 } wl_pfn_subnet_info_t; 3899 3900 typedef struct wl_pfn_net_info { 3901 wl_pfn_subnet_info_t pfnsubnet; 3902 int16 RSSI; /* receive signal strength (in dBm) */ 3903 uint16 timestamp; /* age in seconds */ 3904 } wl_pfn_net_info_t; 3905 3906 typedef struct wl_pfn_scanresults { 3907 uint32 version; 3908 uint32 status; 3909 uint32 count; 3910 wl_pfn_net_info_t netinfo[1]; 3911 } wl_pfn_scanresults_t; 3912 3913 /* PFN data structure */ 3914 typedef struct wl_pfn_param { 3915 int32 version; /* PNO parameters version */ 3916 int32 scan_freq; /* Scan frequency */ 3917 int32 lost_network_timeout; /* Timeout in sec. to declare 3918 * discovered network as lost 3919 */ 3920 int16 flags; /* Bit field to control features 3921 * of PFN such as sort criteria auto 3922 * enable switch and background scan 3923 */ 3924 int16 rssi_margin; /* Margin to avoid jitter for choosing a 3925 * PFN based on RSSI sort criteria 3926 */ 3927 uint8 bestn; /* number of best networks in each scan */ 3928 uint8 mscan; /* number of scans recorded */ 3929 uint8 repeat; /* Minimum number of scan intervals 3930 *before scan frequency changes in adaptive scan 3931 */ 3932 uint8 exp; /* Exponent of 2 for maximum scan interval */ 3933 int32 slow_freq; /* slow scan period */ 3934 } wl_pfn_param_t; 3935 3936 typedef struct wl_pfn_bssid { 3937 struct ether_addr macaddr; 3938 /* Bit4: suppress_lost, Bit3: suppress_found */ 3939 uint16 flags; 3940 } wl_pfn_bssid_t; 3941 #define WL_PFN_SUPPRESSFOUND_MASK 0x08 3942 #define WL_PFN_SUPPRESSLOST_MASK 0x10 3943 #define WL_PFN_RSSI_MASK 0xff00 3944 #define WL_PFN_RSSI_SHIFT 8 3945 3946 typedef struct wl_pfn_cfg { 3947 uint32 reporttype; 3948 int32 channel_num; 3949 uint16 channel_list[WL_NUMCHANNELS]; 3950 } wl_pfn_cfg_t; 3951 #define WL_PFN_REPORT_ALLNET 0 3952 #define WL_PFN_REPORT_SSIDNET 1 3953 #define WL_PFN_REPORT_BSSIDNET 2 3954 3955 typedef struct wl_pfn { 3956 wlc_ssid_t ssid; /* ssid name and its length */ 3957 int32 flags; /* bit2: hidden */ 3958 int32 infra; /* BSS Vs IBSS */ 3959 int32 auth; /* Open Vs Closed */ 3960 int32 wpa_auth; /* WPA type */ 3961 int32 wsec; /* wsec value */ 3962 } wl_pfn_t; 3963 #define WL_PFN_HIDDEN_BIT 2 3964 #define PNO_SCAN_MAX_FW 508*1000 /* max time scan time in msec */ 3965 #define PNO_SCAN_MAX_FW_SEC PNO_SCAN_MAX_FW/1000 /* max time scan time in SEC */ 3966 #define PNO_SCAN_MIN_FW_SEC 10 /* min time scan time in SEC */ 3967 #define WL_PFN_HIDDEN_MASK 0x4 3968 3969 #endif /* LINUX_POSTMOGRIFY_REMOVAL */ 3970 3971 /* Service discovery */ 3972 typedef struct { 3973 uint8 transaction_id; /* Transaction id */ 3974 uint8 protocol; /* Service protocol type */ 3975 uint16 query_len; /* Length of query */ 3976 uint16 response_len; /* Length of response */ 3977 uint8 qrbuf[1]; 3978 } wl_p2po_qr_t; 3979 3980 typedef struct { 3981 uint16 period; /* extended listen period */ 3982 uint16 interval; /* extended listen interval */ 3983 } wl_p2po_listen_t; 3984 3985 /* ANQP offload */ 3986 3987 #define ANQPO_MAX_QUERY_SIZE 256 3988 typedef struct { 3989 uint16 max_retransmit; /* -1 use default, max retransmit on no ACK from peer */ 3990 uint16 response_timeout; /* -1 use default, msec to wait for resp after tx packet */ 3991 uint16 max_comeback_delay; /* -1 use default, max comeback delay in resp else fail */ 3992 uint16 max_retries; /* -1 use default, max retries on failure */ 3993 uint16 query_len; /* length of ANQP query */ 3994 uint8 query_data[1]; /* ANQP encoded query (max ANQPO_MAX_QUERY_SIZE) */ 3995 } wl_anqpo_set_t; 3996 3997 typedef struct { 3998 uint16 channel; /* channel of the peer */ 3999 struct ether_addr addr; /* addr of the peer */ 4000 } wl_anqpo_peer_t; 4001 4002 #define ANQPO_MAX_PEER_LIST 64 4003 typedef struct { 4004 uint16 count; /* number of peers in list */ 4005 wl_anqpo_peer_t peer[1]; /* max ANQPO_MAX_PEER_LIST */ 4006 } wl_anqpo_peer_list_t; 4007 4008 #define ANQPO_MAX_IGNORE_SSID 64 4009 typedef struct { 4010 bool is_clear; /* set to clear list (not used on GET) */ 4011 uint16 count; /* number of SSID in list */ 4012 wlc_ssid_t ssid[1]; /* max ANQPO_MAX_IGNORE_SSID */ 4013 } wl_anqpo_ignore_ssid_list_t; 4014 4015 #define ANQPO_MAX_IGNORE_BSSID 64 4016 typedef struct { 4017 bool is_clear; /* set to clear list (not used on GET) */ 4018 uint16 count; /* number of addr in list */ 4019 struct ether_addr bssid[1]; /* max ANQPO_MAX_IGNORE_BSSID */ 4020 } wl_anqpo_ignore_bssid_list_t; 4021 4022 /* TCP Checksum Offload defines */ 4023 #define TOE_TX_CSUM_OL 0x00000001 4024 #define TOE_RX_CSUM_OL 0x00000002 4025 4026 #ifndef LINUX_POSTMOGRIFY_REMOVAL 4027 /* TCP Checksum Offload error injection for testing */ 4028 #define TOE_ERRTEST_TX_CSUM 0x00000001 4029 #define TOE_ERRTEST_RX_CSUM 0x00000002 4030 #define TOE_ERRTEST_RX_CSUM2 0x00000004 4031 4032 struct toe_ol_stats_t { 4033 /* Num of tx packets that don't need to be checksummed */ 4034 uint32 tx_summed; 4035 4036 /* Num of tx packets where checksum is filled by offload engine */ 4037 uint32 tx_iph_fill; 4038 uint32 tx_tcp_fill; 4039 uint32 tx_udp_fill; 4040 uint32 tx_icmp_fill; 4041 4042 /* Num of rx packets where toe finds out if checksum is good or bad */ 4043 uint32 rx_iph_good; 4044 uint32 rx_iph_bad; 4045 uint32 rx_tcp_good; 4046 uint32 rx_tcp_bad; 4047 uint32 rx_udp_good; 4048 uint32 rx_udp_bad; 4049 uint32 rx_icmp_good; 4050 uint32 rx_icmp_bad; 4051 4052 /* Num of tx packets in which csum error is injected */ 4053 uint32 tx_tcp_errinj; 4054 uint32 tx_udp_errinj; 4055 uint32 tx_icmp_errinj; 4056 4057 /* Num of rx packets in which csum error is injected */ 4058 uint32 rx_tcp_errinj; 4059 uint32 rx_udp_errinj; 4060 uint32 rx_icmp_errinj; 4061 }; 4062 4063 /* ARP Offload feature flags for arp_ol iovar */ 4064 #define ARP_OL_AGENT 0x00000001 4065 #define ARP_OL_SNOOP 0x00000002 4066 #define ARP_OL_HOST_AUTO_REPLY 0x00000004 4067 #define ARP_OL_PEER_AUTO_REPLY 0x00000008 4068 4069 /* ARP Offload error injection */ 4070 #define ARP_ERRTEST_REPLY_PEER 0x1 4071 #define ARP_ERRTEST_REPLY_HOST 0x2 4072 4073 #define ARP_MULTIHOMING_MAX 8 /* Maximum local host IP addresses */ 4074 #define ND_MULTIHOMING_MAX 10 /* Maximum local host IP addresses */ 4075 4076 /* Arp offload statistic counts */ 4077 struct arp_ol_stats_t { 4078 uint32 host_ip_entries; /* Host IP table addresses (more than one if multihomed) */ 4079 uint32 host_ip_overflow; /* Host IP table additions skipped due to overflow */ 4080 4081 uint32 arp_table_entries; /* ARP table entries */ 4082 uint32 arp_table_overflow; /* ARP table additions skipped due to overflow */ 4083 4084 uint32 host_request; /* ARP requests from host */ 4085 uint32 host_reply; /* ARP replies from host */ 4086 uint32 host_service; /* ARP requests from host serviced by ARP Agent */ 4087 4088 uint32 peer_request; /* ARP requests received from network */ 4089 uint32 peer_request_drop; /* ARP requests from network that were dropped */ 4090 uint32 peer_reply; /* ARP replies received from network */ 4091 uint32 peer_reply_drop; /* ARP replies from network that were dropped */ 4092 uint32 peer_service; /* ARP request from host serviced by ARP Agent */ 4093 }; 4094 4095 /* NS offload statistic counts */ 4096 struct nd_ol_stats_t { 4097 uint32 host_ip_entries; /* Host IP table addresses (more than one if multihomed) */ 4098 uint32 host_ip_overflow; /* Host IP table additions skipped due to overflow */ 4099 uint32 peer_request; /* NS requests received from network */ 4100 uint32 peer_request_drop; /* NS requests from network that were dropped */ 4101 uint32 peer_reply_drop; /* NA replies from network that were dropped */ 4102 uint32 peer_service; /* NS request from host serviced by firmware */ 4103 }; 4104 4105 /* 4106 * Keep-alive packet offloading. 4107 */ 4108 4109 /* NAT keep-alive packets format: specifies the re-transmission period, the packet 4110 * length, and packet contents. 4111 */ 4112 typedef struct wl_keep_alive_pkt { 4113 uint32 period_msec; /* Retransmission period (0 to disable packet re-transmits) */ 4114 uint16 len_bytes; /* Size of packet to transmit (0 to disable packet re-transmits) */ 4115 uint8 data[1]; /* Variable length packet to transmit. Contents should include 4116 * entire ethernet packet (enet header, IP header, UDP header, 4117 * and UDP payload) in network byte order. 4118 */ 4119 } wl_keep_alive_pkt_t; 4120 4121 #define WL_KEEP_ALIVE_FIXED_LEN OFFSETOF(wl_keep_alive_pkt_t, data) 4122 4123 /* 4124 * Dongle pattern matching filter. 4125 */ 4126 4127 /* Packet filter types. Currently, only pattern matching is supported. */ 4128 typedef enum wl_pkt_filter_type { 4129 WL_PKT_FILTER_TYPE_PATTERN_MATCH /* Pattern matching filter */ 4130 } wl_pkt_filter_type_t; 4131 4132 #define WL_PKT_FILTER_TYPE wl_pkt_filter_type_t 4133 4134 /* Pattern matching filter. Specifies an offset within received packets to 4135 * start matching, the pattern to match, the size of the pattern, and a bitmask 4136 * that indicates which bits within the pattern should be matched. 4137 */ 4138 typedef struct wl_pkt_filter_pattern { 4139 uint32 offset; /* Offset within received packet to start pattern matching. 4140 * Offset '0' is the first byte of the ethernet header. 4141 */ 4142 uint32 size_bytes; /* Size of the pattern. Bitmask must be the same size. */ 4143 uint8 mask_and_pattern[1]; /* Variable length mask and pattern data. mask starts 4144 * at offset 0. Pattern immediately follows mask. 4145 */ 4146 } wl_pkt_filter_pattern_t; 4147 4148 /* IOVAR "pkt_filter_add" parameter. Used to install packet filters. */ 4149 typedef struct wl_pkt_filter { 4150 uint32 id; /* Unique filter id, specified by app. */ 4151 uint32 type; /* Filter type (WL_PKT_FILTER_TYPE_xxx). */ 4152 uint32 negate_match; /* Negate the result of filter matches */ 4153 union { /* Filter definitions */ 4154 wl_pkt_filter_pattern_t pattern; /* Pattern matching filter */ 4155 } u; 4156 } wl_pkt_filter_t; 4157 4158 #define WL_PKT_FILTER_FIXED_LEN OFFSETOF(wl_pkt_filter_t, u) 4159 #define WL_PKT_FILTER_PATTERN_FIXED_LEN OFFSETOF(wl_pkt_filter_pattern_t, mask_and_pattern) 4160 4161 /* IOVAR "pkt_filter_enable" parameter. */ 4162 typedef struct wl_pkt_filter_enable { 4163 uint32 id; /* Unique filter id */ 4164 uint32 enable; /* Enable/disable bool */ 4165 } wl_pkt_filter_enable_t; 4166 4167 /* IOVAR "pkt_filter_list" parameter. Used to retrieve a list of installed filters. */ 4168 typedef struct wl_pkt_filter_list { 4169 uint32 num; /* Number of installed packet filters */ 4170 wl_pkt_filter_t filter[1]; /* Variable array of packet filters. */ 4171 } wl_pkt_filter_list_t; 4172 4173 #define WL_PKT_FILTER_LIST_FIXED_LEN OFFSETOF(wl_pkt_filter_list_t, filter) 4174 4175 /* IOVAR "pkt_filter_stats" parameter. Used to retrieve debug statistics. */ 4176 typedef struct wl_pkt_filter_stats { 4177 uint32 num_pkts_matched; /* # filter matches for specified filter id */ 4178 uint32 num_pkts_forwarded; /* # packets fwded from dongle to host for all filters */ 4179 uint32 num_pkts_discarded; /* # packets discarded by dongle for all filters */ 4180 } wl_pkt_filter_stats_t; 4181 4182 #define RSN_KCK_LENGTH 16 4183 #define RSN_KEK_LENGTH 16 4184 #define RSN_REPLAY_LEN 8 4185 typedef struct _gtkrefresh { 4186 uchar KCK[RSN_KCK_LENGTH]; 4187 uchar KEK[RSN_KEK_LENGTH]; 4188 uchar ReplayCounter[RSN_REPLAY_LEN]; 4189 } gtk_keyinfo_t, *pgtk_keyinfo_t; 4190 4191 /* Sequential Commands ioctl */ 4192 typedef struct wl_seq_cmd_ioctl { 4193 uint32 cmd; /* common ioctl definition */ 4194 uint32 len; /* length of user buffer */ 4195 } wl_seq_cmd_ioctl_t; 4196 4197 #define WL_SEQ_CMD_ALIGN_BYTES 4 4198 4199 /* These are the set of get IOCTLs that should be allowed when using 4200 * IOCTL sequence commands. These are issued implicitly by wl.exe each time 4201 * it is invoked. We never want to buffer these, or else wl.exe will stop working. 4202 */ 4203 #define WL_SEQ_CMDS_GET_IOCTL_FILTER(cmd) \ 4204 (((cmd) == WLC_GET_MAGIC) || \ 4205 ((cmd) == WLC_GET_VERSION) || \ 4206 ((cmd) == WLC_GET_AP) || \ 4207 ((cmd) == WLC_GET_INSTANCE)) 4208 4209 /* 4210 * Packet engine interface 4211 */ 4212 4213 #define WL_PKTENG_PER_TX_START 0x01 4214 #define WL_PKTENG_PER_TX_STOP 0x02 4215 #define WL_PKTENG_PER_RX_START 0x04 4216 #define WL_PKTENG_PER_RX_WITH_ACK_START 0x05 4217 #define WL_PKTENG_PER_TX_WITH_ACK_START 0x06 4218 #define WL_PKTENG_PER_RX_STOP 0x08 4219 #define WL_PKTENG_PER_MASK 0xff 4220 4221 #define WL_PKTENG_SYNCHRONOUS 0x100 /* synchronous flag */ 4222 4223 #define WL_PKTENG_MAXPKTSZ 16384 /* max pktsz limit for pkteng */ 4224 4225 typedef struct wl_pkteng { 4226 uint32 flags; 4227 uint32 delay; /* Inter-packet delay */ 4228 uint32 nframes; /* Number of frames */ 4229 uint32 length; /* Packet length */ 4230 uint8 seqno; /* Enable/disable sequence no. */ 4231 struct ether_addr dest; /* Destination address */ 4232 struct ether_addr src; /* Source address */ 4233 } wl_pkteng_t; 4234 4235 #define NUM_80211b_RATES 4 4236 #define NUM_80211ag_RATES 8 4237 #define NUM_80211n_RATES 32 4238 #define NUM_80211_RATES (NUM_80211b_RATES+NUM_80211ag_RATES+NUM_80211n_RATES) 4239 typedef struct wl_pkteng_stats { 4240 uint32 lostfrmcnt; /* RX PER test: no of frames lost (skip seqno) */ 4241 int32 rssi; /* RSSI */ 4242 int32 snr; /* signal to noise ratio */ 4243 uint16 rxpktcnt[NUM_80211_RATES+1]; 4244 uint8 rssi_qdb; /* qdB portion of the computed rssi */ 4245 } wl_pkteng_stats_t; 4246 4247 4248 #define WL_WOWL_MAGIC (1 << 0) /* Wakeup on Magic packet */ 4249 #define WL_WOWL_NET (1 << 1) /* Wakeup on Netpattern */ 4250 #define WL_WOWL_DIS (1 << 2) /* Wakeup on loss-of-link due to Disassoc/Deauth */ 4251 #define WL_WOWL_RETR (1 << 3) /* Wakeup on retrograde TSF */ 4252 #define WL_WOWL_BCN (1 << 4) /* Wakeup on loss of beacon */ 4253 #define WL_WOWL_TST (1 << 5) /* Wakeup after test */ 4254 #define WL_WOWL_M1 (1 << 6) /* Wakeup after PTK refresh */ 4255 #define WL_WOWL_EAPID (1 << 7) /* Wakeup after receipt of EAP-Identity Req */ 4256 #define WL_WOWL_PME_GPIO (1 << 8) /* Wakeind via PME(0) or GPIO(1) */ 4257 #define WL_WOWL_NEEDTKIP1 (1 << 9) /* need tkip phase 1 key to be updated by the driver */ 4258 #define WL_WOWL_GTK_FAILURE (1 << 10) /* enable wakeup if GTK fails */ 4259 #define WL_WOWL_EXTMAGPAT (1 << 11) /* support extended magic packets */ 4260 #define WL_WOWL_ARPOFFLOAD (1 << 12) /* support ARP/NS/keepalive offloading */ 4261 #define WL_WOWL_WPA2 (1 << 13) /* read protocol version for EAPOL frames */ 4262 #define WL_WOWL_KEYROT (1 << 14) /* If the bit is set, use key rotaton */ 4263 #define WL_WOWL_BCAST (1 << 15) /* If the bit is set, frm received was bcast frame */ 4264 4265 #define MAGIC_PKT_MINLEN 102 /* Magic pkt min length is 6 * 0xFF + 16 * ETHER_ADDR_LEN */ 4266 4267 #define WOWL_PATTEN_TYPE_ARP (1 << 0) /* ARP offload Pattern */ 4268 #define WOWL_PATTEN_TYPE_NA (1 << 1) /* NA offload Pattern */ 4269 4270 typedef struct { 4271 uint32 masksize; /* Size of the mask in #of bytes */ 4272 uint32 offset; /* Offset to start looking for the packet in # of bytes */ 4273 uint32 patternoffset; /* Offset of start of pattern in the structure */ 4274 uint32 patternsize; /* Size of the pattern itself in #of bytes */ 4275 uint32 id; /* id */ 4276 uint32 reasonsize; /* Size of the wakeup reason code */ 4277 uint32 flags; /* Flags to tell the pattern type and other properties */ 4278 /* Mask follows the structure above */ 4279 /* Pattern follows the mask is at 'patternoffset' from the start */ 4280 } wl_wowl_pattern_t; 4281 4282 typedef struct { 4283 uint count; 4284 wl_wowl_pattern_t pattern[1]; 4285 } wl_wowl_pattern_list_t; 4286 4287 typedef struct { 4288 uint8 pci_wakeind; /* Whether PCI PMECSR PMEStatus bit was set */ 4289 uint16 ucode_wakeind; /* What wakeup-event indication was set by ucode */ 4290 } wl_wowl_wakeind_t; 4291 4292 4293 /* per AC rate control related data structure */ 4294 typedef struct wl_txrate_class { 4295 uint8 init_rate; 4296 uint8 min_rate; 4297 uint8 max_rate; 4298 } wl_txrate_class_t; 4299 4300 4301 4302 /* Overlap BSS Scan parameters default, minimum, maximum */ 4303 #define WLC_OBSS_SCAN_PASSIVE_DWELL_DEFAULT 20 /* unit TU */ 4304 #define WLC_OBSS_SCAN_PASSIVE_DWELL_MIN 5 /* unit TU */ 4305 #define WLC_OBSS_SCAN_PASSIVE_DWELL_MAX 1000 /* unit TU */ 4306 #define WLC_OBSS_SCAN_ACTIVE_DWELL_DEFAULT 10 /* unit TU */ 4307 #define WLC_OBSS_SCAN_ACTIVE_DWELL_MIN 10 /* unit TU */ 4308 #define WLC_OBSS_SCAN_ACTIVE_DWELL_MAX 1000 /* unit TU */ 4309 #define WLC_OBSS_SCAN_WIDTHSCAN_INTERVAL_DEFAULT 300 /* unit Sec */ 4310 #define WLC_OBSS_SCAN_WIDTHSCAN_INTERVAL_MIN 10 /* unit Sec */ 4311 #define WLC_OBSS_SCAN_WIDTHSCAN_INTERVAL_MAX 900 /* unit Sec */ 4312 #define WLC_OBSS_SCAN_CHANWIDTH_TRANSITION_DLY_DEFAULT 5 4313 #define WLC_OBSS_SCAN_CHANWIDTH_TRANSITION_DLY_MIN 5 4314 #define WLC_OBSS_SCAN_CHANWIDTH_TRANSITION_DLY_MAX 100 4315 #define WLC_OBSS_SCAN_PASSIVE_TOTAL_PER_CHANNEL_DEFAULT 200 /* unit TU */ 4316 #define WLC_OBSS_SCAN_PASSIVE_TOTAL_PER_CHANNEL_MIN 200 /* unit TU */ 4317 #define WLC_OBSS_SCAN_PASSIVE_TOTAL_PER_CHANNEL_MAX 10000 /* unit TU */ 4318 #define WLC_OBSS_SCAN_ACTIVE_TOTAL_PER_CHANNEL_DEFAULT 20 /* unit TU */ 4319 #define WLC_OBSS_SCAN_ACTIVE_TOTAL_PER_CHANNEL_MIN 20 /* unit TU */ 4320 #define WLC_OBSS_SCAN_ACTIVE_TOTAL_PER_CHANNEL_MAX 10000 /* unit TU */ 4321 #define WLC_OBSS_SCAN_ACTIVITY_THRESHOLD_DEFAULT 25 /* unit percent */ 4322 #define WLC_OBSS_SCAN_ACTIVITY_THRESHOLD_MIN 0 /* unit percent */ 4323 #define WLC_OBSS_SCAN_ACTIVITY_THRESHOLD_MAX 100 /* unit percent */ 4324 4325 /* structure for Overlap BSS scan arguments */ 4326 typedef struct wl_obss_scan_arg { 4327 int16 passive_dwell; 4328 int16 active_dwell; 4329 int16 bss_widthscan_interval; 4330 int16 passive_total; 4331 int16 active_total; 4332 int16 chanwidth_transition_delay; 4333 int16 activity_threshold; 4334 } wl_obss_scan_arg_t; 4335 4336 #define WL_OBSS_SCAN_PARAM_LEN sizeof(wl_obss_scan_arg_t) 4337 #define WL_MIN_NUM_OBSS_SCAN_ARG 7 /* minimum number of arguments required for OBSS Scan */ 4338 4339 #define WL_COEX_INFO_MASK 0x07 4340 #define WL_COEX_INFO_REQ 0x01 4341 #define WL_COEX_40MHZ_INTOLERANT 0x02 4342 #define WL_COEX_WIDTH20 0x04 4343 4344 #define WLC_RSSI_INVALID 0 /* invalid RSSI value */ 4345 4346 #define MAX_RSSI_LEVELS 8 4347 4348 /* RSSI event notification configuration. */ 4349 typedef struct wl_rssi_event { 4350 uint32 rate_limit_msec; /* # of events posted to application will be limited to 4351 * one per specified period (0 to disable rate limit). 4352 */ 4353 uint8 num_rssi_levels; /* Number of entries in rssi_levels[] below */ 4354 int8 rssi_levels[MAX_RSSI_LEVELS]; /* Variable number of RSSI levels. An event 4355 * will be posted each time the RSSI of received 4356 * beacons/packets crosses a level. 4357 */ 4358 } wl_rssi_event_t; 4359 4360 typedef struct wl_action_obss_coex_req { 4361 uint8 info; 4362 uint8 num; 4363 uint8 ch_list[1]; 4364 } wl_action_obss_coex_req_t; 4365 4366 4367 /* IOVar parameter block for small MAC address array with type indicator */ 4368 #define WL_IOV_MAC_PARAM_LEN 4 4369 4370 #define WL_IOV_PKTQ_LOG_PRECS 16 4371 4372 typedef struct { 4373 uint32 num_addrs; 4374 char addr_type[WL_IOV_MAC_PARAM_LEN]; 4375 struct ether_addr ea[WL_IOV_MAC_PARAM_LEN]; 4376 } wl_iov_mac_params_t; 4377 4378 4379 /* Parameter block for PKTQ_LOG statistics */ 4380 typedef struct { 4381 uint32 requested; /* packets requested to be stored */ 4382 uint32 stored; /* packets stored */ 4383 uint32 saved; /* packets saved, 4384 because a lowest priority queue has given away one packet 4385 */ 4386 uint32 selfsaved; /* packets saved, 4387 because an older packet from the same queue has been dropped 4388 */ 4389 uint32 full_dropped; /* packets dropped, 4390 because pktq is full with higher precedence packets 4391 */ 4392 uint32 dropped; /* packets dropped because pktq per that precedence is full */ 4393 uint32 sacrificed; /* packets dropped, 4394 in order to save one from a queue of a highest priority 4395 */ 4396 uint32 busy; /* packets droped because of hardware/transmission error */ 4397 uint32 retry; /* packets re-sent because they were not received */ 4398 uint32 ps_retry; /* packets retried again prior to moving power save mode */ 4399 uint32 retry_drop; /* packets finally dropped after retry limit */ 4400 uint32 max_avail; /* the high-water mark of the queue capacity for packets - 4401 goes to zero as queue fills 4402 */ 4403 uint32 max_used; /* the high-water mark of the queue utilisation for packets - 4404 increases with use ('inverse' of max_avail) 4405 */ 4406 uint32 queue_capacity; /* the maximum capacity of the queue */ 4407 } pktq_log_counters_v01_t; 4408 4409 typedef struct { 4410 uint32 requested; /* packets requested to be stored */ 4411 uint32 stored; /* packets stored */ 4412 uint32 saved; /* packets saved, 4413 because a lowest priority queue has given away one packet 4414 */ 4415 uint32 selfsaved; /* packets saved, 4416 because an older packet from the same queue has been dropped 4417 */ 4418 uint32 full_dropped; /* packets dropped, 4419 because pktq is full with higher precedence packets 4420 */ 4421 uint32 dropped; /* packets dropped because pktq per that precedence is full */ 4422 uint32 sacrificed; /* packets dropped, 4423 in order to save one from a queue of a highest priority 4424 */ 4425 uint32 busy; /* packets droped because of hardware/transmission error */ 4426 uint32 retry; /* packets re-sent because they were not received */ 4427 uint32 ps_retry; /* packets retried again prior to moving power save mode */ 4428 uint32 retry_drop; /* packets finally dropped after retry limit */ 4429 uint32 max_avail; /* the high-water mark of the queue capacity for packets - 4430 goes to zero as queue fills 4431 */ 4432 uint32 max_used; /* the high-water mark of the queue utilisation for packets - 4433 increases with use ('inverse' of max_avail) 4434 */ 4435 uint32 queue_capacity; /* the maximum capacity of the queue */ 4436 uint32 rtsfail; /* count of rts attempts that failed to receive cts */ 4437 uint32 acked; /* count of packets sent (acked) successfully */ 4438 } pktq_log_counters_v02_t; 4439 4440 #define sacrified sacrificed 4441 4442 typedef struct { 4443 uint8 num_prec[WL_IOV_MAC_PARAM_LEN]; 4444 pktq_log_counters_v01_t counters[WL_IOV_MAC_PARAM_LEN][WL_IOV_PKTQ_LOG_PRECS]; 4445 char headings[1]; 4446 } pktq_log_format_v01_t; 4447 4448 typedef struct { 4449 uint8 num_prec[WL_IOV_MAC_PARAM_LEN]; 4450 pktq_log_counters_v02_t counters[WL_IOV_MAC_PARAM_LEN][WL_IOV_PKTQ_LOG_PRECS]; 4451 uint32 throughput[WL_IOV_MAC_PARAM_LEN][WL_IOV_PKTQ_LOG_PRECS]; 4452 uint32 time_delta; 4453 char headings[1]; 4454 } pktq_log_format_v02_t; 4455 4456 4457 typedef struct { 4458 uint32 version; 4459 wl_iov_mac_params_t params; 4460 union { 4461 pktq_log_format_v01_t v01; 4462 pktq_log_format_v02_t v02; 4463 } pktq_log; 4464 } wl_iov_pktq_log_t; 4465 4466 4467 /* **** EXTLOG **** */ 4468 #define EXTLOG_CUR_VER 0x0100 4469 4470 #define MAX_ARGSTR_LEN 18 /* At least big enough for storing ETHER_ADDR_STR_LEN */ 4471 4472 /* log modules (bitmap) */ 4473 #define LOG_MODULE_COMMON 0x0001 4474 #define LOG_MODULE_ASSOC 0x0002 4475 #define LOG_MODULE_EVENT 0x0004 4476 #define LOG_MODULE_MAX 3 /* Update when adding module */ 4477 4478 /* log levels */ 4479 #define WL_LOG_LEVEL_DISABLE 0 4480 #define WL_LOG_LEVEL_ERR 1 4481 #define WL_LOG_LEVEL_WARN 2 4482 #define WL_LOG_LEVEL_INFO 3 4483 #define WL_LOG_LEVEL_MAX WL_LOG_LEVEL_INFO /* Update when adding level */ 4484 4485 /* flag */ 4486 #define LOG_FLAG_EVENT 1 4487 4488 /* log arg_type */ 4489 #define LOG_ARGTYPE_NULL 0 4490 #define LOG_ARGTYPE_STR 1 /* %s */ 4491 #define LOG_ARGTYPE_INT 2 /* %d */ 4492 #define LOG_ARGTYPE_INT_STR 3 /* %d...%s */ 4493 #define LOG_ARGTYPE_STR_INT 4 /* %s...%d */ 4494 4495 typedef struct wlc_extlog_cfg { 4496 int max_number; 4497 uint16 module; /* bitmap */ 4498 uint8 level; 4499 uint8 flag; 4500 uint16 version; 4501 } wlc_extlog_cfg_t; 4502 4503 typedef struct log_record { 4504 uint32 time; 4505 uint16 module; 4506 uint16 id; 4507 uint8 level; 4508 uint8 sub_unit; 4509 uint8 seq_num; 4510 int32 arg; 4511 char str[MAX_ARGSTR_LEN]; 4512 } log_record_t; 4513 4514 typedef struct wlc_extlog_req { 4515 uint32 from_last; 4516 uint32 num; 4517 } wlc_extlog_req_t; 4518 4519 typedef struct wlc_extlog_results { 4520 uint16 version; 4521 uint16 record_len; 4522 uint32 num; 4523 log_record_t logs[1]; 4524 } wlc_extlog_results_t; 4525 4526 typedef struct log_idstr { 4527 uint16 id; 4528 uint16 flag; 4529 uint8 arg_type; 4530 const char *fmt_str; 4531 } log_idstr_t; 4532 4533 #define FMTSTRF_USER 1 4534 4535 /* flat ID definitions 4536 * New definitions HAVE TO BE ADDED at the end of the table. Otherwise, it will 4537 * affect backward compatibility with pre-existing apps 4538 */ 4539 typedef enum { 4540 FMTSTR_DRIVER_UP_ID = 0, 4541 FMTSTR_DRIVER_DOWN_ID = 1, 4542 FMTSTR_SUSPEND_MAC_FAIL_ID = 2, 4543 FMTSTR_NO_PROGRESS_ID = 3, 4544 FMTSTR_RFDISABLE_ID = 4, 4545 FMTSTR_REG_PRINT_ID = 5, 4546 FMTSTR_EXPTIME_ID = 6, 4547 FMTSTR_JOIN_START_ID = 7, 4548 FMTSTR_JOIN_COMPLETE_ID = 8, 4549 FMTSTR_NO_NETWORKS_ID = 9, 4550 FMTSTR_SECURITY_MISMATCH_ID = 10, 4551 FMTSTR_RATE_MISMATCH_ID = 11, 4552 FMTSTR_AP_PRUNED_ID = 12, 4553 FMTSTR_KEY_INSERTED_ID = 13, 4554 FMTSTR_DEAUTH_ID = 14, 4555 FMTSTR_DISASSOC_ID = 15, 4556 FMTSTR_LINK_UP_ID = 16, 4557 FMTSTR_LINK_DOWN_ID = 17, 4558 FMTSTR_RADIO_HW_OFF_ID = 18, 4559 FMTSTR_RADIO_HW_ON_ID = 19, 4560 FMTSTR_EVENT_DESC_ID = 20, 4561 FMTSTR_PNP_SET_POWER_ID = 21, 4562 FMTSTR_RADIO_SW_OFF_ID = 22, 4563 FMTSTR_RADIO_SW_ON_ID = 23, 4564 FMTSTR_PWD_MISMATCH_ID = 24, 4565 FMTSTR_FATAL_ERROR_ID = 25, 4566 FMTSTR_AUTH_FAIL_ID = 26, 4567 FMTSTR_ASSOC_FAIL_ID = 27, 4568 FMTSTR_IBSS_FAIL_ID = 28, 4569 FMTSTR_EXTAP_FAIL_ID = 29, 4570 FMTSTR_MAX_ID 4571 } log_fmtstr_id_t; 4572 4573 #ifdef DONGLEOVERLAYS 4574 typedef struct { 4575 uint32 flags_idx; /* lower 8 bits: overlay index; upper 24 bits: flags */ 4576 uint32 offset; /* offset into overlay region to write code */ 4577 uint32 len; /* overlay code len */ 4578 /* overlay code follows this struct */ 4579 } wl_ioctl_overlay_t; 4580 4581 #define OVERLAY_IDX_MASK 0x000000ff 4582 #define OVERLAY_IDX_SHIFT 0 4583 #define OVERLAY_FLAGS_MASK 0xffffff00 4584 #define OVERLAY_FLAGS_SHIFT 8 4585 /* overlay written to device memory immediately after loading the base image */ 4586 #define OVERLAY_FLAG_POSTLOAD 0x100 4587 /* defer overlay download until the device responds w/WLC_E_OVL_DOWNLOAD event */ 4588 #define OVERLAY_FLAG_DEFER_DL 0x200 4589 /* overlay downloaded prior to the host going to sleep */ 4590 #define OVERLAY_FLAG_PRESLEEP 0x400 4591 4592 #define OVERLAY_DOWNLOAD_CHUNKSIZE 1024 4593 #endif /* DONGLEOVERLAYS */ 4594 4595 #endif /* LINUX_POSTMOGRIFY_REMOVAL */ 4596 4597 /* no default structure packing */ 4598 #include <packed_section_end.h> 4599 4600 /* require strict packing */ 4601 #include <packed_section_start.h> 4602 4603 #ifndef LINUX_POSTMOGRIFY_REMOVAL 4604 4605 /* Structures and constants used for "vndr_ie" IOVar interface */ 4606 #define VNDR_IE_CMD_LEN 4 /* length of the set command string: 4607 * "add", "del" (+ NUL) 4608 */ 4609 4610 /* 802.11 Mgmt Packet flags */ 4611 #define VNDR_IE_BEACON_FLAG 0x1 4612 #define VNDR_IE_PRBRSP_FLAG 0x2 4613 #define VNDR_IE_ASSOCRSP_FLAG 0x4 4614 #define VNDR_IE_AUTHRSP_FLAG 0x8 4615 #define VNDR_IE_PRBREQ_FLAG 0x10 4616 #define VNDR_IE_ASSOCREQ_FLAG 0x20 4617 #define VNDR_IE_IWAPID_FLAG 0x40 /* vendor IE in IW advertisement protocol ID field */ 4618 #define VNDR_IE_CUSTOM_FLAG 0x100 /* allow custom IE id */ 4619 4620 #if defined(WLP2P) 4621 /* P2P Action Frames flags (spec ordered) */ 4622 #define VNDR_IE_GONREQ_FLAG 0x001000 4623 #define VNDR_IE_GONRSP_FLAG 0x002000 4624 #define VNDR_IE_GONCFM_FLAG 0x004000 4625 #define VNDR_IE_INVREQ_FLAG 0x008000 4626 #define VNDR_IE_INVRSP_FLAG 0x010000 4627 #define VNDR_IE_DISREQ_FLAG 0x020000 4628 #define VNDR_IE_DISRSP_FLAG 0x040000 4629 #define VNDR_IE_PRDREQ_FLAG 0x080000 4630 #define VNDR_IE_PRDRSP_FLAG 0x100000 4631 4632 #define VNDR_IE_P2PAF_SHIFT 12 4633 #endif /* WLP2P */ 4634 4635 #define VNDR_IE_INFO_HDR_LEN (sizeof(uint32)) 4636 4637 typedef BWL_PRE_PACKED_STRUCT struct { 4638 uint32 pktflag; /* bitmask indicating which packet(s) contain this IE */ 4639 vndr_ie_t vndr_ie_data; /* vendor IE data */ 4640 } BWL_POST_PACKED_STRUCT vndr_ie_info_t; 4641 4642 typedef BWL_PRE_PACKED_STRUCT struct { 4643 int iecount; /* number of entries in the vndr_ie_list[] array */ 4644 vndr_ie_info_t vndr_ie_list[1]; /* variable size list of vndr_ie_info_t structs */ 4645 } BWL_POST_PACKED_STRUCT vndr_ie_buf_t; 4646 4647 typedef BWL_PRE_PACKED_STRUCT struct { 4648 char cmd[VNDR_IE_CMD_LEN]; /* vndr_ie IOVar set command : "add", "del" + NUL */ 4649 vndr_ie_buf_t vndr_ie_buffer; /* buffer containing Vendor IE list information */ 4650 } BWL_POST_PACKED_STRUCT vndr_ie_setbuf_t; 4651 4652 /* tag_ID/length/value_buffer tuple */ 4653 typedef BWL_PRE_PACKED_STRUCT struct { 4654 uint8 id; 4655 uint8 len; 4656 uint8 data[1]; 4657 } BWL_POST_PACKED_STRUCT tlv_t; 4658 4659 typedef BWL_PRE_PACKED_STRUCT struct { 4660 uint32 pktflag; /* bitmask indicating which packet(s) contain this IE */ 4661 tlv_t ie_data; /* IE data */ 4662 } BWL_POST_PACKED_STRUCT ie_info_t; 4663 4664 typedef BWL_PRE_PACKED_STRUCT struct { 4665 int iecount; /* number of entries in the ie_list[] array */ 4666 ie_info_t ie_list[1]; /* variable size list of ie_info_t structs */ 4667 } BWL_POST_PACKED_STRUCT ie_buf_t; 4668 4669 typedef BWL_PRE_PACKED_STRUCT struct { 4670 char cmd[VNDR_IE_CMD_LEN]; /* ie IOVar set command : "add" + NUL */ 4671 ie_buf_t ie_buffer; /* buffer containing IE list information */ 4672 } BWL_POST_PACKED_STRUCT ie_setbuf_t; 4673 4674 typedef BWL_PRE_PACKED_STRUCT struct { 4675 uint32 pktflag; /* bitmask indicating which packet(s) contain this IE */ 4676 uint8 id; /* IE type */ 4677 } BWL_POST_PACKED_STRUCT ie_getbuf_t; 4678 4679 /* structures used to define format of wps ie data from probe requests */ 4680 /* passed up to applications via iovar "prbreq_wpsie" */ 4681 typedef BWL_PRE_PACKED_STRUCT struct sta_prbreq_wps_ie_hdr { 4682 struct ether_addr staAddr; 4683 uint16 ieLen; 4684 } BWL_POST_PACKED_STRUCT sta_prbreq_wps_ie_hdr_t; 4685 4686 typedef BWL_PRE_PACKED_STRUCT struct sta_prbreq_wps_ie_data { 4687 sta_prbreq_wps_ie_hdr_t hdr; 4688 uint8 ieData[1]; 4689 } BWL_POST_PACKED_STRUCT sta_prbreq_wps_ie_data_t; 4690 4691 typedef BWL_PRE_PACKED_STRUCT struct sta_prbreq_wps_ie_list { 4692 uint32 totLen; 4693 uint8 ieDataList[1]; 4694 } BWL_POST_PACKED_STRUCT sta_prbreq_wps_ie_list_t; 4695 4696 4697 #ifdef WLMEDIA_TXFAILEVENT 4698 typedef BWL_PRE_PACKED_STRUCT struct { 4699 char dest[ETHER_ADDR_LEN]; /* destination MAC */ 4700 uint8 prio; /* Packet Priority */ 4701 uint8 flags; /* Flags */ 4702 uint32 tsf_l; /* TSF timer low */ 4703 uint32 tsf_h; /* TSF timer high */ 4704 uint16 rates; /* Main Rates */ 4705 uint16 txstatus; /* TX Status */ 4706 } BWL_POST_PACKED_STRUCT txfailinfo_t; 4707 #endif /* WLMEDIA_TXFAILEVENT */ 4708 4709 typedef BWL_PRE_PACKED_STRUCT struct { 4710 uint32 flags; 4711 chanspec_t chanspec; /* txpwr report for this channel */ 4712 chanspec_t local_chanspec; /* channel on which we are associated */ 4713 uint8 local_max; /* local max according to the AP */ 4714 uint8 local_constraint; /* local constraint according to the AP */ 4715 int8 antgain[2]; /* Ant gain for each band - from SROM */ 4716 uint8 rf_cores; /* count of RF Cores being reported */ 4717 uint8 est_Pout[4]; /* Latest tx power out estimate per RF chain */ 4718 uint8 est_Pout_act[4]; /* Latest tx power out estimate per RF chain w/o adjustment */ 4719 uint8 est_Pout_cck; /* Latest CCK tx power out estimate */ 4720 uint8 tx_power_max[4]; /* Maximum target power among all rates */ 4721 uint tx_power_max_rate_ind[4]; /* Index of the rate with the max target power */ 4722 int8 clm_limits[WL_NUMRATES]; /* regulatory limits - 20, 40 or 80MHz */ 4723 int8 clm_limits_subchan1[WL_NUMRATES]; /* regulatory limits - 20in40 or 40in80 */ 4724 int8 clm_limits_subchan2[WL_NUMRATES]; /* regulatory limits - 20in80MHz */ 4725 int8 sar; /* SAR limit for display by wl executable */ 4726 int8 channel_bandwidth; /* 20, 40 or 80 MHz bandwidth? */ 4727 uint8 version; /* Version of the data format wlu <--> driver */ 4728 uint8 display_core; /* Displayed curpower core */ 4729 int8 target_offsets[4]; /* Target power offsets for current rate per core */ 4730 uint32 last_tx_ratespec; /* Ratespec for last transmition */ 4731 uint user_target; /* user limit */ 4732 uint32 board_limit_len; /* length of board limit buffer */ 4733 uint32 target_len; /* length of target power buffer */ 4734 int8 SARLIMIT[MAX_STREAMS_SUPPORTED]; 4735 uint8 pprdata[1]; /* ppr serialization buffer */ 4736 } BWL_POST_PACKED_STRUCT tx_pwr_rpt_t; 4737 4738 #endif /* LINUX_POSTMOGRIFY_REMOVAL */ 4739 4740 /* no strict structure packing */ 4741 #include <packed_section_end.h> 4742 4743 #ifndef LINUX_POSTMOGRIFY_REMOVAL 4744 /* Global ASSERT Logging */ 4745 #define ASSERTLOG_CUR_VER 0x0100 4746 #define MAX_ASSRTSTR_LEN 64 4747 4748 typedef struct assert_record { 4749 uint32 time; 4750 uint8 seq_num; 4751 char str[MAX_ASSRTSTR_LEN]; 4752 } assert_record_t; 4753 4754 typedef struct assertlog_results { 4755 uint16 version; 4756 uint16 record_len; 4757 uint32 num; 4758 assert_record_t logs[1]; 4759 } assertlog_results_t; 4760 4761 #define LOGRRC_FIX_LEN 8 4762 #define IOBUF_ALLOWED_NUM_OF_LOGREC(type, len) ((len - LOGRRC_FIX_LEN)/sizeof(type)) 4763 4764 4765 /* channel interference measurement (chanim) related defines */ 4766 4767 /* chanim mode */ 4768 #define CHANIM_DISABLE 0 /* disabled */ 4769 #define CHANIM_DETECT 1 /* detection only */ 4770 #define CHANIM_EXT 2 /* external state machine */ 4771 #define CHANIM_ACT 3 /* full internal state machine, detect + act */ 4772 #define CHANIM_MODE_MAX 4 4773 4774 /* define for apcs reason code */ 4775 #define APCS_INIT 0 4776 #define APCS_IOCTL 1 4777 #define APCS_CHANIM 2 4778 #define APCS_CSTIMER 3 4779 #define APCS_BTA 4 4780 #define APCS_TXDLY 5 4781 #define APCS_NONACSD 6 4782 4783 /* number of ACS record entries */ 4784 #define CHANIM_ACS_RECORD 10 4785 4786 /* CHANIM */ 4787 #define CCASTATS_TXDUR 0 4788 #define CCASTATS_INBSS 1 4789 #define CCASTATS_OBSS 2 4790 #define CCASTATS_NOCTG 3 4791 #define CCASTATS_NOPKT 4 4792 #define CCASTATS_DOZE 5 4793 #define CCASTATS_TXOP 6 4794 #define CCASTATS_GDTXDUR 7 4795 #define CCASTATS_BDTXDUR 8 4796 #define CCASTATS_MAX 9 4797 4798 /* chanim acs record */ 4799 typedef struct { 4800 bool valid; 4801 uint8 trigger; 4802 chanspec_t selected_chspc; 4803 int8 bgnoise; 4804 uint32 glitch_cnt; 4805 uint8 ccastats; 4806 uint timestamp; 4807 } chanim_acs_record_t; 4808 4809 typedef struct { 4810 chanim_acs_record_t acs_record[CHANIM_ACS_RECORD]; 4811 uint8 count; 4812 uint timestamp; 4813 } wl_acs_record_t; 4814 4815 typedef struct chanim_stats { 4816 uint32 glitchcnt; /* normalized as per second count */ 4817 uint32 badplcp; /* normalized as per second count */ 4818 uint8 ccastats[CCASTATS_MAX]; /* normalized as 0-255 */ 4819 int8 bgnoise; /* background noise level (in dBm) */ 4820 chanspec_t chanspec; 4821 uint32 timestamp; 4822 } chanim_stats_t; 4823 4824 #define WL_CHANIM_STATS_VERSION 1 4825 #define WL_CHANIM_COUNT_ALL 0xff 4826 #define WL_CHANIM_COUNT_ONE 0x1 4827 4828 typedef struct { 4829 uint32 buflen; 4830 uint32 version; 4831 uint32 count; 4832 chanim_stats_t stats[1]; 4833 } wl_chanim_stats_t; 4834 4835 #define WL_CHANIM_STATS_FIXED_LEN OFFSETOF(wl_chanim_stats_t, stats) 4836 4837 /* Noise measurement metrics. */ 4838 #define NOISE_MEASURE_KNOISE 0x1 4839 4840 /* scb probe parameter */ 4841 typedef struct { 4842 uint32 scb_timeout; 4843 uint32 scb_activity_time; 4844 uint32 scb_max_probe; 4845 } wl_scb_probe_t; 4846 4847 /* ap tpc modes */ 4848 #define AP_TPC_OFF 0 4849 #define AP_TPC_BSS_PWR 1 /* BSS power control */ 4850 #define AP_TPC_AP_PWR 2 /* AP power control */ 4851 #define AP_TPC_AP_BSS_PWR 3 /* Both AP and BSS power control */ 4852 #define AP_TPC_MAX_LINK_MARGIN 127 4853 4854 /* ap tpc modes */ 4855 #define AP_TPC_OFF 0 4856 #define AP_TPC_BSS_PWR 1 /* BSS power control */ 4857 #define AP_TPC_AP_PWR 2 /* AP power control */ 4858 #define AP_TPC_AP_BSS_PWR 3 /* Both AP and BSS power control */ 4859 #define AP_TPC_MAX_LINK_MARGIN 127 4860 4861 /* structure/defines for selective mgmt frame (smf) stats support */ 4862 4863 #define SMFS_VERSION 1 4864 /* selected mgmt frame (smf) stats element */ 4865 typedef struct wl_smfs_elem { 4866 uint32 count; 4867 uint16 code; /* SC or RC code */ 4868 } wl_smfs_elem_t; 4869 4870 typedef struct wl_smf_stats { 4871 uint32 version; 4872 uint16 length; /* reserved for future usage */ 4873 uint8 type; 4874 uint8 codetype; 4875 uint32 ignored_cnt; 4876 uint32 malformed_cnt; 4877 uint32 count_total; /* count included the interested group */ 4878 wl_smfs_elem_t elem[1]; 4879 } wl_smf_stats_t; 4880 4881 #define WL_SMFSTATS_FIXED_LEN OFFSETOF(wl_smf_stats_t, elem); 4882 4883 enum { 4884 SMFS_CODETYPE_SC, 4885 SMFS_CODETYPE_RC 4886 }; 4887 4888 /* reuse two number in the sc/rc space */ 4889 #define SMFS_CODE_MALFORMED 0xFFFE 4890 #define SMFS_CODE_IGNORED 0xFFFD 4891 4892 typedef enum smfs_type { 4893 SMFS_TYPE_AUTH, 4894 SMFS_TYPE_ASSOC, 4895 SMFS_TYPE_REASSOC, 4896 SMFS_TYPE_DISASSOC_TX, 4897 SMFS_TYPE_DISASSOC_RX, 4898 SMFS_TYPE_DEAUTH_TX, 4899 SMFS_TYPE_DEAUTH_RX, 4900 SMFS_TYPE_MAX 4901 } smfs_type_t; 4902 4903 #ifdef PHYMON 4904 4905 #define PHYMON_VERSION 1 4906 4907 typedef struct wl_phycal_core_state { 4908 /* Tx IQ/LO calibration coeffs */ 4909 int16 tx_iqlocal_a; 4910 int16 tx_iqlocal_b; 4911 int8 tx_iqlocal_ci; 4912 int8 tx_iqlocal_cq; 4913 int8 tx_iqlocal_di; 4914 int8 tx_iqlocal_dq; 4915 int8 tx_iqlocal_ei; 4916 int8 tx_iqlocal_eq; 4917 int8 tx_iqlocal_fi; 4918 int8 tx_iqlocal_fq; 4919 4920 /* Rx IQ calibration coeffs */ 4921 int16 rx_iqcal_a; 4922 int16 rx_iqcal_b; 4923 4924 uint8 tx_iqlocal_pwridx; /* Tx Power Index for Tx IQ/LO calibration */ 4925 uint32 papd_epsilon_table[64]; /* PAPD epsilon table */ 4926 int16 papd_epsilon_offset; /* PAPD epsilon offset */ 4927 uint8 curr_tx_pwrindex; /* Tx power index */ 4928 int8 idle_tssi; /* Idle TSSI */ 4929 int8 est_tx_pwr; /* Estimated Tx Power (dB) */ 4930 int8 est_rx_pwr; /* Estimated Rx Power (dB) from RSSI */ 4931 uint16 rx_gaininfo; /* Rx gain applied on last Rx pkt */ 4932 uint16 init_gaincode; /* initgain required for ACI */ 4933 int8 estirr_tx; 4934 int8 estirr_rx; 4935 4936 } wl_phycal_core_state_t; 4937 4938 typedef struct wl_phycal_state { 4939 int version; 4940 int8 num_phy_cores; /* number of cores */ 4941 int8 curr_temperature; /* on-chip temperature sensor reading */ 4942 chanspec_t chspec; /* channspec for this state */ 4943 bool aci_state; /* ACI state: ON/OFF */ 4944 uint16 crsminpower; /* crsminpower required for ACI */ 4945 uint16 crsminpowerl; /* crsminpowerl required for ACI */ 4946 uint16 crsminpoweru; /* crsminpoweru required for ACI */ 4947 wl_phycal_core_state_t phycal_core[1]; 4948 } wl_phycal_state_t; 4949 4950 #define WL_PHYCAL_STAT_FIXED_LEN OFFSETOF(wl_phycal_state_t, phycal_core) 4951 #endif /* PHYMON */ 4952 4953 /* discovery state */ 4954 typedef struct wl_p2p_disc_st { 4955 uint8 state; /* see state */ 4956 chanspec_t chspec; /* valid in listen state */ 4957 uint16 dwell; /* valid in listen state, in ms */ 4958 } wl_p2p_disc_st_t; 4959 4960 /* state */ 4961 #define WL_P2P_DISC_ST_SCAN 0 4962 #define WL_P2P_DISC_ST_LISTEN 1 4963 #define WL_P2P_DISC_ST_SEARCH 2 4964 4965 /* scan request */ 4966 typedef struct wl_p2p_scan { 4967 uint8 type; /* 'S' for WLC_SCAN, 'E' for "escan" */ 4968 uint8 reserved[3]; 4969 /* scan or escan parms... */ 4970 } wl_p2p_scan_t; 4971 4972 /* i/f request */ 4973 typedef struct wl_p2p_if { 4974 struct ether_addr addr; 4975 uint8 type; /* see i/f type */ 4976 chanspec_t chspec; /* for p2p_ifadd GO */ 4977 } wl_p2p_if_t; 4978 4979 /* i/f type */ 4980 #define WL_P2P_IF_CLIENT 0 4981 #define WL_P2P_IF_GO 1 4982 #define WL_P2P_IF_DYNBCN_GO 2 4983 #define WL_P2P_IF_DEV 3 4984 4985 /* i/f query */ 4986 typedef struct wl_p2p_ifq { 4987 uint bsscfgidx; 4988 char ifname[BCM_MSG_IFNAME_MAX]; 4989 } wl_p2p_ifq_t; 4990 4991 /* OppPS & CTWindow */ 4992 typedef struct wl_p2p_ops { 4993 uint8 ops; /* 0: disable 1: enable */ 4994 uint8 ctw; /* >= 10 */ 4995 } wl_p2p_ops_t; 4996 4997 /* absence and presence request */ 4998 typedef struct wl_p2p_sched_desc { 4999 uint32 start; 5000 uint32 interval; 5001 uint32 duration; 5002 uint32 count; /* see count */ 5003 } wl_p2p_sched_desc_t; 5004 5005 /* count */ 5006 #define WL_P2P_SCHED_RSVD 0 5007 #define WL_P2P_SCHED_REPEAT 255 /* anything > 255 will be treated as 255 */ 5008 5009 typedef struct wl_p2p_sched { 5010 uint8 type; /* see schedule type */ 5011 uint8 action; /* see schedule action */ 5012 uint8 option; /* see schedule option */ 5013 wl_p2p_sched_desc_t desc[1]; 5014 } wl_p2p_sched_t; 5015 #define WL_P2P_SCHED_FIXED_LEN 3 5016 5017 /* schedule type */ 5018 #define WL_P2P_SCHED_TYPE_ABS 0 /* Scheduled Absence */ 5019 #define WL_P2P_SCHED_TYPE_REQ_ABS 1 /* Requested Absence */ 5020 5021 /* schedule action during absence periods (for WL_P2P_SCHED_ABS type) */ 5022 #define WL_P2P_SCHED_ACTION_NONE 0 /* no action */ 5023 #define WL_P2P_SCHED_ACTION_DOZE 1 /* doze */ 5024 /* schedule option - WL_P2P_SCHED_TYPE_REQ_ABS */ 5025 #define WL_P2P_SCHED_ACTION_GOOFF 2 /* turn off GO beacon/prbrsp functions */ 5026 /* schedule option - WL_P2P_SCHED_TYPE_XXX */ 5027 #define WL_P2P_SCHED_ACTION_RESET 255 /* reset */ 5028 5029 /* schedule option - WL_P2P_SCHED_TYPE_ABS */ 5030 #define WL_P2P_SCHED_OPTION_NORMAL 0 /* normal start/interval/duration/count */ 5031 #define WL_P2P_SCHED_OPTION_BCNPCT 1 /* percentage of beacon interval */ 5032 /* schedule option - WL_P2P_SCHED_TYPE_REQ_ABS */ 5033 #define WL_P2P_SCHED_OPTION_TSFOFS 2 /* normal start/internal/duration/count with 5034 * start being an offset of the 'current' TSF 5035 */ 5036 5037 /* feature flags */ 5038 #define WL_P2P_FEAT_GO_CSA (1 << 0) /* GO moves with the STA using CSA method */ 5039 #define WL_P2P_FEAT_GO_NOLEGACY (1 << 1) /* GO does not probe respond to non-p2p probe 5040 * requests 5041 */ 5042 #define WL_P2P_FEAT_RESTRICT_DEV_RESP (1 << 2) /* Restrict p2p dev interface from responding */ 5043 5044 #ifdef WLNIC 5045 /* nic_cnx iovar */ 5046 typedef struct wl_nic_cnx { 5047 uint8 opcode; 5048 struct ether_addr addr; 5049 /* the following are valid for WL_NIC_CNX_CONN */ 5050 uint8 SSID_len; 5051 uint8 SSID[32]; 5052 struct ether_addr abssid; 5053 uint16 beacon_interval; 5054 uint16 sync_threshold; 5055 uint16 beacon_wait_time; 5056 } wl_nic_cnx_t; 5057 5058 /* opcode */ 5059 #define WL_NIC_CNX_ADD 0 /* add NIC connection */ 5060 #define WL_NIC_CNX_DEL 1 /* delete NIC connection */ 5061 #define WL_NIC_CNX_IDX 2 /* query NIC connection index */ 5062 #define WL_NIC_CNX_CONN 3 /* join/create network */ 5063 #define WL_NIC_CNX_DIS 4 /* disconnect from network */ 5064 5065 /* nic_cfg iovar */ 5066 typedef struct wl_nic_cfg { 5067 uint8 version; 5068 uint8 beacon_mode; 5069 uint8 diluted_beacon_period; 5070 uint8 beacon_probability; 5071 uint8 num_awake_window_params; 5072 struct { 5073 uint8 channel_number; 5074 uint8 awake_window_length; 5075 uint8 repeat_EQC; 5076 } awake_window_params[3]; 5077 uint8 scan_length; 5078 uint8 scan_interval; 5079 uint8 scan_probability; 5080 uint8 ASID; 5081 uint8 channel_usage_mode; 5082 uint8 CWmin_af; 5083 uint8 NIC_priority; 5084 uint8 NIC_data_ind; 5085 uint8 allowed_wakeup_delay; 5086 } wl_nic_cfg_t; 5087 5088 /* version */ 5089 #define WL_NIC_CFG_VER 1 5090 5091 /* beacon_mode */ 5092 #define WL_NIC_BCN_NORM 0 5093 #define WL_NIC_BCN_DILUTED 1 5094 5095 /* channel_usage_mode */ 5096 #define WL_NIC_CHAN_STATIC 0 5097 #define WL_NIC_CHAN_CYCLE 1 5098 5099 /* nic_cfg iovar */ 5100 typedef struct wl_nic_frm { 5101 uint8 type; 5102 struct ether_addr da; 5103 uint8 body[1]; 5104 } wl_nic_frm_t; 5105 5106 /* type */ 5107 #define WL_NIC_FRM_ACTION 2 5108 5109 /* i/f query */ 5110 typedef struct wl_nic_ifq { 5111 uint bsscfgidx; 5112 char ifname[BCM_MSG_IFNAME_MAX]; 5113 } wl_nic_ifq_t; 5114 5115 /* data mode */ 5116 /* nic_dm iovar */ 5117 typedef struct wl_nic_dm { 5118 uint8 enab; 5119 uint8 rsvd; 5120 /* the following fields are valid when enabling... */ 5121 chanspec_t chspec; 5122 uint8 DATA_priority; 5123 uint8 NIC_priority; 5124 } wl_nic_dm_t; 5125 5126 /* immediate scan request */ 5127 typedef struct wl_nic_isq { 5128 uint8 scan_length; 5129 } wl_nic_isq_t; 5130 #endif /* WLNIC */ 5131 5132 /* RFAWARE def */ 5133 #define BCM_ACTION_RFAWARE 0x77 5134 #define BCM_ACTION_RFAWARE_DCS 0x01 5135 5136 /* DCS reason code define */ 5137 #define BCM_DCS_IOVAR 0x1 5138 #define BCM_DCS_UNKNOWN 0xFF 5139 5140 typedef struct wl_bcmdcs_data { 5141 uint reason; 5142 chanspec_t chspec; 5143 } wl_bcmdcs_data_t; 5144 5145 /* n-mode support capability */ 5146 /* 2x2 includes both 1x1 & 2x2 devices 5147 * reserved #define 2 for future when we want to separate 1x1 & 2x2 and 5148 * control it independently 5149 */ 5150 #define WL_11N_2x2 1 5151 #define WL_11N_3x3 3 5152 #define WL_11N_4x4 4 5153 5154 /* define 11n feature disable flags */ 5155 #define WLFEATURE_DISABLE_11N 0x00000001 5156 #define WLFEATURE_DISABLE_11N_STBC_TX 0x00000002 5157 #define WLFEATURE_DISABLE_11N_STBC_RX 0x00000004 5158 #define WLFEATURE_DISABLE_11N_SGI_TX 0x00000008 5159 #define WLFEATURE_DISABLE_11N_SGI_RX 0x00000010 5160 #define WLFEATURE_DISABLE_11N_AMPDU_TX 0x00000020 5161 #define WLFEATURE_DISABLE_11N_AMPDU_RX 0x00000040 5162 #define WLFEATURE_DISABLE_11N_GF 0x00000080 5163 5164 /* Proxy STA modes */ 5165 #define PSTA_MODE_DISABLED 0 5166 #define PSTA_MODE_PROXY 1 5167 #define PSTA_MODE_REPEATER 2 5168 5169 5170 /* NAT configuration */ 5171 typedef struct { 5172 uint32 ipaddr; /* interface ip address */ 5173 uint32 ipaddr_mask; /* interface ip address mask */ 5174 uint32 ipaddr_gateway; /* gateway ip address */ 5175 uint8 mac_gateway[6]; /* gateway mac address */ 5176 uint32 ipaddr_dns; /* DNS server ip address, valid only for public if */ 5177 uint8 mac_dns[6]; /* DNS server mac address, valid only for public if */ 5178 uint8 GUID[38]; /* interface GUID */ 5179 } nat_if_info_t; 5180 5181 typedef struct { 5182 uint op; /* operation code */ 5183 bool pub_if; /* set for public if, clear for private if */ 5184 nat_if_info_t if_info; /* interface info */ 5185 } nat_cfg_t; 5186 5187 /* op code in nat_cfg */ 5188 #define NAT_OP_ENABLE 1 /* enable NAT on given interface */ 5189 #define NAT_OP_DISABLE 2 /* disable NAT on given interface */ 5190 #define NAT_OP_DISABLE_ALL 3 /* disable NAT on all interfaces */ 5191 5192 /* NAT state */ 5193 #define NAT_STATE_ENABLED 1 /* NAT is enabled */ 5194 #define NAT_STATE_DISABLED 2 /* NAT is disabled */ 5195 5196 typedef struct { 5197 int state; /* NAT state returned */ 5198 } nat_state_t; 5199 5200 #ifdef PROP_TXSTATUS 5201 /* Bit definitions for tlv iovar */ 5202 /* 5203 * enable RSSI signals: 5204 * WLFC_CTL_TYPE_RSSI 5205 */ 5206 #define WLFC_FLAGS_RSSI_SIGNALS 0x0001 5207 5208 /* enable (if/mac_open, if/mac_close,, mac_add, mac_del) signals: 5209 * 5210 * WLFC_CTL_TYPE_MAC_OPEN 5211 * WLFC_CTL_TYPE_MAC_CLOSE 5212 * 5213 * WLFC_CTL_TYPE_INTERFACE_OPEN 5214 * WLFC_CTL_TYPE_INTERFACE_CLOSE 5215 * 5216 * WLFC_CTL_TYPE_MACDESC_ADD 5217 * WLFC_CTL_TYPE_MACDESC_DEL 5218 * 5219 */ 5220 #define WLFC_FLAGS_XONXOFF_SIGNALS 0x0002 5221 5222 /* enable (status, fifo_credit, mac_credit) signals 5223 * WLFC_CTL_TYPE_MAC_REQUEST_CREDIT 5224 * WLFC_CTL_TYPE_TXSTATUS 5225 * WLFC_CTL_TYPE_FIFO_CREDITBACK 5226 */ 5227 #define WLFC_FLAGS_CREDIT_STATUS_SIGNALS 0x0004 5228 5229 #define WLFC_FLAGS_HOST_PROPTXSTATUS_ACTIVE 0x0008 5230 #define WLFC_FLAGS_PSQ_GENERATIONFSM_ENABLE 0x0010 5231 #define WLFC_FLAGS_PSQ_ZERO_BUFFER_ENABLE 0x0020 5232 #define WLFC_FLAGS_HOST_RXRERODER_ACTIVE 0x0040 5233 #endif /* PROP_TXSTATUS */ 5234 5235 #define BTA_STATE_LOG_SZ 64 5236 5237 /* BTAMP Statemachine states */ 5238 enum { 5239 HCIReset = 1, 5240 HCIReadLocalAMPInfo, 5241 HCIReadLocalAMPASSOC, 5242 HCIWriteRemoteAMPASSOC, 5243 HCICreatePhysicalLink, 5244 HCIAcceptPhysicalLinkRequest, 5245 HCIDisconnectPhysicalLink, 5246 HCICreateLogicalLink, 5247 HCIAcceptLogicalLink, 5248 HCIDisconnectLogicalLink, 5249 HCILogicalLinkCancel, 5250 HCIAmpStateChange, 5251 HCIWriteLogicalLinkAcceptTimeout 5252 }; 5253 5254 typedef struct flush_txfifo { 5255 uint32 txfifobmp; 5256 uint32 hwtxfifoflush; 5257 struct ether_addr ea; 5258 } flush_txfifo_t; 5259 5260 #define CHANNEL_5G_LOW_START 36 /* 5G low (36..48) CDD enable/disable bit mask */ 5261 #define CHANNEL_5G_MID_START 52 /* 5G mid (52..64) CDD enable/disable bit mask */ 5262 #define CHANNEL_5G_HIGH_START 100 /* 5G high (100..140) CDD enable/disable bit mask */ 5263 #define CHANNEL_5G_UPPER_START 149 /* 5G upper (149..161) CDD enable/disable bit mask */ 5264 5265 enum { 5266 SPATIAL_MODE_2G_IDX = 0, 5267 SPATIAL_MODE_5G_LOW_IDX, 5268 SPATIAL_MODE_5G_MID_IDX, 5269 SPATIAL_MODE_5G_HIGH_IDX, 5270 SPATIAL_MODE_5G_UPPER_IDX, 5271 SPATIAL_MODE_MAX_IDX 5272 }; 5273 5274 #define WLC_TXCORE_MAX 4 /* max number of txcore supports */ 5275 #define WLC_SUBBAND_MAX 4 /* max number of sub-band supports */ 5276 typedef struct { 5277 uint8 band2g[WLC_TXCORE_MAX]; 5278 uint8 band5g[WLC_SUBBAND_MAX][WLC_TXCORE_MAX]; 5279 } sar_limit_t; 5280 5281 /* IOVAR "mempool" parameter. Used to retrieve a list of memory pool statistics. */ 5282 typedef struct wl_mempool_stats { 5283 int num; /* Number of memory pools */ 5284 bcm_mp_stats_t s[1]; /* Variable array of memory pool stats. */ 5285 } wl_mempool_stats_t; 5286 5287 5288 /* D0 Coalescing */ 5289 #define IPV4_ARP_FILTER 0x0001 5290 #define IPV4_NETBT_FILTER 0x0002 5291 #define IPV4_LLMNR_FILTER 0x0004 5292 #define IPV4_SSDP_FILTER 0x0008 5293 #define IPV4_WSD_FILTER 0x0010 5294 #define IPV6_NETBT_FILTER 0x0200 5295 #define IPV6_LLMNR_FILTER 0x0400 5296 #define IPV6_SSDP_FILTER 0x0800 5297 #define IPV6_WSD_FILTER 0x1000 5298 5299 /* Network Offload Engine */ 5300 #define NWOE_OL_ENABLE 0x00000001 5301 5302 typedef struct { 5303 uint32 ipaddr; 5304 uint32 ipaddr_netmask; 5305 uint32 ipaddr_gateway; 5306 } nwoe_ifconfig_t; 5307 5308 /* 5309 * Traffic management structures/defines. 5310 */ 5311 5312 /* Traffic management bandwidth parameters */ 5313 #define TRF_MGMT_MAX_PRIORITIES 3 5314 5315 #define TRF_MGMT_FLAG_ADD_DSCP 0x0001 /* Add DSCP to IP TOS field */ 5316 #define TRF_MGMT_FLAG_DISABLE_SHAPING 0x0002 /* Don't shape traffic */ 5317 #define TRF_MGMT_FLAG_MANAGE_LOCAL_TRAFFIC 0x0008 /* Manage traffic over our local subnet */ 5318 #define TRF_MGMT_FLAG_FILTER_ON_MACADDR 0x0010 /* filter on MAC address */ 5319 #define TRF_MGMT_FLAG_NO_RX 0x0020 /* do not apply fiters to rx packets */ 5320 5321 #define TRF_FILTER_MAC_ADDR 0x0001 /* L2 filter use dst mac address for filtering */ 5322 #define TRF_FILTER_IP_ADDR 0x0002 /* L3 filter use ip ddress for filtering */ 5323 #define TRF_FILTER_L4 0x0004 /* L4 filter use tcp/udp for filtering */ 5324 #define TRF_FILTER_FAVORED 0x0010 /* Tag the packet FAVORED */ 5325 5326 /* Traffic management priority classes */ 5327 typedef enum trf_mgmt_priority_class { 5328 trf_mgmt_priority_low = 0, /* Maps to 802.1p BK */ 5329 trf_mgmt_priority_medium = 1, /* Maps to 802.1p BE */ 5330 trf_mgmt_priority_high = 2, /* Maps to 802.1p VI */ 5331 trf_mgmt_priority_nochange = 3, /* do not update the priority */ 5332 trf_mgmt_priority_invalid = (trf_mgmt_priority_nochange + 1) 5333 } trf_mgmt_priority_class_t; 5334 5335 /* Traffic management configuration parameters */ 5336 typedef struct trf_mgmt_config { 5337 uint32 trf_mgmt_enabled; /* 0 - disabled, 1 - enabled */ 5338 uint32 flags; /* See TRF_MGMT_FLAG_xxx defines */ 5339 uint32 host_ip_addr; /* My IP address to determine subnet */ 5340 uint32 host_subnet_mask; /* My subnet mask */ 5341 uint32 downlink_bandwidth; /* In units of kbps */ 5342 uint32 uplink_bandwidth; /* In units of kbps */ 5343 uint32 min_tx_bandwidth[TRF_MGMT_MAX_PRIORITIES]; /* Minimum guaranteed tx bandwidth */ 5344 uint32 min_rx_bandwidth[TRF_MGMT_MAX_PRIORITIES]; /* Minimum guaranteed rx bandwidth */ 5345 } trf_mgmt_config_t; 5346 5347 /* Traffic management filter */ 5348 typedef struct trf_mgmt_filter { 5349 struct ether_addr dst_ether_addr; /* His L2 address */ 5350 uint32 dst_ip_addr; /* His IP address */ 5351 uint16 dst_port; /* His L4 port */ 5352 uint16 src_port; /* My L4 port */ 5353 uint16 prot; /* L4 protocol (only TCP or UDP) */ 5354 uint16 flags; /* TBD. For now, this must be zero. */ 5355 trf_mgmt_priority_class_t priority; /* Priority for filtered packets */ 5356 } trf_mgmt_filter_t; 5357 5358 /* Traffic management filter list (variable length) */ 5359 typedef struct trf_mgmt_filter_list { 5360 uint32 num_filters; 5361 trf_mgmt_filter_t filter[1]; 5362 } trf_mgmt_filter_list_t; 5363 5364 /* Traffic management global info used for all queues */ 5365 typedef struct trf_mgmt_global_info { 5366 uint32 maximum_bytes_per_second; 5367 uint32 maximum_bytes_per_sampling_period; 5368 uint32 total_bytes_consumed_per_second; 5369 uint32 total_bytes_consumed_per_sampling_period; 5370 uint32 total_unused_bytes_per_sampling_period; 5371 } trf_mgmt_global_info_t; 5372 5373 /* Traffic management shaping info per priority queue */ 5374 typedef struct trf_mgmt_shaping_info { 5375 uint32 gauranteed_bandwidth_percentage; 5376 uint32 guaranteed_bytes_per_second; 5377 uint32 guaranteed_bytes_per_sampling_period; 5378 uint32 num_bytes_produced_per_second; 5379 uint32 num_bytes_consumed_per_second; 5380 uint32 num_queued_packets; /* Number of packets in queue */ 5381 uint32 num_queued_bytes; /* Number of bytes in queue */ 5382 } trf_mgmt_shaping_info_t; 5383 5384 /* Traffic management shaping info array */ 5385 typedef struct trf_mgmt_shaping_info_array { 5386 trf_mgmt_global_info_t tx_global_shaping_info; 5387 trf_mgmt_shaping_info_t tx_queue_shaping_info[TRF_MGMT_MAX_PRIORITIES]; 5388 trf_mgmt_global_info_t rx_global_shaping_info; 5389 trf_mgmt_shaping_info_t rx_queue_shaping_info[TRF_MGMT_MAX_PRIORITIES]; 5390 } trf_mgmt_shaping_info_array_t; 5391 5392 5393 /* Traffic management statistical counters */ 5394 typedef struct trf_mgmt_stats { 5395 uint32 num_processed_packets; /* Number of packets processed */ 5396 uint32 num_processed_bytes; /* Number of bytes processed */ 5397 uint32 num_discarded_packets; /* Number of packets discarded from queue */ 5398 } trf_mgmt_stats_t; 5399 5400 /* Traffic management statisics array */ 5401 typedef struct trf_mgmt_stats_array { 5402 trf_mgmt_stats_t tx_queue_stats[TRF_MGMT_MAX_PRIORITIES]; 5403 trf_mgmt_stats_t rx_queue_stats[TRF_MGMT_MAX_PRIORITIES]; 5404 } trf_mgmt_stats_array_t; 5405 5406 typedef struct powersel_params { 5407 /* LPC Params exposed via IOVAR */ 5408 int32 tp_ratio_thresh; /* Throughput ratio threshold */ 5409 uint8 rate_stab_thresh; /* Thresh for rate stability based on nupd */ 5410 uint8 pwr_stab_thresh; /* Number of successes before power step down */ 5411 uint8 pwr_sel_exp_time; /* Time lapse for expiry of database */ 5412 } powersel_params_t; 5413 5414 /* tx pkt delay statistics */ 5415 #define SCB_RETRY_SHORT_DEF 7 /* Default Short retry Limit */ 5416 #define WLPKTDLY_HIST_NBINS 16 /* number of bins used in the Delay histogram */ 5417 5418 /* structure to store per-AC delay statistics */ 5419 typedef struct scb_delay_stats { 5420 uint32 txmpdu_lost; /* number of MPDUs lost */ 5421 uint32 txmpdu_cnt[SCB_RETRY_SHORT_DEF]; /* retry times histogram */ 5422 uint32 delay_sum[SCB_RETRY_SHORT_DEF]; /* cumulative packet latency */ 5423 uint32 delay_min; /* minimum packet latency observed */ 5424 uint32 delay_max; /* maximum packet latency observed */ 5425 uint32 delay_avg; /* packet latency average */ 5426 uint32 delay_hist[WLPKTDLY_HIST_NBINS]; /* delay histogram */ 5427 } scb_delay_stats_t; 5428 5429 /* structure for txdelay event */ 5430 typedef struct txdelay_event { 5431 uint8 status; 5432 int rssi; 5433 chanim_stats_t chanim_stats; 5434 scb_delay_stats_t delay_stats[AC_COUNT]; 5435 } txdelay_event_t; 5436 5437 /* structure for txdelay parameters */ 5438 typedef struct txdelay_params { 5439 uint16 ratio; /* Avg Txdelay Delta */ 5440 uint8 cnt; /* Sample cnt */ 5441 uint8 period; /* Sample period */ 5442 uint8 tune; /* Debug */ 5443 } txdelay_params_t; 5444 5445 #define WL_RELMCAST_MAX_CLIENT 32 5446 #define WL_RELMCAST_FLAG_INBLACKLIST 1 5447 #define WL_RELMCAST_FLAG_ACTIVEACKER 2 5448 #define WL_RELMCAST_FLAG_RELMCAST 4 5449 5450 #define WL_RELMCAST_VER 1 5451 5452 typedef struct wl_relmcast_client { 5453 uint8 flag; 5454 int16 rssi; 5455 struct ether_addr addr; 5456 } wl_relmcast_client_t; 5457 5458 typedef struct wl_relmcast_st { 5459 uint8 ver; 5460 uint8 num; 5461 wl_relmcast_client_t clients[WL_RELMCAST_MAX_CLIENT]; 5462 } wl_relmcast_status_t; 5463 5464 #endif /* LINUX_POSTMOGRIFY_REMOVAL */ 5465 5466 /* fbt_cap: FBT assoc / reassoc modes. */ 5467 #define WLC_FBT_CAP_DRV_4WAY_AND_REASSOC 1 /* Driver 4-way handshake & reassoc (WLFBT). */ 5468 5469 typedef struct bcnreq { 5470 uint8 bcn_mode; 5471 int dur; 5472 int channel; 5473 struct ether_addr da; 5474 uint16 random_int; 5475 wlc_ssid_t ssid; 5476 uint16 reps; 5477 } bcnreq_t; 5478 5479 typedef struct rrmreq { 5480 struct ether_addr da; 5481 uint8 reg; 5482 uint8 chan; 5483 uint16 random_int; 5484 uint16 dur; 5485 uint16 reps; 5486 } rrmreq_t; 5487 5488 typedef struct framereq { 5489 struct ether_addr da; 5490 uint8 reg; 5491 uint8 chan; 5492 uint16 random_int; 5493 uint16 dur; 5494 struct ether_addr ta; 5495 uint16 reps; 5496 } framereq_t; 5497 5498 typedef struct statreq { 5499 struct ether_addr da; 5500 struct ether_addr peer; 5501 uint16 random_int; 5502 uint16 dur; 5503 uint8 group_id; 5504 uint16 reps; 5505 } statreq_t; 5506 5507 typedef struct wl_el_set_params_s { 5508 uint8 set; /* Set number */ 5509 uint32 size; /* Size to make/expand */ 5510 } wl_el_set_params_t; 5511 5512 typedef struct wl_el_tag_params_s { 5513 uint16 tag; 5514 uint8 set; 5515 uint8 flags; 5516 } wl_el_tag_params_t; 5517 5518 #endif /* _wlioctl_h_ */ 5519