OSDN Git Service

Add rtl8723bu driver version 4.4.5
[android-x86/external-kernel-drivers.git] / rtl8723bu / hal / phydm / phydm_rainfo.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
21 #ifndef __PHYDMRAINFO_H__
22 #define    __PHYDMRAINFO_H__
23
24 /*#define RAINFO_VERSION        "2.0"  //2014.11.04*/
25 /*#define RAINFO_VERSION        "3.0"  //2015.01.13 Dino*/
26 /*#define RAINFO_VERSION        "3.1"  //2015.01.14 Dino*/
27 #define RAINFO_VERSION  "3.2"  /*2015.01.14 Dino*/
28
29 #define HIGH_RSSI_THRESH        50
30 #define LOW_RSSI_THRESH 20
31
32 #define ACTIVE_TP_THRESHOLD     150
33 #define RA_RETRY_DESCEND_NUM    2
34 #define RA_RETRY_LIMIT_LOW      4
35 #define RA_RETRY_LIMIT_HIGH     32
36
37 #define PHYDM_IC_8051_SERIES            (ODM_RTL8881A|ODM_RTL8812|ODM_RTL8821|ODM_RTL8192S|ODM_RTL8192C|ODM_RTL8192D|ODM_RTL8723A|ODM_RTL8188E|ODM_RTL8192E|ODM_RTL8723B|ODM_RTL8703B|ODM_RTL8188F)
38 #define PHYDM_IC_3081_SERIES            (ODM_RTL8814A|ODM_RTL8821B|ODM_RTL8822B)
39
40 #define RAINFO_BE_RX_STATE                      BIT0  // 1:RX    //ULDL
41 #define RAINFO_STBC_STATE                       BIT1
42 //#define RAINFO_LDPC_STATE                     BIT2
43 #define RAINFO_NOISY_STATE                      BIT2    // set by Noisy_Detection
44 #define RAINFO_SHURTCUT_STATE           BIT3
45 #define RAINFO_SHURTCUT_FLAG            BIT4
46 #define RAINFO_INIT_RSSI_RATE_STATE  BIT5
47 #define RAINFO_BF_STATE                                 BIT6
48 #define RAINFO_BE_TX_STATE                      BIT7 // 1:TX
49
50 #define RA_MASK_CCK             0xf
51 #define RA_MASK_OFDM            0xff0
52 #define RA_MASK_HT1SS           0xff000
53 #define RA_MASK_HT2SS           0xff00000
54 /*#define       RA_MASK_MCS3SS  */
55 #define RA_MASK_HT4SS           0xff0
56 #define RA_MASK_VHT1SS  0x3ff000
57 #define RA_MASK_VHT2SS  0xffc00000
58
59 #if(DM_ODM_SUPPORT_TYPE == ODM_AP)
60 #define EXT_RA_INFO_SUPPORT_IC (ODM_RTL8881A |ODM_RTL8192E |ODM_RTL8812 |ODM_RTL8814A|ODM_RTL8822B)
61 #define         RA_FIRST_MACID  1
62 #elif (DM_ODM_SUPPORT_TYPE == ODM_WIN)
63 #define EXT_RA_INFO_SUPPORT_IC (ODM_RTL8192E | ODM_RTL8812 | ODM_RTL8821 | ODM_RTL8723B | ODM_RTL8814A | ODM_RTL8822B | ODM_RTL8703B)
64 #define         RA_FIRST_MACID  0
65 #elif (DM_ODM_SUPPORT_TYPE == ODM_CE)
66 /*#define       EXT_RA_INFO_SUPPORT_IC (ODM_RTL8192E|ODM_RTL8812|ODM_RTL8821|ODM_RTL8723B|ODM_RTL8814A|ODM_RTL8822B|ODM_RTL8703B) */
67 #define         RA_FIRST_MACID  0
68 #endif
69
70
71 #define AP_InitRateAdaptiveState        ODM_RateAdaptiveStateApInit
72
73 #define         DM_RATR_STA_INIT                        0
74 #define         DM_RATR_STA_HIGH                        1
75 #define                 DM_RATR_STA_MIDDLE              2
76 #define                 DM_RATR_STA_LOW                 3
77 #if(DM_ODM_SUPPORT_TYPE & ODM_AP)
78 #define         DM_RATR_STA_ULTRA_LOW   4
79 #endif
80
81 #define         DM_RA_RATE_UP                           1
82 #define         DM_RA_RATE_DOWN                 2
83
84 typedef enum _phydm_arfr_num {
85         ARFR_0_RATE_ID  =       0x9,
86         ARFR_1_RATE_ID  =       0xa,
87         ARFR_2_RATE_ID  =       0xb,
88         ARFR_3_RATE_ID  =       0xc,
89         ARFR_4_RATE_ID  =       0xd,
90         ARFR_5_RATE_ID  =       0xe
91 } PHYDM_RA_ARFR_NUM_E;
92
93 typedef enum _Phydm_ra_dbg_para {
94         RADBG_RTY_PENALTY                       =       1,  //u8
95         RADBG_N_HIGH                            =       2,
96         RADBG_N_LOW                             =       3,
97         RADBG_TRATE_UP_TABLE            =       4,
98         RADBG_TRATE_DOWN_TABLE  =       5,
99         RADBG_TRYING_NECESSARY  =       6,
100         RADBG_TDROPING_NECESSARY =      7,
101         RADBG_RATE_UP_RTY_RATIO =       8, //u8
102         RADBG_RATE_DOWN_RTY_RATIO =     9, //u8
103
104         RADBG_DEBUG_MONITOR1 = 0xc,
105         RADBG_DEBUG_MONITOR2 = 0xd,
106         RADBG_DEBUG_MONITOR3 = 0xe,
107         RADBG_DEBUG_MONITOR4 = 0xf,
108         NUM_RA_PARA
109 } PHYDM_RA_DBG_PARA_E;
110
111
112 #if (RATE_ADAPTIVE_SUPPORT == 1)//88E RA
113 typedef struct _ODM_RA_Info_ {
114         u1Byte RateID;
115         u4Byte RateMask;
116         u4Byte RAUseRate;
117         u1Byte RateSGI;
118         u1Byte RssiStaRA;
119         u1Byte PreRssiStaRA;
120         u1Byte SGIEnable;
121         u1Byte DecisionRate;
122         u1Byte PreRate;
123         u1Byte HighestRate;
124         u1Byte LowestRate;
125         u4Byte NscUp;
126         u4Byte NscDown;
127         u2Byte RTY[5];
128         u4Byte TOTAL;
129         u2Byte DROP;
130         u1Byte Active;
131         u2Byte RptTime;
132         u1Byte RAWaitingCounter;
133         u1Byte RAPendingCounter;
134 #if 1 //POWER_TRAINING_ACTIVE == 1 // For compile  pass only~!
135         u1Byte PTActive;  // on or off
136         u1Byte PTTryState;  // 0 trying state, 1 for decision state
137         u1Byte PTStage;  // 0~6
138         u1Byte PTStopCount; //Stop PT counter
139         u1Byte PTPreRate;  // if rate change do PT
140         u1Byte PTPreRssi; // if RSSI change 5% do PT
141         u1Byte PTModeSS;  // decide whitch rate should do PT
142         u1Byte RAstage;  // StageRA, decide how many times RA will be done between PT
143         u1Byte PTSmoothFactor;
144 #endif
145 #if (DM_ODM_SUPPORT_TYPE == ODM_AP) && ((DEV_BUS_TYPE == RT_USB_INTERFACE) || (DEV_BUS_TYPE == RT_SDIO_INTERFACE))
146         u1Byte RateDownCounter;
147         u1Byte RateUpCounter;
148         u1Byte RateDirection;
149         u1Byte BoundingType;
150         u1Byte BoundingCounter;
151         u1Byte BoundingLearningTime;
152         u1Byte RateDownStartTime;
153 #endif
154 } ODM_RA_INFO_T, *PODM_RA_INFO_T;
155 #endif
156
157
158 typedef struct _Rate_Adaptive_Table_ {
159         u1Byte          firstconnect;
160 #if(DM_ODM_SUPPORT_TYPE==ODM_WIN)
161         BOOLEAN         PT_collision_pre;
162 #endif
163
164 #if (defined(CONFIG_RA_DBG_CMD))
165         BOOLEAN         is_ra_dbg_init;
166
167         u1Byte  RTY_P[ODM_NUM_RATE_IDX];
168         u1Byte  RTY_P_default[ODM_NUM_RATE_IDX];
169         BOOLEAN RTY_P_modify_note[ODM_NUM_RATE_IDX];
170
171         u1Byte  RATE_UP_RTY_RATIO[ODM_NUM_RATE_IDX];
172         u1Byte  RATE_UP_RTY_RATIO_default[ODM_NUM_RATE_IDX];
173         BOOLEAN RATE_UP_RTY_RATIO_modify_note[ODM_NUM_RATE_IDX];
174
175         u1Byte  RATE_DOWN_RTY_RATIO[ODM_NUM_RATE_IDX];
176         u1Byte  RATE_DOWN_RTY_RATIO_default[ODM_NUM_RATE_IDX];
177         BOOLEAN RATE_DOWN_RTY_RATIO_modify_note[ODM_NUM_RATE_IDX];
178
179         BOOLEAN RA_Para_feedback_req;
180
181         u1Byte   para_idx;
182         u1Byte  rate_idx;
183         u1Byte  value;
184         u2Byte  value_16;
185         u1Byte  rate_length;
186 #endif
187         u1Byte  link_tx_rate[ODM_ASSOCIATE_ENTRY_NUM];
188
189         #if (defined(CONFIG_RA_DYNAMIC_RTY_LIMIT))
190         u1Byte per_rate_retrylimit_20M[ODM_NUM_RATE_IDX];
191         u1Byte per_rate_retrylimit_40M[ODM_NUM_RATE_IDX];
192         u1Byte                  retry_descend_num;
193         u1Byte                  retrylimit_low;
194         u1Byte                  retrylimit_high;
195         #endif
196
197
198 } RA_T, *pRA_T;
199
200 typedef struct _ODM_RATE_ADAPTIVE {
201         u1Byte                          Type;                           // DM_Type_ByFW/DM_Type_ByDriver
202         u1Byte                          HighRSSIThresh;         // if RSSI > HighRSSIThresh     => RATRState is DM_RATR_STA_HIGH
203         u1Byte                          LowRSSIThresh;          // if RSSI <= LowRSSIThresh     => RATRState is DM_RATR_STA_LOW
204         u1Byte                          RATRState;                      // Current RSSI level, DM_RATR_STA_HIGH/DM_RATR_STA_MIDDLE/DM_RATR_STA_LOW
205
206 #if(DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))
207         u1Byte                          LdpcThres;                      // if RSSI > LdpcThres => switch from LPDC to BCC
208         BOOLEAN                         bLowerRtsRate;
209 #endif
210
211 #if(DM_ODM_SUPPORT_TYPE & ODM_WIN)
212         u1Byte                          RtsThres;
213 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
214         BOOLEAN                         bUseLdpc;
215 #else
216         u1Byte                          UltraLowRSSIThresh;
217         u4Byte                          LastRATR;                       // RATR Register Content
218 #endif
219
220 } ODM_RATE_ADAPTIVE, *PODM_RATE_ADAPTIVE;
221
222 VOID
223 ODM_C2HRaParaReportHandler(
224         IN      PVOID   pDM_VOID,
225         IN pu1Byte   CmdBuf,
226         IN u1Byte   CmdLen
227 );
228
229 VOID
230 odm_RA_ParaAdjust_Send_H2C(
231         IN      PVOID   pDM_VOID
232 );
233
234 VOID
235 odm_RA_debug(
236         IN              PVOID           pDM_VOID,
237         IN              u4Byte          *const dm_value
238 );
239
240 VOID
241 odm_RA_ParaAdjust_init(
242         IN              PVOID           pDM_VOID
243 );
244
245 VOID
246 odm_RA_ParaAdjust(
247         IN              PVOID           pDM_VOID
248 );
249
250 VOID
251 phydm_ra_dynamic_retry_count(
252         IN      PVOID   pDM_VOID
253 );
254
255 VOID
256 phydm_ra_dynamic_retry_limit(
257         IN      PVOID   pDM_VOID
258 );
259
260 VOID
261 phydm_ra_dynamic_rate_id_on_assoc(
262         IN      PVOID   pDM_VOID,
263         IN      u1Byte  wireless_mode,
264         IN      u1Byte  init_rate_id
265 );
266
267 VOID
268 phydm_c2h_ra_report_handler(
269         IN PVOID        pDM_VOID,
270         IN pu1Byte   CmdBuf,
271         IN u1Byte   CmdLen
272 );
273
274 VOID
275 phydm_ra_info_init(
276         IN      PVOID   pDM_VOID
277 );
278
279 VOID
280 odm_RSSIMonitorInit(
281         IN      PVOID   pDM_VOID
282 );
283
284 VOID
285 odm_RSSIMonitorCheck(
286         IN      PVOID   pDM_VOID
287 );
288
289 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
290 s4Byte
291 phydm_FindMinimumRSSI(
292 IN              PDM_ODM_T               pDM_Odm,
293 IN              PADAPTER                pAdapter,
294 IN OUT  BOOLEAN *pbLink_temp
295
296         );
297 #endif
298
299 VOID
300 odm_RSSIMonitorCheckMP(
301         IN      PVOID   pDM_VOID
302 );
303
304 VOID
305 odm_RSSIMonitorCheckCE(
306         IN      PVOID   pDM_VOID
307 );
308
309 VOID
310 odm_RSSIMonitorCheckAP(
311         IN      PVOID   pDM_VOID
312 );
313
314
315 VOID
316 odm_RateAdaptiveMaskInit(
317         IN      PVOID   pDM_VOID
318 );
319
320 VOID
321 odm_RefreshRateAdaptiveMask(
322         IN              PVOID           pDM_VOID
323 );
324
325 VOID
326 odm_RefreshRateAdaptiveMaskMP(
327         IN              PVOID           pDM_VOID
328 );
329
330 VOID
331 odm_RefreshRateAdaptiveMaskCE(
332         IN              PVOID           pDM_VOID
333 );
334
335 VOID
336 odm_RefreshRateAdaptiveMaskAPADSL(
337         IN              PVOID           pDM_VOID
338 );
339
340 BOOLEAN
341 ODM_RAStateCheck(
342         IN              PVOID               pDM_VOID,
343         IN              s4Byte                  RSSI,
344         IN              BOOLEAN                 bForceUpdate,
345         OUT             pu1Byte                 pRATRState
346 );
347
348 VOID
349 odm_RefreshBasicRateMask(
350         IN              PVOID           pDM_VOID
351 );
352 VOID
353 ODM_RAPostActionOnAssoc(
354         IN              PVOID   pDM_Odm
355 );
356
357 #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN | ODM_CE))
358
359 u1Byte
360 odm_Find_RTS_Rate(
361         IN      PVOID           pDM_VOID,
362         IN              u1Byte                  Tx_Rate,
363         IN              BOOLEAN                 bErpProtect
364 );
365
366 VOID
367 ODM_UpdateNoisyState(
368         IN      PVOID           pDM_VOID,
369         IN      BOOLEAN         bNoisyStateFromC2H
370 );
371
372 u4Byte
373 Set_RA_DM_Ratrbitmap_by_Noisy(
374         IN      PVOID                   pDM_VOID,
375         IN      WIRELESS_MODE   WirelessMode,
376         IN      u4Byte                  ratr_bitmap,
377         IN      u1Byte                  rssi_level
378 );
379
380 VOID
381 ODM_UpdateInitRate(
382         IN      PVOID           pDM_VOID,
383         IN      u1Byte          Rate
384 );
385
386 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
387
388 VOID
389 odm_RSSIDumpToRegister(
390         IN      PVOID   pDM_VOID
391 );
392
393 VOID
394 odm_RefreshLdpcRtsMP(
395         IN      PADAPTER                        pAdapter,
396         IN      PDM_ODM_T                       pDM_Odm,
397         IN      u1Byte                          mMacId,
398         IN      u1Byte                          IOTPeer,
399         IN      s4Byte                          UndecoratedSmoothedPWDB
400 );
401
402 VOID
403 ODM_DynamicARFBSelect(
404         IN              PVOID           pDM_VOID,
405         IN              u1Byte          rate,
406         IN      BOOLEAN         Collision_State
407 );
408
409 VOID
410 ODM_RateAdaptiveStateApInit(
411         IN      PVOID                   PADAPTER_VOID,
412         IN      PRT_WLAN_STA    pEntry
413 );
414 #elif (DM_ODM_SUPPORT_TYPE == ODM_CE)
415
416 static void
417 FindMinimumRSSI(
418         IN      PADAPTER        pAdapter
419 );
420
421 u8Byte
422 PhyDM_Get_Rate_Bitmap_Ex(
423         IN      PVOID           pDM_VOID,
424         IN      u4Byte          macid,
425         IN      u8Byte          ra_mask,
426         IN      u1Byte          rssi_level,
427         OUT             u8Byte  *dm_RA_Mask,
428         OUT             u1Byte  *dm_RteID
429 );
430 u4Byte
431 ODM_Get_Rate_Bitmap(
432         IN      PVOID       pDM_VOID,
433         IN      u4Byte          macid,
434         IN      u4Byte          ra_mask,
435         IN      u1Byte          rssi_level
436 );
437 void phydm_ra_rssi_rpt_wk(PVOID pContext);
438
439 #endif/*#elif (DM_ODM_SUPPORT_TYPE == ODM_CE)*/
440
441 #endif/*#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN| ODM_CE))*/
442
443 #endif /*#ifndef        __ODMRAINFO_H__*/