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