8723BU: Update 8723BU wifi driver to version v4.3.16_14189.20150519_BTCOEX2015119...
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8723bu / hal / OUTSRC / phydm_beamforming.h
1 #ifndef __INC_BEAMFORMING_H\r
2 #define __INC_BEAMFORMING_H\r
3 \r
4 #ifndef BEAMFORMING_SUPPORT\r
5 #define BEAMFORMING_SUPPORT             0\r
6 #endif\r
7 \r
8 #if (BEAMFORMING_SUPPORT == 1)\r
9 \r
10 /*Beamforming Related*/\r
11 #include "TXBF/HalComTxbf.h"\r
12 #include "TXBF/HalTxbfJaguar.h"\r
13 #include "TXBF/HalTxbf8192E.h"\r
14 #include "TXBF/HalTxbf8814A.h"\r
15 #include "TXBF/HalTxbf8821B.h"\r
16 \r
17 #define BEAMFORMEE_ENTRY_NUM            2\r
18 #define BEAMFORMER_ENTRY_NUM                    2\r
19 #define GET_BEAMFORM_INFO(_pAdapter)    ((PRT_BEAMFORMING_INFO)(&(((HAL_DATA_TYPE *)((_pAdapter)->HalData))->DM_OutSrc.BeamformingInfo)))\r
20 \r
21 typedef enum _BEAMFORMING_ENTRY_STATE\r
22 {\r
23         BEAMFORMING_ENTRY_STATE_UNINITIALIZE, \r
24         BEAMFORMING_ENTRY_STATE_INITIALIZEING, \r
25         BEAMFORMING_ENTRY_STATE_INITIALIZED, \r
26         BEAMFORMING_ENTRY_STATE_PROGRESSING, \r
27         BEAMFORMING_ENTRY_STATE_PROGRESSED, \r
28 }BEAMFORMING_ENTRY_STATE, *PBEAMFORMING_ENTRY_STATE;\r
29 \r
30 \r
31 typedef enum _BEAMFORMING_STATE\r
32 {\r
33         BEAMFORMING_STATE_END,\r
34         BEAMFORMING_STATE_START_1BFee, \r
35         BEAMFORMING_STATE_START_2BFee\r
36 }BEAMFORMING_STATE, *PBEAMFORMING_STATE;\r
37 \r
38 typedef enum _BEAMFORMING_NOTIFY_STATE\r
39 {\r
40         BEAMFORMING_NOTIFY_NONE,\r
41         BEAMFORMING_NOTIFY_ADD,\r
42         BEAMFORMING_NOTIFY_DELETE,\r
43         BEAMFORMING_NOTIFY_RESET\r
44 } BEAMFORMING_NOTIFY_STATE, *PBEAMFORMING_NOTIFY_STATE;\r
45 \r
46 typedef enum _BEAMFORMING_CAP\r
47 {\r
48         BEAMFORMING_CAP_NONE = 0x0,\r
49         BEAMFORMER_CAP_HT_EXPLICIT = 0x1, \r
50         BEAMFORMEE_CAP_HT_EXPLICIT = 0x2, \r
51         BEAMFORMER_CAP_VHT_SU = 0x4,                    // Self has er Cap, because Reg er  & peer ee\r
52         BEAMFORMEE_CAP_VHT_SU = 0x8,                    // Self has ee Cap, because Reg ee & peer er \r
53         BEAMFORMER_CAP = 0x10,\r
54         BEAMFORMEE_CAP = 0x20,\r
55 }BEAMFORMING_CAP, *PBEAMFORMING_CAP;\r
56 \r
57 \r
58 typedef enum _SOUNDING_MODE\r
59 {\r
60         SOUNDING_SW_VHT_TIMER = 0x0,\r
61         SOUNDING_SW_HT_TIMER = 0x1, \r
62         SOUNDING_STOP_All_TIMER = 0x2, \r
63         SOUNDING_HW_VHT_TIMER = 0x3,                    \r
64         SOUNDING_HW_HT_TIMER = 0x4,\r
65         SOUNDING_STOP_OID_TIMER = 0x5, \r
66         SOUNDING_AUTO_VHT_TIMER = 0x6,\r
67         SOUNDING_AUTO_HT_TIMER = 0x7,\r
68         SOUNDING_FW_VHT_TIMER = 0x8,\r
69         SOUNDING_FW_HT_TIMER = 0x9,\r
70 }SOUNDING_MODE, *PSOUNDING_MODE;\r
71 \r
72 \r
73 typedef struct _RT_BEAMFORMING_ENTRY {\r
74         BOOLEAN bUsed;\r
75         BOOLEAN bTxBF;\r
76         BOOLEAN bSound;\r
77         u2Byte  AID;                            // Used to construct AID field of NDPA packet.\r
78         u2Byte  MacId;                          // Used to Set Reg42C in IBSS mode. \r
79         u2Byte  P_AID;                          // Used to fill Reg42C & Reg714 to compare with P_AID of Tx DESC. \r
80         u1Byte  MacAddr[6];                     // Used to fill Reg6E4 to fill Mac address of CSI report frame.\r
81         CHANNEL_WIDTH                   SoundBW;        // Sounding BandWidth\r
82         u2Byte                                  SoundPeriod;\r
83         BEAMFORMING_CAP                 BeamformEntryCap;\r
84         BEAMFORMING_ENTRY_STATE BeamformEntryState;     \r
85         BOOLEAN                                         bBeamformingInProgress;\r
86 //      u1Byte  LogSeq;                                                                 // Move to _RT_BEAMFORMER_ENTRY\r
87 //      u2Byte  LogRetryCnt:3;          // 0~4                          // Move to _RT_BEAMFORMER_ENTRY\r
88 //      u2Byte  LogSuccessCnt:2;                // 0~2                          // Move to _RT_BEAMFORMER_ENTRY\r
89         u2Byte  LogStatusFailCnt:5;     // 0~21\r
90         u2Byte  DefaultCSICnt:5;                // 0~21\r
91         u1Byte  CSIMatrix[327];\r
92         u2Byte  CSIMatrixLen;\r
93         u1Byte  NumofSoundingDim;\r
94         u1Byte  CompSteeringNumofBFer;\r
95 } RT_BEAMFORMING_ENTRY, *PRT_BEAMFORMING_ENTRY;\r
96 \r
97 typedef struct _RT_BEAMFORMER_ENTRY {\r
98         BOOLEAN                         bUsed;\r
99         // P_AID of BFer entry is probably not used\r
100         u2Byte                          P_AID;                          // Used to fill Reg42C & Reg714 to compare with P_AID of Tx DESC. \r
101         u1Byte                          MacAddr[6];\r
102         BEAMFORMING_CAP         BeamformEntryCap;\r
103         u1Byte                          NumofSoundingDim;\r
104         u1Byte                          LogSeq;                                                 // Modified by Jeffery @2014-10-29\r
105         u2Byte                          LogRetryCnt:3;          // 0~4          // Modified by Jeffery @2014-10-29      \r
106         u2Byte                          LogSuccessCnt:2;        // 0~2          // Modified by Jeffery @2014-10-29\r
107 } RT_BEAMFORMER_ENTRY, *PRT_BEAMFORMER_ENTRY;\r
108 \r
109 typedef struct _RT_SOUNDING_INFO {\r
110         u1Byte                  SoundIdx;\r
111         CHANNEL_WIDTH   SoundBW;\r
112         SOUNDING_MODE   SoundMode; \r
113         u2Byte                  SoundPeriod;\r
114 } RT_SOUNDING_INFO, *PRT_SOUNDING_INFO;\r
115 \r
116 \r
117 \r
118 typedef struct _RT_BEAMFORMING_OID_INFO {\r
119         u1Byte                  SoundOidIdx;\r
120         CHANNEL_WIDTH   SoundOidBW;     \r
121         SOUNDING_MODE   SoundOidMode;\r
122         u2Byte                  SoundOidPeriod;\r
123 } RT_BEAMFORMING_OID_INFO, *PRT_BEAMFORMING_OID_INFO;\r
124 \r
125 \r
126 typedef struct _RT_BEAMFORMING_INFO {\r
127         BEAMFORMING_CAP                         BeamformCap;\r
128         BEAMFORMING_STATE                       BeamformState;\r
129         RT_BEAMFORMING_ENTRY            BeamformeeEntry[BEAMFORMEE_ENTRY_NUM];\r
130         RT_BEAMFORMER_ENTRY                     BeamformerEntry[BEAMFORMER_ENTRY_NUM];\r
131         u1Byte                                          BeamformeeCurIdx;\r
132         RT_TIMER                                        BeamformingTimer;\r
133         RT_SOUNDING_INFO                        SoundingInfo;\r
134         RT_BEAMFORMING_OID_INFO         BeamformingOidInfo;\r
135         HAL_TXBF_INFO                           TxbfInfo;\r
136 } RT_BEAMFORMING_INFO, *PRT_BEAMFORMING_INFO;\r
137 \r
138 \r
139 typedef struct _RT_NDPA_STA_INFO {\r
140         u2Byte  AID:12; \r
141         u2Byte  FeedbackType:1;\r
142         u2Byte  NcIndex:3;      \r
143 } RT_NDPA_STA_INFO, *PRT_NDPA_STA_INFO;\r
144 \r
145 \r
146 BEAMFORMING_CAP\r
147 phydm_Beamforming_GetEntryBeamCapByMacId(\r
148         IN      PVOID   pDM_VOID,\r
149         IN      u1Byte  MacId\r
150  );\r
151 \r
152 \r
153 VOID\r
154 Beamforming_GidPAid(\r
155         PADAPTER        Adapter,\r
156         PRT_TCB         pTcb\r
157         );\r
158 \r
159 \r
160 BOOLEAN\r
161 Beamforming_SendHTNDPAPacket(\r
162         IN      PADAPTER                Adapter,\r
163         IN      pu1Byte                 RA,\r
164         IN      CHANNEL_WIDTH   BW, \r
165         IN      u1Byte                  QIdx\r
166         );\r
167 \r
168 \r
169 BOOLEAN\r
170 Beamforming_SendVHTNDPAPacket(\r
171         IN      PADAPTER                Adapter,\r
172         IN      pu1Byte                 RA,\r
173         IN      u2Byte                  AID,\r
174         IN      CHANNEL_WIDTH   BW,\r
175         IN      u1Byte                  QIdx\r
176         );\r
177 \r
178 \r
179 VOID\r
180 phydm_Beamforming_Notify(\r
181         IN      PVOID   pDM_VOID\r
182         );\r
183 \r
184 \r
185 VOID\r
186 Beamforming_Enter(\r
187         PADAPTER                Adapter,\r
188         PRT_WLAN_STA    pSTA\r
189         );\r
190 \r
191 VOID\r
192 Beamforming_Leave(\r
193         PADAPTER                Adapter,\r
194         pu1Byte                 RA\r
195         );\r
196 \r
197 BOOLEAN\r
198 BeamformingStart_FW(\r
199         PADAPTER                Adapter,\r
200         u1Byte                  Idx\r
201         );\r
202 \r
203 VOID\r
204 Beamforming_CheckSoundingSuccess(\r
205         PADAPTER                Adapter,\r
206         BOOLEAN                 Status  \r
207 );\r
208 \r
209 VOID\r
210 phydm_Beamforming_End_SW(\r
211         IN      PVOID   pDM_VOID,\r
212         BOOLEAN                 Status  \r
213         );\r
214 \r
215 VOID\r
216 phydm_Beamforming_End_FW(\r
217         IN      PVOID   pDM_VOID\r
218         );\r
219 \r
220 VOID\r
221 Beamforming_TimerCallback(\r
222         PADAPTER                        Adapter\r
223         );\r
224 \r
225 VOID\r
226 phydm_Beamforming_Init(\r
227         IN      PVOID           pDM_VOID\r
228         );\r
229 \r
230 \r
231 \r
232 BEAMFORMING_CAP\r
233 phydm_Beamforming_GetBeamCap(\r
234         IN      PVOID   pDM_VOID,\r
235         IN PRT_BEAMFORMING_INFO         pBeamInfo\r
236         );\r
237 \r
238 \r
239 BOOLEAN\r
240 BeamformingControl_V1(\r
241         PADAPTER                Adapter,\r
242         pu1Byte                 RA,\r
243         u1Byte                  AID,\r
244         u1Byte                  Mode,\r
245         CHANNEL_WIDTH   BW,\r
246         u1Byte                  Rate\r
247         );\r
248 \r
249 \r
250 BOOLEAN\r
251 phydm_BeamformingControl_V2(\r
252         IN      PVOID           pDM_VOID,\r
253         u1Byte                  Idx,\r
254         u1Byte                  Mode, \r
255         CHANNEL_WIDTH   BW,\r
256         u2Byte                  Period\r
257         );\r
258 \r
259 \r
260 BOOLEAN\r
261 BeamformingControl_V3(\r
262         PADAPTER                Adapter,\r
263         u1Byte                  Threshold,\r
264         u2Byte                  Period\r
265         );\r
266 \r
267 VOID\r
268 phydm_Beamforming_Watchdog(\r
269         IN      PVOID           pDM_VOID\r
270         );\r
271 \r
272 VOID\r
273 Beamforming_SWTimerCallback(\r
274         PRT_TIMER               pTimer\r
275         );\r
276 \r
277 #else\r
278 #define Beamforming_GidPAid(Adapter, pTcb)\r
279 #define Beamforming_Enter(Adapter, pSTA)\r
280 #define Beamforming_Leave(Adapter, RA)\r
281 #define Beamforming_End_SW(Adapter, Status)\r
282 #define Beamforming_End_FW(Adapter)\r
283 #define Beamforming_Init(Adapter)\r
284 #define Beamforming_Release(Adapter)\r
285 #define BeamformingControl_V1(Adapter, RA, AID, Mode, BW, Rate)                 (TRUE)\r
286 #define BeamformingControl_V2(Adapter, Idx, Mode, BW, Period)                   (TRUE)\r
287 #define Beamforming_TimerCallback(Adapter)\r
288 #define Beamforming_Watchdog(Adapter)\r
289 #endif\r
290 \r
291 \r
292 RT_STATUS\r
293 Beamforming_GetReportFrame(\r
294         IN      PADAPTER                Adapter,\r
295         IN      PRT_RFD                 pRfd,\r
296         IN      POCTET_STRING   pPduOS\r
297         );\r
298 \r
299 VOID\r
300 Beamforming_GetNDPAFrame(\r
301         IN      PADAPTER                Adapter,\r
302         IN      OCTET_STRING    pduOS\r
303         );\r
304 \r
305 #endif\r