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