--- /dev/null
+//============================================================\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