GNU Linux-libre 4.14.254-gnu1
[releases.git] / drivers / staging / rtl8723bs / include / rtw_mp.h
1 /******************************************************************************
2  *
3  * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
4  *
5  * This program is free software; you can redistribute it and/or modify it
6  * under the terms of version 2 of the GNU General Public License as
7  * published by the Free Software Foundation.
8  *
9  * This program is distributed in the hope that it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12  * more details.
13  *
14  ******************************************************************************/
15 #ifndef _RTW_MP_H_
16 #define _RTW_MP_H_
17
18 #define MAX_MP_XMITBUF_SZ       2048
19 #define NR_MP_XMITFRAME         8
20
21 struct mp_xmit_frame
22 {
23         struct list_head        list;
24
25         struct pkt_attrib attrib;
26
27         _pkt *pkt;
28
29         int frame_tag;
30
31         struct adapter *padapter;
32
33         uint mem[(MAX_MP_XMITBUF_SZ >> 2)];
34 };
35
36 struct mp_wiparam
37 {
38         u32 bcompleted;
39         u32 act_type;
40         u32 io_offset;
41         u32 io_value;
42 };
43
44 typedef void(*wi_act_func)(void* padapter);
45
46 struct mp_tx
47 {
48         u8 stop;
49         u32 count, sended;
50         u8 payload;
51         struct pkt_attrib attrib;
52         /* struct tx_desc desc; */
53         /* u8 resvdtx[7]; */
54         u8 desc[TXDESC_SIZE];
55         u8 *pallocated_buf;
56         u8 *buf;
57         u32 buf_size, write_size;
58         void *PktTxThread;
59 };
60
61 #define MP_MAX_LINES            1000
62 #define MP_MAX_LINES_BYTES      256
63
64 typedef void (*MPT_WORK_ITEM_HANDLER)(void *Adapter);
65 typedef struct _MPT_CONTEXT
66 {
67         /*  Indicate if we have started Mass Production Test. */
68         bool                    bMassProdTest;
69
70         /*  Indicate if the driver is unloading or unloaded. */
71         bool                    bMptDrvUnload;
72
73         _sema                   MPh2c_Sema;
74         _timer                  MPh2c_timeout_timer;
75 /*  Event used to sync H2c for BT control */
76
77         bool            MptH2cRspEvent;
78         bool            MptBtC2hEvent;
79         bool            bMPh2c_timeout;
80
81         /* 8190 PCI does not support NDIS_WORK_ITEM. */
82         /*  Work Item for Mass Production Test. */
83         /* NDIS_WORK_ITEM       MptWorkItem; */
84 /*      RT_WORK_ITEM            MptWorkItem; */
85         /*  Event used to sync the case unloading driver and MptWorkItem is still in progress. */
86 /*      NDIS_EVENT              MptWorkItemEvent; */
87         /*  To protect the following variables. */
88 /*      NDIS_SPIN_LOCK          MptWorkItemSpinLock; */
89         /*  Indicate a MptWorkItem is scheduled and not yet finished. */
90         bool                    bMptWorkItemInProgress;
91         /*  An instance which implements function and context of MptWorkItem. */
92         MPT_WORK_ITEM_HANDLER   CurrMptAct;
93
94         /*  1 =Start, 0 =Stop from UI. */
95         u32             MptTestStart;
96         /*  _TEST_MODE, defined in MPT_Req2.h */
97         u32             MptTestItem;
98         /*  Variable needed in each implementation of CurrMptAct. */
99         u32             MptActType;     /*  Type of action performed in CurrMptAct. */
100         /*  The Offset of IO operation is depend of MptActType. */
101         u32             MptIoOffset;
102         /*  The Value of IO operation is depend of MptActType. */
103         u32             MptIoValue;
104         /*  The RfPath of IO operation is depend of MptActType. */
105         u32             MptRfPath;
106
107         enum WIRELESS_MODE              MptWirelessModeToSw;    /*  Wireless mode to switch. */
108         u8      MptChannelToSw;         /*  Channel to switch. */
109         u8      MptInitGainToSet;       /*  Initial gain to set. */
110         u32             MptBandWidth;           /*  bandwidth to switch. */
111         u32             MptRateIndex;           /*  rate index. */
112         /*  Register value kept for Single Carrier Tx test. */
113         u8      btMpCckTxPower;
114         /*  Register value kept for Single Carrier Tx test. */
115         u8      btMpOfdmTxPower;
116         /*  For MP Tx Power index */
117         u8      TxPwrLevel[2];  /*  rf-A, rf-B */
118         u32             RegTxPwrLimit;
119         /*  Content of RCR Regsiter for Mass Production Test. */
120         u32             MptRCR;
121         /*  true if we only receive packets with specific pattern. */
122         bool                    bMptFilterPattern;
123         /*  Rx OK count, statistics used in Mass Production Test. */
124         u32             MptRxOkCnt;
125         /*  Rx CRC32 error count, statistics used in Mass Production Test. */
126         u32             MptRxCrcErrCnt;
127
128         bool                    bCckContTx;     /*  true if we are in CCK Continuous Tx test. */
129         bool                    bOfdmContTx;    /*  true if we are in OFDM Continuous Tx test. */
130         bool                    bStartContTx;   /*  true if we have start Continuous Tx test. */
131         /*  true if we are in Single Carrier Tx test. */
132         bool                    bSingleCarrier;
133         /*  true if we are in Carrier Suppression Tx Test. */
134         bool                    bCarrierSuppression;
135         /* true if we are in Single Tone Tx test. */
136         bool                    bSingleTone;
137
138         /*  ACK counter asked by K.Y.. */
139         bool                    bMptEnableAckCounter;
140         u32             MptAckCounter;
141
142         /*  SD3 Willis For 8192S to save 1T/2T RF table for ACUT        Only fro ACUT delete later ~~~! */
143         /* s8           BufOfLines[2][MAX_LINES_HWCONFIG_TXT][MAX_BYTES_LINE_HWCONFIG_TXT]; */
144         /* s8                   BufOfLines[2][MP_MAX_LINES][MP_MAX_LINES_BYTES]; */
145         /* s32                  RfReadLine[2]; */
146
147         u8 APK_bound[2];        /* for APK      path A/path B */
148         bool            bMptIndexEven;
149
150         u8 backup0xc50;
151         u8 backup0xc58;
152         u8 backup0xc30;
153         u8 backup0x52_RF_A;
154         u8 backup0x52_RF_B;
155
156         u32             backup0x58_RF_A;
157         u32             backup0x58_RF_B;
158
159         u8      h2cReqNum;
160         u8      c2hBuf[32];
161
162     u8          btInBuf[100];
163         u32             mptOutLen;
164     u8          mptOutBuf[100];
165
166 }MPT_CONTEXT, *PMPT_CONTEXT;
167 /* endif */
168
169 /* E-Fuse */
170 #define EFUSE_MAP_SIZE          512
171
172 #define EFUSE_MAX_SIZE          512
173 /* end of E-Fuse */
174
175 /* define RTPRIV_IOCTL_MP                                       (SIOCIWFIRSTPRIV + 0x17) */
176 enum {
177         WRITE_REG = 1,
178         READ_REG,
179         WRITE_RF,
180         READ_RF,
181         MP_START,
182         MP_STOP,
183         MP_RATE,
184         MP_CHANNEL,
185         MP_BANDWIDTH,
186         MP_TXPOWER,
187         MP_ANT_TX,
188         MP_ANT_RX,
189         MP_CTX,
190         MP_QUERY,
191         MP_ARX,
192         MP_PSD,
193         MP_PWRTRK,
194         MP_THER,
195         MP_IOCTL,
196         EFUSE_GET,
197         EFUSE_SET,
198         MP_RESET_STATS,
199         MP_DUMP,
200         MP_PHYPARA,
201         MP_SetRFPathSwh,
202         MP_QueryDrvStats,
203         MP_SetBT,
204         CTA_TEST,
205         MP_DISABLE_BT_COEXIST,
206         MP_PwrCtlDM,
207 #ifdef CONFIG_WOWLAN
208         MP_WOW_ENABLE,
209 #endif
210 #ifdef CONFIG_AP_WOWLAN
211         MP_AP_WOW_ENABLE,
212 #endif
213         MP_NULL,
214         MP_GET_TXPOWER_INX,
215 };
216
217 struct mp_priv
218 {
219         struct adapter *papdater;
220
221         /* Testing Flag */
222         u32 mode;/* 0 for normal type packet, 1 for loopback packet (16bytes TXCMD) */
223
224         u32 prev_fw_state;
225
226         /* OID cmd handler */
227         struct mp_wiparam workparam;
228 /*      u8 act_in_progress; */
229
230         /* Tx Section */
231         u8 TID;
232         u32 tx_pktcount;
233         u32 pktInterval;
234         struct mp_tx tx;
235
236         /* Rx Section */
237         u32 rx_bssidpktcount;
238         u32 rx_pktcount;
239         u32 rx_pktcount_filter_out;
240         u32 rx_crcerrpktcount;
241         u32 rx_pktloss;
242         bool  rx_bindicatePkt;
243         struct recv_stat rxstat;
244
245         /* RF/BB relative */
246         u8 channel;
247         u8 bandwidth;
248         u8 prime_channel_offset;
249         u8 txpoweridx;
250         u8 txpoweridx_b;
251         u8 rateidx;
252         u32 preamble;
253 /*      u8 modem; */
254         u32 CrystalCap;
255 /*      u32 curr_crystalcap; */
256
257         u16 antenna_tx;
258         u16 antenna_rx;
259 /*      u8 curr_rfpath; */
260
261         u8 check_mp_pkt;
262
263         u8 bSetTxPower;
264 /*      uint ForcedDataRate; */
265         u8 mp_dm;
266         u8 mac_filter[ETH_ALEN];
267         u8 bmac_filter;
268
269         struct wlan_network mp_network;
270         NDIS_802_11_MAC_ADDRESS network_macaddr;
271
272         u8 *pallocated_mp_xmitframe_buf;
273         u8 *pmp_xmtframe_buf;
274         struct __queue free_mp_xmitqueue;
275         u32 free_mp_xmitframe_cnt;
276         bool bSetRxBssid;
277         bool bTxBufCkFail;
278
279         MPT_CONTEXT MptCtx;
280
281         u8 *TXradomBuffer;
282 };
283
284 typedef struct _IOCMD_STRUCT_ {
285         u8 cmdclass;
286         u16 value;
287         u8 index;
288 }IOCMD_STRUCT;
289
290 struct rf_reg_param {
291         u32 path;
292         u32 offset;
293         u32 value;
294 };
295
296 struct bb_reg_param {
297         u32 offset;
298         u32 value;
299 };
300
301 #define LOWER   true
302 #define RAISE   false
303
304 /* Hardware Registers */
305 #define BB_REG_BASE_ADDR                0x800
306
307 /* MP variables */
308 enum MP_MODE {
309         MP_OFF,
310         MP_ON,
311         MP_ERR,
312         MP_CONTINUOUS_TX,
313         MP_SINGLE_CARRIER_TX,
314         MP_CARRIER_SUPPRISSION_TX,
315         MP_SINGLE_TONE_TX,
316         MP_PACKET_TX,
317         MP_PACKET_RX
318 };
319
320 #define MAX_RF_PATH_NUMS        RF_PATH_MAX
321
322 extern u8 mpdatarate[NumRates];
323
324 /* MP set force data rate base on the definition. */
325 enum MPT_RATE_INDEX {
326         /* CCK rate. */
327         MPT_RATE_1M = 0 ,       /* 0 */
328         MPT_RATE_2M,
329         MPT_RATE_55M,
330         MPT_RATE_11M,   /* 3 */
331
332         /* OFDM rate. */
333         MPT_RATE_6M,    /* 4 */
334         MPT_RATE_9M,
335         MPT_RATE_12M,
336         MPT_RATE_18M,
337         MPT_RATE_24M,
338         MPT_RATE_36M,
339         MPT_RATE_48M,
340         MPT_RATE_54M,   /* 11 */
341
342         /* HT rate. */
343         MPT_RATE_MCS0,  /* 12 */
344         MPT_RATE_MCS1,
345         MPT_RATE_MCS2,
346         MPT_RATE_MCS3,
347         MPT_RATE_MCS4,
348         MPT_RATE_MCS5,
349         MPT_RATE_MCS6,
350         MPT_RATE_MCS7,  /* 19 */
351         MPT_RATE_MCS8,
352         MPT_RATE_MCS9,
353         MPT_RATE_MCS10,
354         MPT_RATE_MCS11,
355         MPT_RATE_MCS12,
356         MPT_RATE_MCS13,
357         MPT_RATE_MCS14,
358         MPT_RATE_MCS15, /* 27 */
359         /* VHT rate. Total: 20*/
360         MPT_RATE_VHT1SS_MCS0 = 100,/*  To reserve MCS16~MCS31, the index starts from #100. */
361         MPT_RATE_VHT1SS_MCS1, /*  #101 */
362         MPT_RATE_VHT1SS_MCS2,
363         MPT_RATE_VHT1SS_MCS3,
364         MPT_RATE_VHT1SS_MCS4,
365         MPT_RATE_VHT1SS_MCS5,
366         MPT_RATE_VHT1SS_MCS6, /*  #106 */
367         MPT_RATE_VHT1SS_MCS7,
368         MPT_RATE_VHT1SS_MCS8,
369         MPT_RATE_VHT1SS_MCS9,
370         MPT_RATE_VHT2SS_MCS0,
371         MPT_RATE_VHT2SS_MCS1, /*  #111 */
372         MPT_RATE_VHT2SS_MCS2,
373         MPT_RATE_VHT2SS_MCS3,
374         MPT_RATE_VHT2SS_MCS4,
375         MPT_RATE_VHT2SS_MCS5,
376         MPT_RATE_VHT2SS_MCS6, /*  #116 */
377         MPT_RATE_VHT2SS_MCS7,
378         MPT_RATE_VHT2SS_MCS8,
379         MPT_RATE_VHT2SS_MCS9,
380         MPT_RATE_LAST
381 };
382
383 #define MAX_TX_PWR_INDEX_N_MODE 64      /*  0x3F */
384
385 enum POWER_MODE {
386         POWER_LOW = 0,
387         POWER_NORMAL
388 };
389
390 /*  The following enumeration is used to define the value of Reg0xD00[30:28] or JaguarReg0x914[18:16]. */
391 enum OFDM_TX_MODE {
392         OFDM_ALL_OFF            = 0,
393         OFDM_ContinuousTx       = 1,
394         OFDM_SingleCarrier      = 2,
395         OFDM_SingleTone         = 4,
396 };
397
398 #define RX_PKT_BROADCAST        1
399 #define RX_PKT_DEST_ADDR        2
400 #define RX_PKT_PHY_MATCH        3
401
402 #define Mac_OFDM_OK                     0x00000000
403 #define Mac_OFDM_Fail                   0x10000000
404 #define Mac_OFDM_FasleAlarm     0x20000000
405 #define Mac_CCK_OK                              0x30000000
406 #define Mac_CCK_Fail                    0x40000000
407 #define Mac_CCK_FasleAlarm              0x50000000
408 #define Mac_HT_OK                               0x60000000
409 #define Mac_HT_Fail                     0x70000000
410 #define Mac_HT_FasleAlarm               0x90000000
411 #define Mac_DropPacket                  0xA0000000
412
413 enum ENCRY_CTRL_STATE {
414         HW_CONTROL,             /* hw encryption& decryption */
415         SW_CONTROL,             /* sw encryption& decryption */
416         HW_ENCRY_SW_DECRY,      /* hw encryption & sw decryption */
417         SW_ENCRY_HW_DECRY       /* sw encryption & hw decryption */
418 };
419
420 enum MPT_TXPWR_DEF {
421         MPT_CCK,
422         MPT_OFDM, /*  L and HT OFDM */
423         MPT_VHT_OFDM
424 };
425
426 #define         REG_RF_BB_GAIN_OFFSET   0x7f
427 #define         RF_GAIN_OFFSET_MASK     0xfffff
428
429 /*  */
430 /* struct mp_xmit_frame *alloc_mp_xmitframe(struct mp_priv *pmp_priv); */
431 /* int free_mp_xmitframe(struct xmit_priv *pxmitpriv, struct mp_xmit_frame *pmp_xmitframe); */
432
433 s32 init_mp_priv(struct adapter *padapter);
434 void free_mp_priv(struct mp_priv *pmp_priv);
435 s32 MPT_InitializeAdapter(struct adapter *padapter, u8 Channel);
436 void MPT_DeInitAdapter(struct adapter *padapter);
437 s32 mp_start_test(struct adapter *padapter);
438 void mp_stop_test(struct adapter *padapter);
439
440 u32 _read_rfreg(struct adapter *padapter, u8 rfpath, u32 addr, u32 bitmask);
441 void _write_rfreg(struct adapter *padapter, u8 rfpath, u32 addr, u32 bitmask, u32 val);
442
443 u32 read_macreg(struct adapter *padapter, u32 addr, u32 sz);
444 void write_macreg(struct adapter *padapter, u32 addr, u32 val, u32 sz);
445 u32 read_bbreg(struct adapter *padapter, u32 addr, u32 bitmask);
446 void write_bbreg(struct adapter *padapter, u32 addr, u32 bitmask, u32 val);
447 u32 read_rfreg(struct adapter *padapter, u8 rfpath, u32 addr);
448 void write_rfreg(struct adapter *padapter, u8 rfpath, u32 addr, u32 val);
449
450 void SetChannel(struct adapter *padapter);
451 void SetBandwidth(struct adapter *padapter);
452 int SetTxPower(struct adapter *padapter);
453 void SetAntennaPathPower(struct adapter *padapter);
454 void SetDataRate(struct adapter *padapter);
455
456 void SetAntenna(struct adapter *padapter);
457
458 s32 SetThermalMeter(struct adapter *padapter, u8 target_ther);
459 void GetThermalMeter(struct adapter *padapter, u8 *value);
460
461 void SetContinuousTx(struct adapter *padapter, u8 bStart);
462 void SetSingleCarrierTx(struct adapter *padapter, u8 bStart);
463 void SetSingleToneTx(struct adapter *padapter, u8 bStart);
464 void SetCarrierSuppressionTx(struct adapter *padapter, u8 bStart);
465 void PhySetTxPowerLevel(struct adapter *padapter);
466
467 void fill_txdesc_for_mp(struct adapter *padapter, u8 *ptxdesc);
468 void SetPacketTx(struct adapter *padapter);
469 void SetPacketRx(struct adapter *padapter, u8 bStartRx);
470
471 void ResetPhyRxPktCount(struct adapter *padapter);
472 u32 GetPhyRxPktReceived(struct adapter *padapter);
473 u32 GetPhyRxPktCRC32Error(struct adapter *padapter);
474
475 s32     SetPowerTracking(struct adapter *padapter, u8 enable);
476 void GetPowerTracking(struct adapter *padapter, u8 *enable);
477
478 u32 mp_query_psd(struct adapter *padapter, u8 *data);
479
480 void Hal_SetAntenna(struct adapter *padapter);
481 void Hal_SetBandwidth(struct adapter *padapter);
482
483 void Hal_SetTxPower(struct adapter *padapter);
484 void Hal_SetCarrierSuppressionTx(struct adapter *padapter, u8 bStart);
485 void Hal_SetSingleToneTx (struct adapter *padapter , u8 bStart);
486 void Hal_SetSingleCarrierTx (struct adapter *padapter, u8 bStart);
487 void Hal_SetContinuousTx (struct adapter *padapter, u8 bStart);
488 void Hal_SetBandwidth(struct adapter *padapter);
489
490 void Hal_SetDataRate(struct adapter *padapter);
491 void Hal_SetChannel(struct adapter *padapter);
492 void Hal_SetAntennaPathPower(struct adapter *padapter);
493 s32 Hal_SetThermalMeter(struct adapter *padapter, u8 target_ther);
494 s32 Hal_SetPowerTracking(struct adapter *padapter, u8 enable);
495 void Hal_GetPowerTracking(struct adapter *padapter, u8 * enable);
496 void Hal_GetThermalMeter(struct adapter *padapter, u8 *value);
497 void Hal_mpt_SwitchRfSetting(struct adapter *padapter);
498 void Hal_MPT_CCKTxPowerAdjust(struct adapter * Adapter, bool bInCH14);
499 void Hal_MPT_CCKTxPowerAdjustbyIndex(struct adapter *padapter, bool beven);
500 void Hal_SetCCKTxPower(struct adapter *padapter, u8 * TxPower);
501 void Hal_SetOFDMTxPower(struct adapter *padapter, u8 * TxPower);
502 void Hal_TriggerRFThermalMeter(struct adapter *padapter);
503 u8 Hal_ReadRFThermalMeter(struct adapter *padapter);
504 void Hal_SetCCKContinuousTx(struct adapter *padapter, u8 bStart);
505 void Hal_SetOFDMContinuousTx(struct adapter *padapter, u8 bStart);
506 void Hal_ProSetCrystalCap (struct adapter *padapter , u32 CrystalCapVal);
507 void MP_PHY_SetRFPathSwitch(struct adapter *padapter , bool bMain);
508 u32 mpt_ProQueryCalTxPower(struct adapter *padapter, u8 RfPath);
509 void MPT_PwrCtlDM(struct adapter *padapter, u32 bstart);
510 u8 MptToMgntRate(u32 MptRateIdx);
511
512 #endif /* _RTW_MP_H_ */