1*4882a593Smuzhiyun /****************************************************************************** 2*4882a593Smuzhiyun * 3*4882a593Smuzhiyun * Copyright(c) 2016 - 2017 Realtek Corporation. 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * This program is free software; you can redistribute it and/or modify it 6*4882a593Smuzhiyun * under the terms of version 2 of the GNU General Public License as 7*4882a593Smuzhiyun * published by the Free Software Foundation. 8*4882a593Smuzhiyun * 9*4882a593Smuzhiyun * This program is distributed in the hope that it will be useful, but WITHOUT 10*4882a593Smuzhiyun * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11*4882a593Smuzhiyun * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 12*4882a593Smuzhiyun * more details. 13*4882a593Smuzhiyun * 14*4882a593Smuzhiyun *****************************************************************************/ 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun #if (BT_SUPPORT == 1 && COEX_SUPPORT == 1) 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun #if (RTL8821C_SUPPORT == 1) 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun /* ******************************************* 21*4882a593Smuzhiyun * The following is for 8821C 2Ant BT Co-exist definition 22*4882a593Smuzhiyun * ******************************************* */ 23*4882a593Smuzhiyun #define BT_8821C_2ANT_COEX_DBG 0 24*4882a593Smuzhiyun #define BT_AUTO_REPORT_ONLY_8821C_2ANT 1 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun #define BT_INFO_8821C_2ANT_B_FTP BIT(7) 27*4882a593Smuzhiyun #define BT_INFO_8821C_2ANT_B_A2DP BIT(6) 28*4882a593Smuzhiyun #define BT_INFO_8821C_2ANT_B_HID BIT(5) 29*4882a593Smuzhiyun #define BT_INFO_8821C_2ANT_B_SCO_BUSY BIT(4) 30*4882a593Smuzhiyun #define BT_INFO_8821C_2ANT_B_ACL_BUSY BIT(3) 31*4882a593Smuzhiyun #define BT_INFO_8821C_2ANT_B_INQ_PAGE BIT(2) 32*4882a593Smuzhiyun #define BT_INFO_8821C_2ANT_B_SCO_ESCO BIT(1) 33*4882a593Smuzhiyun #define BT_INFO_8821C_2ANT_B_CONNECTION BIT(0) 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun #define BTC_RSSI_COEX_THRESH_TOL_8821C_2ANT 2 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun #define BT_8821C_2ANT_WIFI_RSSI_COEXSWITCH_THRES1 80 38*4882a593Smuzhiyun #define BT_8821C_2ANT_BT_RSSI_COEXSWITCH_THRES1 80 39*4882a593Smuzhiyun #define BT_8821C_2ANT_WIFI_RSSI_COEXSWITCH_THRES2 80 40*4882a593Smuzhiyun #define BT_8821C_2ANT_BT_RSSI_COEXSWITCH_THRES2 80 41*4882a593Smuzhiyun #define BT_8821C_2ANT_DEFAULT_ISOLATION 15 42*4882a593Smuzhiyun #define BT_8821C_2ANT_WIFI_MAX_TX_POWER 15 43*4882a593Smuzhiyun #define BT_8821C_2ANT_BT_MAX_TX_POWER 3 44*4882a593Smuzhiyun #define BT_8821C_2ANT_WIFI_SIR_THRES1 -15 45*4882a593Smuzhiyun #define BT_8821C_2ANT_WIFI_SIR_THRES2 -30 46*4882a593Smuzhiyun #define BT_8821C_2ANT_BT_SIR_THRES1 -15 47*4882a593Smuzhiyun #define BT_8821C_2ANT_BT_SIR_THRES2 -30 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun enum bt_8821c_2ant_signal_state { 50*4882a593Smuzhiyun BT_8821C_2ANT_GNT_SET_TO_LOW = 0x0, 51*4882a593Smuzhiyun BT_8821C_2ANT_GNT_SET_TO_HIGH = 0x1, 52*4882a593Smuzhiyun BT_8821C_2ANT_GNT_SET_BY_HW = 0x2, 53*4882a593Smuzhiyun BT_8821C_2ANT_GNT_SET_MAX 54*4882a593Smuzhiyun }; 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun enum bt_8821c_2ant_path_ctrl_owner { 57*4882a593Smuzhiyun BT_8821C_2ANT_PCO_BTSIDE = 0x0, 58*4882a593Smuzhiyun BT_8821C_2ANT_PCO_WLSIDE = 0x1, 59*4882a593Smuzhiyun BT_8821C_2ANT_PCO_MAX 60*4882a593Smuzhiyun }; 61*4882a593Smuzhiyun 62*4882a593Smuzhiyun enum bt_8821c_2ant_gnt_ctrl_type { 63*4882a593Smuzhiyun BT_8821C_2ANT_GNT_TYPE_CTRL_BY_PTA = 0x0, 64*4882a593Smuzhiyun BT_8821C_2ANT_GNT_TYPE_CTRL_BY_SW = 0x1, 65*4882a593Smuzhiyun BT_8821C_2ANT_GNT_TYPE_MAX 66*4882a593Smuzhiyun }; 67*4882a593Smuzhiyun 68*4882a593Smuzhiyun enum bt_8821c_2ant_gnt_ctrl_block { 69*4882a593Smuzhiyun BT_8821C_2ANT_GNT_BLOCK_RFC_BB = 0x0, 70*4882a593Smuzhiyun BT_8821C_2ANT_GNT_BLOCK_RFC = 0x1, 71*4882a593Smuzhiyun BT_8821C_2ANT_GNT_BLOCK_BB = 0x2, 72*4882a593Smuzhiyun BT_8821C_2ANT_GNT_BLOCK_MAX 73*4882a593Smuzhiyun }; 74*4882a593Smuzhiyun 75*4882a593Smuzhiyun enum bt_8821c_2ant_lte_coex_table_type { 76*4882a593Smuzhiyun BT_8821C_2ANT_CTT_WL_VS_LTE = 0x0, 77*4882a593Smuzhiyun BT_8821C_2ANT_CTT_BT_VS_LTE = 0x1, 78*4882a593Smuzhiyun BT_8821C_2ANT_CTT_MAX 79*4882a593Smuzhiyun }; 80*4882a593Smuzhiyun 81*4882a593Smuzhiyun enum bt_8821c_2ant_lte_break_table_type { 82*4882a593Smuzhiyun BT_8821C_2ANT_LBTT_WL_BREAK_LTE = 0x0, 83*4882a593Smuzhiyun BT_8821C_2ANT_LBTT_BT_BREAK_LTE = 0x1, 84*4882a593Smuzhiyun BT_8821C_2ANT_LBTT_LTE_BREAK_WL = 0x2, 85*4882a593Smuzhiyun BT_8821C_2ANT_LBTT_LTE_BREAK_BT = 0x3, 86*4882a593Smuzhiyun BT_8821C_2ANT_LBTT_MAX 87*4882a593Smuzhiyun }; 88*4882a593Smuzhiyun 89*4882a593Smuzhiyun enum bt_info_src_8821c_2ant { 90*4882a593Smuzhiyun BT_8821C_2ANT_INFO_SRC_WIFI_FW = 0x0, 91*4882a593Smuzhiyun BT_8821C_2ANT_INFO_SRC_BT_RSP = 0x1, 92*4882a593Smuzhiyun BT_8821C_2ANT_INFO_SRC_BT_ACT = 0x2, 93*4882a593Smuzhiyun BT_8821C_2ANT_INFO_SRC_MAX 94*4882a593Smuzhiyun }; 95*4882a593Smuzhiyun 96*4882a593Smuzhiyun enum bt_8821c_2ant_bt_status { 97*4882a593Smuzhiyun BT_8821C_2ANT_BSTATUS_NCON_IDLE = 0x0, 98*4882a593Smuzhiyun BT_8821C_2ANT_BSTATUS_CON_IDLE = 0x1, 99*4882a593Smuzhiyun BT_8821C_2ANT_BSTATUS_INQ_PAGE = 0x2, 100*4882a593Smuzhiyun BT_8821C_2ANT_BSTATUS_ACL_BUSY = 0x3, 101*4882a593Smuzhiyun BT_8821C_2ANT_BSTATUS_SCO_BUSY = 0x4, 102*4882a593Smuzhiyun BT_8821C_2ANT_BSTATUS_ACL_SCO_BUSY = 0x5, 103*4882a593Smuzhiyun BT_8821C_2ANT_BSTATUS_MAX 104*4882a593Smuzhiyun }; 105*4882a593Smuzhiyun 106*4882a593Smuzhiyun enum bt_8821c_2ant_coex_algo { 107*4882a593Smuzhiyun BT_8821C_2ANT_COEX_UNDEFINED = 0x0, 108*4882a593Smuzhiyun BT_8821C_2ANT_COEX_SCO = 0x1, 109*4882a593Smuzhiyun BT_8821C_2ANT_COEX_HID = 0x2, 110*4882a593Smuzhiyun BT_8821C_2ANT_COEX_A2DP = 0x3, 111*4882a593Smuzhiyun BT_8821C_2ANT_COEX_A2DP_PANHS = 0x4, 112*4882a593Smuzhiyun BT_8821C_2ANT_COEX_PAN = 0x5, 113*4882a593Smuzhiyun BT_8821C_2ANT_COEX_PANHS = 0x6, 114*4882a593Smuzhiyun BT_8821C_2ANT_COEX_PAN_A2DP = 0x7, 115*4882a593Smuzhiyun BT_8821C_2ANT_COEX_PAN_HID = 0x8, 116*4882a593Smuzhiyun BT_8821C_2ANT_COEX_HID_A2DP_PAN = 0x9, 117*4882a593Smuzhiyun BT_8821C_2ANT_COEX_HID_A2DP = 0xa, 118*4882a593Smuzhiyun BT_8821C_2ANT_COEX_NOPROFILEBUSY = 0xb, 119*4882a593Smuzhiyun BT_8821C_2ANT_COEX_A2DPSINK = 0xc, 120*4882a593Smuzhiyun BT_8821C_2ANT_COEX_MAX 121*4882a593Smuzhiyun }; 122*4882a593Smuzhiyun 123*4882a593Smuzhiyun enum bt_8821c_2ant_ext_ant_switch_type { 124*4882a593Smuzhiyun BT_8821C_2ANT_USE_DPDT = 0x0, 125*4882a593Smuzhiyun BT_8821C_2ANT_USE_SPDT = 0x1, 126*4882a593Smuzhiyun BT_8821C_2ANT_SWITCH_NONE = 0x2, 127*4882a593Smuzhiyun BT_8821C_2ANT_SWITCH_MAX 128*4882a593Smuzhiyun }; 129*4882a593Smuzhiyun 130*4882a593Smuzhiyun enum bt_8821c_2ant_ext_ant_switch_ctrl_type { 131*4882a593Smuzhiyun BT_8821C_2ANT_CTRL_BY_BBSW = 0x0, 132*4882a593Smuzhiyun BT_8821C_2ANT_CTRL_BY_PTA = 0x1, 133*4882a593Smuzhiyun BT_8821C_2ANT_CTRL_BY_ANTDIV = 0x2, 134*4882a593Smuzhiyun BT_8821C_2ANT_CTRL_BY_MAC = 0x3, 135*4882a593Smuzhiyun BT_8821C_2ANT_CTRL_BY_BT = 0x4, 136*4882a593Smuzhiyun BT_8821C_2ANT_CTRL_BY_FW = 0x5, 137*4882a593Smuzhiyun BT_8821C_2ANT_CTRL_MAX 138*4882a593Smuzhiyun }; 139*4882a593Smuzhiyun 140*4882a593Smuzhiyun enum bt_8821c_2ant_ext_ant_switch_pos_type { 141*4882a593Smuzhiyun BT_8821C_2ANT_TO_BT = 0x0, 142*4882a593Smuzhiyun BT_8821C_2ANT_TO_WLG = 0x1, 143*4882a593Smuzhiyun BT_8821C_2ANT_TO_WLA = 0x2, 144*4882a593Smuzhiyun BT_8821C_2ANT_TO_NOCARE = 0x3, 145*4882a593Smuzhiyun BT_8821C_2ANT_TO_MAX 146*4882a593Smuzhiyun }; 147*4882a593Smuzhiyun 148*4882a593Smuzhiyun enum bt_8821c_2ant_phase { 149*4882a593Smuzhiyun BT_8821C_2ANT_PHASE_INIT = 0x0, 150*4882a593Smuzhiyun BT_8821C_2ANT_PHASE_WONLY = 0x1, 151*4882a593Smuzhiyun BT_8821C_2ANT_PHASE_WOFF = 0x2, 152*4882a593Smuzhiyun BT_8821C_2ANT_PHASE_2G = 0x3, 153*4882a593Smuzhiyun BT_8821C_2ANT_PHASE_5G = 0x4, 154*4882a593Smuzhiyun BT_8821C_2ANT_PHASE_BTMP = 0x5, 155*4882a593Smuzhiyun BT_8821C_2ANT_PHASE_ANTDET = 0x6, 156*4882a593Smuzhiyun BT_8821C_2ANT_PHASE_POWERON = 0x7, 157*4882a593Smuzhiyun BT_8821C_2ANT_PHASE_MAX 158*4882a593Smuzhiyun }; 159*4882a593Smuzhiyun 160*4882a593Smuzhiyun enum bt_8821c_2ant_scoreboard { 161*4882a593Smuzhiyun BT_8821C_2ANT_SCBD_ACTIVE = BIT(0), 162*4882a593Smuzhiyun BT_8821C_2ANT_SCBD_ONOFF = BIT(1), 163*4882a593Smuzhiyun BT_8821C_2ANT_SCBD_SCAN = BIT(2), 164*4882a593Smuzhiyun BT_8821C_2ANT_SCBD_UNDERTEST = BIT(3), 165*4882a593Smuzhiyun BT_8821C_2ANT_SCBD_RXGAIN = BIT(4), 166*4882a593Smuzhiyun BT_8821C_2ANT_SCBD_WLBUSY = BIT(6), 167*4882a593Smuzhiyun BT_8821C_2ANT_SCBD_TDMA = BIT(9), 168*4882a593Smuzhiyun BT_8821C_2ANT_SCBD_BTCQDDR = BIT(10), 169*4882a593Smuzhiyun BT_8821C_2ANT_SCBD_ALL = 0xffff 170*4882a593Smuzhiyun }; 171*4882a593Smuzhiyun 172*4882a593Smuzhiyun enum bt_8821c_2ant_RUNREASON { 173*4882a593Smuzhiyun BT_8821C_2ANT_RSN_2GSCANSTART = 0x0, 174*4882a593Smuzhiyun BT_8821C_2ANT_RSN_5GSCANSTART = 0x1, 175*4882a593Smuzhiyun BT_8821C_2ANT_RSN_SCANFINISH = 0x2, 176*4882a593Smuzhiyun BT_8821C_2ANT_RSN_2GSWITCHBAND = 0x3, 177*4882a593Smuzhiyun BT_8821C_2ANT_RSN_5GSWITCHBAND = 0x4, 178*4882a593Smuzhiyun BT_8821C_2ANT_RSN_2GCONSTART = 0x5, 179*4882a593Smuzhiyun BT_8821C_2ANT_RSN_5GCONSTART = 0x6, 180*4882a593Smuzhiyun BT_8821C_2ANT_RSN_2GCONFINISH = 0x7, 181*4882a593Smuzhiyun BT_8821C_2ANT_RSN_5GCONFINISH = 0x8, 182*4882a593Smuzhiyun BT_8821C_2ANT_RSN_2GMEDIA = 0x9, 183*4882a593Smuzhiyun BT_8821C_2ANT_RSN_5GMEDIA = 0xa, 184*4882a593Smuzhiyun BT_8821C_2ANT_RSN_MEDIADISCON = 0xb, 185*4882a593Smuzhiyun BT_8821C_2ANT_RSN_2GSPECIALPKT = 0xc, 186*4882a593Smuzhiyun BT_8821C_2ANT_RSN_5GSPECIALPKT = 0xd, 187*4882a593Smuzhiyun BT_8821C_2ANT_RSN_BTINFO = 0xe, 188*4882a593Smuzhiyun BT_8821C_2ANT_RSN_PERIODICAL = 0xf, 189*4882a593Smuzhiyun BT_8821C_2ANT_RSN_PNP = 0x10, 190*4882a593Smuzhiyun BT_8821C_2ANT_RSN_LPS = 0x11, 191*4882a593Smuzhiyun BT_8821C_2ANT_RSN_MAX 192*4882a593Smuzhiyun }; 193*4882a593Smuzhiyun 194*4882a593Smuzhiyun enum bt_8821c_2ant_WL_LINK_MODE { 195*4882a593Smuzhiyun BT_8821C_2ANT_WLINK_2G1PORT = 0x0, 196*4882a593Smuzhiyun BT_8821C_2ANT_WLINK_2GMPORT = 0x1, 197*4882a593Smuzhiyun BT_8821C_2ANT_WLINK_25GMPORT = 0x2, 198*4882a593Smuzhiyun BT_8821C_2ANT_WLINK_5G = 0x3, 199*4882a593Smuzhiyun BT_8821C_2ANT_WLINK_2GGO = 0x4, 200*4882a593Smuzhiyun BT_8821C_2ANT_WLINK_BTMR = 0x5, 201*4882a593Smuzhiyun BT_8821C_2ANT_WLINK_MAX 202*4882a593Smuzhiyun }; 203*4882a593Smuzhiyun 204*4882a593Smuzhiyun struct coex_dm_8821c_2ant { 205*4882a593Smuzhiyun /* hw setting */ 206*4882a593Smuzhiyun u32 cur_ant_pos_type; 207*4882a593Smuzhiyun /* fw mechanism */ 208*4882a593Smuzhiyun 209*4882a593Smuzhiyun u8 cur_bt_pwr_lvl; 210*4882a593Smuzhiyun u8 cur_wl_pwr_lvl; 211*4882a593Smuzhiyun 212*4882a593Smuzhiyun boolean cur_ignore_wlan_act; 213*4882a593Smuzhiyun 214*4882a593Smuzhiyun u8 cur_ps_tdma; 215*4882a593Smuzhiyun u8 ps_tdma_para[5]; 216*4882a593Smuzhiyun boolean reset_tdma_adjust; 217*4882a593Smuzhiyun boolean cur_ps_tdma_on; 218*4882a593Smuzhiyun boolean cur_bt_auto_report; 219*4882a593Smuzhiyun 220*4882a593Smuzhiyun /* sw mechanism */ 221*4882a593Smuzhiyun boolean cur_low_penalty_ra; 222*4882a593Smuzhiyun 223*4882a593Smuzhiyun u32 cur_val0x6c0; 224*4882a593Smuzhiyun u32 cur_val0x6c4; 225*4882a593Smuzhiyun u32 cur_val0x6c8; 226*4882a593Smuzhiyun u8 cur_val0x6cc; 227*4882a593Smuzhiyun 228*4882a593Smuzhiyun /* algorithm related */ 229*4882a593Smuzhiyun u8 cur_algorithm; 230*4882a593Smuzhiyun u8 bt_status; 231*4882a593Smuzhiyun u8 wifi_chnl_info[3]; 232*4882a593Smuzhiyun 233*4882a593Smuzhiyun u8 cur_lps; 234*4882a593Smuzhiyun u8 cur_rpwm; 235*4882a593Smuzhiyun 236*4882a593Smuzhiyun u32 arp_cnt; 237*4882a593Smuzhiyun 238*4882a593Smuzhiyun u32 cur_ext_ant_switch_status; 239*4882a593Smuzhiyun 240*4882a593Smuzhiyun u8 cur_antdiv_type; 241*4882a593Smuzhiyun u32 setting_tdma; 242*4882a593Smuzhiyun }; 243*4882a593Smuzhiyun 244*4882a593Smuzhiyun struct coex_sta_8821c_2ant { 245*4882a593Smuzhiyun boolean bt_disabled; 246*4882a593Smuzhiyun boolean bt_link_exist; 247*4882a593Smuzhiyun boolean sco_exist; 248*4882a593Smuzhiyun boolean a2dp_exist; 249*4882a593Smuzhiyun boolean hid_exist; 250*4882a593Smuzhiyun boolean pan_exist; 251*4882a593Smuzhiyun boolean msft_mr_exist; 252*4882a593Smuzhiyun boolean bt_a2dp_active; 253*4882a593Smuzhiyun 254*4882a593Smuzhiyun boolean under_lps; 255*4882a593Smuzhiyun boolean under_ips; 256*4882a593Smuzhiyun u32 high_priority_tx; 257*4882a593Smuzhiyun u32 high_priority_rx; 258*4882a593Smuzhiyun u32 low_priority_tx; 259*4882a593Smuzhiyun u32 low_priority_rx; 260*4882a593Smuzhiyun boolean bt_ctr_ok; 261*4882a593Smuzhiyun boolean is_hi_pri_rx_overhead; 262*4882a593Smuzhiyun u8 bt_rssi; 263*4882a593Smuzhiyun u8 pre_bt_rssi_state; 264*4882a593Smuzhiyun u8 pre_wifi_rssi_state[4]; 265*4882a593Smuzhiyun u8 bt_info_c2h[BT_8821C_2ANT_INFO_SRC_MAX][BTC_BTINFO_LENGTH_MAX]; 266*4882a593Smuzhiyun u32 bt_info_c2h_cnt[BT_8821C_2ANT_INFO_SRC_MAX]; 267*4882a593Smuzhiyun boolean bt_whck_test; 268*4882a593Smuzhiyun boolean c2h_bt_inquiry_page; 269*4882a593Smuzhiyun boolean bt_inq_page_pre; 270*4882a593Smuzhiyun boolean bt_inq_page_remain; 271*4882a593Smuzhiyun boolean c2h_bt_remote_name_req; 272*4882a593Smuzhiyun 273*4882a593Smuzhiyun u8 bt_info_lb2; 274*4882a593Smuzhiyun u8 bt_info_lb3; 275*4882a593Smuzhiyun u8 bt_info_hb0; 276*4882a593Smuzhiyun u8 bt_info_hb1; 277*4882a593Smuzhiyun u8 bt_info_hb2; 278*4882a593Smuzhiyun u8 bt_info_hb3; 279*4882a593Smuzhiyun 280*4882a593Smuzhiyun u32 pop_event_cnt; 281*4882a593Smuzhiyun u8 scan_ap_num; 282*4882a593Smuzhiyun u8 bt_retry_cnt; 283*4882a593Smuzhiyun 284*4882a593Smuzhiyun u32 crc_ok_cck; 285*4882a593Smuzhiyun u32 crc_ok_11g; 286*4882a593Smuzhiyun u32 crc_ok_11n; 287*4882a593Smuzhiyun u32 crc_ok_11n_vht; 288*4882a593Smuzhiyun u32 crc_err_cck; 289*4882a593Smuzhiyun u32 crc_err_11g; 290*4882a593Smuzhiyun u32 crc_err_11n; 291*4882a593Smuzhiyun u32 crc_err_11n_vht; 292*4882a593Smuzhiyun u32 cnt_crcok_max_in_10s; 293*4882a593Smuzhiyun 294*4882a593Smuzhiyun boolean cck_lock; 295*4882a593Smuzhiyun boolean cck_lock_ever; 296*4882a593Smuzhiyun boolean cck_lock_warn; 297*4882a593Smuzhiyun 298*4882a593Smuzhiyun u8 coex_table_type; 299*4882a593Smuzhiyun boolean force_lps_ctrl; 300*4882a593Smuzhiyun 301*4882a593Smuzhiyun u8 dis_ver_info_cnt; 302*4882a593Smuzhiyun 303*4882a593Smuzhiyun u8 a2dp_bit_pool; 304*4882a593Smuzhiyun u8 kt_ver; 305*4882a593Smuzhiyun 306*4882a593Smuzhiyun boolean concurrent_rx_mode_on; 307*4882a593Smuzhiyun 308*4882a593Smuzhiyun u16 score_board; 309*4882a593Smuzhiyun u8 isolation_btween_wb; /* 0~ 50 */ 310*4882a593Smuzhiyun u8 wifi_coex_thres; 311*4882a593Smuzhiyun u8 bt_coex_thres; 312*4882a593Smuzhiyun u8 wifi_coex_thres2; 313*4882a593Smuzhiyun u8 bt_coex_thres2; 314*4882a593Smuzhiyun 315*4882a593Smuzhiyun u8 num_of_profile; 316*4882a593Smuzhiyun boolean acl_busy; 317*4882a593Smuzhiyun boolean bt_create_connection; 318*4882a593Smuzhiyun 319*4882a593Smuzhiyun boolean wifi_high_pri_task1; 320*4882a593Smuzhiyun boolean wifi_high_pri_task2; 321*4882a593Smuzhiyun 322*4882a593Smuzhiyun u32 specific_pkt_period_cnt; 323*4882a593Smuzhiyun u32 bt_coex_supported_feature; 324*4882a593Smuzhiyun u32 bt_coex_supported_version; 325*4882a593Smuzhiyun 326*4882a593Smuzhiyun u8 bt_ble_scan_type; 327*4882a593Smuzhiyun u32 bt_ble_scan_para[3]; 328*4882a593Smuzhiyun 329*4882a593Smuzhiyun boolean run_time_state; 330*4882a593Smuzhiyun boolean freeze_coexrun_by_btinfo; 331*4882a593Smuzhiyun 332*4882a593Smuzhiyun boolean is_A2DP_3M; 333*4882a593Smuzhiyun boolean voice_over_HOGP; 334*4882a593Smuzhiyun boolean bt_418_hid_exist; 335*4882a593Smuzhiyun boolean bt_ble_hid_exist; 336*4882a593Smuzhiyun u8 forbidden_slot; 337*4882a593Smuzhiyun u8 hid_busy_num; 338*4882a593Smuzhiyun u8 hid_pair_cnt; 339*4882a593Smuzhiyun 340*4882a593Smuzhiyun u32 cnt_remote_name_req; 341*4882a593Smuzhiyun u32 cnt_setup_link; 342*4882a593Smuzhiyun u32 cnt_reinit; 343*4882a593Smuzhiyun u32 cnt_ign_wlan_act; 344*4882a593Smuzhiyun u32 cnt_page; 345*4882a593Smuzhiyun u32 cnt_role_switch; 346*4882a593Smuzhiyun u32 cnt_wl_fw_notify; 347*4882a593Smuzhiyun 348*4882a593Smuzhiyun u16 bt_reg_vendor_ac; 349*4882a593Smuzhiyun u16 bt_reg_vendor_ae; 350*4882a593Smuzhiyun 351*4882a593Smuzhiyun boolean is_setup_link; 352*4882a593Smuzhiyun u8 wl_noisy_level; 353*4882a593Smuzhiyun u32 gnt_error_cnt; 354*4882a593Smuzhiyun 355*4882a593Smuzhiyun u8 bt_afh_map[10]; 356*4882a593Smuzhiyun u8 bt_relink_downcount; 357*4882a593Smuzhiyun u8 bt_inq_page_downcount; 358*4882a593Smuzhiyun boolean is_tdma_btautoslot; 359*4882a593Smuzhiyun 360*4882a593Smuzhiyun boolean is_esco_mode; 361*4882a593Smuzhiyun u8 switch_band_notify_to; 362*4882a593Smuzhiyun 363*4882a593Smuzhiyun boolean is_hid_low_pri_tx_overhead; 364*4882a593Smuzhiyun boolean is_bt_multi_link; 365*4882a593Smuzhiyun boolean is_bt_a2dp_sink; 366*4882a593Smuzhiyun boolean is_set_ps_state_fail; 367*4882a593Smuzhiyun u8 cnt_set_ps_state_fail; 368*4882a593Smuzhiyun 369*4882a593Smuzhiyun u8 wl_fw_dbg_info[10]; 370*4882a593Smuzhiyun u8 wl_rx_rate; 371*4882a593Smuzhiyun u8 wl_tx_rate; 372*4882a593Smuzhiyun u8 wl_rts_rx_rate; 373*4882a593Smuzhiyun u8 wl_center_channel; 374*4882a593Smuzhiyun u8 wl_tx_macid; 375*4882a593Smuzhiyun u8 wl_tx_retry_ratio; 376*4882a593Smuzhiyun 377*4882a593Smuzhiyun u16 score_board_WB; 378*4882a593Smuzhiyun boolean is_hid_rcu; 379*4882a593Smuzhiyun u8 bt_a2dp_vendor_id; 380*4882a593Smuzhiyun u32 bt_a2dp_device_name; 381*4882a593Smuzhiyun u32 bt_a2dp_flush_time; 382*4882a593Smuzhiyun boolean is_ble_scan_en; 383*4882a593Smuzhiyun 384*4882a593Smuzhiyun boolean is_bt_opp_exist; 385*4882a593Smuzhiyun boolean gl_wifi_busy; 386*4882a593Smuzhiyun u8 connect_ap_period_cnt; 387*4882a593Smuzhiyun 388*4882a593Smuzhiyun boolean is_bt_reenable; 389*4882a593Smuzhiyun u8 cnt_bt_reenable; 390*4882a593Smuzhiyun boolean is_wifi_linkscan_process; 391*4882a593Smuzhiyun u8 wl_coex_mode; 392*4882a593Smuzhiyun u8 wl_pnp_wakeup_downcnt; 393*4882a593Smuzhiyun u32 coex_run_cnt; 394*4882a593Smuzhiyun boolean is_no_wl_5ms_extend; 395*4882a593Smuzhiyun 396*4882a593Smuzhiyun u16 wl_0x42a_backup; 397*4882a593Smuzhiyun u32 wl_0x430_backup; 398*4882a593Smuzhiyun u32 wl_0x434_backup; 399*4882a593Smuzhiyun u8 wl_0x455_backup; 400*4882a593Smuzhiyun 401*4882a593Smuzhiyun boolean wl_tx_limit_en; 402*4882a593Smuzhiyun boolean wl_ampdu_limit_en; 403*4882a593Smuzhiyun boolean wl_rxagg_limit_en; 404*4882a593Smuzhiyun u8 wl_rxagg_size; 405*4882a593Smuzhiyun u8 coex_run_reason; 406*4882a593Smuzhiyun 407*4882a593Smuzhiyun u8 tdma_timer_base; 408*4882a593Smuzhiyun boolean wl_slot_toggle; 409*4882a593Smuzhiyun boolean wl_slot_toggle_change; /* if toggle to no-toggle */ 410*4882a593Smuzhiyun u8 wl_iot_peer; 411*4882a593Smuzhiyun }; 412*4882a593Smuzhiyun 413*4882a593Smuzhiyun #define BT_8821C_2ANT_EXT_BAND_SWITCH_USE_DPDT 0 414*4882a593Smuzhiyun #define BT_8821C_2ANT_EXT_BAND_SWITCH_USE_SPDT 1 415*4882a593Smuzhiyun 416*4882a593Smuzhiyun struct rfe_type_8821c_2ant { 417*4882a593Smuzhiyun u8 rfe_module_type; 418*4882a593Smuzhiyun boolean ext_ant_switch_exist; 419*4882a593Smuzhiyun /* 0:DPDT, 1:SPDT */ 420*4882a593Smuzhiyun u8 ext_ant_switch_type; 421*4882a593Smuzhiyun /* iF 0: DPDT_P=0, DPDT_N=1 => BTG to Main, WL_A+G to Aux */ 422*4882a593Smuzhiyun u8 ext_ant_switch_ctrl_polarity; 423*4882a593Smuzhiyun 424*4882a593Smuzhiyun boolean ext_band_switch_exist; 425*4882a593Smuzhiyun /* 0:DPDT, 1:SPDT */ 426*4882a593Smuzhiyun u8 ext_band_switch_type; 427*4882a593Smuzhiyun u8 ext_band_switch_ctrl_polarity; 428*4882a593Smuzhiyun 429*4882a593Smuzhiyun boolean ant_at_main_port; 430*4882a593Smuzhiyun 431*4882a593Smuzhiyun /* If TRUE: WLG at BTG, If FALSE: WLG at WLAG */ 432*4882a593Smuzhiyun boolean wlg_locate_at_btg; 433*4882a593Smuzhiyun 434*4882a593Smuzhiyun /* If diversity on */ 435*4882a593Smuzhiyun boolean ext_ant_switch_diversity; 436*4882a593Smuzhiyun }; 437*4882a593Smuzhiyun 438*4882a593Smuzhiyun struct wifi_link_info_8821c_2ant { 439*4882a593Smuzhiyun u8 num_of_active_port; 440*4882a593Smuzhiyun u32 port_connect_status; 441*4882a593Smuzhiyun boolean is_all_under_5g; 442*4882a593Smuzhiyun boolean is_mcc_25g; 443*4882a593Smuzhiyun boolean is_p2p_connected; 444*4882a593Smuzhiyun boolean is_connected; 445*4882a593Smuzhiyun }; 446*4882a593Smuzhiyun 447*4882a593Smuzhiyun /* ******************************************* 448*4882a593Smuzhiyun * The following is interface which will notify coex module. 449*4882a593Smuzhiyun * ******************************************* */ 450*4882a593Smuzhiyun void ex_halbtc8821c2ant_power_on_setting(struct btc_coexist *btc); 451*4882a593Smuzhiyun void ex_halbtc8821c2ant_pre_load_firmware(struct btc_coexist *btc); 452*4882a593Smuzhiyun void ex_halbtc8821c2ant_init_hw_config(struct btc_coexist *btc, 453*4882a593Smuzhiyun boolean wifi_only); 454*4882a593Smuzhiyun void ex_halbtc8821c2ant_init_coex_dm(struct btc_coexist *btc); 455*4882a593Smuzhiyun void ex_halbtc8821c2ant_ips_notify(struct btc_coexist *btc, 456*4882a593Smuzhiyun u8 type); 457*4882a593Smuzhiyun void ex_halbtc8821c2ant_lps_notify(struct btc_coexist *btc, 458*4882a593Smuzhiyun u8 type); 459*4882a593Smuzhiyun void ex_halbtc8821c2ant_scan_notify(struct btc_coexist *btc, 460*4882a593Smuzhiyun u8 type); 461*4882a593Smuzhiyun void ex_halbtc8821c2ant_switchband_notify(struct btc_coexist *btc, 462*4882a593Smuzhiyun u8 type); 463*4882a593Smuzhiyun void ex_halbtc8821c2ant_connect_notify(struct btc_coexist *btc, 464*4882a593Smuzhiyun u8 type); 465*4882a593Smuzhiyun void ex_halbtc8821c2ant_media_status_notify(struct btc_coexist *btc, 466*4882a593Smuzhiyun u8 type); 467*4882a593Smuzhiyun void ex_halbtc8821c2ant_specific_packet_notify(struct btc_coexist *btc, 468*4882a593Smuzhiyun u8 type); 469*4882a593Smuzhiyun void ex_halbtc8821c2ant_bt_info_notify(struct btc_coexist *btc, 470*4882a593Smuzhiyun u8 *tmp_buf, u8 length); 471*4882a593Smuzhiyun void ex_halbtc8821c2ant_wl_fwdbginfo_notify(struct btc_coexist *btc, 472*4882a593Smuzhiyun u8 *tmp_buf, u8 length); 473*4882a593Smuzhiyun void ex_halbtc8821c2ant_rx_rate_change_notify(struct btc_coexist *btc, 474*4882a593Smuzhiyun BOOLEAN is_data_frame, 475*4882a593Smuzhiyun u8 btc_rate_id); 476*4882a593Smuzhiyun void ex_halbtc8821c2ant_tx_rate_change_notify(struct btc_coexist *btc, 477*4882a593Smuzhiyun u8 tx_rate, 478*4882a593Smuzhiyun u8 tx_retry_ratio, u8 macid); 479*4882a593Smuzhiyun void ex_halbtc8821c2ant_rf_status_notify(struct btc_coexist *btc, 480*4882a593Smuzhiyun u8 type); 481*4882a593Smuzhiyun void ex_halbtc8821c2ant_halt_notify(struct btc_coexist *btc); 482*4882a593Smuzhiyun void ex_halbtc8821c2ant_pnp_notify(struct btc_coexist *btc, 483*4882a593Smuzhiyun u8 pnp_state); 484*4882a593Smuzhiyun void ex_halbtc8821c2ant_periodical(struct btc_coexist *btc); 485*4882a593Smuzhiyun void ex_halbtc8821c2ant_display_simple_coex_info(struct btc_coexist *btc); 486*4882a593Smuzhiyun void ex_halbtc8821c2ant_display_coex_info(struct btc_coexist *btc); 487*4882a593Smuzhiyun 488*4882a593Smuzhiyun #else 489*4882a593Smuzhiyun #define ex_halbtc8821c2ant_power_on_setting(btc) 490*4882a593Smuzhiyun #define ex_halbtc8821c2ant_pre_load_firmware(btc) 491*4882a593Smuzhiyun #define ex_halbtc8821c2ant_init_hw_config(btc, wifi_only) 492*4882a593Smuzhiyun #define ex_halbtc8821c2ant_init_coex_dm(btc) 493*4882a593Smuzhiyun #define ex_halbtc8821c2ant_ips_notify(btc, type) 494*4882a593Smuzhiyun #define ex_halbtc8821c2ant_lps_notify(btc, type) 495*4882a593Smuzhiyun #define ex_halbtc8821c2ant_scan_notify(btc, type) 496*4882a593Smuzhiyun #define ex_halbtc8821c2ant_switchband_notify(btc, type) 497*4882a593Smuzhiyun #define ex_halbtc8821c2ant_connect_notify(btc, type) 498*4882a593Smuzhiyun #define ex_halbtc8821c2ant_media_status_notify(btc, type) 499*4882a593Smuzhiyun #define ex_halbtc8821c2ant_specific_packet_notify(btc, type) 500*4882a593Smuzhiyun #define ex_halbtc8821c2ant_bt_info_notify(btc, tmp_buf, length) 501*4882a593Smuzhiyun #define ex_halbtc8821c2ant_wl_fwdbginfo_notify(btc, tmp_buf, length) 502*4882a593Smuzhiyun #define ex_halbtc8821c2ant_rx_rate_change_notify(btc, is_data_frame, \ 503*4882a593Smuzhiyun btc_rate_id) 504*4882a593Smuzhiyun #define ex_halbtc8821c2ant_tx_rate_change_notify(btcoexist, tx_rate, \ 505*4882a593Smuzhiyun tx_retry_ratio, macid) 506*4882a593Smuzhiyun #define ex_halbtc8821c2ant_rf_status_notify(btc, type) 507*4882a593Smuzhiyun #define ex_halbtc8821c2ant_halt_notify(btc) 508*4882a593Smuzhiyun #define ex_halbtc8821c2ant_pnp_notify(btc, pnp_state) 509*4882a593Smuzhiyun #define ex_halbtc8821c2ant_periodical(btc) 510*4882a593Smuzhiyun #define ex_halbtc8821c2ant_display_simple_coex_info(btc) 511*4882a593Smuzhiyun #define ex_halbtc8821c2ant_display_coex_info(btc) 512*4882a593Smuzhiyun #endif 513*4882a593Smuzhiyun 514*4882a593Smuzhiyun #endif 515*4882a593Smuzhiyun 516*4882a593Smuzhiyun 517