1  /* SPDX-License-Identifier: GPL-2.0 */
2  /******************************************************************************
3   *
4   * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
5   *
6   ******************************************************************************/
7  #ifndef	__HALBTC_OUT_SRC_H__
8  #define __HALBTC_OUT_SRC_H__
9  
10  #define NORMAL_EXEC		false
11  #define FORCE_EXEC		true
12  
13  #define BTC_RF_OFF		0x0
14  #define BTC_RF_ON		0x1
15  
16  #define BTC_RF_A		0x0
17  #define BTC_RF_B		0x1
18  #define BTC_RF_C		0x2
19  #define BTC_RF_D		0x3
20  
21  #define BTC_SMSP		SINGLEMAC_SINGLEPHY
22  #define BTC_DMDP		DUALMAC_DUALPHY
23  #define BTC_DMSP		DUALMAC_SINGLEPHY
24  #define BTC_MP_UNKNOWN		0xff
25  
26  #define BT_COEX_ANT_TYPE_PG	0
27  #define BT_COEX_ANT_TYPE_ANTDIV		1
28  #define BT_COEX_ANT_TYPE_DETECTED	2
29  
30  #define BTC_MIMO_PS_STATIC	0	/*  1ss */
31  #define BTC_MIMO_PS_DYNAMIC	1	/*  2ss */
32  
33  #define BTC_RATE_DISABLE	0
34  #define BTC_RATE_ENABLE		1
35  
36  /*  single Antenna definition */
37  #define BTC_ANT_PATH_WIFI	0
38  #define BTC_ANT_PATH_BT		1
39  #define BTC_ANT_PATH_PTA	2
40  /*  dual Antenna definition */
41  #define BTC_ANT_WIFI_AT_MAIN	0
42  #define BTC_ANT_WIFI_AT_AUX	1
43  /*  coupler Antenna definition */
44  #define BTC_ANT_WIFI_AT_CPL_MAIN	0
45  #define BTC_ANT_WIFI_AT_CPL_AUX		1
46  
47  enum {
48  	BTC_PS_WIFI_NATIVE	= 0,	/*  wifi original power save behavior */
49  	BTC_PS_LPS_ON		= 1,
50  	BTC_PS_LPS_OFF		= 2,
51  	BTC_PS_MAX
52  };
53  
54  enum {
55  	BTC_BT_REG_RF		= 0,
56  	BTC_BT_REG_MODEM	= 1,
57  	BTC_BT_REG_BLUEWIZE	= 2,
58  	BTC_BT_REG_VENDOR	= 3,
59  	BTC_BT_REG_LE		= 4,
60  	BTC_BT_REG_MAX
61  };
62  
63  enum btc_chip_interface {
64  	BTC_INTF_UNKNOWN	= 0,
65  	BTC_INTF_PCI		= 1,
66  	BTC_INTF_USB		= 2,
67  	BTC_INTF_SDIO		= 3,
68  	BTC_INTF_MAX
69  };
70  
71  /*  following is for wifi link status */
72  #define WIFI_STA_CONNECTED				BIT0
73  #define WIFI_AP_CONNECTED				BIT1
74  #define WIFI_HS_CONNECTED				BIT2
75  #define WIFI_P2P_GO_CONNECTED			BIT3
76  #define WIFI_P2P_GC_CONNECTED			BIT4
77  
78  struct btc_board_info {
79  	/*  The following is some board information */
80  	u8 pgAntNum;	/*  pg ant number */
81  	u8 btdmAntNum;	/*  ant number for btdm */
82  	u8 btdmAntPos;		/* Bryant Add to indicate Antenna Position for (pgAntNum = 2) && (btdmAntNum = 1)  (DPDT+1Ant case) */
83  	u8 singleAntPath;	/*  current used for 8723b only, 1 =>s0,  0 =>s1 */
84  	/* bool				bBtExist; */
85  };
86  
87  enum {
88  	BTC_RSSI_STATE_HIGH			    = 0x0,
89  	BTC_RSSI_STATE_MEDIUM			= 0x1,
90  	BTC_RSSI_STATE_LOW			    = 0x2,
91  	BTC_RSSI_STATE_STAY_HIGH		= 0x3,
92  	BTC_RSSI_STATE_STAY_MEDIUM		= 0x4,
93  	BTC_RSSI_STATE_STAY_LOW			= 0x5,
94  	BTC_RSSI_MAX
95  };
96  #define BTC_RSSI_HIGH(_rssi_)	((_rssi_ == BTC_RSSI_STATE_HIGH || _rssi_ == BTC_RSSI_STATE_STAY_HIGH) ? true : false)
97  #define BTC_RSSI_MEDIUM(_rssi_)	((_rssi_ == BTC_RSSI_STATE_MEDIUM || _rssi_ == BTC_RSSI_STATE_STAY_MEDIUM) ? true : false)
98  #define BTC_RSSI_LOW(_rssi_)	((_rssi_ == BTC_RSSI_STATE_LOW || _rssi_ == BTC_RSSI_STATE_STAY_LOW) ? true : false)
99  
100  enum {
101  	BTC_WIFI_BW_LEGACY			= 0x0,
102  	BTC_WIFI_BW_HT20			= 0x1,
103  	BTC_WIFI_BW_HT40			= 0x2,
104  	BTC_WIFI_BW_MAX
105  };
106  
107  enum {
108  	BTC_WIFI_TRAFFIC_TX			= 0x0,
109  	BTC_WIFI_TRAFFIC_RX			= 0x1,
110  	BTC_WIFI_TRAFFIC_MAX
111  };
112  
113  enum {
114  	BTC_WIFI_PNP_WAKE_UP		= 0x0,
115  	BTC_WIFI_PNP_SLEEP			= 0x1,
116  	BTC_WIFI_PNP_MAX
117  };
118  
119  /*  defined for BFP_BTC_GET */
120  enum {
121  	/*  type bool */
122  	BTC_GET_BL_HS_OPERATION,
123  	BTC_GET_BL_HS_CONNECTING,
124  	BTC_GET_BL_WIFI_CONNECTED,
125  	BTC_GET_BL_WIFI_BUSY,
126  	BTC_GET_BL_WIFI_SCAN,
127  	BTC_GET_BL_WIFI_LINK,
128  	BTC_GET_BL_WIFI_ROAM,
129  	BTC_GET_BL_WIFI_4_WAY_PROGRESS,
130  	BTC_GET_BL_WIFI_AP_MODE_ENABLE,
131  	BTC_GET_BL_WIFI_ENABLE_ENCRYPTION,
132  	BTC_GET_BL_WIFI_UNDER_B_MODE,
133  	BTC_GET_BL_EXT_SWITCH,
134  	BTC_GET_BL_WIFI_IS_IN_MP_MODE,
135  
136  	/*  type s32 */
137  	BTC_GET_S4_WIFI_RSSI,
138  	BTC_GET_S4_HS_RSSI,
139  
140  	/*  type u32 */
141  	BTC_GET_U4_WIFI_BW,
142  	BTC_GET_U4_WIFI_TRAFFIC_DIRECTION,
143  	BTC_GET_U4_WIFI_FW_VER,
144  	BTC_GET_U4_WIFI_LINK_STATUS,
145  	BTC_GET_U4_BT_PATCH_VER,
146  
147  	/*  type u8 */
148  	BTC_GET_U1_WIFI_DOT11_CHNL,
149  	BTC_GET_U1_WIFI_CENTRAL_CHNL,
150  	BTC_GET_U1_WIFI_HS_CHNL,
151  	BTC_GET_U1_MAC_PHY_MODE,
152  	BTC_GET_U1_AP_NUM,
153  
154  	/*  for 1Ant ====== */
155  	BTC_GET_U1_LPS_MODE,
156  
157  	BTC_GET_MAX
158  };
159  
160  /*  defined for BFP_BTC_SET */
161  enum {
162  	/*  type bool */
163  	BTC_SET_BL_BT_DISABLE,
164  	BTC_SET_BL_BT_TRAFFIC_BUSY,
165  	BTC_SET_BL_BT_LIMITED_DIG,
166  	BTC_SET_BL_FORCE_TO_ROAM,
167  	BTC_SET_BL_TO_REJ_AP_AGG_PKT,
168  	BTC_SET_BL_BT_CTRL_AGG_SIZE,
169  	BTC_SET_BL_INC_SCAN_DEV_NUM,
170  	BTC_SET_BL_BT_TX_RX_MASK,
171  
172  	/*  type u8 */
173  	BTC_SET_U1_RSSI_ADJ_VAL_FOR_AGC_TABLE_ON,
174  	BTC_SET_U1_AGG_BUF_SIZE,
175  
176  	/*  type trigger some action */
177  	BTC_SET_ACT_GET_BT_RSSI,
178  	BTC_SET_ACT_AGGREGATE_CTRL,
179  	/*  for 1Ant ====== */
180  	/*  type bool */
181  
182  	/*  type u8 */
183  	BTC_SET_U1_RSSI_ADJ_VAL_FOR_1ANT_COEX_TYPE,
184  	BTC_SET_U1_LPS_VAL,
185  	BTC_SET_U1_RPWM_VAL,
186  	/*  type trigger some action */
187  	BTC_SET_ACT_LEAVE_LPS,
188  	BTC_SET_ACT_ENTER_LPS,
189  	BTC_SET_ACT_NORMAL_LPS,
190  	BTC_SET_ACT_DISABLE_LOW_POWER,
191  	BTC_SET_ACT_UPDATE_RAMASK,
192  	BTC_SET_ACT_SEND_MIMO_PS,
193  	/*  BT Coex related */
194  	BTC_SET_ACT_CTRL_BT_INFO,
195  	BTC_SET_ACT_CTRL_BT_COEX,
196  	BTC_SET_ACT_CTRL_8723B_ANT,
197  	/*  */
198  	BTC_SET_MAX
199  };
200  
201  enum {
202  	BTC_DBG_DISP_COEX_STATISTICS		= 0x0,
203  	BTC_DBG_DISP_BT_LINK_INFO			= 0x1,
204  	BTC_DBG_DISP_FW_PWR_MODE_CMD		= 0x2,
205  	BTC_DBG_DISP_MAX
206  };
207  
208  enum {
209  	BTC_IPS_LEAVE						= 0x0,
210  	BTC_IPS_ENTER						= 0x1,
211  	BTC_IPS_MAX
212  };
213  
214  enum {
215  	BTC_LPS_DISABLE						= 0x0,
216  	BTC_LPS_ENABLE						= 0x1,
217  	BTC_LPS_MAX
218  };
219  
220  enum {
221  	BTC_SCAN_FINISH						= 0x0,
222  	BTC_SCAN_START						= 0x1,
223  	BTC_SCAN_MAX
224  };
225  
226  enum {
227  	BTC_ASSOCIATE_FINISH				= 0x0,
228  	BTC_ASSOCIATE_START					= 0x1,
229  	BTC_ASSOCIATE_MAX
230  };
231  
232  enum {
233  	BTC_MEDIA_DISCONNECT				= 0x0,
234  	BTC_MEDIA_CONNECT					= 0x1,
235  	BTC_MEDIA_MAX
236  };
237  
238  enum {
239  	BTC_PACKET_UNKNOWN					= 0x0,
240  	BTC_PACKET_DHCP						= 0x1,
241  	BTC_PACKET_ARP						= 0x2,
242  	BTC_PACKET_EAPOL					= 0x3,
243  	BTC_PACKET_MAX
244  };
245  
246  /* Bryant Add */
247  enum {
248  	BTC_ANTENNA_AT_MAIN_PORT = 0x1,
249  	BTC_ANTENNA_AT_AUX_PORT  = 0x2,
250  };
251  
252  typedef u8 (*BFP_BTC_R1)(void *pBtcContext, u32 RegAddr);
253  typedef u16(*BFP_BTC_R2)(void *pBtcContext, u32 RegAddr);
254  typedef u32 (*BFP_BTC_R4)(void *pBtcContext, u32 RegAddr);
255  typedef void (*BFP_BTC_W1)(void *pBtcContext, u32 RegAddr, u8 Data);
256  typedef void(*BFP_BTC_W1_BIT_MASK)(
257  	void *pBtcContext, u32 regAddr, u8 bitMask, u8 data1b
258  );
259  typedef void (*BFP_BTC_W2)(void *pBtcContext, u32 RegAddr, u16 Data);
260  typedef void (*BFP_BTC_W4)(void *pBtcContext, u32 RegAddr, u32 Data);
261  typedef void (*BFP_BTC_LOCAL_REG_W1)(void *pBtcContext, u32 RegAddr, u8 Data);
262  typedef void (*BFP_BTC_SET_BB_REG)(
263  	void *pBtcContext, u32 RegAddr, u32 BitMask, u32 Data
264  );
265  typedef u32 (*BFP_BTC_GET_BB_REG)(void *pBtcContext, u32 RegAddr, u32 BitMask);
266  typedef void (*BFP_BTC_SET_RF_REG)(
267  	void *pBtcContext, u8 eRFPath, u32 RegAddr, u32 BitMask, u32 Data
268  );
269  typedef u32 (*BFP_BTC_GET_RF_REG)(
270  	void *pBtcContext, u8 eRFPath, u32 RegAddr, u32 BitMask
271  );
272  typedef void (*BFP_BTC_FILL_H2C)(
273  	void *pBtcContext, u8 elementId, u32 cmdLen, u8 *pCmdBuffer
274  );
275  
276  typedef	u8 (*BFP_BTC_GET)(void *pBtCoexist, u8 getType, void *pOutBuf);
277  
278  typedef	u8 (*BFP_BTC_SET)(void *pBtCoexist, u8 setType, void *pInBuf);
279  typedef void (*BFP_BTC_SET_BT_REG)(
280  	void *pBtcContext, u8 regType, u32 offset, u32 value
281  );
282  typedef u32 (*BFP_BTC_GET_BT_REG)(void *pBtcContext, u8 regType, u32 offset);
283  typedef void (*BFP_BTC_DISP_DBG_MSG)(void *pBtCoexist, u8 dispType);
284  
285  struct btc_bt_info {
286  	bool bBtDisabled;
287  	u8 rssiAdjustForAgcTableOn;
288  	u8 rssiAdjustFor1AntCoexType;
289  	bool bPreBtCtrlAggBufSize;
290  	bool bBtCtrlAggBufSize;
291  	bool bRejectAggPkt;
292  	bool bIncreaseScanDevNum;
293  	bool bBtTxRxMask;
294  	u8 preAggBufSize;
295  	u8 aggBufSize;
296  	bool bBtBusy;
297  	bool bLimitedDig;
298  	u16 btHciVer;
299  	u16 btRealFwVer;
300  	u8 btFwVer;
301  	u32 getBtFwVerCnt;
302  
303  	bool bBtDisableLowPwr;
304  
305  	bool bBtCtrlLps;
306  	bool bBtLpsOn;
307  	bool bForceToRoam;	/*  for 1Ant solution */
308  	u8 lpsVal;
309  	u8 rpwmVal;
310  	u32 raMask;
311  };
312  
313  struct btc_stack_info {
314  	bool bProfileNotified;
315  	u16 hciVersion;	/*  stack hci version */
316  	u8 numOfLink;
317  	bool bBtLinkExist;
318  	bool bScoExist;
319  	bool bAclExist;
320  	bool bA2dpExist;
321  	bool bHidExist;
322  	u8 numOfHid;
323  	bool bPanExist;
324  	bool bUnknownAclExist;
325  	s8 minBtRssi;
326  };
327  
328  struct btc_bt_link_info {
329  	bool bBtLinkExist;
330  	bool bScoExist;
331  	bool bScoOnly;
332  	bool bA2dpExist;
333  	bool bA2dpOnly;
334  	bool bHidExist;
335  	bool bHidOnly;
336  	bool bPanExist;
337  	bool bPanOnly;
338  	bool bSlaveRole;
339  };
340  
341  struct btc_statistics {
342  	u32 cntBind;
343  	u32 cntPowerOn;
344  	u32 cntInitHwConfig;
345  	u32 cntInitCoexDm;
346  	u32 cntIpsNotify;
347  	u32 cntLpsNotify;
348  	u32 cntScanNotify;
349  	u32 cntConnectNotify;
350  	u32 cntMediaStatusNotify;
351  	u32 cntSpecialPacketNotify;
352  	u32 cntBtInfoNotify;
353  	u32 cntRfStatusNotify;
354  	u32 cntPeriodical;
355  	u32 cntCoexDmSwitch;
356  	u32 cntStackOperationNotify;
357  	u32 cntDbgCtrl;
358  };
359  
360  struct btc_coexist {
361  	bool bBinded;		/*  make sure only one adapter can bind the data context */
362  	void *Adapter;		/*  default adapter */
363  	struct btc_board_info boardInfo;
364  	struct btc_bt_info btInfo;		/*  some bt info referenced by non-bt module */
365  	struct btc_stack_info stackInfo;
366  	struct btc_bt_link_info btLinkInfo;
367  	enum btc_chip_interface chipInterface;
368  
369  	bool bInitilized;
370  	bool bStopCoexDm;
371  	bool bManualControl;
372  	struct btc_statistics statistics;
373  	u8 pwrModeVal[10];
374  
375  	/*  function pointers */
376  	/*  io related */
377  	BFP_BTC_R1 fBtcRead1Byte;
378  	BFP_BTC_W1 fBtcWrite1Byte;
379  	BFP_BTC_W1_BIT_MASK fBtcWrite1ByteBitMask;
380  	BFP_BTC_R2 fBtcRead2Byte;
381  	BFP_BTC_W2 fBtcWrite2Byte;
382  	BFP_BTC_R4 fBtcRead4Byte;
383  	BFP_BTC_W4 fBtcWrite4Byte;
384  	BFP_BTC_LOCAL_REG_W1 fBtcWriteLocalReg1Byte;
385  	/*  read/write bb related */
386  	BFP_BTC_SET_BB_REG fBtcSetBbReg;
387  	BFP_BTC_GET_BB_REG fBtcGetBbReg;
388  
389  	/*  read/write rf related */
390  	BFP_BTC_SET_RF_REG fBtcSetRfReg;
391  	BFP_BTC_GET_RF_REG fBtcGetRfReg;
392  
393  	/*  fill h2c related */
394  	BFP_BTC_FILL_H2C fBtcFillH2c;
395  	/*  normal get/set related */
396  	BFP_BTC_GET fBtcGet;
397  	BFP_BTC_SET fBtcSet;
398  
399  	BFP_BTC_GET_BT_REG fBtcGetBtReg;
400  	BFP_BTC_SET_BT_REG fBtcSetBtReg;
401  };
402  
403  extern struct btc_coexist GLBtCoexist;
404  
405  void EXhalbtcoutsrc_PowerOnSetting(struct btc_coexist *pBtCoexist);
406  void EXhalbtcoutsrc_InitHwConfig(struct btc_coexist *pBtCoexist, u8 bWifiOnly);
407  void EXhalbtcoutsrc_InitCoexDm(struct btc_coexist *pBtCoexist);
408  void EXhalbtcoutsrc_IpsNotify(struct btc_coexist *pBtCoexist, u8 type);
409  void EXhalbtcoutsrc_LpsNotify(struct btc_coexist *pBtCoexist, u8 type);
410  void EXhalbtcoutsrc_ScanNotify(struct btc_coexist *pBtCoexist, u8 type);
411  void EXhalbtcoutsrc_ConnectNotify(struct btc_coexist *pBtCoexist, u8 action);
412  void EXhalbtcoutsrc_MediaStatusNotify(
413  	struct btc_coexist *pBtCoexist, enum rt_media_status mediaStatus
414  );
415  void EXhalbtcoutsrc_SpecialPacketNotify(struct btc_coexist *pBtCoexist, u8 pktType);
416  void EXhalbtcoutsrc_BtInfoNotify(
417  	struct btc_coexist *pBtCoexist, u8 *tmpBuf, u8 length
418  );
419  void EXhalbtcoutsrc_HaltNotify(struct btc_coexist *pBtCoexist);
420  void EXhalbtcoutsrc_PnpNotify(struct btc_coexist *pBtCoexist, u8 pnpState);
421  void EXhalbtcoutsrc_Periodical(struct btc_coexist *pBtCoexist);
422  void EXhalbtcoutsrc_SetChipType(u8 chipType);
423  void EXhalbtcoutsrc_SetAntNum(u8 type, u8 antNum);
424  void EXhalbtcoutsrc_SetSingleAntPath(u8 singleAntPath);
425  
426  #endif
427