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 1ANT BT Co-exist definition 22*4882a593Smuzhiyun * ******************************************* */ 23*4882a593Smuzhiyun #define BT_8821C_1ANT_COEX_DBG 0 24*4882a593Smuzhiyun #define BT_AUTO_REPORT_ONLY_8821C_1ANT 1 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun #define BT_INFO_8821C_1ANT_B_FTP BIT(7) 27*4882a593Smuzhiyun #define BT_INFO_8821C_1ANT_B_A2DP BIT(6) 28*4882a593Smuzhiyun #define BT_INFO_8821C_1ANT_B_HID BIT(5) 29*4882a593Smuzhiyun #define BT_INFO_8821C_1ANT_B_SCO_BUSY BIT(4) 30*4882a593Smuzhiyun #define BT_INFO_8821C_1ANT_B_ACL_BUSY BIT(3) 31*4882a593Smuzhiyun #define BT_INFO_8821C_1ANT_B_INQ_PAGE BIT(2) 32*4882a593Smuzhiyun #define BT_INFO_8821C_1ANT_B_SCO_ESCO BIT(1) 33*4882a593Smuzhiyun #define BT_INFO_8821C_1ANT_B_CONNECTION BIT(0) 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun #define BTC_RSSI_COEX_THRESH_TOL_8821C_1ANT 2 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun #define BT_8821C_1ANT_WIFI_NOISY_THRESH 30 38*4882a593Smuzhiyun #define BT_8821C_1ANT_DEFAULT_ISOLATION 15 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun enum bt_8821c_1ant_signal_state { 41*4882a593Smuzhiyun BT_8821C_1ANT_GNT_SET_TO_LOW = 0x0, 42*4882a593Smuzhiyun BT_8821C_1ANT_GNT_SET_TO_HIGH = 0x1, 43*4882a593Smuzhiyun BT_8821C_1ANT_GNT_SET_BY_HW = 0x2, 44*4882a593Smuzhiyun BT_8821C_1ANT_GNT_SET_MAX 45*4882a593Smuzhiyun }; 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun enum bt_8821c_1ant_path_ctrl_owner { 48*4882a593Smuzhiyun BT_8821C_1ANT_PCO_BTSIDE = 0x0, 49*4882a593Smuzhiyun BT_8821C_1ANT_PCO_WLSIDE = 0x1, 50*4882a593Smuzhiyun BT_8821C_1ANT_PCO_MAX 51*4882a593Smuzhiyun }; 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun enum bt_8821c_1ant_gnt_ctrl_type { 54*4882a593Smuzhiyun BT_8821C_1ANT_GNT_TYPE_CTRL_BY_PTA = 0x0, 55*4882a593Smuzhiyun BT_8821C_1ANT_GNT_TYPE_CTRL_BY_SW = 0x1, 56*4882a593Smuzhiyun BT_8821C_1ANT_GNT_TYPE_MAX 57*4882a593Smuzhiyun }; 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun enum bt_8821c_1ant_gnt_ctrl_block { 60*4882a593Smuzhiyun BT_8821C_1ANT_GNT_BLOCK_RFC_BB = 0x0, 61*4882a593Smuzhiyun BT_8821C_1ANT_GNT_BLOCK_RFC = 0x1, 62*4882a593Smuzhiyun BT_8821C_1ANT_GNT_BLOCK_BB = 0x2, 63*4882a593Smuzhiyun BT_8821C_1ANT_GNT_BLOCK_MAX 64*4882a593Smuzhiyun }; 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun enum bt_8821c_1ant_lte_coex_table_type { 67*4882a593Smuzhiyun BT_8821C_1ANT_CTT_WL_VS_LTE = 0x0, 68*4882a593Smuzhiyun BT_8821C_1ANT_CTT_BT_VS_LTE = 0x1, 69*4882a593Smuzhiyun BT_8821C_1ANT_CTT_MAX 70*4882a593Smuzhiyun }; 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun enum bt_8821c_1ant_lte_break_table_type { 73*4882a593Smuzhiyun BT_8821C_1ANT_LBTT_WL_BREAK_LTE = 0x0, 74*4882a593Smuzhiyun BT_8821C_1ANT_LBTT_BT_BREAK_LTE = 0x1, 75*4882a593Smuzhiyun BT_8821C_1ANT_LBTT_LTE_BREAK_WL = 0x2, 76*4882a593Smuzhiyun BT_8821C_1ANT_LBTT_LTE_BREAK_BT = 0x3, 77*4882a593Smuzhiyun BT_8821C_1ANT_LBTT_MAX 78*4882a593Smuzhiyun }; 79*4882a593Smuzhiyun 80*4882a593Smuzhiyun enum bt_info_src_8821c_1ant { 81*4882a593Smuzhiyun BT_8821C_1ANT_INFO_SRC_WIFI_FW = 0x0, 82*4882a593Smuzhiyun BT_8821C_1ANT_INFO_SRC_BT_RSP = 0x1, 83*4882a593Smuzhiyun BT_8821C_1ANT_INFO_SRC_BT_ACT = 0x2, 84*4882a593Smuzhiyun BT_8821C_1ANT_INFO_SRC_MAX 85*4882a593Smuzhiyun }; 86*4882a593Smuzhiyun 87*4882a593Smuzhiyun enum bt_8821c_1ant_bt_status { 88*4882a593Smuzhiyun BT_8821C_1ANT_BSTATUS_NCON_IDLE = 0x0, 89*4882a593Smuzhiyun BT_8821C_1ANT_BSTATUS_CON_IDLE = 0x1, 90*4882a593Smuzhiyun BT_8821C_1ANT_BSTATUS_INQ_PAGE = 0x2, 91*4882a593Smuzhiyun BT_8821C_1ANT_BSTATUS_ACL_BUSY = 0x3, 92*4882a593Smuzhiyun BT_8821C_1ANT_BSTATUS_SCO_BUSY = 0x4, 93*4882a593Smuzhiyun BT_8821C_1ANT_BSTATUS_ACL_SCO_BUSY = 0x5, 94*4882a593Smuzhiyun BT_8821C_1ANT_BSTATUS_MAX 95*4882a593Smuzhiyun }; 96*4882a593Smuzhiyun 97*4882a593Smuzhiyun enum bt_8821c_1ant_wifi_status { 98*4882a593Smuzhiyun BT_8821C_1ANT_WSTATUS_NCON_IDLE = 0x0, 99*4882a593Smuzhiyun BT_8821C_1ANT_WSTATUS_NCON_SCAN = 0x1, 100*4882a593Smuzhiyun BT_8821C_1ANT_WSTATUS_CON_SCAN = 0x2, 101*4882a593Smuzhiyun BT_8821C_1ANT_WSTATUS_CON_SPECPKT = 0x3, 102*4882a593Smuzhiyun BT_8821C_1ANT_WSTATUS_CON_IDLE = 0x4, 103*4882a593Smuzhiyun BT_8821C_1ANT_WSTATUS_CON_BUSY = 0x5, 104*4882a593Smuzhiyun BT_8821C_1ANT_WSTATUS_MAX 105*4882a593Smuzhiyun }; 106*4882a593Smuzhiyun 107*4882a593Smuzhiyun enum bt_8821c_1ant_coex_algo { 108*4882a593Smuzhiyun BT_8821C_1ANT_COEX_UNDEFINED = 0x0, 109*4882a593Smuzhiyun BT_8821C_1ANT_COEX_SCO = 0x1, 110*4882a593Smuzhiyun BT_8821C_1ANT_COEX_HID = 0x2, 111*4882a593Smuzhiyun BT_8821C_1ANT_COEX_A2DP = 0x3, 112*4882a593Smuzhiyun BT_8821C_1ANT_COEX_A2DP_PANHS = 0x4, 113*4882a593Smuzhiyun BT_8821C_1ANT_COEX_PAN = 0x5, 114*4882a593Smuzhiyun BT_8821C_1ANT_COEX_PANHS = 0x6, 115*4882a593Smuzhiyun BT_8821C_1ANT_COEX_PAN_A2DP = 0x7, 116*4882a593Smuzhiyun BT_8821C_1ANT_COEX_PAN_HID = 0x8, 117*4882a593Smuzhiyun BT_8821C_1ANT_COEX_HID_A2DP_PAN = 0x9, 118*4882a593Smuzhiyun BT_8821C_1ANT_COEX_HID_A2DP = 0xa, 119*4882a593Smuzhiyun BT_8821C_1ANT_COEX_MAX = 0xb, 120*4882a593Smuzhiyun }; 121*4882a593Smuzhiyun 122*4882a593Smuzhiyun enum bt_8821c_1ant_ext_ant_switch_type { 123*4882a593Smuzhiyun BT_8821C_1ANT_USE_DPDT = 0x0, 124*4882a593Smuzhiyun BT_8821C_1ANT_USE_SPDT = 0x1, 125*4882a593Smuzhiyun BT_8821C_1ANT_SWITCH_NONE = 0x2, 126*4882a593Smuzhiyun BT_8821C_1ANT_SWITCH_MAX 127*4882a593Smuzhiyun }; 128*4882a593Smuzhiyun 129*4882a593Smuzhiyun 130*4882a593Smuzhiyun enum bt_8821c_1ant_ext_ant_switch_ctrl_type { 131*4882a593Smuzhiyun BT_8821C_1ANT_CTRL_BY_BBSW = 0x0, 132*4882a593Smuzhiyun BT_8821C_1ANT_CTRL_BY_PTA = 0x1, 133*4882a593Smuzhiyun BT_8821C_1ANT_CTRL_BY_ANTDIV = 0x2, 134*4882a593Smuzhiyun BT_8821C_1ANT_CTRL_BY_MAC = 0x3, 135*4882a593Smuzhiyun BT_8821C_1ANT_CTRL_BY_BT = 0x4, 136*4882a593Smuzhiyun BT_8821C_1ANT_CTRL_BY_FW = 0x5, 137*4882a593Smuzhiyun BT_8821C_1ANT_CTRL_MAX 138*4882a593Smuzhiyun }; 139*4882a593Smuzhiyun 140*4882a593Smuzhiyun enum bt_8821c_1ant_ext_ant_switch_pos_type { 141*4882a593Smuzhiyun BT_8821C_1ANT_TO_BT = 0x0, 142*4882a593Smuzhiyun BT_8821C_1ANT_TO_WLG = 0x1, 143*4882a593Smuzhiyun BT_8821C_1ANT_TO_WLA = 0x2, 144*4882a593Smuzhiyun BT_8821C_1ANT_TO_NOCARE = 0x3, 145*4882a593Smuzhiyun BT_8821C_1ANT_TO_MAX 146*4882a593Smuzhiyun }; 147*4882a593Smuzhiyun 148*4882a593Smuzhiyun enum bt_8821c_1ant_phase { 149*4882a593Smuzhiyun BT_8821C_1ANT_PHASE_INIT = 0x0, 150*4882a593Smuzhiyun BT_8821C_1ANT_PHASE_WONLY = 0x1, 151*4882a593Smuzhiyun BT_8821C_1ANT_PHASE_WOFF = 0x2, 152*4882a593Smuzhiyun BT_8821C_1ANT_PHASE_2G = 0x3, 153*4882a593Smuzhiyun BT_8821C_1ANT_PHASE_5G = 0x4, 154*4882a593Smuzhiyun BT_8821C_1ANT_PHASE_BTMP = 0x5, 155*4882a593Smuzhiyun BT_8821C_1ANT_PHASE_ANTDET = 0x6, 156*4882a593Smuzhiyun BT_8821C_1ANT_PHASE_POWERON = 0x7, 157*4882a593Smuzhiyun BT_8821C_1ANT_PHASE_MCC = 0x8, 158*4882a593Smuzhiyun BT_8821C_1ANT_PHASE_MAX 159*4882a593Smuzhiyun }; 160*4882a593Smuzhiyun 161*4882a593Smuzhiyun enum bt_8821c_1ant_scoreboard { 162*4882a593Smuzhiyun BT_8821C_1ANT_SCBD_ACTIVE = BIT(0), 163*4882a593Smuzhiyun BT_8821C_1ANT_SCBD_ONOFF = BIT(1), 164*4882a593Smuzhiyun BT_8821C_1ANT_SCBD_SCAN = BIT(2), 165*4882a593Smuzhiyun BT_8821C_1ANT_SCBD_UNDERTEST = BIT(3), 166*4882a593Smuzhiyun BT_8821C_1ANT_SCBD_WLBUSY = BIT(6), 167*4882a593Smuzhiyun BT_8821C_1ANT_SCBD_TDMA = BIT(9), 168*4882a593Smuzhiyun BT_8821C_1ANT_SCBD_BTCQDDR = BIT(10), 169*4882a593Smuzhiyun BT_8821C_1ANT_SCBD_ALL = 0xffff 170*4882a593Smuzhiyun }; 171*4882a593Smuzhiyun 172*4882a593Smuzhiyun enum bt_8821c_1ant_RUNREASON { 173*4882a593Smuzhiyun BT_8821C_1ANT_RSN_2GSCANSTART = 0x0, 174*4882a593Smuzhiyun BT_8821C_1ANT_RSN_5GSCANSTART = 0x1, 175*4882a593Smuzhiyun BT_8821C_1ANT_RSN_SCANFINISH = 0x2, 176*4882a593Smuzhiyun BT_8821C_1ANT_RSN_2GSWITCHBAND = 0x3, 177*4882a593Smuzhiyun BT_8821C_1ANT_RSN_5GSWITCHBAND = 0x4, 178*4882a593Smuzhiyun BT_8821C_1ANT_RSN_2GCONSTART = 0x5, 179*4882a593Smuzhiyun BT_8821C_1ANT_RSN_5GCONSTART = 0x6, 180*4882a593Smuzhiyun BT_8821C_1ANT_RSN_2GCONFINISH = 0x7, 181*4882a593Smuzhiyun BT_8821C_1ANT_RSN_5GCONFINISH = 0x8, 182*4882a593Smuzhiyun BT_8821C_1ANT_RSN_2GMEDIA = 0x9, 183*4882a593Smuzhiyun BT_8821C_1ANT_RSN_5GMEDIA = 0xa, 184*4882a593Smuzhiyun BT_8821C_1ANT_RSN_MEDIADISCON = 0xb, 185*4882a593Smuzhiyun BT_8821C_1ANT_RSN_2GSPECIALPKT = 0xc, 186*4882a593Smuzhiyun BT_8821C_1ANT_RSN_5GSPECIALPKT = 0xd, 187*4882a593Smuzhiyun BT_8821C_1ANT_RSN_BTINFO = 0xe, 188*4882a593Smuzhiyun BT_8821C_1ANT_RSN_PERIODICAL = 0xf, 189*4882a593Smuzhiyun BT_8821C_1ANT_RSN_PNP = 0x10, 190*4882a593Smuzhiyun BT_8821C_1ANT_RSN_LPS = 0x11, 191*4882a593Smuzhiyun BT_8821C_1ANT_RSN_MAX 192*4882a593Smuzhiyun }; 193*4882a593Smuzhiyun 194*4882a593Smuzhiyun enum bt_8821c_1ant_WL_LINK_MODE { 195*4882a593Smuzhiyun BT_8821C_1ANT_WLINK_2G1PORT = 0x0, 196*4882a593Smuzhiyun BT_8821C_1ANT_WLINK_2GMPORT = 0x1, 197*4882a593Smuzhiyun BT_8821C_1ANT_WLINK_25GMPORT = 0x2, 198*4882a593Smuzhiyun BT_8821C_1ANT_WLINK_5G = 0x3, 199*4882a593Smuzhiyun BT_8821C_1ANT_WLINK_2GGO = 0x4, 200*4882a593Smuzhiyun BT_8821C_1ANT_WLINK_BTMR = 0x5, 201*4882a593Smuzhiyun BT_8821C_1ANT_WLINK_MAX 202*4882a593Smuzhiyun }; 203*4882a593Smuzhiyun 204*4882a593Smuzhiyun struct coex_dm_8821c_1ant { 205*4882a593Smuzhiyun /* hw setting */ 206*4882a593Smuzhiyun u32 cur_ant_pos_type; 207*4882a593Smuzhiyun 208*4882a593Smuzhiyun /* fw mechanism */ 209*4882a593Smuzhiyun boolean cur_ignore_wlan_act; 210*4882a593Smuzhiyun 211*4882a593Smuzhiyun u8 cur_ps_tdma; 212*4882a593Smuzhiyun u8 ps_tdma_para[5]; 213*4882a593Smuzhiyun boolean cur_ps_tdma_on; 214*4882a593Smuzhiyun 215*4882a593Smuzhiyun boolean cur_bt_auto_report; 216*4882a593Smuzhiyun u8 cur_lps; 217*4882a593Smuzhiyun u8 cur_rpwm; 218*4882a593Smuzhiyun 219*4882a593Smuzhiyun /* sw mechanism */ 220*4882a593Smuzhiyun boolean cur_low_penalty_ra; 221*4882a593Smuzhiyun 222*4882a593Smuzhiyun u32 cur_val0x6c0; 223*4882a593Smuzhiyun u32 cur_val0x6c4; 224*4882a593Smuzhiyun u32 cur_val0x6c8; 225*4882a593Smuzhiyun u8 cur_val0x6cc; 226*4882a593Smuzhiyun 227*4882a593Smuzhiyun /* algorithm related */ 228*4882a593Smuzhiyun u8 cur_algorithm; 229*4882a593Smuzhiyun u8 bt_status; 230*4882a593Smuzhiyun u8 wifi_chnl_info[3]; 231*4882a593Smuzhiyun 232*4882a593Smuzhiyun u32 arp_cnt; 233*4882a593Smuzhiyun 234*4882a593Smuzhiyun u32 cur_ext_ant_switch_status; 235*4882a593Smuzhiyun u32 setting_tdma; 236*4882a593Smuzhiyun }; 237*4882a593Smuzhiyun 238*4882a593Smuzhiyun struct coex_sta_8821c_1ant { 239*4882a593Smuzhiyun boolean bt_disabled; 240*4882a593Smuzhiyun boolean bt_link_exist; 241*4882a593Smuzhiyun boolean sco_exist; 242*4882a593Smuzhiyun boolean a2dp_exist; 243*4882a593Smuzhiyun boolean hid_exist; 244*4882a593Smuzhiyun boolean pan_exist; 245*4882a593Smuzhiyun boolean msft_mr_exist; 246*4882a593Smuzhiyun boolean bt_a2dp_active; 247*4882a593Smuzhiyun u8 num_of_profile; 248*4882a593Smuzhiyun 249*4882a593Smuzhiyun boolean under_lps; 250*4882a593Smuzhiyun boolean under_ips; 251*4882a593Smuzhiyun u32 specific_pkt_period_cnt; 252*4882a593Smuzhiyun u32 high_priority_tx; 253*4882a593Smuzhiyun u32 high_priority_rx; 254*4882a593Smuzhiyun u32 low_priority_tx; 255*4882a593Smuzhiyun u32 low_priority_rx; 256*4882a593Smuzhiyun boolean bt_ctr_ok; 257*4882a593Smuzhiyun boolean is_hi_pri_rx_overhead; 258*4882a593Smuzhiyun s8 bt_rssi; 259*4882a593Smuzhiyun u8 pre_bt_rssi_state; 260*4882a593Smuzhiyun u8 pre_wifi_rssi_state[4]; 261*4882a593Smuzhiyun u8 bt_info_c2h[BT_8821C_1ANT_INFO_SRC_MAX][BTC_BTINFO_LENGTH_MAX]; 262*4882a593Smuzhiyun u32 bt_info_c2h_cnt[BT_8821C_1ANT_INFO_SRC_MAX]; 263*4882a593Smuzhiyun boolean bt_whck_test; 264*4882a593Smuzhiyun boolean c2h_bt_inquiry_page; 265*4882a593Smuzhiyun boolean bt_inq_page_pre; 266*4882a593Smuzhiyun boolean bt_inq_page_remain; 267*4882a593Smuzhiyun boolean c2h_bt_remote_name_req; 268*4882a593Smuzhiyun boolean c2h_bt_page; 269*4882a593Smuzhiyun boolean bt_a2dp_active_pre; 270*4882a593Smuzhiyun boolean bt_a2dp_active_remain; 271*4882a593Smuzhiyun 272*4882a593Smuzhiyun boolean wifi_high_pri_task1; 273*4882a593Smuzhiyun boolean wifi_high_pri_task2; 274*4882a593Smuzhiyun 275*4882a593Smuzhiyun u8 bt_info_lb2; 276*4882a593Smuzhiyun u8 bt_info_lb3; 277*4882a593Smuzhiyun u8 bt_info_hb0; 278*4882a593Smuzhiyun u8 bt_info_hb1; 279*4882a593Smuzhiyun u8 bt_info_hb2; 280*4882a593Smuzhiyun u8 bt_info_hb3; 281*4882a593Smuzhiyun 282*4882a593Smuzhiyun u32 pop_event_cnt; 283*4882a593Smuzhiyun u8 scan_ap_num; 284*4882a593Smuzhiyun u8 bt_retry_cnt; 285*4882a593Smuzhiyun 286*4882a593Smuzhiyun u32 crc_ok_cck; 287*4882a593Smuzhiyun u32 crc_ok_11g; 288*4882a593Smuzhiyun u32 crc_ok_11n; 289*4882a593Smuzhiyun u32 crc_ok_11n_vht; 290*4882a593Smuzhiyun 291*4882a593Smuzhiyun u32 crc_err_cck; 292*4882a593Smuzhiyun u32 crc_err_11g; 293*4882a593Smuzhiyun u32 crc_err_11n; 294*4882a593Smuzhiyun u32 crc_err_11n_vht; 295*4882a593Smuzhiyun 296*4882a593Smuzhiyun boolean cck_lock; 297*4882a593Smuzhiyun boolean cck_lock_ever; 298*4882a593Smuzhiyun boolean cck_lock_warn; 299*4882a593Smuzhiyun 300*4882a593Smuzhiyun u8 coex_table_type; 301*4882a593Smuzhiyun boolean force_lps_ctrl; 302*4882a593Smuzhiyun boolean concurrent_rx_mode_on; 303*4882a593Smuzhiyun u16 score_board; 304*4882a593Smuzhiyun u8 isolation_btween_wb; /* 0~ 50 */ 305*4882a593Smuzhiyun 306*4882a593Smuzhiyun u8 a2dp_bit_pool; 307*4882a593Smuzhiyun u8 kt_ver; 308*4882a593Smuzhiyun boolean acl_busy; 309*4882a593Smuzhiyun boolean bt_create_connection; 310*4882a593Smuzhiyun 311*4882a593Smuzhiyun u32 bt_coex_supported_feature; 312*4882a593Smuzhiyun u32 bt_coex_supported_version; 313*4882a593Smuzhiyun 314*4882a593Smuzhiyun u8 bt_ble_scan_type; 315*4882a593Smuzhiyun u32 bt_ble_scan_para[3]; 316*4882a593Smuzhiyun 317*4882a593Smuzhiyun boolean run_time_state; 318*4882a593Smuzhiyun boolean freeze_coexrun_by_btinfo; 319*4882a593Smuzhiyun 320*4882a593Smuzhiyun boolean is_A2DP_3M; 321*4882a593Smuzhiyun boolean voice_over_HOGP; 322*4882a593Smuzhiyun boolean bt_418_hid_exist; 323*4882a593Smuzhiyun boolean bt_ble_hid_exist; 324*4882a593Smuzhiyun u8 forbidden_slot; 325*4882a593Smuzhiyun u8 hid_busy_num; 326*4882a593Smuzhiyun u8 hid_pair_cnt; 327*4882a593Smuzhiyun 328*4882a593Smuzhiyun u32 cnt_remote_name_req; 329*4882a593Smuzhiyun u32 cnt_setup_link; 330*4882a593Smuzhiyun u32 cnt_reinit; 331*4882a593Smuzhiyun u32 cnt_ign_wlan_act; 332*4882a593Smuzhiyun u32 cnt_page; 333*4882a593Smuzhiyun u32 cnt_role_switch; 334*4882a593Smuzhiyun u32 cnt_wl_fw_notify; 335*4882a593Smuzhiyun 336*4882a593Smuzhiyun u16 bt_reg_vendor_ac; 337*4882a593Smuzhiyun u16 bt_reg_vendor_ae; 338*4882a593Smuzhiyun 339*4882a593Smuzhiyun boolean is_setup_link; 340*4882a593Smuzhiyun u8 wl_noisy_level; 341*4882a593Smuzhiyun u32 gnt_error_cnt; 342*4882a593Smuzhiyun 343*4882a593Smuzhiyun u8 bt_afh_map[10]; 344*4882a593Smuzhiyun u8 bt_relink_downcount; 345*4882a593Smuzhiyun u8 bt_inq_page_downcount; 346*4882a593Smuzhiyun u8 bt_a2dp_active_downcount; 347*4882a593Smuzhiyun boolean is_tdma_btautoslot; 348*4882a593Smuzhiyun 349*4882a593Smuzhiyun u8 switch_band_notify_to; 350*4882a593Smuzhiyun 351*4882a593Smuzhiyun boolean is_hid_low_pri_tx_overhead; 352*4882a593Smuzhiyun boolean is_bt_multi_link; 353*4882a593Smuzhiyun boolean is_bt_a2dp_sink; 354*4882a593Smuzhiyun boolean is_set_ps_state_fail; 355*4882a593Smuzhiyun u8 cnt_set_ps_state_fail; 356*4882a593Smuzhiyun 357*4882a593Smuzhiyun u8 wl_fw_dbg_info[10]; 358*4882a593Smuzhiyun u8 wl_rx_rate; 359*4882a593Smuzhiyun u8 wl_tx_rate; 360*4882a593Smuzhiyun u8 wl_rts_rx_rate; 361*4882a593Smuzhiyun u8 wl_center_channel; 362*4882a593Smuzhiyun u8 wl_tx_macid; 363*4882a593Smuzhiyun u8 wl_tx_retry_ratio; 364*4882a593Smuzhiyun 365*4882a593Smuzhiyun u16 score_board_WB; 366*4882a593Smuzhiyun boolean is_hid_rcu; 367*4882a593Smuzhiyun u8 bt_a2dp_vendor_id; 368*4882a593Smuzhiyun u32 bt_a2dp_device_name; 369*4882a593Smuzhiyun u32 bt_a2dp_flush_time; 370*4882a593Smuzhiyun boolean is_ble_scan_en; 371*4882a593Smuzhiyun 372*4882a593Smuzhiyun boolean is_bt_opp_exist; 373*4882a593Smuzhiyun boolean gl_wifi_busy; 374*4882a593Smuzhiyun u8 connect_ap_period_cnt; 375*4882a593Smuzhiyun 376*4882a593Smuzhiyun boolean is_bt_reenable; 377*4882a593Smuzhiyun u8 cnt_bt_reenable; 378*4882a593Smuzhiyun boolean is_wifi_linkscan_process; 379*4882a593Smuzhiyun u8 wl_coex_mode; 380*4882a593Smuzhiyun u8 wl_pnp_wakeup_downcnt; 381*4882a593Smuzhiyun u32 coex_run_cnt; 382*4882a593Smuzhiyun boolean is_no_wl_5ms_extend; 383*4882a593Smuzhiyun 384*4882a593Smuzhiyun u16 wl_0x42a_backup; 385*4882a593Smuzhiyun u32 wl_0x430_backup; 386*4882a593Smuzhiyun u32 wl_0x434_backup; 387*4882a593Smuzhiyun u8 wl_0x455_backup; 388*4882a593Smuzhiyun 389*4882a593Smuzhiyun boolean wl_tx_limit_en; 390*4882a593Smuzhiyun boolean wl_ampdu_limit_en; 391*4882a593Smuzhiyun boolean wl_rxagg_limit_en; 392*4882a593Smuzhiyun u8 wl_rxagg_size; 393*4882a593Smuzhiyun u8 coex_run_reason; 394*4882a593Smuzhiyun 395*4882a593Smuzhiyun u8 tdma_timer_base; 396*4882a593Smuzhiyun boolean wl_slot_toggle; 397*4882a593Smuzhiyun boolean wl_slot_toggle_change; /* if toggle to no-toggle */ 398*4882a593Smuzhiyun u8 wl_iot_peer; 399*4882a593Smuzhiyun }; 400*4882a593Smuzhiyun 401*4882a593Smuzhiyun 402*4882a593Smuzhiyun #define BT_8821C_1ANT_EXT_BAND_SWITCH_USE_DPDT 0 403*4882a593Smuzhiyun #define BT_8821C_1ANT_EXT_BAND_SWITCH_USE_SPDT 1 404*4882a593Smuzhiyun 405*4882a593Smuzhiyun struct rfe_type_8821c_1ant { 406*4882a593Smuzhiyun u8 rfe_module_type; 407*4882a593Smuzhiyun boolean ext_ant_switch_exist; 408*4882a593Smuzhiyun /* 0:DPDT, 1:SPDT */ 409*4882a593Smuzhiyun u8 ext_ant_switch_type; 410*4882a593Smuzhiyun /* iF 0: DPDT_P=0, DPDT_N=1 => BTG to Main, WL_A+G to Aux */ 411*4882a593Smuzhiyun u8 ext_ant_switch_ctrl_polarity; 412*4882a593Smuzhiyun 413*4882a593Smuzhiyun boolean ext_band_switch_exist; 414*4882a593Smuzhiyun /* 0:DPDT, 1:SPDT */ 415*4882a593Smuzhiyun u8 ext_band_switch_type; 416*4882a593Smuzhiyun u8 ext_band_switch_ctrl_polarity; 417*4882a593Smuzhiyun boolean ant_at_main_port; 418*4882a593Smuzhiyun 419*4882a593Smuzhiyun /* If TRUE: WLG at BTG, If FALSE: WLG at WLAG */ 420*4882a593Smuzhiyun boolean wlg_locate_at_btg; 421*4882a593Smuzhiyun 422*4882a593Smuzhiyun /* If diversity on */ 423*4882a593Smuzhiyun boolean ext_ant_switch_diversity; 424*4882a593Smuzhiyun }; 425*4882a593Smuzhiyun 426*4882a593Smuzhiyun struct wifi_link_info_8821c_1ant { 427*4882a593Smuzhiyun u8 num_of_active_port; 428*4882a593Smuzhiyun u32 port_connect_status; 429*4882a593Smuzhiyun boolean is_all_under_5g; 430*4882a593Smuzhiyun boolean is_mcc_25g; 431*4882a593Smuzhiyun boolean is_p2p_connected; 432*4882a593Smuzhiyun boolean is_connected; 433*4882a593Smuzhiyun }; 434*4882a593Smuzhiyun 435*4882a593Smuzhiyun /* ******************************************* 436*4882a593Smuzhiyun * The following is interface which will notify coex module. 437*4882a593Smuzhiyun * ******************************************* */ 438*4882a593Smuzhiyun void ex_halbtc8821c1ant_power_on_setting(struct btc_coexist *btc); 439*4882a593Smuzhiyun void ex_halbtc8821c1ant_pre_load_firmware(struct btc_coexist *btc); 440*4882a593Smuzhiyun void ex_halbtc8821c1ant_init_hw_config(struct btc_coexist *btc, 441*4882a593Smuzhiyun boolean wifi_only); 442*4882a593Smuzhiyun void ex_halbtc8821c1ant_init_coex_dm(struct btc_coexist *btc); 443*4882a593Smuzhiyun void ex_halbtc8821c1ant_ips_notify(struct btc_coexist *btc, 444*4882a593Smuzhiyun u8 type); 445*4882a593Smuzhiyun void ex_halbtc8821c1ant_lps_notify(struct btc_coexist *btc, 446*4882a593Smuzhiyun u8 type); 447*4882a593Smuzhiyun void ex_halbtc8821c1ant_scan_notify(struct btc_coexist *btc, 448*4882a593Smuzhiyun u8 type); 449*4882a593Smuzhiyun void ex_halbtc8821c1ant_switchband_notify(struct btc_coexist *btc, 450*4882a593Smuzhiyun u8 type); 451*4882a593Smuzhiyun void ex_halbtc8821c1ant_connect_notify(struct btc_coexist *btc, 452*4882a593Smuzhiyun u8 type); 453*4882a593Smuzhiyun void ex_halbtc8821c1ant_media_status_notify(struct btc_coexist *btc, 454*4882a593Smuzhiyun u8 type); 455*4882a593Smuzhiyun void ex_halbtc8821c1ant_specific_packet_notify(struct btc_coexist *btc, 456*4882a593Smuzhiyun u8 type); 457*4882a593Smuzhiyun void ex_halbtc8821c1ant_bt_info_notify(struct btc_coexist *btc, 458*4882a593Smuzhiyun u8 *tmp_buf, u8 length); 459*4882a593Smuzhiyun void ex_halbtc8821c1ant_wl_fwdbginfo_notify(struct btc_coexist *btc, 460*4882a593Smuzhiyun u8 *tmp_buf, u8 length); 461*4882a593Smuzhiyun void ex_halbtc8821c1ant_rx_rate_change_notify(struct btc_coexist *btc, 462*4882a593Smuzhiyun BOOLEAN is_data_frame, 463*4882a593Smuzhiyun u8 btc_rate_id); 464*4882a593Smuzhiyun void ex_halbtc8821c1ant_tx_rate_change_notify(struct btc_coexist *btc, 465*4882a593Smuzhiyun u8 tx_rate, 466*4882a593Smuzhiyun u8 tx_retry_ratio, u8 macid); 467*4882a593Smuzhiyun void ex_halbtc8821c1ant_rf_status_notify(struct btc_coexist *btc, 468*4882a593Smuzhiyun u8 type); 469*4882a593Smuzhiyun void ex_halbtc8821c1ant_halt_notify(struct btc_coexist *btc); 470*4882a593Smuzhiyun void ex_halbtc8821c1ant_pnp_notify(struct btc_coexist *btc, 471*4882a593Smuzhiyun u8 pnp_state); 472*4882a593Smuzhiyun void ex_halbtc8821c1ant_coex_dm_reset(struct btc_coexist *btc); 473*4882a593Smuzhiyun void ex_halbtc8821c1ant_periodical(struct btc_coexist *btc); 474*4882a593Smuzhiyun void ex_halbtc8821c1ant_display_simple_coex_info(struct btc_coexist *btc); 475*4882a593Smuzhiyun void ex_halbtc8821c1ant_display_coex_info(struct btc_coexist *btc); 476*4882a593Smuzhiyun 477*4882a593Smuzhiyun #else 478*4882a593Smuzhiyun #define ex_halbtc8821c1ant_power_on_setting(btc) 479*4882a593Smuzhiyun #define ex_halbtc8821c1ant_pre_load_firmware(btc) 480*4882a593Smuzhiyun #define ex_halbtc8821c1ant_init_hw_config(btc, wifi_only) 481*4882a593Smuzhiyun #define ex_halbtc8821c1ant_init_coex_dm(btc) 482*4882a593Smuzhiyun #define ex_halbtc8821c1ant_ips_notify(btc, type) 483*4882a593Smuzhiyun #define ex_halbtc8821c1ant_lps_notify(btc, type) 484*4882a593Smuzhiyun #define ex_halbtc8821c1ant_scan_notify(btc, type) 485*4882a593Smuzhiyun #define ex_halbtc8821c1ant_switchband_notify(btc, type) 486*4882a593Smuzhiyun #define ex_halbtc8821c1ant_connect_notify(btc, type) 487*4882a593Smuzhiyun #define ex_halbtc8821c1ant_media_status_notify(btc, type) 488*4882a593Smuzhiyun #define ex_halbtc8821c1ant_specific_packet_notify(btc, type) 489*4882a593Smuzhiyun #define ex_halbtc8821c1ant_bt_info_notify(btc, tmp_buf, length) 490*4882a593Smuzhiyun #define ex_halbtc8821c1ant_wl_fwdbginfo_notify(btc, tmp_buf, length) 491*4882a593Smuzhiyun #define ex_halbtc8821c1ant_rx_rate_change_notify(btc, is_data_frame, \ 492*4882a593Smuzhiyun btc_rate_id) 493*4882a593Smuzhiyun #define ex_halbtc8821c1ant_tx_rate_change_notify(btcoexist, tx_rate, \ 494*4882a593Smuzhiyun tx_retry_ratio, macid) 495*4882a593Smuzhiyun #define ex_halbtc8821c1ant_rf_status_notify(btc, type) 496*4882a593Smuzhiyun #define ex_halbtc8821c1ant_halt_notify(btc) 497*4882a593Smuzhiyun #define ex_halbtc8821c1ant_pnp_notify(btc, pnp_state) 498*4882a593Smuzhiyun #define ex_halbtc8821c1ant_coex_dm_reset(btc) 499*4882a593Smuzhiyun #define ex_halbtc8821c1ant_periodical(btc) 500*4882a593Smuzhiyun #define ex_halbtc8821c1ant_display_simple_coex_info(btc) 501*4882a593Smuzhiyun #define ex_halbtc8821c1ant_display_coex_info(btc) 502*4882a593Smuzhiyun #endif 503*4882a593Smuzhiyun 504*4882a593Smuzhiyun #endif 505*4882a593Smuzhiyun 506*4882a593Smuzhiyun 507