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 17*4882a593Smuzhiyun #if (BT_SUPPORT == 1 && COEX_SUPPORT == 1) 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun #if (RTL8723D_SUPPORT == 1) 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun /* ******************************************* 22*4882a593Smuzhiyun * The following is for 8723D 1ANT BT Co-exist definition 23*4882a593Smuzhiyun * ******************************************* */ 24*4882a593Smuzhiyun #define BT_8723D_1ANT_COEX_DBG 0 25*4882a593Smuzhiyun #define BT_AUTO_REPORT_ONLY_8723D_1ANT 1 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun #define BT_INFO_8723D_1ANT_B_FTP BIT(7) 28*4882a593Smuzhiyun #define BT_INFO_8723D_1ANT_B_A2DP BIT(6) 29*4882a593Smuzhiyun #define BT_INFO_8723D_1ANT_B_HID BIT(5) 30*4882a593Smuzhiyun #define BT_INFO_8723D_1ANT_B_SCO_BUSY BIT(4) 31*4882a593Smuzhiyun #define BT_INFO_8723D_1ANT_B_ACL_BUSY BIT(3) 32*4882a593Smuzhiyun #define BT_INFO_8723D_1ANT_B_INQ_PAGE BIT(2) 33*4882a593Smuzhiyun #define BT_INFO_8723D_1ANT_B_SCO_ESCO BIT(1) 34*4882a593Smuzhiyun #define BT_INFO_8723D_1ANT_B_CONNECTION BIT(0) 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun #define BT_INFO_8723D_1ANT_A2DP_BASIC_RATE(_BT_INFO_EXT_) \ 37*4882a593Smuzhiyun (((_BT_INFO_EXT_&BIT(0))) ? TRUE : FALSE) 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun #define BTC_RSSI_COEX_THRESH_TOL_8723D_1ANT 2 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun #define BT_8723D_1ANT_WIFI_NOISY_THRESH 30 /*max: 255*/ 42*4882a593Smuzhiyun #define BT_8723D_1ANT_DEFAULT_ISOLATION 15 /*unit: dB*/ 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun /* for Antenna detection */ 46*4882a593Smuzhiyun #define BT_8723D_1ANT_ANTDET_PSDTHRES_BACKGROUND 50 47*4882a593Smuzhiyun #define BT_8723D_1ANT_ANTDET_PSDTHRES_2ANT_BADISOLATION 70 48*4882a593Smuzhiyun #define BT_8723D_1ANT_ANTDET_PSDTHRES_2ANT_GOODISOLATION 55 49*4882a593Smuzhiyun #define BT_8723D_1ANT_ANTDET_PSDTHRES_1ANT 35 50*4882a593Smuzhiyun #define BT_8723D_1ANT_ANTDET_RETRY_INTERVAL 10 51*4882a593Smuzhiyun #define BT_8723D_1ANT_ANTDET_SWEEPPOINT_DELAY 60000 52*4882a593Smuzhiyun #define BT_8723D_1ANT_ANTDET_ENABLE 0 53*4882a593Smuzhiyun #define BT_8723D_1ANT_ANTDET_BTTXTIME 100 54*4882a593Smuzhiyun #define BT_8723D_1ANT_ANTDET_BTTXCHANNEL 39 55*4882a593Smuzhiyun #define BT_8723D_1ANT_ANTDET_PSD_SWWEEPCOUNT 50 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun #define BT_8723D_1ANT_LTECOEX_INDIRECTREG_ACCESS_TIMEOUT 30000 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun enum bt_8723d_1ant_signal_state { 60*4882a593Smuzhiyun BT_8723D_1ANT_SIG_STA_SET_TO_LOW = 0x0, 61*4882a593Smuzhiyun BT_8723D_1ANT_SIG_STA_SET_BY_HW = 0x0, 62*4882a593Smuzhiyun BT_8723D_1ANT_SIG_STA_SET_TO_HIGH = 0x1, 63*4882a593Smuzhiyun BT_8723D_1ANT_SIG_STA_MAX 64*4882a593Smuzhiyun }; 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun enum bt_8723d_1ant_path_ctrl_owner { 67*4882a593Smuzhiyun BT_8723D_1ANT_PCO_BTSIDE = 0x0, 68*4882a593Smuzhiyun BT_8723D_1ANT_PCO_WLSIDE = 0x1, 69*4882a593Smuzhiyun BT_8723D_1ANT_PCO_MAX 70*4882a593Smuzhiyun }; 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun enum bt_8723d_1ant_gnt_ctrl_type { 73*4882a593Smuzhiyun BT_8723D_1ANT_GNT_TYPE_CTRL_BY_PTA = 0x0, 74*4882a593Smuzhiyun BT_8723D_1ANT_GNT_TYPE_CTRL_BY_SW = 0x1, 75*4882a593Smuzhiyun BT_8723D_1ANT_GNT_TYPE_MAX 76*4882a593Smuzhiyun }; 77*4882a593Smuzhiyun 78*4882a593Smuzhiyun enum bt_8723d_1ant_gnt_ctrl_block { 79*4882a593Smuzhiyun BT_8723D_1ANT_GNT_BLOCK_RFC_BB = 0x0, 80*4882a593Smuzhiyun BT_8723D_1ANT_GNT_BLOCK_RFC = 0x1, 81*4882a593Smuzhiyun BT_8723D_1ANT_GNT_BLOCK_BB = 0x2, 82*4882a593Smuzhiyun BT_8723D_1ANT_GNT_BLOCK_MAX 83*4882a593Smuzhiyun }; 84*4882a593Smuzhiyun 85*4882a593Smuzhiyun enum bt_8723d_1ant_lte_coex_table_type { 86*4882a593Smuzhiyun BT_8723D_1ANT_CTT_WL_VS_LTE = 0x0, 87*4882a593Smuzhiyun BT_8723D_1ANT_CTT_BT_VS_LTE = 0x1, 88*4882a593Smuzhiyun BT_8723D_1ANT_CTT_MAX 89*4882a593Smuzhiyun }; 90*4882a593Smuzhiyun 91*4882a593Smuzhiyun enum bt_8723d_1ant_lte_break_table_type { 92*4882a593Smuzhiyun BT_8723D_1ANT_LBTT_WL_BREAK_LTE = 0x0, 93*4882a593Smuzhiyun BT_8723D_1ANT_LBTT_BT_BREAK_LTE = 0x1, 94*4882a593Smuzhiyun BT_8723D_1ANT_LBTT_LTE_BREAK_WL = 0x2, 95*4882a593Smuzhiyun BT_8723D_1ANT_LBTT_LTE_BREAK_BT = 0x3, 96*4882a593Smuzhiyun BT_8723D_1ANT_LBTT_MAX 97*4882a593Smuzhiyun }; 98*4882a593Smuzhiyun 99*4882a593Smuzhiyun enum bt_info_src_8723d_1ant { 100*4882a593Smuzhiyun BT_INFO_SRC_8723D_1ANT_WIFI_FW = 0x0, 101*4882a593Smuzhiyun BT_INFO_SRC_8723D_1ANT_BT_RSP = 0x1, 102*4882a593Smuzhiyun BT_INFO_SRC_8723D_1ANT_BT_ACTIVE_SEND = 0x2, 103*4882a593Smuzhiyun BT_INFO_SRC_8723D_1ANT_MAX 104*4882a593Smuzhiyun }; 105*4882a593Smuzhiyun 106*4882a593Smuzhiyun enum bt_8723d_1ant_bt_status { 107*4882a593Smuzhiyun BT_8723D_1ANT_BT_STATUS_NON_CONNECTED_IDLE = 0x0, 108*4882a593Smuzhiyun BT_8723D_1ANT_BT_STATUS_CONNECTED_IDLE = 0x1, 109*4882a593Smuzhiyun BT_8723D_1ANT_BT_STATUS_INQ_PAGE = 0x2, 110*4882a593Smuzhiyun BT_8723D_1ANT_BT_STATUS_ACL_BUSY = 0x3, 111*4882a593Smuzhiyun BT_8723D_1ANT_BT_STATUS_SCO_BUSY = 0x4, 112*4882a593Smuzhiyun BT_8723D_1ANT_BT_STATUS_ACL_SCO_BUSY = 0x5, 113*4882a593Smuzhiyun BT_8723D_1ANT_BT_STATUS_MAX 114*4882a593Smuzhiyun }; 115*4882a593Smuzhiyun 116*4882a593Smuzhiyun enum bt_8723d_1ant_wifi_status { 117*4882a593Smuzhiyun BT_8723D_1ANT_WIFI_STATUS_NON_CONNECTED_IDLE = 0x0, 118*4882a593Smuzhiyun BT_8723D_1ANT_WIFI_STATUS_NON_CONNECTED_ASSO_AUTH_SCAN = 0x1, 119*4882a593Smuzhiyun BT_8723D_1ANT_WIFI_STATUS_CONNECTED_SCAN = 0x2, 120*4882a593Smuzhiyun BT_8723D_1ANT_WIFI_STATUS_CONNECTED_SPECIFIC_PKT = 0x3, 121*4882a593Smuzhiyun BT_8723D_1ANT_WIFI_STATUS_CONNECTED_IDLE = 0x4, 122*4882a593Smuzhiyun BT_8723D_1ANT_WIFI_STATUS_CONNECTED_BUSY = 0x5, 123*4882a593Smuzhiyun BT_8723D_1ANT_WIFI_STATUS_MAX 124*4882a593Smuzhiyun }; 125*4882a593Smuzhiyun 126*4882a593Smuzhiyun enum bt_8723d_1ant_coex_algo { 127*4882a593Smuzhiyun BT_8723D_1ANT_COEX_ALGO_UNDEFINED = 0x0, 128*4882a593Smuzhiyun BT_8723D_1ANT_COEX_ALGO_SCO = 0x1, 129*4882a593Smuzhiyun BT_8723D_1ANT_COEX_ALGO_HID = 0x2, 130*4882a593Smuzhiyun BT_8723D_1ANT_COEX_ALGO_A2DP = 0x3, 131*4882a593Smuzhiyun BT_8723D_1ANT_COEX_ALGO_A2DP_PANHS = 0x4, 132*4882a593Smuzhiyun BT_8723D_1ANT_COEX_ALGO_PANEDR = 0x5, 133*4882a593Smuzhiyun BT_8723D_1ANT_COEX_ALGO_PANHS = 0x6, 134*4882a593Smuzhiyun BT_8723D_1ANT_COEX_ALGO_PANEDR_A2DP = 0x7, 135*4882a593Smuzhiyun BT_8723D_1ANT_COEX_ALGO_PANEDR_HID = 0x8, 136*4882a593Smuzhiyun BT_8723D_1ANT_COEX_ALGO_HID_A2DP_PANEDR = 0x9, 137*4882a593Smuzhiyun BT_8723D_1ANT_COEX_ALGO_HID_A2DP = 0xa, 138*4882a593Smuzhiyun BT_8723D_1ANT_COEX_ALGO_MAX = 0xb, 139*4882a593Smuzhiyun }; 140*4882a593Smuzhiyun 141*4882a593Smuzhiyun enum bt_8723d_1ant_phase { 142*4882a593Smuzhiyun BT_8723D_1ANT_PHASE_COEX_INIT = 0x0, 143*4882a593Smuzhiyun BT_8723D_1ANT_PHASE_WLANONLY_INIT = 0x1, 144*4882a593Smuzhiyun BT_8723D_1ANT_PHASE_WLAN_OFF = 0x2, 145*4882a593Smuzhiyun BT_8723D_1ANT_PHASE_2G_RUNTIME = 0x3, 146*4882a593Smuzhiyun BT_8723D_1ANT_PHASE_5G_RUNTIME = 0x4, 147*4882a593Smuzhiyun BT_8723D_1ANT_PHASE_BTMPMODE = 0x5, 148*4882a593Smuzhiyun BT_8723D_1ANT_PHASE_ANTENNA_DET = 0x6, 149*4882a593Smuzhiyun BT_8723D_1ANT_PHASE_COEX_POWERON = 0x7, 150*4882a593Smuzhiyun BT_8723D_1ANT_PHASE_MAX 151*4882a593Smuzhiyun }; 152*4882a593Smuzhiyun 153*4882a593Smuzhiyun enum bt_8723d_1ant_Scoreboard { 154*4882a593Smuzhiyun BT_8723D_1ANT_SCOREBOARD_ACTIVE = BIT(0), 155*4882a593Smuzhiyun BT_8723D_1ANT_SCOREBOARD_ONOFF = BIT(1), 156*4882a593Smuzhiyun BT_8723D_1ANT_SCOREBOARD_SCAN = BIT(2), 157*4882a593Smuzhiyun BT_8723D_1ANT_SCOREBOARD_UNDERTEST = BIT(3), 158*4882a593Smuzhiyun BT_8723D_1ANT_SCOREBOARD_RXGAIN = BIT(4), 159*4882a593Smuzhiyun BT_8723D_1ANT_SCOREBOARD_DKTOPP2M = BIT(5), 160*4882a593Smuzhiyun BT_8723D_1ANT_SCOREBOARD_WLBUSY = BIT(6), 161*4882a593Smuzhiyun BT_8723D_1ANT_SCOREBOARD_TDMA = BIT(9), 162*4882a593Smuzhiyun }; 163*4882a593Smuzhiyun 164*4882a593Smuzhiyun struct coex_dm_8723d_1ant { 165*4882a593Smuzhiyun /* hw setting */ 166*4882a593Smuzhiyun u8 pre_ant_pos_type; 167*4882a593Smuzhiyun u8 cur_ant_pos_type; 168*4882a593Smuzhiyun /* fw mechanism */ 169*4882a593Smuzhiyun boolean cur_ignore_wlan_act; 170*4882a593Smuzhiyun boolean pre_ignore_wlan_act; 171*4882a593Smuzhiyun u8 cur_ps_tdma; 172*4882a593Smuzhiyun u8 ps_tdma_para[5]; 173*4882a593Smuzhiyun u8 ps_tdma_du_adj_type; 174*4882a593Smuzhiyun boolean cur_ps_tdma_on; 175*4882a593Smuzhiyun boolean pre_bt_auto_report; 176*4882a593Smuzhiyun boolean cur_bt_auto_report; 177*4882a593Smuzhiyun u8 pre_lps; 178*4882a593Smuzhiyun u8 cur_lps; 179*4882a593Smuzhiyun u8 pre_rpwm; 180*4882a593Smuzhiyun u8 cur_rpwm; 181*4882a593Smuzhiyun 182*4882a593Smuzhiyun /* sw mechanism */ 183*4882a593Smuzhiyun boolean pre_low_penalty_ra; 184*4882a593Smuzhiyun boolean cur_low_penalty_ra; 185*4882a593Smuzhiyun u32 cur_val0x6c0; 186*4882a593Smuzhiyun u32 cur_val0x6c4; 187*4882a593Smuzhiyun u32 cur_val0x6c8; 188*4882a593Smuzhiyun u8 cur_val0x6cc; 189*4882a593Smuzhiyun boolean limited_dig; 190*4882a593Smuzhiyun 191*4882a593Smuzhiyun u32 backup_arfr_cnt1; 192*4882a593Smuzhiyun u32 backup_arfr_cnt2; 193*4882a593Smuzhiyun u16 backup_retry_limit; 194*4882a593Smuzhiyun u8 backup_ampdu_max_time; 195*4882a593Smuzhiyun 196*4882a593Smuzhiyun /* algorithm related */ 197*4882a593Smuzhiyun u8 pre_algorithm; 198*4882a593Smuzhiyun u8 cur_algorithm; 199*4882a593Smuzhiyun u8 bt_status; 200*4882a593Smuzhiyun u8 wifi_chnl_info[3]; 201*4882a593Smuzhiyun 202*4882a593Smuzhiyun u32 pre_ra_mask; 203*4882a593Smuzhiyun u32 cur_ra_mask; 204*4882a593Smuzhiyun u8 pre_arfr_type; 205*4882a593Smuzhiyun u8 cur_arfr_type; 206*4882a593Smuzhiyun u8 pre_retry_limit_type; 207*4882a593Smuzhiyun u8 cur_retry_limit_type; 208*4882a593Smuzhiyun u8 pre_ampdu_time_type; 209*4882a593Smuzhiyun u8 cur_ampdu_time_type; 210*4882a593Smuzhiyun u32 arp_cnt; 211*4882a593Smuzhiyun 212*4882a593Smuzhiyun u8 error_condition; 213*4882a593Smuzhiyun u32 setting_tdma; 214*4882a593Smuzhiyun }; 215*4882a593Smuzhiyun 216*4882a593Smuzhiyun struct coex_sta_8723d_1ant { 217*4882a593Smuzhiyun boolean bt_disabled; 218*4882a593Smuzhiyun boolean bt_link_exist; 219*4882a593Smuzhiyun boolean sco_exist; 220*4882a593Smuzhiyun boolean a2dp_exist; 221*4882a593Smuzhiyun boolean hid_exist; 222*4882a593Smuzhiyun boolean pan_exist; 223*4882a593Smuzhiyun boolean bt_hi_pri_link_exist; 224*4882a593Smuzhiyun u8 num_of_profile; 225*4882a593Smuzhiyun 226*4882a593Smuzhiyun boolean under_lps; 227*4882a593Smuzhiyun boolean under_ips; 228*4882a593Smuzhiyun u32 specific_pkt_period_cnt; 229*4882a593Smuzhiyun u8 connect_ap_period_cnt; 230*4882a593Smuzhiyun u8 pnp_awake_period_cnt; 231*4882a593Smuzhiyun u32 high_priority_tx; 232*4882a593Smuzhiyun u32 high_priority_rx; 233*4882a593Smuzhiyun u32 low_priority_tx; 234*4882a593Smuzhiyun u32 low_priority_rx; 235*4882a593Smuzhiyun boolean bt_ctr_ok; 236*4882a593Smuzhiyun boolean is_hipri_rx_overhead; 237*4882a593Smuzhiyun s8 bt_rssi; 238*4882a593Smuzhiyun boolean bt_tx_rx_mask; 239*4882a593Smuzhiyun boolean bt_mesh_on; 240*4882a593Smuzhiyun u8 pre_bt_rssi_state; 241*4882a593Smuzhiyun u8 pre_wifi_rssi_state[4]; 242*4882a593Smuzhiyun u8 bt_info_c2h[BT_INFO_SRC_8723D_1ANT_MAX][10]; 243*4882a593Smuzhiyun u32 bt_info_c2h_cnt[BT_INFO_SRC_8723D_1ANT_MAX]; 244*4882a593Smuzhiyun boolean bt_whck_test; 245*4882a593Smuzhiyun boolean c2h_bt_inquiry_page; 246*4882a593Smuzhiyun boolean bt_inq_page_pre; 247*4882a593Smuzhiyun boolean bt_inq_page_remain; 248*4882a593Smuzhiyun boolean c2h_bt_remote_name_req; 249*4882a593Smuzhiyun boolean c2h_bt_page; 250*4882a593Smuzhiyun boolean wifi_is_high_pri_task; 251*4882a593Smuzhiyun boolean wifi_in_scan_task; 252*4882a593Smuzhiyun u8 bt_retry_cnt; 253*4882a593Smuzhiyun u8 bt_info_ext; 254*4882a593Smuzhiyun u8 bt_info_ext2; 255*4882a593Smuzhiyun u32 pop_event_cnt; 256*4882a593Smuzhiyun u8 scan_ap_num; 257*4882a593Smuzhiyun 258*4882a593Smuzhiyun u32 crc_ok_cck; 259*4882a593Smuzhiyun u32 crc_ok_11g; 260*4882a593Smuzhiyun u32 crc_ok_11n; 261*4882a593Smuzhiyun u32 crc_ok_11n_vht; 262*4882a593Smuzhiyun 263*4882a593Smuzhiyun u32 crc_err_cck; 264*4882a593Smuzhiyun u32 crc_err_11g; 265*4882a593Smuzhiyun u32 crc_err_11n; 266*4882a593Smuzhiyun u32 crc_err_11n_vht; 267*4882a593Smuzhiyun 268*4882a593Smuzhiyun boolean cck_lock; 269*4882a593Smuzhiyun boolean cck_lock_ever; 270*4882a593Smuzhiyun boolean cck_lock_warn; 271*4882a593Smuzhiyun 272*4882a593Smuzhiyun u8 coex_table_type; 273*4882a593Smuzhiyun boolean force_lps_ctrl; 274*4882a593Smuzhiyun boolean concurrent_rx_mode_on; 275*4882a593Smuzhiyun 276*4882a593Smuzhiyun u16 score_board; 277*4882a593Smuzhiyun u8 isolation_btween_wb; /* 0~ 50 */ 278*4882a593Smuzhiyun 279*4882a593Smuzhiyun u8 a2dp_bit_pool; 280*4882a593Smuzhiyun u8 kt_ver; 281*4882a593Smuzhiyun boolean acl_busy; 282*4882a593Smuzhiyun boolean bt_create_connection; 283*4882a593Smuzhiyun 284*4882a593Smuzhiyun u32 bt_coex_supported_feature; 285*4882a593Smuzhiyun u32 bt_coex_supported_version; 286*4882a593Smuzhiyun 287*4882a593Smuzhiyun u8 bt_ble_scan_type; 288*4882a593Smuzhiyun u32 bt_ble_scan_para[3]; 289*4882a593Smuzhiyun 290*4882a593Smuzhiyun boolean run_time_state; 291*4882a593Smuzhiyun boolean freeze_coexrun_by_btinfo; 292*4882a593Smuzhiyun 293*4882a593Smuzhiyun boolean is_A2DP_3M; 294*4882a593Smuzhiyun boolean voice_over_HOGP; 295*4882a593Smuzhiyun boolean bt_a2dp_active; 296*4882a593Smuzhiyun u8 bt_info; 297*4882a593Smuzhiyun u8 forbidden_slot; 298*4882a593Smuzhiyun u8 hid_busy_num; 299*4882a593Smuzhiyun u8 hid_pair_cnt; 300*4882a593Smuzhiyun 301*4882a593Smuzhiyun u32 cnt_remotenamereq; 302*4882a593Smuzhiyun u32 cnt_setuplink; 303*4882a593Smuzhiyun u32 cnt_reinit; 304*4882a593Smuzhiyun u32 cnt_ignwlanact; 305*4882a593Smuzhiyun u32 cnt_page; 306*4882a593Smuzhiyun u32 cnt_roleswitch; 307*4882a593Smuzhiyun 308*4882a593Smuzhiyun u16 bt_reg_vendor_ac; 309*4882a593Smuzhiyun u16 bt_reg_vendor_ae; 310*4882a593Smuzhiyun 311*4882a593Smuzhiyun boolean is_setup_link; 312*4882a593Smuzhiyun u8 wl_noisy_level; 313*4882a593Smuzhiyun u32 gnt_error_cnt; 314*4882a593Smuzhiyun 315*4882a593Smuzhiyun u8 bt_afh_map[10]; 316*4882a593Smuzhiyun u8 bt_relink_downcount; 317*4882a593Smuzhiyun u8 bt_inq_page_downcount; 318*4882a593Smuzhiyun boolean is_tdma_btautoslot; 319*4882a593Smuzhiyun boolean is_tdma_btautoslot_hang; 320*4882a593Smuzhiyun 321*4882a593Smuzhiyun boolean is_rf_state_off; 322*4882a593Smuzhiyun 323*4882a593Smuzhiyun boolean is_hid_low_pri_tx_overhead; 324*4882a593Smuzhiyun boolean is_bt_multi_link; 325*4882a593Smuzhiyun boolean is_bt_a2dp_sink; 326*4882a593Smuzhiyun boolean is_bt_mesh_ver; 327*4882a593Smuzhiyun 328*4882a593Smuzhiyun u8 wl_fw_dbg_info[10]; 329*4882a593Smuzhiyun u8 wl_rx_rate; 330*4882a593Smuzhiyun u8 wl_rts_rx_rate; 331*4882a593Smuzhiyun 332*4882a593Smuzhiyun u16 score_board_WB; 333*4882a593Smuzhiyun 334*4882a593Smuzhiyun boolean is_hid_rcu; 335*4882a593Smuzhiyun boolean is_ble_scan_en; 336*4882a593Smuzhiyun 337*4882a593Smuzhiyun u16 legacy_forbidden_slot; 338*4882a593Smuzhiyun u16 le_forbidden_slot; 339*4882a593Smuzhiyun u8 bt_a2dp_vendor_id; 340*4882a593Smuzhiyun u32 bt_a2dp_device_name; 341*4882a593Smuzhiyun boolean is_bt_opp_exist; 342*4882a593Smuzhiyun boolean is_no_wl_5ms_extend; 343*4882a593Smuzhiyun 344*4882a593Smuzhiyun u16 wl_0x42a_backup; 345*4882a593Smuzhiyun u32 wl_0x430_backup; 346*4882a593Smuzhiyun u32 wl_0x434_backup; 347*4882a593Smuzhiyun u8 wl_0x456_backup; 348*4882a593Smuzhiyun 349*4882a593Smuzhiyun boolean wl_tx_limit_en; 350*4882a593Smuzhiyun boolean wl_ampdu_limit_en; 351*4882a593Smuzhiyun boolean wl_rxagg_limit_en; 352*4882a593Smuzhiyun u8 wl_rxagg_size; 353*4882a593Smuzhiyun 354*4882a593Smuzhiyun u8 tdma_timer_base; 355*4882a593Smuzhiyun u8 wl_iot_peer; 356*4882a593Smuzhiyun 357*4882a593Smuzhiyun }; 358*4882a593Smuzhiyun 359*4882a593Smuzhiyun #define BT_8723D_1ANT_ANTDET_PSD_POINTS 256 360*4882a593Smuzhiyun #define BT_8723D_1ANT_ANTDET_PSD_AVGNUM 1 361*4882a593Smuzhiyun #define BT_8723D_1ANT_ANTDET_BUF_LEN 16 362*4882a593Smuzhiyun 363*4882a593Smuzhiyun struct psdscan_sta_8723d_1ant { 364*4882a593Smuzhiyun 365*4882a593Smuzhiyun u32 ant_det_bt_le_channel; /* BT LE Channel ex:2412 */ 366*4882a593Smuzhiyun u32 ant_det_bt_tx_time; 367*4882a593Smuzhiyun u32 ant_det_pre_psdscan_peak_val; 368*4882a593Smuzhiyun boolean ant_det_is_ant_det_available; 369*4882a593Smuzhiyun u32 ant_det_psd_scan_peak_val; 370*4882a593Smuzhiyun boolean ant_det_is_btreply_available; 371*4882a593Smuzhiyun u32 ant_det_psd_scan_peak_freq; 372*4882a593Smuzhiyun 373*4882a593Smuzhiyun u8 ant_det_result; 374*4882a593Smuzhiyun u8 ant_det_peak_val[BT_8723D_1ANT_ANTDET_BUF_LEN]; 375*4882a593Smuzhiyun u8 ant_det_peak_freq[BT_8723D_1ANT_ANTDET_BUF_LEN]; 376*4882a593Smuzhiyun u32 ant_det_try_count; 377*4882a593Smuzhiyun u32 ant_det_fail_count; 378*4882a593Smuzhiyun u32 ant_det_inteval_count; 379*4882a593Smuzhiyun u32 ant_det_thres_offset; 380*4882a593Smuzhiyun 381*4882a593Smuzhiyun u32 real_cent_freq; 382*4882a593Smuzhiyun s32 real_offset; 383*4882a593Smuzhiyun u32 real_span; 384*4882a593Smuzhiyun 385*4882a593Smuzhiyun u32 psd_band_width; 386*4882a593Smuzhiyun u32 psd_point; 387*4882a593Smuzhiyun u32 psd_report[1024]; 388*4882a593Smuzhiyun u32 psd_report_max_hold[1024]; 389*4882a593Smuzhiyun u32 psd_start_point; 390*4882a593Smuzhiyun u32 psd_stop_point; 391*4882a593Smuzhiyun u32 psd_max_value_point; 392*4882a593Smuzhiyun u32 psd_max_value; 393*4882a593Smuzhiyun u32 psd_max_value2; 394*4882a593Smuzhiyun u32 psd_avg_value; 395*4882a593Smuzhiyun u32 psd_loop_max_value[BT_8723D_1ANT_ANTDET_PSD_SWWEEPCOUNT]; 396*4882a593Smuzhiyun u32 psd_start_base; 397*4882a593Smuzhiyun u32 psd_avg_num; /* 1/8/16/32 */ 398*4882a593Smuzhiyun u32 psd_gen_count; 399*4882a593Smuzhiyun boolean is_antdet_running; 400*4882a593Smuzhiyun boolean is_psd_show_max_only; 401*4882a593Smuzhiyun }; 402*4882a593Smuzhiyun 403*4882a593Smuzhiyun /* ******************************************* 404*4882a593Smuzhiyun * The following is interface which will notify coex module. 405*4882a593Smuzhiyun * ******************************************* */ 406*4882a593Smuzhiyun void ex_halbtc8723d1ant_power_on_setting(IN struct btc_coexist *btcoexist); 407*4882a593Smuzhiyun void ex_halbtc8723d1ant_pre_load_firmware(IN struct btc_coexist *btcoexist); 408*4882a593Smuzhiyun void ex_halbtc8723d1ant_init_hw_config(IN struct btc_coexist *btcoexist, 409*4882a593Smuzhiyun IN boolean wifi_only); 410*4882a593Smuzhiyun void ex_halbtc8723d1ant_init_coex_dm(IN struct btc_coexist *btcoexist); 411*4882a593Smuzhiyun void ex_halbtc8723d1ant_ips_notify(IN struct btc_coexist *btcoexist, 412*4882a593Smuzhiyun IN u8 type); 413*4882a593Smuzhiyun void ex_halbtc8723d1ant_lps_notify(IN struct btc_coexist *btcoexist, 414*4882a593Smuzhiyun IN u8 type); 415*4882a593Smuzhiyun void ex_halbtc8723d1ant_scan_notify(IN struct btc_coexist *btcoexist, 416*4882a593Smuzhiyun IN u8 type); 417*4882a593Smuzhiyun void ex_halbtc8723d1ant_connect_notify(IN struct btc_coexist *btcoexist, 418*4882a593Smuzhiyun IN u8 type); 419*4882a593Smuzhiyun void ex_halbtc8723d1ant_media_status_notify(IN struct btc_coexist *btcoexist, 420*4882a593Smuzhiyun IN u8 type); 421*4882a593Smuzhiyun void ex_halbtc8723d1ant_specific_packet_notify(IN struct btc_coexist *btcoexist, 422*4882a593Smuzhiyun IN u8 type); 423*4882a593Smuzhiyun void ex_halbtc8723d1ant_bt_info_notify(IN struct btc_coexist *btcoexist, 424*4882a593Smuzhiyun IN u8 *tmp_buf, IN u8 length); 425*4882a593Smuzhiyun void ex_halbtc8723d1ant_wl_fwdbginfo_notify(IN struct btc_coexist *btcoexist, 426*4882a593Smuzhiyun IN u8 *tmp_buf, IN u8 length); 427*4882a593Smuzhiyun void ex_halbtc8723d1ant_rx_rate_change_notify(IN struct btc_coexist *btcoexist, 428*4882a593Smuzhiyun IN BOOLEAN is_data_frame, IN u8 btc_rate_id); 429*4882a593Smuzhiyun void ex_halbtc8723d1ant_rf_status_notify(IN struct btc_coexist *btcoexist, 430*4882a593Smuzhiyun IN u8 type); 431*4882a593Smuzhiyun void ex_halbtc8723d1ant_halt_notify(IN struct btc_coexist *btcoexist); 432*4882a593Smuzhiyun void ex_halbtc8723d1ant_pnp_notify(IN struct btc_coexist *btcoexist, 433*4882a593Smuzhiyun IN u8 pnp_state); 434*4882a593Smuzhiyun void ex_halbtc8723d1ant_coex_dm_reset(IN struct btc_coexist *btcoexist); 435*4882a593Smuzhiyun void ex_halbtc8723d1ant_periodical(IN struct btc_coexist *btcoexist); 436*4882a593Smuzhiyun void ex_halbtc8723d1ant_set_antenna_notify(IN struct btc_coexist *btcoexist, 437*4882a593Smuzhiyun IN u8 type); 438*4882a593Smuzhiyun void ex_halbtc8723d1ant_display_coex_info(IN struct btc_coexist *btcoexist); 439*4882a593Smuzhiyun void ex_halbtc8723d1ant_antenna_detection(IN struct btc_coexist *btcoexist, 440*4882a593Smuzhiyun IN u32 cent_freq, IN u32 offset, IN u32 span, IN u32 seconds); 441*4882a593Smuzhiyun void ex_halbtc8723d1ant_antenna_isolation(IN struct btc_coexist *btcoexist, 442*4882a593Smuzhiyun IN u32 cent_freq, IN u32 offset, IN u32 span, IN u32 seconds); 443*4882a593Smuzhiyun 444*4882a593Smuzhiyun void ex_halbtc8723d1ant_psd_scan(IN struct btc_coexist *btcoexist, 445*4882a593Smuzhiyun IN u32 cent_freq, IN u32 offset, IN u32 span, IN u32 seconds); 446*4882a593Smuzhiyun void ex_halbtc8723d1ant_display_ant_detection(IN struct btc_coexist *btcoexist); 447*4882a593Smuzhiyun 448*4882a593Smuzhiyun #else 449*4882a593Smuzhiyun #define ex_halbtc8723d1ant_power_on_setting(btcoexist) 450*4882a593Smuzhiyun #define ex_halbtc8723d1ant_pre_load_firmware(btcoexist) 451*4882a593Smuzhiyun #define ex_halbtc8723d1ant_init_hw_config(btcoexist, wifi_only) 452*4882a593Smuzhiyun #define ex_halbtc8723d1ant_init_coex_dm(btcoexist) 453*4882a593Smuzhiyun #define ex_halbtc8723d1ant_ips_notify(btcoexist, type) 454*4882a593Smuzhiyun #define ex_halbtc8723d1ant_lps_notify(btcoexist, type) 455*4882a593Smuzhiyun #define ex_halbtc8723d1ant_scan_notify(btcoexist, type) 456*4882a593Smuzhiyun #define ex_halbtc8723d1ant_connect_notify(btcoexist, type) 457*4882a593Smuzhiyun #define ex_halbtc8723d1ant_media_status_notify(btcoexist, type) 458*4882a593Smuzhiyun #define ex_halbtc8723d1ant_specific_packet_notify(btcoexist, type) 459*4882a593Smuzhiyun #define ex_halbtc8723d1ant_bt_info_notify(btcoexist, tmp_buf, length) 460*4882a593Smuzhiyun #define ex_halbtc8723d1ant_wl_fwdbginfo_notify(btcoexist, tmp_buf, length) 461*4882a593Smuzhiyun #define ex_halbtc8723d1ant_rx_rate_change_notify(btcoexist, is_data_frame, btc_rate_id) 462*4882a593Smuzhiyun #define ex_halbtc8723d1ant_rf_status_notify(btcoexist, type) 463*4882a593Smuzhiyun #define ex_halbtc8723d1ant_halt_notify(btcoexist) 464*4882a593Smuzhiyun #define ex_halbtc8723d1ant_pnp_notify(btcoexist, pnp_state) 465*4882a593Smuzhiyun #define ex_halbtc8723d1ant_coex_dm_reset(btcoexist) 466*4882a593Smuzhiyun #define ex_halbtc8723d1ant_periodical(btcoexist) 467*4882a593Smuzhiyun #define ex_halbtc8723d1ant_display_coex_info(btcoexist) 468*4882a593Smuzhiyun #define ex_halbtc8723d1ant_set_antenna_notify(btcoexist, type) 469*4882a593Smuzhiyun #define ex_halbtc8723d1ant_antenna_detection(btcoexist, cent_freq, offset, span, seconds) 470*4882a593Smuzhiyun #define ex_halbtc8723d1ant_antenna_isolation(btcoexist, cent_freq, offset, span, seconds) 471*4882a593Smuzhiyun #define ex_halbtc8723d1ant_psd_scan(btcoexist, cent_freq, offset, span, seconds) 472*4882a593Smuzhiyun #define ex_halbtc8723d1ant_display_ant_detection(btcoexist) 473*4882a593Smuzhiyun #endif 474*4882a593Smuzhiyun 475*4882a593Smuzhiyun #endif 476*4882a593Smuzhiyun 477