ARM64: DTS: Add rk3399-firefly uart4 device, node as /dev/ttyS1
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8723bu / hal / OUTSRC / phydm_AntDiv.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 __PHYDMANTDIV_H__\r
22 #define    __PHYDMANTDIV_H__\r
23 \r
24 /*#define ANTDIV_VERSION        "2.0"  //2014.11.04*/\r
25 /*#define ANTDIV_VERSION        "2.1"  //2015.01.13  Dino*/\r
26 #define ANTDIV_VERSION  "2.2"  /*2015.01.16  Dino*/\r
27 \r
28 //1 ============================================================\r
29 //1  Definition \r
30 //1 ============================================================\r
31 \r
32 #define ANTDIV_INIT             0xff\r
33 #define MAIN_ANT        1               //Ant A or Ant Main\r
34 #define AUX_ANT         2               //AntB or Ant Aux\r
35 #define MAX_ANT         3               // 3 for AP using\r
36 \r
37 #define ANT1_2G 0 // = ANT2_5G\r
38 #define ANT2_2G 1 // = ANT1_5G\r
39 \r
40 //Antenna Diversty Control Type\r
41 #define ODM_AUTO_ANT    0\r
42 #define ODM_FIX_MAIN_ANT        1\r
43 #define ODM_FIX_AUX_ANT 2\r
44 \r
45 #define ODM_ANTDIV_SUPPORT              (ODM_RTL8188E|ODM_RTL8192E|ODM_RTL8723B|ODM_RTL8821|ODM_RTL8881A|ODM_RTL8812)\r
46 #define ODM_N_ANTDIV_SUPPORT            (ODM_RTL8188E|ODM_RTL8192E|ODM_RTL8723B)\r
47 #define ODM_AC_ANTDIV_SUPPORT           (ODM_RTL8821|ODM_RTL8881A|ODM_RTL8812)\r
48 #define ODM_SMART_ANT_SUPPORT           (ODM_RTL8188E|ODM_RTL8192E)\r
49 \r
50 #define ODM_OLD_IC_ANTDIV_SUPPORT               (ODM_RTL8723A|ODM_RTL8192C|ODM_RTL8192D)\r
51 \r
52 #define ODM_ANTDIV_2G_SUPPORT_IC                        (ODM_RTL8188E|ODM_RTL8192E|ODM_RTL8723B|ODM_RTL8881A)\r
53 #define ODM_ANTDIV_5G_SUPPORT_IC                        (ODM_RTL8821|ODM_RTL8881A|ODM_RTL8812)\r
54 \r
55 #define ODM_EVM_ENHANCE_ANTDIV_SUPPORT_IC       (ODM_RTL8192E)\r
56 \r
57 #define ODM_ANTDIV_2G   BIT0\r
58 #define ODM_ANTDIV_5G   BIT1\r
59 \r
60 #define ANTDIV_ON 1\r
61 #define ANTDIV_OFF 0\r
62 \r
63 #define FAT_ON 1\r
64 #define FAT_OFF 0\r
65 \r
66 #define TX_BY_DESC 1\r
67 #define REG 0\r
68 \r
69 #define RSSI_METHOD 0\r
70 #define EVM_METHOD 1\r
71 #define CRC32_METHOD 2\r
72 \r
73 #define INIT_ANTDIV_TIMMER 0\r
74 #define CANCEL_ANTDIV_TIMMER 1\r
75 #define RELEASE_ANTDIV_TIMMER 2\r
76 \r
77 #define CRC32_FAIL 1\r
78 #define CRC32_OK 0\r
79 \r
80 #define Evm_RSSI_TH_High 25\r
81 #define Evm_RSSI_TH_Low 20\r
82 \r
83 #define NORMAL_STATE_MIAN 1\r
84 #define NORMAL_STATE_AUX 2\r
85 #define TRAINING_STATE 3\r
86 \r
87 #define FORCE_RSSI_DIFF 10\r
88 \r
89 #define CSI_ON 1\r
90 #define CSI_OFF 0\r
91 \r
92 #define DIVON_CSIOFF 1\r
93 #define DIVOFF_CSION 2\r
94 \r
95 #define BDC_DIV_TRAIN_STATE 0\r
96 #define BDC_BFer_TRAIN_STATE 1\r
97 #define BDC_DECISION_STATE 2\r
98 #define BDC_BF_HOLD_STATE 3\r
99 #define BDC_DIV_HOLD_STATE 4\r
100 \r
101 #define BDC_MODE_1 1\r
102 #define BDC_MODE_2 2\r
103 #define BDC_MODE_3 3\r
104 #define BDC_MODE_4 4\r
105 #define BDC_MODE_NULL 0xff\r
106 \r
107 #define SWAW_STEP_PEAK          0\r
108 #define SWAW_STEP_DETERMINE     1\r
109 \r
110 //1 ============================================================\r
111 //1  structure\r
112 //1 ============================================================\r
113 \r
114 \r
115 typedef struct _SW_Antenna_Switch_\r
116 {\r
117         u1Byte          Double_chk_flag;\r
118         u1Byte          try_flag;\r
119         s4Byte          PreRSSI;\r
120         u1Byte          CurAntenna;\r
121         u1Byte          PreAntenna;\r
122         u1Byte          RSSI_Trying;\r
123         u1Byte          TestMode;\r
124         u1Byte          bTriggerAntennaSwitch;\r
125         u1Byte          SelectAntennaMap;\r
126         u1Byte          RSSI_target;    \r
127         u1Byte          reset_idx;\r
128         u2Byte          Single_Ant_Counter;\r
129         u2Byte          Dual_Ant_Counter;\r
130         u2Byte          Aux_FailDetec_Counter;\r
131         u2Byte          Retry_Counter;\r
132 \r
133         // Before link Antenna Switch check\r
134         u1Byte          SWAS_NoLink_State;\r
135         u4Byte          SWAS_NoLink_BK_Reg860;\r
136         u4Byte          SWAS_NoLink_BK_Reg92c;\r
137         u4Byte          SWAS_NoLink_BK_Reg948;\r
138         BOOLEAN         ANTA_ON;        //To indicate Ant A is or not\r
139         BOOLEAN         ANTB_ON;        //To indicate Ant B is on or not\r
140         BOOLEAN         Pre_Aux_FailDetec;\r
141         BOOLEAN         RSSI_AntDect_bResult;   \r
142         u1Byte          Ant5G;\r
143         u1Byte          Ant2G;\r
144 \r
145         s4Byte          RSSI_sum_A;\r
146         s4Byte          RSSI_sum_B;\r
147         s4Byte          RSSI_cnt_A;\r
148         s4Byte          RSSI_cnt_B;\r
149 \r
150         u8Byte          lastTxOkCnt;\r
151         u8Byte          lastRxOkCnt;\r
152         u8Byte          TXByteCnt_A;\r
153         u8Byte          TXByteCnt_B;\r
154         u8Byte          RXByteCnt_A;\r
155         u8Byte          RXByteCnt_B;\r
156         u1Byte          TrafficLoad;\r
157         u1Byte          Train_time;\r
158         u1Byte          Train_time_flag;\r
159         RT_TIMER        SwAntennaSwitchTimer;\r
160 #if (RTL8723B_SUPPORT == 1)||(RTL8821A_SUPPORT == 1)    \r
161         RT_TIMER        SwAntennaSwitchTimer_8723B;\r
162         u4Byte          PktCnt_SWAntDivByCtrlFrame;\r
163         BOOLEAN         bSWAntDivByCtrlFrame;\r
164 #endif\r
165         \r
166 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)    \r
167         #if USE_WORKITEM\r
168         RT_WORK_ITEM                    SwAntennaSwitchWorkitem;\r
169 #if (RTL8723B_SUPPORT == 1)||(RTL8821A_SUPPORT == 1)    \r
170         RT_WORK_ITEM                    SwAntennaSwitchWorkitem_8723B;  \r
171         #endif\r
172 #endif\r
173 #endif\r
174 /* CE Platform use\r
175 #ifdef CONFIG_SW_ANTENNA_DIVERSITY\r
176         _timer SwAntennaSwitchTimer; \r
177         u8Byte lastTxOkCnt;\r
178         u8Byte lastRxOkCnt;\r
179         u8Byte TXByteCnt_A;\r
180         u8Byte TXByteCnt_B;\r
181         u8Byte RXByteCnt_A;\r
182         u8Byte RXByteCnt_B;\r
183         u1Byte DoubleComfirm;\r
184         u1Byte TrafficLoad;\r
185         //SW Antenna Switch\r
186 \r
187 \r
188 #endif\r
189 */\r
190 #ifdef CONFIG_HW_ANTENNA_DIVERSITY\r
191         //Hybrid Antenna Diversity\r
192         u4Byte          CCK_Ant1_Cnt[ODM_ASSOCIATE_ENTRY_NUM];\r
193         u4Byte          CCK_Ant2_Cnt[ODM_ASSOCIATE_ENTRY_NUM];\r
194         u4Byte          OFDM_Ant1_Cnt[ODM_ASSOCIATE_ENTRY_NUM];\r
195         u4Byte          OFDM_Ant2_Cnt[ODM_ASSOCIATE_ENTRY_NUM];\r
196         u4Byte          RSSI_Ant1_Sum[ODM_ASSOCIATE_ENTRY_NUM];\r
197         u4Byte          RSSI_Ant2_Sum[ODM_ASSOCIATE_ENTRY_NUM];\r
198         u1Byte          TxAnt[ODM_ASSOCIATE_ENTRY_NUM];\r
199         u1Byte          TargetSTA;\r
200         u1Byte          antsel;\r
201         u1Byte          RxIdleAnt;\r
202 \r
203 #endif\r
204         \r
205 }SWAT_T, *pSWAT_T;\r
206 \r
207 \r
208 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))\r
209 #if (defined(CONFIG_HW_ANTENNA_DIVERSITY))\r
210 typedef struct _BF_DIV_COEX_\r
211 {\r
212         BOOLEAN w_BFer_Client[ODM_ASSOCIATE_ENTRY_NUM];\r
213         BOOLEAN w_BFee_Client[ODM_ASSOCIATE_ENTRY_NUM];\r
214         u4Byte  MA_rx_TP[ODM_ASSOCIATE_ENTRY_NUM];\r
215         u4Byte  MA_rx_TP_DIV[ODM_ASSOCIATE_ENTRY_NUM];\r
216 \r
217         u1Byte  BDCcoexType_wBfer;\r
218         u1Byte num_Txbfee_Client;\r
219         u1Byte num_Txbfer_Client;\r
220         u1Byte BDC_Try_counter;\r
221         u1Byte BDC_Hold_counter;\r
222         u1Byte BDC_Mode;\r
223         u1Byte BDC_active_Mode;\r
224         u1Byte BDC_state;\r
225         u1Byte BDC_RxIdleUpdate_counter;\r
226         u1Byte num_Client;\r
227         u1Byte pre_num_Client;\r
228         u1Byte num_BfTar;\r
229         u1Byte num_DivTar;\r
230         \r
231         BOOLEAN bAll_DivSta_Idle;\r
232         BOOLEAN bAll_BFSta_Idle;\r
233         BOOLEAN BDC_Try_flag;\r
234         BOOLEAN BF_pass;\r
235         BOOLEAN DIV_pass;       \r
236 }BDC_T,*pBDC_T;\r
237 #endif\r
238 #endif\r
239 \r
240 \r
241 typedef struct _FAST_ANTENNA_TRAINNING_\r
242 {\r
243         u1Byte  Bssid[6];\r
244         u1Byte  antsel_rx_keep_0;\r
245         u1Byte  antsel_rx_keep_1;\r
246         u1Byte  antsel_rx_keep_2;\r
247         u1Byte  antsel_rx_keep_3;\r
248         u4Byte  antSumRSSI[7];\r
249         u4Byte  antRSSIcnt[7];\r
250         u4Byte  antAveRSSI[7];\r
251         u1Byte  FAT_State;\r
252         u4Byte  TrainIdx;\r
253         u1Byte  antsel_a[ODM_ASSOCIATE_ENTRY_NUM];\r
254         u1Byte  antsel_b[ODM_ASSOCIATE_ENTRY_NUM];\r
255         u1Byte  antsel_c[ODM_ASSOCIATE_ENTRY_NUM];\r
256         u4Byte  MainAnt_Sum[ODM_ASSOCIATE_ENTRY_NUM];\r
257         u4Byte  AuxAnt_Sum[ODM_ASSOCIATE_ENTRY_NUM];\r
258         u4Byte  MainAnt_Cnt[ODM_ASSOCIATE_ENTRY_NUM];\r
259         u4Byte  AuxAnt_Cnt[ODM_ASSOCIATE_ENTRY_NUM];\r
260         u1Byte  RxIdleAnt;\r
261         u1Byte  AntDiv_OnOff;\r
262         BOOLEAN bBecomeLinked;\r
263         u4Byte  MinMaxRSSI;\r
264         u1Byte  idx_AntDiv_counter_2G;\r
265         u1Byte  idx_AntDiv_counter_5G;\r
266         u1Byte  AntDiv_2G_5G;\r
267         u4Byte    CCK_counter_main;\r
268         u4Byte    CCK_counter_aux;      \r
269         u4Byte    OFDM_counter_main;\r
270         u4Byte    OFDM_counter_aux;\r
271 \r
272         #ifdef ODM_EVM_ENHANCE_ANTDIV\r
273         u4Byte  MainAntEVM_Sum[ODM_ASSOCIATE_ENTRY_NUM];\r
274         u4Byte  AuxAntEVM_Sum[ODM_ASSOCIATE_ENTRY_NUM];\r
275         u4Byte  MainAntEVM_Cnt[ODM_ASSOCIATE_ENTRY_NUM];\r
276         u4Byte  AuxAntEVM_Cnt[ODM_ASSOCIATE_ENTRY_NUM];\r
277         BOOLEAN EVM_method_enable;\r
278         u1Byte  TargetAnt_EVM;\r
279         u1Byte  TargetAnt_CRC32;\r
280         u1Byte  TargetAnt_enhance;\r
281         u1Byte  pre_TargetAnt_enhance;\r
282         u2Byte  Main_MPDU_OK_cnt;\r
283         u2Byte  Aux_MPDU_OK_cnt;        \r
284 \r
285         u4Byte  CRC32_Ok_Cnt;\r
286         u4Byte  CRC32_Fail_Cnt;\r
287         u4Byte  MainCRC32_Ok_Cnt;\r
288         u4Byte  AuxCRC32_Ok_Cnt;\r
289         u4Byte  MainCRC32_Fail_Cnt;\r
290         u4Byte  AuxCRC32_Fail_Cnt;\r
291         #endif  \r
292         #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
293         u4Byte    CCK_CtrlFrame_Cnt_main;\r
294         u4Byte    CCK_CtrlFrame_Cnt_aux;\r
295         u4Byte    OFDM_CtrlFrame_Cnt_main;\r
296         u4Byte    OFDM_CtrlFrame_Cnt_aux;\r
297         u4Byte  MainAnt_CtrlFrame_Sum;\r
298         u4Byte  AuxAnt_CtrlFrame_Sum;\r
299         u4Byte  MainAnt_CtrlFrame_Cnt;\r
300         u4Byte  AuxAnt_CtrlFrame_Cnt;\r
301         #endif\r
302         BOOLEAN fix_ant_bfee;\r
303 }FAT_T,*pFAT_T;\r
304 \r
305 \r
306 //1 ============================================================\r
307 //1  enumeration\r
308 //1 ============================================================\r
309 \r
310 \r
311 \r
312 typedef enum _FAT_STATE\r
313 {\r
314         FAT_NORMAL_STATE                        = 0,\r
315         FAT_TRAINING_STATE              = 1,\r
316 }FAT_STATE_E, *PFAT_STATE_E;\r
317 \r
318 \r
319 typedef enum _ANT_DIV_TYPE\r
320 {\r
321         NO_ANTDIV                       = 0xFF, \r
322         CG_TRX_HW_ANTDIV                = 0x01,\r
323         CGCS_RX_HW_ANTDIV       = 0x02,\r
324         FIXED_HW_ANTDIV         = 0x03,\r
325         CG_TRX_SMART_ANTDIV     = 0x04,\r
326         CGCS_RX_SW_ANTDIV       = 0x05,\r
327         S0S1_SW_ANTDIV          = 0x06 //8723B intrnal switch S0 S1\r
328 }ANT_DIV_TYPE_E, *PANT_DIV_TYPE_E;\r
329 \r
330 \r
331 //1 ============================================================\r
332 //1  function prototype\r
333 //1 ============================================================\r
334 \r
335 \r
336 VOID\r
337 ODM_StopAntennaSwitchDm(\r
338         IN      PVOID   pDM_VOID\r
339         );\r
340 VOID\r
341 ODM_SetAntConfig(\r
342         IN      PVOID   pDM_VOID,\r
343         IN      u1Byte          antSetting      // 0=A, 1=B, 2=C, ....\r
344         );\r
345 \r
346 \r
347 #define SwAntDivRestAfterLink   ODM_SwAntDivRestAfterLink\r
348 VOID ODM_SwAntDivRestAfterLink( \r
349         IN      PVOID   pDM_VOID\r
350         );\r
351 \r
352 #if (defined(CONFIG_HW_ANTENNA_DIVERSITY))\r
353 \r
354 VOID\r
355 ODM_UpdateRxIdleAnt(\r
356         IN              PVOID           pDM_VOID, \r
357         IN               u1Byte         Ant\r
358 );\r
359 \r
360 #if (RTL8723B_SUPPORT == 1)||(RTL8821A_SUPPORT == 1)\r
361 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
362 VOID\r
363 ODM_SW_AntDiv_Callback(\r
364         IN      PRT_TIMER               pTimer\r
365         );\r
366 \r
367 VOID\r
368 ODM_SW_AntDiv_WorkitemCallback(\r
369         IN              PVOID            pContext\r
370         );\r
371 \r
372 \r
373 #elif (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
374 \r
375 VOID\r
376 ODM_SW_AntDiv_Callback(\r
377         void            *FunctionContext\r
378         );\r
379 \r
380 #endif\r
381 \r
382 #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
383 VOID\r
384 odm_S0S1_SwAntDivByCtrlFrame(\r
385         IN              PVOID                   pDM_VOID,\r
386         IN              u1Byte                  Step\r
387 );\r
388 \r
389 VOID\r
390 odm_AntselStatisticsOfCtrlFrame(\r
391         IN              PVOID                   pDM_VOID,\r
392         IN              u1Byte                  antsel_tr_mux,\r
393         IN              u4Byte                  RxPWDBAll\r
394 );\r
395 \r
396 VOID\r
397 odm_S0S1_SwAntDivByCtrlFrame_ProcessRSSI(\r
398         IN              PVOID                           pDM_VOID,\r
399         IN              PVOID           p_phy_info_void,\r
400         IN              PVOID           p_pkt_info_void\r
401 );\r
402 \r
403 /*\r
404 VOID\r
405 odm_S0S1_SwAntDivByCtrlFrame_ProcessRSSI(\r
406         IN              PVOID                           pDM_VOID,\r
407         IN              PVOID           p_phy_info_void,\r
408         IN              PVOID           p_pkt_info_void\r
409 );\r
410 */\r
411 \r
412 #endif \r
413 #endif\r
414 \r
415 #ifdef ODM_EVM_ENHANCE_ANTDIV\r
416 VOID\r
417 odm_EVM_FastAntTrainingCallback(\r
418         IN              PVOID           pDM_VOID\r
419 );\r
420 #endif\r
421 \r
422 VOID\r
423 odm_HW_AntDiv(\r
424         IN              PVOID           pDM_VOID\r
425 );\r
426 \r
427 #if( defined(CONFIG_5G_CG_SMART_ANT_DIVERSITY) ) ||( defined(CONFIG_2G_CG_SMART_ANT_DIVERSITY) )\r
428 VOID\r
429 odm_FastAntTraining(\r
430         IN              PVOID           pDM_VOID\r
431 );\r
432 \r
433 VOID\r
434 odm_FastAntTrainingCallback(\r
435         IN              PVOID           pDM_VOID\r
436 );\r
437 \r
438 VOID\r
439 odm_FastAntTrainingWorkItemCallback(\r
440         IN              PVOID           pDM_VOID\r
441 );\r
442 #endif\r
443 \r
444 \r
445 VOID\r
446 ODM_AntDivInit(\r
447         IN              PVOID           pDM_VOID\r
448 );\r
449 \r
450 VOID\r
451 ODM_AntDiv(\r
452         IN              PVOID           pDM_VOID\r
453 );\r
454 \r
455 VOID\r
456 odm_AntselStatistics(\r
457         IN              PVOID                   pDM_VOID,\r
458         IN              u1Byte                  antsel_tr_mux,\r
459         IN              u4Byte                  MacId,\r
460         IN              u4Byte                  utility,\r
461         IN            u1Byte                    method\r
462 );\r
463 /*\r
464 VOID\r
465 ODM_Process_RSSIForAntDiv(      \r
466         IN OUT  PVOID           pDM_VOID,\r
467         IN              PVOID           p_phy_info_void,\r
468         IN              PVOID           p_pkt_info_void\r
469 );\r
470 */\r
471 \r
472 \r
473 VOID\r
474 ODM_Process_RSSIForAntDiv(      \r
475         IN OUT  PVOID           pDM_VOID,\r
476         IN              PVOID           p_phy_info_void,\r
477         IN              PVOID           p_pkt_info_void\r
478 );\r
479 \r
480 \r
481 \r
482 #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
483 VOID\r
484 ODM_SetTxAntByTxInfo(\r
485         IN              PVOID                   pDM_VOID,\r
486         IN              pu1Byte                 pDesc,\r
487         IN              u1Byte                  macId   \r
488 );\r
489 \r
490 #elif(DM_ODM_SUPPORT_TYPE == ODM_AP)\r
491 \r
492 VOID\r
493 ODM_SetTxAntByTxInfo(\r
494         struct  rtl8192cd_priv          *priv,\r
495         struct  tx_desc                 *pdesc,\r
496         unsigned short                  aid     \r
497 );\r
498 \r
499 #endif\r
500 \r
501 \r
502 VOID\r
503 ODM_AntDiv_Config(\r
504         IN              PVOID           pDM_VOID\r
505 );\r
506 \r
507 \r
508 VOID\r
509 ODM_UpdateRxIdleAnt_8723B(\r
510         IN              PVOID                   pDM_VOID,\r
511         IN              u1Byte                  Ant,\r
512         IN              u4Byte                  DefaultAnt, \r
513         IN              u4Byte                  OptionalAnt\r
514 );\r
515 \r
516 VOID\r
517 ODM_AntDivTimers(\r
518         IN              PVOID           pDM_VOID,\r
519         IN              u1Byte          state\r
520 );\r
521 \r
522 #endif //#if (defined(CONFIG_HW_ANTENNA_DIVERSITY))\r
523 \r
524 VOID\r
525 ODM_AntDivReset(\r
526         IN              PVOID           pDM_VOID\r
527 );\r
528 \r
529 VOID\r
530 odm_AntennaDiversityInit(\r
531         IN              PVOID           pDM_VOID\r
532 );\r
533 \r
534 VOID\r
535 odm_AntennaDiversity(\r
536         IN              PVOID           pDM_VOID\r
537 );\r
538 \r
539 \r
540 #endif //#ifndef        __ODMANTDIV_H__\r