1  /* SPDX-License-Identifier: GPL-2.0 */
2  /******************************************************************************
3   *
4   * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
5   *
6   ******************************************************************************/
7  #ifndef _RTW_MP_H_
8  #define _RTW_MP_H_
9  
10  #define MAX_MP_XMITBUF_SZ	2048
11  
12  struct mp_xmit_frame {
13  	struct list_head	list;
14  
15  	struct pkt_attrib attrib;
16  
17  	struct sk_buff *pkt;
18  
19  	int frame_tag;
20  
21  	struct adapter *padapter;
22  
23  	uint mem[(MAX_MP_XMITBUF_SZ >> 2)];
24  };
25  
26  struct mp_wiparam {
27  	u32 bcompleted;
28  	u32 act_type;
29  	u32 io_offset;
30  	u32 io_value;
31  };
32  
33  struct mp_tx {
34  	u8 stop;
35  	u32 count, sended;
36  	u8 payload;
37  	struct pkt_attrib attrib;
38  	/* struct tx_desc desc; */
39  	/* u8 resvdtx[7]; */
40  	u8 desc[TXDESC_SIZE];
41  	u8 *pallocated_buf;
42  	u8 *buf;
43  	u32 buf_size, write_size;
44  	void *PktTxThread;
45  };
46  
47  #define MP_MAX_LINES		1000
48  #define MP_MAX_LINES_BYTES	256
49  
50  typedef void (*MPT_WORK_ITEM_HANDLER)(void *Adapter);
51  struct mpt_context {
52  	/*  Indicate if we have started Mass Production Test. */
53  	bool			bMassProdTest;
54  
55  	/*  Indicate if the driver is unloading or unloaded. */
56  	bool			bMptDrvUnload;
57  
58  	struct timer_list			MPh2c_timeout_timer;
59  /*  Event used to sync H2c for BT control */
60  
61  	bool		MptH2cRspEvent;
62  	bool		MptBtC2hEvent;
63  	bool		bMPh2c_timeout;
64  
65  	/* 8190 PCI does not support NDIS_WORK_ITEM. */
66  	/*  Work Item for Mass Production Test. */
67  	/* NDIS_WORK_ITEM	MptWorkItem; */
68  /* 	RT_WORK_ITEM		MptWorkItem; */
69  	/*  Event used to sync the case unloading driver and MptWorkItem is still in progress. */
70  /* 	NDIS_EVENT		MptWorkItemEvent; */
71  	/*  To protect the following variables. */
72  /* 	NDIS_SPIN_LOCK		MptWorkItemSpinLock; */
73  	/*  Indicate a MptWorkItem is scheduled and not yet finished. */
74  	bool			bMptWorkItemInProgress;
75  	/*  An instance which implements function and context of MptWorkItem. */
76  	MPT_WORK_ITEM_HANDLER	CurrMptAct;
77  
78  	/*  1 =Start, 0 =Stop from UI. */
79  	u32 		MptTestStart;
80  	/*  _TEST_MODE, defined in MPT_Req2.h */
81  	u32 		MptTestItem;
82  	/*  Variable needed in each implementation of CurrMptAct. */
83  	u32 		MptActType;	/*  Type of action performed in CurrMptAct. */
84  	/*  The Offset of IO operation is depend of MptActType. */
85  	u32 		MptIoOffset;
86  	/*  The Value of IO operation is depend of MptActType. */
87  	u32 		MptIoValue;
88  	/*  The RfPath of IO operation is depend of MptActType. */
89  	u32 		MptRfPath;
90  
91  	enum wireless_mode		MptWirelessModeToSw;	/*  Wireless mode to switch. */
92  	u8 	MptChannelToSw;		/*  Channel to switch. */
93  	u8 	MptInitGainToSet;	/*  Initial gain to set. */
94  	u32 		MptBandWidth;		/*  bandwidth to switch. */
95  	u32 		MptRateIndex;		/*  rate index. */
96  	/*  Register value kept for Single Carrier Tx test. */
97  	u8 	btMpCckTxPower;
98  	/*  Register value kept for Single Carrier Tx test. */
99  	u8 	btMpOfdmTxPower;
100  	/*  For MP Tx Power index */
101  	u8 	TxPwrLevel[2];	/*  rf-A, rf-B */
102  	u32 		RegTxPwrLimit;
103  	/*  Content of RCR Register for Mass Production Test. */
104  	u32 		MptRCR;
105  	/*  true if we only receive packets with specific pattern. */
106  	bool			bMptFilterPattern;
107  	/*  Rx OK count, statistics used in Mass Production Test. */
108  	u32 		MptRxOkCnt;
109  	/*  Rx CRC32 error count, statistics used in Mass Production Test. */
110  	u32 		MptRxCrcErrCnt;
111  
112  	bool			bCckContTx;	/*  true if we are in CCK Continuous Tx test. */
113  	bool			bOfdmContTx;	/*  true if we are in OFDM Continuous Tx test. */
114  	bool			bStartContTx;	/*  true if we have start Continuous Tx test. */
115  	/*  true if we are in Single Carrier Tx test. */
116  	bool			bSingleCarrier;
117  	/*  true if we are in Carrier Suppression Tx Test. */
118  	bool			bCarrierSuppression;
119  	/* true if we are in Single Tone Tx test. */
120  	bool			bSingleTone;
121  
122  	/*  ACK counter asked by K.Y.. */
123  	bool			bMptEnableAckCounter;
124  	u32 		MptAckCounter;
125  
126  	/*  SD3 Willis For 8192S to save 1T/2T RF table for ACUT	Only fro ACUT delete later ~~~! */
127  	/* s8		BufOfLines[2][MAX_LINES_HWCONFIG_TXT][MAX_BYTES_LINE_HWCONFIG_TXT]; */
128  	/* s8			BufOfLines[2][MP_MAX_LINES][MP_MAX_LINES_BYTES]; */
129  	/* s32			RfReadLine[2]; */
130  
131  	u8 APK_bound[2];	/* for APK	path A/path B */
132  	bool		bMptIndexEven;
133  
134  	u8 backup0xc50;
135  	u8 backup0xc58;
136  	u8 backup0xc30;
137  	u8 backup0x52_RF_A;
138  	u8 backup0x52_RF_B;
139  
140  	u32 		backup0x58_RF_A;
141  	u32 		backup0x58_RF_B;
142  
143  	u8 	h2cReqNum;
144  	u8 	c2hBuf[32];
145  
146      u8          btInBuf[100];
147  	u32 		mptOutLen;
148      u8          mptOutBuf[100];
149  
150  };
151  /* endif */
152  
153  /* define RTPRIV_IOCTL_MP					(SIOCIWFIRSTPRIV + 0x17) */
154  enum {
155  	WRITE_REG = 1,
156  	READ_REG,
157  	WRITE_RF,
158  	READ_RF,
159  	MP_START,
160  	MP_STOP,
161  	MP_RATE,
162  	MP_CHANNEL,
163  	MP_BANDWIDTH,
164  	MP_TXPOWER,
165  	MP_ANT_TX,
166  	MP_ANT_RX,
167  	MP_CTX,
168  	MP_QUERY,
169  	MP_ARX,
170  	MP_PSD,
171  	MP_PWRTRK,
172  	MP_THER,
173  	MP_IOCTL,
174  	EFUSE_GET,
175  	EFUSE_SET,
176  	MP_RESET_STATS,
177  	MP_DUMP,
178  	MP_PHYPARA,
179  	MP_SetRFPathSwh,
180  	MP_QueryDrvStats,
181  	MP_SetBT,
182  	CTA_TEST,
183  	MP_DISABLE_BT_COEXIST,
184  	MP_PwrCtlDM,
185  	MP_NULL,
186  	MP_GET_TXPOWER_INX,
187  };
188  
189  struct mp_priv {
190  	struct adapter *papdater;
191  
192  	/* Testing Flag */
193  	u32 mode;/* 0 for normal type packet, 1 for loopback packet (16bytes TXCMD) */
194  
195  	u32 prev_fw_state;
196  
197  	/* OID cmd handler */
198  	struct mp_wiparam workparam;
199  /* 	u8 act_in_progress; */
200  
201  	/* Tx Section */
202  	u8 TID;
203  	u32 tx_pktcount;
204  	u32 pktInterval;
205  	struct mp_tx tx;
206  
207  	/* Rx Section */
208  	u32 rx_bssidpktcount;
209  	u32 rx_pktcount;
210  	u32 rx_pktcount_filter_out;
211  	u32 rx_crcerrpktcount;
212  	u32 rx_pktloss;
213  	bool  rx_bindicatePkt;
214  	struct recv_stat rxstat;
215  
216  	/* RF/BB relative */
217  	u8 channel;
218  	u8 bandwidth;
219  	u8 prime_channel_offset;
220  	u8 txpoweridx;
221  	u8 txpoweridx_b;
222  	u8 rateidx;
223  	u32 preamble;
224  /* 	u8 modem; */
225  	u32 CrystalCap;
226  /* 	u32 curr_crystalcap; */
227  
228  	u16 antenna_tx;
229  	u16 antenna_rx;
230  /* 	u8 curr_rfpath; */
231  
232  	u8 check_mp_pkt;
233  
234  	u8 bSetTxPower;
235  /* 	uint ForcedDataRate; */
236  	u8 mp_dm;
237  	u8 mac_filter[ETH_ALEN];
238  	u8 bmac_filter;
239  
240  	struct wlan_network mp_network;
241  	NDIS_802_11_MAC_ADDRESS network_macaddr;
242  
243  	u8 *pallocated_mp_xmitframe_buf;
244  	u8 *pmp_xmtframe_buf;
245  	struct __queue free_mp_xmitqueue;
246  	u32 free_mp_xmitframe_cnt;
247  	bool bSetRxBssid;
248  	bool bTxBufCkFail;
249  
250  	struct mpt_context MptCtx;
251  
252  	u8 *TXradomBuffer;
253  };
254  
255  /* Hardware Registers */
256  extern u8 mpdatarate[NumRates];
257  
258  #define MAX_TX_PWR_INDEX_N_MODE 64	/*  0x3F */
259  
260  #define		REG_RF_BB_GAIN_OFFSET	0x7f
261  #define		RF_GAIN_OFFSET_MASK	0xfffff
262  
263  /*  */
264  /* struct mp_xmit_frame *alloc_mp_xmitframe(struct mp_priv *pmp_priv); */
265  /* int free_mp_xmitframe(struct xmit_priv *pxmitpriv, struct mp_xmit_frame *pmp_xmitframe); */
266  
267  s32 init_mp_priv(struct adapter *padapter);
268  void free_mp_priv(struct mp_priv *pmp_priv);
269  s32 MPT_InitializeAdapter(struct adapter *padapter, u8 Channel);
270  void MPT_DeInitAdapter(struct adapter *padapter);
271  s32 mp_start_test(struct adapter *padapter);
272  void mp_stop_test(struct adapter *padapter);
273  
274  u32 _read_rfreg(struct adapter *padapter, u8 rfpath, u32 addr, u32 bitmask);
275  void _write_rfreg(struct adapter *padapter, u8 rfpath, u32 addr, u32 bitmask, u32 val);
276  
277  u32 read_macreg(struct adapter *padapter, u32 addr, u32 sz);
278  void write_macreg(struct adapter *padapter, u32 addr, u32 val, u32 sz);
279  u32 read_bbreg(struct adapter *padapter, u32 addr, u32 bitmask);
280  void write_bbreg(struct adapter *padapter, u32 addr, u32 bitmask, u32 val);
281  u32 read_rfreg(struct adapter *padapter, u8 rfpath, u32 addr);
282  void write_rfreg(struct adapter *padapter, u8 rfpath, u32 addr, u32 val);
283  
284  void SetChannel(struct adapter *padapter);
285  void SetBandwidth(struct adapter *padapter);
286  int SetTxPower(struct adapter *padapter);
287  void SetAntennaPathPower(struct adapter *padapter);
288  void SetDataRate(struct adapter *padapter);
289  
290  void SetAntenna(struct adapter *padapter);
291  
292  s32 SetThermalMeter(struct adapter *padapter, u8 target_ther);
293  void GetThermalMeter(struct adapter *padapter, u8 *value);
294  
295  void SetContinuousTx(struct adapter *padapter, u8 bStart);
296  void SetSingleCarrierTx(struct adapter *padapter, u8 bStart);
297  void SetSingleToneTx(struct adapter *padapter, u8 bStart);
298  void SetCarrierSuppressionTx(struct adapter *padapter, u8 bStart);
299  void PhySetTxPowerLevel(struct adapter *padapter);
300  
301  void fill_txdesc_for_mp(struct adapter *padapter, u8 *ptxdesc);
302  void SetPacketTx(struct adapter *padapter);
303  void SetPacketRx(struct adapter *padapter, u8 bStartRx);
304  
305  void ResetPhyRxPktCount(struct adapter *padapter);
306  u32 GetPhyRxPktReceived(struct adapter *padapter);
307  u32 GetPhyRxPktCRC32Error(struct adapter *padapter);
308  
309  s32	SetPowerTracking(struct adapter *padapter, u8 enable);
310  void GetPowerTracking(struct adapter *padapter, u8 *enable);
311  
312  u32 mp_query_psd(struct adapter *padapter, u8 *data);
313  
314  void Hal_SetAntenna(struct adapter *padapter);
315  void Hal_SetBandwidth(struct adapter *padapter);
316  
317  void Hal_SetTxPower(struct adapter *padapter);
318  void Hal_SetCarrierSuppressionTx(struct adapter *padapter, u8 bStart);
319  void Hal_SetSingleToneTx(struct adapter *padapter, u8 bStart);
320  void Hal_SetSingleCarrierTx(struct adapter *padapter, u8 bStart);
321  void Hal_SetContinuousTx(struct adapter *padapter, u8 bStart);
322  
323  void Hal_SetDataRate(struct adapter *padapter);
324  void Hal_SetChannel(struct adapter *padapter);
325  void Hal_SetAntennaPathPower(struct adapter *padapter);
326  s32 Hal_SetThermalMeter(struct adapter *padapter, u8 target_ther);
327  s32 Hal_SetPowerTracking(struct adapter *padapter, u8 enable);
328  void Hal_GetPowerTracking(struct adapter *padapter, u8 *enable);
329  void Hal_GetThermalMeter(struct adapter *padapter, u8 *value);
330  void Hal_mpt_SwitchRfSetting(struct adapter *padapter);
331  void Hal_MPT_CCKTxPowerAdjust(struct adapter *Adapter, bool bInCH14);
332  void Hal_MPT_CCKTxPowerAdjustbyIndex(struct adapter *padapter, bool beven);
333  void Hal_SetCCKTxPower(struct adapter *padapter, u8 *TxPower);
334  void Hal_SetOFDMTxPower(struct adapter *padapter, u8 *TxPower);
335  void Hal_TriggerRFThermalMeter(struct adapter *padapter);
336  u8 Hal_ReadRFThermalMeter(struct adapter *padapter);
337  void Hal_SetCCKContinuousTx(struct adapter *padapter, u8 bStart);
338  void Hal_SetOFDMContinuousTx(struct adapter *padapter, u8 bStart);
339  void Hal_ProSetCrystalCap(struct adapter *padapter, u32 CrystalCapVal);
340  void MP_PHY_SetRFPathSwitch(struct adapter *padapter, bool bMain);
341  u32 mpt_ProQueryCalTxPower(struct adapter *padapter, u8 RfPath);
342  void MPT_PwrCtlDM(struct adapter *padapter, u32 bstart);
343  u8 MptToMgntRate(u32 MptRateIdx);
344  
345  #endif /* _RTW_MP_H_ */
346