net: wireless: rockchip_wlan: add rtl8188fu support
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8188fu / hal / phydm / txbf / halcomtxbf.c
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8188fu/hal/phydm/txbf/halcomtxbf.c b/drivers/net/wireless/rockchip_wlan/rtl8188fu/hal/phydm/txbf/halcomtxbf.c
new file mode 100644 (file)
index 0000000..426a193
--- /dev/null
@@ -0,0 +1,551 @@
+//============================================================\r
+// Description:\r
+//\r
+// This file is for TXBF mechanism\r
+//\r
+//============================================================\r
+#include "mp_precomp.h"\r
+#include "../phydm_precomp.h"\r
+\r
+#if (BEAMFORMING_SUPPORT == 1)\r
+/*Beamforming halcomtxbf API create by YuChen 2015/05*/\r
+\r
+VOID\r
+halComTxbf_beamformInit(\r
+       IN PVOID                        pDM_VOID\r
+       )\r
+{\r
+       PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+\r
+       if (pDM_Odm->SupportICType & ODM_RTL8822B)\r
+               HalTxbf8822B_Init(pDM_Odm);\r
+}\r
+\r
+/*Only used for MU BFer Entry when get GID management frame (self is as MU STA)*/\r
+VOID\r
+halComTxbf_ConfigGtab(\r
+       IN PVOID                        pDM_VOID\r
+)\r
+{\r
+       PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+\r
+       if (pDM_Odm->SupportICType & ODM_RTL8822B)\r
+               HalTxbf8822B_ConfigGtab(pDM_Odm);\r
+}\r
+\r
+VOID\r
+phydm_beamformSetSoundingEnter(\r
+       IN PVOID                        pDM_VOID\r
+       )\r
+{\r
+       PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+       PHAL_TXBF_INFO  pTxbfInfo = &pDM_Odm->BeamformingInfo.TxbfInfo;\r
+\r
+       if (PlatformIsWorkItemScheduled(&(pTxbfInfo->Txbf_EnterWorkItem)) == FALSE)\r
+               PlatformScheduleWorkItem(&(pTxbfInfo->Txbf_EnterWorkItem));\r
+#else\r
+       halComTxbf_EnterWorkItemCallback(pDM_Odm);\r
+#endif\r
+}\r
+\r
+VOID\r
+phydm_beamformSetSoundingLeave(\r
+       IN PVOID                        pDM_VOID\r
+       )\r
+{\r
+       PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+       PHAL_TXBF_INFO  pTxbfInfo = &pDM_Odm->BeamformingInfo.TxbfInfo;\r
+\r
+       if (PlatformIsWorkItemScheduled(&(pTxbfInfo->Txbf_LeaveWorkItem)) == FALSE)\r
+               PlatformScheduleWorkItem(&(pTxbfInfo->Txbf_LeaveWorkItem));\r
+#else\r
+       halComTxbf_LeaveWorkItemCallback(pDM_Odm);\r
+#endif\r
+}\r
+\r
+VOID\r
+phydm_beamformSetSoundingRate(\r
+       IN PVOID                        pDM_VOID\r
+       )\r
+{\r
+       PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+       PHAL_TXBF_INFO  pTxbfInfo = &pDM_Odm->BeamformingInfo.TxbfInfo;\r
+\r
+       if (PlatformIsWorkItemScheduled(&(pTxbfInfo->Txbf_RateWorkItem)) == FALSE)\r
+               PlatformScheduleWorkItem(&(pTxbfInfo->Txbf_RateWorkItem));\r
+#else\r
+       halComTxbf_RateWorkItemCallback(pDM_Odm);\r
+#endif\r
+}\r
+\r
+VOID\r
+phydm_beamformSetSoundingStatus(\r
+       IN PVOID                        pDM_VOID\r
+       )\r
+{\r
+       PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+       PHAL_TXBF_INFO  pTxbfInfo = &pDM_Odm->BeamformingInfo.TxbfInfo;\r
+\r
+       if (PlatformIsWorkItemScheduled(&(pTxbfInfo->Txbf_StatusWorkItem)) == FALSE)\r
+               PlatformScheduleWorkItem(&(pTxbfInfo->Txbf_StatusWorkItem));\r
+#else\r
+       halComTxbf_StatusWorkItemCallback(pDM_Odm);\r
+#endif\r
+}\r
+\r
+VOID\r
+phydm_beamformSetSoundingFwNdpa(\r
+       IN PVOID                        pDM_VOID\r
+       )\r
+{\r
+       PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+       PHAL_TXBF_INFO  pTxbfInfo = &pDM_Odm->BeamformingInfo.TxbfInfo;\r
+\r
+       if (*pDM_Odm->pbFwDwRsvdPageInProgress)\r
+               ODM_SetTimer(pDM_Odm, &(pTxbfInfo->Txbf_FwNdpaTimer), 5);\r
+       else\r
+               PlatformScheduleWorkItem(&(pTxbfInfo->Txbf_FwNdpaWorkItem));\r
+#else\r
+       halComTxbf_FwNdpaWorkItemCallback(pDM_Odm);\r
+#endif\r
+}\r
+\r
+VOID\r
+phydm_beamformSetSoundingClk(\r
+       IN PVOID                        pDM_VOID\r
+       )\r
+{\r
+       PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+       PHAL_TXBF_INFO  pTxbfInfo = &pDM_Odm->BeamformingInfo.TxbfInfo;\r
+\r
+       if (PlatformIsWorkItemScheduled(&(pTxbfInfo->Txbf_ClkWorkItem)) == FALSE)\r
+                       PlatformScheduleWorkItem(&(pTxbfInfo->Txbf_ClkWorkItem));\r
+#elif(DM_ODM_SUPPORT_TYPE == ODM_CE)\r
+       PADAPTER        padapter = pDM_Odm->Adapter;\r
+\r
+       rtw_run_in_thread_cmd(padapter, halComTxbf_ClkWorkItemCallback, padapter);\r
+#else\r
+       halComTxbf_ClkWorkItemCallback(pDM_Odm);\r
+#endif\r
+}\r
+\r
+VOID\r
+phydm_beamformSetResetTxPath(\r
+       IN PVOID                        pDM_VOID\r
+       )\r
+{\r
+       PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+       PHAL_TXBF_INFO  pTxbfInfo = &pDM_Odm->BeamformingInfo.TxbfInfo;\r
+\r
+       if (PlatformIsWorkItemScheduled(&(pTxbfInfo->Txbf_ResetTxPathWorkItem)) == FALSE)\r
+               PlatformScheduleWorkItem(&(pTxbfInfo->Txbf_ResetTxPathWorkItem));\r
+#else\r
+       halComTxbf_ResetTxPathWorkItemCallback(pDM_Odm);\r
+#endif\r
+}\r
+\r
+VOID\r
+phydm_beamformSetGetTxRate(\r
+       IN PVOID                        pDM_VOID\r
+       )\r
+{\r
+       PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+       PHAL_TXBF_INFO  pTxbfInfo = &pDM_Odm->BeamformingInfo.TxbfInfo;\r
+\r
+       if (PlatformIsWorkItemScheduled(&(pTxbfInfo->Txbf_GetTxRateWorkItem)) == FALSE)\r
+               PlatformScheduleWorkItem(&(pTxbfInfo->Txbf_GetTxRateWorkItem));\r
+#else\r
+       halComTxbf_GetTxRateWorkItemCallback(pDM_Odm);\r
+#endif\r
+}\r
+\r
+VOID \r
+halComTxbf_EnterWorkItemCallback(\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+       IN      PADAPTER                Adapter\r
+#else\r
+       IN PVOID                        pDM_VOID\r
+#endif\r
+       )\r
+{\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+       PHAL_DATA_TYPE  pHalData = GET_HAL_DATA(Adapter);\r
+       PDM_ODM_T               pDM_Odm = &pHalData->DM_OutSrc;\r
+#else\r
+       PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+#endif\r
+       PHAL_TXBF_INFO  pTxbfInfo = &pDM_Odm->BeamformingInfo.TxbfInfo;\r
+       u1Byte                  Idx = pTxbfInfo->TXBFIdx;\r
+       \r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("[%s] Start!\n", __func__));\r
+       \r
+       if (pDM_Odm->SupportICType & (ODM_RTL8812|ODM_RTL8821))\r
+               HalTxbfJaguar_Enter(pDM_Odm, Idx);\r
+       else if (pDM_Odm->SupportICType & ODM_RTL8192E)\r
+               HalTxbf8192E_Enter(pDM_Odm, Idx);\r
+       else if (pDM_Odm->SupportICType & ODM_RTL8814A)\r
+               HalTxbf8814A_Enter(pDM_Odm, Idx);\r
+       else if (pDM_Odm->SupportICType & ODM_RTL8821B)\r
+               HalTxbf8821B_Enter(pDM_Odm, Idx);\r
+       else if (pDM_Odm->SupportICType & ODM_RTL8822B)\r
+               HalTxbf8822B_Enter(pDM_Odm, Idx);\r
+}\r
+\r
+VOID \r
+halComTxbf_LeaveWorkItemCallback(\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+       IN      PADAPTER                Adapter\r
+#else\r
+       IN PVOID                        pDM_VOID\r
+#endif\r
+       )\r
+{\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+       PHAL_DATA_TYPE  pHalData = GET_HAL_DATA(Adapter);\r
+       PDM_ODM_T               pDM_Odm = &pHalData->DM_OutSrc;\r
+#else\r
+       PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+#endif\r
+       PHAL_TXBF_INFO  pTxbfInfo = &pDM_Odm->BeamformingInfo.TxbfInfo;\r
+\r
+       u1Byte                  Idx = pTxbfInfo->TXBFIdx;\r
+\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("[%s] Start!\n", __func__));\r
+\r
+       if (pDM_Odm->SupportICType & (ODM_RTL8812|ODM_RTL8821))\r
+               HalTxbfJaguar_Leave(pDM_Odm, Idx);\r
+       else if (pDM_Odm->SupportICType & ODM_RTL8192E)\r
+               HalTxbf8192E_Leave(pDM_Odm, Idx);\r
+       else if (pDM_Odm->SupportICType & ODM_RTL8814A)\r
+               HalTxbf8814A_Leave(pDM_Odm, Idx);\r
+       else if (pDM_Odm->SupportICType & ODM_RTL8821B)\r
+               HalTxbf8821B_Leave(pDM_Odm, Idx);\r
+       else if (pDM_Odm->SupportICType & ODM_RTL8822B)\r
+               HalTxbf8822B_Leave(pDM_Odm, Idx);\r
+}\r
+\r
+\r
+VOID \r
+halComTxbf_FwNdpaWorkItemCallback(\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+       IN      PADAPTER                Adapter\r
+#else\r
+       IN PVOID                        pDM_VOID\r
+#endif\r
+       )\r
+{\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+       PHAL_DATA_TYPE  pHalData = GET_HAL_DATA(Adapter);\r
+       PDM_ODM_T               pDM_Odm = &pHalData->DM_OutSrc;\r
+#else\r
+       PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+#endif\r
+       PHAL_TXBF_INFO  pTxbfInfo = &pDM_Odm->BeamformingInfo.TxbfInfo;\r
+       u1Byte  Idx = pTxbfInfo->NdpaIdx;\r
+\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("[%s] Start!\n", __func__));\r
+\r
+       if (pDM_Odm->SupportICType & (ODM_RTL8812|ODM_RTL8821))\r
+               HalTxbfJaguar_FwTxBF(pDM_Odm, Idx);\r
+       else if (pDM_Odm->SupportICType & ODM_RTL8192E)\r
+               HalTxbf8192E_FwTxBF(pDM_Odm, Idx);\r
+       else if (pDM_Odm->SupportICType & ODM_RTL8814A)\r
+               HalTxbf8814A_FwTxBF(pDM_Odm, Idx);\r
+       else if (pDM_Odm->SupportICType & ODM_RTL8821B)\r
+               HalTxbf8821B_FwTxBF(pDM_Odm, Idx);\r
+       else if (pDM_Odm->SupportICType & ODM_RTL8822B)\r
+               HalTxbf8822B_FwTxBF(pDM_Odm, Idx);\r
+}\r
+\r
+VOID\r
+halComTxbf_ClkWorkItemCallback(\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+       IN      PADAPTER                Adapter\r
+#else\r
+       IN PVOID                        pDM_VOID\r
+#endif\r
+       )\r
+{\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+       PHAL_DATA_TYPE  pHalData = GET_HAL_DATA(Adapter);\r
+       PDM_ODM_T               pDM_Odm = &pHalData->DM_OutSrc;\r
+#else\r
+       PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+#endif\r
+\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("[%s] Start!\n", __func__));\r
+\r
+       if (pDM_Odm->SupportICType & ODM_RTL8812)\r
+               HalTxbfJaguar_Clk_8812A(pDM_Odm);\r
+}\r
+\r
+\r
+\r
+VOID\r
+halComTxbf_RateWorkItemCallback(       \r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+       IN      PADAPTER                Adapter\r
+#else\r
+       IN PVOID                        pDM_VOID\r
+#endif\r
+       )\r
+{\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+       PHAL_DATA_TYPE  pHalData = GET_HAL_DATA(Adapter);\r
+       PDM_ODM_T               pDM_Odm = &pHalData->DM_OutSrc;\r
+#else\r
+       PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+#endif\r
+       PHAL_TXBF_INFO  pTxbfInfo = &pDM_Odm->BeamformingInfo.TxbfInfo;\r
+       u1Byte                  BW = pTxbfInfo->BW;\r
+       u1Byte                  Rate = pTxbfInfo->Rate; \r
+       \r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("[%s] Start!\n", __func__));\r
+\r
+       if (pDM_Odm->SupportICType & ODM_RTL8812)\r
+               HalTxbf8812A_setNDPArate(pDM_Odm, BW, Rate);\r
+       else if (pDM_Odm->SupportICType & ODM_RTL8192E)\r
+               HalTxbf8192E_setNDPArate(pDM_Odm, BW, Rate);\r
+       else if (pDM_Odm->SupportICType & ODM_RTL8814A)\r
+               HalTxbf8814A_setNDPArate(pDM_Odm, BW, Rate);\r
+       \r
+}\r
+\r
+\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+VOID \r
+halComTxbf_FwNdpaTimerCallback(\r
+       IN      PRT_TIMER               pTimer\r
+       )\r
+{\r
+\r
+       PADAPTER                Adapter = (PADAPTER)pTimer->Adapter;\r
+       PHAL_DATA_TYPE  pHalData = GET_HAL_DATA(Adapter);\r
+       PDM_ODM_T               pDM_Odm = &pHalData->DM_OutSrc;\r
+\r
+       PHAL_TXBF_INFO  pTxbfInfo = &pDM_Odm->BeamformingInfo.TxbfInfo;\r
+\r
+       \r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("[%s] Start!\n", __func__));\r
+\r
+       if (*pDM_Odm->pbFwDwRsvdPageInProgress)\r
+               ODM_SetTimer(pDM_Odm, &(pTxbfInfo->Txbf_FwNdpaTimer), 5);\r
+       else\r
+               PlatformScheduleWorkItem(&(pTxbfInfo->Txbf_FwNdpaWorkItem));\r
+}\r
+#endif\r
+\r
+\r
+VOID\r
+halComTxbf_StatusWorkItemCallback(\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+       IN      PADAPTER                Adapter\r
+#else\r
+       IN PVOID                        pDM_VOID\r
+#endif\r
+       )\r
+{\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+       PHAL_DATA_TYPE  pHalData = GET_HAL_DATA(Adapter);\r
+       PDM_ODM_T               pDM_Odm = &pHalData->DM_OutSrc;\r
+#else\r
+       PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+#endif\r
+       PHAL_TXBF_INFO  pTxbfInfo = &pDM_Odm->BeamformingInfo.TxbfInfo;\r
+\r
+       u1Byte                  Idx = pTxbfInfo->TXBFIdx;\r
+\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("[%s] Start!\n", __func__));\r
+\r
+       if (pDM_Odm->SupportICType & (ODM_RTL8812|ODM_RTL8821))\r
+               HalTxbfJaguar_Status(pDM_Odm, Idx);\r
+       else if (pDM_Odm->SupportICType & ODM_RTL8192E)\r
+               HalTxbf8192E_Status(pDM_Odm, Idx);\r
+       else if (pDM_Odm->SupportICType & ODM_RTL8814A)\r
+               HalTxbf8814A_Status(pDM_Odm, Idx);\r
+       else if (pDM_Odm->SupportICType & ODM_RTL8821B)\r
+               HalTxbf8821B_Status(pDM_Odm, Idx);\r
+       else if (pDM_Odm->SupportICType & ODM_RTL8822B)\r
+               HalTxbf8822B_Status(pDM_Odm, Idx);\r
+}\r
+\r
+VOID\r
+halComTxbf_ResetTxPathWorkItemCallback(\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+       IN      PADAPTER                Adapter\r
+#else\r
+       IN PVOID                        pDM_VOID\r
+#endif\r
+       )\r
+{\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+       PHAL_DATA_TYPE  pHalData = GET_HAL_DATA(Adapter);\r
+       PDM_ODM_T               pDM_Odm = &pHalData->DM_OutSrc;\r
+#else\r
+       PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+#endif\r
+       PHAL_TXBF_INFO  pTxbfInfo = &pDM_Odm->BeamformingInfo.TxbfInfo;\r
+\r
+       u1Byte                  Idx = pTxbfInfo->TXBFIdx;\r
+\r
+       if (pDM_Odm->SupportICType & ODM_RTL8814A)\r
+               HalTxbf8814A_ResetTxPath(pDM_Odm, Idx);\r
+       \r
+}\r
+\r
+VOID\r
+halComTxbf_GetTxRateWorkItemCallback(\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+       IN      PADAPTER                Adapter\r
+#else\r
+       IN PVOID                        pDM_VOID\r
+#endif\r
+       )\r
+{\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+       PHAL_DATA_TYPE  pHalData = GET_HAL_DATA(Adapter);\r
+       PDM_ODM_T               pDM_Odm = &pHalData->DM_OutSrc;\r
+#else\r
+       PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+#endif\r
+       \r
+       if (pDM_Odm->SupportICType & ODM_RTL8814A)\r
+               HalTxbf8814A_GetTxRate(pDM_Odm);\r
+}\r
+\r
+\r
+BOOLEAN\r
+HalComTxbf_Set(\r
+       IN PVOID                        pDM_VOID,\r
+       IN      u1Byte                  setType,\r
+       IN      PVOID                   pInBuf\r
+       )\r
+{\r
+       PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       PBOOLEAN                pBoolean=(PBOOLEAN)pInBuf;\r
+       pu1Byte                 pU1Tmp=(pu1Byte)pInBuf;\r
+       pu4Byte                 pU4Tmp=(pu4Byte)pInBuf;\r
+       PHAL_TXBF_INFO  pTxbfInfo = &pDM_Odm->BeamformingInfo.TxbfInfo;\r
+\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("[%s] setType = 0x%X\n", __func__, setType));\r
+       \r
+       switch(setType){\r
+       case TXBF_SET_SOUNDING_ENTER:\r
+       pTxbfInfo->TXBFIdx = *pU1Tmp;\r
+       phydm_beamformSetSoundingEnter(pDM_Odm);\r
+       break;\r
+\r
+       case TXBF_SET_SOUNDING_LEAVE:\r
+       pTxbfInfo->TXBFIdx = *pU1Tmp;\r
+       phydm_beamformSetSoundingLeave(pDM_Odm);\r
+       break;\r
+\r
+       case TXBF_SET_SOUNDING_RATE:\r
+       pTxbfInfo->BW = pU1Tmp[0];\r
+       pTxbfInfo->Rate = pU1Tmp[1];\r
+       phydm_beamformSetSoundingRate(pDM_Odm);\r
+       break;\r
+\r
+       case TXBF_SET_SOUNDING_STATUS:\r
+       pTxbfInfo->TXBFIdx = *pU1Tmp;\r
+       phydm_beamformSetSoundingStatus(pDM_Odm);\r
+       break;\r
+\r
+       case TXBF_SET_SOUNDING_FW_NDPA:\r
+       pTxbfInfo->NdpaIdx = *pU1Tmp;\r
+       phydm_beamformSetSoundingFwNdpa(pDM_Odm);\r
+       break;\r
+\r
+       case TXBF_SET_SOUNDING_CLK:\r
+       phydm_beamformSetSoundingClk(pDM_Odm);\r
+       break;\r
+               \r
+       case TXBF_SET_TX_PATH_RESET:\r
+       pTxbfInfo->TXBFIdx = *pU1Tmp;\r
+       phydm_beamformSetResetTxPath(pDM_Odm);\r
+       break;\r
+\r
+       case TXBF_SET_GET_TX_RATE:\r
+       phydm_beamformSetGetTxRate(pDM_Odm);\r
+       break;\r
+       \r
+       }\r
+\r
+       return TRUE;\r
+}\r
+\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+BOOLEAN\r
+HalComTxbf_Get(\r
+       IN      PADAPTER                Adapter,\r
+       IN      u1Byte                  getType,\r
+       OUT     PVOID                   pOutBuf\r
+       )\r
+{\r
+       PHAL_DATA_TYPE          pHalData=GET_HAL_DATA(Adapter);\r
+       PDM_ODM_T                       pDM_Odm = &pHalData->DM_OutSrc;\r
+       PBOOLEAN                        pBoolean=(PBOOLEAN)pOutBuf;\r
+       ps4Byte                         pS4Tmp=(ps4Byte)pOutBuf;\r
+       pu4Byte                         pU4Tmp=(pu4Byte)pOutBuf;\r
+       pu1Byte                         pU1Tmp=(pu1Byte)pOutBuf;\r
+\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_LOUD, ("[%s] Start!\n", __func__));\r
+\r
+       if (getType == TXBF_GET_EXPLICIT_BEAMFORMEE) {\r
+               if (IS_HARDWARE_TYPE_OLDER_THAN_8812A(Adapter))\r
+                       *pBoolean = FALSE;\r
+               else if (/*IS_HARDWARE_TYPE_8822B(Adapter)      ||*/\r
+                               IS_HARDWARE_TYPE_8821B(Adapter)         ||\r
+                               IS_HARDWARE_TYPE_8192E(Adapter)         ||\r
+                               IS_HARDWARE_TYPE_JAGUAR(Adapter) || IS_HARDWARE_TYPE_JAGUAR_AND_JAGUAR2(Adapter))\r
+                       *pBoolean = TRUE;\r
+               else\r
+                       *pBoolean = FALSE;\r
+       } else if (getType == TXBF_GET_EXPLICIT_BEAMFORMER) {\r
+               if (IS_HARDWARE_TYPE_OLDER_THAN_8812A(Adapter))\r
+                       *pBoolean = FALSE;              \r
+               else    if (/*IS_HARDWARE_TYPE_8822B(Adapter)   ||*/\r
+                               IS_HARDWARE_TYPE_8821B(Adapter)         ||\r
+                               IS_HARDWARE_TYPE_8192E(Adapter)         ||\r
+                               IS_HARDWARE_TYPE_JAGUAR(Adapter) || IS_HARDWARE_TYPE_JAGUAR_AND_JAGUAR2(Adapter)) {\r
+                       if(pHalData->RF_Type == RF_2T2R || pHalData->RF_Type == RF_3T3R)\r
+                               *pBoolean = TRUE;\r
+                       else\r
+                               *pBoolean = FALSE;\r
+               } else\r
+                       *pBoolean = FALSE;\r
+       } else if (getType == TXBF_GET_MU_MIMO_STA) {\r
+#if (RTL8822B_SUPPORT == 1)\r
+               if (/*pDM_Odm->SupportICType & (ODM_RTL8822B)*/\r
+                       IS_HARDWARE_TYPE_8822B(Adapter))\r
+                       *pBoolean = TRUE;\r
+               else\r
+#endif\r
+                       *pBoolean = FALSE;\r
+\r
+\r
+       } else if (getType == TXBF_GET_MU_MIMO_AP) {\r
+#if (RTL8822B_SUPPORT == 1)    \r
+               if (/*pDM_Odm->SupportICType & (ODM_RTL8822B)*/\r
+                       IS_HARDWARE_TYPE_8822B(Adapter))\r
+                       *pBoolean = TRUE;\r
+               else\r
+#endif\r
+                       *pBoolean = FALSE;\r
+       }\r
+       \r
+       return TRUE;\r
+}      \r
+#endif\r
+\r
+\r
+#endif \r
+\r