1 #include "mp_precomp.h"
\r
2 #include "phydm_precomp.h"
\r
4 #if (defined(CONFIG_BB_TXBF_API))
\r
5 #if (RTL8822B_SUPPORT == 1)
\r
6 /*Add by YuChen for 8822B MU-MIMO API*/
\r
8 /*this function is only used for BFer*/
\r
10 phydm_get_ndpa_rate(
\r
14 PDM_ODM_T pDM_Odm = (PDM_ODM_T)pDM_VOID;
\r
15 u1Byte NDPARate = ODM_RATE6M;
\r
17 if (pDM_Odm->RSSI_Min >= 30) /*link RSSI > 30%*/
\r
18 NDPARate = ODM_RATE24M;
\r
19 else if (pDM_Odm->RSSI_Min <= 25)
\r
20 NDPARate = ODM_RATE6M;
\r
22 ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_TRACE, ("[%s] NDPARate = 0x%x\n", __func__, NDPARate));
\r
28 /*this function is only used for BFer*/
\r
30 phydm_get_beamforming_sounding_info(
\r
32 IN pu2Byte Troughput,
\r
33 IN u1Byte Total_BFee_Num,
\r
38 u1Byte soundingdecision = 0xff;
\r
39 PDM_ODM_T pDM_Odm = (PDM_ODM_T)pDM_VOID;
\r
41 for (idx = 0; idx < Total_BFee_Num; idx++) {
\r
42 if (((TxRate[idx] >= ODM_RATEVHTSS3MCS7) && (TxRate[idx] <= ODM_RATEVHTSS3MCS9)))
\r
43 soundingdecision = soundingdecision & ~(1<<idx);
\r
46 for (idx = 0; idx < Total_BFee_Num; idx++) {
\r
47 if (Troughput[idx] <= 10)
\r
48 soundingdecision = soundingdecision & ~(1<<idx);
\r
51 ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_TRACE, ("[%s] soundingdecision = 0x%x\n", __func__, soundingdecision));
\r
53 return soundingdecision;
\r
57 /*this function is only used for BFer*/
\r
59 phydm_get_mu_bfee_snding_decision(
\r
61 IN u2Byte Throughput
\r
64 u1Byte snding_score = 0;
\r
65 PDM_ODM_T pDM_Odm = (PDM_ODM_T)pDM_VOID;
\r
67 /*Throughput unit is Mbps*/
\r
68 if (Throughput >= 500)
\r
70 else if (Throughput >= 450)
\r
72 else if (Throughput >= 400)
\r
74 else if (Throughput >= 350)
\r
76 else if (Throughput >= 300)
\r
78 else if (Throughput >= 250)
\r
80 else if (Throughput >= 200)
\r
82 else if (Throughput >= 150)
\r
84 else if (Throughput >= 100)
\r
86 else if (Throughput >= 50)
\r
91 ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_TRACE, ("[%s] snding_score = 0x%d\n", __func__, snding_score));
\r
93 return snding_score;
\r
99 #if (DM_ODM_SUPPORT_TYPE != ODM_AP)
\r
101 Beamforming_GetHTNDPTxRate(
\r
103 u1Byte CompSteeringNumofBFer
\r
106 PDM_ODM_T pDM_Odm = (PDM_ODM_T)pDM_VOID;
\r
107 u1Byte Nr_index = 0;
\r
110 #if (RTL8814A_SUPPORT == 1)
\r
111 if (pDM_Odm->SupportICType & ODM_RTL8814A)
\r
112 Nr_index = TxBF_Nr(halTxbf8814A_GetNtx(pDM_Odm), CompSteeringNumofBFer);
\r
115 Nr_index = TxBF_Nr(1, CompSteeringNumofBFer);
\r
117 switch (Nr_index) {
\r
119 NDPTxRate = ODM_MGN_MCS8;
\r
123 NDPTxRate = ODM_MGN_MCS16;
\r
127 NDPTxRate = ODM_MGN_MCS24;
\r
131 NDPTxRate = ODM_MGN_MCS8;
\r
140 Beamforming_GetVHTNDPTxRate(
\r
142 u1Byte CompSteeringNumofBFer
\r
145 PDM_ODM_T pDM_Odm = (PDM_ODM_T)pDM_VOID;
\r
146 u1Byte Nr_index = 0;
\r
149 #if (RTL8814A_SUPPORT == 1)
\r
150 if (pDM_Odm->SupportICType & ODM_RTL8814A)
\r
151 Nr_index = TxBF_Nr(halTxbf8814A_GetNtx(pDM_Odm), CompSteeringNumofBFer);
\r
154 Nr_index = TxBF_Nr(1, CompSteeringNumofBFer);
\r
156 switch (Nr_index) {
\r
158 NDPTxRate = ODM_MGN_VHT2SS_MCS0;
\r
162 NDPTxRate = ODM_MGN_VHT3SS_MCS0;
\r
166 NDPTxRate = ODM_MGN_VHT4SS_MCS0;
\r
170 NDPTxRate = ODM_MGN_VHT2SS_MCS0;
\r