Linux-libre 5.7.3-gnu
[librecmc/linux-libre.git] / drivers / staging / rtl8188eu / include / odm.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /******************************************************************************
3  *
4  * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
5  *
6  ******************************************************************************/
7
8
9 #ifndef __HALDMOUTSRC_H__
10 #define __HALDMOUTSRC_H__
11
12 /*  Definition */
13 /*  Define all team support ability. */
14
15 /*  Define for all teams. Please Define the constant in your precomp header. */
16
17 /* define               DM_ODM_SUPPORT_AP                       0 */
18 /* define               DM_ODM_SUPPORT_ADSL                     0 */
19 /* define               DM_ODM_SUPPORT_CE                       0 */
20 /* define               DM_ODM_SUPPORT_MP                       1 */
21
22 /*  Define ODM SW team support flag. */
23
24 /*  Antenna Switch Relative Definition. */
25
26 /*  Add new function SwAntDivCheck8192C(). */
27 /*  This is the main function of Antenna diversity function before link. */
28 /*  Mainly, it just retains last scan result and scan again. */
29 /*  After that, it compares the scan result to see which one gets better
30  *  RSSI. It selects antenna with better receiving power and returns better
31  *  scan result.
32  */
33
34 #define TP_MODE                 0
35 #define RSSI_MODE               1
36 #define TRAFFIC_LOW             0
37 #define TRAFFIC_HIGH            1
38
39 /* 3 Tx Power Tracking */
40 /* 3============================================================ */
41 #define         DPK_DELTA_MAPPING_NUM   13
42 #define         index_mapping_HP_NUM    15
43
44
45 /*  */
46 /* 3 PSD Handler */
47 /* 3============================================================ */
48
49 #define AFH_PSD         1       /* 0:normal PSD scan, 1: only do 20 pts PSD */
50 #define MODE_40M        0       /* 0:20M, 1:40M */
51 #define PSD_TH2         3
52 #define PSD_CHM         20   /*  Minimum channel number for BT AFH */
53 #define SIR_STEP_SIZE   3
54 #define Smooth_Size_1   5
55 #define Smooth_TH_1     3
56 #define Smooth_Size_2   10
57 #define Smooth_TH_2     4
58 #define Smooth_Size_3   20
59 #define Smooth_TH_3     4
60 #define Smooth_Step_Size 5
61 #define Adaptive_SIR    1
62 #define PSD_RESCAN      4
63 #define PSD_SCAN_INTERVAL       700 /* ms */
64
65 /* 8723A High Power IGI Setting */
66 #define DM_DIG_HIGH_PWR_IGI_LOWER_BOUND 0x22
67 #define DM_DIG_Gmode_HIGH_PWR_IGI_LOWER_BOUND 0x28
68 #define DM_DIG_HIGH_PWR_THRESHOLD       0x3a
69
70 /*  LPS define */
71 #define DM_DIG_FA_TH0_LPS               4 /*  4 in lps */
72 #define DM_DIG_FA_TH1_LPS               15 /*  15 lps */
73 #define DM_DIG_FA_TH2_LPS               30 /*  30 lps */
74 #define RSSI_OFFSET_DIG                 0x05;
75
76 struct rtw_dig {
77         u8              Dig_Enable_Flag;
78         u8              Dig_Ext_Port_Stage;
79
80         int             RssiLowThresh;
81         int             RssiHighThresh;
82
83         u32             FALowThresh;
84         u32             FAHighThresh;
85
86         u8              CurSTAConnectState;
87         u8              PreSTAConnectState;
88         u8              CurMultiSTAConnectState;
89
90         u8              PreIGValue;
91         u8              CurIGValue;
92         u8              BackupIGValue;
93
94         s8              BackoffVal;
95         s8              BackoffVal_range_max;
96         s8              BackoffVal_range_min;
97         u8              rx_gain_range_max;
98         u8              rx_gain_range_min;
99         u8              Rssi_val_min;
100
101         u8              PreCCK_CCAThres;
102         u8              CurCCK_CCAThres;
103         u8              PreCCKPDState;
104         u8              CurCCKPDState;
105
106         u8              LargeFAHit;
107         u8              ForbiddenIGI;
108         u32             Recover_cnt;
109
110         u8              DIG_Dynamic_MIN_0;
111         u8              DIG_Dynamic_MIN_1;
112         bool            bMediaConnect_0;
113         bool            bMediaConnect_1;
114
115         u32             AntDiv_RSSI_max;
116         u32             RSSI_max;
117 };
118
119 struct rtl_ps {
120         u8              PreCCAState;
121         u8              CurCCAState;
122
123         u8              PreRFState;
124         u8              CurRFState;
125
126         int                 Rssi_val_min;
127
128         u8              initialize;
129         u32             Reg874, RegC70, Reg85C, RegA74;
130
131 };
132
133 struct false_alarm_stats {
134         u32     Cnt_Parity_Fail;
135         u32     Cnt_Rate_Illegal;
136         u32     Cnt_Crc8_fail;
137         u32     Cnt_Mcs_fail;
138         u32     Cnt_Ofdm_fail;
139         u32     Cnt_Cck_fail;
140         u32     Cnt_all;
141         u32     Cnt_Fast_Fsync;
142         u32     Cnt_SB_Search_fail;
143         u32     Cnt_OFDM_CCA;
144         u32     Cnt_CCK_CCA;
145         u32     Cnt_CCA_all;
146         u32     Cnt_BW_USC;     /* Gary */
147         u32     Cnt_BW_LSC;     /* Gary */
148 };
149
150 struct rx_hpc {
151         u8              RXHP_flag;
152         u8              PSD_func_trigger;
153         u8              PSD_bitmap_RXHP[80];
154         u8              Pre_IGI;
155         u8              Cur_IGI;
156         u8              Pre_pw_th;
157         u8              Cur_pw_th;
158         bool            First_time_enter;
159         bool            RXHP_enable;
160         u8              TP_Mode;
161         struct timer_list PSDTimer;
162 };
163
164 #define ASSOCIATE_ENTRY_NUM     32 /*  Max size of AsocEntry[]. */
165 #define ODM_ASSOCIATE_ENTRY_NUM ASSOCIATE_ENTRY_NUM
166
167 /*  This indicates two different steps. */
168 /*  In SWAW_STEP_PEAK, driver needs to switch antenna and listen to
169  *  the signal on the air.
170  */
171 /*  In SWAW_STEP_DETERMINE, driver just compares the signal captured in
172  *  SWAW_STEP_PEAK with original RSSI to determine if it is necessary to
173  *  switch antenna.
174  */
175
176 #define SWAW_STEP_PEAK          0
177 #define SWAW_STEP_DETERMINE     1
178
179 #define TP_MODE                 0
180 #define RSSI_MODE               1
181 #define TRAFFIC_LOW             0
182 #define TRAFFIC_HIGH            1
183
184 struct sw_ant_switch {
185         u8      try_flag;
186         s32     PreRSSI;
187         u8      CurAntenna;
188         u8      PreAntenna;
189         u8      RSSI_Trying;
190         u8      TestMode;
191         u8      bTriggerAntennaSwitch;
192         u8      SelectAntennaMap;
193         u8      RSSI_target;
194
195         /*  Before link Antenna Switch check */
196         u8      SWAS_NoLink_State;
197         u32     SWAS_NoLink_BK_Reg860;
198         bool    ANTA_ON;        /* To indicate Ant A is or not */
199         bool    ANTB_ON;        /* To indicate Ant B is on or not */
200
201         s32     RSSI_sum_A;
202         s32     RSSI_sum_B;
203         s32     RSSI_cnt_A;
204         s32     RSSI_cnt_B;
205         u64     lastTxOkCnt;
206         u64     lastRxOkCnt;
207         u64     TXByteCnt_A;
208         u64     TXByteCnt_B;
209         u64     RXByteCnt_A;
210         u64     RXByteCnt_B;
211         u8      TrafficLoad;
212         struct timer_list SwAntennaSwitchTimer;
213         /* Hybrid Antenna Diversity */
214         u32     CCK_Ant1_Cnt[ASSOCIATE_ENTRY_NUM];
215         u32     CCK_Ant2_Cnt[ASSOCIATE_ENTRY_NUM];
216         u32     OFDM_Ant1_Cnt[ASSOCIATE_ENTRY_NUM];
217         u32     OFDM_Ant2_Cnt[ASSOCIATE_ENTRY_NUM];
218         u32     RSSI_Ant1_Sum[ASSOCIATE_ENTRY_NUM];
219         u32     RSSI_Ant2_Sum[ASSOCIATE_ENTRY_NUM];
220         u8      TxAnt[ASSOCIATE_ENTRY_NUM];
221         u8      TargetSTA;
222         u8      antsel;
223         u8      RxIdleAnt;
224 };
225
226 struct edca_turbo {
227         bool bCurrentTurboEDCA;
228         bool bIsCurRDLState;
229         u32     prv_traffic_idx; /*  edca turbo */
230 };
231
232 struct odm_rate_adapt {
233         u8      Type;           /*  DM_Type_ByFW/DM_Type_ByDriver */
234         u8      HighRSSIThresh; /*  if RSSI > HighRSSIThresh    => RATRState is DM_RATR_STA_HIGH */
235         u8      LowRSSIThresh;  /*  if RSSI <= LowRSSIThresh    => RATRState is DM_RATR_STA_LOW */
236         u8      RATRState;      /*  Current RSSI level, DM_RATR_STA_HIGH/DM_RATR_STA_MIDDLE/DM_RATR_STA_LOW */
237         u32     LastRATR;       /*  RATR Register Content */
238 };
239
240 #define IQK_MAC_REG_NUM         4
241 #define IQK_ADDA_REG_NUM        16
242 #define IQK_BB_REG_NUM          9
243 #define HP_THERMAL_NUM          8
244
245 #define AVG_THERMAL_NUM         8
246 #define IQK_Matrix_REG_NUM      8
247 #define IQK_Matrix_Settings_NUM 1+24+21
248
249 #define DM_Type_ByFWi           0
250 #define DM_Type_ByDriver        1
251
252 /*  Declare for common info */
253
254 struct odm_phy_status_info {
255         u8      RxPWDBAll;
256         u8      SignalQuality;   /*  in 0-100 index. */
257         u8      RxMIMOSignalQuality[MAX_PATH_NUM_92CS]; /* EVM */
258         u8      RxMIMOSignalStrength[MAX_PATH_NUM_92CS];/*  in 0~100 index */
259         s8      RxPower; /*  in dBm Translate from PWdB */
260         s8      RecvSignalPower;/*  Real power in dBm for this packet, no
261                                  * beautification and aggregation. Keep this raw
262                                  * info to be used for the other procedures.
263                                  */
264         u8      BTRxRSSIPercentage;
265         u8      SignalStrength; /*  in 0-100 index. */
266         u8      RxPwr[MAX_PATH_NUM_92CS];/* per-path's pwdb */
267         u8      RxSNR[MAX_PATH_NUM_92CS];/* per-path's SNR */
268 };
269
270 struct odm_phy_dbg_info {
271         /* ODM Write,debug info */
272         s8      RxSNRdB[MAX_PATH_NUM_92CS];
273         u64     NumQryPhyStatus;
274         u64     NumQryPhyStatusCCK;
275         u64     NumQryPhyStatusOFDM;
276         /* Others */
277         s32     RxEVM[MAX_PATH_NUM_92CS];
278 };
279
280 struct odm_per_pkt_info {
281         s8      Rate;
282         u8      StationID;
283         bool    bPacketMatchBSSID;
284         bool    bPacketToSelf;
285         bool    bPacketBeacon;
286 };
287
288 struct odm_mac_status_info {
289         u8      test;
290 };
291
292 enum odm_ability {
293         /*  BB Team */
294         ODM_DIG                 = 0x00000001,
295         ODM_HIGH_POWER          = 0x00000002,
296         ODM_CCK_CCA_TH          = 0x00000004,
297         ODM_FA_STATISTICS       = 0x00000008,
298         ODM_RAMASK              = 0x00000010,
299         ODM_RSSI_MONITOR        = 0x00000020,
300         ODM_SW_ANTDIV           = 0x00000040,
301         ODM_HW_ANTDIV           = 0x00000080,
302         ODM_BB_PWRSV            = 0x00000100,
303         ODM_2TPATHDIV           = 0x00000200,
304         ODM_1TPATHDIV           = 0x00000400,
305         ODM_PSD2AFH             = 0x00000800
306 };
307
308 /*  2011/10/20 MH Define Common info enum for all team. */
309
310 enum odm_common_info_def {
311         /*  Fixed value: */
312
313         /* HOOK BEFORE REG INIT----------- */
314         ODM_CMNINFO_PLATFORM = 0,
315         ODM_CMNINFO_ABILITY,            /* ODM_ABILITY_E */
316         ODM_CMNINFO_INTERFACE,          /* ODM_INTERFACE_E */
317         ODM_CMNINFO_MP_TEST_CHIP,
318         ODM_CMNINFO_IC_TYPE,            /* ODM_IC_TYPE_E */
319         ODM_CMNINFO_CUT_VER,            /* ODM_CUT_VERSION_E */
320         ODM_CMNINFO_RF_TYPE,            /* ODM_RF_PATH_E or ODM_RF_TYPE_E? */
321         ODM_CMNINFO_BOARD_TYPE,         /* ODM_BOARD_TYPE_E */
322         ODM_CMNINFO_EXT_LNA,            /* true */
323         ODM_CMNINFO_EXT_PA,
324         ODM_CMNINFO_EXT_TRSW,
325         ODM_CMNINFO_PATCH_ID,           /* CUSTOMER ID */
326         ODM_CMNINFO_BINHCT_TEST,
327         ODM_CMNINFO_BWIFI_TEST,
328         ODM_CMNINFO_SMART_CONCURRENT,
329         /* HOOK BEFORE REG INIT-----------  */
330
331         /*  Dynamic value: */
332 /*  POINTER REFERENCE-----------  */
333         ODM_CMNINFO_MAC_PHY_MODE,       /*  ODM_MAC_PHY_MODE_E */
334         ODM_CMNINFO_TX_UNI,
335         ODM_CMNINFO_RX_UNI,
336         ODM_CMNINFO_WM_MODE,            /*  ODM_WIRELESS_MODE_E */
337         ODM_CMNINFO_BAND,               /*  ODM_BAND_TYPE_E */
338         ODM_CMNINFO_SEC_CHNL_OFFSET,    /*  ODM_SEC_CHNL_OFFSET_E */
339         ODM_CMNINFO_SEC_MODE,           /*  ODM_SECURITY_E */
340         ODM_CMNINFO_BW,                 /*  ODM_BW_E */
341         ODM_CMNINFO_CHNL,
342
343         ODM_CMNINFO_DMSP_GET_VALUE,
344         ODM_CMNINFO_BUDDY_ADAPTOR,
345         ODM_CMNINFO_DMSP_IS_MASTER,
346         ODM_CMNINFO_SCAN,
347         ODM_CMNINFO_POWER_SAVING,
348         ODM_CMNINFO_ONE_PATH_CCA,       /*  ODM_CCA_PATH_E */
349         ODM_CMNINFO_DRV_STOP,
350         ODM_CMNINFO_PNP_IN,
351         ODM_CMNINFO_INIT_ON,
352         ODM_CMNINFO_ANT_TEST,
353         ODM_CMNINFO_NET_CLOSED,
354         ODM_CMNINFO_MP_MODE,
355 /*  POINTER REFERENCE----------- */
356
357 /* CALL BY VALUE------------- */
358         ODM_CMNINFO_WIFI_DIRECT,
359         ODM_CMNINFO_WIFI_DISPLAY,
360         ODM_CMNINFO_LINK,
361         ODM_CMNINFO_RSSI_MIN,
362         ODM_CMNINFO_DBG_COMP,                   /*  u64 */
363         ODM_CMNINFO_DBG_LEVEL,                  /*  u32 */
364         ODM_CMNINFO_RA_THRESHOLD_HIGH,          /*  u8 */
365         ODM_CMNINFO_RA_THRESHOLD_LOW,           /*  u8 */
366         ODM_CMNINFO_RF_ANTENNA_TYPE,            /*  u8 */
367         ODM_CMNINFO_BT_DISABLED,
368         ODM_CMNINFO_BT_OPERATION,
369         ODM_CMNINFO_BT_DIG,
370         ODM_CMNINFO_BT_BUSY,                    /* Check Bt is using or not */
371         ODM_CMNINFO_BT_DISABLE_EDCA,
372 /* CALL BY VALUE-------------*/
373
374         /*  Dynamic ptr array hook itms. */
375         ODM_CMNINFO_STA_STATUS,
376         ODM_CMNINFO_PHY_STATUS,
377         ODM_CMNINFO_MAC_STATUS,
378         ODM_CMNINFO_MAX,
379 };
380
381 /*  2011/10/20 MH Define ODM support ability.  ODM_CMNINFO_ABILITY */
382
383 enum odm_ability_def {
384         /*  BB ODM section BIT 0-15 */
385         ODM_BB_DIG                      = BIT(0),
386         ODM_BB_RA_MASK                  = BIT(1),
387         ODM_BB_DYNAMIC_TXPWR            = BIT(2),
388         ODM_BB_FA_CNT                   = BIT(3),
389         ODM_BB_RSSI_MONITOR             = BIT(4),
390         ODM_BB_CCK_PD                   = BIT(5),
391         ODM_BB_ANT_DIV                  = BIT(6),
392         ODM_BB_PWR_SAVE                 = BIT(7),
393         ODM_BB_PWR_TRA                  = BIT(8),
394         ODM_BB_RATE_ADAPTIVE            = BIT(9),
395         ODM_BB_PATH_DIV                 = BIT(10),
396         ODM_BB_PSD                      = BIT(11),
397         ODM_BB_RXHP                     = BIT(12),
398
399         /*  MAC DM section BIT 16-23 */
400         ODM_MAC_EDCA_TURBO              = BIT(16),
401         ODM_MAC_EARLY_MODE              = BIT(17),
402
403         /*  RF ODM section BIT 24-31 */
404         ODM_RF_TX_PWR_TRACK             = BIT(24),
405         ODM_RF_RX_GAIN_TRACK            = BIT(25),
406         ODM_RF_CALIBRATION              = BIT(26),
407 };
408
409 #define ODM_RTL8188E            BIT(4)
410
411 /* ODM_CMNINFO_CUT_VER */
412 enum odm_cut_version {
413         ODM_CUT_A       =       1,
414         ODM_CUT_B       =       2,
415         ODM_CUT_C       =       3,
416         ODM_CUT_D       =       4,
417         ODM_CUT_E       =       5,
418         ODM_CUT_F       =       6,
419         ODM_CUT_TEST    =       7,
420 };
421
422 /*  ODM_CMNINFO_RF_TYPE */
423 /*  For example 1T2R (A+AB = BIT0|BIT4|BIT5) */
424 enum odm_rf_path {
425         ODM_RF_TX_A     =       BIT(0),
426         ODM_RF_TX_B     =       BIT(1),
427         ODM_RF_TX_C     =       BIT(2),
428         ODM_RF_TX_D     =       BIT(3),
429         ODM_RF_RX_A     =       BIT(4),
430         ODM_RF_RX_B     =       BIT(5),
431         ODM_RF_RX_C     =       BIT(6),
432         ODM_RF_RX_D     =       BIT(7),
433 };
434
435 enum odm_rf_type {
436         ODM_1T1R        =       0,
437         ODM_1T2R        =       1,
438         ODM_2T2R        =       2,
439         ODM_2T3R        =       3,
440         ODM_2T4R        =       4,
441         ODM_3T3R        =       5,
442         ODM_3T4R        =       6,
443         ODM_4T4R        =       7,
444 };
445
446 /*  ODM Dynamic common info value definition */
447
448 enum odm_mac_phy_mode {
449         ODM_SMSP        = 0,
450         ODM_DMSP        = 1,
451         ODM_DMDP        = 2,
452 };
453
454 enum odm_bt_coexist {
455         ODM_BT_BUSY             = 1,
456         ODM_BT_ON               = 2,
457         ODM_BT_OFF              = 3,
458         ODM_BT_NONE             = 4,
459 };
460
461 /*  ODM_CMNINFO_OP_MODE */
462 enum odm_operation_mode {
463         ODM_NO_LINK             = BIT(0),
464         ODM_LINK                = BIT(1),
465         ODM_SCAN                = BIT(2),
466         ODM_POWERSAVE           = BIT(3),
467         ODM_AP_MODE             = BIT(4),
468         ODM_CLIENT_MODE         = BIT(5),
469         ODM_AD_HOC              = BIT(6),
470         ODM_WIFI_DIRECT         = BIT(7),
471         ODM_WIFI_DISPLAY        = BIT(8),
472 };
473
474 /*  ODM_CMNINFO_WM_MODE */
475 enum odm_wireless_mode {
476         ODM_WM_UNKNOWN  = 0x0,
477         ODM_WM_B        = BIT(0),
478         ODM_WM_G        = BIT(1),
479         ODM_WM_A        = BIT(2),
480         ODM_WM_N24G     = BIT(3),
481         ODM_WM_N5G      = BIT(4),
482         ODM_WM_AUTO     = BIT(5),
483         ODM_WM_AC       = BIT(6),
484 };
485
486 /*  ODM_CMNINFO_BAND */
487 enum odm_band_type {
488         ODM_BAND_2_4G   = BIT(0),
489         ODM_BAND_5G     = BIT(1),
490 };
491
492 /*  ODM_CMNINFO_SEC_CHNL_OFFSET */
493 enum odm_sec_chnl_offset {
494         ODM_DONT_CARE   = 0,
495         ODM_BELOW       = 1,
496         ODM_ABOVE       = 2
497 };
498
499 /*  ODM_CMNINFO_SEC_MODE */
500 enum odm_security {
501         ODM_SEC_OPEN            = 0,
502         ODM_SEC_WEP40           = 1,
503         ODM_SEC_TKIP            = 2,
504         ODM_SEC_RESERVE         = 3,
505         ODM_SEC_AESCCMP         = 4,
506         ODM_SEC_WEP104          = 5,
507         ODM_WEP_WPA_MIXED       = 6, /*  WEP + WPA */
508         ODM_SEC_SMS4            = 7,
509 };
510
511 /*  ODM_CMNINFO_BW */
512 enum odm_bw {
513         ODM_BW20M               = 0,
514         ODM_BW40M               = 1,
515         ODM_BW80M               = 2,
516         ODM_BW160M              = 3,
517         ODM_BW10M               = 4,
518 };
519
520 /*  ODM_CMNINFO_BOARD_TYPE */
521 enum odm_board_type {
522         ODM_BOARD_NORMAL        = 0,
523         ODM_BOARD_HIGHPWR       = 1,
524         ODM_BOARD_MINICARD      = 2,
525         ODM_BOARD_SLIM          = 3,
526         ODM_BOARD_COMBO         = 4,
527 };
528
529 /*  ODM_CMNINFO_ONE_PATH_CCA */
530 enum odm_cca_path {
531         ODM_CCA_2R              = 0,
532         ODM_CCA_1R_A            = 1,
533         ODM_CCA_1R_B            = 2,
534 };
535
536 struct odm_ra_info {
537         u8 RateID;
538         u32 RateMask;
539         u32 RAUseRate;
540         u8 RateSGI;
541         u8 RssiStaRA;
542         u8 PreRssiStaRA;
543         u8 SGIEnable;
544         u8 DecisionRate;
545         u8 PreRate;
546         u8 HighestRate;
547         u8 LowestRate;
548         u32 NscUp;
549         u32 NscDown;
550         u16 RTY[5];
551         u32 TOTAL;
552         u16 DROP;
553         u8 Active;
554         u16 RptTime;
555         u8 RAWaitingCounter;
556         u8 RAPendingCounter;
557         u8 PTActive;    /*  on or off */
558         u8 PTTryState;  /*  0 trying state, 1 for decision state */
559         u8 PTStage;     /*  0~6 */
560         u8 PTStopCount; /* Stop PT counter */
561         u8 PTPreRate;   /*  if rate change do PT */
562         u8 PTPreRssi;   /*  if RSSI change 5% do PT */
563         u8 PTModeSS;    /*  decide whitch rate should do PT */
564         u8 RAstage;     /*  StageRA, decide how many times RA will be done
565                          * between PT
566                          */
567         u8 PTSmoothFactor;
568 };
569
570 struct ijk_matrix_regs_set {
571         bool    bIQKDone;
572         s32     Value[1][IQK_Matrix_REG_NUM];
573 };
574
575 struct odm_rf_cal {
576         /* for tx power tracking */
577         u32     RegA24; /*  for TempCCK */
578         s32     RegE94;
579         s32     RegE9C;
580         s32     RegEB4;
581         s32     RegEBC;
582
583         u8      TXPowercount;
584         bool    bTXPowerTracking;
585         u8      TxPowerTrackControl; /* for mp mode, turn off txpwrtracking
586                                       * as default
587                                       */
588         u8      TM_Trigger;
589         u8      InternalPA5G[2];        /* pathA / pathB */
590
591         u8      ThermalMeter[2];    /* ThermalMeter, index 0 for RFIC0,
592                                      * and 1 for RFIC1
593                                      */
594         u8      ThermalValue;
595         u8      ThermalValue_LCK;
596         u8      ThermalValue_IQK;
597         u8      ThermalValue_DPK;
598         u8      ThermalValue_AVG[AVG_THERMAL_NUM];
599         u8      ThermalValue_AVG_index;
600         u8      ThermalValue_RxGain;
601         u8      ThermalValue_Crystal;
602         u8      ThermalValue_DPKstore;
603         u8      ThermalValue_DPKtrack;
604         bool    TxPowerTrackingInProgress;
605         bool    bDPKenable;
606
607         bool    bReloadtxpowerindex;
608         u8      bRfPiEnable;
609         u32     TXPowerTrackingCallbackCnt; /* cosa add for debug */
610
611         u8      bCCKinCH14;
612         u8      CCK_index;
613         u8      OFDM_index[2];
614         bool bDoneTxpower;
615
616         u8      ThermalValue_HP[HP_THERMAL_NUM];
617         u8      ThermalValue_HP_index;
618         struct ijk_matrix_regs_set IQKMatrixRegSetting[IQK_Matrix_Settings_NUM];
619
620         u8      Delta_IQK;
621         u8      Delta_LCK;
622
623         /* for IQK */
624         u32     RegC04;
625         u32     Reg874;
626         u32     RegC08;
627         u32     RegB68;
628         u32     RegB6C;
629         u32     Reg870;
630         u32     Reg860;
631         u32     Reg864;
632
633         bool    bIQKInitialized;
634         bool    bLCKInProgress;
635         bool    bAntennaDetected;
636         u32     ADDA_backup[IQK_ADDA_REG_NUM];
637         u32     IQK_MAC_backup[IQK_MAC_REG_NUM];
638         u32     IQK_BB_backup_recover[9];
639         u32     IQK_BB_backup[IQK_BB_REG_NUM];
640
641         /* for APK */
642         u32     APKoutput[2][2]; /* path A/B; output1_1a/output1_2a */
643         u8      bAPKdone;
644         u8      bAPKThermalMeterIgnore;
645         u8      bDPdone;
646         u8      bDPPathAOK;
647         u8      bDPPathBOK;
648 };
649
650 /*  ODM Dynamic common info value definition */
651
652 struct fast_ant_train {
653         u8      Bssid[6];
654         u8      antsel_rx_keep_0;
655         u8      antsel_rx_keep_1;
656         u8      antsel_rx_keep_2;
657         u32     antSumRSSI[7];
658         u32     antRSSIcnt[7];
659         u32     antAveRSSI[7];
660         u8      FAT_State;
661         u32     TrainIdx;
662         u8      antsel_a[ODM_ASSOCIATE_ENTRY_NUM];
663         u8      antsel_b[ODM_ASSOCIATE_ENTRY_NUM];
664         u8      antsel_c[ODM_ASSOCIATE_ENTRY_NUM];
665         u32     MainAnt_Sum[ODM_ASSOCIATE_ENTRY_NUM];
666         u32     AuxAnt_Sum[ODM_ASSOCIATE_ENTRY_NUM];
667         u32     MainAnt_Cnt[ODM_ASSOCIATE_ENTRY_NUM];
668         u32     AuxAnt_Cnt[ODM_ASSOCIATE_ENTRY_NUM];
669         u8      RxIdleAnt;
670         bool    bBecomeLinked;
671 };
672
673 enum fat_state {
674         FAT_NORMAL_STATE                = 0,
675         FAT_TRAINING_STATE              = 1,
676 };
677
678 enum ant_div_type {
679         NO_ANTDIV                       = 0xFF,
680         CG_TRX_HW_ANTDIV                = 0x01,
681         CGCS_RX_HW_ANTDIV               = 0x02,
682         FIXED_HW_ANTDIV                 = 0x03,
683         CG_TRX_SMART_ANTDIV             = 0x04,
684         CGCS_RX_SW_ANTDIV               = 0x05,
685 };
686
687 /* Copy from SD4 defined structure. We use to support PHY DM integration. */
688 struct odm_dm_struct {
689         /*      Add for different team use temporarily */
690         struct adapter *Adapter;        /*  For CE/NIC team */
691         struct rtl8192cd_priv *priv;    /*  For AP/ADSL team */
692         /*  WHen you use above pointers, they must be initialized. */
693         bool    odm_ready;
694
695         struct rtl8192cd_priv *fake_priv;
696         u64     DebugComponents;
697         u32     DebugLevel;
698
699 /*  ODM HANDLE, DRIVER NEEDS NOT TO HOOK------ */
700         bool    bCckHighPower;
701         u8      RFPathRxEnable;         /*  ODM_CMNINFO_RFPATH_ENABLE */
702         u8      ControlChannel;
703 /*  ODM HANDLE, DRIVER NEEDS NOT TO HOOK------ */
704
705 /* 1  COMMON INFORMATION */
706         /*  Init Value */
707 /* HOOK BEFORE REG INIT----------- */
708         /*  ODM Platform info AP/ADSL/CE/MP = 1/2/3/4 */
709         u8      SupportPlatform;
710         /*  ODM Support Ability DIG/RATR/TX_PWR_TRACK/... = 1/2/3/... */
711         u32     SupportAbility;
712         /*  ODM PCIE/USB/SDIO/GSPI = 0/1/2/3 */
713         u8      SupportInterface;
714         /*  ODM composite or independent. Bit oriented/ 92C+92D+ .... or any
715          *  other type = 1/2/3/...
716          */
717         u32     SupportICType;
718         /*  Cut Version TestChip/A-cut/B-cut... = 0/1/2/3/... */
719         u8      CutVersion;
720         /*  Board Type Normal/HighPower/MiniCard/SLIM/Combo/. = 0/1/2/3/4/. */
721         u8      BoardType;
722         /*  with external LNA  NO/Yes = 0/1 */
723         u8      ExtLNA;
724         /*  with external PA  NO/Yes = 0/1 */
725         u8      ExtPA;
726         /*  with external TRSW  NO/Yes = 0/1 */
727         u8      ExtTRSW;
728         u8      PatchID; /* Customer ID */
729         bool    bInHctTest;
730         bool    bWIFITest;
731
732         bool    bDualMacSmartConcurrent;
733         u32     BK_SupportAbility;
734         u8      AntDivType;
735 /* HOOK BEFORE REG INIT----------- */
736
737         /*  Dynamic Value */
738 /*  POINTER REFERENCE----------- */
739
740         u8      u8_temp;
741         bool    bool_temp;
742         struct adapter *adapter_temp;
743
744         /*  MAC PHY Mode SMSP/DMSP/DMDP = 0/1/2 */
745         u8      *pMacPhyMode;
746         /* TX Unicast byte count */
747         u64     *pNumTxBytesUnicast;
748         /* RX Unicast byte count */
749         u64     *pNumRxBytesUnicast;
750         /*  Wireless mode B/G/A/N = BIT0/BIT1/BIT2/BIT3 */
751         u8      *pWirelessMode; /* ODM_WIRELESS_MODE_E */
752         /*  Frequence band 2.4G/5G = 0/1 */
753         u8      *pBandType;
754         /*  Secondary channel offset don't_care/below/above = 0/1/2 */
755         u8      *pSecChOffset;
756         /*  Security mode Open/WEP/AES/TKIP = 0/1/2/3 */
757         u8      *pSecurity;
758         /*  BW info 20M/40M/80M = 0/1/2 */
759         u8      *pBandWidth;
760         /*  Central channel location Ch1/Ch2/.... */
761         u8      *pChannel;      /* central channel number */
762         /*  Common info for 92D DMSP */
763
764         bool    *pbGetValueFromOtherMac;
765         struct adapter **pBuddyAdapter;
766         bool    *pbMasterOfDMSP; /* MAC0: master, MAC1: slave */
767         /*  Common info for Status */
768         bool    *pbScanInProcess;
769         bool    *pbPowerSaving;
770         /*  CCA Path 2-path/path-A/path-B = 0/1/2; using ODM_CCA_PATH_E. */
771         u8      *pOnePathCCA;
772         /* pMgntInfo->AntennaTest */
773         u8      *pAntennaTest;
774         bool    *pbNet_closed;
775 /*  POINTER REFERENCE----------- */
776         /*  */
777 /* CALL BY VALUE------------- */
778         bool    bWIFI_Direct;
779         bool    bWIFI_Display;
780         bool    bLinked;
781         u8      RSSI_Min;
782         u8      InterfaceIndex; /*  Add for 92D  dual MAC: 0--Mac0 1--Mac1 */
783         bool    bIsMPChip;
784         bool    bOneEntryOnly;
785         /*  Common info for BTDM */
786         bool    bBtDisabled;    /*  BT is disabled */
787         bool    bBtHsOperation; /*  BT HS mode is under progress */
788         u8      btHsDigVal;     /*  use BT rssi to decide the DIG value */
789         bool    bBtDisableEdcaTurbo;/* Under some condition, don't enable the
790                                      * EDCA Turbo
791                                      */
792         bool    bBtBusy;                        /*  BT is busy. */
793 /* CALL BY VALUE------------- */
794
795         /* 2 Define STA info. */
796         /*  _ODM_STA_INFO */
797         /*  For MP, we need to reduce one array pointer for default port.??*/
798         struct sta_info *pODM_StaInfo[ODM_ASSOCIATE_ENTRY_NUM];
799
800         u16     CurrminRptTime;
801         struct odm_ra_info RAInfo[ODM_ASSOCIATE_ENTRY_NUM]; /* Use MacID as
802                                                              * array index. STA MacID=0,
803                                                              * VWiFi Client MacID={1, ODM_ASSOCIATE_ENTRY_NUM-1}
804                                                              */
805         /*  */
806         /*  2012/02/14 MH Add to share 88E ra with other SW team. */
807         /*  We need to colelct all support abilit to a proper area. */
808         /*  */
809         bool    RaSupport88E;
810
811         /*  Define ........... */
812
813         /*  Latest packet phy info (ODM write) */
814         struct odm_phy_dbg_info PhyDbgInfo;
815
816         /*  Latest packet phy info (ODM write) */
817         struct odm_mac_status_info *pMacInfo;
818
819         /*  Different Team independt structure?? */
820
821         /* ODM Structure */
822         struct fast_ant_train DM_FatTable;
823         struct rtw_dig  DM_DigTable;
824         struct rtl_ps   DM_PSTable;
825         struct rx_hpc   DM_RXHP_Table;
826         struct false_alarm_stats FalseAlmCnt;
827         struct false_alarm_stats FlaseAlmCntBuddyAdapter;
828         struct sw_ant_switch DM_SWAT_Table;
829         bool            RSSI_test;
830
831         struct edca_turbo DM_EDCA_Table;
832         u32             WMMEDCA_BE;
833         /*  Copy from SD4 structure */
834         /*  */
835         /*  ================================================== */
836         /*  */
837
838         bool    *pbDriverStopped;
839         bool    *pbDriverIsGoingToPnpSetPowerSleep;
840         bool    *pinit_adpt_in_progress;
841
842         /* PSD */
843         bool    bUserAssignLevel;
844         struct timer_list PSDTimer;
845         u8      RSSI_BT;                        /* come from BT */
846         bool    bPSDinProcess;
847         bool    bDMInitialGainEnable;
848
849         /* for rate adaptive, in fact,  88c/92c fw will handle this */
850         u8      bUseRAMask;
851
852         struct odm_rate_adapt RateAdaptive;
853
854         struct odm_rf_cal RFCalibrateInfo;
855
856         /*  TX power tracking */
857         u8      BbSwingIdxOfdm;
858         u8      BbSwingIdxOfdmCurrent;
859         u8      BbSwingIdxOfdmBase;
860         bool    BbSwingFlagOfdm;
861         u8      BbSwingIdxCck;
862         u8      BbSwingIdxCckCurrent;
863         u8      BbSwingIdxCckBase;
864         bool    BbSwingFlagCck;
865         u8      *mp_mode;
866         /*  ODM system resource. */
867
868         /*  ODM relative time. */
869         struct timer_list PathDivSwitchTimer;
870         /* 2011.09.27 add for Path Diversity */
871         struct timer_list CCKPathDiversityTimer;
872         struct timer_list FastAntTrainingTimer;
873 };              /*  DM_Dynamic_Mechanism_Structure */
874
875 #define ODM_RF_PATH_MAX 3
876
877 enum ODM_RF_CONTENT {
878         odm_radioa_txt = 0x1000,
879         odm_radiob_txt = 0x1001,
880         odm_radioc_txt = 0x1002,
881         odm_radiod_txt = 0x1003
882 };
883
884 /*  Status code */
885 enum rt_status {
886         RT_STATUS_SUCCESS,
887         RT_STATUS_FAILURE,
888         RT_STATUS_PENDING,
889         RT_STATUS_RESOURCE,
890         RT_STATUS_INVALID_CONTEXT,
891         RT_STATUS_INVALID_PARAMETER,
892         RT_STATUS_NOT_SUPPORT,
893         RT_STATUS_OS_API_FAILED,
894 };
895
896 /* 3=========================================================== */
897 /* 3 DIG */
898 /* 3=========================================================== */
899
900 enum dm_dig_op {
901         RT_TYPE_THRESH_HIGH     = 0,
902         RT_TYPE_THRESH_LOW      = 1,
903         RT_TYPE_BACKOFF         = 2,
904         RT_TYPE_RX_GAIN_MIN     = 3,
905         RT_TYPE_RX_GAIN_MAX     = 4,
906         RT_TYPE_ENABLE          = 5,
907         RT_TYPE_DISABLE         = 6,
908         DIG_OP_TYPE_MAX
909 };
910
911 #define         DM_DIG_THRESH_HIGH      40
912 #define         DM_DIG_THRESH_LOW       35
913
914 #define         DM_SCAN_RSSI_TH         0x14 /* scan return issue for LC */
915
916
917 #define         DM_false_ALARM_THRESH_LOW       400
918 #define         DM_false_ALARM_THRESH_HIGH      1000
919
920 #define         DM_DIG_MAX_NIC                  0x4e
921 #define         DM_DIG_MIN_NIC                  0x1e /* 0x22/0x1c */
922
923 #define         DM_DIG_MAX_AP                   0x32
924 #define         DM_DIG_MIN_AP                   0x20
925
926 #define         DM_DIG_MAX_NIC_HP               0x46
927 #define         DM_DIG_MIN_NIC_HP               0x2e
928
929 #define         DM_DIG_MAX_AP_HP                0x42
930 #define         DM_DIG_MIN_AP_HP                0x30
931
932 /* vivi 92c&92d has different definition, 20110504 */
933 /* this is for 92c */
934 #define         DM_DIG_FA_TH0                   0x200/* 0x20 */
935 #define         DM_DIG_FA_TH1                   0x300/* 0x100 */
936 #define         DM_DIG_FA_TH2                   0x400/* 0x200 */
937 /* this is for 92d */
938 #define         DM_DIG_FA_TH0_92D               0x100
939 #define         DM_DIG_FA_TH1_92D               0x400
940 #define         DM_DIG_FA_TH2_92D               0x600
941
942 #define         DM_DIG_BACKOFF_MAX              12
943 #define         DM_DIG_BACKOFF_MIN              -4
944 #define         DM_DIG_BACKOFF_DEFAULT          10
945
946 /* 3=========================================================== */
947 /* 3 AGC RX High Power Mode */
948 /* 3=========================================================== */
949 #define   LNA_Low_Gain_1                0x64
950 #define   LNA_Low_Gain_2                0x5A
951 #define   LNA_Low_Gain_3                0x58
952
953 #define   FA_RXHP_TH1                   5000
954 #define   FA_RXHP_TH2                   1500
955 #define   FA_RXHP_TH3                   800
956 #define   FA_RXHP_TH4                   600
957 #define   FA_RXHP_TH5                   500
958
959 /* 3=========================================================== */
960 /* 3 EDCA */
961 /* 3=========================================================== */
962
963 /* 3=========================================================== */
964 /* 3 Dynamic Tx Power */
965 /* 3=========================================================== */
966 /* Dynamic Tx Power Control Threshold */
967 #define         TX_POWER_NEAR_FIELD_THRESH_LVL2 74
968 #define         TX_POWER_NEAR_FIELD_THRESH_LVL1 67
969 #define         TX_POWER_NEAR_FIELD_THRESH_AP           0x3F
970
971 #define         TxHighPwrLevel_Normal           0
972 #define         TxHighPwrLevel_Level1           1
973 #define         TxHighPwrLevel_Level2           2
974 #define         TxHighPwrLevel_BT1              3
975 #define         TxHighPwrLevel_BT2              4
976 #define         TxHighPwrLevel_15               5
977 #define         TxHighPwrLevel_35               6
978 #define         TxHighPwrLevel_50               7
979 #define         TxHighPwrLevel_70               8
980 #define         TxHighPwrLevel_100              9
981
982 /* 3=========================================================== */
983 /* 3 Rate Adaptive */
984 /* 3=========================================================== */
985 #define         DM_RATR_STA_INIT                0
986 #define         DM_RATR_STA_HIGH                1
987 #define         DM_RATR_STA_MIDDLE              2
988 #define         DM_RATR_STA_LOW                 3
989
990 /* 3=========================================================== */
991 /* 3 BB Power Save */
992 /* 3=========================================================== */
993
994
995 enum dm_1r_cca {
996         CCA_1R = 0,
997         CCA_2R = 1,
998         CCA_MAX = 2,
999 };
1000
1001 enum dm_rf {
1002         RF_Save = 0,
1003         RF_Normal = 1,
1004         RF_MAX = 2,
1005 };
1006
1007 /* 3=========================================================== */
1008 /* 3 Antenna Diversity */
1009 /* 3=========================================================== */
1010 enum dm_swas {
1011         Antenna_A = 1,
1012         Antenna_B = 2,
1013         Antenna_MAX = 3,
1014 };
1015
1016 /*  Maximal number of antenna detection mechanism needs to perform. */
1017 #define MAX_ANTENNA_DETECTION_CNT       10
1018
1019 /*  Extern Global Variables. */
1020 #define OFDM_TABLE_SIZE_92C     37
1021 #define OFDM_TABLE_SIZE_92D     43
1022 #define CCK_TABLE_SIZE          33
1023
1024 extern  u32 OFDMSwingTable[OFDM_TABLE_SIZE_92D];
1025 extern  u8 CCKSwingTable_Ch1_Ch13[CCK_TABLE_SIZE][8];
1026 extern  u8 CCKSwingTable_Ch14[CCK_TABLE_SIZE][8];
1027
1028 /*  check Sta pointer valid or not */
1029 #define IS_STA_VALID(pSta)              (pSta)
1030 /*  20100514 Joseph: Add definition for antenna switching test after link. */
1031 /*  This indicates two different the steps. */
1032 /*  In SWAW_STEP_PEAK, driver needs to switch antenna and listen to the
1033  *  signal on the air.
1034  */
1035 /*  In SWAW_STEP_DETERMINE, driver just compares the signal captured in
1036  *  SWAW_STEP_PEAK
1037  */
1038 /*  with original RSSI to determine if it is necessary to switch antenna. */
1039 #define SWAW_STEP_PEAK          0
1040 #define SWAW_STEP_DETERMINE     1
1041
1042 #define dm_CheckTXPowerTracking ODM_TXPowerTrackingCheck
1043 #define dm_RF_Saving    ODM_RF_Saving
1044
1045 void ODM_RF_Saving(struct odm_dm_struct *pDM_Odm, u8 bForceInNormal);
1046 void ODM_TXPowerTrackingCheck(struct odm_dm_struct *pDM_Odm);
1047 void ODM_Write_CCK_CCA_Thres(struct odm_dm_struct *pDM_Odm, u8 CurCCK_CCAThres);
1048 bool ODM_RAStateCheck(struct odm_dm_struct *pDM_Odm, s32 RSSI,
1049                       bool bForceUpdate, u8 *pRATRState);
1050 u32 ConvertTo_dB(u32 Value);
1051 u32 ODM_Get_Rate_Bitmap(struct odm_dm_struct *pDM_Odm, u32 macid,
1052                         u32 ra_mask, u8 rssi_level);
1053 void ODM_CmnInfoInit(struct odm_dm_struct *pDM_Odm,
1054                      enum odm_common_info_def CmnInfo, u32 Value);
1055 void ODM_CmnInfoUpdate(struct odm_dm_struct *pDM_Odm, u32 CmnInfo, u64 Value);
1056 void ODM_CmnInfoHook(struct odm_dm_struct *pDM_Odm,
1057                      enum odm_common_info_def CmnInfo, void *pValue);
1058 void ODM_CmnInfoPtrArrayHook(struct odm_dm_struct *pDM_Odm,
1059                              enum odm_common_info_def CmnInfo,
1060                              u16 Index, void *pValue);
1061 void ODM_DMInit(struct odm_dm_struct *pDM_Odm);
1062 void ODM_DMWatchdog(struct odm_dm_struct *pDM_Odm);
1063 void ODM_Write_DIG(struct odm_dm_struct *pDM_Odm, u8 CurrentIGI);
1064
1065 #endif