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