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

source code of linux/drivers/staging/rtl8723bs/include/rtw_mp.h