rtlwifi: rtl818x: Move drivers into new realtek directory
Now that a new mac80211-based driver for Realtek devices has been submitted, it is time to reorganize the directories. Rather than having directories rtlwifi and rtl818x be in drivers/net/wireless/, they will now be in drivers/net/wireless/realtek/. This change simplifies the directory structure, but does not result in any configuration changes that are visable to the user. Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
このコミットが含まれているのは:
@@ -0,0 +1,7 @@
|
||||
btcoexist-objs := halbtc8723b2ant.o \
|
||||
halbtcoutsrc.o \
|
||||
rtl_btc.o
|
||||
|
||||
obj-$(CONFIG_RTLBTCOEXIST) += btcoexist.o
|
||||
|
||||
ccflags-y += -D__CHECK_ENDIAN__
|
@@ -0,0 +1,81 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* 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 __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 GetDefaultAdapter(padapter) padapter
|
||||
|
||||
#define BIT0 0x00000001
|
||||
#define BIT1 0x00000002
|
||||
#define BIT2 0x00000004
|
||||
#define BIT3 0x00000008
|
||||
#define BIT4 0x00000010
|
||||
#define BIT5 0x00000020
|
||||
#define BIT6 0x00000040
|
||||
#define BIT7 0x00000080
|
||||
#define BIT8 0x00000100
|
||||
#define BIT9 0x00000200
|
||||
#define BIT10 0x00000400
|
||||
#define BIT11 0x00000800
|
||||
#define BIT12 0x00001000
|
||||
#define BIT13 0x00002000
|
||||
#define BIT14 0x00004000
|
||||
#define BIT15 0x00008000
|
||||
#define BIT16 0x00010000
|
||||
#define BIT17 0x00020000
|
||||
#define BIT18 0x00040000
|
||||
#define BIT19 0x00080000
|
||||
#define BIT20 0x00100000
|
||||
#define BIT21 0x00200000
|
||||
#define BIT22 0x00400000
|
||||
#define BIT23 0x00800000
|
||||
#define BIT24 0x01000000
|
||||
#define BIT25 0x02000000
|
||||
#define BIT26 0x04000000
|
||||
#define BIT27 0x08000000
|
||||
#define BIT28 0x10000000
|
||||
#define BIT29 0x20000000
|
||||
#define BIT30 0x40000000
|
||||
#define BIT31 0x80000000
|
||||
|
||||
#endif /* __HALBT_PRECOMP_H__ */
|
ファイル差分が大きすぎるため省略します
差分を読み込み
@@ -0,0 +1,185 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright(c) 2012 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>
|
||||
*
|
||||
*****************************************************************************/
|
||||
/*****************************************************************
|
||||
* 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 BIT7
|
||||
#define BT_INFO_8192E_2ANT_B_A2DP BIT6
|
||||
#define BT_INFO_8192E_2ANT_B_HID BIT5
|
||||
#define BT_INFO_8192E_2ANT_B_SCO_BUSY BIT4
|
||||
#define BT_INFO_8192E_2ANT_B_ACL_BUSY BIT3
|
||||
#define BT_INFO_8192E_2ANT_B_INQ_PAGE BIT2
|
||||
#define BT_INFO_8192E_2ANT_B_SCO_ESCO BIT1
|
||||
#define BT_INFO_8192E_2ANT_B_CONNECTION BIT0
|
||||
|
||||
#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 tdma_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,184 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright(c) 2012 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>
|
||||
*
|
||||
*****************************************************************************/
|
||||
/**********************************************************************
|
||||
* 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 BIT7
|
||||
#define BT_INFO_8723B_1ANT_B_A2DP BIT6
|
||||
#define BT_INFO_8723B_1ANT_B_HID BIT5
|
||||
#define BT_INFO_8723B_1ANT_B_SCO_BUSY BIT4
|
||||
#define BT_INFO_8723B_1ANT_B_ACL_BUSY BIT3
|
||||
#define BT_INFO_8723B_1ANT_B_INQ_PAGE BIT2
|
||||
#define BT_INFO_8723B_1ANT_B_SCO_ESCO BIT1
|
||||
#define BT_INFO_8723B_1ANT_B_CONNECTION BIT0
|
||||
|
||||
#define BT_INFO_8723B_1ANT_A2DP_BASIC_RATE(_BT_INFO_EXT_) \
|
||||
(((_BT_INFO_EXT_&BIT0)) ? 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 tdma_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 pnpstate);
|
||||
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,172 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright(c) 2012 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 _HAL8723B_2_ANT
|
||||
#define _HAL8723B_2_ANT
|
||||
|
||||
/************************************************************************
|
||||
* 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 BIT7
|
||||
#define BT_INFO_8723B_2ANT_B_A2DP BIT6
|
||||
#define BT_INFO_8723B_2ANT_B_HID BIT5
|
||||
#define BT_INFO_8723B_2ANT_B_SCO_BUSY BIT4
|
||||
#define BT_INFO_8723B_2ANT_B_ACL_BUSY BIT3
|
||||
#define BT_INFO_8723B_2ANT_B_INQ_PAGE BIT2
|
||||
#define BT_INFO_8723B_2ANT_B_SCO_ESCO BIT1
|
||||
#define BT_INFO_8723B_2ANT_B_CONNECTION BIT0
|
||||
|
||||
#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 tdma_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 ex_btc8723b2ant_init_hwconfig(struct btc_coexist *btcoexist);
|
||||
void ex_btc8723b2ant_init_coex_dm(struct btc_coexist *btcoexist);
|
||||
void ex_btc8723b2ant_ips_notify(struct btc_coexist *btcoexist, u8 type);
|
||||
void ex_btc8723b2ant_lps_notify(struct btc_coexist *btcoexist, u8 type);
|
||||
void ex_btc8723b2ant_scan_notify(struct btc_coexist *btcoexist, u8 type);
|
||||
void ex_btc8723b2ant_connect_notify(struct btc_coexist *btcoexist, u8 type);
|
||||
void ex_btc8723b2ant_media_status_notify(struct btc_coexist *btcoexist,
|
||||
u8 type);
|
||||
void ex_btc8723b2ant_special_packet_notify(struct btc_coexist *btcoexist,
|
||||
u8 type);
|
||||
void ex_btc8723b2ant_bt_info_notify(struct btc_coexist *btcoexist,
|
||||
u8 *tmpbuf, u8 length);
|
||||
void ex_btc8723b2ant_halt_notify(struct btc_coexist *btcoexist);
|
||||
void ex_btc8723b2ant_periodical(struct btc_coexist *btcoexist);
|
||||
void ex_btc8723b2ant_display_coex_info(struct btc_coexist *btcoexist);
|
||||
|
||||
#endif
|
ファイル差分が大きすぎるため省略します
差分を読み込み
@@ -0,0 +1,188 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright(c) 2012 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>
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
/*===========================================
|
||||
* 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 BIT7
|
||||
#define BT_INFO_8821A_1ANT_B_A2DP BIT6
|
||||
#define BT_INFO_8821A_1ANT_B_HID BIT5
|
||||
#define BT_INFO_8821A_1ANT_B_SCO_BUSY BIT4
|
||||
#define BT_INFO_8821A_1ANT_B_ACL_BUSY BIT3
|
||||
#define BT_INFO_8821A_1ANT_B_INQ_PAGE BIT2
|
||||
#define BT_INFO_8821A_1ANT_B_SCO_ESCO BIT1
|
||||
#define BT_INFO_8821A_1ANT_B_CONNECTION BIT0
|
||||
|
||||
#define BT_INFO_8821A_1ANT_A2DP_BASIC_RATE(_BT_INFO_EXT_) \
|
||||
(((_BT_INFO_EXT_&BIT0)) ? 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 tdma_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;
|
||||
/* Auto Rate Fallback Retry cnt */
|
||||
u32 backup_arfr_cnt1;
|
||||
/* Auto Rate Fallback Retry cnt */
|
||||
u32 backup_arfr_cnt2;
|
||||
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,205 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright(c) 2012 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>
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
/*===========================================
|
||||
* The following is for 8821A 2Ant BT Co-exist definition
|
||||
*===========================================
|
||||
*/
|
||||
#define BT_INFO_8821A_2ANT_B_FTP BIT7
|
||||
#define BT_INFO_8821A_2ANT_B_A2DP BIT6
|
||||
#define BT_INFO_8821A_2ANT_B_HID BIT5
|
||||
#define BT_INFO_8821A_2ANT_B_SCO_BUSY BIT4
|
||||
#define BT_INFO_8821A_2ANT_B_ACL_BUSY BIT3
|
||||
#define BT_INFO_8821A_2ANT_B_INQ_PAGE BIT2
|
||||
#define BT_INFO_8821A_2ANT_B_SCO_ESCO BIT1
|
||||
#define BT_INFO_8821A_2ANT_B_CONNECTION BIT0
|
||||
|
||||
#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_CON_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 tdma_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,987 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright(c) 2007 - 2013 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.
|
||||
*
|
||||
* 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 "halbt_precomp.h"
|
||||
|
||||
/***********************************************
|
||||
* Global variables
|
||||
***********************************************/
|
||||
|
||||
struct btc_coexist gl_bt_coexist;
|
||||
|
||||
u32 btc_dbg_type[BTC_MSG_MAX];
|
||||
|
||||
/***************************************************
|
||||
* Debug related function
|
||||
***************************************************/
|
||||
static bool halbtc_is_bt_coexist_available(struct btc_coexist *btcoexist)
|
||||
{
|
||||
if (!btcoexist->binded || NULL == btcoexist->adapter)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool halbtc_is_wifi_busy(struct rtl_priv *rtlpriv)
|
||||
{
|
||||
if (rtlpriv->link_info.busytraffic)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
static void halbtc_dbg_init(void)
|
||||
{
|
||||
u8 i;
|
||||
|
||||
for (i = 0; i < BTC_MSG_MAX; i++)
|
||||
btc_dbg_type[i] = 0;
|
||||
|
||||
btc_dbg_type[BTC_MSG_INTERFACE] =
|
||||
/* INTF_INIT | */
|
||||
/* INTF_NOTIFY | */
|
||||
0;
|
||||
|
||||
btc_dbg_type[BTC_MSG_ALGORITHM] =
|
||||
/* ALGO_BT_RSSI_STATE | */
|
||||
/* ALGO_WIFI_RSSI_STATE | */
|
||||
/* ALGO_BT_MONITOR | */
|
||||
/* ALGO_TRACE | */
|
||||
/* ALGO_TRACE_FW | */
|
||||
/* ALGO_TRACE_FW_DETAIL | */
|
||||
/* ALGO_TRACE_FW_EXEC | */
|
||||
/* ALGO_TRACE_SW | */
|
||||
/* ALGO_TRACE_SW_DETAIL | */
|
||||
/* ALGO_TRACE_SW_EXEC | */
|
||||
0;
|
||||
}
|
||||
|
||||
static bool halbtc_is_bt40(struct rtl_priv *adapter)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = adapter;
|
||||
struct rtl_phy *rtlphy = &(rtlpriv->phy);
|
||||
bool is_ht40 = true;
|
||||
enum ht_channel_width bw = rtlphy->current_chan_bw;
|
||||
|
||||
if (bw == HT_CHANNEL_WIDTH_20)
|
||||
is_ht40 = false;
|
||||
else if (bw == HT_CHANNEL_WIDTH_20_40)
|
||||
is_ht40 = true;
|
||||
|
||||
return is_ht40;
|
||||
}
|
||||
|
||||
static bool halbtc_legacy(struct rtl_priv *adapter)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = adapter;
|
||||
struct rtl_mac *mac = rtl_mac(rtlpriv);
|
||||
|
||||
bool is_legacy = false;
|
||||
|
||||
if ((mac->mode == WIRELESS_MODE_B) || (mac->mode == WIRELESS_MODE_G))
|
||||
is_legacy = true;
|
||||
|
||||
return is_legacy;
|
||||
}
|
||||
|
||||
bool halbtc_is_wifi_uplink(struct rtl_priv *adapter)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = adapter;
|
||||
|
||||
if (rtlpriv->link_info.tx_busy_traffic)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
static u32 halbtc_get_wifi_bw(struct btc_coexist *btcoexist)
|
||||
{
|
||||
struct rtl_priv *rtlpriv =
|
||||
(struct rtl_priv *)btcoexist->adapter;
|
||||
u32 wifi_bw = BTC_WIFI_BW_HT20;
|
||||
|
||||
if (halbtc_is_bt40(rtlpriv)) {
|
||||
wifi_bw = BTC_WIFI_BW_HT40;
|
||||
} else {
|
||||
if (halbtc_legacy(rtlpriv))
|
||||
wifi_bw = BTC_WIFI_BW_LEGACY;
|
||||
else
|
||||
wifi_bw = BTC_WIFI_BW_HT20;
|
||||
}
|
||||
return wifi_bw;
|
||||
}
|
||||
|
||||
static u8 halbtc_get_wifi_central_chnl(struct btc_coexist *btcoexist)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = btcoexist->adapter;
|
||||
struct rtl_phy *rtlphy = &(rtlpriv->phy);
|
||||
u8 chnl = 1;
|
||||
|
||||
if (rtlphy->current_channel != 0)
|
||||
chnl = rtlphy->current_channel;
|
||||
BTC_PRINT(BTC_MSG_ALGORITHM, ALGO_TRACE,
|
||||
"static halbtc_get_wifi_central_chnl:%d\n", chnl);
|
||||
return chnl;
|
||||
}
|
||||
|
||||
static void halbtc_leave_lps(struct btc_coexist *btcoexist)
|
||||
{
|
||||
struct rtl_priv *rtlpriv;
|
||||
struct rtl_ps_ctl *ppsc;
|
||||
bool ap_enable = false;
|
||||
|
||||
rtlpriv = btcoexist->adapter;
|
||||
ppsc = rtl_psc(rtlpriv);
|
||||
|
||||
btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_AP_MODE_ENABLE,
|
||||
&ap_enable);
|
||||
|
||||
if (ap_enable) {
|
||||
pr_info("halbtc_leave_lps()<--dont leave lps under AP mode\n");
|
||||
return;
|
||||
}
|
||||
|
||||
btcoexist->bt_info.bt_ctrl_lps = true;
|
||||
btcoexist->bt_info.bt_lps_on = false;
|
||||
}
|
||||
|
||||
static void halbtc_enter_lps(struct btc_coexist *btcoexist)
|
||||
{
|
||||
struct rtl_priv *rtlpriv;
|
||||
struct rtl_ps_ctl *ppsc;
|
||||
bool ap_enable = false;
|
||||
|
||||
rtlpriv = btcoexist->adapter;
|
||||
ppsc = rtl_psc(rtlpriv);
|
||||
|
||||
btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_AP_MODE_ENABLE,
|
||||
&ap_enable);
|
||||
|
||||
if (ap_enable) {
|
||||
pr_info("halbtc_enter_lps()<--dont enter lps under AP mode\n");
|
||||
return;
|
||||
}
|
||||
|
||||
btcoexist->bt_info.bt_ctrl_lps = true;
|
||||
btcoexist->bt_info.bt_lps_on = false;
|
||||
}
|
||||
|
||||
static void halbtc_normal_lps(struct btc_coexist *btcoexist)
|
||||
{
|
||||
if (btcoexist->bt_info.bt_ctrl_lps) {
|
||||
btcoexist->bt_info.bt_lps_on = false;
|
||||
btcoexist->bt_info.bt_ctrl_lps = false;
|
||||
}
|
||||
}
|
||||
|
||||
static void halbtc_leave_low_power(void)
|
||||
{
|
||||
}
|
||||
|
||||
static void halbtc_nomal_low_power(void)
|
||||
{
|
||||
}
|
||||
|
||||
static void halbtc_disable_low_power(void)
|
||||
{
|
||||
}
|
||||
|
||||
static void halbtc_aggregation_check(void)
|
||||
{
|
||||
}
|
||||
|
||||
static u32 halbtc_get_bt_patch_version(struct btc_coexist *btcoexist)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static s32 halbtc_get_wifi_rssi(struct rtl_priv *adapter)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = adapter;
|
||||
s32 undec_sm_pwdb = 0;
|
||||
|
||||
if (rtlpriv->mac80211.link_state >= MAC80211_LINKED)
|
||||
undec_sm_pwdb = rtlpriv->dm.undec_sm_pwdb;
|
||||
else /* associated entry pwdb */
|
||||
undec_sm_pwdb = rtlpriv->dm.undec_sm_pwdb;
|
||||
return undec_sm_pwdb;
|
||||
}
|
||||
|
||||
static bool halbtc_get(void *void_btcoexist, u8 get_type, void *out_buf)
|
||||
{
|
||||
struct btc_coexist *btcoexist = (struct btc_coexist *)void_btcoexist;
|
||||
struct rtl_priv *rtlpriv = btcoexist->adapter;
|
||||
struct rtl_phy *rtlphy = &(rtlpriv->phy);
|
||||
struct rtl_mac *mac = rtl_mac(rtlpriv);
|
||||
struct rtl_hal *rtlhal = rtl_hal(rtlpriv);
|
||||
bool *bool_tmp = (bool *)out_buf;
|
||||
int *s32_tmp = (int *)out_buf;
|
||||
u32 *u32_tmp = (u32 *)out_buf;
|
||||
u8 *u8_tmp = (u8 *)out_buf;
|
||||
bool tmp = false;
|
||||
|
||||
if (!halbtc_is_bt_coexist_available(btcoexist))
|
||||
return false;
|
||||
|
||||
switch (get_type) {
|
||||
case BTC_GET_BL_HS_OPERATION:
|
||||
*bool_tmp = false;
|
||||
break;
|
||||
case BTC_GET_BL_HS_CONNECTING:
|
||||
*bool_tmp = false;
|
||||
break;
|
||||
case BTC_GET_BL_WIFI_CONNECTED:
|
||||
if (rtlpriv->mac80211.link_state >= MAC80211_LINKED)
|
||||
tmp = true;
|
||||
*bool_tmp = tmp;
|
||||
break;
|
||||
case BTC_GET_BL_WIFI_BUSY:
|
||||
if (halbtc_is_wifi_busy(rtlpriv))
|
||||
*bool_tmp = true;
|
||||
else
|
||||
*bool_tmp = false;
|
||||
break;
|
||||
case BTC_GET_BL_WIFI_SCAN:
|
||||
if (mac->act_scanning)
|
||||
*bool_tmp = true;
|
||||
else
|
||||
*bool_tmp = false;
|
||||
break;
|
||||
case BTC_GET_BL_WIFI_LINK:
|
||||
if (mac->link_state == MAC80211_LINKING)
|
||||
*bool_tmp = true;
|
||||
else
|
||||
*bool_tmp = false;
|
||||
break;
|
||||
case BTC_GET_BL_WIFI_ROAM: /*TODO*/
|
||||
if (mac->link_state == MAC80211_LINKING)
|
||||
*bool_tmp = true;
|
||||
else
|
||||
*bool_tmp = false;
|
||||
break;
|
||||
case BTC_GET_BL_WIFI_4_WAY_PROGRESS: /*TODO*/
|
||||
*bool_tmp = false;
|
||||
|
||||
break;
|
||||
case BTC_GET_BL_WIFI_UNDER_5G:
|
||||
*bool_tmp = false; /*TODO*/
|
||||
|
||||
case BTC_GET_BL_WIFI_DHCP: /*TODO*/
|
||||
break;
|
||||
case BTC_GET_BL_WIFI_SOFTAP_IDLE:
|
||||
*bool_tmp = true;
|
||||
break;
|
||||
case BTC_GET_BL_WIFI_SOFTAP_LINKING:
|
||||
*bool_tmp = false;
|
||||
break;
|
||||
case BTC_GET_BL_WIFI_IN_EARLY_SUSPEND:
|
||||
*bool_tmp = false;
|
||||
break;
|
||||
case BTC_GET_BL_WIFI_AP_MODE_ENABLE:
|
||||
*bool_tmp = false;
|
||||
break;
|
||||
case BTC_GET_BL_WIFI_ENABLE_ENCRYPTION:
|
||||
if (NO_ENCRYPTION == rtlpriv->sec.pairwise_enc_algorithm)
|
||||
*bool_tmp = false;
|
||||
else
|
||||
*bool_tmp = true;
|
||||
break;
|
||||
case BTC_GET_BL_WIFI_UNDER_B_MODE:
|
||||
*bool_tmp = false; /*TODO*/
|
||||
break;
|
||||
case BTC_GET_BL_EXT_SWITCH:
|
||||
*bool_tmp = false;
|
||||
break;
|
||||
case BTC_GET_S4_WIFI_RSSI:
|
||||
*s32_tmp = halbtc_get_wifi_rssi(rtlpriv);
|
||||
break;
|
||||
case BTC_GET_S4_HS_RSSI: /*TODO*/
|
||||
*s32_tmp = halbtc_get_wifi_rssi(rtlpriv);
|
||||
break;
|
||||
case BTC_GET_U4_WIFI_BW:
|
||||
*u32_tmp = halbtc_get_wifi_bw(btcoexist);
|
||||
break;
|
||||
case BTC_GET_U4_WIFI_TRAFFIC_DIRECTION:
|
||||
if (halbtc_is_wifi_uplink(rtlpriv))
|
||||
*u32_tmp = BTC_WIFI_TRAFFIC_TX;
|
||||
else
|
||||
*u32_tmp = BTC_WIFI_TRAFFIC_RX;
|
||||
break;
|
||||
case BTC_GET_U4_WIFI_FW_VER:
|
||||
*u32_tmp = rtlhal->fw_version;
|
||||
break;
|
||||
case BTC_GET_U4_BT_PATCH_VER:
|
||||
*u32_tmp = halbtc_get_bt_patch_version(btcoexist);
|
||||
break;
|
||||
case BTC_GET_U1_WIFI_DOT11_CHNL:
|
||||
*u8_tmp = rtlphy->current_channel;
|
||||
break;
|
||||
case BTC_GET_U1_WIFI_CENTRAL_CHNL:
|
||||
*u8_tmp = halbtc_get_wifi_central_chnl(btcoexist);
|
||||
break;
|
||||
case BTC_GET_U1_WIFI_HS_CHNL:
|
||||
*u8_tmp = 1;/*BT_OperateChnl(rtlpriv);*/
|
||||
break;
|
||||
case BTC_GET_U1_MAC_PHY_MODE:
|
||||
*u8_tmp = BTC_MP_UNKNOWN;
|
||||
break;
|
||||
|
||||
/************* 1Ant **************/
|
||||
case BTC_GET_U1_LPS_MODE:
|
||||
*u8_tmp = btcoexist->pwr_mode_val[0];
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool halbtc_set(void *void_btcoexist, u8 set_type, void *in_buf)
|
||||
{
|
||||
struct btc_coexist *btcoexist = (struct btc_coexist *)void_btcoexist;
|
||||
bool *bool_tmp = (bool *)in_buf;
|
||||
u8 *u8_tmp = (u8 *)in_buf;
|
||||
u32 *u32_tmp = (u32 *)in_buf;
|
||||
|
||||
if (!halbtc_is_bt_coexist_available(btcoexist))
|
||||
return false;
|
||||
|
||||
switch (set_type) {
|
||||
/* set some bool type variables. */
|
||||
case BTC_SET_BL_BT_DISABLE:
|
||||
btcoexist->bt_info.bt_disabled = *bool_tmp;
|
||||
break;
|
||||
case BTC_SET_BL_BT_TRAFFIC_BUSY:
|
||||
btcoexist->bt_info.bt_busy = *bool_tmp;
|
||||
break;
|
||||
case BTC_SET_BL_BT_LIMITED_DIG:
|
||||
btcoexist->bt_info.limited_dig = *bool_tmp;
|
||||
break;
|
||||
case BTC_SET_BL_FORCE_TO_ROAM:
|
||||
btcoexist->bt_info.force_to_roam = *bool_tmp;
|
||||
break;
|
||||
case BTC_SET_BL_TO_REJ_AP_AGG_PKT:
|
||||
btcoexist->bt_info.reject_agg_pkt = *bool_tmp;
|
||||
break;
|
||||
case BTC_SET_BL_BT_CTRL_AGG_SIZE:
|
||||
btcoexist->bt_info.bt_ctrl_buf_size = *bool_tmp;
|
||||
break;
|
||||
case BTC_SET_BL_INC_SCAN_DEV_NUM:
|
||||
btcoexist->bt_info.increase_scan_dev_num = *bool_tmp;
|
||||
break;
|
||||
/* set some u1Byte type variables. */
|
||||
case BTC_SET_U1_RSSI_ADJ_VAL_FOR_AGC_TABLE_ON:
|
||||
btcoexist->bt_info.rssi_adjust_for_agc_table_on = *u8_tmp;
|
||||
break;
|
||||
case BTC_SET_U1_AGG_BUF_SIZE:
|
||||
btcoexist->bt_info.agg_buf_size = *u8_tmp;
|
||||
break;
|
||||
/* the following are some action which will be triggered */
|
||||
case BTC_SET_ACT_GET_BT_RSSI:
|
||||
/*BTHCI_SendGetBtRssiEvent(rtlpriv);*/
|
||||
break;
|
||||
case BTC_SET_ACT_AGGREGATE_CTRL:
|
||||
halbtc_aggregation_check();
|
||||
break;
|
||||
|
||||
/* 1Ant */
|
||||
case BTC_SET_U1_RSSI_ADJ_VAL_FOR_1ANT_COEX_TYPE:
|
||||
btcoexist->bt_info.rssi_adjust_for_1ant_coex_type = *u8_tmp;
|
||||
break;
|
||||
case BTC_SET_UI_SCAN_SIG_COMPENSATION:
|
||||
/* rtlpriv->mlmepriv.scan_compensation = *u8_tmp; */
|
||||
break;
|
||||
case BTC_SET_U1_1ANT_LPS:
|
||||
btcoexist->bt_info.lps_val = *u8_tmp;
|
||||
break;
|
||||
case BTC_SET_U1_1ANT_RPWM:
|
||||
btcoexist->bt_info.rpwm_val = *u8_tmp;
|
||||
break;
|
||||
/* the following are some action which will be triggered */
|
||||
case BTC_SET_ACT_LEAVE_LPS:
|
||||
halbtc_leave_lps(btcoexist);
|
||||
break;
|
||||
case BTC_SET_ACT_ENTER_LPS:
|
||||
halbtc_enter_lps(btcoexist);
|
||||
break;
|
||||
case BTC_SET_ACT_NORMAL_LPS:
|
||||
halbtc_normal_lps(btcoexist);
|
||||
break;
|
||||
case BTC_SET_ACT_DISABLE_LOW_POWER:
|
||||
halbtc_disable_low_power();
|
||||
break;
|
||||
case BTC_SET_ACT_UPDATE_ra_mask:
|
||||
btcoexist->bt_info.ra_mask = *u32_tmp;
|
||||
break;
|
||||
case BTC_SET_ACT_SEND_MIMO_PS:
|
||||
break;
|
||||
case BTC_SET_ACT_INC_FORCE_EXEC_PWR_CMD_CNT:
|
||||
btcoexist->bt_info.force_exec_pwr_cmd_cnt++;
|
||||
break;
|
||||
case BTC_SET_ACT_CTRL_BT_INFO: /*wait for 8812/8821*/
|
||||
break;
|
||||
case BTC_SET_ACT_CTRL_BT_COEX:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static void halbtc_display_coex_statistics(struct btc_coexist *btcoexist)
|
||||
{
|
||||
}
|
||||
|
||||
static void halbtc_display_bt_link_info(struct btc_coexist *btcoexist)
|
||||
{
|
||||
}
|
||||
|
||||
static void halbtc_display_bt_fw_info(struct btc_coexist *btcoexist)
|
||||
{
|
||||
}
|
||||
|
||||
static void halbtc_display_fw_pwr_mode_cmd(struct btc_coexist *btcoexist)
|
||||
{
|
||||
}
|
||||
|
||||
/************************************************************
|
||||
* IO related function
|
||||
************************************************************/
|
||||
static u8 halbtc_read_1byte(void *bt_context, u32 reg_addr)
|
||||
{
|
||||
struct btc_coexist *btcoexist = (struct btc_coexist *)bt_context;
|
||||
struct rtl_priv *rtlpriv = btcoexist->adapter;
|
||||
|
||||
return rtl_read_byte(rtlpriv, reg_addr);
|
||||
}
|
||||
|
||||
static u16 halbtc_read_2byte(void *bt_context, u32 reg_addr)
|
||||
{
|
||||
struct btc_coexist *btcoexist = (struct btc_coexist *)bt_context;
|
||||
struct rtl_priv *rtlpriv = btcoexist->adapter;
|
||||
|
||||
return rtl_read_word(rtlpriv, reg_addr);
|
||||
}
|
||||
|
||||
static u32 halbtc_read_4byte(void *bt_context, u32 reg_addr)
|
||||
{
|
||||
struct btc_coexist *btcoexist = (struct btc_coexist *)bt_context;
|
||||
struct rtl_priv *rtlpriv = btcoexist->adapter;
|
||||
|
||||
return rtl_read_dword(rtlpriv, reg_addr);
|
||||
}
|
||||
|
||||
static void halbtc_write_1byte(void *bt_context, u32 reg_addr, u32 data)
|
||||
{
|
||||
struct btc_coexist *btcoexist = (struct btc_coexist *)bt_context;
|
||||
struct rtl_priv *rtlpriv = btcoexist->adapter;
|
||||
|
||||
rtl_write_byte(rtlpriv, reg_addr, data);
|
||||
}
|
||||
|
||||
static void halbtc_bitmask_write_1byte(void *bt_context, u32 reg_addr,
|
||||
u32 bit_mask, u8 data)
|
||||
{
|
||||
struct btc_coexist *btcoexist = (struct btc_coexist *)bt_context;
|
||||
struct rtl_priv *rtlpriv = btcoexist->adapter;
|
||||
u8 original_value, bit_shift = 0;
|
||||
u8 i;
|
||||
|
||||
if (bit_mask != MASKDWORD) {/*if not "double word" write*/
|
||||
original_value = rtl_read_byte(rtlpriv, reg_addr);
|
||||
for (i = 0; i <= 7; i++) {
|
||||
if ((bit_mask>>i) & 0x1)
|
||||
break;
|
||||
}
|
||||
bit_shift = i;
|
||||
data = (original_value & (~bit_mask)) |
|
||||
((data << bit_shift) & bit_mask);
|
||||
}
|
||||
rtl_write_byte(rtlpriv, reg_addr, data);
|
||||
}
|
||||
|
||||
static void halbtc_write_2byte(void *bt_context, u32 reg_addr, u16 data)
|
||||
{
|
||||
struct btc_coexist *btcoexist = (struct btc_coexist *)bt_context;
|
||||
struct rtl_priv *rtlpriv = btcoexist->adapter;
|
||||
|
||||
rtl_write_word(rtlpriv, reg_addr, data);
|
||||
}
|
||||
|
||||
static void halbtc_write_4byte(void *bt_context, u32 reg_addr, u32 data)
|
||||
{
|
||||
struct btc_coexist *btcoexist =
|
||||
(struct btc_coexist *)bt_context;
|
||||
struct rtl_priv *rtlpriv = btcoexist->adapter;
|
||||
|
||||
rtl_write_dword(rtlpriv, reg_addr, data);
|
||||
}
|
||||
|
||||
static void halbtc_set_bbreg(void *bt_context, u32 reg_addr, u32 bit_mask,
|
||||
u32 data)
|
||||
{
|
||||
struct btc_coexist *btcoexist = (struct btc_coexist *)bt_context;
|
||||
struct rtl_priv *rtlpriv = btcoexist->adapter;
|
||||
|
||||
rtl_set_bbreg(rtlpriv->mac80211.hw, reg_addr, bit_mask, data);
|
||||
}
|
||||
|
||||
static u32 halbtc_get_bbreg(void *bt_context, u32 reg_addr, u32 bit_mask)
|
||||
{
|
||||
struct btc_coexist *btcoexist = (struct btc_coexist *)bt_context;
|
||||
struct rtl_priv *rtlpriv = btcoexist->adapter;
|
||||
|
||||
return rtl_get_bbreg(rtlpriv->mac80211.hw, reg_addr, bit_mask);
|
||||
}
|
||||
|
||||
static void halbtc_set_rfreg(void *bt_context, u8 rf_path, u32 reg_addr,
|
||||
u32 bit_mask, u32 data)
|
||||
{
|
||||
struct btc_coexist *btcoexist = (struct btc_coexist *)bt_context;
|
||||
struct rtl_priv *rtlpriv = btcoexist->adapter;
|
||||
|
||||
rtl_set_rfreg(rtlpriv->mac80211.hw, rf_path, reg_addr, bit_mask, data);
|
||||
}
|
||||
|
||||
static u32 halbtc_get_rfreg(void *bt_context, u8 rf_path, u32 reg_addr,
|
||||
u32 bit_mask)
|
||||
{
|
||||
struct btc_coexist *btcoexist = (struct btc_coexist *)bt_context;
|
||||
struct rtl_priv *rtlpriv = btcoexist->adapter;
|
||||
|
||||
return rtl_get_rfreg(rtlpriv->mac80211.hw, rf_path, reg_addr, bit_mask);
|
||||
}
|
||||
|
||||
static void halbtc_fill_h2c_cmd(void *bt_context, u8 element_id,
|
||||
u32 cmd_len, u8 *cmd_buf)
|
||||
{
|
||||
struct btc_coexist *btcoexist = (struct btc_coexist *)bt_context;
|
||||
struct rtl_priv *rtlpriv = btcoexist->adapter;
|
||||
|
||||
rtlpriv->cfg->ops->fill_h2c_cmd(rtlpriv->mac80211.hw, element_id,
|
||||
cmd_len, cmd_buf);
|
||||
}
|
||||
|
||||
static void halbtc_display_dbg_msg(void *bt_context, u8 disp_type)
|
||||
{
|
||||
struct btc_coexist *btcoexist = (struct btc_coexist *)bt_context;
|
||||
switch (disp_type) {
|
||||
case BTC_DBG_DISP_COEX_STATISTICS:
|
||||
halbtc_display_coex_statistics(btcoexist);
|
||||
break;
|
||||
case BTC_DBG_DISP_BT_LINK_INFO:
|
||||
halbtc_display_bt_link_info(btcoexist);
|
||||
break;
|
||||
case BTC_DBG_DISP_BT_FW_VER:
|
||||
halbtc_display_bt_fw_info(btcoexist);
|
||||
break;
|
||||
case BTC_DBG_DISP_FW_PWR_MODE_CMD:
|
||||
halbtc_display_fw_pwr_mode_cmd(btcoexist);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************
|
||||
* Extern functions called by other module
|
||||
*****************************************************************/
|
||||
bool exhalbtc_initlize_variables(struct rtl_priv *adapter)
|
||||
{
|
||||
struct btc_coexist *btcoexist = &gl_bt_coexist;
|
||||
|
||||
btcoexist->statistics.cnt_bind++;
|
||||
|
||||
halbtc_dbg_init();
|
||||
|
||||
if (btcoexist->binded)
|
||||
return false;
|
||||
else
|
||||
btcoexist->binded = true;
|
||||
|
||||
btcoexist->chip_interface = BTC_INTF_UNKNOWN;
|
||||
|
||||
if (NULL == btcoexist->adapter)
|
||||
btcoexist->adapter = adapter;
|
||||
|
||||
btcoexist->stack_info.profile_notified = false;
|
||||
|
||||
btcoexist->btc_read_1byte = halbtc_read_1byte;
|
||||
btcoexist->btc_write_1byte = halbtc_write_1byte;
|
||||
btcoexist->btc_write_1byte_bitmask = halbtc_bitmask_write_1byte;
|
||||
btcoexist->btc_read_2byte = halbtc_read_2byte;
|
||||
btcoexist->btc_write_2byte = halbtc_write_2byte;
|
||||
btcoexist->btc_read_4byte = halbtc_read_4byte;
|
||||
btcoexist->btc_write_4byte = halbtc_write_4byte;
|
||||
|
||||
btcoexist->btc_set_bb_reg = halbtc_set_bbreg;
|
||||
btcoexist->btc_get_bb_reg = halbtc_get_bbreg;
|
||||
|
||||
btcoexist->btc_set_rf_reg = halbtc_set_rfreg;
|
||||
btcoexist->btc_get_rf_reg = halbtc_get_rfreg;
|
||||
|
||||
btcoexist->btc_fill_h2c = halbtc_fill_h2c_cmd;
|
||||
btcoexist->btc_disp_dbg_msg = halbtc_display_dbg_msg;
|
||||
|
||||
btcoexist->btc_get = halbtc_get;
|
||||
btcoexist->btc_set = halbtc_set;
|
||||
|
||||
btcoexist->bt_info.bt_ctrl_buf_size = false;
|
||||
btcoexist->bt_info.agg_buf_size = 5;
|
||||
|
||||
btcoexist->bt_info.increase_scan_dev_num = false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void exhalbtc_init_hw_config(struct btc_coexist *btcoexist)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = btcoexist->adapter;
|
||||
struct rtl_hal *rtlhal = rtl_hal(rtlpriv);
|
||||
|
||||
if (!halbtc_is_bt_coexist_available(btcoexist))
|
||||
return;
|
||||
|
||||
btcoexist->statistics.cnt_init_hw_config++;
|
||||
|
||||
if (rtlhal->hw_type == HARDWARE_TYPE_RTL8723BE)
|
||||
ex_btc8723b2ant_init_hwconfig(btcoexist);
|
||||
}
|
||||
|
||||
void exhalbtc_init_coex_dm(struct btc_coexist *btcoexist)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = btcoexist->adapter;
|
||||
struct rtl_hal *rtlhal = rtl_hal(rtlpriv);
|
||||
|
||||
if (!halbtc_is_bt_coexist_available(btcoexist))
|
||||
return;
|
||||
|
||||
btcoexist->statistics.cnt_init_coex_dm++;
|
||||
|
||||
if (rtlhal->hw_type == HARDWARE_TYPE_RTL8723BE)
|
||||
ex_btc8723b2ant_init_coex_dm(btcoexist);
|
||||
|
||||
btcoexist->initilized = true;
|
||||
}
|
||||
|
||||
void exhalbtc_ips_notify(struct btc_coexist *btcoexist, u8 type)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = btcoexist->adapter;
|
||||
struct rtl_hal *rtlhal = rtl_hal(rtlpriv);
|
||||
u8 ips_type;
|
||||
|
||||
if (!halbtc_is_bt_coexist_available(btcoexist))
|
||||
return;
|
||||
btcoexist->statistics.cnt_ips_notify++;
|
||||
if (btcoexist->manual_control)
|
||||
return;
|
||||
|
||||
if (ERFOFF == type)
|
||||
ips_type = BTC_IPS_ENTER;
|
||||
else
|
||||
ips_type = BTC_IPS_LEAVE;
|
||||
|
||||
halbtc_leave_low_power();
|
||||
|
||||
if (rtlhal->hw_type == HARDWARE_TYPE_RTL8723BE)
|
||||
ex_btc8723b2ant_ips_notify(btcoexist, ips_type);
|
||||
|
||||
halbtc_nomal_low_power();
|
||||
}
|
||||
|
||||
void exhalbtc_lps_notify(struct btc_coexist *btcoexist, u8 type)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = btcoexist->adapter;
|
||||
struct rtl_hal *rtlhal = rtl_hal(rtlpriv);
|
||||
u8 lps_type;
|
||||
|
||||
if (!halbtc_is_bt_coexist_available(btcoexist))
|
||||
return;
|
||||
btcoexist->statistics.cnt_lps_notify++;
|
||||
if (btcoexist->manual_control)
|
||||
return;
|
||||
|
||||
if (EACTIVE == type)
|
||||
lps_type = BTC_LPS_DISABLE;
|
||||
else
|
||||
lps_type = BTC_LPS_ENABLE;
|
||||
|
||||
if (rtlhal->hw_type == HARDWARE_TYPE_RTL8723BE)
|
||||
ex_btc8723b2ant_lps_notify(btcoexist, lps_type);
|
||||
}
|
||||
|
||||
void exhalbtc_scan_notify(struct btc_coexist *btcoexist, u8 type)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = btcoexist->adapter;
|
||||
struct rtl_hal *rtlhal = rtl_hal(rtlpriv);
|
||||
u8 scan_type;
|
||||
|
||||
if (!halbtc_is_bt_coexist_available(btcoexist))
|
||||
return;
|
||||
btcoexist->statistics.cnt_scan_notify++;
|
||||
if (btcoexist->manual_control)
|
||||
return;
|
||||
|
||||
if (type)
|
||||
scan_type = BTC_SCAN_START;
|
||||
else
|
||||
scan_type = BTC_SCAN_FINISH;
|
||||
|
||||
halbtc_leave_low_power();
|
||||
|
||||
if (rtlhal->hw_type == HARDWARE_TYPE_RTL8723BE)
|
||||
ex_btc8723b2ant_scan_notify(btcoexist, scan_type);
|
||||
|
||||
halbtc_nomal_low_power();
|
||||
}
|
||||
|
||||
void exhalbtc_connect_notify(struct btc_coexist *btcoexist, u8 action)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = btcoexist->adapter;
|
||||
struct rtl_hal *rtlhal = rtl_hal(rtlpriv);
|
||||
u8 asso_type;
|
||||
|
||||
if (!halbtc_is_bt_coexist_available(btcoexist))
|
||||
return;
|
||||
btcoexist->statistics.cnt_connect_notify++;
|
||||
if (btcoexist->manual_control)
|
||||
return;
|
||||
|
||||
if (action)
|
||||
asso_type = BTC_ASSOCIATE_START;
|
||||
else
|
||||
asso_type = BTC_ASSOCIATE_FINISH;
|
||||
|
||||
halbtc_leave_low_power();
|
||||
|
||||
if (rtlhal->hw_type == HARDWARE_TYPE_RTL8723BE)
|
||||
ex_btc8723b2ant_connect_notify(btcoexist, asso_type);
|
||||
}
|
||||
|
||||
void exhalbtc_mediastatus_notify(struct btc_coexist *btcoexist,
|
||||
enum rt_media_status media_status)
|
||||
{
|
||||
u8 status;
|
||||
|
||||
if (!halbtc_is_bt_coexist_available(btcoexist))
|
||||
return;
|
||||
btcoexist->statistics.cnt_media_status_notify++;
|
||||
if (btcoexist->manual_control)
|
||||
return;
|
||||
|
||||
if (RT_MEDIA_CONNECT == media_status)
|
||||
status = BTC_MEDIA_CONNECT;
|
||||
else
|
||||
status = BTC_MEDIA_DISCONNECT;
|
||||
|
||||
halbtc_leave_low_power();
|
||||
|
||||
halbtc_nomal_low_power();
|
||||
}
|
||||
|
||||
void exhalbtc_special_packet_notify(struct btc_coexist *btcoexist, u8 pkt_type)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = btcoexist->adapter;
|
||||
struct rtl_hal *rtlhal = rtl_hal(rtlpriv);
|
||||
u8 packet_type;
|
||||
|
||||
if (!halbtc_is_bt_coexist_available(btcoexist))
|
||||
return;
|
||||
btcoexist->statistics.cnt_special_packet_notify++;
|
||||
if (btcoexist->manual_control)
|
||||
return;
|
||||
|
||||
packet_type = BTC_PACKET_DHCP;
|
||||
|
||||
halbtc_leave_low_power();
|
||||
|
||||
if (rtlhal->hw_type == HARDWARE_TYPE_RTL8723BE)
|
||||
ex_btc8723b2ant_special_packet_notify(btcoexist,
|
||||
packet_type);
|
||||
|
||||
halbtc_nomal_low_power();
|
||||
}
|
||||
|
||||
void exhalbtc_bt_info_notify(struct btc_coexist *btcoexist,
|
||||
u8 *tmp_buf, u8 length)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = btcoexist->adapter;
|
||||
struct rtl_hal *rtlhal = rtl_hal(rtlpriv);
|
||||
if (!halbtc_is_bt_coexist_available(btcoexist))
|
||||
return;
|
||||
btcoexist->statistics.cnt_bt_info_notify++;
|
||||
|
||||
if (rtlhal->hw_type == HARDWARE_TYPE_RTL8723BE)
|
||||
ex_btc8723b2ant_bt_info_notify(btcoexist, tmp_buf, length);
|
||||
}
|
||||
|
||||
void exhalbtc_stack_operation_notify(struct btc_coexist *btcoexist, u8 type)
|
||||
{
|
||||
u8 stack_op_type;
|
||||
|
||||
if (!halbtc_is_bt_coexist_available(btcoexist))
|
||||
return;
|
||||
btcoexist->statistics.cnt_stack_operation_notify++;
|
||||
if (btcoexist->manual_control)
|
||||
return;
|
||||
|
||||
stack_op_type = BTC_STACK_OP_NONE;
|
||||
|
||||
halbtc_leave_low_power();
|
||||
|
||||
halbtc_nomal_low_power();
|
||||
}
|
||||
|
||||
void exhalbtc_halt_notify(struct btc_coexist *btcoexist)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = btcoexist->adapter;
|
||||
struct rtl_hal *rtlhal = rtl_hal(rtlpriv);
|
||||
if (!halbtc_is_bt_coexist_available(btcoexist))
|
||||
return;
|
||||
|
||||
if (rtlhal->hw_type == HARDWARE_TYPE_RTL8723BE)
|
||||
ex_btc8723b2ant_halt_notify(btcoexist);
|
||||
}
|
||||
|
||||
void exhalbtc_pnp_notify(struct btc_coexist *btcoexist, u8 pnp_state)
|
||||
{
|
||||
if (!halbtc_is_bt_coexist_available(btcoexist))
|
||||
return;
|
||||
}
|
||||
|
||||
void exhalbtc_periodical(struct btc_coexist *btcoexist)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = btcoexist->adapter;
|
||||
struct rtl_hal *rtlhal = rtl_hal(rtlpriv);
|
||||
if (!halbtc_is_bt_coexist_available(btcoexist))
|
||||
return;
|
||||
btcoexist->statistics.cnt_periodical++;
|
||||
|
||||
halbtc_leave_low_power();
|
||||
|
||||
if (rtlhal->hw_type == HARDWARE_TYPE_RTL8723BE)
|
||||
ex_btc8723b2ant_periodical(btcoexist);
|
||||
|
||||
halbtc_nomal_low_power();
|
||||
}
|
||||
|
||||
void exhalbtc_dbg_control(struct btc_coexist *btcoexist,
|
||||
u8 code, u8 len, u8 *data)
|
||||
{
|
||||
if (!halbtc_is_bt_coexist_available(btcoexist))
|
||||
return;
|
||||
btcoexist->statistics.cnt_dbg_ctrl++;
|
||||
}
|
||||
|
||||
void exhalbtc_stack_update_profile_info(void)
|
||||
{
|
||||
}
|
||||
|
||||
void exhalbtc_update_min_bt_rssi(char bt_rssi)
|
||||
{
|
||||
struct btc_coexist *btcoexist = &gl_bt_coexist;
|
||||
|
||||
if (!halbtc_is_bt_coexist_available(btcoexist))
|
||||
return;
|
||||
|
||||
btcoexist->stack_info.min_bt_rssi = bt_rssi;
|
||||
}
|
||||
|
||||
void exhalbtc_set_hci_version(u16 hci_version)
|
||||
{
|
||||
struct btc_coexist *btcoexist = &gl_bt_coexist;
|
||||
|
||||
if (!halbtc_is_bt_coexist_available(btcoexist))
|
||||
return;
|
||||
|
||||
btcoexist->stack_info.hci_version = hci_version;
|
||||
}
|
||||
|
||||
void exhalbtc_set_bt_patch_version(u16 bt_hci_version, u16 bt_patch_version)
|
||||
{
|
||||
struct btc_coexist *btcoexist = &gl_bt_coexist;
|
||||
|
||||
if (!halbtc_is_bt_coexist_available(btcoexist))
|
||||
return;
|
||||
|
||||
btcoexist->bt_info.bt_real_fw_ver = bt_patch_version;
|
||||
btcoexist->bt_info.bt_hci_ver = bt_hci_version;
|
||||
}
|
||||
|
||||
void exhalbtc_set_bt_exist(bool bt_exist)
|
||||
{
|
||||
gl_bt_coexist.board_info.bt_exist = bt_exist;
|
||||
}
|
||||
|
||||
void exhalbtc_set_chip_type(u8 chip_type)
|
||||
{
|
||||
switch (chip_type) {
|
||||
default:
|
||||
case BT_2WIRE:
|
||||
case BT_ISSC_3WIRE:
|
||||
case BT_ACCEL:
|
||||
case BT_RTL8756:
|
||||
gl_bt_coexist.board_info.bt_chip_type = BTC_CHIP_UNDEF;
|
||||
break;
|
||||
case BT_CSR_BC4:
|
||||
gl_bt_coexist.board_info.bt_chip_type = BTC_CHIP_CSR_BC4;
|
||||
break;
|
||||
case BT_CSR_BC8:
|
||||
gl_bt_coexist.board_info.bt_chip_type = BTC_CHIP_CSR_BC8;
|
||||
break;
|
||||
case BT_RTL8723A:
|
||||
gl_bt_coexist.board_info.bt_chip_type = BTC_CHIP_RTL8723A;
|
||||
break;
|
||||
case BT_RTL8821A:
|
||||
gl_bt_coexist.board_info.bt_chip_type = BTC_CHIP_RTL8821;
|
||||
break;
|
||||
case BT_RTL8723B:
|
||||
gl_bt_coexist.board_info.bt_chip_type = BTC_CHIP_RTL8723B;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void exhalbtc_set_ant_num(u8 type, u8 ant_num)
|
||||
{
|
||||
if (BT_COEX_ANT_TYPE_PG == type) {
|
||||
gl_bt_coexist.board_info.pg_ant_num = ant_num;
|
||||
gl_bt_coexist.board_info.btdm_ant_num = ant_num;
|
||||
} else if (BT_COEX_ANT_TYPE_ANTDIV == type) {
|
||||
gl_bt_coexist.board_info.btdm_ant_num = ant_num;
|
||||
}
|
||||
}
|
||||
|
||||
void exhalbtc_display_bt_coex_info(struct btc_coexist *btcoexist)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = btcoexist->adapter;
|
||||
struct rtl_hal *rtlhal = rtl_hal(rtlpriv);
|
||||
if (!halbtc_is_bt_coexist_available(btcoexist))
|
||||
return;
|
||||
|
||||
if (rtlhal->hw_type == HARDWARE_TYPE_RTL8723BE)
|
||||
ex_btc8723b2ant_display_coex_info(btcoexist);
|
||||
}
|
@@ -0,0 +1,545 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright(c) 2009-2012 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 __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_dbg_type[];
|
||||
|
||||
/* following is for BTC_MSG_INTERFACE */
|
||||
#define INTF_INIT BIT0
|
||||
#define INTF_NOTIFY BIT2
|
||||
|
||||
/* following is for BTC_ALGORITHM */
|
||||
#define ALGO_BT_RSSI_STATE BIT0
|
||||
#define ALGO_WIFI_RSSI_STATE BIT1
|
||||
#define ALGO_BT_MONITOR BIT2
|
||||
#define ALGO_TRACE BIT3
|
||||
#define ALGO_TRACE_FW BIT4
|
||||
#define ALGO_TRACE_FW_DETAIL BIT5
|
||||
#define ALGO_TRACE_FW_EXEC BIT6
|
||||
#define ALGO_TRACE_SW BIT7
|
||||
#define ALGO_TRACE_SW_DETAIL BIT8
|
||||
#define ALGO_TRACE_SW_EXEC BIT9
|
||||
|
||||
/* following is for wifi link status */
|
||||
#define WIFI_STA_CONNECTED BIT0
|
||||
#define WIFI_AP_CONNECTED BIT1
|
||||
#define WIFI_HS_CONNECTED BIT2
|
||||
#define WIFI_P2P_GO_CONNECTED BIT3
|
||||
#define WIFI_P2P_GC_CONNECTED BIT4
|
||||
|
||||
#define BTC_PRINT(dbgtype, dbgflag, printstr, ...) \
|
||||
do { \
|
||||
if (unlikely(btc_dbg_type[dbgtype] & dbgflag)) {\
|
||||
printk(printstr, ##__VA_ARGS__); \
|
||||
} \
|
||||
} 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_UI_SCAN_SIG_COMPENSATION,
|
||||
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
|
||||
};
|
||||
|
||||
typedef u8 (*bfp_btc_r1)(void *btc_context, u32 reg_addr);
|
||||
|
||||
typedef u16 (*bfp_btc_r2)(void *btc_context, u32 reg_addr);
|
||||
|
||||
typedef u32 (*bfp_btc_r4)(void *btc_context, u32 reg_addr);
|
||||
|
||||
typedef void (*bfp_btc_w1)(void *btc_context, u32 reg_addr, u32 data);
|
||||
|
||||
typedef void (*bfp_btc_w1_bit_mak)(void *btc_context, u32 reg_addr,
|
||||
u32 bit_mask, u8 data1b);
|
||||
|
||||
typedef void (*bfp_btc_w2)(void *btc_context, u32 reg_addr, u16 data);
|
||||
|
||||
typedef void (*bfp_btc_w4)(void *btc_context, u32 reg_addr, u32 data);
|
||||
|
||||
typedef void (*bfp_btc_wr_1byte_bit_mask)(void *btc_context, u32 reg_addr,
|
||||
u8 bit_mask, u8 data);
|
||||
|
||||
typedef void (*bfp_btc_set_bb_reg)(void *btc_context, u32 reg_addr,
|
||||
u32 bit_mask, u32 data);
|
||||
|
||||
typedef u32 (*bfp_btc_get_bb_reg)(void *btc_context, u32 reg_addr,
|
||||
u32 bit_mask);
|
||||
|
||||
typedef void (*bfp_btc_set_rf_reg)(void *btc_context, u8 rf_path, u32 reg_addr,
|
||||
u32 bit_mask, u32 data);
|
||||
|
||||
typedef u32 (*bfp_btc_get_rf_reg)(void *btc_context, u8 rf_path,
|
||||
u32 reg_addr, u32 bit_mask);
|
||||
|
||||
typedef void (*bfp_btc_fill_h2c)(void *btc_context, u8 element_id,
|
||||
u32 cmd_len, u8 *cmd_buffer);
|
||||
|
||||
typedef bool (*bfp_btc_get)(void *btcoexist, u8 get_type, void *out_buf);
|
||||
|
||||
typedef bool (*bfp_btc_set)(void *btcoexist, u8 set_type, void *in_buf);
|
||||
|
||||
typedef void (*bfp_btc_disp_dbg_msg)(void *btcoexist, u8 disp_type);
|
||||
|
||||
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 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;
|
||||
struct btc_statistics statistics;
|
||||
u8 pwr_mode_val[10];
|
||||
|
||||
/* function pointers - io related */
|
||||
bfp_btc_r1 btc_read_1byte;
|
||||
bfp_btc_w1 btc_write_1byte;
|
||||
bfp_btc_w1_bit_mak btc_write_1byte_bitmask;
|
||||
bfp_btc_r2 btc_read_2byte;
|
||||
bfp_btc_w2 btc_write_2byte;
|
||||
bfp_btc_r4 btc_read_4byte;
|
||||
bfp_btc_w4 btc_write_4byte;
|
||||
|
||||
bfp_btc_set_bb_reg btc_set_bb_reg;
|
||||
bfp_btc_get_bb_reg btc_get_bb_reg;
|
||||
|
||||
bfp_btc_set_rf_reg btc_set_rf_reg;
|
||||
bfp_btc_get_rf_reg btc_get_rf_reg;
|
||||
|
||||
bfp_btc_fill_h2c btc_fill_h2c;
|
||||
|
||||
bfp_btc_disp_dbg_msg btc_disp_dbg_msg;
|
||||
|
||||
bfp_btc_get btc_get;
|
||||
bfp_btc_set btc_set;
|
||||
};
|
||||
|
||||
bool halbtc_is_wifi_uplink(struct rtl_priv *adapter);
|
||||
|
||||
extern struct btc_coexist gl_bt_coexist;
|
||||
|
||||
bool exhalbtc_initlize_variables(struct rtl_priv *adapter);
|
||||
void exhalbtc_init_hw_config(struct btc_coexist *btcoexist);
|
||||
void exhalbtc_init_coex_dm(struct btc_coexist *btcoexist);
|
||||
void exhalbtc_ips_notify(struct btc_coexist *btcoexist, u8 type);
|
||||
void exhalbtc_lps_notify(struct btc_coexist *btcoexist, u8 type);
|
||||
void exhalbtc_scan_notify(struct btc_coexist *btcoexist, u8 type);
|
||||
void exhalbtc_connect_notify(struct btc_coexist *btcoexist, u8 action);
|
||||
void exhalbtc_mediastatus_notify(struct btc_coexist *btcoexist,
|
||||
enum rt_media_status media_status);
|
||||
void exhalbtc_special_packet_notify(struct btc_coexist *btcoexist, u8 pkt_type);
|
||||
void exhalbtc_bt_info_notify(struct btc_coexist *btcoexist, u8 *tmp_buf,
|
||||
u8 length);
|
||||
void exhalbtc_stack_operation_notify(struct btc_coexist *btcoexist, u8 type);
|
||||
void exhalbtc_halt_notify(struct btc_coexist *btcoexist);
|
||||
void exhalbtc_pnp_notify(struct btc_coexist *btcoexist, u8 pnp_state);
|
||||
void exhalbtc_coex_dm_switch(struct btc_coexist *btcoexist);
|
||||
void exhalbtc_periodical(struct btc_coexist *btcoexist);
|
||||
void exhalbtc_dbg_control(struct btc_coexist *btcoexist, u8 code, u8 len,
|
||||
u8 *data);
|
||||
void exhalbtc_stack_update_profile_info(void);
|
||||
void exhalbtc_set_hci_version(u16 hci_version);
|
||||
void exhalbtc_set_bt_patch_version(u16 bt_hci_version, u16 bt_patch_version);
|
||||
void exhalbtc_update_min_bt_rssi(char bt_rssi);
|
||||
void exhalbtc_set_bt_exist(bool bt_exist);
|
||||
void exhalbtc_set_chip_type(u8 chip_type);
|
||||
void exhalbtc_set_ant_num(u8 type, u8 ant_num);
|
||||
void exhalbtc_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,231 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright(c) 2009-2013 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 "../wifi.h"
|
||||
#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 = rtl_btc_init_variables,
|
||||
.btc_init_hal_vars = rtl_btc_init_hal_vars,
|
||||
.btc_init_hw_config = rtl_btc_init_hw_config,
|
||||
.btc_ips_notify = rtl_btc_ips_notify,
|
||||
.btc_lps_notify = rtl_btc_lps_notify,
|
||||
.btc_scan_notify = rtl_btc_scan_notify,
|
||||
.btc_connect_notify = rtl_btc_connect_notify,
|
||||
.btc_mediastatus_notify = rtl_btc_mediastatus_notify,
|
||||
.btc_periodical = rtl_btc_periodical,
|
||||
.btc_halt_notify = rtl_btc_halt_notify,
|
||||
.btc_btinfo_notify = rtl_btc_btinfo_notify,
|
||||
.btc_is_limited_dig = rtl_btc_is_limited_dig,
|
||||
.btc_is_disable_edca_turbo = rtl_btc_is_disable_edca_turbo,
|
||||
.btc_is_bt_disabled = rtl_btc_is_bt_disabled,
|
||||
.btc_special_packet_notify = rtl_btc_special_packet_notify,
|
||||
};
|
||||
|
||||
void rtl_btc_init_variables(struct rtl_priv *rtlpriv)
|
||||
{
|
||||
exhalbtc_initlize_variables(rtlpriv);
|
||||
}
|
||||
|
||||
void rtl_btc_init_hal_vars(struct rtl_priv *rtlpriv)
|
||||
{
|
||||
u8 ant_num;
|
||||
u8 bt_exist;
|
||||
u8 bt_type;
|
||||
|
||||
ant_num = rtl_get_hwpg_ant_num(rtlpriv);
|
||||
RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG,
|
||||
"%s, antNum is %d\n", __func__, ant_num);
|
||||
|
||||
bt_exist = rtl_get_hwpg_bt_exist(rtlpriv);
|
||||
RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG,
|
||||
"%s, bt_exist is %d\n", __func__, bt_exist);
|
||||
exhalbtc_set_bt_exist(bt_exist);
|
||||
|
||||
bt_type = rtl_get_hwpg_bt_type(rtlpriv);
|
||||
RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG, "%s, bt_type is %d\n",
|
||||
__func__, bt_type);
|
||||
exhalbtc_set_chip_type(bt_type);
|
||||
|
||||
exhalbtc_set_ant_num(BT_COEX_ANT_TYPE_PG, ant_num);
|
||||
}
|
||||
|
||||
void rtl_btc_init_hw_config(struct rtl_priv *rtlpriv)
|
||||
{
|
||||
exhalbtc_init_hw_config(&gl_bt_coexist);
|
||||
exhalbtc_init_coex_dm(&gl_bt_coexist);
|
||||
}
|
||||
|
||||
void rtl_btc_ips_notify(struct rtl_priv *rtlpriv, u8 type)
|
||||
{
|
||||
exhalbtc_ips_notify(&gl_bt_coexist, type);
|
||||
}
|
||||
|
||||
void rtl_btc_lps_notify(struct rtl_priv *rtlpriv, u8 type)
|
||||
{
|
||||
exhalbtc_lps_notify(&gl_bt_coexist, type);
|
||||
}
|
||||
|
||||
void rtl_btc_scan_notify(struct rtl_priv *rtlpriv, u8 scantype)
|
||||
{
|
||||
exhalbtc_scan_notify(&gl_bt_coexist, scantype);
|
||||
}
|
||||
|
||||
void rtl_btc_connect_notify(struct rtl_priv *rtlpriv, u8 action)
|
||||
{
|
||||
exhalbtc_connect_notify(&gl_bt_coexist, action);
|
||||
}
|
||||
|
||||
void rtl_btc_mediastatus_notify(struct rtl_priv *rtlpriv,
|
||||
enum rt_media_status mstatus)
|
||||
{
|
||||
exhalbtc_mediastatus_notify(&gl_bt_coexist, mstatus);
|
||||
}
|
||||
|
||||
void rtl_btc_periodical(struct rtl_priv *rtlpriv)
|
||||
{
|
||||
/*rtl_bt_dm_monitor();*/
|
||||
exhalbtc_periodical(&gl_bt_coexist);
|
||||
}
|
||||
|
||||
void rtl_btc_halt_notify(void)
|
||||
{
|
||||
exhalbtc_halt_notify(&gl_bt_coexist);
|
||||
}
|
||||
|
||||
void rtl_btc_btinfo_notify(struct rtl_priv *rtlpriv, u8 *tmp_buf, u8 length)
|
||||
{
|
||||
exhalbtc_bt_info_notify(&gl_bt_coexist, tmp_buf, length);
|
||||
}
|
||||
|
||||
bool rtl_btc_is_limited_dig(struct rtl_priv *rtlpriv)
|
||||
{
|
||||
return gl_bt_coexist.bt_info.limited_dig;
|
||||
}
|
||||
|
||||
bool rtl_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 (halbtc_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 rtl_btc_is_bt_disabled(struct rtl_priv *rtlpriv)
|
||||
{
|
||||
/* It seems 'bt_disabled' is never be initialized or set. */
|
||||
if (gl_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 exhalbtc_special_packet_notify(&gl_bt_coexist, pkt_type);
|
||||
}
|
||||
|
||||
struct rtl_btc_ops *rtl_btc_get_ops_pointer(void)
|
||||
{
|
||||
return &rtl_btc_operation;
|
||||
}
|
||||
EXPORT_SYMBOL(rtl_btc_get_ops_pointer);
|
||||
|
||||
u8 rtl_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;
|
||||
}
|
||||
|
||||
enum rt_media_status mgnt_link_status_query(struct ieee80211_hw *hw)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
|
||||
enum rt_media_status m_status = RT_MEDIA_DISCONNECT;
|
||||
|
||||
u8 bibss = (mac->opmode == NL80211_IFTYPE_ADHOC) ? 1 : 0;
|
||||
|
||||
if (bibss || rtlpriv->mac80211.link_state >= MAC80211_LINKED)
|
||||
m_status = RT_MEDIA_CONNECT;
|
||||
|
||||
return m_status;
|
||||
}
|
||||
|
||||
u8 rtl_get_hwpg_bt_exist(struct rtl_priv *rtlpriv)
|
||||
{
|
||||
return rtlpriv->btcoexist.btc_info.btcoexist;
|
||||
}
|
||||
|
||||
u8 rtl_get_hwpg_bt_type(struct rtl_priv *rtlpriv)
|
||||
{
|
||||
return rtlpriv->btcoexist.btc_info.bt_type;
|
||||
}
|
||||
|
||||
MODULE_AUTHOR("Page He <page_he@realsil.com.cn>");
|
||||
MODULE_AUTHOR("Realtek WlanFAE <wlanfae@realtek.com>");
|
||||
MODULE_AUTHOR("Larry Finger <Larry.FInger@lwfinger.net>");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DESCRIPTION("Realtek 802.11n PCI wireless core");
|
||||
|
||||
static int __init rtl_btcoexist_module_init(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void __exit rtl_btcoexist_module_exit(void)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
module_init(rtl_btcoexist_module_init);
|
||||
module_exit(rtl_btcoexist_module_exit);
|
@@ -0,0 +1,54 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* 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 rtl_btc_init_variables(struct rtl_priv *rtlpriv);
|
||||
void rtl_btc_init_hal_vars(struct rtl_priv *rtlpriv);
|
||||
void rtl_btc_init_hw_config(struct rtl_priv *rtlpriv);
|
||||
void rtl_btc_ips_notify(struct rtl_priv *rtlpriv, u8 type);
|
||||
void rtl_btc_lps_notify(struct rtl_priv *rtlpriv, u8 type);
|
||||
void rtl_btc_scan_notify(struct rtl_priv *rtlpriv, u8 scantype);
|
||||
void rtl_btc_connect_notify(struct rtl_priv *rtlpriv, u8 action);
|
||||
void rtl_btc_mediastatus_notify(struct rtl_priv *rtlpriv,
|
||||
enum rt_media_status mstatus);
|
||||
void rtl_btc_periodical(struct rtl_priv *rtlpriv);
|
||||
void rtl_btc_halt_notify(void);
|
||||
void rtl_btc_btinfo_notify(struct rtl_priv *rtlpriv, u8 *tmpbuf, u8 length);
|
||||
bool rtl_btc_is_limited_dig(struct rtl_priv *rtlpriv);
|
||||
bool rtl_btc_is_disable_edca_turbo(struct rtl_priv *rtlpriv);
|
||||
bool rtl_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 *rtl_btc_get_ops_pointer(void);
|
||||
|
||||
u8 rtl_get_hwpg_ant_num(struct rtl_priv *rtlpriv);
|
||||
u8 rtl_get_hwpg_bt_exist(struct rtl_priv *rtlpriv);
|
||||
u8 rtl_get_hwpg_bt_type(struct rtl_priv *rtlpriv);
|
||||
enum rt_media_status mgnt_link_status_query(struct ieee80211_hw *hw);
|
||||
|
||||
#endif
|
新しいイシューから参照
ユーザーをブロックする