1 /* 2 * This file is part of wl1271 3 * 4 * Copyright (C) 2009 Nokia Corporation 5 * 6 * Contact: Luciano Coelho <luciano.coelho@nokia.com> 7 * 8 * This program is free software; you can redistribute it and/or 9 * modify it under the terms of the GNU General Public License 10 * version 2 as published by the Free Software Foundation. 11 * 12 * This program is distributed in the hope that it will be useful, but 13 * WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 * General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with this program; if not, write to the Free Software 19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 20 * 02110-1301 USA 21 * 22 */ 23 24 #ifndef __CONF_H__ 25 #define __CONF_H__ 26 27 enum { 28 CONF_HW_BIT_RATE_1MBPS = BIT(0), 29 CONF_HW_BIT_RATE_2MBPS = BIT(1), 30 CONF_HW_BIT_RATE_5_5MBPS = BIT(2), 31 CONF_HW_BIT_RATE_6MBPS = BIT(3), 32 CONF_HW_BIT_RATE_9MBPS = BIT(4), 33 CONF_HW_BIT_RATE_11MBPS = BIT(5), 34 CONF_HW_BIT_RATE_12MBPS = BIT(6), 35 CONF_HW_BIT_RATE_18MBPS = BIT(7), 36 CONF_HW_BIT_RATE_22MBPS = BIT(8), 37 CONF_HW_BIT_RATE_24MBPS = BIT(9), 38 CONF_HW_BIT_RATE_36MBPS = BIT(10), 39 CONF_HW_BIT_RATE_48MBPS = BIT(11), 40 CONF_HW_BIT_RATE_54MBPS = BIT(12), 41 CONF_HW_BIT_RATE_MCS_0 = BIT(13), 42 CONF_HW_BIT_RATE_MCS_1 = BIT(14), 43 CONF_HW_BIT_RATE_MCS_2 = BIT(15), 44 CONF_HW_BIT_RATE_MCS_3 = BIT(16), 45 CONF_HW_BIT_RATE_MCS_4 = BIT(17), 46 CONF_HW_BIT_RATE_MCS_5 = BIT(18), 47 CONF_HW_BIT_RATE_MCS_6 = BIT(19), 48 CONF_HW_BIT_RATE_MCS_7 = BIT(20) 49 }; 50 51 enum { 52 CONF_HW_RATE_INDEX_1MBPS = 0, 53 CONF_HW_RATE_INDEX_2MBPS = 1, 54 CONF_HW_RATE_INDEX_5_5MBPS = 2, 55 CONF_HW_RATE_INDEX_6MBPS = 3, 56 CONF_HW_RATE_INDEX_9MBPS = 4, 57 CONF_HW_RATE_INDEX_11MBPS = 5, 58 CONF_HW_RATE_INDEX_12MBPS = 6, 59 CONF_HW_RATE_INDEX_18MBPS = 7, 60 CONF_HW_RATE_INDEX_22MBPS = 8, 61 CONF_HW_RATE_INDEX_24MBPS = 9, 62 CONF_HW_RATE_INDEX_36MBPS = 10, 63 CONF_HW_RATE_INDEX_48MBPS = 11, 64 CONF_HW_RATE_INDEX_54MBPS = 12, 65 CONF_HW_RATE_INDEX_MAX = CONF_HW_RATE_INDEX_54MBPS, 66 }; 67 68 enum { 69 CONF_HW_RXTX_RATE_MCS7 = 0, 70 CONF_HW_RXTX_RATE_MCS6, 71 CONF_HW_RXTX_RATE_MCS5, 72 CONF_HW_RXTX_RATE_MCS4, 73 CONF_HW_RXTX_RATE_MCS3, 74 CONF_HW_RXTX_RATE_MCS2, 75 CONF_HW_RXTX_RATE_MCS1, 76 CONF_HW_RXTX_RATE_MCS0, 77 CONF_HW_RXTX_RATE_54, 78 CONF_HW_RXTX_RATE_48, 79 CONF_HW_RXTX_RATE_36, 80 CONF_HW_RXTX_RATE_24, 81 CONF_HW_RXTX_RATE_22, 82 CONF_HW_RXTX_RATE_18, 83 CONF_HW_RXTX_RATE_12, 84 CONF_HW_RXTX_RATE_11, 85 CONF_HW_RXTX_RATE_9, 86 CONF_HW_RXTX_RATE_6, 87 CONF_HW_RXTX_RATE_5_5, 88 CONF_HW_RXTX_RATE_2, 89 CONF_HW_RXTX_RATE_1, 90 CONF_HW_RXTX_RATE_MAX, 91 CONF_HW_RXTX_RATE_UNSUPPORTED = 0xff 92 }; 93 94 enum { 95 CONF_SG_DISABLE = 0, 96 CONF_SG_PROTECTIVE, 97 CONF_SG_OPPORTUNISTIC 98 }; 99 100 enum { 101 /* 102 * Configure the min and max time BT gains the antenna 103 * in WLAN / BT master basic rate 104 * 105 * Range: 0 - 255 (ms) 106 */ 107 CONF_SG_ACL_BT_MASTER_MIN_BR = 0, 108 CONF_SG_ACL_BT_MASTER_MAX_BR, 109 110 /* 111 * Configure the min and max time BT gains the antenna 112 * in WLAN / BT slave basic rate 113 * 114 * Range: 0 - 255 (ms) 115 */ 116 CONF_SG_ACL_BT_SLAVE_MIN_BR, 117 CONF_SG_ACL_BT_SLAVE_MAX_BR, 118 119 /* 120 * Configure the min and max time BT gains the antenna 121 * in WLAN / BT master EDR 122 * 123 * Range: 0 - 255 (ms) 124 */ 125 CONF_SG_ACL_BT_MASTER_MIN_EDR, 126 CONF_SG_ACL_BT_MASTER_MAX_EDR, 127 128 /* 129 * Configure the min and max time BT gains the antenna 130 * in WLAN / BT slave EDR 131 * 132 * Range: 0 - 255 (ms) 133 */ 134 CONF_SG_ACL_BT_SLAVE_MIN_EDR, 135 CONF_SG_ACL_BT_SLAVE_MAX_EDR, 136 137 /* 138 * The maximum time WLAN can gain the antenna 139 * in WLAN PSM / BT master/slave BR 140 * 141 * Range: 0 - 255 (ms) 142 */ 143 CONF_SG_ACL_WLAN_PS_MASTER_BR, 144 CONF_SG_ACL_WLAN_PS_SLAVE_BR, 145 146 /* 147 * The maximum time WLAN can gain the antenna 148 * in WLAN PSM / BT master/slave EDR 149 * 150 * Range: 0 - 255 (ms) 151 */ 152 CONF_SG_ACL_WLAN_PS_MASTER_EDR, 153 CONF_SG_ACL_WLAN_PS_SLAVE_EDR, 154 155 /* TODO: explain these values */ 156 CONF_SG_ACL_WLAN_ACTIVE_MASTER_MIN_BR, 157 CONF_SG_ACL_WLAN_ACTIVE_MASTER_MAX_BR, 158 CONF_SG_ACL_WLAN_ACTIVE_SLAVE_MIN_BR, 159 CONF_SG_ACL_WLAN_ACTIVE_SLAVE_MAX_BR, 160 CONF_SG_ACL_WLAN_ACTIVE_MASTER_MIN_EDR, 161 CONF_SG_ACL_WLAN_ACTIVE_MASTER_MAX_EDR, 162 CONF_SG_ACL_WLAN_ACTIVE_SLAVE_MIN_EDR, 163 CONF_SG_ACL_WLAN_ACTIVE_SLAVE_MAX_EDR, 164 165 CONF_SG_ACL_ACTIVE_SCAN_WLAN_BR, 166 CONF_SG_ACL_ACTIVE_SCAN_WLAN_EDR, 167 CONF_SG_ACL_PASSIVE_SCAN_BT_BR, 168 CONF_SG_ACL_PASSIVE_SCAN_WLAN_BR, 169 CONF_SG_ACL_PASSIVE_SCAN_BT_EDR, 170 CONF_SG_ACL_PASSIVE_SCAN_WLAN_EDR, 171 172 /* 173 * Compensation percentage of probe requests when scan initiated 174 * during BT voice/ACL link. 175 * 176 * Range: 0 - 255 (%) 177 */ 178 CONF_SG_AUTO_SCAN_PROBE_REQ, 179 180 /* 181 * Compensation percentage of probe requests when active scan initiated 182 * during BT voice 183 * 184 * Range: 0 - 255 (%) 185 */ 186 CONF_SG_ACTIVE_SCAN_DURATION_FACTOR_HV3, 187 188 /* 189 * Compensation percentage of WLAN active scan window if initiated 190 * during BT A2DP 191 * 192 * Range: 0 - 1000 (%) 193 */ 194 CONF_SG_ACTIVE_SCAN_DURATION_FACTOR_A2DP, 195 196 /* 197 * Compensation percentage of WLAN passive scan window if initiated 198 * during BT A2DP BR 199 * 200 * Range: 0 - 1000 (%) 201 */ 202 CONF_SG_PASSIVE_SCAN_DURATION_FACTOR_A2DP_BR, 203 204 /* 205 * Compensation percentage of WLAN passive scan window if initiated 206 * during BT A2DP EDR 207 * 208 * Range: 0 - 1000 (%) 209 */ 210 CONF_SG_PASSIVE_SCAN_DURATION_FACTOR_A2DP_EDR, 211 212 /* 213 * Compensation percentage of WLAN passive scan window if initiated 214 * during BT voice 215 * 216 * Range: 0 - 1000 (%) 217 */ 218 CONF_SG_PASSIVE_SCAN_DURATION_FACTOR_HV3, 219 220 /* TODO: explain these values */ 221 CONF_SG_CONSECUTIVE_HV3_IN_PASSIVE_SCAN, 222 CONF_SG_BCN_HV3_COLLISION_THRESH_IN_PASSIVE_SCAN, 223 CONF_SG_TX_RX_PROTECTION_BWIDTH_IN_PASSIVE_SCAN, 224 225 /* 226 * Defines whether the SG will force WLAN host to enter/exit PSM 227 * 228 * Range: 1 - SG can force, 0 - host handles PSM 229 */ 230 CONF_SG_STA_FORCE_PS_IN_BT_SCO, 231 232 /* 233 * Defines antenna configuration (single/dual antenna) 234 * 235 * Range: 0 - single antenna, 1 - dual antenna 236 */ 237 CONF_SG_ANTENNA_CONFIGURATION, 238 239 /* 240 * The threshold (percent) of max consecutive beacon misses before 241 * increasing priority of beacon reception. 242 * 243 * Range: 0 - 100 (%) 244 */ 245 CONF_SG_BEACON_MISS_PERCENT, 246 247 /* 248 * Protection time of the DHCP procedure. 249 * 250 * Range: 0 - 100000 (ms) 251 */ 252 CONF_SG_DHCP_TIME, 253 254 /* 255 * RX guard time before the beginning of a new BT voice frame during 256 * which no new WLAN trigger frame is transmitted. 257 * 258 * Range: 0 - 100000 (us) 259 */ 260 CONF_SG_RXT, 261 262 /* 263 * TX guard time before the beginning of a new BT voice frame during 264 * which no new WLAN frame is transmitted. 265 * 266 * Range: 0 - 100000 (us) 267 */ 268 269 CONF_SG_TXT, 270 271 /* 272 * Enable adaptive RXT/TXT algorithm. If disabled, the host values 273 * will be utilized. 274 * 275 * Range: 0 - disable, 1 - enable 276 */ 277 CONF_SG_ADAPTIVE_RXT_TXT, 278 279 /* TODO: explain this value */ 280 CONF_SG_GENERAL_USAGE_BIT_MAP, 281 282 /* 283 * Number of consecutive BT voice frames not interrupted by WLAN 284 * 285 * Range: 0 - 100 286 */ 287 CONF_SG_HV3_MAX_SERVED, 288 289 /* 290 * The used WLAN legacy service period during active BT ACL link 291 * 292 * Range: 0 - 255 (ms) 293 */ 294 CONF_SG_PS_POLL_TIMEOUT, 295 296 /* 297 * The used WLAN UPSD service period during active BT ACL link 298 * 299 * Range: 0 - 255 (ms) 300 */ 301 CONF_SG_UPSD_TIMEOUT, 302 303 CONF_SG_CONSECUTIVE_CTS_THRESHOLD, 304 CONF_SG_STA_RX_WINDOW_AFTER_DTIM, 305 CONF_SG_STA_CONNECTION_PROTECTION_TIME, 306 307 /* AP params */ 308 CONF_AP_BEACON_MISS_TX, 309 CONF_AP_RX_WINDOW_AFTER_BEACON, 310 CONF_AP_BEACON_WINDOW_INTERVAL, 311 CONF_AP_CONNECTION_PROTECTION_TIME, 312 CONF_AP_BT_ACL_VAL_BT_SERVE_TIME, 313 CONF_AP_BT_ACL_VAL_WL_SERVE_TIME, 314 315 CONF_SG_TEMP_PARAM_1, 316 CONF_SG_TEMP_PARAM_2, 317 CONF_SG_TEMP_PARAM_3, 318 CONF_SG_TEMP_PARAM_4, 319 CONF_SG_TEMP_PARAM_5, 320 CONF_SG_TEMP_PARAM_6, 321 CONF_SG_TEMP_PARAM_7, 322 CONF_SG_TEMP_PARAM_8, 323 CONF_SG_TEMP_PARAM_9, 324 CONF_SG_TEMP_PARAM_10, 325 326 CONF_SG_PARAMS_MAX, 327 CONF_SG_PARAMS_ALL = 0xff 328 }; 329 330 struct conf_sg_settings { 331 u32 params[CONF_SG_PARAMS_MAX]; 332 u8 state; 333 }; 334 335 enum conf_rx_queue_type { 336 CONF_RX_QUEUE_TYPE_LOW_PRIORITY, /* All except the high priority */ 337 CONF_RX_QUEUE_TYPE_HIGH_PRIORITY, /* Management and voice packets */ 338 }; 339 340 struct conf_rx_settings { 341 /* 342 * The maximum amount of time, in TU, before the 343 * firmware discards the MSDU. 344 * 345 * Range: 0 - 0xFFFFFFFF 346 */ 347 u32 rx_msdu_life_time; 348 349 /* 350 * Packet detection threshold in the PHY. 351 * 352 * FIXME: details unknown. 353 */ 354 u32 packet_detection_threshold; 355 356 /* 357 * The longest time the STA will wait to receive traffic from the AP 358 * after a PS-poll has been transmitted. 359 * 360 * Range: 0 - 200000 361 */ 362 u16 ps_poll_timeout; 363 /* 364 * The longest time the STA will wait to receive traffic from the AP 365 * after a frame has been sent from an UPSD enabled queue. 366 * 367 * Range: 0 - 200000 368 */ 369 u16 upsd_timeout; 370 371 /* 372 * The number of octets in an MPDU, below which an RTS/CTS 373 * handshake is not performed. 374 * 375 * Range: 0 - 4096 376 */ 377 u16 rts_threshold; 378 379 /* 380 * The RX Clear Channel Assessment threshold in the PHY 381 * (the energy threshold). 382 * 383 * Range: ENABLE_ENERGY_D == 0x140A 384 * DISABLE_ENERGY_D == 0xFFEF 385 */ 386 u16 rx_cca_threshold; 387 388 /* 389 * Occupied Rx mem-blocks number which requires interrupting the host 390 * (0 = no buffering, 0xffff = disabled). 391 * 392 * Range: u16 393 */ 394 u16 irq_blk_threshold; 395 396 /* 397 * Rx packets number which requires interrupting the host 398 * (0 = no buffering). 399 * 400 * Range: u16 401 */ 402 u16 irq_pkt_threshold; 403 404 /* 405 * Max time in msec the FW may delay RX-Complete interrupt. 406 * 407 * Range: 1 - 100 408 */ 409 u16 irq_timeout; 410 411 /* 412 * The RX queue type. 413 * 414 * Range: RX_QUEUE_TYPE_RX_LOW_PRIORITY, RX_QUEUE_TYPE_RX_HIGH_PRIORITY, 415 */ 416 u8 queue_type; 417 }; 418 419 #define CONF_TX_MAX_RATE_CLASSES 10 420 421 #define CONF_TX_RATE_MASK_UNSPECIFIED 0 422 #define CONF_TX_RATE_MASK_BASIC (CONF_HW_BIT_RATE_1MBPS | \ 423 CONF_HW_BIT_RATE_2MBPS) 424 #define CONF_TX_RATE_RETRY_LIMIT 10 425 426 /* basic rates for p2p operations (probe req/resp, etc.) */ 427 #define CONF_TX_RATE_MASK_BASIC_P2P (CONF_HW_BIT_RATE_6MBPS | \ 428 CONF_HW_BIT_RATE_12MBPS | CONF_HW_BIT_RATE_24MBPS) 429 430 /* 431 * Rates supported for data packets when operating as AP. Note the absence 432 * of the 22Mbps rate. There is a FW limitation on 12 rates so we must drop 433 * one. The rate dropped is not mandatory under any operating mode. 434 */ 435 #define CONF_TX_AP_ENABLED_RATES (CONF_HW_BIT_RATE_1MBPS | \ 436 CONF_HW_BIT_RATE_2MBPS | CONF_HW_BIT_RATE_5_5MBPS | \ 437 CONF_HW_BIT_RATE_6MBPS | CONF_HW_BIT_RATE_9MBPS | \ 438 CONF_HW_BIT_RATE_11MBPS | CONF_HW_BIT_RATE_12MBPS | \ 439 CONF_HW_BIT_RATE_18MBPS | CONF_HW_BIT_RATE_24MBPS | \ 440 CONF_HW_BIT_RATE_36MBPS | CONF_HW_BIT_RATE_48MBPS | \ 441 CONF_HW_BIT_RATE_54MBPS) 442 443 #define CONF_TX_CCK_RATES (CONF_HW_BIT_RATE_1MBPS | \ 444 CONF_HW_BIT_RATE_2MBPS | CONF_HW_BIT_RATE_5_5MBPS | \ 445 CONF_HW_BIT_RATE_11MBPS) 446 447 #define CONF_TX_OFDM_RATES (CONF_HW_BIT_RATE_6MBPS | \ 448 CONF_HW_BIT_RATE_12MBPS | CONF_HW_BIT_RATE_24MBPS | \ 449 CONF_HW_BIT_RATE_36MBPS | CONF_HW_BIT_RATE_48MBPS | \ 450 CONF_HW_BIT_RATE_54MBPS) 451 452 #define CONF_TX_MCS_RATES (CONF_HW_BIT_RATE_MCS_0 | \ 453 CONF_HW_BIT_RATE_MCS_1 | CONF_HW_BIT_RATE_MCS_2 | \ 454 CONF_HW_BIT_RATE_MCS_3 | CONF_HW_BIT_RATE_MCS_4 | \ 455 CONF_HW_BIT_RATE_MCS_5 | CONF_HW_BIT_RATE_MCS_6 | \ 456 CONF_HW_BIT_RATE_MCS_7) 457 458 /* 459 * Default rates for management traffic when operating in AP mode. This 460 * should be configured according to the basic rate set of the AP 461 */ 462 #define CONF_TX_AP_DEFAULT_MGMT_RATES (CONF_HW_BIT_RATE_1MBPS | \ 463 CONF_HW_BIT_RATE_2MBPS | CONF_HW_BIT_RATE_5_5MBPS) 464 465 /* default rates for working as IBSS (11b and OFDM) */ 466 #define CONF_TX_IBSS_DEFAULT_RATES (CONF_HW_BIT_RATE_1MBPS | \ 467 CONF_HW_BIT_RATE_2MBPS | CONF_HW_BIT_RATE_5_5MBPS | \ 468 CONF_HW_BIT_RATE_11MBPS | CONF_TX_OFDM_RATES); 469 470 struct conf_tx_rate_class { 471 472 /* 473 * The rates enabled for this rate class. 474 * 475 * Range: CONF_HW_BIT_RATE_* bit mask 476 */ 477 u32 enabled_rates; 478 479 /* 480 * The dot11 short retry limit used for TX retries. 481 * 482 * Range: u8 483 */ 484 u8 short_retry_limit; 485 486 /* 487 * The dot11 long retry limit used for TX retries. 488 * 489 * Range: u8 490 */ 491 u8 long_retry_limit; 492 493 /* 494 * Flags controlling the attributes of TX transmission. 495 * 496 * Range: bit 0: Truncate - when set, FW attempts to send a frame stop 497 * when the total valid per-rate attempts have 498 * been exhausted; otherwise transmissions 499 * will continue at the lowest available rate 500 * until the appropriate one of the 501 * short_retry_limit, long_retry_limit, 502 * dot11_max_transmit_msdu_life_time, or 503 * max_tx_life_time, is exhausted. 504 * 1: Preamble Override - indicates if the preamble type 505 * should be used in TX. 506 * 2: Preamble Type - the type of the preamble to be used by 507 * the policy (0 - long preamble, 1 - short preamble. 508 */ 509 u8 aflags; 510 }; 511 512 #define CONF_TX_MAX_AC_COUNT 4 513 514 /* Slot number setting to start transmission at PIFS interval */ 515 #define CONF_TX_AIFS_PIFS 1 516 /* Slot number setting to start transmission at DIFS interval normal 517 * DCF access */ 518 #define CONF_TX_AIFS_DIFS 2 519 520 521 enum conf_tx_ac { 522 CONF_TX_AC_BE = 0, /* best effort / legacy */ 523 CONF_TX_AC_BK = 1, /* background */ 524 CONF_TX_AC_VI = 2, /* video */ 525 CONF_TX_AC_VO = 3, /* voice */ 526 CONF_TX_AC_CTS2SELF = 4, /* fictitious AC, follows AC_VO */ 527 CONF_TX_AC_ANY_TID = 0x1f 528 }; 529 530 struct conf_tx_ac_category { 531 /* 532 * The AC class identifier. 533 * 534 * Range: enum conf_tx_ac 535 */ 536 u8 ac; 537 538 /* 539 * The contention window minimum size (in slots) for the access 540 * class. 541 * 542 * Range: u8 543 */ 544 u8 cw_min; 545 546 /* 547 * The contention window maximum size (in slots) for the access 548 * class. 549 * 550 * Range: u8 551 */ 552 u16 cw_max; 553 554 /* 555 * The AIF value (in slots) for the access class. 556 * 557 * Range: u8 558 */ 559 u8 aifsn; 560 561 /* 562 * The TX Op Limit (in microseconds) for the access class. 563 * 564 * Range: u16 565 */ 566 u16 tx_op_limit; 567 }; 568 569 #define CONF_TX_MAX_TID_COUNT 8 570 571 /* Allow TX BA on all TIDs but 6,7. These are currently reserved in the FW */ 572 #define CONF_TX_BA_ENABLED_TID_BITMAP 0x3F 573 574 enum { 575 CONF_CHANNEL_TYPE_DCF = 0, /* DC/LEGACY*/ 576 CONF_CHANNEL_TYPE_EDCF = 1, /* EDCA*/ 577 CONF_CHANNEL_TYPE_HCCA = 2, /* HCCA*/ 578 }; 579 580 enum { 581 CONF_PS_SCHEME_LEGACY = 0, 582 CONF_PS_SCHEME_UPSD_TRIGGER = 1, 583 CONF_PS_SCHEME_LEGACY_PSPOLL = 2, 584 CONF_PS_SCHEME_SAPSD = 3, 585 }; 586 587 enum { 588 CONF_ACK_POLICY_LEGACY = 0, 589 CONF_ACK_POLICY_NO_ACK = 1, 590 CONF_ACK_POLICY_BLOCK = 2, 591 }; 592 593 594 struct conf_tx_tid { 595 u8 queue_id; 596 u8 channel_type; 597 u8 tsid; 598 u8 ps_scheme; 599 u8 ack_policy; 600 u32 apsd_conf[2]; 601 }; 602 603 struct conf_tx_settings { 604 /* 605 * The TX ED value for TELEC Enable/Disable. 606 * 607 * Range: 0, 1 608 */ 609 u8 tx_energy_detection; 610 611 /* 612 * Configuration for rate classes for TX (currently only one 613 * rate class supported). Used in non-AP mode. 614 */ 615 struct conf_tx_rate_class sta_rc_conf; 616 617 /* 618 * Configuration for access categories for TX rate control. 619 */ 620 u8 ac_conf_count; 621 struct conf_tx_ac_category ac_conf[CONF_TX_MAX_AC_COUNT]; 622 623 /* 624 * AP-mode - allow this number of TX retries to a station before an 625 * event is triggered from FW. 626 * In AP-mode the hlids of unreachable stations are given in the 627 * "sta_tx_retry_exceeded" member in the event mailbox. 628 */ 629 u8 max_tx_retries; 630 631 /* 632 * AP-mode - after this number of seconds a connected station is 633 * considered inactive. 634 */ 635 u16 ap_aging_period; 636 637 /* 638 * Configuration for TID parameters. 639 */ 640 u8 tid_conf_count; 641 struct conf_tx_tid tid_conf[CONF_TX_MAX_TID_COUNT]; 642 643 /* 644 * The TX fragmentation threshold. 645 * 646 * Range: u16 647 */ 648 u16 frag_threshold; 649 650 /* 651 * Max time in msec the FW may delay frame TX-Complete interrupt. 652 * 653 * Range: u16 654 */ 655 u16 tx_compl_timeout; 656 657 /* 658 * Completed TX packet count which requires to issue the TX-Complete 659 * interrupt. 660 * 661 * Range: u16 662 */ 663 u16 tx_compl_threshold; 664 665 /* 666 * The rate used for control messages and scanning on the 2.4GHz band 667 * 668 * Range: CONF_HW_BIT_RATE_* bit mask 669 */ 670 u32 basic_rate; 671 672 /* 673 * The rate used for control messages and scanning on the 5GHz band 674 * 675 * Range: CONF_HW_BIT_RATE_* bit mask 676 */ 677 u32 basic_rate_5; 678 679 /* 680 * TX retry limits for templates 681 */ 682 u8 tmpl_short_retry_limit; 683 u8 tmpl_long_retry_limit; 684 }; 685 686 enum { 687 CONF_WAKE_UP_EVENT_BEACON = 0x01, /* Wake on every Beacon*/ 688 CONF_WAKE_UP_EVENT_DTIM = 0x02, /* Wake on every DTIM*/ 689 CONF_WAKE_UP_EVENT_N_DTIM = 0x04, /* Wake every Nth DTIM */ 690 CONF_WAKE_UP_EVENT_N_BEACONS = 0x08, /* Wake every Nth beacon */ 691 CONF_WAKE_UP_EVENT_BITS_MASK = 0x0F 692 }; 693 694 #define CONF_MAX_BCN_FILT_IE_COUNT 32 695 696 #define CONF_BCN_RULE_PASS_ON_CHANGE BIT(0) 697 #define CONF_BCN_RULE_PASS_ON_APPEARANCE BIT(1) 698 699 #define CONF_BCN_IE_OUI_LEN 3 700 #define CONF_BCN_IE_VER_LEN 2 701 702 struct conf_bcn_filt_rule { 703 /* 704 * IE number to which to associate a rule. 705 * 706 * Range: u8 707 */ 708 u8 ie; 709 710 /* 711 * Rule to associate with the specific ie. 712 * 713 * Range: CONF_BCN_RULE_PASS_ON_* 714 */ 715 u8 rule; 716 717 /* 718 * OUI for the vendor specifie IE (221) 719 */ 720 u8 oui[CONF_BCN_IE_OUI_LEN]; 721 722 /* 723 * Type for the vendor specifie IE (221) 724 */ 725 u8 type; 726 727 /* 728 * Version for the vendor specifie IE (221) 729 */ 730 u8 version[CONF_BCN_IE_VER_LEN]; 731 }; 732 733 #define CONF_MAX_RSSI_SNR_TRIGGERS 8 734 735 enum { 736 CONF_TRIG_METRIC_RSSI_BEACON = 0, 737 CONF_TRIG_METRIC_RSSI_DATA, 738 CONF_TRIG_METRIC_SNR_BEACON, 739 CONF_TRIG_METRIC_SNR_DATA 740 }; 741 742 enum { 743 CONF_TRIG_EVENT_TYPE_LEVEL = 0, 744 CONF_TRIG_EVENT_TYPE_EDGE 745 }; 746 747 enum { 748 CONF_TRIG_EVENT_DIR_LOW = 0, 749 CONF_TRIG_EVENT_DIR_HIGH, 750 CONF_TRIG_EVENT_DIR_BIDIR 751 }; 752 753 struct conf_sig_weights { 754 755 /* 756 * RSSI from beacons average weight. 757 * 758 * Range: u8 759 */ 760 u8 rssi_bcn_avg_weight; 761 762 /* 763 * RSSI from data average weight. 764 * 765 * Range: u8 766 */ 767 u8 rssi_pkt_avg_weight; 768 769 /* 770 * SNR from beacons average weight. 771 * 772 * Range: u8 773 */ 774 u8 snr_bcn_avg_weight; 775 776 /* 777 * SNR from data average weight. 778 * 779 * Range: u8 780 */ 781 u8 snr_pkt_avg_weight; 782 }; 783 784 enum conf_bcn_filt_mode { 785 CONF_BCN_FILT_MODE_DISABLED = 0, 786 CONF_BCN_FILT_MODE_ENABLED = 1 787 }; 788 789 enum conf_bet_mode { 790 CONF_BET_MODE_DISABLE = 0, 791 CONF_BET_MODE_ENABLE = 1, 792 }; 793 794 struct conf_conn_settings { 795 /* 796 * Firmware wakeup conditions configuration. The host may set only 797 * one bit. 798 * 799 * Range: CONF_WAKE_UP_EVENT_* 800 */ 801 u8 wake_up_event; 802 803 /* 804 * Listen interval for beacons or Dtims. 805 * 806 * Range: 0 for beacon and Dtim wakeup 807 * 1-10 for x Dtims 808 * 1-255 for x beacons 809 */ 810 u8 listen_interval; 811 812 /* 813 * Enable or disable the beacon filtering. 814 * 815 * Range: CONF_BCN_FILT_MODE_* 816 */ 817 enum conf_bcn_filt_mode bcn_filt_mode; 818 819 /* 820 * Configure Beacon filter pass-thru rules. 821 */ 822 u8 bcn_filt_ie_count; 823 struct conf_bcn_filt_rule bcn_filt_ie[CONF_MAX_BCN_FILT_IE_COUNT]; 824 825 /* 826 * The number of consecutive beacons to lose, before the firmware 827 * becomes out of synch. 828 * 829 * Range: u32 830 */ 831 u32 synch_fail_thold; 832 833 /* 834 * After out-of-synch, the number of TU's to wait without a further 835 * received beacon (or probe response) before issuing the BSS_EVENT_LOSE 836 * event. 837 * 838 * Range: u32 839 */ 840 u32 bss_lose_timeout; 841 842 /* 843 * Beacon receive timeout. 844 * 845 * Range: u32 846 */ 847 u32 beacon_rx_timeout; 848 849 /* 850 * Broadcast receive timeout. 851 * 852 * Range: u32 853 */ 854 u32 broadcast_timeout; 855 856 /* 857 * Enable/disable reception of broadcast packets in power save mode 858 * 859 * Range: 1 - enable, 0 - disable 860 */ 861 u8 rx_broadcast_in_ps; 862 863 /* 864 * Consecutive PS Poll failures before sending event to driver 865 * 866 * Range: u8 867 */ 868 u8 ps_poll_threshold; 869 870 /* 871 * PS Poll failure recovery ACTIVE period length 872 * 873 * Range: u32 (ms) 874 */ 875 u32 ps_poll_recovery_period; 876 877 /* 878 * Configuration of signal average weights. 879 */ 880 struct conf_sig_weights sig_weights; 881 882 /* 883 * Specifies if beacon early termination procedure is enabled or 884 * disabled. 885 * 886 * Range: CONF_BET_MODE_* 887 */ 888 u8 bet_enable; 889 890 /* 891 * Specifies the maximum number of consecutive beacons that may be 892 * early terminated. After this number is reached at least one full 893 * beacon must be correctly received in FW before beacon ET 894 * resumes. 895 * 896 * Range 0 - 255 897 */ 898 u8 bet_max_consecutive; 899 900 /* 901 * Specifies the maximum number of times to try PSM entry if it fails 902 * (if sending the appropriate null-func message fails.) 903 * 904 * Range 0 - 255 905 */ 906 u8 psm_entry_retries; 907 908 /* 909 * Specifies the maximum number of times to try PSM exit if it fails 910 * (if sending the appropriate null-func message fails.) 911 * 912 * Range 0 - 255 913 */ 914 u8 psm_exit_retries; 915 916 /* 917 * Specifies the maximum number of times to try transmit the PSM entry 918 * null-func frame for each PSM entry attempt 919 * 920 * Range 0 - 255 921 */ 922 u8 psm_entry_nullfunc_retries; 923 924 /* 925 * 926 * Specifies the interval of the connection keep-alive null-func 927 * frame in ms. 928 * 929 * Range: 1000 - 3600000 930 */ 931 u32 keep_alive_interval; 932 933 /* 934 * Maximum listen interval supported by the driver in units of beacons. 935 * 936 * Range: u16 937 */ 938 u8 max_listen_interval; 939 }; 940 941 enum { 942 CONF_REF_CLK_19_2_E, 943 CONF_REF_CLK_26_E, 944 CONF_REF_CLK_38_4_E, 945 CONF_REF_CLK_52_E, 946 CONF_REF_CLK_38_4_M_XTAL, 947 CONF_REF_CLK_26_M_XTAL, 948 }; 949 950 enum single_dual_band_enum { 951 CONF_SINGLE_BAND, 952 CONF_DUAL_BAND 953 }; 954 955 #define CONF_RSSI_AND_PROCESS_COMPENSATION_SIZE 15 956 #define CONF_NUMBER_OF_SUB_BANDS_5 7 957 #define CONF_NUMBER_OF_RATE_GROUPS 6 958 #define CONF_NUMBER_OF_CHANNELS_2_4 14 959 #define CONF_NUMBER_OF_CHANNELS_5 35 960 961 struct conf_itrim_settings { 962 /* enable dco itrim */ 963 u8 enable; 964 965 /* moderation timeout in microsecs from the last TX */ 966 u32 timeout; 967 }; 968 969 struct conf_pm_config_settings { 970 /* 971 * Host clock settling time 972 * 973 * Range: 0 - 30000 us 974 */ 975 u32 host_clk_settling_time; 976 977 /* 978 * Host fast wakeup support 979 * 980 * Range: true, false 981 */ 982 bool host_fast_wakeup_support; 983 }; 984 985 struct conf_roam_trigger_settings { 986 /* 987 * The minimum interval between two trigger events. 988 * 989 * Range: 0 - 60000 ms 990 */ 991 u16 trigger_pacing; 992 993 /* 994 * The weight for rssi/beacon average calculation 995 * 996 * Range: 0 - 255 997 */ 998 u8 avg_weight_rssi_beacon; 999 1000 /* 1001 * The weight for rssi/data frame average calculation 1002 * 1003 * Range: 0 - 255 1004 */ 1005 u8 avg_weight_rssi_data; 1006 1007 /* 1008 * The weight for snr/beacon average calculation 1009 * 1010 * Range: 0 - 255 1011 */ 1012 u8 avg_weight_snr_beacon; 1013 1014 /* 1015 * The weight for snr/data frame average calculation 1016 * 1017 * Range: 0 - 255 1018 */ 1019 u8 avg_weight_snr_data; 1020 }; 1021 1022 struct conf_scan_settings { 1023 /* 1024 * The minimum time to wait on each channel for active scans 1025 * 1026 * Range: u32 tu/1000 1027 */ 1028 u32 min_dwell_time_active; 1029 1030 /* 1031 * The maximum time to wait on each channel for active scans 1032 * 1033 * Range: u32 tu/1000 1034 */ 1035 u32 max_dwell_time_active; 1036 1037 /* 1038 * The minimum time to wait on each channel for passive scans 1039 * 1040 * Range: u32 tu/1000 1041 */ 1042 u32 min_dwell_time_passive; 1043 1044 /* 1045 * The maximum time to wait on each channel for passive scans 1046 * 1047 * Range: u32 tu/1000 1048 */ 1049 u32 max_dwell_time_passive; 1050 1051 /* 1052 * Number of probe requests to transmit on each active scan channel 1053 * 1054 * Range: u8 1055 */ 1056 u16 num_probe_reqs; 1057 1058 }; 1059 1060 struct conf_sched_scan_settings { 1061 /* minimum time to wait on the channel for active scans (in TUs) */ 1062 u16 min_dwell_time_active; 1063 1064 /* maximum time to wait on the channel for active scans (in TUs) */ 1065 u16 max_dwell_time_active; 1066 1067 /* time to wait on the channel for passive scans (in TUs) */ 1068 u32 dwell_time_passive; 1069 1070 /* time to wait on the channel for DFS scans (in TUs) */ 1071 u32 dwell_time_dfs; 1072 1073 /* number of probe requests to send on each channel in active scans */ 1074 u8 num_probe_reqs; 1075 1076 /* RSSI threshold to be used for filtering */ 1077 s8 rssi_threshold; 1078 1079 /* SNR threshold to be used for filtering */ 1080 s8 snr_threshold; 1081 }; 1082 1083 /* these are number of channels on the band divided by two, rounded up */ 1084 #define CONF_TX_PWR_COMPENSATION_LEN_2 7 1085 #define CONF_TX_PWR_COMPENSATION_LEN_5 18 1086 1087 struct conf_rf_settings { 1088 /* 1089 * Per channel power compensation for 2.4GHz 1090 * 1091 * Range: s8 1092 */ 1093 u8 tx_per_channel_power_compensation_2[CONF_TX_PWR_COMPENSATION_LEN_2]; 1094 1095 /* 1096 * Per channel power compensation for 5GHz 1097 * 1098 * Range: s8 1099 */ 1100 u8 tx_per_channel_power_compensation_5[CONF_TX_PWR_COMPENSATION_LEN_5]; 1101 }; 1102 1103 struct conf_ht_setting { 1104 u8 rx_ba_win_size; 1105 u8 tx_ba_win_size; 1106 u16 inactivity_timeout; 1107 1108 /* bitmap of enabled TIDs for TX BA sessions */ 1109 u8 tx_ba_tid_bitmap; 1110 }; 1111 1112 struct conf_memory_settings { 1113 /* Number of stations supported in IBSS mode */ 1114 u8 num_stations; 1115 1116 /* Number of ssid profiles used in IBSS mode */ 1117 u8 ssid_profiles; 1118 1119 /* Number of memory buffers allocated to rx pool */ 1120 u8 rx_block_num; 1121 1122 /* Minimum number of blocks allocated to tx pool */ 1123 u8 tx_min_block_num; 1124 1125 /* Disable/Enable dynamic memory */ 1126 u8 dynamic_memory; 1127 1128 /* 1129 * Minimum required free tx memory blocks in order to assure optimum 1130 * performance 1131 * 1132 * Range: 0-120 1133 */ 1134 u8 min_req_tx_blocks; 1135 1136 /* 1137 * Minimum required free rx memory blocks in order to assure optimum 1138 * performance 1139 * 1140 * Range: 0-120 1141 */ 1142 u8 min_req_rx_blocks; 1143 1144 /* 1145 * Minimum number of mem blocks (free+used) guaranteed for TX 1146 * 1147 * Range: 0-120 1148 */ 1149 u8 tx_min; 1150 }; 1151 1152 struct conf_fm_coex { 1153 u8 enable; 1154 u8 swallow_period; 1155 u8 n_divider_fref_set_1; 1156 u8 n_divider_fref_set_2; 1157 u16 m_divider_fref_set_1; 1158 u16 m_divider_fref_set_2; 1159 u32 coex_pll_stabilization_time; 1160 u16 ldo_stabilization_time; 1161 u8 fm_disturbed_band_margin; 1162 u8 swallow_clk_diff; 1163 }; 1164 1165 struct conf_rx_streaming_settings { 1166 /* 1167 * RX Streaming duration (in msec) from last tx/rx 1168 * 1169 * Range: u32 1170 */ 1171 u32 duration; 1172 1173 /* 1174 * Bitmap of tids to be polled during RX streaming. 1175 * (Note: it doesn't look like it really matters) 1176 * 1177 * Range: 0x1-0xff 1178 */ 1179 u8 queues; 1180 1181 /* 1182 * RX Streaming interval. 1183 * (Note:this value is also used as the rx streaming timeout) 1184 * Range: 0 (disabled), 10 - 100 1185 */ 1186 u8 interval; 1187 1188 /* 1189 * enable rx streaming also when there is no coex activity 1190 */ 1191 u8 always; 1192 }; 1193 1194 struct conf_fwlog { 1195 /* Continuous or on-demand */ 1196 u8 mode; 1197 1198 /* 1199 * Number of memory blocks dedicated for the FW logger 1200 * 1201 * Range: 1-3, or 0 to disable the FW logger 1202 */ 1203 u8 mem_blocks; 1204 1205 /* Minimum log level threshold */ 1206 u8 severity; 1207 1208 /* Include/exclude timestamps from the log messages */ 1209 u8 timestamp; 1210 1211 /* See enum wl1271_fwlogger_output */ 1212 u8 output; 1213 1214 /* Regulates the frequency of log messages */ 1215 u8 threshold; 1216 }; 1217 1218 #define ACX_RATE_MGMT_NUM_OF_RATES 13 1219 struct conf_rate_policy_settings { 1220 u16 rate_retry_score; 1221 u16 per_add; 1222 u16 per_th1; 1223 u16 per_th2; 1224 u16 max_per; 1225 u8 inverse_curiosity_factor; 1226 u8 tx_fail_low_th; 1227 u8 tx_fail_high_th; 1228 u8 per_alpha_shift; 1229 u8 per_add_shift; 1230 u8 per_beta1_shift; 1231 u8 per_beta2_shift; 1232 u8 rate_check_up; 1233 u8 rate_check_down; 1234 u8 rate_retry_policy[ACX_RATE_MGMT_NUM_OF_RATES]; 1235 }; 1236 1237 struct conf_hangover_settings { 1238 u32 recover_time; 1239 u8 hangover_period; 1240 u8 dynamic_mode; 1241 u8 early_termination_mode; 1242 u8 max_period; 1243 u8 min_period; 1244 u8 increase_delta; 1245 u8 decrease_delta; 1246 u8 quiet_time; 1247 u8 increase_time; 1248 u8 window_size; 1249 }; 1250 1251 struct conf_drv_settings { 1252 struct conf_sg_settings sg; 1253 struct conf_rx_settings rx; 1254 struct conf_tx_settings tx; 1255 struct conf_conn_settings conn; 1256 struct conf_itrim_settings itrim; 1257 struct conf_pm_config_settings pm_config; 1258 struct conf_roam_trigger_settings roam_trigger; 1259 struct conf_scan_settings scan; 1260 struct conf_sched_scan_settings sched_scan; 1261 struct conf_rf_settings rf; 1262 struct conf_ht_setting ht; 1263 struct conf_memory_settings mem_wl127x; 1264 struct conf_memory_settings mem_wl128x; 1265 struct conf_fm_coex fm_coex; 1266 struct conf_rx_streaming_settings rx_streaming; 1267 struct conf_fwlog fwlog; 1268 struct conf_rate_policy_settings rate; 1269 struct conf_hangover_settings hangover; 1270 u8 hci_io_ds; 1271 }; 1272 1273 #endif 1274