1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /****************************************************************************** 3 * 4 * Copyright(c) 2016 - 2017 Realtek Corporation. 5 * 6 * This program is free software; you can redistribute it and/or modify it 7 * under the terms of version 2 of the GNU General Public License as 8 * published by the Free Software Foundation. 9 * 10 * This program is distributed in the hope that it will be useful, but WITHOUT 11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 13 * more details. 14 * 15 *****************************************************************************/ 16 #ifndef __HALBTC_OUT_SRC_H__ 17 #define __HALBTC_OUT_SRC_H__ 18 19 enum { 20 BTC_CCK_1, 21 BTC_CCK_2, 22 BTC_CCK_5_5, 23 BTC_CCK_11, 24 BTC_OFDM_6, 25 BTC_OFDM_9, 26 BTC_OFDM_12, 27 BTC_OFDM_18, 28 BTC_OFDM_24, 29 BTC_OFDM_36, 30 BTC_OFDM_48, 31 BTC_OFDM_54, 32 BTC_MCS_0, 33 BTC_MCS_1, 34 BTC_MCS_2, 35 BTC_MCS_3, 36 BTC_MCS_4, 37 BTC_MCS_5, 38 BTC_MCS_6, 39 BTC_MCS_7, 40 BTC_MCS_8, 41 BTC_MCS_9, 42 BTC_MCS_10, 43 BTC_MCS_11, 44 BTC_MCS_12, 45 BTC_MCS_13, 46 BTC_MCS_14, 47 BTC_MCS_15, 48 BTC_MCS_16, 49 BTC_MCS_17, 50 BTC_MCS_18, 51 BTC_MCS_19, 52 BTC_MCS_20, 53 BTC_MCS_21, 54 BTC_MCS_22, 55 BTC_MCS_23, 56 BTC_MCS_24, 57 BTC_MCS_25, 58 BTC_MCS_26, 59 BTC_MCS_27, 60 BTC_MCS_28, 61 BTC_MCS_29, 62 BTC_MCS_30, 63 BTC_MCS_31, 64 BTC_VHT_1SS_MCS_0, 65 BTC_VHT_1SS_MCS_1, 66 BTC_VHT_1SS_MCS_2, 67 BTC_VHT_1SS_MCS_3, 68 BTC_VHT_1SS_MCS_4, 69 BTC_VHT_1SS_MCS_5, 70 BTC_VHT_1SS_MCS_6, 71 BTC_VHT_1SS_MCS_7, 72 BTC_VHT_1SS_MCS_8, 73 BTC_VHT_1SS_MCS_9, 74 BTC_VHT_2SS_MCS_0, 75 BTC_VHT_2SS_MCS_1, 76 BTC_VHT_2SS_MCS_2, 77 BTC_VHT_2SS_MCS_3, 78 BTC_VHT_2SS_MCS_4, 79 BTC_VHT_2SS_MCS_5, 80 BTC_VHT_2SS_MCS_6, 81 BTC_VHT_2SS_MCS_7, 82 BTC_VHT_2SS_MCS_8, 83 BTC_VHT_2SS_MCS_9, 84 BTC_VHT_3SS_MCS_0, 85 BTC_VHT_3SS_MCS_1, 86 BTC_VHT_3SS_MCS_2, 87 BTC_VHT_3SS_MCS_3, 88 BTC_VHT_3SS_MCS_4, 89 BTC_VHT_3SS_MCS_5, 90 BTC_VHT_3SS_MCS_6, 91 BTC_VHT_3SS_MCS_7, 92 BTC_VHT_3SS_MCS_8, 93 BTC_VHT_3SS_MCS_9, 94 BTC_VHT_4SS_MCS_0, 95 BTC_VHT_4SS_MCS_1, 96 BTC_VHT_4SS_MCS_2, 97 BTC_VHT_4SS_MCS_3, 98 BTC_VHT_4SS_MCS_4, 99 BTC_VHT_4SS_MCS_5, 100 BTC_VHT_4SS_MCS_6, 101 BTC_VHT_4SS_MCS_7, 102 BTC_VHT_4SS_MCS_8, 103 BTC_VHT_4SS_MCS_9, 104 BTC_MCS_32, 105 BTC_UNKNOWN, 106 BTC_PKT_MGNT, 107 BTC_PKT_CTRL, 108 BTC_PKT_UNKNOWN, 109 BTC_PKT_NOT_FOR_ME, 110 BTC_RATE_MAX 111 }; 112 113 enum { 114 BTC_MULTIPORT_SCC, 115 BTC_MULTIPORT_MCC_DUAL_CHANNEL, 116 BTC_MULTIPORT_MCC_DUAL_BAND, 117 BTC_MULTIPORT_MAX 118 }; 119 120 #define BTC_COEX_8822B_COMMON_CODE 0 121 #define BTC_COEX_OFFLOAD 0 122 #define BTC_TMP_BUF_SHORT 20 123 124 extern u1Byte gl_btc_trace_buf[]; 125 #define BTC_SPRINTF rsprintf 126 #define BTC_TRACE(_MSG_)\ 127 do {\ 128 if (GLBtcDbgType[COMP_COEX] & BIT(DBG_LOUD)) {\ 129 RTW_INFO("%s", _MSG_);\ 130 } \ 131 } while (0) 132 #define BT_PrintData(adapter, _MSG_, len, data) RTW_DBG_DUMP((_MSG_), data, len) 133 134 135 #define NORMAL_EXEC FALSE 136 #define FORCE_EXEC TRUE 137 138 #define NM_EXCU FALSE 139 #define FC_EXCU TRUE 140 141 #define BTC_RF_OFF 0x0 142 #define BTC_RF_ON 0x1 143 144 #define BTC_RF_A 0x0 145 #define BTC_RF_B 0x1 146 #define BTC_RF_C 0x2 147 #define BTC_RF_D 0x3 148 149 #define BTC_SMSP SINGLEMAC_SINGLEPHY 150 #define BTC_DMDP DUALMAC_DUALPHY 151 #define BTC_DMSP DUALMAC_SINGLEPHY 152 #define BTC_MP_UNKNOWN 0xff 153 154 #define BT_COEX_ANT_TYPE_PG 0 155 #define BT_COEX_ANT_TYPE_ANTDIV 1 156 #define BT_COEX_ANT_TYPE_DETECTED 2 157 158 #define BTC_MIMO_PS_STATIC 0 /* 1ss */ 159 #define BTC_MIMO_PS_DYNAMIC 1 /* 2ss */ 160 161 #define BTC_RATE_DISABLE 0 162 #define BTC_RATE_ENABLE 1 163 164 /* single Antenna definition */ 165 #define BTC_ANT_PATH_WIFI 0 166 #define BTC_ANT_PATH_BT 1 167 #define BTC_ANT_PATH_PTA 2 168 #define BTC_ANT_PATH_WIFI5G 3 169 #define BTC_ANT_PATH_AUTO 4 170 /* dual Antenna definition */ 171 #define BTC_ANT_WIFI_AT_MAIN 0 172 #define BTC_ANT_WIFI_AT_AUX 1 173 #define BTC_ANT_WIFI_AT_DIVERSITY 2 174 /* coupler Antenna definition */ 175 #define BTC_ANT_WIFI_AT_CPL_MAIN 0 176 #define BTC_ANT_WIFI_AT_CPL_AUX 1 177 178 /* for common code request */ 179 #define REG_LTE_IDR_COEX_CTRL 0x0038 180 #define REG_SYS_SDIO_CTRL 0x0070 181 #define REG_SYS_SDIO_CTRL3 0x0073 182 /* #define REG_RETRY_LIMIT 0x042a */ 183 /* #define REG_DARFRC 0x0430 */ 184 #define REG_DARFRCH 0x0434 185 #define REG_CCK_CHECK 0x0454 186 #define REG_AMPDU_MAX_TIME_V1 0x0455 187 #define REG_TX_HANG_CTRL 0x045E 188 #define REG_LIFETIME_EN 0x0426 189 #define REG_BT_COEX_TABLE0 0x06C0 190 #define REG_BT_COEX_TABLE1 0x06C4 191 #define REG_BT_COEX_BRK_TABLE 0x06C8 192 #define REG_BT_COEX_TABLE_H 0x06CC 193 #define REG_BT_ACT_STATISTICS 0x0770 194 #define REG_BT_ACT_STATISTICS_1 0x0774 195 #define REG_BT_STAT_CTRL 0x0778 196 197 #define BIT_EN_GNT_BT_AWAKE BIT(3) 198 #define BIT_EN_BCN_FUNCTION BIT(3) 199 #define BIT_EN_BCN_PKT_REL BIT(6) 200 #define BIT_FEN_BB_GLB_RST BIT(1) 201 #define BIT_FEN_BB_RSTB BIT(0) 202 203 #define TDMA_4SLOT BIT(8) 204 205 typedef enum _BTC_POWERSAVE_TYPE { 206 BTC_PS_WIFI_NATIVE = 0, /* wifi original power save behavior */ 207 BTC_PS_LPS_ON = 1, 208 BTC_PS_LPS_OFF = 2, 209 BTC_PS_MAX 210 } BTC_POWERSAVE_TYPE, *PBTC_POWERSAVE_TYPE; 211 212 typedef enum _BTC_BT_REG_TYPE { 213 BTC_BT_REG_RF = 0, 214 BTC_BT_REG_MODEM = 1, 215 BTC_BT_REG_BLUEWIZE = 2, 216 BTC_BT_REG_VENDOR = 3, 217 BTC_BT_REG_LE = 4, 218 BTC_BT_REG_MAX 219 } BTC_BT_REG_TYPE, *PBTC_BT_REG_TYPE; 220 221 typedef enum _BTC_CHIP_INTERFACE { 222 BTC_INTF_UNKNOWN = 0, 223 BTC_INTF_PCI = 1, 224 BTC_INTF_USB = 2, 225 BTC_INTF_SDIO = 3, 226 BTC_INTF_MAX 227 } BTC_CHIP_INTERFACE, *PBTC_CHIP_INTERFACE; 228 229 typedef enum _BTC_CHIP_TYPE { 230 BTC_CHIP_UNDEF = 0, 231 BTC_CHIP_CSR_BC4 = 1, 232 BTC_CHIP_CSR_BC8 = 2, 233 BTC_CHIP_RTL8723A = 3, 234 BTC_CHIP_RTL8821 = 4, 235 BTC_CHIP_RTL8723B = 5, 236 BTC_CHIP_RTL8822B = 6, 237 BTC_CHIP_RTL8822C = 7, 238 BTC_CHIP_RTL8821C = 8, 239 BTC_CHIP_RTL8821A = 9, 240 BTC_CHIP_RTL8723D = 10, 241 BTC_CHIP_RTL8703B = 11, 242 BTC_CHIP_RTL8725A = 12, 243 BTC_CHIP_MAX 244 } BTC_CHIP_TYPE, *PBTC_CHIP_TYPE; 245 246 /* following is for wifi link status */ 247 #define WIFI_STA_CONNECTED BIT0 248 #define WIFI_AP_CONNECTED BIT1 249 #define WIFI_HS_CONNECTED BIT2 250 #define WIFI_P2P_GO_CONNECTED BIT3 251 #define WIFI_P2P_GC_CONNECTED BIT4 252 253 /* following is for command line utility */ 254 #define CL_SPRINTF rsprintf 255 #define CL_PRINTF DCMD_Printf 256 #define CL_STRNCAT(dst, dst_size, src, src_size) rstrncat(dst, src, src_size) 257 258 static const char *const glbt_info_src[] = { 259 "BT Info[wifi fw]", 260 "BT Info[bt rsp]", 261 "BT Info[bt auto report]", 262 }; 263 264 #define BTC_INFO_FTP BIT(7) 265 #define BTC_INFO_A2DP BIT(6) 266 #define BTC_INFO_HID BIT(5) 267 #define BTC_INFO_SCO_BUSY BIT(4) 268 #define BTC_INFO_ACL_BUSY BIT(3) 269 #define BTC_INFO_INQ_PAGE BIT(2) 270 #define BTC_INFO_SCO_ESCO BIT(1) 271 #define BTC_INFO_CONNECTION BIT(0) 272 273 #define BTC_BTINFO_LENGTH_MAX 10 274 275 enum btc_gnt_setup_state { 276 BTC_GNT_SET_SW_LOW = 0x0, 277 BTC_GNT_SET_SW_HIGH = 0x1, 278 BTC_GNT_SET_HW_PTA = 0x2, 279 BTC_GNT_SET_MAX 280 }; 281 282 enum btc_gnt_setup_state_2 { 283 BTC_GNT_HW_PTA = 0x0, 284 BTC_GNT_SW_LOW = 0x1, 285 BTC_GNT_SW_HIGH = 0x3, 286 BTC_GNT_MAX 287 }; 288 289 enum btc_path_ctrl_owner { 290 BTC_OWNER_BT = 0x0, 291 BTC_OWNER_WL = 0x1, 292 BTC_OWNER_MAX 293 }; 294 295 enum btc_gnt_ctrl_type { 296 BTC_GNT_CTRL_BY_PTA = 0x0, 297 BTC_GNT_CTRL_BY_SW = 0x1, 298 BTC_GNT_CTRL_MAX 299 }; 300 301 enum btc_gnt_ctrl_block { 302 BTC_GNT_BLOCK_RFC_BB = 0x0, 303 BTC_GNT_BLOCK_RFC = 0x1, 304 BTC_GNT_BLOCK_BB = 0x2, 305 BTC_GNT_BLOCK_MAX 306 }; 307 308 enum btc_lte_coex_table_type { 309 BTC_CTT_WL_VS_LTE = 0x0, 310 BTC_CTT_BT_VS_LTE = 0x1, 311 BTC_CTT_MAX 312 }; 313 314 enum btc_lte_break_table_type { 315 BTC_LBTT_WL_BREAK_LTE = 0x0, 316 BTC_LBTT_BT_BREAK_LTE = 0x1, 317 BTC_LBTT_LTE_BREAK_WL = 0x2, 318 BTC_LBTT_LTE_BREAK_BT = 0x3, 319 BTC_LBTT_MAX 320 }; 321 322 enum btc_btinfo_src { 323 BTC_BTINFO_SRC_WL_FW = 0x0, 324 BTC_BTINFO_SRC_BT_RSP = 0x1, 325 BTC_BTINFO_SRC_BT_ACT = 0x2, 326 BTC_BTINFO_SRC_BT_IQK = 0x3, 327 BTC_BTINFO_SRC_BT_SCBD = 0x4, 328 BTC_BTINFO_SRC_H2C60 = 0x5, 329 BTC_BTINFO_SRC_MAX 330 }; 331 332 enum btc_bt_profile { 333 BTC_BTPROFILE_NONE = 0, 334 BTC_BTPROFILE_HFP = BIT(0), 335 BTC_BTPROFILE_HID = BIT(1), 336 BTC_BTPROFILE_A2DP = BIT(2), 337 BTC_BTPROFILE_PAN = BIT(3), 338 BTC_BTPROFILE_MAX = 0xf 339 }; 340 341 static const char *const bt_profile_string[] = { 342 "None", 343 "HFP", 344 "HID", 345 "HID + HFP", 346 "A2DP", 347 "A2DP + HFP", 348 "A2DP + HID", 349 "PAN + HID + HFP", 350 "PAN", 351 "PAN + HFP", 352 "PAN + HID", 353 "PAN + HID + HFP", 354 "PAN + A2DP", 355 "PAN + A2DP + HFP", 356 "PAN + A2DP + HID", 357 "PAN + A2DP + HID + HFP" 358 }; 359 360 enum btc_bt_status { 361 BTC_BTSTATUS_NCON_IDLE = 0x0, 362 BTC_BTSTATUS_CON_IDLE = 0x1, 363 BTC_BTSTATUS_INQ_PAGE = 0x2, 364 BTC_BTSTATUS_ACL_BUSY = 0x3, 365 BTC_BTSTATUS_SCO_BUSY = 0x4, 366 BTC_BTSTATUS_ACL_SCO_BUSY = 0x5, 367 BTC_BTSTATUS_MAX 368 }; 369 370 static const char *const bt_status_string[] = { 371 "BT Non-Connected-idle", 372 "BT Connected-idle", 373 "BT Inq-page", 374 "BT ACL-busy", 375 "BT SCO-busy", 376 "BT ACL-SCO-busy", 377 "BT Non-Defined-state" 378 }; 379 380 enum btc_coex_algo { 381 BTC_COEX_NOPROFILE = 0x0, 382 BTC_COEX_HFP = 0x1, 383 BTC_COEX_HID = 0x2, 384 BTC_COEX_A2DP = 0x3, 385 BTC_COEX_PAN = 0x4, 386 BTC_COEX_A2DP_HID = 0x5, 387 BTC_COEX_A2DP_PAN = 0x6, 388 BTC_COEX_PAN_HID = 0x7, 389 BTC_COEX_A2DP_PAN_HID = 0x8, 390 BTC_COEX_MAX 391 }; 392 393 static const char *const coex_algo_string[] = { 394 "No Profile", 395 "HFP", 396 "HID", 397 "A2DP", 398 "PAN", 399 "A2DP + HID", 400 "A2DP + PAN", 401 "PAN + HID", 402 "A2DP + PAN + HID" 403 }; 404 405 enum btc_ext_ant_switch_type { 406 BTC_SWITCH_NONE = 0x0, 407 BTC_SWITCH_SPDT = 0x1, 408 BTC_SWITCH_SP3T = 0x2, 409 BTC_SWITCH_ANTMAX 410 }; 411 412 enum btc_ext_ant_switch_ctrl_type { 413 BTC_SWITCH_CTRL_BY_BBSW = 0x0, 414 BTC_SWITCH_CTRL_BY_PTA = 0x1, 415 BTC_SWITCH_CTRL_BY_ANTDIV = 0x2, 416 BTC_SWITCH_CTRL_BY_MAC = 0x3, 417 BTC_SWITCH_CTRL_BY_BT = 0x4, 418 BTC_SWITCH_CTRL_BY_FW = 0x5, 419 BTC_SWITCH_CTRL_MAX 420 }; 421 422 enum btc_ext_ant_switch_pos_type { 423 BTC_SWITCH_TO_BT = 0x0, 424 BTC_SWITCH_TO_WLG = 0x1, 425 BTC_SWITCH_TO_WLA = 0x2, 426 BTC_SWITCH_TO_NOCARE = 0x3, 427 BTC_SWITCH_TO_WLG_BT = 0x4, 428 BTC_SWITCH_TO_MAX 429 }; 430 431 enum btx_set_ant_phase { 432 BTC_ANT_INIT = 0x0, 433 BTC_ANT_WONLY = 0x1, 434 BTC_ANT_WOFF = 0x2, 435 BTC_ANT_2G = 0x3, 436 BTC_ANT_5G = 0x4, 437 BTC_ANT_BTMP = 0x5, 438 BTC_ANT_POWERON = 0x6, 439 BTC_ANT_2G_WL = 0x7, 440 BTC_ANT_2G_BT = 0x8, 441 BTC_ANT_MCC = 0x9, 442 BTC_ANT_2G_WLBT = 0xa, 443 BTC_ANT_2G_FREERUN = 0xb, 444 BTC_ANT_MAX 445 }; 446 447 /*ADD SCOREBOARD TO FIX BT LPS 32K ISSUE WHILE WL BUSY*/ 448 enum btc_wl2bt_scoreboard { 449 BTC_SCBD_ACTIVE = BIT(0), 450 BTC_SCBD_ON = BIT(1), 451 BTC_SCBD_SCAN = BIT(2), 452 BTC_SCBD_UNDERTEST = BIT(3), 453 BTC_SCBD_RXGAIN = BIT(4), 454 BTC_SCBD_WLBUSY = BIT(7), 455 BTC_SCBD_EXTFEM = BIT(8), 456 BTC_SCBD_TDMA = BIT(9), 457 BTC_SCBD_FIX2M = BIT(10), 458 BTC_SCBD_ALL = 0xffff 459 }; 460 461 enum btc_bt2wl_scoreboard { 462 BTC_SCBD_BT_ONOFF = BIT(1), 463 BTC_SCBD_BT_LPS = BIT(7) 464 }; 465 466 enum btc_runreason { 467 BTC_RSN_2GSCANSTART = 0x0, 468 BTC_RSN_5GSCANSTART = 0x1, 469 BTC_RSN_SCANFINISH = 0x2, 470 BTC_RSN_2GSWITCHBAND = 0x3, 471 BTC_RSN_5GSWITCHBAND = 0x4, 472 BTC_RSN_2GCONSTART = 0x5, 473 BTC_RSN_5GCONSTART = 0x6, 474 BTC_RSN_2GCONFINISH = 0x7, 475 BTC_RSN_5GCONFINISH = 0x8, 476 BTC_RSN_2GMEDIA = 0x9, 477 BTC_RSN_5GMEDIA = 0xa, 478 BTC_RSN_MEDIADISCON = 0xb, 479 BTC_RSN_2GSPECIALPKT = 0xc, 480 BTC_RSN_5GSPECIALPKT = 0xd, 481 BTC_RSN_BTINFO = 0xe, 482 BTC_RSN_PERIODICAL = 0xf, 483 BTC_RSN_PNP = 0x10, 484 BTC_RSN_LPS = 0x11, 485 BTC_RSN_TIMERUP = 0x12, 486 BTC_RSN_WLSTATUS = 0x13, 487 BTC_RSN_MAX 488 }; 489 490 static const char *const run_reason_string[] = { 491 "2G_SCAN_START", 492 "5G_SCAN_START", 493 "SCAN_FINISH", 494 "2G_SWITCH_BAND", 495 "5G_SWITCH_BAND", 496 "2G_CONNECT_START", 497 "5G_CONNECT_START", 498 "2G_CONNECT_FINISH", 499 "5G_CONNECT_FINISH", 500 "2G_MEDIA_STATUS", 501 "5G_MEDIA_STATUS", 502 "MEDIA_DISCONNECT", 503 "2G_SPECIALPKT", 504 "5G_SPECIALPKT", 505 "BTINFO", 506 "PERIODICAL", 507 "PNPNotify", 508 "LPSNotify", 509 "TimerUp", 510 "WL_STATUS_CHANGE", 511 }; 512 513 enum btc_wl_link_mode { 514 BTC_WLINK_2G1PORT = 0x0, 515 BTC_WLINK_2GMPORT = 0x1, 516 BTC_WLINK_25GMPORT = 0x2, 517 BTC_WLINK_5G = 0x3, 518 BTC_WLINK_2GGO = 0x4, 519 BTC_WLINK_2GGC = 0x5, 520 BTC_WLINK_BTMR = 0x6, 521 BTC_WLINK_MAX 522 }; 523 524 static const char *const coex_mode_string[] = { 525 "2G-SP", 526 "2G-MP", 527 "25G-MP", 528 "5G", 529 "2G-P2P-GO", 530 "2G-P2P-GC", 531 "BT-MR" 532 }; 533 534 enum btc_bt_state_cnt { 535 BTC_CNT_BT_RETRY = 0x0, 536 BTC_CNT_BT_REINIT = 0x1, 537 BTC_CNT_BT_POPEVENT = 0x2, 538 BTC_CNT_BT_SETUPLINK = 0x3, 539 BTC_CNT_BT_IGNWLANACT = 0x4, 540 BTC_CNT_BT_INQ = 0x5, 541 BTC_CNT_BT_PAGE = 0x6, 542 BTC_CNT_BT_ROLESWITCH = 0x7, 543 BTC_CNT_BT_AFHUPDATE = 0x8, 544 BTC_CNT_BT_DISABLE = 0x9, 545 BTC_CNT_BT_INFOUPDATE = 0xa, 546 BTC_CNT_BT_IQK = 0xb, 547 BTC_CNT_BT_IQKFAIL = 0xc, 548 BTC_CNT_BT_MAX 549 }; 550 551 enum btc_wl_state_cnt { 552 BTC_CNT_WL_SCANAP = 0x0, 553 BTC_CNT_WL_ARP = 0x1, 554 BTC_CNT_WL_GNTERR = 0x2, 555 BTC_CNT_WL_PSFAIL = 0x3, 556 BTC_CNT_WL_COEXRUN = 0x4, 557 BTC_CNT_WL_COEXINFO1 = 0x5, 558 BTC_CNT_WL_COEXINFO2 = 0x6, 559 BTC_CNT_WL_AUTOSLOT_HANG = 0x7, 560 BTC_CNT_WL_NOISY0 = 0x8, 561 BTC_CNT_WL_NOISY1 = 0x9, 562 BTC_CNT_WL_NOISY2 = 0xa, 563 BTC_CNT_WL_ACTIVEPORT = 0xb, 564 BTC_CNT_WL_5MS_NOEXTEND = 0xc, 565 BTC_CNT_WL_FW_NOTIFY = 0xd, 566 BTC_CNT_WL_MAX 567 }; 568 569 enum btc_wl_crc_cnt { 570 BTC_WLCRC_11BOK = 0x0, 571 BTC_WLCRC_11GOK = 0x1, 572 BTC_WLCRC_11NOK = 0x2, 573 BTC_WLCRC_11VHTOK = 0x3, 574 BTC_WLCRC_11BERR = 0x4, 575 BTC_WLCRC_11GERR = 0x5, 576 BTC_WLCRC_11NERR = 0x6, 577 BTC_WLCRC_11VHTERR = 0x7, 578 BTC_WLCRC_MAX 579 }; 580 581 enum btc_timer_cnt { 582 BTC_TIMER_WL_STAYBUSY = 0x0, 583 BTC_TIMER_WL_COEXFREEZE = 0x1, 584 BTC_TIMER_WL_SPECPKT = 0x2, 585 BTC_TIMER_WL_CONNPKT = 0x3, 586 BTC_TIMER_WL_PNPWAKEUP = 0x4, 587 BTC_TIMER_WL_CCKLOCK = 0x5, 588 BTC_TIMER_WL_FWDBG = 0x6, 589 BTC_TIMER_BT_RELINK = 0x7, 590 BTC_TIMER_BT_REENABLE = 0x8, 591 BTC_TIMER_BT_MULTILINK = 0x9, 592 BTC_TIMER_MAX 593 }; 594 595 enum btc_wl_status_change { 596 BTC_WLSTATUS_CHANGE_TOIDLE = 0x0, 597 BTC_WLSTATUS_CHANGE_TOBUSY = 0x1, 598 BTC_WLSTATUS_CHANGE_RSSI = 0x2, 599 BTC_WLSTATUS_CHANGE_LINKINFO = 0x3, 600 BTC_WLSTATUS_CHANGE_DIR = 0x4, 601 BTC_WLSTATUS_CHANGE_NOISY = 0x5, 602 BTC_WLSTATUS_CHANGE_MAX 603 }; 604 605 enum btc_commom_chip_setup { 606 BTC_CSETUP_INIT_HW = 0x0, 607 BTC_CSETUP_ANT_SWITCH = 0x1, 608 BTC_CSETUP_GNT_FIX = 0x2, 609 BTC_CSETUP_GNT_DEBUG = 0x3, 610 BTC_CSETUP_RFE_TYPE = 0x4, 611 BTC_CSETUP_COEXINFO_HW = 0x5, 612 BTC_CSETUP_WL_TX_POWER = 0x6, 613 BTC_CSETUP_WL_RX_GAIN = 0x7, 614 BTC_CSETUP_WLAN_ACT_IPS = 0x8, 615 BTC_CSETUP_MAX 616 }; 617 618 enum btc_indirect_reg_type { 619 BTC_INDIRECT_1700 = 0x0, 620 BTC_INDIRECT_7C0 = 0x1, 621 BTC_INDIRECT_MAX 622 }; 623 624 enum btc_pstdma_type { 625 BTC_PSTDMA_FORCE_LPSOFF = 0x0, 626 BTC_PSTDMA_FORCE_LPSON = 0x1, 627 BTC_PSTDMA_MAX 628 }; 629 630 enum btc_btrssi_type { 631 BTC_BTRSSI_RATIO = 0x0, 632 BTC_BTRSSI_DBM = 0x1, 633 BTC_BTRSSI_MAX 634 }; 635 636 enum btc_wl_priority_mask { 637 BTC_WLPRI_RX_RSP = 2, 638 BTC_WLPRI_TX_RSP = 3, 639 BTC_WLPRI_TX_BEACON = 4, 640 BTC_WLPRI_TX_OFDM = 11, 641 BTC_WLPRI_TX_CCK = 12, 642 BTC_WLPRI_TX_BEACONQ = 27, 643 BTC_WLPRI_RX_CCK = 28, 644 BTC_WLPRI_RX_OFDM = 29, 645 BTC_WLPRI_MAX 646 }; 647 648 struct btc_board_info { 649 /* The following is some board information */ 650 u8 bt_chip_type; 651 u8 pg_ant_num; /* pg ant number */ 652 u8 btdm_ant_num; /* ant number for btdm */ 653 u8 btdm_ant_num_by_ant_det; /* ant number for btdm after antenna detection */ 654 u8 btdm_ant_pos; /* Bryant Add to indicate Antenna Position for (pg_ant_num = 2) && (btdm_ant_num =1) (DPDT+1Ant case) */ 655 u8 single_ant_path; /* current used for 8723b only, 1=>s0, 0=>s1 */ 656 boolean tfbga_package; /* for Antenna detect threshold */ 657 boolean btdm_ant_det_finish; 658 boolean btdm_ant_det_already_init_phydm; 659 u8 ant_type; 660 u8 rfe_type; 661 u8 ant_div_cfg; 662 boolean btdm_ant_det_complete_fail; 663 u8 ant_det_result; 664 boolean ant_det_result_five_complete; 665 u32 antdetval; 666 u8 customerID; 667 u8 customer_id; 668 u8 ant_distance; /* WL-BT antenna space for non-shared antenna */ 669 }; 670 671 struct btc_coex_dm { 672 boolean cur_ignore_wlan_act; 673 boolean cur_ps_tdma_on; 674 boolean cur_low_penalty_ra; 675 boolean cur_wl_rx_low_gain_en; 676 677 u8 bt_rssi_state[4]; 678 u8 wl_rssi_state[4]; 679 u8 cur_ps_tdma; 680 u8 ps_tdma_para[5]; 681 u8 fw_tdma_para[5]; 682 u8 cur_lps; 683 u8 cur_rpwm; 684 u8 cur_bt_pwr_lvl; 685 u8 cur_bt_lna_lvl; 686 u8 cur_wl_pwr_lvl; 687 u8 cur_algorithm; 688 u8 bt_status; 689 u8 wl_chnl_info[3]; 690 u8 cur_toggle_para[6]; 691 u32 cur_ant_pos_type; 692 u32 cur_switch_status; 693 u32 setting_tdma; 694 }; 695 696 struct btc_coex_sta { 697 boolean coex_freeze; 698 boolean coex_freerun; 699 boolean rf4ce_en; 700 boolean is_no_wl_5ms_extend; 701 702 boolean bt_disabled; 703 boolean bt_disabled_pre; 704 boolean bt_link_exist; 705 boolean bt_whck_test; 706 boolean bt_inq_page; 707 boolean bt_inq; 708 boolean bt_page; 709 boolean bt_ble_voice; 710 boolean bt_ble_exist; 711 boolean bt_hfp_exist; 712 boolean bt_a2dp_exist; 713 boolean bt_hid_exist; 714 boolean bt_pan_exist; // PAN or OPP 715 boolean bt_opp_exist; //OPP only 716 boolean bt_msft_mr_exist; 717 boolean bt_acl_busy; 718 boolean bt_fix_2M; 719 boolean bt_setup_link; 720 boolean bt_multi_link; 721 boolean bt_multi_link_pre; 722 boolean bt_multi_link_remain; 723 boolean bt_a2dp_sink; 724 boolean bt_reenable; 725 boolean bt_ble_scan_en; 726 boolean bt_slave; 727 boolean bt_a2dp_active; 728 boolean bt_slave_latency; 729 boolean bt_init_scan; 730 boolean bt_418_hid_exist; 731 boolean bt_ble_hid_exist; 732 boolean bt_mesh; 733 734 boolean wl_under_lps; 735 boolean wl_under_ips; 736 boolean wl_under_4way; 737 boolean wl_hi_pri_task1; 738 boolean wl_hi_pri_task2; 739 boolean wl_cck_lock; 740 boolean wl_cck_lock_pre; 741 boolean wl_cck_lock_ever; 742 boolean wl_force_lps_ctrl; 743 boolean wl_busy_pre; 744 boolean wl_gl_busy; 745 boolean wl_gl_busy_pre; 746 boolean wl_linkscan_proc; 747 boolean wl_mimo_ps; 748 boolean wl_cck_dead_lock_ap; 749 boolean wl_tx_limit_en; 750 boolean wl_ampdu_limit_en; 751 boolean wl_rxagg_limit_en; 752 boolean wl_connecting; 753 boolean wl_pnp_wakeup; 754 boolean wl_slot_toggle; 755 boolean wl_slot_toggle_change; /* if toggle to no-toggle */ 756 757 u8 coex_table_type; 758 u8 coex_run_reason; 759 u8 tdma_byte4_modify_pre; 760 u8 kt_ver; 761 u8 gnt_workaround_state; 762 u8 tdma_timer_base; 763 u8 bt_rssi; 764 u8 bt_profile_num; 765 u8 bt_profile_num_pre; 766 u8 bt_info_c2h[BTC_BTINFO_SRC_MAX][BTC_BTINFO_LENGTH_MAX]; 767 u8 bt_info_lb2; 768 u8 bt_info_lb3; 769 u8 bt_info_hb0; 770 u8 bt_info_hb1; 771 u8 bt_info_hb2; 772 u8 bt_info_hb3; 773 u8 bt_ble_scan_type; 774 u8 bt_afh_map[10]; 775 u8 bt_a2dp_vendor_id; 776 u8 bt_hid_pair_num; 777 u8 bt_hid_slot; 778 u8 bt_a2dp_bitpool; 779 u8 bt_iqk_state; 780 u8 bt_sut_pwr_lvl[4]; 781 u8 bt_golden_rx_shift[4]; 782 u8 bt_ext_autoslot_thres; 783 784 u8 wl_pnp_state_pre; 785 u8 wl_noisy_level; 786 u8 wl_fw_dbg_info[10]; 787 u8 wl_fw_dbg_info_pre[10]; 788 u8 wl_rx_rate; 789 u8 wl_tx_rate; 790 u8 wl_rts_rx_rate; 791 u8 wl_center_ch; 792 u8 wl_tx_macid; 793 u8 wl_tx_retry_ratio; 794 u8 wl_coex_mode; 795 u8 wl_iot_peer; 796 u8 wl_ra_thres; 797 u8 wl_ampdulen; 798 u8 wl_rxagg_size; 799 u8 wl_toggle_para[6]; 800 u8 wl_toggle_interval; 801 802 u16 score_board_BW; 803 u16 score_board_WB; 804 u16 bt_reg_vendor_ac; 805 u16 bt_reg_vendor_ae; 806 u16 bt_reg_modem_a; 807 u16 bt_reg_rf_2; 808 u16 wl_txlimit; 809 810 u32 hi_pri_tx; 811 u32 hi_pri_rx; 812 u32 lo_pri_tx; 813 u32 lo_pri_rx; 814 u32 bt_supported_feature; 815 u32 bt_supported_version; 816 u32 bt_ble_scan_para[3]; 817 u32 bt_a2dp_device_name; 818 u32 bt_a2dp_flush_time; 819 u32 wl_arfb1; 820 u32 wl_arfb2; 821 u32 wl_traffic_dir; 822 u32 wl_bw; 823 u32 cnt_bt_info_c2h[BTC_BTINFO_SRC_MAX]; 824 u32 cnt_bt[BTC_CNT_BT_MAX]; 825 u32 cnt_wl[BTC_CNT_WL_MAX]; 826 u32 cnt_timer[BTC_TIMER_MAX]; 827 }; 828 829 struct btc_rfe_type { 830 boolean ant_switch_exist; 831 boolean ant_switch_diversity; /* If diversity on */ 832 boolean ant_switch_with_bt; /* If WL_2G/BT use ext-switch at shared-ant */ 833 u8 rfe_module_type; 834 u8 ant_switch_type; 835 u8 ant_switch_polarity; 836 837 boolean band_switch_exist; 838 u8 band_switch_type; /* 0:DPDT, 1:SPDT */ 839 u8 band_switch_polarity; 840 841 /* If TRUE: WLG at BTG, If FALSE: WLG at WLAG */ 842 boolean wlg_at_btg; 843 }; 844 845 846 struct btc_wifi_link_info_ext { 847 boolean is_all_under_5g; 848 boolean is_mcc_25g; 849 boolean is_p2p_connected; 850 boolean is_ap_mode; 851 boolean is_scan; 852 boolean is_link; 853 boolean is_roam; 854 boolean is_4way; 855 boolean is_32k; 856 boolean is_connected; 857 u8 num_of_active_port; 858 u32 port_connect_status; 859 u32 traffic_dir; 860 u32 wifi_bw; 861 }; 862 863 struct btc_coex_table_para { 864 u32 bt; //0x6c0 865 u32 wl; //0x6c4 866 }; 867 868 struct btc_tdma_para { 869 u8 para[5]; 870 }; 871 872 struct btc_reg_byte_modify { 873 u32 addr; 874 u8 bitmask; 875 u8 val; 876 }; 877 878 struct btc_5g_afh_map { 879 u32 wl_5g_ch; 880 u8 bt_skip_ch; 881 u8 bt_skip_span; 882 }; 883 884 struct btc_rf_para { 885 u8 wl_pwr_dec_lvl; 886 u8 bt_pwr_dec_lvl; 887 boolean wl_low_gain_en; 888 u8 bt_lna_lvl; 889 }; 890 891 typedef enum _BTC_DBG_OPCODE { 892 BTC_DBG_SET_COEX_NORMAL = 0x0, 893 BTC_DBG_SET_COEX_WIFI_ONLY = 0x1, 894 BTC_DBG_SET_COEX_BT_ONLY = 0x2, 895 BTC_DBG_SET_COEX_DEC_BT_PWR = 0x3, 896 BTC_DBG_SET_COEX_BT_AFH_MAP = 0x4, 897 BTC_DBG_SET_COEX_BT_IGNORE_WLAN_ACT = 0x5, 898 BTC_DBG_SET_COEX_MANUAL_CTRL = 0x6, 899 BTC_DBG_MAX 900 } BTC_DBG_OPCODE, *PBTC_DBG_OPCODE; 901 902 typedef enum _BTC_RSSI_STATE { 903 BTC_RSSI_STATE_HIGH = 0x0, 904 BTC_RSSI_STATE_MEDIUM = 0x1, 905 BTC_RSSI_STATE_LOW = 0x2, 906 BTC_RSSI_STATE_STAY_HIGH = 0x3, 907 BTC_RSSI_STATE_STAY_MEDIUM = 0x4, 908 BTC_RSSI_STATE_STAY_LOW = 0x5, 909 BTC_RSSI_MAX 910 } BTC_RSSI_STATE, *PBTC_RSSI_STATE; 911 #define BTC_RSSI_HIGH(_rssi_) ((_rssi_ == BTC_RSSI_STATE_HIGH || _rssi_ == BTC_RSSI_STATE_STAY_HIGH) ? TRUE:FALSE) 912 #define BTC_RSSI_MEDIUM(_rssi_) ((_rssi_ == BTC_RSSI_STATE_MEDIUM || _rssi_ == BTC_RSSI_STATE_STAY_MEDIUM) ? TRUE:FALSE) 913 #define BTC_RSSI_LOW(_rssi_) ((_rssi_ == BTC_RSSI_STATE_LOW || _rssi_ == BTC_RSSI_STATE_STAY_LOW) ? TRUE:FALSE) 914 915 typedef enum _BTC_WIFI_ROLE { 916 BTC_ROLE_STATION = 0x0, 917 BTC_ROLE_AP = 0x1, 918 BTC_ROLE_IBSS = 0x2, 919 BTC_ROLE_HS_MODE = 0x3, 920 BTC_ROLE_MAX 921 } BTC_WIFI_ROLE, *PBTC_WIFI_ROLE; 922 923 typedef enum _BTC_WIRELESS_FREQ { 924 BTC_FREQ_2_4G = 0x0, 925 BTC_FREQ_5G = 0x1, 926 BTC_FREQ_25G = 0x2, 927 BTC_FREQ_MAX 928 } BTC_WIRELESS_FREQ, *PBTC_WIRELESS_FREQ; 929 930 typedef enum _BTC_WIFI_BW_MODE { 931 BTC_WIFI_BW_LEGACY = 0x0, 932 BTC_WIFI_BW_HT20 = 0x1, 933 BTC_WIFI_BW_HT40 = 0x2, 934 BTC_WIFI_BW_HT80 = 0x3, 935 BTC_WIFI_BW_HT160 = 0x4, 936 BTC_WIFI_BW_MAX 937 } BTC_WIFI_BW_MODE, *PBTC_WIFI_BW_MODE; 938 939 typedef enum _BTC_WIFI_TRAFFIC_DIR { 940 BTC_WIFI_TRAFFIC_TX = 0x0, 941 BTC_WIFI_TRAFFIC_RX = 0x1, 942 BTC_WIFI_TRAFFIC_MAX 943 } BTC_WIFI_TRAFFIC_DIR, *PBTC_WIFI_TRAFFIC_DIR; 944 945 typedef enum _BTC_WIFI_PNP { 946 BTC_WIFI_PNP_WAKE_UP = 0x0, 947 BTC_WIFI_PNP_SLEEP = 0x1, 948 BTC_WIFI_PNP_SLEEP_KEEP_ANT = 0x2, 949 BTC_WIFI_PNP_WOWLAN = 0x3, 950 BTC_WIFI_PNP_MAX 951 } BTC_WIFI_PNP, *PBTC_WIFI_PNP; 952 953 typedef enum _BTC_IOT_PEER { 954 BTC_IOT_PEER_UNKNOWN = 0, 955 BTC_IOT_PEER_REALTEK = 1, 956 BTC_IOT_PEER_REALTEK_92SE = 2, 957 BTC_IOT_PEER_BROADCOM = 3, 958 BTC_IOT_PEER_RALINK = 4, 959 BTC_IOT_PEER_ATHEROS = 5, 960 BTC_IOT_PEER_CISCO = 6, 961 BTC_IOT_PEER_MERU = 7, 962 BTC_IOT_PEER_MARVELL = 8, 963 BTC_IOT_PEER_REALTEK_SOFTAP = 9, /* peer is RealTek SOFT_AP, by Bohn, 2009.12.17 */ 964 BTC_IOT_PEER_SELF_SOFTAP = 10, /* Self is SoftAP */ 965 BTC_IOT_PEER_AIRGO = 11, 966 BTC_IOT_PEER_INTEL = 12, 967 BTC_IOT_PEER_RTK_APCLIENT = 13, 968 BTC_IOT_PEER_REALTEK_81XX = 14, 969 BTC_IOT_PEER_REALTEK_WOW = 15, 970 BTC_IOT_PEER_REALTEK_JAGUAR_BCUTAP = 16, 971 BTC_IOT_PEER_REALTEK_JAGUAR_CCUTAP = 17, 972 BTC_IOT_PEER_MAX, 973 } BTC_IOT_PEER, *PBTC_IOT_PEER; 974 975 /* for 8723b-d cut large current issue */ 976 typedef enum _BTC_WIFI_COEX_STATE { 977 BTC_WIFI_STAT_INIT, 978 BTC_WIFI_STAT_IQK, 979 BTC_WIFI_STAT_NORMAL_OFF, 980 BTC_WIFI_STAT_MP_OFF, 981 BTC_WIFI_STAT_NORMAL, 982 BTC_WIFI_STAT_ANT_DIV, 983 BTC_WIFI_STAT_MAX 984 } BTC_WIFI_COEX_STATE, *PBTC_WIFI_COEX_STATE; 985 986 typedef enum _BTC_ANT_TYPE { 987 BTC_ANT_TYPE_0, 988 BTC_ANT_TYPE_1, 989 BTC_ANT_TYPE_2, 990 BTC_ANT_TYPE_3, 991 BTC_ANT_TYPE_4, 992 BTC_ANT_TYPE_MAX 993 } BTC_ANT_TYPE, *PBTC_ANT_TYPE; 994 995 typedef enum _BTC_VENDOR { 996 BTC_VENDOR_LENOVO, 997 BTC_VENDOR_ASUS, 998 BTC_VENDOR_OTHER 999 } BTC_VENDOR, *PBTC_VENDOR; 1000 1001 1002 /* defined for BFP_BTC_GET */ 1003 typedef enum _BTC_GET_TYPE { 1004 /* type BOOLEAN */ 1005 BTC_GET_BL_HS_OPERATION, 1006 BTC_GET_BL_HS_CONNECTING, 1007 BTC_GET_BL_WIFI_FW_READY, 1008 BTC_GET_BL_WIFI_CONNECTED, 1009 BTC_GET_BL_WIFI_DUAL_BAND_CONNECTED, 1010 BTC_GET_BL_WIFI_LINK_INFO, 1011 BTC_GET_BL_WIFI_BUSY, 1012 BTC_GET_BL_WIFI_SCAN, 1013 BTC_GET_BL_WIFI_LINK, 1014 BTC_GET_BL_WIFI_ROAM, 1015 BTC_GET_BL_WIFI_4_WAY_PROGRESS, 1016 BTC_GET_BL_WIFI_UNDER_5G, 1017 BTC_GET_BL_WIFI_AP_MODE_ENABLE, 1018 BTC_GET_BL_WIFI_ENABLE_ENCRYPTION, 1019 BTC_GET_BL_WIFI_UNDER_B_MODE, 1020 BTC_GET_BL_EXT_SWITCH, 1021 BTC_GET_BL_WIFI_IS_IN_MP_MODE, 1022 BTC_GET_BL_IS_ASUS_8723B, 1023 BTC_GET_BL_RF4CE_CONNECTED, 1024 BTC_GET_BL_WIFI_LW_PWR_STATE, 1025 1026 /* type s4Byte */ 1027 BTC_GET_S4_WIFI_RSSI, 1028 BTC_GET_S4_HS_RSSI, 1029 1030 /* type u4Byte */ 1031 BTC_GET_U4_WIFI_BW, 1032 BTC_GET_U4_WIFI_TRAFFIC_DIRECTION, 1033 BTC_GET_U4_WIFI_TRAFFIC_DIR, 1034 BTC_GET_U4_WIFI_FW_VER, 1035 BTC_GET_U4_WIFI_PHY_VER, 1036 BTC_GET_U4_WIFI_LINK_STATUS, 1037 BTC_GET_U4_BT_PATCH_VER, 1038 BTC_GET_U4_VENDOR, 1039 BTC_GET_U4_SUPPORTED_VERSION, 1040 BTC_GET_U4_SUPPORTED_FEATURE, 1041 BTC_GET_U4_BT_DEVICE_INFO, 1042 BTC_GET_U4_BT_FORBIDDEN_SLOT_VAL, 1043 BTC_GET_U4_BT_A2DP_FLUSH_VAL, 1044 BTC_GET_U4_WIFI_IQK_TOTAL, 1045 BTC_GET_U4_WIFI_IQK_OK, 1046 BTC_GET_U4_WIFI_IQK_FAIL, 1047 1048 /* type u1Byte */ 1049 BTC_GET_U1_WIFI_DOT11_CHNL, 1050 BTC_GET_U1_WIFI_CENTRAL_CHNL, 1051 BTC_GET_U1_WIFI_HS_CHNL, 1052 BTC_GET_U1_WIFI_P2P_CHNL, 1053 BTC_GET_U1_MAC_PHY_MODE, 1054 BTC_GET_U1_AP_NUM, 1055 BTC_GET_U1_ANT_TYPE, 1056 BTC_GET_U1_IOT_PEER, 1057 1058 /* type u2Byte */ 1059 BTC_GET_U2_BEACON_PERIOD, 1060 1061 /*===== for 1Ant ======*/ 1062 BTC_GET_U1_LPS_MODE, 1063 1064 BTC_GET_MAX 1065 } BTC_GET_TYPE, *PBTC_GET_TYPE; 1066 1067 /* defined for BFP_BTC_SET */ 1068 typedef enum _BTC_SET_TYPE { 1069 /* type BOOLEAN */ 1070 BTC_SET_BL_BT_DISABLE, 1071 BTC_SET_BL_BT_ENABLE_DISABLE_CHANGE, 1072 BTC_SET_BL_BT_TRAFFIC_BUSY, 1073 BTC_SET_BL_BT_LIMITED_DIG, 1074 BTC_SET_BL_FORCE_TO_ROAM, 1075 BTC_SET_BL_TO_REJ_AP_AGG_PKT, 1076 BTC_SET_BL_BT_CTRL_AGG_SIZE, 1077 BTC_SET_BL_INC_SCAN_DEV_NUM, 1078 BTC_SET_BL_BT_TX_RX_MASK, 1079 BTC_SET_BL_MIRACAST_PLUS_BT, 1080 BTC_SET_BL_BT_LNA_CONSTRAIN_LEVEL, 1081 BTC_SET_BL_BT_GOLDEN_RX_RANGE, 1082 1083 /* type u1Byte */ 1084 BTC_SET_U1_RSSI_ADJ_VAL_FOR_AGC_TABLE_ON, 1085 BTC_SET_U1_AGG_BUF_SIZE, 1086 1087 /* type trigger some action */ 1088 BTC_SET_ACT_GET_BT_RSSI, 1089 BTC_SET_ACT_AGGREGATE_CTRL, 1090 BTC_SET_ACT_ANTPOSREGRISTRY_CTRL, 1091 1092 // for mimo ps mode setting 1093 BTC_SET_MIMO_PS_MODE, 1094 /*===== for 1Ant ======*/ 1095 /* type BOOLEAN */ 1096 1097 /* type u1Byte */ 1098 BTC_SET_U1_RSSI_ADJ_VAL_FOR_1ANT_COEX_TYPE, 1099 BTC_SET_U1_LPS_VAL, 1100 BTC_SET_U1_RPWM_VAL, 1101 /* type trigger some action */ 1102 BTC_SET_ACT_LEAVE_LPS, 1103 BTC_SET_ACT_ENTER_LPS, 1104 BTC_SET_ACT_NORMAL_LPS, 1105 BTC_SET_ACT_PRE_NORMAL_LPS, 1106 BTC_SET_ACT_POST_NORMAL_LPS, 1107 BTC_SET_ACT_DISABLE_LOW_POWER, 1108 BTC_SET_ACT_UPDATE_RAMASK, 1109 BTC_SET_ACT_SEND_MIMO_PS, 1110 /* BT Coex related */ 1111 BTC_SET_ACT_CTRL_BT_INFO, 1112 BTC_SET_ACT_CTRL_BT_COEX, 1113 BTC_SET_ACT_CTRL_8723B_ANT, 1114 BTC_SET_RESET_COEX_VAR, 1115 /*=================*/ 1116 BTC_SET_MAX 1117 } BTC_SET_TYPE, *PBTC_SET_TYPE; 1118 1119 typedef enum _BTC_DBG_DISP_TYPE { 1120 BTC_DBG_DISP_COEX_STATISTICS = 0x0, 1121 BTC_DBG_DISP_BT_LINK_INFO = 0x1, 1122 BTC_DBG_DISP_WIFI_STATUS = 0x2, 1123 BTC_DBG_DISP_MAX 1124 } BTC_DBG_DISP_TYPE, *PBTC_DBG_DISP_TYPE; 1125 1126 typedef enum _BTC_NOTIFY_TYPE_IPS { 1127 BTC_IPS_LEAVE = 0x0, 1128 BTC_IPS_ENTER = 0x1, 1129 BTC_IPS_MAX 1130 } BTC_NOTIFY_TYPE_IPS, *PBTC_NOTIFY_TYPE_IPS; 1131 typedef enum _BTC_NOTIFY_TYPE_LPS { 1132 BTC_LPS_DISABLE = 0x0, 1133 BTC_LPS_ENABLE = 0x1, 1134 BTC_LPS_MAX 1135 } BTC_NOTIFY_TYPE_LPS, *PBTC_NOTIFY_TYPE_LPS; 1136 typedef enum _BTC_NOTIFY_TYPE_SCAN { 1137 BTC_SCAN_FINISH = 0x0, 1138 BTC_SCAN_START = 0x1, 1139 BTC_SCAN_START_2G = 0x2, 1140 BTC_SCAN_START_5G = 0x3, 1141 BTC_SCAN_MAX 1142 } BTC_NOTIFY_TYPE_SCAN, *PBTC_NOTIFY_TYPE_SCAN; 1143 typedef enum _BTC_NOTIFY_TYPE_SWITCHBAND { 1144 BTC_NOT_SWITCH = 0x0, 1145 BTC_SWITCH_TO_24G = 0x1, 1146 BTC_SWITCH_TO_5G = 0x2, 1147 BTC_SWITCH_TO_24G_NOFORSCAN = 0x3, 1148 BTC_SWITCH_MAX 1149 } BTC_NOTIFY_TYPE_SWITCHBAND, *PBTC_NOTIFY_TYPE_SWITCHBAND; 1150 typedef enum _BTC_NOTIFY_TYPE_ASSOCIATE { 1151 BTC_ASSOCIATE_FINISH = 0x0, 1152 BTC_ASSOCIATE_START = 0x1, 1153 BTC_ASSOCIATE_5G_FINISH = 0x2, 1154 BTC_ASSOCIATE_5G_START = 0x3, 1155 BTC_ASSOCIATE_MAX 1156 } BTC_NOTIFY_TYPE_ASSOCIATE, *PBTC_NOTIFY_TYPE_ASSOCIATE; 1157 typedef enum _BTC_NOTIFY_TYPE_MEDIA_STATUS { 1158 BTC_MEDIA_DISCONNECT = 0x0, 1159 BTC_MEDIA_CONNECT = 0x1, 1160 BTC_MEDIA_CONNECT_5G = 0x02, 1161 BTC_MEDIA_MAX 1162 } BTC_NOTIFY_TYPE_MEDIA_STATUS, *PBTC_NOTIFY_TYPE_MEDIA_STATUS; 1163 typedef enum _BTC_NOTIFY_TYPE_SPECIFIC_PACKET { 1164 BTC_PACKET_UNKNOWN = 0x0, 1165 BTC_PACKET_DHCP = 0x1, 1166 BTC_PACKET_ARP = 0x2, 1167 BTC_PACKET_EAPOL = 0x3, 1168 BTC_PACKET_MAX 1169 } BTC_NOTIFY_TYPE_SPECIFIC_PACKET, *PBTC_NOTIFY_TYPE_SPECIFIC_PACKET; 1170 typedef enum _BTC_NOTIFY_TYPE_STACK_OPERATION { 1171 BTC_STACK_OP_NONE = 0x0, 1172 BTC_STACK_OP_INQ_PAGE_PAIR_START = 0x1, 1173 BTC_STACK_OP_INQ_PAGE_PAIR_FINISH = 0x2, 1174 BTC_STACK_OP_MAX 1175 } BTC_NOTIFY_TYPE_STACK_OPERATION, *PBTC_NOTIFY_TYPE_STACK_OPERATION; 1176 1177 /* Bryant Add */ 1178 typedef enum _BTC_ANTENNA_POS { 1179 BTC_ANTENNA_AT_MAIN_PORT = 0x1, 1180 BTC_ANTENNA_AT_AUX_PORT = 0x2, 1181 } BTC_ANTENNA_POS, *PBTC_ANTENNA_POS; 1182 1183 /* Bryant Add */ 1184 typedef enum _BTC_BT_OFFON { 1185 BTC_BT_OFF = 0x0, 1186 BTC_BT_ON = 0x1, 1187 } BTC_BTOFFON, *PBTC_BT_OFFON; 1188 1189 #define BTC_5G_BAND 0x80 1190 1191 /*================================================== 1192 For following block is for coex offload 1193 ==================================================*/ 1194 typedef struct _COL_H2C { 1195 u1Byte opcode; 1196 u1Byte opcode_ver:4; 1197 u1Byte req_num:4; 1198 u1Byte buf[1]; 1199 } COL_H2C, *PCOL_H2C; 1200 1201 #define COL_C2H_ACK_HDR_LEN 3 1202 typedef struct _COL_C2H_ACK { 1203 u1Byte status; 1204 u1Byte opcode_ver:4; 1205 u1Byte req_num:4; 1206 u1Byte ret_len; 1207 u1Byte buf[1]; 1208 } COL_C2H_ACK, *PCOL_C2H_ACK; 1209 1210 #define COL_C2H_IND_HDR_LEN 3 1211 typedef struct _COL_C2H_IND { 1212 u1Byte type; 1213 u1Byte version; 1214 u1Byte length; 1215 u1Byte data[1]; 1216 } COL_C2H_IND, *PCOL_C2H_IND; 1217 1218 /*============================================ 1219 NOTE: for debug message, the following define should match 1220 the strings in coexH2cResultString. 1221 ============================================*/ 1222 typedef enum _COL_H2C_STATUS { 1223 /* c2h status */ 1224 COL_STATUS_C2H_OK = 0x00, /* Wifi received H2C request and check content ok. */ 1225 COL_STATUS_C2H_UNKNOWN = 0x01, /* Not handled routine */ 1226 COL_STATUS_C2H_UNKNOWN_OPCODE = 0x02, /* Invalid OP code, It means that wifi firmware received an undefiend OP code. */ 1227 COL_STATUS_C2H_OPCODE_VER_MISMATCH = 0x03, /* Wifi firmware and wifi driver mismatch, need to update wifi driver or wifi or. */ 1228 COL_STATUS_C2H_PARAMETER_ERROR = 0x04, /* Error paraneter.(ex: parameters = NULL but it should have values) */ 1229 COL_STATUS_C2H_PARAMETER_OUT_OF_RANGE = 0x05, /* Wifi firmware needs to check the parameters from H2C request and return the status.(ex: ch = 500, it's wrong) */ 1230 /* other COL status start from here */ 1231 COL_STATUS_C2H_REQ_NUM_MISMATCH , /* c2h req_num mismatch, means this c2h is not we expected. */ 1232 COL_STATUS_H2C_HALMAC_FAIL , /* HALMAC return fail. */ 1233 COL_STATUS_H2C_TIMTOUT , /* not received the c2h response from fw */ 1234 COL_STATUS_INVALID_C2H_LEN , /* invalid coex offload c2h ack length, must >= 3 */ 1235 COL_STATUS_COEX_DATA_OVERFLOW , /* coex returned length over the c2h ack length. */ 1236 COL_STATUS_MAX 1237 } COL_H2C_STATUS, *PCOL_H2C_STATUS; 1238 1239 #define COL_MAX_H2C_REQ_NUM 16 1240 1241 #define COL_H2C_BUF_LEN 20 1242 typedef enum _COL_OPCODE { 1243 COL_OP_WIFI_STATUS_NOTIFY = 0x0, 1244 COL_OP_WIFI_PROGRESS_NOTIFY = 0x1, 1245 COL_OP_WIFI_INFO_NOTIFY = 0x2, 1246 COL_OP_WIFI_POWER_STATE_NOTIFY = 0x3, 1247 COL_OP_SET_CONTROL = 0x4, 1248 COL_OP_GET_CONTROL = 0x5, 1249 COL_OP_WIFI_OPCODE_MAX 1250 } COL_OPCODE, *PCOL_OPCODE; 1251 1252 typedef enum _COL_IND_TYPE { 1253 COL_IND_BT_INFO = 0x0, 1254 COL_IND_PSTDMA = 0x1, 1255 COL_IND_LIMITED_TX_RX = 0x2, 1256 COL_IND_COEX_TABLE = 0x3, 1257 COL_IND_REQ = 0x4, 1258 COL_IND_MAX 1259 } COL_IND_TYPE, *PCOL_IND_TYPE; 1260 1261 typedef struct _COL_SINGLE_H2C_RECORD { 1262 u1Byte h2c_buf[COL_H2C_BUF_LEN]; /* the latest sent h2c buffer */ 1263 u4Byte h2c_len; 1264 u1Byte c2h_ack_buf[COL_H2C_BUF_LEN]; /* the latest received c2h buffer */ 1265 u4Byte c2h_ack_len; 1266 u4Byte count; /* the total number of the sent h2c command */ 1267 u4Byte status[COL_STATUS_MAX]; /* the c2h status for the sent h2c command */ 1268 } COL_SINGLE_H2C_RECORD, *PCOL_SINGLE_H2C_RECORD; 1269 1270 typedef struct _COL_SINGLE_C2H_IND_RECORD { 1271 u1Byte ind_buf[COL_H2C_BUF_LEN]; /* the latest received c2h indication buffer */ 1272 u4Byte ind_len; 1273 u4Byte count; /* the total number of the rcvd c2h indication */ 1274 u4Byte status[COL_STATUS_MAX]; /* the c2h indication verified status */ 1275 } COL_SINGLE_C2H_IND_RECORD, *PCOL_SINGLE_C2H_IND_RECORD; 1276 1277 typedef struct _BTC_OFFLOAD { 1278 /* H2C command related */ 1279 u1Byte h2c_req_num; 1280 u4Byte cnt_h2c_sent; 1281 COL_SINGLE_H2C_RECORD h2c_record[COL_OP_WIFI_OPCODE_MAX]; 1282 1283 /* C2H Ack related */ 1284 u4Byte cnt_c2h_ack; 1285 u4Byte status[COL_STATUS_MAX]; 1286 struct completion c2h_event[COL_MAX_H2C_REQ_NUM]; /* for req_num = 1~COL_MAX_H2C_REQ_NUM */ 1287 u1Byte c2h_ack_buf[COL_MAX_H2C_REQ_NUM][COL_H2C_BUF_LEN]; 1288 u1Byte c2h_ack_len[COL_MAX_H2C_REQ_NUM]; 1289 1290 /* C2H Indication related */ 1291 u4Byte cnt_c2h_ind; 1292 COL_SINGLE_C2H_IND_RECORD c2h_ind_record[COL_IND_MAX]; 1293 u4Byte c2h_ind_status[COL_STATUS_MAX]; 1294 u1Byte c2h_ind_buf[COL_H2C_BUF_LEN]; 1295 u1Byte c2h_ind_len; 1296 } BTC_OFFLOAD, *PBTC_OFFLOAD; 1297 extern BTC_OFFLOAD gl_coex_offload; 1298 /*==================================================*/ 1299 1300 /* BTC_LINK_MODE same as WIFI_LINK_MODE */ 1301 typedef enum _BTC_LINK_MODE{ 1302 BTC_LINK_NONE=0, 1303 BTC_LINK_ONLY_GO, 1304 BTC_LINK_ONLY_GC, 1305 BTC_LINK_ONLY_STA, 1306 BTC_LINK_ONLY_AP, 1307 BTC_LINK_2G_MCC_GO_STA, 1308 BTC_LINK_5G_MCC_GO_STA, 1309 BTC_LINK_25G_MCC_GO_STA, 1310 BTC_LINK_2G_MCC_GC_STA, 1311 BTC_LINK_5G_MCC_GC_STA, 1312 BTC_LINK_25G_MCC_GC_STA, 1313 BTC_LINK_2G_SCC_GO_STA, 1314 BTC_LINK_5G_SCC_GO_STA, 1315 BTC_LINK_2G_SCC_GC_STA, 1316 BTC_LINK_5G_SCC_GC_STA, 1317 BTC_LINK_MAX=30 1318 }BTC_LINK_MODE, *PBTC_LINK_MODE; 1319 1320 1321 struct btc_wifi_link_info { 1322 BTC_LINK_MODE link_mode; /* LinkMode */ 1323 u1Byte sta_center_channel; /* StaCenterChannel */ 1324 u1Byte p2p_center_channel; /* P2PCenterChannel */ 1325 BOOLEAN bany_client_join_go; 1326 BOOLEAN benable_noa; 1327 BOOLEAN bhotspot; 1328 }; 1329 1330 #if 0 1331 typedef enum _BTC_MULTI_PORT_TDMA_MODE { 1332 BTC_MULTI_PORT_TDMA_MODE_NONE=0, 1333 BTC_MULTI_PORT_TDMA_MODE_2G_SCC_GO, 1334 BTC_MULTI_PORT_TDMA_MODE_2G_P2P_GO, 1335 BTC_MULTI_PORT_TDMA_MODE_2G_HOTSPOT_GO 1336 } BTC_MULTI_PORT_TDMA_MODE, *PBTC_MULTI_PORT_TDMA_MODE; 1337 1338 typedef struct btc_multi_port_tdma_info { 1339 BTC_MULTI_PORT_TDMA_MODE btc_multi_port_tdma_mode; 1340 u1Byte start_time_from_bcn; 1341 u1Byte bt_time; 1342 } BTC_MULTI_PORT_TDMA_INFO, *PBTC_MULTI_PORT_TDMA_INFO; 1343 #endif 1344 1345 typedef enum _btc_concurrent_mode { 1346 btc_concurrent_mode_none = 0, 1347 btc_concurrent_mode_2g_go_miracast, 1348 btc_concurrent_mode_2g_go_hotspot, 1349 btc_concurrent_mode_2g_scc_go_miracast_sta, 1350 btc_concurrent_mode_2g_scc_go_hotspot_sta, 1351 btc_concurrent_mode_2g_gc, 1352 } btc_concurrent_mode, *pbtc_concurrent_mode; 1353 1354 struct btc_concurrent_setting { 1355 btc_concurrent_mode btc_concurrent_mode; 1356 u1Byte start_time_from_bcn; 1357 u1Byte bt_time; 1358 }; 1359 1360 typedef u1Byte 1361 (*BFP_BTC_R1)( 1362 IN PVOID pBtcContext, 1363 IN u4Byte RegAddr 1364 ); 1365 typedef u2Byte 1366 (*BFP_BTC_R2)( 1367 IN PVOID pBtcContext, 1368 IN u4Byte RegAddr 1369 ); 1370 typedef u4Byte 1371 (*BFP_BTC_R4)( 1372 IN PVOID pBtcContext, 1373 IN u4Byte RegAddr 1374 ); 1375 typedef VOID 1376 (*BFP_BTC_W1)( 1377 IN PVOID pBtcContext, 1378 IN u4Byte RegAddr, 1379 IN u1Byte Data 1380 ); 1381 typedef VOID 1382 (*BFP_BTC_W1_BIT_MASK)( 1383 IN PVOID pBtcContext, 1384 IN u4Byte regAddr, 1385 IN u1Byte bitMask, 1386 IN u1Byte data1b 1387 ); 1388 typedef VOID 1389 (*BFP_BTC_W2)( 1390 IN PVOID pBtcContext, 1391 IN u4Byte RegAddr, 1392 IN u2Byte Data 1393 ); 1394 typedef VOID 1395 (*BFP_BTC_W4)( 1396 IN PVOID pBtcContext, 1397 IN u4Byte RegAddr, 1398 IN u4Byte Data 1399 ); 1400 typedef VOID 1401 (*BFP_BTC_LOCAL_REG_W1)( 1402 IN PVOID pBtcContext, 1403 IN u4Byte RegAddr, 1404 IN u1Byte Data 1405 ); 1406 typedef u4Byte 1407 (*BFP_BTC_R_LINDIRECT)( 1408 IN PVOID pBtcContext, 1409 IN u2Byte reg_addr 1410 ); 1411 typedef u2Byte 1412 (*BFP_BTC_R_SCBD)( 1413 IN PVOID pBtcContext, 1414 IN pu2Byte score_board_val 1415 ); 1416 typedef VOID 1417 (*BFP_BTC_W_SCBD)( 1418 IN PVOID pBtcContext, 1419 IN u2Byte bitpos, 1420 IN BOOLEAN state 1421 ); 1422 typedef VOID 1423 (*BFP_BTC_W_LINDIRECT)( 1424 IN PVOID pBtcContext, 1425 IN u2Byte reg_addr, 1426 IN u4Byte bit_mask, 1427 IN u4Byte reg_value 1428 ); 1429 typedef VOID 1430 (*BFP_BTC_SET_BB_REG)( 1431 IN PVOID pBtcContext, 1432 IN u4Byte RegAddr, 1433 IN u4Byte BitMask, 1434 IN u4Byte Data 1435 ); 1436 typedef u4Byte 1437 (*BFP_BTC_GET_BB_REG)( 1438 IN PVOID pBtcContext, 1439 IN u4Byte RegAddr, 1440 IN u4Byte BitMask 1441 ); 1442 typedef VOID 1443 (*BFP_BTC_SET_RF_REG)( 1444 IN PVOID pBtcContext, 1445 IN enum rf_path eRFPath, 1446 IN u4Byte RegAddr, 1447 IN u4Byte BitMask, 1448 IN u4Byte Data 1449 ); 1450 typedef u4Byte 1451 (*BFP_BTC_GET_RF_REG)( 1452 IN PVOID pBtcContext, 1453 IN enum rf_path eRFPath, 1454 IN u4Byte RegAddr, 1455 IN u4Byte BitMask 1456 ); 1457 typedef VOID 1458 (*BFP_BTC_FILL_H2C)( 1459 IN PVOID pBtcContext, 1460 IN u1Byte elementId, 1461 IN u4Byte cmdLen, 1462 IN pu1Byte pCmdBuffer 1463 ); 1464 1465 typedef BOOLEAN 1466 (*BFP_BTC_GET)( 1467 IN PVOID pBtCoexist, 1468 IN u1Byte getType, 1469 OUT PVOID pOutBuf 1470 ); 1471 1472 typedef BOOLEAN 1473 (*BFP_BTC_SET)( 1474 IN PVOID pBtCoexist, 1475 IN u1Byte setType, 1476 OUT PVOID pInBuf 1477 ); 1478 typedef u2Byte 1479 (*BFP_BTC_SET_BT_REG)( 1480 IN PVOID pBtcContext, 1481 IN u1Byte regType, 1482 IN u4Byte offset, 1483 IN u4Byte value 1484 ); 1485 typedef BOOLEAN 1486 (*BFP_BTC_SET_BT_ANT_DETECTION)( 1487 IN PVOID pBtcContext, 1488 IN u1Byte txTime, 1489 IN u1Byte btChnl 1490 ); 1491 1492 typedef BOOLEAN 1493 (*BFP_BTC_SET_BT_TRX_MASK)( 1494 IN PVOID pBtcContext, 1495 IN u1Byte bt_trx_mask 1496 ); 1497 1498 typedef u4Byte 1499 (*BFP_BTC_GET_BT_REG)( 1500 IN PVOID pBtcContext, 1501 IN u1Byte regType, 1502 IN u4Byte offset 1503 ); 1504 typedef VOID 1505 (*BFP_BTC_DISP_DBG_MSG)( 1506 IN PVOID pBtCoexist, 1507 IN u1Byte dispType 1508 ); 1509 1510 typedef COL_H2C_STATUS 1511 (*BFP_BTC_COEX_H2C_PROCESS)( 1512 IN PVOID pBtCoexist, 1513 IN u1Byte opcode, 1514 IN u1Byte opcode_ver, 1515 IN pu1Byte ph2c_par, 1516 IN u1Byte h2c_par_len 1517 ); 1518 1519 typedef u4Byte 1520 (*BFP_BTC_GET_BT_COEX_SUPPORTED_FEATURE)( 1521 IN PVOID pBtcContext 1522 ); 1523 1524 typedef u4Byte 1525 (*BFP_BTC_GET_BT_COEX_SUPPORTED_VERSION)( 1526 IN PVOID pBtcContext 1527 ); 1528 1529 typedef u4Byte 1530 (*BFP_BTC_GET_PHYDM_VERSION)( 1531 IN PVOID pBtcContext 1532 ); 1533 1534 typedef u1Byte 1535 (*BFP_BTC_SET_TIMER) ( 1536 IN PVOID pBtcContext, 1537 IN u4Byte type, 1538 IN u4Byte val 1539 ); 1540 1541 typedef u4Byte 1542 (*BFP_BTC_SET_ATOMIC) ( 1543 IN PVOID pBtcContext, 1544 IN pu4Byte target, 1545 IN u4Byte val 1546 ); 1547 1548 1549 typedef VOID 1550 (*BTC_PHYDM_MODIFY_RA_PCR_THRESHLOD)( 1551 IN PVOID pDM_Odm, 1552 IN u1Byte RA_offset_direction, 1553 IN u1Byte RA_threshold_offset 1554 ); 1555 1556 typedef u4Byte 1557 (*BTC_PHYDM_CMNINFOQUERY)( 1558 IN PVOID pDM_Odm, 1559 IN u1Byte info_type 1560 ); 1561 1562 typedef VOID 1563 (*BTC_REDUCE_WL_TX_POWER)( 1564 IN PVOID pDM_Odm, 1565 IN s1Byte tx_power 1566 ); 1567 1568 typedef VOID 1569 (*BTC_PHYDM_MODIFY_ANTDIV_HWSW)( 1570 IN PVOID pDM_Odm, 1571 IN u1Byte type 1572 ); 1573 1574 typedef u1Byte 1575 (*BFP_BTC_GET_ANT_DET_VAL_FROM_BT)( 1576 1577 IN PVOID pBtcContext 1578 ); 1579 1580 typedef u1Byte 1581 (*BFP_BTC_GET_BLE_SCAN_TYPE_FROM_BT)( 1582 IN PVOID pBtcContext 1583 ); 1584 1585 typedef u4Byte 1586 (*BFP_BTC_GET_BLE_SCAN_PARA_FROM_BT)( 1587 IN PVOID pBtcContext, 1588 IN u1Byte scanType 1589 ); 1590 1591 typedef BOOLEAN 1592 (*BFP_BTC_GET_BT_AFH_MAP_FROM_BT)( 1593 IN PVOID pBtcContext, 1594 IN u1Byte mapType, 1595 OUT pu1Byte afhMap 1596 ); 1597 1598 struct btc_bt_info { 1599 boolean bt_disabled; 1600 boolean bt_enable_disable_change; 1601 u8 rssi_adjust_for_agc_table_on; 1602 u8 rssi_adjust_for_1ant_coex_type; 1603 boolean pre_bt_ctrl_agg_buf_size; 1604 boolean bt_ctrl_agg_buf_size; 1605 boolean pre_reject_agg_pkt; 1606 boolean reject_agg_pkt; 1607 boolean increase_scan_dev_num; 1608 boolean bt_tx_rx_mask; 1609 u8 pre_agg_buf_size; 1610 u8 agg_buf_size; 1611 boolean bt_busy; 1612 boolean limited_dig; 1613 u16 bt_hci_ver; 1614 u32 bt_real_fw_ver; 1615 u32 get_bt_fw_ver_cnt; 1616 u32 bt_get_fw_ver; 1617 boolean miracast_plus_bt; 1618 1619 boolean bt_disable_low_pwr; 1620 1621 boolean bt_ctrl_lps; 1622 boolean bt_lps_on; 1623 boolean force_to_roam; /* for 1Ant solution */ 1624 u8 lps_val; 1625 u8 rpwm_val; 1626 u32 ra_mask; 1627 }; 1628 1629 struct btc_stack_info { 1630 boolean profile_notified; 1631 u16 hci_version; /* stack hci version */ 1632 u8 num_of_link; 1633 boolean bt_link_exist; 1634 boolean sco_exist; 1635 boolean acl_exist; 1636 boolean a2dp_exist; 1637 boolean hid_exist; 1638 u8 num_of_hid; 1639 boolean pan_exist; 1640 boolean unknown_acl_exist; 1641 s8 min_bt_rssi; 1642 }; 1643 1644 struct btc_bt_link_info { 1645 boolean bt_link_exist; 1646 boolean bt_hi_pri_link_exist; 1647 boolean sco_exist; 1648 boolean sco_only; 1649 boolean a2dp_exist; 1650 boolean a2dp_only; 1651 boolean hid_exist; 1652 boolean hid_only; 1653 boolean pan_exist; 1654 boolean pan_only; 1655 boolean slave_role; 1656 boolean acl_busy; 1657 }; 1658 1659 #ifdef CONFIG_RF4CE_COEXIST 1660 struct btc_rf4ce_info { 1661 u8 link_state; 1662 }; 1663 #endif 1664 1665 struct btc_statistics { 1666 u32 cnt_bind; 1667 u32 cnt_power_on; 1668 u32 cnt_pre_load_firmware; 1669 u32 cnt_init_hw_config; 1670 u32 cnt_init_coex_dm; 1671 u32 cnt_ips_notify; 1672 u32 cnt_lps_notify; 1673 u32 cnt_scan_notify; 1674 u32 cnt_connect_notify; 1675 u32 cnt_media_status_notify; 1676 u32 cnt_specific_packet_notify; 1677 u32 cnt_bt_info_notify; 1678 u32 cnt_rf_status_notify; 1679 u32 cnt_periodical; 1680 u32 cnt_coex_dm_switch; 1681 u32 cnt_stack_operation_notify; 1682 u32 cnt_dbg_ctrl; 1683 u32 cnt_rate_id_notify; 1684 u32 cnt_halt_notify; 1685 u32 cnt_pnp_notify; 1686 }; 1687 1688 struct btc_coexist { 1689 BOOLEAN bBinded; /*make sure only one adapter can bind the data context*/ 1690 PVOID Adapter; /*default adapter*/ 1691 struct btc_board_info board_info; 1692 struct btc_bt_info bt_info; /*some bt info referenced by non-bt module*/ 1693 struct btc_stack_info stack_info; 1694 struct btc_bt_link_info bt_link_info; 1695 struct btc_wifi_link_info wifi_link_info; 1696 struct btc_wifi_link_info_ext wifi_link_info_ext; 1697 struct btc_coex_dm coex_dm; 1698 struct btc_coex_sta coex_sta; 1699 struct btc_rfe_type rfe_type; 1700 const struct btc_chip_para *chip_para; 1701 1702 #ifdef CONFIG_RF4CE_COEXIST 1703 struct btc_rf4ce_info rf4ce_info; 1704 #endif 1705 BTC_CHIP_INTERFACE chip_interface; 1706 PVOID odm_priv; 1707 1708 BOOLEAN initilized; 1709 BOOLEAN stop_coex_dm; 1710 BOOLEAN manual_control; 1711 BOOLEAN bdontenterLPS; 1712 pu1Byte cli_buf; 1713 struct btc_statistics statistics; 1714 u1Byte pwrModeVal[10]; 1715 BOOLEAN dbg_mode; 1716 BOOLEAN auto_report; 1717 u8 chip_type; 1718 BOOLEAN wl_rf_state_off; 1719 1720 /* function pointers */ 1721 /* io related */ 1722 BFP_BTC_R1 btc_read_1byte; 1723 BFP_BTC_W1 btc_write_1byte; 1724 BFP_BTC_W1_BIT_MASK btc_write_1byte_bitmask; 1725 BFP_BTC_R2 btc_read_2byte; 1726 BFP_BTC_W2 btc_write_2byte; 1727 BFP_BTC_R4 btc_read_4byte; 1728 BFP_BTC_W4 btc_write_4byte; 1729 BFP_BTC_LOCAL_REG_W1 btc_write_local_reg_1byte; 1730 BFP_BTC_R_LINDIRECT btc_read_linderct; 1731 BFP_BTC_W_LINDIRECT btc_write_linderct; 1732 BFP_BTC_R_SCBD btc_read_scbd; 1733 BFP_BTC_W_SCBD btc_write_scbd; 1734 /* read/write bb related */ 1735 BFP_BTC_SET_BB_REG btc_set_bb_reg; 1736 BFP_BTC_GET_BB_REG btc_get_bb_reg; 1737 1738 /* read/write rf related */ 1739 BFP_BTC_SET_RF_REG btc_set_rf_reg; 1740 BFP_BTC_GET_RF_REG btc_get_rf_reg; 1741 1742 /* fill h2c related */ 1743 BFP_BTC_FILL_H2C btc_fill_h2c; 1744 /* other */ 1745 BFP_BTC_DISP_DBG_MSG btc_disp_dbg_msg; 1746 /* normal get/set related */ 1747 BFP_BTC_GET btc_get; 1748 BFP_BTC_SET btc_set; 1749 1750 BFP_BTC_GET_BT_REG btc_get_bt_reg; 1751 BFP_BTC_SET_BT_REG btc_set_bt_reg; 1752 1753 BFP_BTC_SET_BT_ANT_DETECTION btc_set_bt_ant_detection; 1754 1755 BFP_BTC_COEX_H2C_PROCESS btc_coex_h2c_process; 1756 BFP_BTC_SET_BT_TRX_MASK btc_set_bt_trx_mask; 1757 BFP_BTC_GET_BT_COEX_SUPPORTED_FEATURE btc_get_bt_coex_supported_feature; 1758 BFP_BTC_GET_BT_COEX_SUPPORTED_VERSION btc_get_bt_coex_supported_version; 1759 BFP_BTC_GET_PHYDM_VERSION btc_get_bt_phydm_version; 1760 BFP_BTC_SET_TIMER btc_set_timer; 1761 BFP_BTC_SET_ATOMIC btc_set_atomic; 1762 BTC_PHYDM_MODIFY_RA_PCR_THRESHLOD btc_phydm_modify_RA_PCR_threshold; 1763 BTC_PHYDM_CMNINFOQUERY btc_phydm_query_PHY_counter; 1764 BTC_REDUCE_WL_TX_POWER btc_reduce_wl_tx_power; 1765 BTC_PHYDM_MODIFY_ANTDIV_HWSW btc_phydm_modify_antdiv_hwsw; 1766 BFP_BTC_GET_ANT_DET_VAL_FROM_BT btc_get_ant_det_val_from_bt; 1767 BFP_BTC_GET_BLE_SCAN_TYPE_FROM_BT btc_get_ble_scan_type_from_bt; 1768 BFP_BTC_GET_BLE_SCAN_PARA_FROM_BT btc_get_ble_scan_para_from_bt; 1769 BFP_BTC_GET_BT_AFH_MAP_FROM_BT btc_get_bt_afh_map_from_bt; 1770 1771 union { 1772 #ifdef CONFIG_RTL8822B 1773 struct coex_dm_8822b_1ant coex_dm_8822b_1ant; 1774 struct coex_dm_8822b_2ant coex_dm_8822b_2ant; 1775 #endif /* 8822B */ 1776 #ifdef CONFIG_RTL8821C 1777 struct coex_dm_8821c_1ant coex_dm_8821c_1ant; 1778 struct coex_dm_8821c_2ant coex_dm_8821c_2ant; 1779 #endif /* 8821C */ 1780 #ifdef CONFIG_RTL8723D 1781 struct coex_dm_8723d_1ant coex_dm_8723d_1ant; 1782 struct coex_dm_8723d_2ant coex_dm_8723d_2ant; 1783 #endif /* 8723D */ 1784 }; 1785 1786 union { 1787 #ifdef CONFIG_RTL8822B 1788 struct coex_sta_8822b_1ant coex_sta_8822b_1ant; 1789 struct coex_sta_8822b_2ant coex_sta_8822b_2ant; 1790 #endif /* 8822B */ 1791 #ifdef CONFIG_RTL8821C 1792 struct coex_sta_8821c_1ant coex_sta_8821c_1ant; 1793 struct coex_sta_8821c_2ant coex_sta_8821c_2ant; 1794 #endif /* 8821C */ 1795 #ifdef CONFIG_RTL8723D 1796 struct coex_sta_8723d_1ant coex_sta_8723d_1ant; 1797 struct coex_sta_8723d_2ant coex_sta_8723d_2ant; 1798 #endif /* 8723D */ 1799 }; 1800 1801 union { 1802 #ifdef CONFIG_RTL8822B 1803 struct rfe_type_8822b_1ant rfe_type_8822b_1ant; 1804 struct rfe_type_8822b_2ant rfe_type_8822b_2ant; 1805 #endif /* 8822B */ 1806 #ifdef CONFIG_RTL8821C 1807 struct rfe_type_8821c_1ant rfe_type_8821c_1ant; 1808 struct rfe_type_8821c_2ant rfe_type_8821c_2ant; 1809 #endif /* 8821C */ 1810 }; 1811 1812 union { 1813 #ifdef CONFIG_RTL8822B 1814 struct wifi_link_info_8822b_1ant wifi_link_info_8822b_1ant; 1815 struct wifi_link_info_8822b_2ant wifi_link_info_8822b_2ant; 1816 #endif /* 8822B */ 1817 #ifdef CONFIG_RTL8821C 1818 struct wifi_link_info_8821c_1ant wifi_link_info_8821c_1ant; 1819 struct wifi_link_info_8821c_2ant wifi_link_info_8821c_2ant; 1820 #endif /* 8821C */ 1821 }; 1822 1823 }; 1824 typedef struct btc_coexist *PBTC_COEXIST; 1825 1826 extern struct btc_coexist GLBtCoexist; 1827 1828 typedef void 1829 (*BFP_BTC_CHIP_SETUP)( 1830 IN PBTC_COEXIST pBtCoexist, 1831 IN u1Byte setType 1832 ); 1833 1834 struct btc_chip_para { 1835 const char *chip_name; 1836 u32 para_ver_date; 1837 u32 para_ver; 1838 u32 bt_desired_ver; 1839 boolean scbd_support; 1840 boolean mailbox_support; 1841 boolean lte_indirect_access; 1842 boolean new_scbd10_def; /* TRUE: 1:fix 2M(8822c) */ 1843 u8 indirect_type; /* 0:17xx, 1:7cx */ 1844 u8 pstdma_type; /* 0: LPSoff, 1:LPSon */ 1845 u8 bt_rssi_type; 1846 u8 ant_isolation; 1847 u8 rssi_tolerance; 1848 u8 rx_path_num; 1849 u8 wl_rssi_step_num; 1850 const u8 *wl_rssi_step; 1851 u8 bt_rssi_step_num; 1852 const u8 *bt_rssi_step; 1853 u8 table_sant_num; 1854 const struct btc_coex_table_para *table_sant; 1855 u8 table_nsant_num; 1856 const struct btc_coex_table_para *table_nsant; 1857 u8 tdma_sant_num; 1858 const struct btc_tdma_para *tdma_sant; 1859 u8 tdma_nsant_num; 1860 const struct btc_tdma_para *tdma_nsant; 1861 u8 wl_rf_para_tx_num; 1862 const struct btc_rf_para *wl_rf_para_tx; 1863 const struct btc_rf_para *wl_rf_para_rx; 1864 u8 bt_afh_span_bw20; 1865 u8 bt_afh_span_bw40; 1866 u8 afh_5g_num; 1867 const struct btc_5g_afh_map *afh_5g; 1868 BFP_BTC_CHIP_SETUP chip_setup; 1869 }; 1870 1871 BOOLEAN 1872 EXhalbtcoutsrc_InitlizeVariables( 1873 IN PVOID Adapter 1874 ); 1875 VOID 1876 EXhalbtcoutsrc_PowerOnSetting( 1877 IN PBTC_COEXIST pBtCoexist 1878 ); 1879 VOID 1880 EXhalbtcoutsrc_PreLoadFirmware( 1881 IN PBTC_COEXIST pBtCoexist 1882 ); 1883 VOID 1884 EXhalbtcoutsrc_InitHwConfig( 1885 IN PBTC_COEXIST pBtCoexist, 1886 IN BOOLEAN bWifiOnly 1887 ); 1888 VOID 1889 EXhalbtcoutsrc_InitCoexDm( 1890 IN PBTC_COEXIST pBtCoexist 1891 ); 1892 VOID 1893 EXhalbtcoutsrc_IpsNotify( 1894 IN PBTC_COEXIST pBtCoexist, 1895 IN u1Byte type 1896 ); 1897 VOID 1898 EXhalbtcoutsrc_LpsNotify( 1899 IN PBTC_COEXIST pBtCoexist, 1900 IN u1Byte type 1901 ); 1902 VOID 1903 EXhalbtcoutsrc_ScanNotify( 1904 IN PBTC_COEXIST pBtCoexist, 1905 IN u1Byte type 1906 ); 1907 VOID 1908 EXhalbtcoutsrc_SetAntennaPathNotify( 1909 IN PBTC_COEXIST pBtCoexist, 1910 IN u1Byte type 1911 ); 1912 VOID 1913 EXhalbtcoutsrc_ConnectNotify( 1914 IN PBTC_COEXIST pBtCoexist, 1915 IN u1Byte action 1916 ); 1917 VOID 1918 EXhalbtcoutsrc_MediaStatusNotify( 1919 IN PBTC_COEXIST pBtCoexist, 1920 IN RT_MEDIA_STATUS mediaStatus 1921 ); 1922 VOID 1923 EXhalbtcoutsrc_SpecificPacketNotify( 1924 IN PBTC_COEXIST pBtCoexist, 1925 IN u1Byte pktType 1926 ); 1927 VOID 1928 EXhalbtcoutsrc_BtInfoNotify( 1929 IN PBTC_COEXIST pBtCoexist, 1930 IN pu1Byte tmpBuf, 1931 IN u1Byte length 1932 ); 1933 VOID 1934 EXhalbtcoutsrc_RfStatusNotify( 1935 IN PBTC_COEXIST pBtCoexist, 1936 IN u1Byte type 1937 ); 1938 u4Byte 1939 EXhalbtcoutsrc_CoexTimerCheck( 1940 IN PBTC_COEXIST pBtCoexist 1941 ); 1942 u4Byte 1943 EXhalbtcoutsrc_WLStatusCheck( 1944 IN PBTC_COEXIST pBtCoexist 1945 ); 1946 VOID 1947 EXhalbtcoutsrc_WlFwDbgInfoNotify( 1948 IN PBTC_COEXIST pBtCoexist, 1949 IN pu1Byte tmpBuf, 1950 IN u1Byte length 1951 ); 1952 VOID 1953 EXhalbtcoutsrc_rx_rate_change_notify( 1954 IN PBTC_COEXIST pBtCoexist, 1955 IN BOOLEAN is_data_frame, 1956 IN u1Byte btc_rate_id 1957 ); 1958 VOID 1959 EXhalbtcoutsrc_StackOperationNotify( 1960 IN PBTC_COEXIST pBtCoexist, 1961 IN u1Byte type 1962 ); 1963 VOID 1964 EXhalbtcoutsrc_HaltNotify( 1965 IN PBTC_COEXIST pBtCoexist 1966 ); 1967 VOID 1968 EXhalbtcoutsrc_PnpNotify( 1969 IN PBTC_COEXIST pBtCoexist, 1970 IN u1Byte pnpState 1971 ); 1972 VOID 1973 EXhalbtcoutsrc_TimerNotify( 1974 IN PBTC_COEXIST pBtCoexist, 1975 IN u4Byte timer_type 1976 ); 1977 VOID 1978 EXhalbtcoutsrc_WLStatusChangeNotify( 1979 IN PBTC_COEXIST pBtCoexist, 1980 IN u4Byte change_type 1981 ); 1982 VOID 1983 EXhalbtcoutsrc_CoexDmSwitch( 1984 IN PBTC_COEXIST pBtCoexist 1985 ); 1986 VOID 1987 EXhalbtcoutsrc_Periodical( 1988 IN PBTC_COEXIST pBtCoexist 1989 ); 1990 VOID 1991 EXhalbtcoutsrc_DbgControl( 1992 IN PBTC_COEXIST pBtCoexist, 1993 IN u1Byte opCode, 1994 IN u1Byte opLen, 1995 IN pu1Byte pData 1996 ); 1997 VOID 1998 EXhalbtcoutsrc_AntennaDetection( 1999 IN PBTC_COEXIST pBtCoexist, 2000 IN u4Byte centFreq, 2001 IN u4Byte offset, 2002 IN u4Byte span, 2003 IN u4Byte seconds 2004 ); 2005 VOID 2006 EXhalbtcoutsrc_StackUpdateProfileInfo( 2007 VOID 2008 ); 2009 VOID 2010 EXhalbtcoutsrc_SetHciVersion( 2011 IN u2Byte hciVersion 2012 ); 2013 VOID 2014 EXhalbtcoutsrc_SetBtPatchVersion( 2015 IN u2Byte btHciVersion, 2016 IN u2Byte btPatchVersion 2017 ); 2018 VOID 2019 EXhalbtcoutsrc_UpdateMinBtRssi( 2020 IN s1Byte btRssi 2021 ); 2022 #if 0 2023 VOID 2024 EXhalbtcoutsrc_SetBtExist( 2025 IN BOOLEAN bBtExist 2026 ); 2027 #endif 2028 VOID 2029 EXhalbtcoutsrc_SetChipType( 2030 IN u1Byte chipType 2031 ); 2032 VOID 2033 EXhalbtcoutsrc_SetAntNum( 2034 IN u1Byte type, 2035 IN u1Byte antNum 2036 ); 2037 VOID 2038 EXhalbtcoutsrc_SetSingleAntPath( 2039 IN u1Byte singleAntPath 2040 ); 2041 VOID 2042 EXhalbtcoutsrc_DisplayBtCoexInfo( 2043 IN PBTC_COEXIST pBtCoexist 2044 ); 2045 VOID 2046 EXhalbtcoutsrc_DisplayAntDetection( 2047 IN PBTC_COEXIST pBtCoexist 2048 ); 2049 2050 #define MASKBYTE0 0xff 2051 #define MASKBYTE1 0xff00 2052 #define MASKBYTE2 0xff0000 2053 #define MASKBYTE3 0xff000000 2054 #define MASKHWORD 0xffff0000 2055 #define MASKLWORD 0x0000ffff 2056 #define MASKDWORD 0xffffffff 2057 #define MASK12BITS 0xfff 2058 #define MASKH4BITS 0xf0000000 2059 #define MASKOFDM_D 0xffc00000 2060 #define MASKCCK 0x3f3f3f3f 2061 2062 #endif 2063