Merge tag 'v4.4-rc2'
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / 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  * You should have received a copy of the GNU General Public License along with
15  * this program; if not, write to the Free Software Foundation, Inc.,
16  * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
17  *
18  *
19  ******************************************************************************/
20 #ifndef _RTW_MP_H_
21 #define _RTW_MP_H_
22
23 #if 0
24 #define MPT_NOOP                        0
25 #define MPT_READ_MAC_1BYTE              1
26 #define MPT_READ_MAC_2BYTE              2
27 #define MPT_READ_MAC_4BYTE              3
28 #define MPT_WRITE_MAC_1BYTE             4
29 #define MPT_WRITE_MAC_2BYTE             5
30 #define MPT_WRITE_MAC_4BYTE             6
31 #define MPT_READ_BB_CCK                 7
32 #define MPT_WRITE_BB_CCK                8
33 #define MPT_READ_BB_OFDM                9
34 #define MPT_WRITE_BB_OFDM               10
35 #define MPT_READ_RF                     11
36 #define MPT_WRITE_RF                    12
37 #define MPT_READ_EEPROM_1BYTE           13
38 #define MPT_WRITE_EEPROM_1BYTE          14
39 #define MPT_READ_EEPROM_2BYTE           15
40 #define MPT_WRITE_EEPROM_2BYTE          16
41 #define MPT_SET_CSTHRESHOLD             21
42 #define MPT_SET_INITGAIN                22
43 #define MPT_SWITCH_BAND                 23
44 #define MPT_SWITCH_CHANNEL              24
45 #define MPT_SET_DATARATE                25
46 #define MPT_SWITCH_ANTENNA              26
47 #define MPT_SET_TX_POWER                27
48 #define MPT_SET_CONT_TX                 28
49 #define MPT_SET_SINGLE_CARRIER          29
50 #define MPT_SET_CARRIER_SUPPRESSION     30
51 #define MPT_GET_RATE_TABLE              31
52 #define MPT_READ_TSSI                   32
53 #define MPT_GET_THERMAL_METER           33
54 #endif
55
56 #define RTWPRIV_VER_INFO        1
57
58 #define MAX_MP_XMITBUF_SZ       2048
59 #define NR_MP_XMITFRAME         8
60
61 struct mp_xmit_frame
62 {
63         _list   list;
64
65         struct pkt_attrib attrib;
66
67         _pkt *pkt;
68
69         int frame_tag;
70
71         _adapter *padapter;
72
73 #ifdef CONFIG_USB_HCI
74
75         //insert urb, irp, and irpcnt info below...
76         //max frag_cnt = 8
77
78         u8 *mem_addr;
79         u32 sz[8];
80
81 #if defined(PLATFORM_OS_XP) || defined(PLATFORM_LINUX)
82         PURB pxmit_urb[8];
83 #endif
84
85 #ifdef PLATFORM_OS_XP
86         PIRP pxmit_irp[8];
87 #endif
88
89         u8 bpending[8];
90         sint ac_tag[8];
91         sint last[8];
92         uint irpcnt;
93         uint fragcnt;
94 #endif /* CONFIG_USB_HCI */
95
96         uint mem[(MAX_MP_XMITBUF_SZ >> 2)];
97 };
98
99 struct mp_wiparam
100 {
101         u32 bcompleted;
102         u32 act_type;
103         u32 io_offset;
104         u32 io_value;
105 };
106
107 typedef void(*wi_act_func)(void* padapter);
108
109 #ifdef PLATFORM_WINDOWS
110 struct mp_wi_cntx
111 {
112         u8 bmpdrv_unload;
113
114         // Work Item
115         NDIS_WORK_ITEM mp_wi;
116         NDIS_EVENT mp_wi_evt;
117         _lock mp_wi_lock;
118         u8 bmp_wi_progress;
119         wi_act_func curractfunc;
120         // Variable needed in each implementation of CurrActFunc.
121         struct mp_wiparam param;
122 };
123 #endif
124
125 struct mp_tx
126 {
127         u8 stop;
128         u32 count, sended;
129         u8 payload;
130         struct pkt_attrib attrib;
131         //struct tx_desc desc;
132         //u8 resvdtx[7];
133         u8 desc[TXDESC_SIZE];
134         u8 *pallocated_buf;
135         u8 *buf;
136         u32 buf_size, write_size;
137         _thread_hdl_ PktTxThread;
138 };
139
140 #if defined(CONFIG_RTL8192C) || defined(CONFIG_RTL8192D) || defined(CONFIG_RTL8723A) || defined(CONFIG_RTL8188E) || defined(CONFIG_RTL8812A) || defined(CONFIG_RTL8821A) ||defined(CONFIG_RTL8192E) || defined(CONFIG_RTL8723B)
141
142 #define MP_MAX_LINES            1000
143 #define MP_MAX_LINES_BYTES      256
144 #define u1Byte u8
145 #define s1Byte s8
146 #define u4Byte u32
147 #define s4Byte s32
148 #define u1Byte          u8
149 #define pu1Byte                 u8* 
150
151 #define u2Byte          u16
152 #define pu2Byte                 u16*            
153
154 #define u4Byte          u32
155 #define pu4Byte                 u32*    
156
157 #define u8Byte          u64
158 #define pu8Byte                 u64*
159
160 #define s1Byte          s8
161 #define ps1Byte                 s8* 
162
163 #define s2Byte          s16
164 #define ps2Byte                 s16*    
165
166 #define s4Byte          s32
167 #define ps4Byte                 s32*    
168
169 #define s8Byte          s64
170 #define ps8Byte                 s64*
171
172 #define UCHAR u8
173 #define USHORT u16
174 #define UINT u32
175 #define ULONG u32
176 #define PULONG u32*
177
178
179
180 typedef VOID (*MPT_WORK_ITEM_HANDLER)(IN PVOID Adapter);
181 typedef struct _MPT_CONTEXT
182 {
183         // Indicate if we have started Mass Production Test.
184         BOOLEAN                 bMassProdTest;
185
186         // Indicate if the driver is unloading or unloaded.
187         BOOLEAN                 bMptDrvUnload;
188
189         _sema                   MPh2c_Sema;
190         _timer                  MPh2c_timeout_timer;
191 // Event used to sync H2c for BT control
192
193         BOOLEAN         MptH2cRspEvent;
194         BOOLEAN         MptBtC2hEvent;
195         BOOLEAN         bMPh2c_timeout;
196         
197         /* 8190 PCI does not support NDIS_WORK_ITEM. */
198         // Work Item for Mass Production Test.
199         //NDIS_WORK_ITEM        MptWorkItem;
200 //      RT_WORK_ITEM            MptWorkItem;
201         // Event used to sync the case unloading driver and MptWorkItem is still in progress.
202 //      NDIS_EVENT              MptWorkItemEvent;
203         // To protect the following variables.
204 //      NDIS_SPIN_LOCK          MptWorkItemSpinLock;
205         // Indicate a MptWorkItem is scheduled and not yet finished.
206         BOOLEAN                 bMptWorkItemInProgress;
207         // An instance which implements function and context of MptWorkItem.
208         MPT_WORK_ITEM_HANDLER   CurrMptAct;
209
210         // 1=Start, 0=Stop from UI.
211         ULONG                   MptTestStart;
212         // _TEST_MODE, defined in MPT_Req2.h
213         ULONG                   MptTestItem;
214         // Variable needed in each implementation of CurrMptAct.
215         ULONG                   MptActType;     // Type of action performed in CurrMptAct.
216         // The Offset of IO operation is depend of MptActType.
217         ULONG                   MptIoOffset;
218         // The Value of IO operation is depend of MptActType.
219         ULONG                   MptIoValue;
220         // The RfPath of IO operation is depend of MptActType.
221         ULONG                   MptRfPath;
222
223         WIRELESS_MODE           MptWirelessModeToSw;    // Wireless mode to switch.
224         u8                      MptChannelToSw;         // Channel to switch.
225         u8                      MptInitGainToSet;       // Initial gain to set.
226         //ULONG                 bMptAntennaA;           // TRUE if we want to use antenna A.
227         ULONG                   MptBandWidth;           // bandwidth to switch.
228         ULONG                   MptRateIndex;           // rate index.
229         // Register value kept for Single Carrier Tx test.
230         u8                      btMpCckTxPower;
231         // Register value kept for Single Carrier Tx test.
232         u8                      btMpOfdmTxPower;
233         // For MP Tx Power index
234         u8                      TxPwrLevel[2];  // rf-A, rf-B
235         u32                     RegTxPwrLimit;
236         // Content of RCR Regsiter for Mass Production Test.
237         ULONG                   MptRCR;
238         // TRUE if we only receive packets with specific pattern.
239         BOOLEAN                 bMptFilterPattern;
240         // Rx OK count, statistics used in Mass Production Test.
241         ULONG                   MptRxOkCnt;
242         // Rx CRC32 error count, statistics used in Mass Production Test.
243         ULONG                   MptRxCrcErrCnt;
244
245         BOOLEAN                 bCckContTx;     // TRUE if we are in CCK Continuous Tx test.
246         BOOLEAN                 bOfdmContTx;    // TRUE if we are in OFDM Continuous Tx test.
247         BOOLEAN                 bStartContTx;   // TRUE if we have start Continuous Tx test.
248         // TRUE if we are in Single Carrier Tx test.
249         BOOLEAN                 bSingleCarrier;
250         // TRUE if we are in Carrier Suppression Tx Test.
251         BOOLEAN                 bCarrierSuppression;
252         //TRUE if we are in Single Tone Tx test.
253         BOOLEAN                 bSingleTone;
254
255         // ACK counter asked by K.Y..
256         BOOLEAN                 bMptEnableAckCounter;
257         ULONG                   MptAckCounter;
258
259         // SD3 Willis For 8192S to save 1T/2T RF table for ACUT Only fro ACUT delete later ~~~!
260         //s1Byte                BufOfLines[2][MAX_LINES_HWCONFIG_TXT][MAX_BYTES_LINE_HWCONFIG_TXT];
261         //s1Byte                        BufOfLines[2][MP_MAX_LINES][MP_MAX_LINES_BYTES];
262         //s4Byte                        RfReadLine[2];
263
264         u8              APK_bound[2];   //for APK       path A/path B
265         BOOLEAN         bMptIndexEven;
266
267         u8              backup0xc50;
268         u8              backup0xc58;
269         u8              backup0xc30;
270         u8              backup0x52_RF_A;
271         u8              backup0x52_RF_B;
272         
273         u4Byte                  backup0x58_RF_A;        
274         u4Byte                  backup0x58_RF_B;
275         
276         u1Byte                  h2cReqNum;
277         u1Byte                  c2hBuf[32];
278
279     u1Byte          btInBuf[100];
280         ULONG                   mptOutLen;
281     u1Byte          mptOutBuf[100];
282     
283 }MPT_CONTEXT, *PMPT_CONTEXT;
284 #endif
285 //#endif
286
287 /* E-Fuse */
288 #ifdef CONFIG_RTL8192D
289 #define EFUSE_MAP_SIZE          256
290 #endif
291 #ifdef CONFIG_RTL8192C
292 #define EFUSE_MAP_SIZE          128
293 #endif
294 #ifdef CONFIG_RTL8723A
295 #define EFUSE_MAP_SIZE          256
296 #endif
297 #ifdef CONFIG_RTL8188E
298 #define EFUSE_MAP_SIZE          512
299 #endif
300 #if defined(CONFIG_RTL8812A) || defined(CONFIG_RTL8821A)
301 #define EFUSE_MAP_SIZE          512
302 #endif
303 #ifdef CONFIG_RTL8192E
304 #define EFUSE_MAP_SIZE          512
305 #endif
306 #ifdef CONFIG_RTL8723B
307 #define EFUSE_MAP_SIZE          512
308 #endif
309
310 #if defined(CONFIG_RTL8812A) || defined(CONFIG_RTL8821A)
311 #define EFUSE_MAX_SIZE          1024
312 #elif defined(CONFIG_RTL8188E)
313 #define EFUSE_MAX_SIZE          256
314 #else
315 #define EFUSE_MAX_SIZE          512
316 #endif
317 /* end of E-Fuse */
318
319 //#define RTPRIV_IOCTL_MP                                       ( SIOCIWFIRSTPRIV + 0x17)
320 enum {    
321         WRITE_REG = 1,
322         READ_REG,
323         WRITE_RF,
324         READ_RF,
325         MP_START,
326         MP_STOP,
327         MP_RATE,
328         MP_CHANNEL,
329         MP_BANDWIDTH,
330         MP_TXPOWER,
331         MP_ANT_TX,
332         MP_ANT_RX,
333         MP_CTX,
334         MP_QUERY,
335         MP_ARX,
336         MP_PSD,
337         MP_PWRTRK,
338         MP_THER,
339         MP_IOCTL,
340         EFUSE_GET,
341         EFUSE_SET,
342         MP_RESET_STATS,
343         MP_DUMP,
344         MP_PHYPARA,
345         MP_SetRFPathSwh,
346         MP_QueryDrvStats,
347         MP_SetBT,
348         CTA_TEST,
349         MP_DISABLE_BT_COEXIST,
350         MP_PwrCtlDM,
351         MP_GETVER,
352 #ifdef CONFIG_WOWLAN
353         MP_WOW_ENABLE,
354 #endif
355 #ifdef CONFIG_AP_WOWLAN
356         MP_AP_WOW_ENABLE,
357 #endif
358         MP_NULL,
359         MP_GET_TXPOWER_INX,
360 };
361
362 struct mp_priv
363 {
364         _adapter *papdater;
365
366         //Testing Flag
367         u32 mode;//0 for normal type packet, 1 for loopback packet (16bytes TXCMD)
368
369         u32 prev_fw_state;
370
371         //OID cmd handler
372         struct mp_wiparam workparam;
373 //      u8 act_in_progress;
374
375         //Tx Section
376         u8 TID;
377         u32 tx_pktcount;
378         u32 pktInterval;
379         struct mp_tx tx;
380
381         //Rx Section
382         u32 rx_bssidpktcount;
383         u32 rx_pktcount;
384         u32 rx_pktcount_filter_out;
385         u32 rx_crcerrpktcount;
386         u32 rx_pktloss;
387         BOOLEAN  rx_bindicatePkt;
388         struct recv_stat rxstat;
389
390         //RF/BB relative
391         u8 channel;
392         u8 bandwidth;
393         u8 prime_channel_offset;
394         u8 txpoweridx;
395         u8 txpoweridx_b;
396         u8 rateidx;
397         u32 preamble;
398 //      u8 modem;
399         u32 CrystalCap;
400 //      u32 curr_crystalcap;
401
402         u16 antenna_tx;
403         u16 antenna_rx;
404 //      u8 curr_rfpath;
405         
406         u8 check_mp_pkt;
407
408         u8 bSetTxPower;
409 //      uint ForcedDataRate;
410         u8 mp_dm;
411         u8 mac_filter[ETH_ALEN];
412         u8 bmac_filter;
413         
414         struct wlan_network mp_network;
415         NDIS_802_11_MAC_ADDRESS network_macaddr;
416
417 #ifdef PLATFORM_WINDOWS
418         u32 rx_testcnt;
419         u32 rx_testcnt1;
420         u32 rx_testcnt2;
421         u32 tx_testcnt;
422         u32 tx_testcnt1;
423
424         struct mp_wi_cntx wi_cntx;
425
426         u8 h2c_result;
427         u8 h2c_seqnum;
428         u16 h2c_cmdcode;
429         u8 h2c_resp_parambuf[512];
430         _lock h2c_lock;
431         _lock wkitm_lock;
432         u32 h2c_cmdcnt;
433         NDIS_EVENT h2c_cmd_evt;
434         NDIS_EVENT c2h_set;
435         NDIS_EVENT h2c_clr;
436         NDIS_EVENT cpwm_int;
437
438         NDIS_EVENT scsir_full_evt;
439         NDIS_EVENT scsiw_empty_evt;
440 #endif
441
442         u8 *pallocated_mp_xmitframe_buf;
443         u8 *pmp_xmtframe_buf;
444         _queue free_mp_xmitqueue;
445         u32 free_mp_xmitframe_cnt;
446         BOOLEAN bSetRxBssid;
447         BOOLEAN bTxBufCkFail;
448         
449         MPT_CONTEXT MptCtx;
450
451         u8              *TXradomBuffer;
452 };
453
454 typedef struct _IOCMD_STRUCT_ {
455         u8      cmdclass;
456         u16     value;
457         u8      index;
458 }IOCMD_STRUCT;
459
460 struct rf_reg_param {
461         u32 path;
462         u32 offset;
463         u32 value;
464 };
465
466 struct bb_reg_param {
467         u32 offset;
468         u32 value;
469 };
470
471 typedef struct _MP_FIRMWARE {
472         FIRMWARE_SOURCE eFWSource;
473 #ifdef CONFIG_EMBEDDED_FWIMG
474         u8*             szFwBuffer;
475 #else
476         u8                      szFwBuffer[0x8000];
477 #endif
478         u32             ulFwLength;
479 } RT_MP_FIRMWARE, *PRT_MP_FIRMWARE;
480
481
482
483
484 //=======================================================================
485
486 #define LOWER   _TRUE
487 #define RAISE   _FALSE
488
489 /* Hardware Registers */
490 #if 0
491 #if 0
492 #define IOCMD_CTRL_REG                  0x102502C0
493 #define IOCMD_DATA_REG                  0x102502C4
494 #else
495 #define IOCMD_CTRL_REG                  0x10250370
496 #define IOCMD_DATA_REG                  0x10250374
497 #endif
498
499 #define IOCMD_GET_THERMAL_METER         0xFD000028
500
501 #define IOCMD_CLASS_BB_RF               0xF0
502 #define IOCMD_BB_READ_IDX               0x00
503 #define IOCMD_BB_WRITE_IDX              0x01
504 #define IOCMD_RF_READ_IDX               0x02
505 #define IOCMD_RF_WRIT_IDX               0x03
506 #endif
507 #define BB_REG_BASE_ADDR                0x800
508
509 /* MP variables */
510 #if 0
511 #define _2MAC_MODE_     0
512 #define _LOOPBOOK_MODE_ 1
513 #endif
514 typedef enum _MP_MODE_ {
515         MP_OFF,
516         MP_ON,
517         MP_ERR,
518         MP_CONTINUOUS_TX,
519         MP_SINGLE_CARRIER_TX,
520         MP_CARRIER_SUPPRISSION_TX,
521         MP_SINGLE_TONE_TX,
522         MP_PACKET_TX,
523         MP_PACKET_RX
524 } MP_MODE;
525
526
527 #define MAX_RF_PATH_NUMS        RF_PATH_MAX
528
529
530 extern u8 mpdatarate[NumRates];
531
532 /* MP set force data rate base on the definition. */
533 typedef enum _MPT_RATE_INDEX
534 {
535         /* CCK rate. */
536         MPT_RATE_1M =0 ,        /* 0 */
537         MPT_RATE_2M,
538         MPT_RATE_55M,
539         MPT_RATE_11M,   /* 3 */
540
541         /* OFDM rate. */
542         MPT_RATE_6M,    /* 4 */
543         MPT_RATE_9M,
544         MPT_RATE_12M,
545         MPT_RATE_18M,
546         MPT_RATE_24M,
547         MPT_RATE_36M,
548         MPT_RATE_48M,
549         MPT_RATE_54M,   /* 11 */
550
551         /* HT rate. */
552         MPT_RATE_MCS0,  /* 12 */
553         MPT_RATE_MCS1,
554         MPT_RATE_MCS2,
555         MPT_RATE_MCS3,
556         MPT_RATE_MCS4,
557         MPT_RATE_MCS5,
558         MPT_RATE_MCS6,
559         MPT_RATE_MCS7,  /* 19 */
560         MPT_RATE_MCS8,
561         MPT_RATE_MCS9,
562         MPT_RATE_MCS10,
563         MPT_RATE_MCS11,
564         MPT_RATE_MCS12,
565         MPT_RATE_MCS13,
566         MPT_RATE_MCS14,
567         MPT_RATE_MCS15, /* 27 */
568         MPT_RATE_MCS16,
569         MPT_RATE_MCS17, // #29
570         MPT_RATE_MCS18,
571         MPT_RATE_MCS19,
572         MPT_RATE_MCS20,
573         MPT_RATE_MCS21,
574         MPT_RATE_MCS22, // #34
575         MPT_RATE_MCS23,
576         MPT_RATE_MCS24,
577         MPT_RATE_MCS25,
578         MPT_RATE_MCS26,
579         MPT_RATE_MCS27, // #39
580         MPT_RATE_MCS28, // #40
581         MPT_RATE_MCS29, // #41
582         MPT_RATE_MCS30, // #42
583         MPT_RATE_MCS31, // #43
584         /* VHT rate. Total: 20*/
585         MPT_RATE_VHT1SS_MCS0,//  #44
586         MPT_RATE_VHT1SS_MCS1, // #
587         MPT_RATE_VHT1SS_MCS2,
588         MPT_RATE_VHT1SS_MCS3,
589         MPT_RATE_VHT1SS_MCS4,
590         MPT_RATE_VHT1SS_MCS5,
591         MPT_RATE_VHT1SS_MCS6, // #
592         MPT_RATE_VHT1SS_MCS7,
593         MPT_RATE_VHT1SS_MCS8,
594         MPT_RATE_VHT1SS_MCS9, //#53
595         MPT_RATE_VHT2SS_MCS0, //#54
596         MPT_RATE_VHT2SS_MCS1, 
597         MPT_RATE_VHT2SS_MCS2,
598         MPT_RATE_VHT2SS_MCS3,
599         MPT_RATE_VHT2SS_MCS4,
600         MPT_RATE_VHT2SS_MCS5,
601         MPT_RATE_VHT2SS_MCS6,
602         MPT_RATE_VHT2SS_MCS7,
603         MPT_RATE_VHT2SS_MCS8,
604         MPT_RATE_VHT2SS_MCS9, //#63
605         MPT_RATE_VHT3SS_MCS0,
606         MPT_RATE_VHT3SS_MCS1, 
607         MPT_RATE_VHT3SS_MCS2,
608         MPT_RATE_VHT3SS_MCS3,
609         MPT_RATE_VHT3SS_MCS4,
610         MPT_RATE_VHT3SS_MCS5,
611         MPT_RATE_VHT3SS_MCS6, // #126
612         MPT_RATE_VHT3SS_MCS7,
613         MPT_RATE_VHT3SS_MCS8,
614         MPT_RATE_VHT3SS_MCS9,
615         MPT_RATE_VHT4SS_MCS0,
616         MPT_RATE_VHT4SS_MCS1, // #131
617         MPT_RATE_VHT4SS_MCS2,
618         MPT_RATE_VHT4SS_MCS3,
619         MPT_RATE_VHT4SS_MCS4,
620         MPT_RATE_VHT4SS_MCS5,
621         MPT_RATE_VHT4SS_MCS6, // #136
622         MPT_RATE_VHT4SS_MCS7,
623         MPT_RATE_VHT4SS_MCS8,
624         MPT_RATE_VHT4SS_MCS9,
625         MPT_RATE_LAST
626 }MPT_RATE_E, *PMPT_RATE_E;
627
628 #define MAX_TX_PWR_INDEX_N_MODE 64      // 0x3F
629
630 typedef enum _POWER_MODE_ {
631         POWER_LOW = 0,
632         POWER_NORMAL
633 }POWER_MODE;
634
635 // The following enumeration is used to define the value of Reg0xD00[30:28] or JaguarReg0x914[18:16].
636 typedef enum _OFDM_TX_MODE {
637         OFDM_ALL_OFF            = 0,    
638         OFDM_ContinuousTx       = 1,
639         OFDM_SingleCarrier      = 2,
640         OFDM_SingleTone         = 4,
641 } OFDM_TX_MODE;
642
643
644 #define RX_PKT_BROADCAST        1
645 #define RX_PKT_DEST_ADDR        2
646 #define RX_PKT_PHY_MATCH        3
647
648 #if 0
649 #define RPTMaxCount 0x000FFFFF;
650
651 // parameter 1 : BitMask
652 //      bit 0  : OFDM PPDU
653 //      bit 1  : OFDM False Alarm
654 //      bit 2  : OFDM MPDU OK
655 //      bit 3  : OFDM MPDU Fail
656 //      bit 4  : CCK PPDU
657 //      bit 5  : CCK False Alarm
658 //      bit 6  : CCK MPDU ok
659 //      bit 7  : CCK MPDU fail
660 //      bit 8  : HT PPDU counter
661 //      bit 9  : HT false alarm
662 //      bit 10 : HT MPDU total
663 //      bit 11 : HT MPDU OK
664 //      bit 12 : HT MPDU fail
665 //      bit 15 : RX full drop
666 typedef enum _RXPHY_BITMASK_
667 {
668         OFDM_PPDU_BIT = 0,
669         OFDM_FALSE_BIT,
670         OFDM_MPDU_OK_BIT,
671         OFDM_MPDU_FAIL_BIT,
672         CCK_PPDU_BIT,
673         CCK_FALSE_BIT,
674         CCK_MPDU_OK_BIT,
675         CCK_MPDU_FAIL_BIT,
676         HT_PPDU_BIT,
677         HT_FALSE_BIT,
678         HT_MPDU_BIT,
679         HT_MPDU_OK_BIT,
680         HT_MPDU_FAIL_BIT,
681 } RXPHY_BITMASK;
682 #endif
683
684 #define Mac_OFDM_OK                     0x00000000
685 #define Mac_OFDM_Fail                   0x10000000
686 #define Mac_OFDM_FasleAlarm     0x20000000
687 #define Mac_CCK_OK                              0x30000000
688 #define Mac_CCK_Fail                    0x40000000
689 #define Mac_CCK_FasleAlarm              0x50000000
690 #define Mac_HT_OK                               0x60000000
691 #define Mac_HT_Fail                     0x70000000
692 #define Mac_HT_FasleAlarm               0x90000000
693 #define Mac_DropPacket                  0xA0000000
694
695 typedef enum _ENCRY_CTRL_STATE_ {
696         HW_CONTROL,             //hw encryption& decryption
697         SW_CONTROL,             //sw encryption& decryption
698         HW_ENCRY_SW_DECRY,      //hw encryption & sw decryption
699         SW_ENCRY_HW_DECRY       //sw encryption & hw decryption
700 }ENCRY_CTRL_STATE;
701
702 typedef enum    _MPT_TXPWR_DEF{
703         MPT_CCK,
704         MPT_OFDM, // L and HT OFDM
705         MPT_VHT_OFDM
706 }MPT_TXPWR_DEF;
707
708 #ifdef CONFIG_RF_GAIN_OFFSET
709
710 #if defined(CONFIG_RTL8723A)
711         #define         REG_RF_BB_GAIN_OFFSET_CCK       0x0d
712         #define         REG_RF_BB_GAIN_OFFSET_OFDM      0x0e
713         #define         RF_GAIN_OFFSET_MASK     0xfffff
714 #elif defined(CONFIG_RTL8723B)
715         #define         REG_RF_BB_GAIN_OFFSET   0x7f
716         #define         RF_GAIN_OFFSET_MASK     0xfffff
717 #elif defined(CONFIG_RTL8188E)
718         #define         REG_RF_BB_GAIN_OFFSET   0x55
719         #define         RF_GAIN_OFFSET_MASK     0xfffff
720 #else
721         #define         REG_RF_BB_GAIN_OFFSET   0x55
722         #define         RF_GAIN_OFFSET_MASK     0xfffff
723 #endif  //CONFIG_RTL8723A
724
725 #endif //CONFIG_RF_GAIN_OFFSET
726
727 //=======================================================================
728 //extern struct mp_xmit_frame *alloc_mp_xmitframe(struct mp_priv *pmp_priv);
729 //extern int free_mp_xmitframe(struct xmit_priv *pxmitpriv, struct mp_xmit_frame *pmp_xmitframe);
730
731 extern s32 init_mp_priv(PADAPTER padapter);
732 extern void free_mp_priv(struct mp_priv *pmp_priv);
733 extern s32 MPT_InitializeAdapter(PADAPTER padapter, u8 Channel);
734 extern void MPT_DeInitAdapter(PADAPTER padapter);
735 extern s32 mp_start_test(PADAPTER padapter);
736 extern void mp_stop_test(PADAPTER padapter);
737
738 //=======================================================================
739 //extern void   IQCalibrateBcut(PADAPTER pAdapter);
740
741 //extern u32    bb_reg_read(PADAPTER Adapter, u16 offset);
742 //extern u8     bb_reg_write(PADAPTER Adapter, u16 offset, u32 value);
743 //extern u32    rf_reg_read(PADAPTER Adapter, u8 path, u8 offset);
744 //extern u8     rf_reg_write(PADAPTER Adapter, u8 path, u8 offset, u32 value);
745
746 //extern u32    get_bb_reg(PADAPTER Adapter, u16 offset, u32 bitmask);
747 //extern u8     set_bb_reg(PADAPTER Adapter, u16 offset, u32 bitmask, u32 value);
748 //extern u32    get_rf_reg(PADAPTER Adapter, u8 path, u8 offset, u32 bitmask);
749 //extern u8     set_rf_reg(PADAPTER Adapter, u8 path, u8 offset, u32 bitmask, u32 value);
750
751 extern u32 _read_rfreg(PADAPTER padapter, u8 rfpath, u32 addr, u32 bitmask);
752 extern void _write_rfreg(PADAPTER padapter, u8 rfpath, u32 addr, u32 bitmask, u32 val);
753
754 extern u32 read_macreg(_adapter *padapter, u32 addr, u32 sz);
755 extern void write_macreg(_adapter *padapter, u32 addr, u32 val, u32 sz);
756 extern u32 read_bbreg(_adapter *padapter, u32 addr, u32 bitmask);
757 extern void write_bbreg(_adapter *padapter, u32 addr, u32 bitmask, u32 val);
758 extern u32 read_rfreg(PADAPTER padapter, u8 rfpath, u32 addr);
759 extern void write_rfreg(PADAPTER padapter, u8 rfpath, u32 addr, u32 val);
760
761 extern void     SetChannel(PADAPTER pAdapter);
762 extern void     SetBandwidth(PADAPTER pAdapter);
763 extern int SetTxPower(PADAPTER pAdapter);
764 extern void     SetAntennaPathPower(PADAPTER pAdapter);
765 //extern void   SetTxAGCOffset(PADAPTER pAdapter, u32 ulTxAGCOffset);
766 extern void     SetDataRate(PADAPTER pAdapter);
767
768 extern void     SetAntenna(PADAPTER pAdapter);
769
770 //extern void   SetCrystalCap(PADAPTER pAdapter);
771
772 extern s32      SetThermalMeter(PADAPTER pAdapter, u8 target_ther);
773 extern void     GetThermalMeter(PADAPTER pAdapter, u8 *value);
774
775 extern void     SetContinuousTx(PADAPTER pAdapter, u8 bStart);
776 extern void     SetSingleCarrierTx(PADAPTER pAdapter, u8 bStart);
777 extern void     SetSingleToneTx(PADAPTER pAdapter, u8 bStart);
778 extern void     SetCarrierSuppressionTx(PADAPTER pAdapter, u8 bStart);
779 extern void PhySetTxPowerLevel(PADAPTER pAdapter);
780
781 extern void     fill_txdesc_for_mp(PADAPTER padapter, u8 *ptxdesc);
782 extern void     SetPacketTx(PADAPTER padapter);
783 extern void     SetPacketRx(PADAPTER pAdapter, u8 bStartRx);
784
785 extern void     ResetPhyRxPktCount(PADAPTER pAdapter);
786 extern u32      GetPhyRxPktReceived(PADAPTER pAdapter);
787 extern u32      GetPhyRxPktCRC32Error(PADAPTER pAdapter);
788
789 extern s32      SetPowerTracking(PADAPTER padapter, u8 enable);
790 extern void     GetPowerTracking(PADAPTER padapter, u8 *enable);
791
792 extern u32      mp_query_psd(PADAPTER pAdapter, u8 *data);
793
794
795 extern void Hal_SetAntenna(PADAPTER pAdapter);
796 extern void Hal_SetBandwidth(PADAPTER pAdapter);
797
798 extern void Hal_SetTxPower(PADAPTER pAdapter);
799 extern void Hal_SetCarrierSuppressionTx(PADAPTER pAdapter, u8 bStart);
800 extern void Hal_SetSingleToneTx ( PADAPTER pAdapter , u8 bStart );
801 extern void Hal_SetSingleCarrierTx (PADAPTER pAdapter, u8 bStart);
802 extern void Hal_SetContinuousTx (PADAPTER pAdapter, u8 bStart);
803 extern void Hal_SetBandwidth(PADAPTER pAdapter);
804
805 extern void Hal_SetDataRate(PADAPTER pAdapter);
806 extern void Hal_SetChannel(PADAPTER pAdapter);
807 extern void Hal_SetAntennaPathPower(PADAPTER pAdapter);
808 extern s32 Hal_SetThermalMeter(PADAPTER pAdapter, u8 target_ther);
809 extern s32 Hal_SetPowerTracking(PADAPTER padapter, u8 enable);
810 extern void Hal_GetPowerTracking(PADAPTER padapter, u8 * enable);
811 extern void Hal_GetThermalMeter(PADAPTER pAdapter, u8 *value);
812 extern void Hal_mpt_SwitchRfSetting(PADAPTER pAdapter);
813 extern void Hal_MPT_CCKTxPowerAdjust(PADAPTER Adapter, BOOLEAN bInCH14);
814 extern void Hal_MPT_CCKTxPowerAdjustbyIndex(PADAPTER pAdapter, BOOLEAN beven);
815 extern void Hal_SetCCKTxPower(PADAPTER pAdapter, u8 * TxPower);
816 extern void Hal_SetOFDMTxPower(PADAPTER pAdapter, u8 * TxPower);
817 extern void Hal_TriggerRFThermalMeter(PADAPTER pAdapter);
818 extern u8 Hal_ReadRFThermalMeter(PADAPTER pAdapter);
819 extern void Hal_SetCCKContinuousTx(PADAPTER pAdapter, u8 bStart);
820 extern void Hal_SetOFDMContinuousTx(PADAPTER pAdapter, u8 bStart);
821 extern void Hal_ProSetCrystalCap (PADAPTER pAdapter , u32 CrystalCapVal);
822 //extern void _rtw_mp_xmit_priv(struct xmit_priv *pxmitpriv);
823 extern void MP_PHY_SetRFPathSwitch(PADAPTER pAdapter ,BOOLEAN bMain);
824 extern ULONG mpt_ProQueryCalTxPower(PADAPTER    pAdapter,u8 RfPath);
825 extern void MPT_PwrCtlDM(PADAPTER padapter, u32 bstart);
826 extern u8 MptToMgntRate(u32     MptRateIdx);
827 extern u8 rtw_mpRateParseFunc(PADAPTER pAdapter, u8 *targetStr);
828
829 #endif //_RTW_MP_H_
830