1/* SPDX-License-Identifier: GPL-2.0 */
2/******************************************************************************
3 *
4 * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
5 *
6 ******************************************************************************/
7/* The following is for 8723B 1ANT BT Co-exist definition */
8#define BT_INFO_8723B_1ANT_B_FTP BIT7
9#define BT_INFO_8723B_1ANT_B_A2DP BIT6
10#define BT_INFO_8723B_1ANT_B_HID BIT5
11#define BT_INFO_8723B_1ANT_B_SCO_BUSY BIT4
12#define BT_INFO_8723B_1ANT_B_ACL_BUSY BIT3
13#define BT_INFO_8723B_1ANT_B_INQ_PAGE BIT2
14#define BT_INFO_8723B_1ANT_B_SCO_ESCO BIT1
15#define BT_INFO_8723B_1ANT_B_CONNECTION BIT0
16
17#define BT_INFO_8723B_1ANT_A2DP_BASIC_RATE(_BT_INFO_EXT_) \
18 (((_BT_INFO_EXT_ & BIT0)) ? true : false)
19
20#define BTC_RSSI_COEX_THRESH_TOL_8723B_1ANT 2
21
22#define BT_8723B_1ANT_WIFI_NOISY_THRESH 30 /* max: 255 */
23
24enum {
25 BT_INFO_SRC_8723B_1ANT_WIFI_FW = 0x0,
26 BT_INFO_SRC_8723B_1ANT_BT_RSP = 0x1,
27 BT_INFO_SRC_8723B_1ANT_BT_ACTIVE_SEND = 0x2,
28 BT_INFO_SRC_8723B_1ANT_MAX
29};
30
31enum {
32 BT_8723B_1ANT_BT_STATUS_NON_CONNECTED_IDLE = 0x0,
33 BT_8723B_1ANT_BT_STATUS_CONNECTED_IDLE = 0x1,
34 BT_8723B_1ANT_BT_STATUS_INQ_PAGE = 0x2,
35 BT_8723B_1ANT_BT_STATUS_ACL_BUSY = 0x3,
36 BT_8723B_1ANT_BT_STATUS_SCO_BUSY = 0x4,
37 BT_8723B_1ANT_BT_STATUS_ACL_SCO_BUSY = 0x5,
38 BT_8723B_1ANT_BT_STATUS_MAX
39};
40
41enum {
42 BT_8723B_1ANT_WIFI_STATUS_NON_CONNECTED_IDLE = 0x0,
43 BT_8723B_1ANT_WIFI_STATUS_NON_CONNECTED_ASSO_AUTH_SCAN = 0x1,
44 BT_8723B_1ANT_WIFI_STATUS_CONNECTED_SCAN = 0x2,
45 BT_8723B_1ANT_WIFI_STATUS_CONNECTED_SPECIAL_PKT = 0x3,
46 BT_8723B_1ANT_WIFI_STATUS_CONNECTED_IDLE = 0x4,
47 BT_8723B_1ANT_WIFI_STATUS_CONNECTED_BUSY = 0x5,
48 BT_8723B_1ANT_WIFI_STATUS_MAX
49};
50
51enum {
52 BT_8723B_1ANT_COEX_ALGO_UNDEFINED = 0x0,
53 BT_8723B_1ANT_COEX_ALGO_SCO = 0x1,
54 BT_8723B_1ANT_COEX_ALGO_HID = 0x2,
55 BT_8723B_1ANT_COEX_ALGO_A2DP = 0x3,
56 BT_8723B_1ANT_COEX_ALGO_A2DP_PANHS = 0x4,
57 BT_8723B_1ANT_COEX_ALGO_PANEDR = 0x5,
58 BT_8723B_1ANT_COEX_ALGO_PANHS = 0x6,
59 BT_8723B_1ANT_COEX_ALGO_PANEDR_A2DP = 0x7,
60 BT_8723B_1ANT_COEX_ALGO_PANEDR_HID = 0x8,
61 BT_8723B_1ANT_COEX_ALGO_HID_A2DP_PANEDR = 0x9,
62 BT_8723B_1ANT_COEX_ALGO_HID_A2DP = 0xa,
63 BT_8723B_1ANT_COEX_ALGO_MAX = 0xb,
64};
65
66struct coex_dm_8723b_1ant {
67 /* fw mechanism */
68 bool bCurIgnoreWlanAct;
69 bool bPreIgnoreWlanAct;
70 u8 prePsTdma;
71 u8 curPsTdma;
72 u8 psTdmaPara[5];
73 u8 psTdmaDuAdjType;
74 bool bAutoTdmaAdjust;
75 bool bPrePsTdmaOn;
76 bool bCurPsTdmaOn;
77 bool bPreBtAutoReport;
78 bool bCurBtAutoReport;
79 u8 preLps;
80 u8 curLps;
81 u8 preRpwm;
82 u8 curRpwm;
83
84 /* sw mechanism */
85 bool bPreLowPenaltyRa;
86 bool bCurLowPenaltyRa;
87 u32 preVal0x6c0;
88 u32 curVal0x6c0;
89 u32 preVal0x6c4;
90 u32 curVal0x6c4;
91 u32 preVal0x6c8;
92 u32 curVal0x6c8;
93 u8 preVal0x6cc;
94 u8 curVal0x6cc;
95 bool bLimitedDig;
96
97 u32 backupArfrCnt1; /* Auto Rate Fallback Retry cnt */
98 u32 backupArfrCnt2; /* Auto Rate Fallback Retry cnt */
99 u16 backupRetryLimit;
100 u8 backupAmpduMaxTime;
101
102 /* algorithm related */
103 u8 preAlgorithm;
104 u8 curAlgorithm;
105 u8 btStatus;
106 u8 wifiChnlInfo[3];
107
108 u32 preRaMask;
109 u32 curRaMask;
110 u8 preArfrType;
111 u8 curArfrType;
112 u8 preRetryLimitType;
113 u8 curRetryLimitType;
114 u8 preAmpduTimeType;
115 u8 curAmpduTimeType;
116 u32 nArpCnt;
117
118 u8 errorCondition;
119};
120
121struct coex_sta_8723b_1ant {
122 bool bBtLinkExist;
123 bool bScoExist;
124 bool bA2dpExist;
125 bool bHidExist;
126 bool bPanExist;
127
128 bool bUnderLps;
129 bool bUnderIps;
130 u32 specialPktPeriodCnt;
131 u32 highPriorityTx;
132 u32 highPriorityRx;
133 u32 lowPriorityTx;
134 u32 lowPriorityRx;
135 s8 btRssi;
136 bool bBtTxRxMask;
137 u8 preBtRssiState;
138 u8 preWifiRssiState[4];
139 bool bC2hBtInfoReqSent;
140 u8 btInfoC2h[BT_INFO_SRC_8723B_1ANT_MAX][10];
141 u32 btInfoC2hCnt[BT_INFO_SRC_8723B_1ANT_MAX];
142 bool bC2hBtInquiryPage;
143 bool bC2hBtPage; /* Add for win8.1 page out issue */
144 bool bWiFiIsHighPriTask; /* Add for win8.1 page out issue */
145 u8 btRetryCnt;
146 u8 btInfoExt;
147 u32 popEventCnt;
148 u8 nScanAPNum;
149
150 u32 nCRCOK_CCK;
151 u32 nCRCOK_11g;
152 u32 nCRCOK_11n;
153 u32 nCRCOK_11nAgg;
154
155 u32 nCRCErr_CCK;
156 u32 nCRCErr_11g;
157 u32 nCRCErr_11n;
158 u32 nCRCErr_11nAgg;
159
160 bool bCCKLock;
161 bool bPreCCKLock;
162 u8 nCoexTableType;
163
164 bool bForceLpsOn;
165};
166
167/* */
168/* The following is interface which will notify coex module. */
169/* */
170void EXhalbtc8723b1ant_PowerOnSetting(struct btc_coexist *pBtCoexist);
171void EXhalbtc8723b1ant_InitHwConfig(struct btc_coexist *pBtCoexist, bool bWifiOnly);
172void EXhalbtc8723b1ant_InitCoexDm(struct btc_coexist *pBtCoexist);
173void EXhalbtc8723b1ant_IpsNotify(struct btc_coexist *pBtCoexist, u8 type);
174void EXhalbtc8723b1ant_LpsNotify(struct btc_coexist *pBtCoexist, u8 type);
175void EXhalbtc8723b1ant_ScanNotify(struct btc_coexist *pBtCoexist, u8 type);
176void EXhalbtc8723b1ant_ConnectNotify(struct btc_coexist *pBtCoexist, u8 type);
177void EXhalbtc8723b1ant_MediaStatusNotify(struct btc_coexist *pBtCoexist, u8 type);
178void EXhalbtc8723b1ant_SpecialPacketNotify(struct btc_coexist *pBtCoexist, u8 type);
179void EXhalbtc8723b1ant_BtInfoNotify(
180 struct btc_coexist *pBtCoexist, u8 *tmpBuf, u8 length
181);
182void EXhalbtc8723b1ant_HaltNotify(struct btc_coexist *pBtCoexist);
183void EXhalbtc8723b1ant_PnpNotify(struct btc_coexist *pBtCoexist, u8 pnpState);
184void EXhalbtc8723b1ant_Periodical(struct btc_coexist *pBtCoexist);
185

source code of linux/drivers/staging/rtl8723bs/hal/HalBtc8723b1Ant.h