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