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