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 2 |
21 | |
22 | #define BT_8723B_1ANT_WIFI_NOISY_THRESH 30 /* max: 255 */ |
23 | |
24 | enum { |
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 | |
31 | enum { |
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 | |
41 | enum { |
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 | |
51 | enum { |
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 | |
66 | struct 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 | |
121 | struct 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 ; |
136 | bool bBtTxRxMask; |
137 | u8 ; |
138 | u8 [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 | /* */ |
170 | void EXhalbtc8723b1ant_PowerOnSetting(struct btc_coexist *pBtCoexist); |
171 | void EXhalbtc8723b1ant_InitHwConfig(struct btc_coexist *pBtCoexist, bool bWifiOnly); |
172 | void EXhalbtc8723b1ant_InitCoexDm(struct btc_coexist *pBtCoexist); |
173 | void EXhalbtc8723b1ant_IpsNotify(struct btc_coexist *pBtCoexist, u8 type); |
174 | void EXhalbtc8723b1ant_LpsNotify(struct btc_coexist *pBtCoexist, u8 type); |
175 | void EXhalbtc8723b1ant_ScanNotify(struct btc_coexist *pBtCoexist, u8 type); |
176 | void EXhalbtc8723b1ant_ConnectNotify(struct btc_coexist *pBtCoexist, u8 type); |
177 | void EXhalbtc8723b1ant_MediaStatusNotify(struct btc_coexist *pBtCoexist, u8 type); |
178 | void EXhalbtc8723b1ant_SpecialPacketNotify(struct btc_coexist *pBtCoexist, u8 type); |
179 | void EXhalbtc8723b1ant_BtInfoNotify( |
180 | struct btc_coexist *pBtCoexist, u8 *tmpBuf, u8 length |
181 | ); |
182 | void EXhalbtc8723b1ant_HaltNotify(struct btc_coexist *pBtCoexist); |
183 | void EXhalbtc8723b1ant_PnpNotify(struct btc_coexist *pBtCoexist, u8 pnpState); |
184 | void EXhalbtc8723b1ant_Periodical(struct btc_coexist *pBtCoexist); |
185 | |