net: wireless: rockchip_wlan: add rtl8723ds support
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8723ds / hal / phydm / phydm_beamforming.h
1 #ifndef __INC_PHYDM_BEAMFORMING_H\r
2 #define __INC_PHYDM_BEAMFORMING_H\r
3 \r
4 #ifndef BEAMFORMING_SUPPORT\r
5 #define BEAMFORMING_SUPPORT             0\r
6 #endif\r
7 \r
8 /*Beamforming Related*/\r
9 #include "txbf/halcomtxbf.h"\r
10 #include "txbf/haltxbfjaguar.h"\r
11 #include "txbf/haltxbf8192e.h"\r
12 #include "txbf/haltxbf8814a.h"\r
13 #include "txbf/haltxbf8822b.h"\r
14 #include "txbf/haltxbfinterface.h"\r
15 \r
16 #if (BEAMFORMING_SUPPORT == 1)\r
17 \r
18 #define MAX_BEAMFORMEE_SU       2\r
19 #define MAX_BEAMFORMER_SU       2\r
20 #if (RTL8822B_SUPPORT == 1)\r
21 #define MAX_BEAMFORMEE_MU       6\r
22 #define MAX_BEAMFORMER_MU       1\r
23 #else\r
24 #define MAX_BEAMFORMEE_MU       0\r
25 #define MAX_BEAMFORMER_MU       0\r
26 #endif\r
27 \r
28 #define BEAMFORMEE_ENTRY_NUM            (MAX_BEAMFORMEE_SU + MAX_BEAMFORMEE_MU)\r
29 #define BEAMFORMER_ENTRY_NUM            (MAX_BEAMFORMER_SU + MAX_BEAMFORMER_MU)\r
30 \r
31 #if (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
32 /*for different naming between WIN and CE*/\r
33 #define BEACON_QUEUE    BCN_QUEUE_INX\r
34 #define NORMAL_QUEUE    MGT_QUEUE_INX\r
35 #define RT_DISABLE_FUNC RTW_DISABLE_FUNC\r
36 #define RT_ENABLE_FUNC RTW_ENABLE_FUNC\r
37 #endif\r
38 \r
39 typedef enum _BEAMFORMING_ENTRY_STATE {\r
40         BEAMFORMING_ENTRY_STATE_UNINITIALIZE, \r
41         BEAMFORMING_ENTRY_STATE_INITIALIZEING, \r
42         BEAMFORMING_ENTRY_STATE_INITIALIZED, \r
43         BEAMFORMING_ENTRY_STATE_PROGRESSING, \r
44         BEAMFORMING_ENTRY_STATE_PROGRESSED \r
45 } BEAMFORMING_ENTRY_STATE, *PBEAMFORMING_ENTRY_STATE;\r
46 \r
47 \r
48 typedef enum _BEAMFORMING_NOTIFY_STATE {\r
49         BEAMFORMING_NOTIFY_NONE,\r
50         BEAMFORMING_NOTIFY_ADD,\r
51         BEAMFORMING_NOTIFY_DELETE,\r
52         BEAMFORMEE_NOTIFY_ADD_SU,\r
53         BEAMFORMEE_NOTIFY_DELETE_SU,\r
54         BEAMFORMEE_NOTIFY_ADD_MU,\r
55         BEAMFORMEE_NOTIFY_DELETE_MU,\r
56         BEAMFORMING_NOTIFY_RESET\r
57 } BEAMFORMING_NOTIFY_STATE, *PBEAMFORMING_NOTIFY_STATE;\r
58 \r
59 typedef enum _BEAMFORMING_CAP {\r
60         BEAMFORMING_CAP_NONE = 0x0,\r
61         BEAMFORMER_CAP_HT_EXPLICIT = BIT1, \r
62         BEAMFORMEE_CAP_HT_EXPLICIT = BIT2, \r
63         BEAMFORMER_CAP_VHT_SU = BIT5,                   /* Self has er Cap, because Reg er  & peer ee */\r
64         BEAMFORMEE_CAP_VHT_SU = BIT6,                   /* Self has ee Cap, because Reg ee & peer er */\r
65         BEAMFORMER_CAP_VHT_MU = BIT7,                   /* Self has er Cap, because Reg er  & peer ee */\r
66         BEAMFORMEE_CAP_VHT_MU = BIT8,                   /* Self has ee Cap, because Reg ee & peer er */\r
67         BEAMFORMER_CAP = BIT9,\r
68         BEAMFORMEE_CAP = BIT10,\r
69 }BEAMFORMING_CAP, *PBEAMFORMING_CAP;\r
70 \r
71 \r
72 typedef enum _SOUNDING_MODE {\r
73         SOUNDING_SW_VHT_TIMER = 0x0,\r
74         SOUNDING_SW_HT_TIMER = 0x1, \r
75         SOUNDING_STOP_All_TIMER = 0x2, \r
76         SOUNDING_HW_VHT_TIMER = 0x3,                    \r
77         SOUNDING_HW_HT_TIMER = 0x4,\r
78         SOUNDING_STOP_OID_TIMER = 0x5, \r
79         SOUNDING_AUTO_VHT_TIMER = 0x6,\r
80         SOUNDING_AUTO_HT_TIMER = 0x7,\r
81         SOUNDING_FW_VHT_TIMER = 0x8,\r
82         SOUNDING_FW_HT_TIMER = 0x9,\r
83 }SOUNDING_MODE, *PSOUNDING_MODE;\r
84 \r
85 typedef struct _RT_BEAMFORM_STAINFO {\r
86         pu1Byte                                         RA; \r
87         u2Byte                                          AID; \r
88         u2Byte                                          MacID;\r
89         u1Byte                                          MyMacAddr[6];\r
90         WIRELESS_MODE                           WirelessMode;\r
91         CHANNEL_WIDTH                           BW;\r
92         BEAMFORMING_CAP                 BeamformCap;\r
93         u1Byte                                          HtBeamformCap;\r
94         u2Byte                                          VhtBeamformCap;\r
95         u1Byte                                          CurBeamform; \r
96         u2Byte                                          CurBeamformVHT;\r
97 } RT_BEAMFORM_STAINFO, *PRT_BEAMFORM_STAINFO;\r
98 \r
99 \r
100 typedef struct _RT_BEAMFORMEE_ENTRY {\r
101         BOOLEAN bUsed;\r
102         BOOLEAN bTxBF;\r
103         BOOLEAN bSound;\r
104         u2Byte  AID;                            /*Used to construct AID field of NDPA packet.*/\r
105         u2Byte  MacId;                          /*Used to Set Reg42C in IBSS mode. */\r
106         u2Byte  P_AID;                          /*Used to fill Reg42C & Reg714 to compare with P_AID of Tx DESC. */\r
107         u2Byte  G_ID;                           /*Used to fill Tx DESC*/\r
108         u1Byte  MyMacAddr[6];\r
109         u1Byte  MacAddr[6];                     /*Used to fill Reg6E4 to fill Mac address of CSI report frame.*/\r
110         CHANNEL_WIDTH                   SoundBW;                /*Sounding BandWidth*/\r
111         u2Byte                                  SoundPeriod;\r
112         BEAMFORMING_CAP                 BeamformEntryCap;\r
113         BEAMFORMING_ENTRY_STATE BeamformEntryState;     \r
114         BOOLEAN                                         bBeamformingInProgress;\r
115         /*u1Byte        LogSeq;                                                                 // Move to _RT_BEAMFORMER_ENTRY*/\r
116         /*u2Byte        LogRetryCnt:3;          // 0~4                          // Move to _RT_BEAMFORMER_ENTRY*/\r
117         /*u2Byte        LogSuccessCnt:2;                // 0~2                          // Move to _RT_BEAMFORMER_ENTRY*/\r
118         u2Byte  LogStatusFailCnt:5;     // 0~21\r
119         u2Byte  DefaultCSICnt:5;                // 0~21\r
120         u1Byte  CSIMatrix[327];\r
121         u2Byte  CSIMatrixLen;\r
122         u1Byte  NumofSoundingDim;\r
123         u1Byte  CompSteeringNumofBFer;\r
124         u1Byte  su_reg_index;\r
125         /*For MU-MIMO*/\r
126         BOOLEAN is_mu_sta;\r
127         u1Byte  mu_reg_index;\r
128         u1Byte  gid_valid[8];\r
129         u1Byte  user_position[16];\r
130 } RT_BEAMFORMEE_ENTRY, *PRT_BEAMFORMEE_ENTRY;\r
131 \r
132 typedef struct _RT_BEAMFORMER_ENTRY {\r
133         BOOLEAN                         bUsed;\r
134         /*P_AID of BFer entry is probably not used*/\r
135         u2Byte                          P_AID;                                  /*Used to fill Reg42C & Reg714 to compare with P_AID of Tx DESC. */\r
136         u2Byte                          G_ID;\r
137         u1Byte                          MyMacAddr[6];\r
138         u1Byte                          MacAddr[6];\r
139         BEAMFORMING_CAP         BeamformEntryCap;\r
140         u1Byte                          NumofSoundingDim;\r
141         u1Byte                          ClockResetTimes;                /*Modified by Jeffery @2015-04-10*/\r
142         u1Byte                          PreLogSeq;                              /*Modified by Jeffery @2015-03-30*/\r
143         u1Byte                          LogSeq;                                 /*Modified by Jeffery @2014-10-29*/\r
144         u2Byte                          LogRetryCnt:3;                  /*Modified by Jeffery @2014-10-29*/\r
145         u2Byte                          LogSuccess:2;                   /*Modified by Jeffery @2014-10-29*/\r
146         u1Byte                          su_reg_index;\r
147          /*For MU-MIMO*/\r
148         BOOLEAN                         is_mu_ap;\r
149         u1Byte                          gid_valid[8];\r
150         u1Byte                          user_position[16];\r
151         u2Byte                          AID;\r
152 } RT_BEAMFORMER_ENTRY, *PRT_BEAMFORMER_ENTRY;\r
153 \r
154 typedef struct _RT_SOUNDING_INFO {\r
155         u1Byte                  SoundIdx;\r
156         CHANNEL_WIDTH   SoundBW;\r
157         SOUNDING_MODE   SoundMode; \r
158         u2Byte                  SoundPeriod;\r
159 } RT_SOUNDING_INFO, *PRT_SOUNDING_INFO;\r
160 \r
161 \r
162 \r
163 typedef struct _RT_BEAMFORMING_OID_INFO {\r
164         u1Byte                  SoundOidIdx;\r
165         CHANNEL_WIDTH   SoundOidBW;     \r
166         SOUNDING_MODE   SoundOidMode;\r
167         u2Byte                  SoundOidPeriod;\r
168 } RT_BEAMFORMING_OID_INFO, *PRT_BEAMFORMING_OID_INFO;\r
169 \r
170 \r
171 typedef struct _RT_BEAMFORMING_INFO {\r
172         BEAMFORMING_CAP                 BeamformCap;\r
173         RT_BEAMFORMEE_ENTRY             BeamformeeEntry[BEAMFORMEE_ENTRY_NUM];\r
174         RT_BEAMFORMER_ENTRY             BeamformerEntry[BEAMFORMER_ENTRY_NUM];\r
175         RT_BEAMFORM_STAINFO             BeamformSTAinfo;\r
176         u1Byte                                  BeamformeeCurIdx;\r
177         RT_TIMER                                        BeamformingTimer;\r
178         RT_TIMER                                        mu_timer;\r
179         RT_SOUNDING_INFO                        SoundingInfo;\r
180         RT_BEAMFORMING_OID_INFO BeamformingOidInfo;\r
181         HAL_TXBF_INFO                   TxbfInfo;\r
182         u1Byte                                  SoundingSequence;\r
183         u1Byte                                  beamformee_su_cnt;\r
184         u1Byte                                  beamformer_su_cnt;\r
185         u4Byte                                  beamformee_su_reg_maping;\r
186         u4Byte                                  beamformer_su_reg_maping;\r
187         /*For MU-MINO*/\r
188         u1Byte                                  beamformee_mu_cnt;\r
189         u1Byte                                  beamformer_mu_cnt;\r
190         u4Byte                                  beamformee_mu_reg_maping;\r
191         u1Byte                                  mu_ap_index;\r
192         BOOLEAN                                 is_mu_sounding;\r
193         u1Byte                                  FirstMUBFeeIndex;\r
194         BOOLEAN                                 is_mu_sounding_in_progress;\r
195         BOOLEAN                                 dbg_disable_mu_tx;\r
196         BOOLEAN                                 applyVmatrix;\r
197         BOOLEAN                                 snding3SS;\r
198 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
199         PADAPTER                                SourceAdapter;\r
200 #endif\r
201         /* Control register */\r
202         u4Byte                                  RegMUTxCtrl;            /* For USB/SDIO interfaces aync I/O  */\r
203 } RT_BEAMFORMING_INFO, *PRT_BEAMFORMING_INFO;\r
204 \r
205 \r
206 typedef struct _RT_NDPA_STA_INFO {\r
207         u2Byte  AID:12; \r
208         u2Byte  FeedbackType:1;\r
209         u2Byte  NcIndex:3;      \r
210 } RT_NDPA_STA_INFO, *PRT_NDPA_STA_INFO;\r
211 \r
212 typedef enum _PHYDM_ACTING_TYPE {\r
213         PhyDM_ACTING_AS_IBSS = 0,\r
214         PhyDM_ACTING_AS_AP = 1\r
215 } PHYDM_ACTING_TYPE;\r
216 \r
217 \r
218 BEAMFORMING_CAP\r
219 phydm_Beamforming_GetEntryBeamCapByMacId(\r
220         IN      PVOID   pDM_VOID,\r
221         IN      u1Byte  MacId\r
222  );\r
223 \r
224 PRT_BEAMFORMEE_ENTRY\r
225 phydm_Beamforming_GetBFeeEntryByAddr(\r
226         IN      PVOID           pDM_VOID,\r
227         IN      pu1Byte         RA,\r
228         OUT     pu1Byte         Idx\r
229         );\r
230 \r
231 PRT_BEAMFORMER_ENTRY\r
232 phydm_Beamforming_GetBFerEntryByAddr(\r
233         IN      PVOID   pDM_VOID,\r
234         IN      pu1Byte TA,\r
235         OUT     pu1Byte Idx\r
236         );\r
237 \r
238 VOID\r
239 phydm_Beamforming_Notify(\r
240         IN      PVOID   pDM_VOID\r
241         );\r
242 \r
243 BOOLEAN\r
244 phydm_actingDetermine(\r
245         IN PVOID                pDM_VOID,\r
246         IN      PHYDM_ACTING_TYPE       type\r
247         );\r
248 \r
249 VOID\r
250 Beamforming_Enter(\r
251         IN PVOID                pDM_VOID,\r
252         IN u2Byte       staIdx\r
253         );\r
254 \r
255 VOID\r
256 Beamforming_Leave(\r
257         IN PVOID                pDM_VOID,\r
258         pu1Byte                 RA\r
259         );\r
260 \r
261 BOOLEAN\r
262 BeamformingStart_FW(\r
263         IN PVOID                        pDM_VOID,\r
264         u1Byte                  Idx\r
265         );\r
266 \r
267 VOID\r
268 Beamforming_CheckSoundingSuccess(\r
269         IN PVOID                        pDM_VOID,\r
270         BOOLEAN                 Status  \r
271 );\r
272 \r
273 VOID\r
274 phydm_Beamforming_End_SW(\r
275         IN PVOID                pDM_VOID,\r
276         BOOLEAN                 Status  \r
277         );\r
278 \r
279 VOID\r
280 Beamforming_TimerCallback(\r
281         IN PVOID                        pDM_VOID\r
282         );\r
283 \r
284 VOID\r
285 phydm_Beamforming_Init(\r
286         IN      PVOID           pDM_VOID\r
287         );\r
288 \r
289 \r
290 \r
291 BEAMFORMING_CAP\r
292 phydm_Beamforming_GetBeamCap(\r
293         IN PVOID                        pDM_VOID,\r
294         IN PRT_BEAMFORMING_INFO         pBeamInfo\r
295         );\r
296 \r
297 \r
298 BOOLEAN\r
299 BeamformingControl_V1(\r
300         IN PVOID                        pDM_VOID,\r
301         pu1Byte                 RA,\r
302         u1Byte                  AID,\r
303         u1Byte                  Mode,\r
304         CHANNEL_WIDTH   BW,\r
305         u1Byte                  Rate\r
306         );\r
307 \r
308 \r
309 BOOLEAN\r
310 phydm_BeamformingControl_V2(\r
311         IN      PVOID           pDM_VOID,\r
312         u1Byte                  Idx,\r
313         u1Byte                  Mode, \r
314         CHANNEL_WIDTH   BW,\r
315         u2Byte                  Period\r
316         );\r
317 \r
318 VOID\r
319 phydm_Beamforming_Watchdog(\r
320         IN      PVOID           pDM_VOID\r
321         );\r
322 \r
323 VOID\r
324 Beamforming_SWTimerCallback(\r
325 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
326         PRT_TIMER               pTimer\r
327 #elif(DM_ODM_SUPPORT_TYPE == ODM_CE)\r
328         void *FunctionContext\r
329 #endif\r
330         );\r
331 \r
332 BOOLEAN\r
333 Beamforming_SendHTNDPAPacket(\r
334         IN      PVOID                   pDM_VOID,\r
335         IN      pu1Byte                 RA,\r
336         IN      CHANNEL_WIDTH   BW, \r
337         IN      u1Byte                  QIdx\r
338         );\r
339 \r
340 \r
341 BOOLEAN\r
342 Beamforming_SendVHTNDPAPacket(\r
343         IN      PVOID                   pDM_VOID,\r
344         IN      pu1Byte                 RA,\r
345         IN      u2Byte                  AID,\r
346         IN      CHANNEL_WIDTH   BW,\r
347         IN      u1Byte                  QIdx\r
348         );\r
349 \r
350 #else\r
351 #define Beamforming_GidPAid(Adapter, pTcb)\r
352 #define phydm_actingDetermine(pDM_Odm, type)    FALSE\r
353 #define Beamforming_Enter(pDM_Odm, staIdx)\r
354 #define Beamforming_Leave(pDM_Odm, RA)\r
355 #define Beamforming_End_FW(pDMOdm)\r
356 #define BeamformingControl_V1(pDM_Odm, RA, AID, Mode, BW, Rate)         TRUE\r
357 #define BeamformingControl_V2(pDM_Odm, Idx, Mode, BW, Period)           TRUE\r
358 #define phydm_Beamforming_End_SW(pDM_Odm, _Status)\r
359 #define Beamforming_TimerCallback(pDM_Odm)\r
360 #define phydm_Beamforming_Init(pDM_Odm)\r
361 #define phydm_BeamformingControl_V2(pDM_Odm, _Idx, _Mode, _BW, _Period) FALSE\r
362 #define Beamforming_Watchdog(pDM_Odm)\r
363 #define phydm_Beamforming_Watchdog(pDM_Odm)\r
364 \r
365 \r
366 #endif\r
367 #endif\r