net: wireless: rockchip_wlan: add rtl8723bs support
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8723bs / hal / phydm / txbf / halcomtxbf.c
1 //============================================================\r
2 // Description:\r
3 //\r
4 // This file is for TXBF mechanism\r
5 //\r
6 //============================================================\r
7 #include "mp_precomp.h"\r
8 #include "../phydm_precomp.h"\r
9 \r
10 #if (BEAMFORMING_SUPPORT == 1)\r
11 /*Beamforming halcomtxbf API create by YuChen 2015/05*/\r
12 \r
13 VOID\r
14 halComTxbf_beamformInit(\r
15         IN PVOID                        pDM_VOID\r
16         )\r
17 {\r
18         PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
19 \r
20         if (pDM_Odm->SupportICType & ODM_RTL8822B)\r
21                 HalTxbf8822B_Init(pDM_Odm);\r
22 }\r
23 \r
24 /*Only used for MU BFer Entry when get GID management frame (self is as MU STA)*/\r
25 VOID\r
26 halComTxbf_ConfigGtab(\r
27         IN PVOID                        pDM_VOID\r
28 )\r
29 {\r
30         PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
31 \r
32         if (pDM_Odm->SupportICType & ODM_RTL8822B)\r
33                 HalTxbf8822B_ConfigGtab(pDM_Odm);\r
34 }\r
35 \r
36 VOID\r
37 phydm_beamformSetSoundingEnter(\r
38         IN PVOID                        pDM_VOID\r
39         )\r
40 {\r
41         PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
42 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
43         PHAL_TXBF_INFO  pTxbfInfo = &pDM_Odm->BeamformingInfo.TxbfInfo;\r
44 \r
45         if (PlatformIsWorkItemScheduled(&(pTxbfInfo->Txbf_EnterWorkItem)) == FALSE)\r
46                 PlatformScheduleWorkItem(&(pTxbfInfo->Txbf_EnterWorkItem));\r
47 #else\r
48         halComTxbf_EnterWorkItemCallback(pDM_Odm);\r
49 #endif\r
50 }\r
51 \r
52 VOID\r
53 phydm_beamformSetSoundingLeave(\r
54         IN PVOID                        pDM_VOID\r
55         )\r
56 {\r
57         PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
58 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
59         PHAL_TXBF_INFO  pTxbfInfo = &pDM_Odm->BeamformingInfo.TxbfInfo;\r
60 \r
61         if (PlatformIsWorkItemScheduled(&(pTxbfInfo->Txbf_LeaveWorkItem)) == FALSE)\r
62                 PlatformScheduleWorkItem(&(pTxbfInfo->Txbf_LeaveWorkItem));\r
63 #else\r
64         halComTxbf_LeaveWorkItemCallback(pDM_Odm);\r
65 #endif\r
66 }\r
67 \r
68 VOID\r
69 phydm_beamformSetSoundingRate(\r
70         IN PVOID                        pDM_VOID\r
71         )\r
72 {\r
73         PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
74 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
75         PHAL_TXBF_INFO  pTxbfInfo = &pDM_Odm->BeamformingInfo.TxbfInfo;\r
76 \r
77         if (PlatformIsWorkItemScheduled(&(pTxbfInfo->Txbf_RateWorkItem)) == FALSE)\r
78                 PlatformScheduleWorkItem(&(pTxbfInfo->Txbf_RateWorkItem));\r
79 #else\r
80         halComTxbf_RateWorkItemCallback(pDM_Odm);\r
81 #endif\r
82 }\r
83 \r
84 VOID\r
85 phydm_beamformSetSoundingStatus(\r
86         IN PVOID                        pDM_VOID\r
87         )\r
88 {\r
89         PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
90 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
91         PHAL_TXBF_INFO  pTxbfInfo = &pDM_Odm->BeamformingInfo.TxbfInfo;\r
92 \r
93         if (PlatformIsWorkItemScheduled(&(pTxbfInfo->Txbf_StatusWorkItem)) == FALSE)\r
94                 PlatformScheduleWorkItem(&(pTxbfInfo->Txbf_StatusWorkItem));\r
95 #else\r
96         halComTxbf_StatusWorkItemCallback(pDM_Odm);\r
97 #endif\r
98 }\r
99 \r
100 VOID\r
101 phydm_beamformSetSoundingFwNdpa(\r
102         IN PVOID                        pDM_VOID\r
103         )\r
104 {\r
105         PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
106 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
107         PHAL_TXBF_INFO  pTxbfInfo = &pDM_Odm->BeamformingInfo.TxbfInfo;\r
108 \r
109         if (*pDM_Odm->pbFwDwRsvdPageInProgress)\r
110                 ODM_SetTimer(pDM_Odm, &(pTxbfInfo->Txbf_FwNdpaTimer), 5);\r
111         else\r
112                 PlatformScheduleWorkItem(&(pTxbfInfo->Txbf_FwNdpaWorkItem));\r
113 #else\r
114         halComTxbf_FwNdpaWorkItemCallback(pDM_Odm);\r
115 #endif\r
116 }\r
117 \r
118 VOID\r
119 phydm_beamformSetSoundingClk(\r
120         IN PVOID                        pDM_VOID\r
121         )\r
122 {\r
123         PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
124 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
125         PHAL_TXBF_INFO  pTxbfInfo = &pDM_Odm->BeamformingInfo.TxbfInfo;\r
126 \r
127         if (PlatformIsWorkItemScheduled(&(pTxbfInfo->Txbf_ClkWorkItem)) == FALSE)\r
128                         PlatformScheduleWorkItem(&(pTxbfInfo->Txbf_ClkWorkItem));\r
129 #elif(DM_ODM_SUPPORT_TYPE == ODM_CE)\r
130         PADAPTER        padapter = pDM_Odm->Adapter;\r
131 \r
132         rtw_run_in_thread_cmd(padapter, halComTxbf_ClkWorkItemCallback, padapter);\r
133 #else\r
134         halComTxbf_ClkWorkItemCallback(pDM_Odm);\r
135 #endif\r
136 }\r
137 \r
138 VOID\r
139 phydm_beamformSetResetTxPath(\r
140         IN PVOID                        pDM_VOID\r
141         )\r
142 {\r
143         PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
144 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
145         PHAL_TXBF_INFO  pTxbfInfo = &pDM_Odm->BeamformingInfo.TxbfInfo;\r
146 \r
147         if (PlatformIsWorkItemScheduled(&(pTxbfInfo->Txbf_ResetTxPathWorkItem)) == FALSE)\r
148                 PlatformScheduleWorkItem(&(pTxbfInfo->Txbf_ResetTxPathWorkItem));\r
149 #else\r
150         halComTxbf_ResetTxPathWorkItemCallback(pDM_Odm);\r
151 #endif\r
152 }\r
153 \r
154 VOID\r
155 phydm_beamformSetGetTxRate(\r
156         IN PVOID                        pDM_VOID\r
157         )\r
158 {\r
159         PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
160 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
161         PHAL_TXBF_INFO  pTxbfInfo = &pDM_Odm->BeamformingInfo.TxbfInfo;\r
162 \r
163         if (PlatformIsWorkItemScheduled(&(pTxbfInfo->Txbf_GetTxRateWorkItem)) == FALSE)\r
164                 PlatformScheduleWorkItem(&(pTxbfInfo->Txbf_GetTxRateWorkItem));\r
165 #else\r
166         halComTxbf_GetTxRateWorkItemCallback(pDM_Odm);\r
167 #endif\r
168 }\r
169 \r
170 VOID \r
171 halComTxbf_EnterWorkItemCallback(\r
172 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
173         IN      PADAPTER                Adapter\r
174 #else\r
175         IN PVOID                        pDM_VOID\r
176 #endif\r
177         )\r
178 {\r
179 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
180         PHAL_DATA_TYPE  pHalData = GET_HAL_DATA(Adapter);\r
181         PDM_ODM_T               pDM_Odm = &pHalData->DM_OutSrc;\r
182 #else\r
183         PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
184 #endif\r
185         PHAL_TXBF_INFO  pTxbfInfo = &pDM_Odm->BeamformingInfo.TxbfInfo;\r
186         u1Byte                  Idx = pTxbfInfo->TXBFIdx;\r
187         \r
188         ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("[%s] Start!\n", __func__));\r
189         \r
190         if (pDM_Odm->SupportICType & (ODM_RTL8812|ODM_RTL8821))\r
191                 HalTxbfJaguar_Enter(pDM_Odm, Idx);\r
192         else if (pDM_Odm->SupportICType & ODM_RTL8192E)\r
193                 HalTxbf8192E_Enter(pDM_Odm, Idx);\r
194         else if (pDM_Odm->SupportICType & ODM_RTL8814A)\r
195                 HalTxbf8814A_Enter(pDM_Odm, Idx);\r
196         else if (pDM_Odm->SupportICType & ODM_RTL8821B)\r
197                 HalTxbf8821B_Enter(pDM_Odm, Idx);\r
198         else if (pDM_Odm->SupportICType & ODM_RTL8822B)\r
199                 HalTxbf8822B_Enter(pDM_Odm, Idx);\r
200 }\r
201 \r
202 VOID \r
203 halComTxbf_LeaveWorkItemCallback(\r
204 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
205         IN      PADAPTER                Adapter\r
206 #else\r
207         IN PVOID                        pDM_VOID\r
208 #endif\r
209         )\r
210 {\r
211 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
212         PHAL_DATA_TYPE  pHalData = GET_HAL_DATA(Adapter);\r
213         PDM_ODM_T               pDM_Odm = &pHalData->DM_OutSrc;\r
214 #else\r
215         PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
216 #endif\r
217         PHAL_TXBF_INFO  pTxbfInfo = &pDM_Odm->BeamformingInfo.TxbfInfo;\r
218 \r
219         u1Byte                  Idx = pTxbfInfo->TXBFIdx;\r
220 \r
221         ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("[%s] Start!\n", __func__));\r
222 \r
223         if (pDM_Odm->SupportICType & (ODM_RTL8812|ODM_RTL8821))\r
224                 HalTxbfJaguar_Leave(pDM_Odm, Idx);\r
225         else if (pDM_Odm->SupportICType & ODM_RTL8192E)\r
226                 HalTxbf8192E_Leave(pDM_Odm, Idx);\r
227         else if (pDM_Odm->SupportICType & ODM_RTL8814A)\r
228                 HalTxbf8814A_Leave(pDM_Odm, Idx);\r
229         else if (pDM_Odm->SupportICType & ODM_RTL8821B)\r
230                 HalTxbf8821B_Leave(pDM_Odm, Idx);\r
231         else if (pDM_Odm->SupportICType & ODM_RTL8822B)\r
232                 HalTxbf8822B_Leave(pDM_Odm, Idx);\r
233 }\r
234 \r
235 \r
236 VOID \r
237 halComTxbf_FwNdpaWorkItemCallback(\r
238 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
239         IN      PADAPTER                Adapter\r
240 #else\r
241         IN PVOID                        pDM_VOID\r
242 #endif\r
243         )\r
244 {\r
245 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
246         PHAL_DATA_TYPE  pHalData = GET_HAL_DATA(Adapter);\r
247         PDM_ODM_T               pDM_Odm = &pHalData->DM_OutSrc;\r
248 #else\r
249         PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
250 #endif\r
251         PHAL_TXBF_INFO  pTxbfInfo = &pDM_Odm->BeamformingInfo.TxbfInfo;\r
252         u1Byte  Idx = pTxbfInfo->NdpaIdx;\r
253 \r
254         ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("[%s] Start!\n", __func__));\r
255 \r
256         if (pDM_Odm->SupportICType & (ODM_RTL8812|ODM_RTL8821))\r
257                 HalTxbfJaguar_FwTxBF(pDM_Odm, Idx);\r
258         else if (pDM_Odm->SupportICType & ODM_RTL8192E)\r
259                 HalTxbf8192E_FwTxBF(pDM_Odm, Idx);\r
260         else if (pDM_Odm->SupportICType & ODM_RTL8814A)\r
261                 HalTxbf8814A_FwTxBF(pDM_Odm, Idx);\r
262         else if (pDM_Odm->SupportICType & ODM_RTL8821B)\r
263                 HalTxbf8821B_FwTxBF(pDM_Odm, Idx);\r
264         else if (pDM_Odm->SupportICType & ODM_RTL8822B)\r
265                 HalTxbf8822B_FwTxBF(pDM_Odm, Idx);\r
266 }\r
267 \r
268 VOID\r
269 halComTxbf_ClkWorkItemCallback(\r
270 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
271         IN      PADAPTER                Adapter\r
272 #else\r
273         IN PVOID                        pDM_VOID\r
274 #endif\r
275         )\r
276 {\r
277 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
278         PHAL_DATA_TYPE  pHalData = GET_HAL_DATA(Adapter);\r
279         PDM_ODM_T               pDM_Odm = &pHalData->DM_OutSrc;\r
280 #else\r
281         PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
282 #endif\r
283 \r
284         ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("[%s] Start!\n", __func__));\r
285 \r
286         if (pDM_Odm->SupportICType & ODM_RTL8812)\r
287                 HalTxbfJaguar_Clk_8812A(pDM_Odm);\r
288 }\r
289 \r
290 \r
291 \r
292 VOID\r
293 halComTxbf_RateWorkItemCallback(        \r
294 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
295         IN      PADAPTER                Adapter\r
296 #else\r
297         IN PVOID                        pDM_VOID\r
298 #endif\r
299         )\r
300 {\r
301 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
302         PHAL_DATA_TYPE  pHalData = GET_HAL_DATA(Adapter);\r
303         PDM_ODM_T               pDM_Odm = &pHalData->DM_OutSrc;\r
304 #else\r
305         PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
306 #endif\r
307         PHAL_TXBF_INFO  pTxbfInfo = &pDM_Odm->BeamformingInfo.TxbfInfo;\r
308         u1Byte                  BW = pTxbfInfo->BW;\r
309         u1Byte                  Rate = pTxbfInfo->Rate; \r
310         \r
311         ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("[%s] Start!\n", __func__));\r
312 \r
313         if (pDM_Odm->SupportICType & ODM_RTL8812)\r
314                 HalTxbf8812A_setNDPArate(pDM_Odm, BW, Rate);\r
315         else if (pDM_Odm->SupportICType & ODM_RTL8192E)\r
316                 HalTxbf8192E_setNDPArate(pDM_Odm, BW, Rate);\r
317         else if (pDM_Odm->SupportICType & ODM_RTL8814A)\r
318                 HalTxbf8814A_setNDPArate(pDM_Odm, BW, Rate);\r
319         \r
320 }\r
321 \r
322 \r
323 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
324 VOID \r
325 halComTxbf_FwNdpaTimerCallback(\r
326         IN      PRT_TIMER               pTimer\r
327         )\r
328 {\r
329 \r
330         PADAPTER                Adapter = (PADAPTER)pTimer->Adapter;\r
331         PHAL_DATA_TYPE  pHalData = GET_HAL_DATA(Adapter);\r
332         PDM_ODM_T               pDM_Odm = &pHalData->DM_OutSrc;\r
333 \r
334         PHAL_TXBF_INFO  pTxbfInfo = &pDM_Odm->BeamformingInfo.TxbfInfo;\r
335 \r
336         \r
337         ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("[%s] Start!\n", __func__));\r
338 \r
339         if (*pDM_Odm->pbFwDwRsvdPageInProgress)\r
340                 ODM_SetTimer(pDM_Odm, &(pTxbfInfo->Txbf_FwNdpaTimer), 5);\r
341         else\r
342                 PlatformScheduleWorkItem(&(pTxbfInfo->Txbf_FwNdpaWorkItem));\r
343 }\r
344 #endif\r
345 \r
346 \r
347 VOID\r
348 halComTxbf_StatusWorkItemCallback(\r
349 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
350         IN      PADAPTER                Adapter\r
351 #else\r
352         IN PVOID                        pDM_VOID\r
353 #endif\r
354         )\r
355 {\r
356 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
357         PHAL_DATA_TYPE  pHalData = GET_HAL_DATA(Adapter);\r
358         PDM_ODM_T               pDM_Odm = &pHalData->DM_OutSrc;\r
359 #else\r
360         PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
361 #endif\r
362         PHAL_TXBF_INFO  pTxbfInfo = &pDM_Odm->BeamformingInfo.TxbfInfo;\r
363 \r
364         u1Byte                  Idx = pTxbfInfo->TXBFIdx;\r
365 \r
366         ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("[%s] Start!\n", __func__));\r
367 \r
368         if (pDM_Odm->SupportICType & (ODM_RTL8812|ODM_RTL8821))\r
369                 HalTxbfJaguar_Status(pDM_Odm, Idx);\r
370         else if (pDM_Odm->SupportICType & ODM_RTL8192E)\r
371                 HalTxbf8192E_Status(pDM_Odm, Idx);\r
372         else if (pDM_Odm->SupportICType & ODM_RTL8814A)\r
373                 HalTxbf8814A_Status(pDM_Odm, Idx);\r
374         else if (pDM_Odm->SupportICType & ODM_RTL8821B)\r
375                 HalTxbf8821B_Status(pDM_Odm, Idx);\r
376         else if (pDM_Odm->SupportICType & ODM_RTL8822B)\r
377                 HalTxbf8822B_Status(pDM_Odm, Idx);\r
378 }\r
379 \r
380 VOID\r
381 halComTxbf_ResetTxPathWorkItemCallback(\r
382 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
383         IN      PADAPTER                Adapter\r
384 #else\r
385         IN PVOID                        pDM_VOID\r
386 #endif\r
387         )\r
388 {\r
389 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
390         PHAL_DATA_TYPE  pHalData = GET_HAL_DATA(Adapter);\r
391         PDM_ODM_T               pDM_Odm = &pHalData->DM_OutSrc;\r
392 #else\r
393         PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
394 #endif\r
395         PHAL_TXBF_INFO  pTxbfInfo = &pDM_Odm->BeamformingInfo.TxbfInfo;\r
396 \r
397         u1Byte                  Idx = pTxbfInfo->TXBFIdx;\r
398 \r
399         if (pDM_Odm->SupportICType & ODM_RTL8814A)\r
400                 HalTxbf8814A_ResetTxPath(pDM_Odm, Idx);\r
401         \r
402 }\r
403 \r
404 VOID\r
405 halComTxbf_GetTxRateWorkItemCallback(\r
406 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
407         IN      PADAPTER                Adapter\r
408 #else\r
409         IN PVOID                        pDM_VOID\r
410 #endif\r
411         )\r
412 {\r
413 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
414         PHAL_DATA_TYPE  pHalData = GET_HAL_DATA(Adapter);\r
415         PDM_ODM_T               pDM_Odm = &pHalData->DM_OutSrc;\r
416 #else\r
417         PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
418 #endif\r
419         \r
420         if (pDM_Odm->SupportICType & ODM_RTL8814A)\r
421                 HalTxbf8814A_GetTxRate(pDM_Odm);\r
422 }\r
423 \r
424 \r
425 BOOLEAN\r
426 HalComTxbf_Set(\r
427         IN PVOID                        pDM_VOID,\r
428         IN      u1Byte                  setType,\r
429         IN      PVOID                   pInBuf\r
430         )\r
431 {\r
432         PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
433         PBOOLEAN                pBoolean=(PBOOLEAN)pInBuf;\r
434         pu1Byte                 pU1Tmp=(pu1Byte)pInBuf;\r
435         pu4Byte                 pU4Tmp=(pu4Byte)pInBuf;\r
436         PHAL_TXBF_INFO  pTxbfInfo = &pDM_Odm->BeamformingInfo.TxbfInfo;\r
437 \r
438         ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("[%s] setType = 0x%X\n", __func__, setType));\r
439         \r
440         switch(setType){\r
441         case TXBF_SET_SOUNDING_ENTER:\r
442         pTxbfInfo->TXBFIdx = *pU1Tmp;\r
443         phydm_beamformSetSoundingEnter(pDM_Odm);\r
444         break;\r
445 \r
446         case TXBF_SET_SOUNDING_LEAVE:\r
447         pTxbfInfo->TXBFIdx = *pU1Tmp;\r
448         phydm_beamformSetSoundingLeave(pDM_Odm);\r
449         break;\r
450 \r
451         case TXBF_SET_SOUNDING_RATE:\r
452         pTxbfInfo->BW = pU1Tmp[0];\r
453         pTxbfInfo->Rate = pU1Tmp[1];\r
454         phydm_beamformSetSoundingRate(pDM_Odm);\r
455         break;\r
456 \r
457         case TXBF_SET_SOUNDING_STATUS:\r
458         pTxbfInfo->TXBFIdx = *pU1Tmp;\r
459         phydm_beamformSetSoundingStatus(pDM_Odm);\r
460         break;\r
461 \r
462         case TXBF_SET_SOUNDING_FW_NDPA:\r
463         pTxbfInfo->NdpaIdx = *pU1Tmp;\r
464         phydm_beamformSetSoundingFwNdpa(pDM_Odm);\r
465         break;\r
466 \r
467         case TXBF_SET_SOUNDING_CLK:\r
468         phydm_beamformSetSoundingClk(pDM_Odm);\r
469         break;\r
470                 \r
471         case TXBF_SET_TX_PATH_RESET:\r
472         pTxbfInfo->TXBFIdx = *pU1Tmp;\r
473         phydm_beamformSetResetTxPath(pDM_Odm);\r
474         break;\r
475 \r
476         case TXBF_SET_GET_TX_RATE:\r
477         phydm_beamformSetGetTxRate(pDM_Odm);\r
478         break;\r
479         \r
480         }\r
481 \r
482         return TRUE;\r
483 }\r
484 \r
485 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
486 BOOLEAN\r
487 HalComTxbf_Get(\r
488         IN      PADAPTER                Adapter,\r
489         IN      u1Byte                  getType,\r
490         OUT     PVOID                   pOutBuf\r
491         )\r
492 {\r
493         PHAL_DATA_TYPE          pHalData=GET_HAL_DATA(Adapter);\r
494         PDM_ODM_T                       pDM_Odm = &pHalData->DM_OutSrc;\r
495         PBOOLEAN                        pBoolean=(PBOOLEAN)pOutBuf;\r
496         ps4Byte                         pS4Tmp=(ps4Byte)pOutBuf;\r
497         pu4Byte                         pU4Tmp=(pu4Byte)pOutBuf;\r
498         pu1Byte                         pU1Tmp=(pu1Byte)pOutBuf;\r
499 \r
500         ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("[%s] Start!\n", __func__));\r
501 \r
502         if (getType == TXBF_GET_EXPLICIT_BEAMFORMEE) {\r
503                 if (IS_HARDWARE_TYPE_OLDER_THAN_8812A(Adapter))\r
504                         *pBoolean = FALSE;\r
505                 else if (/*IS_HARDWARE_TYPE_8822B(Adapter)      ||*/\r
506                                 IS_HARDWARE_TYPE_8821B(Adapter)         ||\r
507                                 IS_HARDWARE_TYPE_8192E(Adapter)         ||\r
508                                 IS_HARDWARE_TYPE_JAGUAR(Adapter) || IS_HARDWARE_TYPE_JAGUAR_AND_JAGUAR2(Adapter))\r
509                         *pBoolean = TRUE;\r
510                 else\r
511                         *pBoolean = FALSE;\r
512         } else if (getType == TXBF_GET_EXPLICIT_BEAMFORMER) {\r
513                 if (IS_HARDWARE_TYPE_OLDER_THAN_8812A(Adapter))\r
514                         *pBoolean = FALSE;              \r
515                 else    if (/*IS_HARDWARE_TYPE_8822B(Adapter)   ||*/\r
516                                 IS_HARDWARE_TYPE_8821B(Adapter)         ||\r
517                                 IS_HARDWARE_TYPE_8192E(Adapter)         ||\r
518                                 IS_HARDWARE_TYPE_JAGUAR(Adapter) || IS_HARDWARE_TYPE_JAGUAR_AND_JAGUAR2(Adapter)) {\r
519                         if(pHalData->RF_Type == RF_2T2R || pHalData->RF_Type == RF_3T3R)\r
520                                 *pBoolean = TRUE;\r
521                         else\r
522                                 *pBoolean = FALSE;\r
523                 } else\r
524                         *pBoolean = FALSE;\r
525         } else if (getType == TXBF_GET_MU_MIMO_STA) {\r
526 #if (RTL8822B_SUPPORT == 1)\r
527                 if (/*pDM_Odm->SupportICType & (ODM_RTL8822B)*/\r
528                         IS_HARDWARE_TYPE_8822B(Adapter))\r
529                         *pBoolean = TRUE;\r
530                 else\r
531 #endif\r
532                         *pBoolean = FALSE;\r
533 \r
534 \r
535         } else if (getType == TXBF_GET_MU_MIMO_AP) {\r
536 #if (RTL8822B_SUPPORT == 1)     \r
537                 if (/*pDM_Odm->SupportICType & (ODM_RTL8822B)*/\r
538                         IS_HARDWARE_TYPE_8822B(Adapter))\r
539                         *pBoolean = TRUE;\r
540                 else\r
541 #endif\r
542                         *pBoolean = FALSE;\r
543         }\r
544         \r
545         return TRUE;\r
546 }       \r
547 #endif\r
548 \r
549 \r
550 #endif \r
551 \r