staging: r8192ee: Add code for Bluetooth coexistence
In the wireless tree, this code forms a separate mini driver. As the changes needed for the later drivers has not yet been merged, a separate version is needed here. Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Родитель
78de2c0637
Коммит
e22f4eda7f
|
@ -0,0 +1,50 @@
|
|||
/******************************************************************************
|
||||
*
|
||||
* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of version 2 of the GNU General Public License as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
*
|
||||
******************************************************************************/
|
||||
#ifndef __HALBT_PRECOMP_H__
|
||||
#define __HALBT_PRECOMP_H__
|
||||
/*************************************************************
|
||||
* include files
|
||||
*************************************************************/
|
||||
#include "../wifi.h"
|
||||
#include "../efuse.h"
|
||||
#include "../base.h"
|
||||
#include "../regd.h"
|
||||
#include "../cam.h"
|
||||
#include "../ps.h"
|
||||
#include "../pci.h"
|
||||
|
||||
#include "halbtcoutsrc.h"
|
||||
|
||||
|
||||
#include "halbtc8192e2ant.h"
|
||||
#include "halbtc8723b1ant.h"
|
||||
#include "halbtc8723b2ant.h"
|
||||
#include "halbtc8821a2ant.h"
|
||||
#include "halbtc8821a1ant.h"
|
||||
|
||||
#define MASKBYTE0 0xff
|
||||
#define MASKBYTE1 0xff00
|
||||
#define MASKBYTE2 0xff0000
|
||||
#define MASKBYTE3 0xff000000
|
||||
#define MASKHWORD 0xffff0000
|
||||
#define MASKLWORD 0x0000ffff
|
||||
#define MASKDWORD 0xffffffff
|
||||
#define MASK12BITS 0xfff
|
||||
#define MASKH4BITS 0xf0000000
|
||||
#define MASKOFDM_D 0xffc00000
|
||||
#define MASKCCK 0x3f3f3f3f
|
||||
|
||||
#endif /* __HALBT_PRECOMP_H__ */
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -0,0 +1,161 @@
|
|||
/*****************************************************************
|
||||
* The following is for 8192E 2Ant BT Co-exist definition
|
||||
*****************************************************************/
|
||||
#define BT_AUTO_REPORT_ONLY_8192E_2ANT 0
|
||||
|
||||
#define BT_INFO_8192E_2ANT_B_FTP BIT(7)
|
||||
#define BT_INFO_8192E_2ANT_B_A2DP BIT(6)
|
||||
#define BT_INFO_8192E_2ANT_B_HID BIT(5)
|
||||
#define BT_INFO_8192E_2ANT_B_SCO_BUSY BIT(4)
|
||||
#define BT_INFO_8192E_2ANT_B_ACL_BUSY BIT(3)
|
||||
#define BT_INFO_8192E_2ANT_B_INQ_PAGE BIT(2)
|
||||
#define BT_INFO_8192E_2ANT_B_SCO_ESCO BIT(1)
|
||||
#define BT_INFO_8192E_2ANT_B_CONNECTION BIT(0)
|
||||
|
||||
#define BTC_RSSI_COEX_THRESH_TOL_8192E_2ANT 2
|
||||
|
||||
enum bt_info_src_8192e_2ant {
|
||||
BT_INFO_SRC_8192E_2ANT_WIFI_FW = 0x0,
|
||||
BT_INFO_SRC_8192E_2ANT_BT_RSP = 0x1,
|
||||
BT_INFO_SRC_8192E_2ANT_BT_ACTIVE_SEND = 0x2,
|
||||
BT_INFO_SRC_8192E_2ANT_MAX
|
||||
};
|
||||
|
||||
enum bt_8192e_2ant_bt_status {
|
||||
BT_8192E_2ANT_BT_STATUS_NON_CONNECTED_IDLE = 0x0,
|
||||
BT_8192E_2ANT_BT_STATUS_CONNECTED_IDLE = 0x1,
|
||||
BT_8192E_2ANT_BT_STATUS_INQ_PAGE = 0x2,
|
||||
BT_8192E_2ANT_BT_STATUS_ACL_BUSY = 0x3,
|
||||
BT_8192E_2ANT_BT_STATUS_SCO_BUSY = 0x4,
|
||||
BT_8192E_2ANT_BT_STATUS_ACL_SCO_BUSY = 0x5,
|
||||
BT_8192E_2ANT_BT_STATUS_MAX
|
||||
};
|
||||
|
||||
enum bt_8192e_2ant_coex_algo {
|
||||
BT_8192E_2ANT_COEX_ALGO_UNDEFINED = 0x0,
|
||||
BT_8192E_2ANT_COEX_ALGO_SCO = 0x1,
|
||||
BT_8192E_2ANT_COEX_ALGO_SCO_PAN = 0x2,
|
||||
BT_8192E_2ANT_COEX_ALGO_HID = 0x3,
|
||||
BT_8192E_2ANT_COEX_ALGO_A2DP = 0x4,
|
||||
BT_8192E_2ANT_COEX_ALGO_A2DP_PANHS = 0x5,
|
||||
BT_8192E_2ANT_COEX_ALGO_PANEDR = 0x6,
|
||||
BT_8192E_2ANT_COEX_ALGO_PANHS = 0x7,
|
||||
BT_8192E_2ANT_COEX_ALGO_PANEDR_A2DP = 0x8,
|
||||
BT_8192E_2ANT_COEX_ALGO_PANEDR_HID = 0x9,
|
||||
BT_8192E_2ANT_COEX_ALGO_HID_A2DP_PANEDR = 0xa,
|
||||
BT_8192E_2ANT_COEX_ALGO_HID_A2DP = 0xb,
|
||||
BT_8192E_2ANT_COEX_ALGO_MAX = 0xc
|
||||
};
|
||||
|
||||
struct coex_dm_8192e_2ant {
|
||||
/* fw mechanism */
|
||||
u8 pre_dec_bt_pwr;
|
||||
u8 cur_dec_bt_pwr;
|
||||
u8 pre_fw_dac_swing_lvl;
|
||||
u8 cur_fw_dac_swing_lvl;
|
||||
bool cur_ignore_wlan_act;
|
||||
bool pre_ignore_wlan_act;
|
||||
u8 pre_ps_tdma;
|
||||
u8 cur_ps_tdma;
|
||||
u8 ps_tdma_para[5];
|
||||
u8 ps_tdma_du_adj_type;
|
||||
bool reset_tdma_adjust;
|
||||
bool auto_tdma_adjust;
|
||||
bool pre_ps_tdma_on;
|
||||
bool cur_ps_tdma_on;
|
||||
bool pre_bt_auto_report;
|
||||
bool cur_bt_auto_report;
|
||||
|
||||
/* sw mechanism */
|
||||
bool pre_rf_rx_lpf_shrink;
|
||||
bool cur_rf_rx_lpf_shrink;
|
||||
u32 bt_rf0x1e_backup;
|
||||
bool pre_low_penalty_ra;
|
||||
bool cur_low_penalty_ra;
|
||||
bool pre_dac_swing_on;
|
||||
u32 pre_dac_swing_lvl;
|
||||
bool cur_dac_swing_on;
|
||||
u32 cur_dac_swing_lvl;
|
||||
bool pre_adc_back_off;
|
||||
bool cur_adc_back_off;
|
||||
bool pre_agc_table_en;
|
||||
bool cur_agc_table_en;
|
||||
u32 pre_val0x6c0;
|
||||
u32 cur_val0x6c0;
|
||||
u32 pre_val0x6c4;
|
||||
u32 cur_val0x6c4;
|
||||
u32 pre_val0x6c8;
|
||||
u32 cur_val0x6c8;
|
||||
u8 pre_val0x6cc;
|
||||
u8 cur_val0x6cc;
|
||||
bool limited_dig;
|
||||
|
||||
u32 backup_arfr_cnt1; /* Auto Rate Fallback Retry cnt */
|
||||
u32 backup_arfr_cnt2; /* Auto Rate Fallback Retry cnt */
|
||||
u16 backup_retrylimit;
|
||||
u8 backup_ampdu_maxtime;
|
||||
|
||||
/* algorithm related */
|
||||
u8 pre_algorithm;
|
||||
u8 cur_algorithm;
|
||||
u8 bt_status;
|
||||
u8 wifi_chnl_info[3];
|
||||
|
||||
u8 pre_sstype;
|
||||
u8 cur_sstype;
|
||||
|
||||
u32 prera_mask;
|
||||
u32 curra_mask;
|
||||
u8 curra_masktype;
|
||||
u8 pre_arfrtype;
|
||||
u8 cur_arfrtype;
|
||||
u8 pre_retrylimit_type;
|
||||
u8 cur_retrylimit_type;
|
||||
u8 pre_ampdutime_type;
|
||||
u8 cur_ampdutime_type;
|
||||
};
|
||||
|
||||
struct coex_sta_8192e_2ant {
|
||||
bool bt_link_exist;
|
||||
bool sco_exist;
|
||||
bool a2dp_exist;
|
||||
bool hid_exist;
|
||||
bool pan_exist;
|
||||
|
||||
bool under_lps;
|
||||
bool under_ips;
|
||||
u32 high_priority_tx;
|
||||
u32 high_priority_rx;
|
||||
u32 low_priority_tx;
|
||||
u32 low_priority_rx;
|
||||
u8 bt_rssi;
|
||||
u8 pre_bt_rssi_state;
|
||||
u8 pre_wifi_rssi_state[4];
|
||||
bool c2h_bt_info_req_sent;
|
||||
u8 bt_info_c2h[BT_INFO_SRC_8192E_2ANT_MAX][10];
|
||||
u32 bt_info_c2h_cnt[BT_INFO_SRC_8192E_2ANT_MAX];
|
||||
bool c2h_bt_inquiry_page;
|
||||
u8 bt_retry_cnt;
|
||||
u8 bt_info_ext;
|
||||
};
|
||||
|
||||
/****************************************************************
|
||||
* The following is interface which will notify coex module.
|
||||
****************************************************************/
|
||||
void ex_halbtc8192e2ant_init_hwconfig(struct btc_coexist *btcoexist);
|
||||
void ex_halbtc8192e2ant_init_coex_dm(struct btc_coexist *btcoexist);
|
||||
void ex_halbtc8192e2ant_ips_notify(struct btc_coexist *btcoexist, u8 type);
|
||||
void ex_halbtc8192e2ant_lps_notify(struct btc_coexist *btcoexist, u8 type);
|
||||
void ex_halbtc8192e2ant_scan_notify(struct btc_coexist *btcoexist, u8 type);
|
||||
void ex_halbtc8192e2ant_connect_notify(struct btc_coexist *btcoexist, u8 type);
|
||||
void ex_halbtc8192e2ant_media_status_notify(struct btc_coexist *btcoexist,
|
||||
u8 type);
|
||||
void ex_halbtc8192e2ant_special_packet_notify(struct btc_coexist *btcoexist,
|
||||
u8 type);
|
||||
void ex_halbtc8192e2ant_bt_info_notify(struct btc_coexist *btcoexist,
|
||||
u8 *tmpbuf, u8 length);
|
||||
void ex_halbtc8192e2ant_stack_operation_notify(struct btc_coexist *btcoexist,
|
||||
u8 type);
|
||||
void ex_halbtc8192e2ant_halt_notify(struct btc_coexist *btcoexist);
|
||||
void ex_halbtc8192e2ant_periodical(struct btc_coexist *btcoexist);
|
||||
void ex_halbtc8192e2ant_display_coex_info(struct btc_coexist *btcoexist);
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -0,0 +1,160 @@
|
|||
/**********************************************************************
|
||||
* The following is for 8723B 1ANT BT Co-exist definition
|
||||
**********************************************************************/
|
||||
#define BT_AUTO_REPORT_ONLY_8723B_1ANT 1
|
||||
|
||||
#define BT_INFO_8723B_1ANT_B_FTP BIT(7)
|
||||
#define BT_INFO_8723B_1ANT_B_A2DP BIT(6)
|
||||
#define BT_INFO_8723B_1ANT_B_HID BIT(5)
|
||||
#define BT_INFO_8723B_1ANT_B_SCO_BUSY BIT(4)
|
||||
#define BT_INFO_8723B_1ANT_B_ACL_BUSY BIT(3)
|
||||
#define BT_INFO_8723B_1ANT_B_INQ_PAGE BIT(2)
|
||||
#define BT_INFO_8723B_1ANT_B_SCO_ESCO BIT(1)
|
||||
#define BT_INFO_8723B_1ANT_B_CONNECTION BIT(0)
|
||||
|
||||
#define BT_INFO_8723B_1ANT_A2DP_BASIC_RATE(_BT_INFO_EXT_) \
|
||||
(((_BT_INFO_EXT_&BIT(0))) ? true : false)
|
||||
|
||||
#define BTC_RSSI_COEX_THRESH_TOL_8723B_1ANT 2
|
||||
|
||||
enum BT_INFO_SRC_8723B_1ANT {
|
||||
BT_INFO_SRC_8723B_1ANT_WIFI_FW = 0x0,
|
||||
BT_INFO_SRC_8723B_1ANT_BT_RSP = 0x1,
|
||||
BT_INFO_SRC_8723B_1ANT_BT_ACTIVE_SEND = 0x2,
|
||||
BT_INFO_SRC_8723B_1ANT_MAX
|
||||
};
|
||||
|
||||
enum BT_8723B_1ANT_BT_STATUS {
|
||||
BT_8723B_1ANT_BT_STATUS_NON_CONNECTED_IDLE = 0x0,
|
||||
BT_8723B_1ANT_BT_STATUS_CONNECTED_IDLE = 0x1,
|
||||
BT_8723B_1ANT_BT_STATUS_INQ_PAGE = 0x2,
|
||||
BT_8723B_1ANT_BT_STATUS_ACL_BUSY = 0x3,
|
||||
BT_8723B_1ANT_BT_STATUS_SCO_BUSY = 0x4,
|
||||
BT_8723B_1ANT_BT_STATUS_ACL_SCO_BUSY = 0x5,
|
||||
BT_8723B_1ANT_BT_STATUS_MAX
|
||||
};
|
||||
|
||||
enum BT_8723B_1ANT_WIFI_STATUS {
|
||||
BT_8723B_1ANT_WIFI_STATUS_NON_CONNECTED_IDLE = 0x0,
|
||||
BT_8723B_1ANT_WIFI_STATUS_NON_CONNECTED_ASSO_AUTH_SCAN = 0x1,
|
||||
BT_8723B_1ANT_WIFI_STATUS_CONNECTED_SCAN = 0x2,
|
||||
BT_8723B_1ANT_WIFI_STATUS_CONNECTED_SPECIAL_PKT = 0x3,
|
||||
BT_8723B_1ANT_WIFI_STATUS_CONNECTED_IDLE = 0x4,
|
||||
BT_8723B_1ANT_WIFI_STATUS_CONNECTED_BUSY = 0x5,
|
||||
BT_8723B_1ANT_WIFI_STATUS_MAX
|
||||
};
|
||||
|
||||
enum BT_8723B_1ANT_COEX_ALGO {
|
||||
BT_8723B_1ANT_COEX_ALGO_UNDEFINED = 0x0,
|
||||
BT_8723B_1ANT_COEX_ALGO_SCO = 0x1,
|
||||
BT_8723B_1ANT_COEX_ALGO_HID = 0x2,
|
||||
BT_8723B_1ANT_COEX_ALGO_A2DP = 0x3,
|
||||
BT_8723B_1ANT_COEX_ALGO_A2DP_PANHS = 0x4,
|
||||
BT_8723B_1ANT_COEX_ALGO_PANEDR = 0x5,
|
||||
BT_8723B_1ANT_COEX_ALGO_PANHS = 0x6,
|
||||
BT_8723B_1ANT_COEX_ALGO_PANEDR_A2DP = 0x7,
|
||||
BT_8723B_1ANT_COEX_ALGO_PANEDR_HID = 0x8,
|
||||
BT_8723B_1ANT_COEX_ALGO_HID_A2DP_PANEDR = 0x9,
|
||||
BT_8723B_1ANT_COEX_ALGO_HID_A2DP = 0xa,
|
||||
BT_8723B_1ANT_COEX_ALGO_MAX = 0xb,
|
||||
};
|
||||
|
||||
struct coex_dm_8723b_1ant {
|
||||
/* fw mechanism */
|
||||
bool cur_ignore_wlan_act;
|
||||
bool pre_ignore_wlan_act;
|
||||
u8 pre_ps_tdma;
|
||||
u8 cur_ps_tdma;
|
||||
u8 ps_tdma_para[5];
|
||||
u8 ps_tdma_du_adj_type;
|
||||
bool auto_tdma_adjust;
|
||||
bool pre_ps_tdma_on;
|
||||
bool cur_ps_tdma_on;
|
||||
bool pre_bt_auto_report;
|
||||
bool cur_bt_auto_report;
|
||||
u8 pre_lps;
|
||||
u8 cur_lps;
|
||||
u8 pre_rpwm;
|
||||
u8 cur_rpwm;
|
||||
|
||||
/* sw mechanism */
|
||||
bool pre_low_penalty_ra;
|
||||
bool cur_low_penalty_ra;
|
||||
u32 pre_val0x6c0;
|
||||
u32 cur_val0x6c0;
|
||||
u32 pre_val0x6c4;
|
||||
u32 cur_val0x6c4;
|
||||
u32 pre_val0x6c8;
|
||||
u32 cur_val0x6c8;
|
||||
u8 pre_val0x6cc;
|
||||
u8 cur_val0x6cc;
|
||||
bool limited_dig;
|
||||
|
||||
u32 backup_arfr_cnt1; /* Auto Rate Fallback Retry cnt */
|
||||
u32 backup_arfr_cnt2; /* Auto Rate Fallback Retry cnt */
|
||||
u16 backup_retry_limit;
|
||||
u8 backup_ampdu_max_time;
|
||||
|
||||
/* algorithm related */
|
||||
u8 pre_algorithm;
|
||||
u8 cur_algorithm;
|
||||
u8 bt_status;
|
||||
u8 wifi_chnl_info[3];
|
||||
|
||||
u32 prera_mask;
|
||||
u32 curra_mask;
|
||||
u8 pre_arfr_type;
|
||||
u8 cur_arfr_type;
|
||||
u8 pre_retry_limit_type;
|
||||
u8 cur_retry_limit_type;
|
||||
u8 pre_ampdu_time_type;
|
||||
u8 cur_ampdu_time_type;
|
||||
|
||||
u8 error_condition;
|
||||
};
|
||||
|
||||
struct coex_sta_8723b_1ant {
|
||||
bool bt_link_exist;
|
||||
bool sco_exist;
|
||||
bool a2dp_exist;
|
||||
bool hid_exist;
|
||||
bool pan_exist;
|
||||
|
||||
bool under_lps;
|
||||
bool under_ips;
|
||||
u32 special_pkt_period_cnt;
|
||||
u32 high_priority_tx;
|
||||
u32 high_priority_rx;
|
||||
u32 low_priority_tx;
|
||||
u32 low_priority_rx;
|
||||
u8 bt_rssi;
|
||||
u8 pre_bt_rssi_state;
|
||||
u8 pre_wifi_rssi_state[4];
|
||||
bool c2h_bt_info_req_sent;
|
||||
u8 bt_info_c2h[BT_INFO_SRC_8723B_1ANT_MAX][10];
|
||||
u32 bt_info_c2h_cnt[BT_INFO_SRC_8723B_1ANT_MAX];
|
||||
bool c2h_bt_inquiry_page;
|
||||
u8 bt_retry_cnt;
|
||||
u8 bt_info_ext;
|
||||
};
|
||||
|
||||
/*************************************************************************
|
||||
* The following is interface which will notify coex module.
|
||||
*************************************************************************/
|
||||
void ex_halbtc8723b1ant_init_hwconfig(struct btc_coexist *btcoexist);
|
||||
void ex_halbtc8723b1ant_init_coex_dm(struct btc_coexist *btcoexist);
|
||||
void ex_halbtc8723b1ant_ips_notify(struct btc_coexist *btcoexist, u8 type);
|
||||
void ex_halbtc8723b1ant_lps_notify(struct btc_coexist *btcoexist, u8 type);
|
||||
void ex_halbtc8723b1ant_scan_notify(struct btc_coexist *btcoexist, u8 type);
|
||||
void ex_halbtc8723b1ant_connect_notify(struct btc_coexist *btcoexist, u8 type);
|
||||
void ex_halbtc8723b1ant_media_status_notify(struct btc_coexist *btcoexist,
|
||||
u8 type);
|
||||
void ex_halbtc8723b1ant_special_packet_notify(struct btc_coexist *btcoexist,
|
||||
u8 type);
|
||||
void ex_halbtc8723b1ant_bt_info_notify(struct btc_coexist *btcoexist,
|
||||
u8 *tmpbuf, u8 length);
|
||||
void ex_halbtc8723b1ant_halt_notify(struct btc_coexist *btcoexist);
|
||||
void ex_halbtc8723b1ant_pnp_notify(struct btc_coexist *btcoexist, u8 state);
|
||||
void ex_halbtc8723b1ant_coex_dm_reset(struct btc_coexist *btcoexist);
|
||||
void ex_halbtc8723b1ant_periodical(struct btc_coexist *btcoexist);
|
||||
void ex_halbtc8723b1ant_display_coex_info(struct btc_coexist *btcoexist);
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -0,0 +1,145 @@
|
|||
/************************************************************************
|
||||
* The following is for 8723B 2Ant BT Co-exist definition
|
||||
************************************************************************/
|
||||
#define BT_AUTO_REPORT_ONLY_8723B_2ANT 1
|
||||
|
||||
|
||||
#define BT_INFO_8723B_2ANT_B_FTP BIT(7)
|
||||
#define BT_INFO_8723B_2ANT_B_A2DP BIT(6)
|
||||
#define BT_INFO_8723B_2ANT_B_HID BIT(5)
|
||||
#define BT_INFO_8723B_2ANT_B_SCO_BUSY BIT(4)
|
||||
#define BT_INFO_8723B_2ANT_B_ACL_BUSY BIT(3)
|
||||
#define BT_INFO_8723B_2ANT_B_INQ_PAGE BIT(2)
|
||||
#define BT_INFO_8723B_2ANT_B_SCO_ESCO BIT(1)
|
||||
#define BT_INFO_8723B_2ANT_B_CONNECTION BIT(0)
|
||||
|
||||
#define BTC_RSSI_COEX_THRESH_TOL_8723B_2ANT 2
|
||||
|
||||
enum BT_INFO_SRC_8723B_2ANT {
|
||||
BT_INFO_SRC_8723B_2ANT_WIFI_FW = 0x0,
|
||||
BT_INFO_SRC_8723B_2ANT_BT_RSP = 0x1,
|
||||
BT_INFO_SRC_8723B_2ANT_BT_ACTIVE_SEND = 0x2,
|
||||
BT_INFO_SRC_8723B_2ANT_MAX
|
||||
};
|
||||
|
||||
enum BT_8723B_2ANT_BT_STATUS {
|
||||
BT_8723B_2ANT_BT_STATUS_NON_CONNECTED_IDLE = 0x0,
|
||||
BT_8723B_2ANT_BT_STATUS_CONNECTED_IDLE = 0x1,
|
||||
BT_8723B_2ANT_BT_STATUS_INQ_PAGE = 0x2,
|
||||
BT_8723B_2ANT_BT_STATUS_ACL_BUSY = 0x3,
|
||||
BT_8723B_2ANT_BT_STATUS_SCO_BUSY = 0x4,
|
||||
BT_8723B_2ANT_BT_STATUS_ACL_SCO_BUSY = 0x5,
|
||||
BT_8723B_2ANT_BT_STATUS_MAX
|
||||
};
|
||||
|
||||
enum BT_8723B_2ANT_COEX_ALGO {
|
||||
BT_8723B_2ANT_COEX_ALGO_UNDEFINED = 0x0,
|
||||
BT_8723B_2ANT_COEX_ALGO_SCO = 0x1,
|
||||
BT_8723B_2ANT_COEX_ALGO_HID = 0x2,
|
||||
BT_8723B_2ANT_COEX_ALGO_A2DP = 0x3,
|
||||
BT_8723B_2ANT_COEX_ALGO_A2DP_PANHS = 0x4,
|
||||
BT_8723B_2ANT_COEX_ALGO_PANEDR = 0x5,
|
||||
BT_8723B_2ANT_COEX_ALGO_PANHS = 0x6,
|
||||
BT_8723B_2ANT_COEX_ALGO_PANEDR_A2DP = 0x7,
|
||||
BT_8723B_2ANT_COEX_ALGO_PANEDR_HID = 0x8,
|
||||
BT_8723B_2ANT_COEX_ALGO_HID_A2DP_PANEDR = 0x9,
|
||||
BT_8723B_2ANT_COEX_ALGO_HID_A2DP = 0xa,
|
||||
BT_8723B_2ANT_COEX_ALGO_MAX = 0xb,
|
||||
};
|
||||
|
||||
struct coex_dm_8723b_2ant {
|
||||
/* fw mechanism */
|
||||
bool pre_dec_bt_pwr;
|
||||
bool cur_dec_bt_pwr;
|
||||
u8 pre_fw_dac_swing_lvl;
|
||||
u8 cur_fw_dac_swing_lvl;
|
||||
bool cur_ignore_wlan_act;
|
||||
bool pre_ignore_wlan_act;
|
||||
u8 pre_ps_tdma;
|
||||
u8 cur_ps_tdma;
|
||||
u8 ps_tdma_para[5];
|
||||
u8 ps_tdma_du_adj_type;
|
||||
bool reset_tdma_adjust;
|
||||
bool auto_tdma_adjust;
|
||||
bool pre_ps_tdma_on;
|
||||
bool cur_ps_tdma_on;
|
||||
bool pre_bt_auto_report;
|
||||
bool cur_bt_auto_report;
|
||||
|
||||
/* sw mechanism */
|
||||
bool pre_rf_rx_lpf_shrink;
|
||||
bool cur_rf_rx_lpf_shrink;
|
||||
u32 bt_rf0x1e_backup;
|
||||
bool pre_low_penalty_ra;
|
||||
bool cur_low_penalty_ra;
|
||||
bool pre_dac_swing_on;
|
||||
u32 pre_dac_swing_lvl;
|
||||
bool cur_dac_swing_on;
|
||||
u32 cur_dac_swing_lvl;
|
||||
bool pre_adc_back_off;
|
||||
bool cur_adc_back_off;
|
||||
bool pre_agc_table_en;
|
||||
bool cur_agc_table_en;
|
||||
u32 pre_val0x6c0;
|
||||
u32 cur_val0x6c0;
|
||||
u32 pre_val0x6c4;
|
||||
u32 cur_val0x6c4;
|
||||
u32 pre_val0x6c8;
|
||||
u32 cur_val0x6c8;
|
||||
u8 pre_val0x6cc;
|
||||
u8 cur_val0x6cc;
|
||||
bool limited_dig;
|
||||
|
||||
/* algorithm related */
|
||||
u8 pre_algorithm;
|
||||
u8 cur_algorithm;
|
||||
u8 bt_status;
|
||||
u8 wifi_chnl_info[3];
|
||||
|
||||
bool need_recover_0x948;
|
||||
u16 backup_0x948;
|
||||
};
|
||||
|
||||
struct coex_sta_8723b_2ant {
|
||||
bool bt_link_exist;
|
||||
bool sco_exist;
|
||||
bool a2dp_exist;
|
||||
bool hid_exist;
|
||||
bool pan_exist;
|
||||
|
||||
bool under_lps;
|
||||
bool under_ips;
|
||||
u32 high_priority_tx;
|
||||
u32 high_priority_rx;
|
||||
u32 low_priority_tx;
|
||||
u32 low_priority_rx;
|
||||
u8 bt_rssi;
|
||||
u8 pre_bt_rssi_state;
|
||||
u8 pre_wifi_rssi_state[4];
|
||||
bool c2h_bt_info_req_sent;
|
||||
u8 bt_info_c2h[BT_INFO_SRC_8723B_2ANT_MAX][10];
|
||||
u32 bt_info_c2h_cnt[BT_INFO_SRC_8723B_2ANT_MAX];
|
||||
bool c2h_bt_inquiry_page;
|
||||
u8 bt_retry_cnt;
|
||||
u8 bt_info_ext;
|
||||
};
|
||||
|
||||
/*********************************************************************
|
||||
* The following is interface which will notify coex module.
|
||||
*********************************************************************/
|
||||
void ex92e_halbtc8723b2ant_init_hwconfig(struct btc_coexist *btcoexist);
|
||||
void ex92e_halbtc8723b2ant_init_coex_dm(struct btc_coexist *btcoexist);
|
||||
void ex92e_halbtc8723b2ant_ips_notify(struct btc_coexist *btcoexist, u8 type);
|
||||
void ex92e_halbtc8723b2ant_lps_notify(struct btc_coexist *btcoexist, u8 type);
|
||||
void ex92e_halbtc8723b2ant_scan_notify(struct btc_coexist *btcoexist, u8 type);
|
||||
void ex92e_halbtc8723b2ant_connect_notify(struct btc_coexist *btcoexist,
|
||||
u8 type);
|
||||
void ex92e_halbtc8723b2ant_media_status_notify(struct btc_coexist *btcoexist,
|
||||
u8 type);
|
||||
void ex92e_halbtc8723b2ant_special_packet_notify(struct btc_coexist *btcoexist,
|
||||
u8 type);
|
||||
void ex92e_halbtc8723b2ant_bt_info_notify(struct btc_coexist *btcoexist,
|
||||
u8 *tmpbuf, u8 length);
|
||||
void ex92e_halbtc8723b2ant_halt_notify(struct btc_coexist *btcoexist);
|
||||
void ex92e_halbtc8723b2ant_periodical(struct btc_coexist *btcoexist);
|
||||
void ex_halbtc8723b2ant92e_display_coex_info(struct btc_coexist *btcoexist);
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -0,0 +1,158 @@
|
|||
/* */
|
||||
/* The following is for 8821A 1ANT BT Co-exist definition */
|
||||
/* */
|
||||
#define BT_AUTO_REPORT_ONLY_8821A_1ANT 0
|
||||
|
||||
#define BT_INFO_8821A_1ANT_B_FTP BIT(7)
|
||||
#define BT_INFO_8821A_1ANT_B_A2DP BIT(6)
|
||||
#define BT_INFO_8821A_1ANT_B_HID BIT(5)
|
||||
#define BT_INFO_8821A_1ANT_B_SCO_BUSY BIT(4)
|
||||
#define BT_INFO_8821A_1ANT_B_ACL_BUSY BIT(3)
|
||||
#define BT_INFO_8821A_1ANT_B_INQ_PAGE BIT(2)
|
||||
#define BT_INFO_8821A_1ANT_B_SCO_ESCO BIT(1)
|
||||
#define BT_INFO_8821A_1ANT_B_CONNECTION BIT(0)
|
||||
|
||||
#define BT_INFO_8821A_1ANT_A2DP_BASIC_RATE(_BT_INFO_EXT_) \
|
||||
(((_BT_INFO_EXT_&BIT(0))) ? true : false)
|
||||
|
||||
#define BTC_RSSI_COEX_THRESH_TOL_8821A_1ANT 2
|
||||
|
||||
enum BT_INFO_SRC_8821A_1ANT {
|
||||
BT_INFO_SRC_8821A_1ANT_WIFI_FW = 0x0,
|
||||
BT_INFO_SRC_8821A_1ANT_BT_RSP = 0x1,
|
||||
BT_INFO_SRC_8821A_1ANT_BT_ACTIVE_SEND = 0x2,
|
||||
BT_INFO_SRC_8821A_1ANT_MAX
|
||||
};
|
||||
|
||||
enum BT_8821A_1ANT_BT_STATUS {
|
||||
BT_8821A_1ANT_BT_STATUS_NON_CONNECTED_IDLE = 0x0,
|
||||
BT_8821A_1ANT_BT_STATUS_CONNECTED_IDLE = 0x1,
|
||||
BT_8821A_1ANT_BT_STATUS_INQ_PAGE = 0x2,
|
||||
BT_8821A_1ANT_BT_STATUS_ACL_BUSY = 0x3,
|
||||
BT_8821A_1ANT_BT_STATUS_SCO_BUSY = 0x4,
|
||||
BT_8821A_1ANT_BT_STATUS_ACL_SCO_BUSY = 0x5,
|
||||
BT_8821A_1ANT_BT_STATUS_MAX
|
||||
};
|
||||
|
||||
enum BT_8821A_1ANT_WIFI_STATUS {
|
||||
BT_8821A_1ANT_WIFI_STATUS_NON_CONNECTED_IDLE = 0x0,
|
||||
BT_8821A_1ANT_WIFI_STATUS_NON_CONNECTED_ASSO_AUTH_SCAN = 0x1,
|
||||
BT_8821A_1ANT_WIFI_STATUS_CONNECTED_SCAN = 0x2,
|
||||
BT_8821A_1ANT_WIFI_STATUS_CONNECTED_SPECIAL_PKT = 0x3,
|
||||
BT_8821A_1ANT_WIFI_STATUS_CONNECTED_IDLE = 0x4,
|
||||
BT_8821A_1ANT_WIFI_STATUS_CONNECTED_BUSY = 0x5,
|
||||
BT_8821A_1ANT_WIFI_STATUS_MAX
|
||||
};
|
||||
|
||||
enum BT_8821A_1ANT_COEX_ALGO {
|
||||
BT_8821A_1ANT_COEX_ALGO_UNDEFINED = 0x0,
|
||||
BT_8821A_1ANT_COEX_ALGO_SCO = 0x1,
|
||||
BT_8821A_1ANT_COEX_ALGO_HID = 0x2,
|
||||
BT_8821A_1ANT_COEX_ALGO_A2DP = 0x3,
|
||||
BT_8821A_1ANT_COEX_ALGO_A2DP_PANHS = 0x4,
|
||||
BT_8821A_1ANT_COEX_ALGO_PANEDR = 0x5,
|
||||
BT_8821A_1ANT_COEX_ALGO_PANHS = 0x6,
|
||||
BT_8821A_1ANT_COEX_ALGO_PANEDR_A2DP = 0x7,
|
||||
BT_8821A_1ANT_COEX_ALGO_PANEDR_HID = 0x8,
|
||||
BT_8821A_1ANT_COEX_ALGO_HID_A2DP_PANEDR = 0x9,
|
||||
BT_8821A_1ANT_COEX_ALGO_HID_A2DP = 0xa,
|
||||
BT_8821A_1ANT_COEX_ALGO_MAX = 0xb,
|
||||
};
|
||||
|
||||
struct coex_dm_8821a_1ant {
|
||||
/* fw mechanism */
|
||||
bool cur_ignore_wlan_act;
|
||||
bool pre_ignore_wlan_act;
|
||||
u8 pre_ps_tdma;
|
||||
u8 cur_ps_tdma;
|
||||
u8 ps_tdma_para[5];
|
||||
u8 ps_tdma_du_adj_type;
|
||||
bool auto_tdma_adjust;
|
||||
bool pre_ps_tdma_on;
|
||||
bool cur_ps_tdma_on;
|
||||
bool pre_bt_auto_report;
|
||||
bool cur_bt_auto_report;
|
||||
u8 pre_lps;
|
||||
u8 cur_lps;
|
||||
u8 pre_rpwm;
|
||||
u8 cur_rpwm;
|
||||
|
||||
/* sw mechanism */
|
||||
bool pre_low_penalty_ra;
|
||||
bool cur_low_penalty_ra;
|
||||
u32 pre_val_0x6c0;
|
||||
u32 cur_val_0x6c0;
|
||||
u32 pre_val_0x6c4;
|
||||
u32 cur_val_0x6c4;
|
||||
u32 pre_val_0x6c8;
|
||||
u32 cur_val_0x6c8;
|
||||
u8 pre_val_0x6cc;
|
||||
u8 cur_val_0x6cc;
|
||||
|
||||
u32 backup_arfr_cnt1; /* Auto Rate Fallback Retry cnt */
|
||||
u32 backup_arfr_cnt2; /* Auto Rate Fallback Retry cnt */
|
||||
u16 backup_retry_limit;
|
||||
u8 backup_ampdu_max_time;
|
||||
|
||||
/* algorithm related */
|
||||
u8 pre_algorithm;
|
||||
u8 cur_algorithm;
|
||||
u8 bt_status;
|
||||
u8 wifi_chnl_info[3];
|
||||
|
||||
u32 pre_ra_mask;
|
||||
u32 cur_ra_mask;
|
||||
u8 pre_arfr_type;
|
||||
u8 cur_arfr_type;
|
||||
u8 pre_retry_limit_type;
|
||||
u8 cur_retry_limit_type;
|
||||
u8 pre_ampdu_time_type;
|
||||
u8 cur_ampdu_time_type;
|
||||
|
||||
u8 error_condition;
|
||||
};
|
||||
|
||||
struct coex_sta_8821a_1ant {
|
||||
bool bt_link_exist;
|
||||
bool sco_exist;
|
||||
bool a2dp_exist;
|
||||
bool hid_exist;
|
||||
bool pan_exist;
|
||||
|
||||
bool under_lps;
|
||||
bool under_ips;
|
||||
u32 special_pkt_period_cnt;
|
||||
u32 high_priority_tx;
|
||||
u32 high_priority_rx;
|
||||
u32 low_priority_tx;
|
||||
u32 low_priority_rx;
|
||||
u8 bt_rssi;
|
||||
u8 pre_bt_rssi_state;
|
||||
u8 pre_wifi_rssi_state[4];
|
||||
bool c2h_bt_info_req_sent;
|
||||
u8 bt_info_c2h[BT_INFO_SRC_8821A_1ANT_MAX][10];
|
||||
u32 bt_info_c2h_cnt[BT_INFO_SRC_8821A_1ANT_MAX];
|
||||
bool c2h_bt_inquiry_page;
|
||||
u8 bt_retry_cnt;
|
||||
u8 bt_info_ext;
|
||||
};
|
||||
|
||||
/* The following is interface which will notify coex module. */
|
||||
void ex_halbtc8821a1ant_init_hwconfig(struct btc_coexist *btcoexist);
|
||||
void ex_halbtc8821a1ant_init_coex_dm(struct btc_coexist *btcoexist);
|
||||
void ex_halbtc8821a1ant_ips_notify(struct btc_coexist *btcoexist, u8 type);
|
||||
void ex_halbtc8821a1ant_lps_notify(struct btc_coexist *btcoexist, u8 type);
|
||||
void ex_halbtc8821a1ant_scan_notify(struct btc_coexist *btcoexist, u8 type);
|
||||
void ex_halbtc8821a1ant_connect_notify(struct btc_coexist *btcoexist, u8 type);
|
||||
void ex_halbtc8821a1ant_media_status_notify(struct btc_coexist *btcoexist,
|
||||
u8 type);
|
||||
void ex_halbtc8821a1ant_special_packet_notify(struct btc_coexist *btcoexist,
|
||||
u8 type);
|
||||
void ex_halbtc8821a1ant_bt_info_notify(struct btc_coexist *btcoexist,
|
||||
u8 *tmpbuf, u8 length);
|
||||
void ex_halbtc8821a1ant_halt_notify(struct btc_coexist *btcoexist);
|
||||
void ex_halbtc8821a1ant_pnp_notify(struct btc_coexist *btcoexist, u8 pnpstate);
|
||||
void ex_halbtc8821a1ant_periodical(struct btc_coexist *btcoexist);
|
||||
void ex_halbtc8821a1ant_display_coex_info(struct btc_coexist *btcoexist);
|
||||
void ex_halbtc8821a1ant_dbg_control(struct btc_coexist *btcoexist, u8 op_code,
|
||||
u8 op_len, u8 *data);
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -0,0 +1,179 @@
|
|||
/* */
|
||||
/* The following is for 8821A 2Ant BT Co-exist definition */
|
||||
/* */
|
||||
#define BT_INFO_8821A_2ANT_B_FTP BIT(7)
|
||||
#define BT_INFO_8821A_2ANT_B_A2DP BIT(6)
|
||||
#define BT_INFO_8821A_2ANT_B_HID BIT(5)
|
||||
#define BT_INFO_8821A_2ANT_B_SCO_BUSY BIT(4)
|
||||
#define BT_INFO_8821A_2ANT_B_ACL_BUSY BIT(3)
|
||||
#define BT_INFO_8821A_2ANT_B_INQ_PAGE BIT(2)
|
||||
#define BT_INFO_8821A_2ANT_B_SCO_ESCO BIT(1)
|
||||
#define BT_INFO_8821A_2ANT_B_CONNECTION BIT(0)
|
||||
|
||||
#define BTC_RSSI_COEX_THRESH_TOL_8821A_2ANT 2
|
||||
|
||||
enum BT_INFO_SRC_8821A_2ANT {
|
||||
BT_INFO_SRC_8821A_2ANT_WIFI_FW = 0x0,
|
||||
BT_INFO_SRC_8821A_2ANT_BT_RSP = 0x1,
|
||||
BT_INFO_SRC_8821A_2ANT_BT_ACTIVE_SEND = 0x2,
|
||||
BT_INFO_SRC_8821A_2ANT_MAX
|
||||
};
|
||||
|
||||
enum BT_8821A_2ANT_BT_STATUS {
|
||||
BT_8821A_2ANT_BT_STATUS_IDLE = 0x0,
|
||||
BT_8821A_2ANT_BT_STATUS_CONNECTED_IDLE = 0x1,
|
||||
BT_8821A_2ANT_BT_STATUS_NON_IDLE = 0x2,
|
||||
BT_8821A_2ANT_BT_STATUS_MAX
|
||||
};
|
||||
|
||||
enum BT_8821A_2ANT_COEX_ALGO {
|
||||
BT_8821A_2ANT_COEX_ALGO_UNDEFINED = 0x0,
|
||||
BT_8821A_2ANT_COEX_ALGO_SCO = 0x1,
|
||||
BT_8821A_2ANT_COEX_ALGO_HID = 0x2,
|
||||
BT_8821A_2ANT_COEX_ALGO_A2DP = 0x3,
|
||||
BT_8821A_2ANT_COEX_ALGO_A2DP_PANHS = 0x4,
|
||||
BT_8821A_2ANT_COEX_ALGO_PANEDR = 0x5,
|
||||
BT_8821A_2ANT_COEX_ALGO_PANHS = 0x6,
|
||||
BT_8821A_2ANT_COEX_ALGO_PANEDR_A2DP = 0x7,
|
||||
BT_8821A_2ANT_COEX_ALGO_PANEDR_HID = 0x8,
|
||||
BT_8821A_2ANT_COEX_ALGO_HID_A2DP_PANEDR = 0x9,
|
||||
BT_8821A_2ANT_COEX_ALGO_HID_A2DP = 0xa,
|
||||
BT_8821A_2ANT_COEX_ALGO_MAX = 0xb,
|
||||
};
|
||||
|
||||
struct coex_dm_8821a_2ant {
|
||||
/* fw mechanism */
|
||||
bool pre_dec_bt_pwr;
|
||||
bool cur_dec_bt_pwr;
|
||||
bool pre_bt_lna_constrain;
|
||||
bool cur_bt_lna_constrain;
|
||||
u8 pre_bt_psd_mode;
|
||||
u8 cur_bt_psd_mode;
|
||||
u8 pre_fw_dac_swing_lvl;
|
||||
u8 cur_fw_dac_swing_lvl;
|
||||
bool cur_ignore_wlan_act;
|
||||
bool pre_ignore_wlan_act;
|
||||
u8 pre_ps_tdma;
|
||||
u8 cur_ps_tdma;
|
||||
u8 ps_tdma_para[5];
|
||||
u8 ps_tdma_du_adj_type;
|
||||
bool reset_tdma_adjust;
|
||||
bool pre_ps_tdma_on;
|
||||
bool cur_ps_tdma_on;
|
||||
bool pre_bt_auto_report;
|
||||
bool cur_bt_auto_report;
|
||||
|
||||
/* sw mechanism */
|
||||
bool pre_rf_rx_lpf_shrink;
|
||||
bool cur_rf_rx_lpf_shrink;
|
||||
u32 bt_rf0x1e_backup;
|
||||
bool pre_low_penalty_ra;
|
||||
bool cur_low_penalty_ra;
|
||||
bool pre_dac_swing_on;
|
||||
u32 pre_dac_swing_lvl;
|
||||
bool cur_dac_swing_on;
|
||||
u32 cur_dac_swing_lvl;
|
||||
bool pre_adc_back_off;
|
||||
bool cur_adc_back_off;
|
||||
bool pre_agc_table_en;
|
||||
bool cur_agc_table_en;
|
||||
u32 pre_val0x6c0;
|
||||
u32 cur_val0x6c0;
|
||||
u32 pre_val0x6c4;
|
||||
u32 cur_val0x6c4;
|
||||
u32 pre_val0x6c8;
|
||||
u32 cur_val0x6c8;
|
||||
u8 pre_val0x6cc;
|
||||
u8 cur_val0x6cc;
|
||||
bool limited_dig;
|
||||
|
||||
/* algorithm related */
|
||||
u8 pre_algorithm;
|
||||
u8 cur_algorithm;
|
||||
u8 bt_status;
|
||||
u8 wifi_chnl_info[3];
|
||||
};
|
||||
|
||||
struct coex_sta_8821a_2ant {
|
||||
bool bt_link_exist;
|
||||
bool sco_exist;
|
||||
bool a2dp_exist;
|
||||
bool hid_exist;
|
||||
bool pan_exist;
|
||||
|
||||
bool under_lps;
|
||||
bool under_ips;
|
||||
u32 high_priority_tx;
|
||||
u32 high_priority_rx;
|
||||
u32 low_priority_tx;
|
||||
u32 low_priority_rx;
|
||||
u8 bt_rssi;
|
||||
u8 pre_bt_rssi_state;
|
||||
u8 pre_wifi_rssi_state[4];
|
||||
bool c2h_bt_info_req_sent;
|
||||
u8 bt_info_c2h[BT_INFO_SRC_8821A_2ANT_MAX][10];
|
||||
u32 bt_info_c2h_cnt[BT_INFO_SRC_8821A_2ANT_MAX];
|
||||
bool c2h_bt_inquiry_page;
|
||||
u8 bt_retry_cnt;
|
||||
u8 bt_info_ext;
|
||||
};
|
||||
|
||||
/* */
|
||||
/* The following is interface which will notify coex module. */
|
||||
/* */
|
||||
void
|
||||
ex_halbtc8821a2ant_init_hwconfig(
|
||||
struct btc_coexist *btcoexist
|
||||
);
|
||||
void
|
||||
ex_halbtc8821a2ant_init_coex_dm(
|
||||
struct btc_coexist *btcoexist
|
||||
);
|
||||
void
|
||||
ex_halbtc8821a2ant_ips_notify(
|
||||
struct btc_coexist *btcoexist,
|
||||
u8 type
|
||||
);
|
||||
void
|
||||
ex_halbtc8821a2ant_lps_notify(
|
||||
struct btc_coexist *btcoexist,
|
||||
u8 type
|
||||
);
|
||||
void
|
||||
ex_halbtc8821a2ant_scan_notify(
|
||||
struct btc_coexist *btcoexist,
|
||||
u8 type
|
||||
);
|
||||
void
|
||||
ex_halbtc8821a2ant_connect_notify(
|
||||
struct btc_coexist *btcoexist,
|
||||
u8 type
|
||||
);
|
||||
void
|
||||
ex_halbtc8821a2ant_media_status_notify(
|
||||
struct btc_coexist *btcoexist,
|
||||
u8 type
|
||||
);
|
||||
void
|
||||
ex_halbtc8821a2ant_special_packet_notify(
|
||||
struct btc_coexist *btcoexist,
|
||||
u8 type
|
||||
);
|
||||
void
|
||||
ex_halbtc8821a2ant_bt_info_notify(
|
||||
struct btc_coexist *btcoexist,
|
||||
u8 *tmp_buf,
|
||||
u8 length
|
||||
);
|
||||
void
|
||||
ex_halbtc8821a2ant_halt_notify(
|
||||
struct btc_coexist *btcoexist
|
||||
);
|
||||
void
|
||||
ex_halbtc8821a2ant_periodical(
|
||||
struct btc_coexist *btcoexist
|
||||
);
|
||||
void
|
||||
ex_halbtc8821a2ant_display_coex_info(
|
||||
struct btc_coexist *btcoexist
|
||||
);
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -0,0 +1,537 @@
|
|||
#ifndef __HALBTC_OUT_SRC_H__
|
||||
#define __HALBTC_OUT_SRC_H__
|
||||
|
||||
#include "../wifi.h"
|
||||
|
||||
#define NORMAL_EXEC false
|
||||
#define FORCE_EXEC true
|
||||
|
||||
#define BTC_RF_A RF90_PATH_A
|
||||
#define BTC_RF_B RF90_PATH_B
|
||||
#define BTC_RF_C RF90_PATH_C
|
||||
#define BTC_RF_D RF90_PATH_D
|
||||
|
||||
#define BTC_SMSP SINGLEMAC_SINGLEPHY
|
||||
#define BTC_DMDP DUALMAC_DUALPHY
|
||||
#define BTC_DMSP DUALMAC_SINGLEPHY
|
||||
#define BTC_MP_UNKNOWN 0xff
|
||||
|
||||
#define IN
|
||||
#define OUT
|
||||
|
||||
#define BT_TMP_BUF_SIZE 100
|
||||
|
||||
#define BT_COEX_ANT_TYPE_PG 0
|
||||
#define BT_COEX_ANT_TYPE_ANTDIV 1
|
||||
#define BT_COEX_ANT_TYPE_DETECTED 2
|
||||
|
||||
#define BTC_MIMO_PS_STATIC 0
|
||||
#define BTC_MIMO_PS_DYNAMIC 1
|
||||
|
||||
#define BTC_RATE_DISABLE 0
|
||||
#define BTC_RATE_ENABLE 1
|
||||
|
||||
/* single Antenna definition */
|
||||
#define BTC_ANT_PATH_WIFI 0
|
||||
#define BTC_ANT_PATH_BT 1
|
||||
#define BTC_ANT_PATH_PTA 2
|
||||
/* dual Antenna definition */
|
||||
#define BTC_ANT_WIFI_AT_MAIN 0
|
||||
#define BTC_ANT_WIFI_AT_AUX 1
|
||||
/* coupler Antenna definition */
|
||||
#define BTC_ANT_WIFI_AT_CPL_MAIN 0
|
||||
#define BTC_ANT_WIFI_AT_CPL_AUX 1
|
||||
|
||||
enum btc_chip_interface {
|
||||
BTC_INTF_UNKNOWN = 0,
|
||||
BTC_INTF_PCI = 1,
|
||||
BTC_INTF_USB = 2,
|
||||
BTC_INTF_SDIO = 3,
|
||||
BTC_INTF_GSPI = 4,
|
||||
BTC_INTF_MAX
|
||||
};
|
||||
|
||||
enum btc_chip_type {
|
||||
BTC_CHIP_UNDEF = 0,
|
||||
BTC_CHIP_CSR_BC4 = 1,
|
||||
BTC_CHIP_CSR_BC8 = 2,
|
||||
BTC_CHIP_RTL8723A = 3,
|
||||
BTC_CHIP_RTL8821 = 4,
|
||||
BTC_CHIP_RTL8723B = 5,
|
||||
BTC_CHIP_MAX
|
||||
};
|
||||
|
||||
enum btc_msg_type {
|
||||
BTC_MSG_INTERFACE = 0x0,
|
||||
BTC_MSG_ALGORITHM = 0x1,
|
||||
BTC_MSG_MAX
|
||||
};
|
||||
|
||||
extern u32 btc_92edbg_type[];
|
||||
|
||||
/* following is for BTC_MSG_INTERFACE */
|
||||
#define INTF_INIT BIT(0)
|
||||
#define INTF_NOTIFY BIT(2)
|
||||
|
||||
/* following is for BTC_ALGORITHM */
|
||||
#define ALGO_BT_RSSI_STATE BIT(0)
|
||||
#define ALGO_WIFI_RSSI_STATE BIT(1)
|
||||
#define ALGO_BT_MONITOR BIT(2)
|
||||
#define ALGO_TRACE BIT(3)
|
||||
#define ALGO_TRACE_FW BIT(4)
|
||||
#define ALGO_TRACE_FW_DETAIL BIT(5)
|
||||
#define ALGO_TRACE_FW_EXEC BIT(6)
|
||||
#define ALGO_TRACE_SW BIT(7)
|
||||
#define ALGO_TRACE_SW_DETAIL BIT(8)
|
||||
#define ALGO_TRACE_SW_EXEC BIT(9)
|
||||
|
||||
/* following is for wifi link status */
|
||||
#define WIFI_STA_CONNECTED BIT(0)
|
||||
#define WIFI_AP_CONNECTED BIT(1)
|
||||
#define WIFI_HS_CONNECTED BIT(2)
|
||||
#define WIFI_P2P_GO_CONNECTED BIT(3)
|
||||
#define WIFI_P2P_GC_CONNECTED BIT(4)
|
||||
|
||||
|
||||
#define CL_SPRINTF snprintf
|
||||
#define CL_PRINTF printk
|
||||
|
||||
#define BTC_PRINT(dbgtype, dbgflag, printstr, ...) \
|
||||
do { \
|
||||
if (unlikely(btc_92edbg_type[dbgtype] & dbgflag)) {\
|
||||
pr_debug(printstr, ##__VA_ARGS__); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define BTC_PRINT_F(dbgtype, dbgflag, printstr, ...) \
|
||||
do { \
|
||||
if (unlikely(btc_92edbg_type[dbgtype] & dbgflag)) {\
|
||||
pr_debug("%s: ", __func__); \
|
||||
pr_cont(printstr, ##__VA_ARGS__); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define BTC_PRINT_ADDR(dbgtype, dbgflag, printstr, _ptr) \
|
||||
do { \
|
||||
if (unlikely(btc_92edbg_type[dbgtype] & dbgflag)) { \
|
||||
int __i; \
|
||||
u8 *__ptr = (u8 *)_ptr; \
|
||||
pr_debug printstr; \
|
||||
for (__i = 0; __i < 6; __i++) \
|
||||
pr_cont("%02X%s", __ptr[__i], \
|
||||
(__i == 5) ? "" : "-"); \
|
||||
pr_debug("\n"); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define BTC_PRINT_DATA(dbgtype, dbgflag, _titlestring, _hexdata, _hexdatalen) \
|
||||
do { \
|
||||
if (unlikely(btc_92edbg_type[dbgtype] & dbgflag)) { \
|
||||
int __i; \
|
||||
u8 *__ptr = (u8 *)_hexdata; \
|
||||
pr_debug(_titlestring); \
|
||||
for (__i = 0; __i < (int)_hexdatalen; __i++) { \
|
||||
pr_cont("%02X%s", __ptr[__i], (((__i + 1) % 4) \
|
||||
== 0) ? " " : " ");\
|
||||
if (((__i + 1) % 16) == 0) \
|
||||
pr_cont("\n"); \
|
||||
} \
|
||||
pr_debug("\n"); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
|
||||
#define BTC_RSSI_HIGH(_rssi_) \
|
||||
((_rssi_ == BTC_RSSI_STATE_HIGH || \
|
||||
_rssi_ == BTC_RSSI_STATE_STAY_HIGH) ? true : false)
|
||||
#define BTC_RSSI_MEDIUM(_rssi_) \
|
||||
((_rssi_ == BTC_RSSI_STATE_MEDIUM || \
|
||||
_rssi_ == BTC_RSSI_STATE_STAY_MEDIUM) ? true : false)
|
||||
#define BTC_RSSI_LOW(_rssi_) \
|
||||
((_rssi_ == BTC_RSSI_STATE_LOW || \
|
||||
_rssi_ == BTC_RSSI_STATE_STAY_LOW) ? true : false)
|
||||
|
||||
|
||||
enum btc_power_save_type {
|
||||
BTC_PS_WIFI_NATIVE = 0,
|
||||
BTC_PS_LPS_ON = 1,
|
||||
BTC_PS_LPS_OFF = 2,
|
||||
BTC_PS_LPS_MAX
|
||||
};
|
||||
|
||||
struct btc_board_info {
|
||||
/* The following is some board information */
|
||||
u8 bt_chip_type;
|
||||
u8 pg_ant_num; /* pg ant number */
|
||||
u8 btdm_ant_num; /* ant number for btdm */
|
||||
u8 btdm_ant_pos;
|
||||
bool bt_exist;
|
||||
};
|
||||
|
||||
enum btc_dbg_opcode {
|
||||
BTC_DBG_SET_COEX_NORMAL = 0x0,
|
||||
BTC_DBG_SET_COEX_WIFI_ONLY = 0x1,
|
||||
BTC_DBG_SET_COEX_BT_ONLY = 0x2,
|
||||
BTC_DBG_MAX
|
||||
};
|
||||
|
||||
enum btc_rssi_state {
|
||||
BTC_RSSI_STATE_HIGH = 0x0,
|
||||
BTC_RSSI_STATE_MEDIUM = 0x1,
|
||||
BTC_RSSI_STATE_LOW = 0x2,
|
||||
BTC_RSSI_STATE_STAY_HIGH = 0x3,
|
||||
BTC_RSSI_STATE_STAY_MEDIUM = 0x4,
|
||||
BTC_RSSI_STATE_STAY_LOW = 0x5,
|
||||
BTC_RSSI_MAX
|
||||
};
|
||||
|
||||
enum btc_wifi_role {
|
||||
BTC_ROLE_STATION = 0x0,
|
||||
BTC_ROLE_AP = 0x1,
|
||||
BTC_ROLE_IBSS = 0x2,
|
||||
BTC_ROLE_HS_MODE = 0x3,
|
||||
BTC_ROLE_MAX
|
||||
};
|
||||
|
||||
enum btc_wifi_bw_mode {
|
||||
BTC_WIFI_BW_LEGACY = 0x0,
|
||||
BTC_WIFI_BW_HT20 = 0x1,
|
||||
BTC_WIFI_BW_HT40 = 0x2,
|
||||
BTC_WIFI_BW_MAX
|
||||
};
|
||||
|
||||
enum btc_wifi_traffic_dir {
|
||||
BTC_WIFI_TRAFFIC_TX = 0x0,
|
||||
BTC_WIFI_TRAFFIC_RX = 0x1,
|
||||
BTC_WIFI_TRAFFIC_MAX
|
||||
};
|
||||
|
||||
enum btc_wifi_pnp {
|
||||
BTC_WIFI_PNP_WAKE_UP = 0x0,
|
||||
BTC_WIFI_PNP_SLEEP = 0x1,
|
||||
BTC_WIFI_PNP_MAX
|
||||
};
|
||||
|
||||
|
||||
enum btc_get_type {
|
||||
/* type bool */
|
||||
BTC_GET_BL_HS_OPERATION,
|
||||
BTC_GET_BL_HS_CONNECTING,
|
||||
BTC_GET_BL_WIFI_CONNECTED,
|
||||
BTC_GET_BL_WIFI_BUSY,
|
||||
BTC_GET_BL_WIFI_SCAN,
|
||||
BTC_GET_BL_WIFI_LINK,
|
||||
BTC_GET_BL_WIFI_DHCP,
|
||||
BTC_GET_BL_WIFI_SOFTAP_IDLE,
|
||||
BTC_GET_BL_WIFI_SOFTAP_LINKING,
|
||||
BTC_GET_BL_WIFI_IN_EARLY_SUSPEND,
|
||||
BTC_GET_BL_WIFI_ROAM,
|
||||
BTC_GET_BL_WIFI_4_WAY_PROGRESS,
|
||||
BTC_GET_BL_WIFI_UNDER_5G,
|
||||
BTC_GET_BL_WIFI_AP_MODE_ENABLE,
|
||||
BTC_GET_BL_WIFI_ENABLE_ENCRYPTION,
|
||||
BTC_GET_BL_WIFI_UNDER_B_MODE,
|
||||
BTC_GET_BL_EXT_SWITCH,
|
||||
|
||||
/* type s4Byte */
|
||||
BTC_GET_S4_WIFI_RSSI,
|
||||
BTC_GET_S4_HS_RSSI,
|
||||
|
||||
/* type u32 */
|
||||
BTC_GET_U4_WIFI_BW,
|
||||
BTC_GET_U4_WIFI_TRAFFIC_DIRECTION,
|
||||
BTC_GET_U4_WIFI_FW_VER,
|
||||
BTC_GET_U4_WIFI_LINK_STATUS,
|
||||
BTC_GET_U4_BT_PATCH_VER,
|
||||
|
||||
/* type u1Byte */
|
||||
BTC_GET_U1_WIFI_DOT11_CHNL,
|
||||
BTC_GET_U1_WIFI_CENTRAL_CHNL,
|
||||
BTC_GET_U1_WIFI_HS_CHNL,
|
||||
BTC_GET_U1_MAC_PHY_MODE,
|
||||
BTC_GET_U1_AP_NUM,
|
||||
|
||||
/* for 1Ant */
|
||||
BTC_GET_U1_LPS_MODE,
|
||||
BTC_GET_BL_BT_SCO_BUSY,
|
||||
|
||||
/* for test mode */
|
||||
BTC_GET_DRIVER_TEST_CFG,
|
||||
BTC_GET_MAX
|
||||
};
|
||||
|
||||
|
||||
enum btc_set_type {
|
||||
/* type bool */
|
||||
BTC_SET_BL_BT_DISABLE,
|
||||
BTC_SET_BL_BT_TRAFFIC_BUSY,
|
||||
BTC_SET_BL_BT_LIMITED_DIG,
|
||||
BTC_SET_BL_FORCE_TO_ROAM,
|
||||
BTC_SET_BL_TO_REJ_AP_AGG_PKT,
|
||||
BTC_SET_BL_BT_CTRL_AGG_SIZE,
|
||||
BTC_SET_BL_INC_SCAN_DEV_NUM,
|
||||
|
||||
/* type u1Byte */
|
||||
BTC_SET_U1_RSSI_ADJ_VAL_FOR_AGC_TABLE_ON,
|
||||
BTC_SET_U1_AGG_BUF_SIZE,
|
||||
|
||||
/* type trigger some action */
|
||||
BTC_SET_ACT_GET_BT_RSSI,
|
||||
BTC_SET_ACT_AGGREGATE_CTRL,
|
||||
|
||||
/********* for 1Ant **********/
|
||||
/* type bool */
|
||||
BTC_SET_BL_BT_SCO_BUSY,
|
||||
/* type u1Byte */
|
||||
BTC_SET_U1_RSSI_ADJ_VAL_FOR_1ANT_COEX_TYPE,
|
||||
BTC_SET_U1_LPS_VAL,
|
||||
BTC_SET_U1_RPWM_VAL,
|
||||
BTC_SET_U1_1ANT_LPS,
|
||||
BTC_SET_U1_1ANT_RPWM,
|
||||
/* type trigger some action */
|
||||
BTC_SET_ACT_LEAVE_LPS,
|
||||
BTC_SET_ACT_ENTER_LPS,
|
||||
BTC_SET_ACT_NORMAL_LPS,
|
||||
BTC_SET_ACT_INC_FORCE_EXEC_PWR_CMD_CNT,
|
||||
BTC_SET_ACT_DISABLE_LOW_POWER,
|
||||
BTC_SET_ACT_UPDATE_ra_mask,
|
||||
BTC_SET_ACT_SEND_MIMO_PS,
|
||||
/* BT Coex related */
|
||||
BTC_SET_ACT_CTRL_BT_INFO,
|
||||
BTC_SET_ACT_CTRL_BT_COEX,
|
||||
/***************************/
|
||||
BTC_SET_MAX
|
||||
};
|
||||
|
||||
enum btc_dbg_disp_type {
|
||||
BTC_DBG_DISP_COEX_STATISTICS = 0x0,
|
||||
BTC_DBG_DISP_BT_LINK_INFO = 0x1,
|
||||
BTC_DBG_DISP_BT_FW_VER = 0x2,
|
||||
BTC_DBG_DISP_FW_PWR_MODE_CMD = 0x3,
|
||||
BTC_DBG_DISP_MAX
|
||||
};
|
||||
|
||||
enum btc_notify_type_ips {
|
||||
BTC_IPS_LEAVE = 0x0,
|
||||
BTC_IPS_ENTER = 0x1,
|
||||
BTC_IPS_MAX
|
||||
};
|
||||
|
||||
enum btc_notify_type_lps {
|
||||
BTC_LPS_DISABLE = 0x0,
|
||||
BTC_LPS_ENABLE = 0x1,
|
||||
BTC_LPS_MAX
|
||||
};
|
||||
|
||||
enum btc_notify_type_scan {
|
||||
BTC_SCAN_FINISH = 0x0,
|
||||
BTC_SCAN_START = 0x1,
|
||||
BTC_SCAN_MAX
|
||||
};
|
||||
|
||||
enum btc_notify_type_associate {
|
||||
BTC_ASSOCIATE_FINISH = 0x0,
|
||||
BTC_ASSOCIATE_START = 0x1,
|
||||
BTC_ASSOCIATE_MAX
|
||||
};
|
||||
|
||||
enum btc_notify_type_media_status {
|
||||
BTC_MEDIA_DISCONNECT = 0x0,
|
||||
BTC_MEDIA_CONNECT = 0x1,
|
||||
BTC_MEDIA_MAX
|
||||
};
|
||||
|
||||
enum btc_notify_type_special_packet {
|
||||
BTC_PACKET_UNKNOWN = 0x0,
|
||||
BTC_PACKET_DHCP = 0x1,
|
||||
BTC_PACKET_ARP = 0x2,
|
||||
BTC_PACKET_EAPOL = 0x3,
|
||||
BTC_PACKET_MAX
|
||||
};
|
||||
|
||||
enum hci_ext_bt_operation {
|
||||
HCI_BT_OP_NONE = 0x0,
|
||||
HCI_BT_OP_INQUIRY_START = 0x1,
|
||||
HCI_BT_OP_INQUIRY_FINISH = 0x2,
|
||||
HCI_BT_OP_PAGING_START = 0x3,
|
||||
HCI_BT_OP_PAGING_SUCCESS = 0x4,
|
||||
HCI_BT_OP_PAGING_UNSUCCESS = 0x5,
|
||||
HCI_BT_OP_PAIRING_START = 0x6,
|
||||
HCI_BT_OP_PAIRING_FINISH = 0x7,
|
||||
HCI_BT_OP_BT_DEV_ENABLE = 0x8,
|
||||
HCI_BT_OP_BT_DEV_DISABLE = 0x9,
|
||||
HCI_BT_OP_MAX
|
||||
};
|
||||
|
||||
enum btc_notify_type_stack_operation {
|
||||
BTC_STACK_OP_NONE = 0x0,
|
||||
BTC_STACK_OP_INQ_PAGE_PAIR_START = 0x1,
|
||||
BTC_STACK_OP_INQ_PAGE_PAIR_FINISH = 0x2,
|
||||
BTC_STACK_OP_MAX
|
||||
};
|
||||
|
||||
|
||||
struct btc_bt_info {
|
||||
bool bt_disabled;
|
||||
u8 rssi_adjust_for_agc_table_on;
|
||||
u8 rssi_adjust_for_1ant_coex_type;
|
||||
bool bt_busy;
|
||||
u8 agg_buf_size;
|
||||
bool limited_dig;
|
||||
bool reject_agg_pkt;
|
||||
bool b_bt_ctrl_buf_size;
|
||||
bool increase_scan_dev_num;
|
||||
u16 bt_hci_ver;
|
||||
u16 bt_real_fw_ver;
|
||||
u8 bt_fw_ver;
|
||||
|
||||
bool bt_disable_low_pwr;
|
||||
|
||||
/* the following is for 1Ant solution */
|
||||
bool bt_ctrl_lps;
|
||||
bool bt_pwr_save_mode;
|
||||
bool bt_lps_on;
|
||||
bool force_to_roam;
|
||||
u8 force_exec_pwr_cmd_cnt;
|
||||
u8 lps_val;
|
||||
u8 rpwm_val;
|
||||
u32 ra_mask;
|
||||
};
|
||||
|
||||
struct btc_stack_info {
|
||||
bool profile_notified;
|
||||
u16 hci_version; /* stack hci version */
|
||||
u8 num_of_link;
|
||||
bool bt_link_exist;
|
||||
bool sco_exist;
|
||||
bool acl_exist;
|
||||
bool a2dp_exist;
|
||||
bool hid_exist;
|
||||
u8 num_of_hid;
|
||||
bool pan_exist;
|
||||
bool unknown_acl_exist;
|
||||
char min_bt_rssi;
|
||||
};
|
||||
|
||||
struct btc_statistics {
|
||||
u32 cnt_bind;
|
||||
u32 cnt_init_hw_config;
|
||||
u32 cnt_init_coex_dm;
|
||||
u32 cnt_ips_notify;
|
||||
u32 cnt_lps_notify;
|
||||
u32 cnt_scan_notify;
|
||||
u32 cnt_connect_notify;
|
||||
u32 cnt_media_status_notify;
|
||||
u32 cnt_special_packet_notify;
|
||||
u32 cnt_bt_info_notify;
|
||||
u32 cnt_periodical;
|
||||
u32 cnt_coex_dm_switch;
|
||||
u32 cnt_stack_operation_notify;
|
||||
u32 cnt_dbg_ctrl;
|
||||
};
|
||||
|
||||
struct btc_bt_link_info {
|
||||
bool bt_link_exist;
|
||||
bool sco_exist;
|
||||
bool sco_only;
|
||||
bool a2dp_exist;
|
||||
bool a2dp_only;
|
||||
bool hid_exist;
|
||||
bool hid_only;
|
||||
bool pan_exist;
|
||||
bool pan_only;
|
||||
};
|
||||
|
||||
enum btc_antenna_pos {
|
||||
BTC_ANTENNA_AT_MAIN_PORT = 0x1,
|
||||
BTC_ANTENNA_AT_AUX_PORT = 0x2,
|
||||
};
|
||||
|
||||
struct btc_coexist {
|
||||
/* make sure only one adapter can bind the data context */
|
||||
bool binded;
|
||||
/* default adapter */
|
||||
void *adapter;
|
||||
struct btc_board_info board_info;
|
||||
/* some bt info referenced by non-bt module */
|
||||
struct btc_bt_info bt_info;
|
||||
struct btc_stack_info stack_info;
|
||||
enum btc_chip_interface chip_interface;
|
||||
struct btc_bt_link_info bt_link_info;
|
||||
|
||||
bool initilized;
|
||||
bool stop_coex_dm;
|
||||
bool manual_control;
|
||||
u8 *cli_buf;
|
||||
struct btc_statistics statistics;
|
||||
u8 pwr_mode_val[10];
|
||||
|
||||
/* function pointers io related */
|
||||
u8 (*btc_read_1byte)(void *btc_context, u32 reg_addr);
|
||||
void (*btc_write_1byte)(void *btc_context, u32 reg_addr, u8 data);
|
||||
void (*btc_write_1byte_bitmask)(void *btc_context, u32 reg_addr,
|
||||
u8 bit_mask, u8 data1b);
|
||||
u16 (*btc_read_2byte)(void *btc_context, u32 reg_addr);
|
||||
void (*btc_write_2byte)(void *btc_context, u32 reg_addr, u16 data);
|
||||
u32 (*btc_read_4byte)(void *btc_context, u32 reg_addr);
|
||||
void (*btc_write_4byte)(void *btc_context, u32 reg_addr, u32 data);
|
||||
|
||||
void (*btc_set_bb_reg)(void *btc_context, u32 reg_addr,
|
||||
u32 bit_mask, u32 data);
|
||||
u32 (*btc_get_bb_reg)(void *btc_context, u32 reg_addr,
|
||||
u32 bit_mask);
|
||||
|
||||
void (*btc_set_rf_reg)(void *btc_context, u8 rf_path, u32 reg_addr,
|
||||
u32 bit_mask, u32 data);
|
||||
u32 (*btc_get_rf_reg)(void *btc_context, u8 rf_path,
|
||||
u32 reg_addr, u32 bit_mask);
|
||||
|
||||
|
||||
void (*btc_fill_h2c)(void *btc_context, u8 element_id,
|
||||
u32 cmd_len, u8 *cmd_buffer);
|
||||
|
||||
void (*btc_disp_dbg_msg)(void *btcoexist, u8 disp_type);
|
||||
|
||||
bool (*btc_get)(void *btcoexist, u8 get_type, void *out_buf);
|
||||
bool (*btc_set)(void *btcoexist, u8 set_type, void *in_buf);
|
||||
};
|
||||
|
||||
|
||||
bool halbtc92e_is_wifi_uplink(struct rtl_priv *adapter);
|
||||
|
||||
|
||||
extern struct btc_coexist gl92e_bt_coexist;
|
||||
|
||||
bool exhalbtc92e_initlize_variables(struct rtl_priv *adapter);
|
||||
void exhalbtc92e_init_hw_config(struct btc_coexist *btcoexist);
|
||||
void exhalbtc92e_init_coex_dm(struct btc_coexist *btcoexist);
|
||||
void exhalbtc92e_ips_notify(struct btc_coexist *btcoexist, u8 type);
|
||||
void exhalbtc92e_lps_notify(struct btc_coexist *btcoexist, u8 type);
|
||||
void exhalbtc92e_scan_notify(struct btc_coexist *btcoexist, u8 type);
|
||||
void exhalbtc92e_connect_notify(struct btc_coexist *btcoexist, u8 action);
|
||||
void exhalbtc92e_mediastatus_notify(struct btc_coexist *btcoexist,
|
||||
enum rt_media_status media_status);
|
||||
void exhalbtc92e_special_packet_notify(struct btc_coexist *btcoexist,
|
||||
u8 pkt_type);
|
||||
void exhalbtc92e_bt_info_notify(struct btc_coexist *btcoexist, u8 *tmp_buf,
|
||||
u8 length);
|
||||
void exhalbtc92e_stack_operation_notify(struct btc_coexist *btcoexist, u8 type);
|
||||
void exhalbtc92e_halt_notify(struct btc_coexist *btcoexist);
|
||||
void exhalbtc92e_pnp_notify(struct btc_coexist *btcoexist, u8 pnp_state);
|
||||
void exhalbtc_coex_dm_switch(struct btc_coexist *btcoexist);
|
||||
void exhalbtc92e_periodical(struct btc_coexist *btcoexist);
|
||||
void exhalbtc92e_dbg_control(struct btc_coexist *btcoexist, u8 code, u8 len,
|
||||
u8 *data);
|
||||
void exhalbtc92e_stack_update_profile_info(void);
|
||||
void exhalbtc92e_set_hci_version(u16 hci_version);
|
||||
void exhalbtc92e_set_bt_patch_version(u16 bt_hci_version, u16 bt_patch_version);
|
||||
void exhalbtc92e_update_min_bt_rssi(char bt_rssi);
|
||||
void exhalbtc92e_set_bt_exist(bool bt_exist);
|
||||
void exhalbtc92e_set_chip_type(u8 chip_type);
|
||||
void exhalbtc92e_set_ant_num(u8 type, u8 ant_num);
|
||||
void exhalbtc92e_display_bt_coex_info(struct btc_coexist *btcoexist);
|
||||
void exhalbtc_signal_compensation(struct btc_coexist *btcoexist,
|
||||
u8 *rssi_wifi, u8 *rssi_bt);
|
||||
void exhalbtc_lps_leave(struct btc_coexist *btcoexist);
|
||||
void exhalbtc_low_wifi_traffic_notify(struct btc_coexist *btcoexist);
|
||||
#endif
|
|
@ -0,0 +1,194 @@
|
|||
/******************************************************************************
|
||||
*
|
||||
* Copyright(c) 2009-2010 Realtek Corporation.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of version 2 of the GNU General Public License as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* The full GNU General Public License is included in this distribution in the
|
||||
* file called LICENSE.
|
||||
*
|
||||
* Contact Information:
|
||||
* wlanfae <wlanfae@realtek.com>
|
||||
* Realtek Corporation, No. 2, Innovation Road II, Hsinchu Science Park,
|
||||
* Hsinchu 300, Taiwan.
|
||||
*
|
||||
* Larry Finger <Larry.Finger@lwfinger.net>
|
||||
*
|
||||
*****************************************************************************/
|
||||
#include <linux/vmalloc.h>
|
||||
#include <linux/module.h>
|
||||
|
||||
#include "rtl_btc.h"
|
||||
#include "halbt_precomp.h"
|
||||
|
||||
static struct rtl_btc_ops rtl_btc_operation = {
|
||||
.btc_init_variables = rtl92e_btc_init_variables,
|
||||
.btc_init_hal_vars = rtl92e_btc_init_hal_vars,
|
||||
.btc_init_hw_config = rtl92e_btc_init_hw_config,
|
||||
.btc_ips_notify = rtl92e_btc_ips_notify,
|
||||
.btc_lps_notify = rtl_btc_lps_notify,
|
||||
.btc_scan_notify = rtl92e_btc_scan_notify,
|
||||
.btc_connect_notify = rtl92e_btc_connect_notify,
|
||||
.btc_mediastatus_notify = rtl92e_btc_mediastatus_notify,
|
||||
.btc_periodical = rtl92e_btc_periodical,
|
||||
.btc_halt_notify = rtl92e_btc_halt_notify,
|
||||
.btc_btinfo_notify = rtl92e_btc_btinfo_notify,
|
||||
.btc_is_limited_dig = rtl92e_btc_is_limited_dig,
|
||||
.btc_is_disable_edca_turbo = rtl92e_btc_is_disable_edca_turbo,
|
||||
.btc_is_bt_disabled = rtl92e_btc_is_bt_disabled,
|
||||
.btc_special_packet_notify = rtl_btc_special_packet_notify,
|
||||
};
|
||||
|
||||
void rtl92e_btc_init_variables(struct rtl_priv *rtlpriv)
|
||||
{
|
||||
exhalbtc92e_initlize_variables(rtlpriv);
|
||||
}
|
||||
|
||||
void rtl92e_btc_init_hal_vars(struct rtl_priv *rtlpriv)
|
||||
{
|
||||
u8 ant_num;
|
||||
u8 bt_exist;
|
||||
u8 bt_type;
|
||||
ant_num = rtl92e_get_hwpg_ant_num(rtlpriv);
|
||||
RT_TRACE(COMP_INIT, DBG_DMESG,
|
||||
("%s, antNum is %d\n", __func__, ant_num));
|
||||
|
||||
bt_exist = rtl92e_get_hwpg_bt_exist(rtlpriv);
|
||||
RT_TRACE(COMP_INIT, DBG_DMESG,
|
||||
("%s, bt_exist is %d\n", __func__, bt_exist));
|
||||
exhalbtc92e_set_bt_exist(bt_exist);
|
||||
|
||||
bt_type = rtl92e_get_hwpg_bt_type(rtlpriv);
|
||||
RT_TRACE(COMP_INIT, DBG_DMESG,
|
||||
("%s, bt_type is %d\n", __func__, bt_type));
|
||||
exhalbtc92e_set_chip_type(bt_type);
|
||||
|
||||
exhalbtc92e_set_ant_num(BT_COEX_ANT_TYPE_PG, ant_num);
|
||||
}
|
||||
|
||||
void rtl92e_btc_init_hw_config(struct rtl_priv *rtlpriv)
|
||||
{
|
||||
exhalbtc92e_init_hw_config(&gl92e_bt_coexist);
|
||||
exhalbtc92e_init_coex_dm(&gl92e_bt_coexist);
|
||||
}
|
||||
|
||||
void rtl92e_btc_ips_notify(struct rtl_priv *rtlpriv, u8 type)
|
||||
{
|
||||
exhalbtc92e_ips_notify(&gl92e_bt_coexist, type);
|
||||
}
|
||||
|
||||
void rtl_btc_lps_notify(struct rtl_priv *rtlpriv, u8 type)
|
||||
{
|
||||
exhalbtc92e_lps_notify(&gl92e_bt_coexist, type);
|
||||
}
|
||||
|
||||
void rtl92e_btc_scan_notify(struct rtl_priv *rtlpriv, u8 scantype)
|
||||
{
|
||||
exhalbtc92e_scan_notify(&gl92e_bt_coexist, scantype);
|
||||
}
|
||||
|
||||
void rtl92e_btc_connect_notify(struct rtl_priv *rtlpriv, u8 action)
|
||||
{
|
||||
exhalbtc92e_connect_notify(&gl92e_bt_coexist, action);
|
||||
}
|
||||
|
||||
void rtl92e_btc_mediastatus_notify(struct rtl_priv *rtlpriv,
|
||||
enum rt_media_status mstatus)
|
||||
{
|
||||
exhalbtc92e_mediastatus_notify(&gl92e_bt_coexist, mstatus);
|
||||
}
|
||||
|
||||
void rtl92e_btc_periodical(struct rtl_priv *rtlpriv)
|
||||
{
|
||||
exhalbtc92e_periodical(&gl92e_bt_coexist);
|
||||
}
|
||||
|
||||
void rtl92e_btc_halt_notify(void)
|
||||
{
|
||||
exhalbtc92e_halt_notify(&gl92e_bt_coexist);
|
||||
}
|
||||
|
||||
void rtl92e_btc_btinfo_notify(struct rtl_priv *rtlpriv, u8 *tmp_buf, u8 length)
|
||||
{
|
||||
exhalbtc92e_bt_info_notify(&gl92e_bt_coexist, tmp_buf, length);
|
||||
}
|
||||
|
||||
bool rtl92e_btc_is_limited_dig(struct rtl_priv *rtlpriv)
|
||||
{
|
||||
return gl92e_bt_coexist.bt_info.limited_dig;
|
||||
}
|
||||
|
||||
bool rtl92e_btc_is_disable_edca_turbo(struct rtl_priv *rtlpriv)
|
||||
{
|
||||
bool bt_change_edca = false;
|
||||
u32 cur_edca_val;
|
||||
u32 edca_bt_hs_uplink = 0x5ea42b, edca_bt_hs_downlink = 0x5ea42b;
|
||||
u32 edca_hs;
|
||||
u32 edca_addr = 0x504;
|
||||
|
||||
cur_edca_val = rtl_read_dword(rtlpriv, edca_addr);
|
||||
if (halbtc92e_is_wifi_uplink(rtlpriv)) {
|
||||
if (cur_edca_val != edca_bt_hs_uplink) {
|
||||
edca_hs = edca_bt_hs_uplink;
|
||||
bt_change_edca = true;
|
||||
}
|
||||
} else {
|
||||
if (cur_edca_val != edca_bt_hs_downlink) {
|
||||
edca_hs = edca_bt_hs_downlink;
|
||||
bt_change_edca = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (bt_change_edca)
|
||||
rtl_write_dword(rtlpriv, edca_addr, edca_hs);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool rtl92e_btc_is_bt_disabled(struct rtl_priv *rtlpriv)
|
||||
{
|
||||
/* It seems 'bt_disabled' is never be initialized or set. */
|
||||
if (gl92e_bt_coexist.bt_info.bt_disabled)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
void rtl_btc_special_packet_notify(struct rtl_priv *rtlpriv, u8 pkt_type)
|
||||
{
|
||||
return exhalbtc92e_special_packet_notify(&gl92e_bt_coexist, pkt_type);
|
||||
}
|
||||
|
||||
struct rtl_btc_ops *stg_rtl_btc_get_ops_pointer(void)
|
||||
{
|
||||
return &rtl_btc_operation;
|
||||
}
|
||||
EXPORT_SYMBOL(stg_rtl_btc_get_ops_pointer);
|
||||
|
||||
u8 rtl92e_get_hwpg_ant_num(struct rtl_priv *rtlpriv)
|
||||
{
|
||||
u8 num;
|
||||
|
||||
if (rtlpriv->btcoexist.btc_info.ant_num == ANT_X2)
|
||||
num = 2;
|
||||
else
|
||||
num = 1;
|
||||
|
||||
return num;
|
||||
}
|
||||
u8 rtl92e_get_hwpg_bt_exist(struct rtl_priv *rtlpriv)
|
||||
{
|
||||
return rtlpriv->btcoexist.btc_info.btcoexist;
|
||||
}
|
||||
|
||||
u8 rtl92e_get_hwpg_bt_type(struct rtl_priv *rtlpriv)
|
||||
{
|
||||
return rtlpriv->btcoexist.btc_info.bt_type;
|
||||
}
|
|
@ -0,0 +1,62 @@
|
|||
/******************************************************************************
|
||||
*
|
||||
* Copyright(c) 2009-2010 Realtek Corporation.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of version 2 of the GNU General Public License as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* The full GNU General Public License is included in this distribution in the
|
||||
* file called LICENSE.
|
||||
*
|
||||
* Contact Information:
|
||||
* wlanfae <wlanfae@realtek.com>
|
||||
* Realtek Corporation, No. 2, Innovation Road II, Hsinchu Science Park,
|
||||
* Hsinchu 300, Taiwan.
|
||||
* Larry Finger <Larry.Finger@lwfinger.net>
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#ifndef __RTL_BTC_H__
|
||||
#define __RTL_BTC_H__
|
||||
|
||||
#include "halbt_precomp.h"
|
||||
|
||||
void rtl92e_btc_init_variables(struct rtl_priv *rtlpriv);
|
||||
void rtl92e_btc_init_hal_vars(struct rtl_priv *rtlpriv);
|
||||
void rtl92e_btc_init_hw_config(struct rtl_priv *rtlpriv);
|
||||
void rtl92e_btc_ips_notify(struct rtl_priv *rtlpriv, u8 type);
|
||||
void rtl_btc_lps_notify(struct rtl_priv *rtlpriv, u8 type);
|
||||
void rtl92e_btc_scan_notify(struct rtl_priv *rtlpriv, u8 scantype);
|
||||
void rtl92e_btc_connect_notify(struct rtl_priv *rtlpriv, u8 action);
|
||||
void rtl92e_btc_mediastatus_notify(struct rtl_priv *rtlpriv,
|
||||
enum rt_media_status mstatus);
|
||||
void rtl92e_btc_periodical(struct rtl_priv *rtlpriv);
|
||||
void rtl92e_btc_halt_notify(void);
|
||||
void rtl92e_btc_btinfo_notify(struct rtl_priv *rtlpriv, u8 *tmpbuf, u8 length);
|
||||
bool rtl92e_btc_is_limited_dig(struct rtl_priv *rtlpriv);
|
||||
bool rtl92e_btc_is_disable_edca_turbo(struct rtl_priv *rtlpriv);
|
||||
bool rtl92e_btc_is_bt_disabled(struct rtl_priv *rtlpriv);
|
||||
void rtl_btc_special_packet_notify(struct rtl_priv *rtlpriv, u8 pkt_type);
|
||||
|
||||
|
||||
struct rtl_btc_ops *stg_rtl_btc_get_ops_pointer(void);
|
||||
|
||||
u8 rtl92e_get_hwpg_ant_num(struct rtl_priv *rtlpriv);
|
||||
u8 rtl92e_get_hwpg_bt_exist(struct rtl_priv *rtlpriv);
|
||||
u8 rtl92e_get_hwpg_bt_type(struct rtl_priv *rtlpriv);
|
||||
enum rt_media_status mgnt_link_status_query(struct ieee80211_hw *hw);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
Загрузка…
Ссылка в новой задаче