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