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 16 #if (BT_SUPPORT == 1 && COEX_SUPPORT == 1) 17 18 #if (RTL8822B_SUPPORT == 1) 19 20 /* ******************************************* 21 * The following is for 8822B 1ANT BT Co-exist definition 22 * ********************************************/ 23 #define BT_INFO_8822B_1ANT_B_FTP BIT(7) 24 #define BT_INFO_8822B_1ANT_B_A2DP BIT(6) 25 #define BT_INFO_8822B_1ANT_B_HID BIT(5) 26 #define BT_INFO_8822B_1ANT_B_SCO_BUSY BIT(4) 27 #define BT_INFO_8822B_1ANT_B_ACL_BUSY BIT(3) 28 #define BT_INFO_8822B_1ANT_B_INQ_PAGE BIT(2) 29 #define BT_INFO_8822B_1ANT_B_SCO_ESCO BIT(1) 30 #define BT_INFO_8822B_1ANT_B_CONNECTION BIT(0) 31 32 #define BTC_RSSI_COEX_THRESH_TOL_8822B_1ANT 2 33 34 #define BT_8822B_1ANT_WIFI_NOISY_THRESH 150 /* max: 255 */ 35 #define BT_8822B_1ANT_DEFAULT_ISOLATION 15 /* unit: dB */ 36 37 enum bt_8822b_1ant_signal_state { 38 BT_8822B_1ANT_GNT_SET_TO_LOW = 0x0, 39 BT_8822B_1ANT_GNT_SET_TO_HIGH = 0x1, 40 BT_8822B_1ANT_GNT_SET_BY_HW = 0x2, 41 BT_8822B_1ANT_GNT_SET_MAX 42 }; 43 44 enum bt_8822b_1ant_path_ctrl_owner { 45 BT_8822B_1ANT_PCO_BTSIDE = 0x0, 46 BT_8822B_1ANT_PCO_WLSIDE = 0x1, 47 BT_8822B_1ANT_PCO_MAX 48 }; 49 50 enum bt_8822b_1ant_gnt_ctrl_type { 51 BT_8822B_1ANT_GNT_CTRL_BY_PTA = 0x0, 52 BT_8822B_1ANT_GNT_CTRL_BY_SW = 0x1, 53 BT_8822B_1ANT_GNT_CTRL_MAX 54 }; 55 56 enum bt_8822b_1ant_gnt_ctrl_block { 57 BT_8822B_1ANT_GNT_BLOCK_RFC_BB = 0x0, 58 BT_8822B_1ANT_GNT_BLOCK_RFC = 0x1, 59 BT_8822B_1ANT_GNT_BLOCK_BB = 0x2, 60 BT_8822B_1ANT_GNT_BLOCK_MAX 61 }; 62 63 enum bt_8822b_1ant_lte_coex_table_type { 64 BT_8822B_1ANT_CTT_WL_VS_LTE = 0x0, 65 BT_8822B_1ANT_CTT_BT_VS_LTE = 0x1, 66 BT_8822B_1ANT_CTT_MAX 67 }; 68 69 enum bt_8822b_1ant_lte_break_table_type { 70 BT_8822B_1ANT_LBTT_WL_BREAK_LTE = 0x0, 71 BT_8822B_1ANT_LBTT_BT_BREAK_LTE = 0x1, 72 BT_8822B_1ANT_LBTT_LTE_BREAK_WL = 0x2, 73 BT_8822B_1ANT_LBTT_LTE_BREAK_BT = 0x3, 74 BT_8822B_1ANT_LBTT_MAX 75 }; 76 77 enum bt_info_src_8822b_1ant { 78 BT_8822B_1ANT_INFO_SRC_WIFI_FW = 0x0, 79 BT_8822B_1ANT_INFO_SRC_BT_RSP = 0x1, 80 BT_8822B_1ANT_INFO_SRC_BT_ACT = 0x2, 81 BT_8822B_1ANT_INFO_SRC_BT_IQK = 0x3, 82 BT_8822B_1ANT_INFO_SRC_BT_SCBD = 0x4, 83 BT_8822B_1ANT_INFO_SRC_MAX 84 }; 85 86 enum bt_8822b_1ant_bt_status { 87 BT_8822B_1ANT_BSTATUS_NCON_IDLE = 0x0, 88 BT_8822B_1ANT_BSTATUS_CON_IDLE = 0x1, 89 BT_8822B_1ANT_BSTATUS_INQ_PAGE = 0x2, 90 BT_8822B_1ANT_BSTATUS_ACL_BUSY = 0x3, 91 BT_8822B_1ANT_BSTATUS_SCO_BUSY = 0x4, 92 BT_8822B_1ANT_BSTATUS_ACL_SCO_BUSY = 0x5, 93 BT_8822B_1ANT_BSTATUS_MAX 94 }; 95 96 enum bt_8822b_1ant_wifi_status { 97 BT_8822B_1ANT_WSTATUS_NCON_IDLE = 0x0, 98 BT_8822B_1ANT_WSTATUS_NCON_SCAN = 0x1, 99 BT_8822B_1ANT_WSTATUS_CON_SCAN = 0x2, 100 BT_8822B_1ANT_WSTATUS_CON_SPECPKT = 0x3, 101 BT_8822B_1ANT_WSTATUS_CON_IDLE = 0x4, 102 BT_8822B_1ANT_WSTATUS_CON_BUSY = 0x5, 103 BT_8822B_1ANT_WSTATUS_MAX 104 }; 105 106 enum bt_8822b_1ant_coex_algo { 107 BT_8822B_1ANT_COEX_UNDEFINED = 0x0, 108 BT_8822B_1ANT_COEX_SCO = 0x1, 109 BT_8822B_1ANT_COEX_HID = 0x2, 110 BT_8822B_1ANT_COEX_A2DP = 0x3, 111 BT_8822B_1ANT_COEX_A2DP_PANHS = 0x4, 112 BT_8822B_1ANT_COEX_PAN = 0x5, 113 BT_8822B_1ANT_COEX_PANHS = 0x6, 114 BT_8822B_1ANT_COEX_PAN_A2DP = 0x7, 115 BT_8822B_1ANT_COEX_PAN_HID = 0x8, 116 BT_8822B_1ANT_COEX_HID_A2DP_PAN = 0x9, 117 BT_8822B_1ANT_COEX_HID_A2DP = 0xa, 118 BT_8822B_1ANT_COEX_NOPROFILEBUSY = 0xb, 119 BT_8822B_1ANT_COEX_A2DPSINK = 0xc, 120 BT_8822B_1ANT_COEX_MAX 121 }; 122 123 enum bt_8822b_1ant_ext_ant_switch_type { 124 BT_8822B_1ANT_SWITCH_USE_SPDT = 0x0, 125 BT_8822B_1ANT_SWITCH_USE_SP3T = 0x1, 126 BT_8822B_1ANT_SWITCH_MAX 127 }; 128 129 enum bt_8822b_1ant_ext_ant_switch_ctrl_type { 130 BT_8822B_1ANT_CTRL_BY_BBSW = 0x0, 131 BT_8822B_1ANT_CTRL_BY_PTA = 0x1, 132 BT_8822B_1ANT_CTRL_BY_ANTDIV = 0x2, 133 BT_8822B_1ANT_CTRL_BY_MAC = 0x3, 134 BT_8822B_1ANT_CTRL_BY_BT = 0x4, 135 BT_8822B_1ANT_CTRL_BY_FW = 0x5, 136 BT_8822B_1ANT_CTRL_MAX 137 }; 138 139 enum bt_8822b_1ant_ext_ant_switch_pos_type { 140 BT_8822B_1ANT_TO_BT = 0x0, 141 BT_8822B_1ANT_TO_WLG = 0x1, 142 BT_8822B_1ANT_TO_WLA = 0x2, 143 BT_8822B_1ANT_TO_NOCARE = 0x3, 144 BT_8822B_1ANT_TO_S0WLG_S1BT = 0x4, 145 BT_8822B_1ANT_TO_MAX 146 }; 147 148 enum bt_8822b_1ant_phase { 149 BT_8822B_1ANT_PHASE_INIT = 0x0, 150 BT_8822B_1ANT_PHASE_WONLY = 0x1, 151 BT_8822B_1ANT_PHASE_WOFF = 0x2, 152 BT_8822B_1ANT_PHASE_2G = 0x3, 153 BT_8822B_1ANT_PHASE_5G = 0x4, 154 BT_8822B_1ANT_PHASE_BTMP = 0x5, 155 BT_8822B_1ANT_PHASE_POWERON = 0x6, 156 BT_8822B_1ANT_PHASE_2G_WL = 0x7, 157 BT_8822B_1ANT_PHASE_2G_BT = 0x8, 158 BT_8822B_1ANT_PHASE_MCC = 0x9, 159 BT_8822B_1ANT_PHASE_2G_WLBT = 0xa, /* GNT_BT/GNT_BT PTA */ 160 BT_8822B_1ANT_PHASE_2G_FREERUN = 0xb, /* GNT_BT/GNT_BT SW Hi*/ 161 BT_8822B_1ANT_PHASE_MAX 162 }; 163 164 /*ADD SCOREBOARD TO FIX BT LPS 32K ISSUE WHILE WL BUSY*/ 165 enum bt_8822b_1ant_scoreboard { 166 BT_8822B_1ANT_SCBD_ACTIVE = BIT(0), 167 BT_8822B_1ANT_SCBD_ONOFF = BIT(1), 168 BT_8822B_1ANT_SCBD_SCAN = BIT(2), 169 BT_8822B_1ANT_SCBD_UNDERTEST = BIT(3), 170 BT_8822B_1ANT_SCBD_RXGAIN = BIT(4), 171 BT_8822B_1ANT_SCBD_WLBUSY = BIT(6), 172 BT_8822B_1ANT_SCBD_EXTFEM = BIT(8), 173 BT_8822B_1ANT_SCBD_TDMA = BIT(9), 174 BT_8822B_1ANT_SCBD_CQDDR = BIT(10), 175 BT_8822B_1ANT_SCBD_ALL = 0xffff 176 }; 177 178 enum bt_8822b_1ant_RUNREASON { 179 BT_8822B_1ANT_RSN_2GSCANSTART = 0x0, 180 BT_8822B_1ANT_RSN_5GSCANSTART = 0x1, 181 BT_8822B_1ANT_RSN_SCANFINISH = 0x2, 182 BT_8822B_1ANT_RSN_2GSWITCHBAND = 0x3, 183 BT_8822B_1ANT_RSN_5GSWITCHBAND = 0x4, 184 BT_8822B_1ANT_RSN_2GCONSTART = 0x5, 185 BT_8822B_1ANT_RSN_5GCONSTART = 0x6, 186 BT_8822B_1ANT_RSN_2GCONFINISH = 0x7, 187 BT_8822B_1ANT_RSN_5GCONFINISH = 0x8, 188 BT_8822B_1ANT_RSN_2GMEDIA = 0x9, 189 BT_8822B_1ANT_RSN_5GMEDIA = 0xa, 190 BT_8822B_1ANT_RSN_MEDIADISCON = 0xb, 191 BT_8822B_1ANT_RSN_2GSPECIALPKT = 0xc, 192 BT_8822B_1ANT_RSN_5GSPECIALPKT = 0xd, 193 BT_8822B_1ANT_RSN_BTINFO = 0xe, 194 BT_8822B_1ANT_RSN_PERIODICAL = 0xf, 195 BT_8822B_1ANT_RSN_PNP = 0x10, 196 BT_8822B_1ANT_RSN_LPS = 0x11, 197 BT_8822B_1ANT_RSN_MAX 198 }; 199 200 enum bt_8822b_1ant_WL_LINK_MODE { 201 BT_8822B_1ANT_WLINK_2G1PORT = 0x0, 202 BT_8822B_1ANT_WLINK_2GMPORT = 0x1, 203 BT_8822B_1ANT_WLINK_25GMPORT = 0x2, 204 BT_8822B_1ANT_WLINK_5G = 0x3, 205 BT_8822B_1ANT_WLINK_2GGO = 0x4, 206 BT_8822B_1ANT_WLINK_2GGC = 0x5, 207 BT_8822B_1ANT_WLINK_BTMR = 0x6, 208 BT_8822B_1ANT_WLINK_MAX 209 }; 210 211 struct coex_dm_8822b_1ant { 212 /* hw setting */ 213 u32 cur_ant_pos_type; 214 /* fw mechanism */ 215 boolean cur_ignore_wlan_act; 216 217 u8 cur_ps_tdma; 218 u8 ps_tdma_para[5]; 219 boolean auto_tdma_adjust; 220 boolean cur_ps_tdma_on; 221 222 boolean cur_bt_auto_report; 223 u8 cur_lps; 224 u8 cur_rpwm; 225 226 u8 cur_bt_pwr_lvl; 227 u8 cur_wl_pwr_lvl; 228 229 /* sw mechanism */ 230 231 boolean cur_low_penalty_ra; 232 233 u32 cur_val0x6c0; 234 u32 cur_val0x6c4; 235 u32 cur_val0x6c8; 236 u8 cur_val0x6cc; 237 238 /* algorithm related */ 239 u8 cur_algorithm; 240 u8 bt_status; 241 u8 wifi_chnl_info[3]; 242 243 u32 arp_cnt; 244 245 u32 cur_switch_status; 246 247 boolean cur_agc_table_en; 248 u32 setting_tdma; 249 }; 250 251 struct coex_sta_8822b_1ant { 252 boolean bt_disabled; 253 boolean bt_link_exist; 254 boolean sco_exist; 255 boolean a2dp_exist; 256 boolean hid_exist; 257 boolean pan_exist; 258 boolean msft_mr_exist; 259 boolean bt_a2dp_active; 260 u8 num_of_profile; 261 262 boolean under_lps; 263 boolean under_ips; 264 u32 specific_pkt_period_cnt; 265 u32 high_priority_tx; 266 u32 high_priority_rx; 267 u32 low_priority_tx; 268 u32 low_priority_rx; 269 boolean is_hi_pri_rx_overhead; 270 s8 bt_rssi; 271 u8 pre_bt_rssi_state; 272 u8 pre_wifi_rssi_state[4]; 273 u8 bt_info_c2h[BT_8822B_1ANT_INFO_SRC_MAX][BTC_BTINFO_LENGTH_MAX]; 274 u32 bt_info_c2h_cnt[BT_8822B_1ANT_INFO_SRC_MAX]; 275 boolean bt_whck_test; 276 boolean c2h_bt_inquiry_page; 277 boolean c2h_bt_remote_name_req; 278 boolean c2h_bt_page; /* Add for win8.1 page out issue */ 279 boolean wifi_high_pri_task1; 280 boolean wifi_high_pri_task2; 281 282 u8 bt_info_lb2; 283 u8 bt_info_lb3; 284 u8 bt_info_hb0; 285 u8 bt_info_hb1; 286 u8 bt_info_hb2; 287 u8 bt_info_hb3; 288 289 u32 pop_event_cnt; 290 u8 scan_ap_num; 291 u8 bt_retry_cnt; 292 293 u32 crc_ok_cck; 294 u32 crc_ok_11g; 295 u32 crc_ok_11n; 296 u32 crc_ok_11n_vht; 297 298 u32 crc_err_cck; 299 u32 crc_err_11g; 300 u32 crc_err_11n; 301 u32 crc_err_11n_vht; 302 303 boolean cck_lock; 304 boolean cck_lock_ever; 305 boolean cck_lock_warn; 306 307 u8 coex_table_type; 308 309 boolean force_lps_ctrl; 310 311 boolean concurrent_rx_mode_on; 312 313 u16 score_board; 314 u8 isolation_btween_wb; /* 0~ 50 */ 315 316 u8 a2dp_bit_pool; 317 u8 kt_ver; 318 boolean acl_busy; 319 boolean bt_create_connection; 320 321 u32 bt_coex_supported_feature; 322 u32 bt_coex_supported_version; 323 324 u8 bt_ble_scan_type; 325 u32 bt_ble_scan_para[3]; 326 327 boolean run_time_state; 328 boolean freeze_coexrun_by_btinfo; 329 330 boolean is_A2DP_3M; 331 boolean voice_over_HOGP; 332 boolean bt_418_hid_exist; 333 u8 forbidden_slot; 334 u8 hid_busy_num; 335 u8 hid_pair_cnt; 336 337 u32 cnt_remote_name_req; 338 u32 cnt_setup_link; 339 u32 cnt_reinit; 340 u32 cnt_ign_wlan_act; 341 u32 cnt_page; 342 u32 cnt_role_switch; 343 u32 cnt_wl_fw_notify; 344 345 u16 bt_reg_vendor_ac; 346 u16 bt_reg_vendor_ae; 347 348 boolean is_setup_link; 349 u8 wl_noisy_level; 350 u32 gnt_error_cnt; 351 u8 bt_afh_map[10]; 352 u8 bt_relink_downcount; 353 boolean is_tdma_btautoslot; 354 355 u8 switch_band_notify_to; 356 357 boolean is_bt_multi_link; 358 boolean is_bt_a2dp_sink; 359 360 boolean is_set_ps_state_fail; 361 u8 cnt_set_ps_state_fail; 362 363 u8 wl_fw_dbg_info[10]; 364 u8 wl_rx_rate; 365 u8 wl_tx_rate; 366 u8 wl_rts_rx_rate; 367 u8 wl_center_channel; 368 u8 wl_tx_macid; 369 u8 wl_tx_retry_ratio; 370 371 boolean is_2g_freerun; 372 373 u16 score_board_WB; 374 boolean is_hid_rcu; 375 u8 bt_a2dp_vendor_id; 376 u32 bt_a2dp_device_name; 377 u32 bt_a2dp_flush_time; 378 boolean is_ble_scan_en; 379 380 boolean is_bt_opp_exist; 381 boolean gl_wifi_busy; 382 383 boolean is_mimo_ps; 384 u8 connect_ap_period_cnt; 385 boolean is_bt_reenable; 386 u8 cnt_bt_reenable; 387 boolean is_wifi_linkscan_process; 388 u8 wl_coex_mode; 389 390 u8 wl_pnp_wakeup_downcnt; 391 u32 coex_run_cnt; 392 boolean is_no_wl_5ms_extend; 393 394 u16 wl_0x42a_backup; 395 u32 wl_0x430_backup; 396 u32 wl_0x434_backup; 397 u8 wl_0x455_backup; 398 399 boolean wl_tx_limit_en; 400 boolean wl_ampdu_limit_en; 401 boolean wl_rxagg_limit_en; 402 u8 wl_rxagg_size; 403 u8 coex_run_reason; 404 405 u8 tdma_timer_base; 406 boolean wl_slot_toggle; 407 boolean wl_slot_toggle_change; /* if toggle to no-toggle */ 408 }; 409 410 struct rfe_type_8822b_1ant { 411 u8 rfe_module_type; 412 boolean ext_switch_exist; 413 u8 ext_switch_type; 414 /* iF 0: ANTSW(rfe_sel9)=0, ANTSWB(rfe_sel8)=1 => Ant to BT/5G */ 415 u8 ext_switch_polarity; 416 }; 417 418 struct wifi_link_info_8822b_1ant { 419 u8 num_of_active_port; 420 u32 port_connect_status; 421 boolean is_all_under_5g; 422 boolean is_mcc_25g; 423 boolean is_p2p_connected; 424 boolean is_connected; 425 }; 426 427 /* ******************************************* 428 * The following is interface which will notify coex module. 429 * ********************************************/ 430 void ex_halbtc8822b1ant_power_on_setting(struct btc_coexist *btc); 431 void ex_halbtc8822b1ant_pre_load_firmware(struct btc_coexist *btc); 432 void ex_halbtc8822b1ant_init_hw_config(struct btc_coexist *btc, 433 boolean wifi_only); 434 void ex_halbtc8822b1ant_init_coex_dm(struct btc_coexist *btc); 435 void ex_halbtc8822b1ant_ips_notify(struct btc_coexist *btc, u8 type); 436 void ex_halbtc8822b1ant_lps_notify(struct btc_coexist *btc, u8 type); 437 void ex_halbtc8822b1ant_scan_notify(struct btc_coexist *btc, u8 type); 438 void ex_halbtc8822b1ant_scan_notify_without_bt(struct btc_coexist *btc, 439 u8 type); 440 void ex_halbtc8822b1ant_switchband_notify(struct btc_coexist *btc, 441 u8 type); 442 void ex_halbtc8822b1ant_switchband_notify_without_bt(struct btc_coexist *btc, 443 u8 type); 444 void ex_halbtc8822b1ant_connect_notify(struct btc_coexist *btc, u8 type); 445 void ex_halbtc8822b1ant_media_status_notify(struct btc_coexist *btc, 446 u8 type); 447 void ex_halbtc8822b1ant_specific_packet_notify(struct btc_coexist *btc, 448 u8 type); 449 void ex_halbtc8822b1ant_bt_info_notify(struct btc_coexist *btc, 450 u8 *tmp_buf, u8 length); 451 void ex_halbtc8822b1ant_wl_fwdbginfo_notify(struct btc_coexist *btc, 452 u8 *tmp_buf, u8 length); 453 void ex_halbtc8822b1ant_rx_rate_change_notify(struct btc_coexist *btc, 454 BOOLEAN is_data_frame, 455 u8 btc_rate_id); 456 void ex_halbtc8822b1ant_tx_rate_change_notify(struct btc_coexist *btc, 457 u8 tx_rate, 458 u8 tx_retry_ratio, u8 macid); 459 void ex_halbtc8822b1ant_rf_status_notify(struct btc_coexist *btc, u8 type); 460 void ex_halbtc8822b1ant_halt_notify(struct btc_coexist *btc); 461 void ex_halbtc8822b1ant_pnp_notify(struct btc_coexist *btc, u8 pnp_state); 462 void ex_halbtc8822b1ant_score_board_status_notify(struct btc_coexist *btc, 463 u8 *tmp_buf, u8 length); 464 void ex_halbtc8822b1ant_coex_dm_reset(struct btc_coexist *btc); 465 void ex_halbtc8822b1ant_periodical(struct btc_coexist *btc); 466 void ex_halbtc8822b1ant_display_simple_coex_info(struct btc_coexist *btc); 467 void ex_halbtc8822b1ant_display_coex_info(struct btc_coexist *btc); 468 void ex_halbtc8822b1ant_dbg_control(struct btc_coexist *btc, u8 op_code, 469 u8 op_len, u8 *pdata); 470 471 #else 472 #define ex_halbtc8822b1ant_power_on_setting(btc) 473 #define ex_halbtc8822b1ant_pre_load_firmware(btc) 474 #define ex_halbtc8822b1ant_init_hw_config(btc, wifi_only) 475 #define ex_halbtc8822b1ant_init_coex_dm(btc) 476 #define ex_halbtc8822b1ant_ips_notify(btc, type) 477 #define ex_halbtc8822b1ant_lps_notify(btc, type) 478 #define ex_halbtc8822b1ant_scan_notify(btc, type) 479 #define ex_halbtc8822b1ant_scan_notify_without_bt(btc, type) 480 #define ex_halbtc8822b1ant_switchband_notify(btc, type) 481 #define ex_halbtc8822b1ant_switchband_notify_without_bt(btc, type) 482 #define ex_halbtc8822b1ant_connect_notify(btc, type) 483 #define ex_halbtc8822b1ant_media_status_notify(btc, type) 484 #define ex_halbtc8822b1ant_specific_packet_notify(btc, type) 485 #define ex_halbtc8822b1ant_bt_info_notify(btc, tmp_buf, length) 486 #define ex_halbtc8822b1ant_wl_fwdbginfo_notify(btc, tmp_buf, length) 487 #define ex_halbtc8822b1ant_rx_rate_change_notify(btc, is_data_frame, \ 488 btc_rate_id) 489 #define ex_halbtc8822b1ant_tx_rate_change_notify(btcoexist, tx_rate, \ 490 tx_retry_ratio, macid) 491 #define ex_halbtc8822b1ant_rf_status_notify(btc, type) 492 #define ex_halbtc8822b1ant_halt_notify(btc) 493 #define ex_halbtc8822b1ant_pnp_notify(btc, pnp_state) 494 #define ex_halbtc8822b1ant_score_board_status_notify(btc, tmp_buf, length) 495 #define ex_halbtc8822b1ant_coex_dm_reset(btc) 496 #define ex_halbtc8822b1ant_periodical(btc) 497 #define ex_halbtc8822b1ant_display_coex_info(btc) 498 #define ex_halbtc8822b1ant_dbg_control(btc, op_code, op_len, pdata) 499 #endif 500 #else 501 502 void 503 ex_halbtc8822b1ant_init_hw_config_without_bt(struct btc_coexist *btc); 504 void ex_halbtc8822b1ant_switch_band_without_bt(struct btc_coexist *btc, 505 boolean wifi_only_5g); 506 507 #endif 508