net: wireless: rockchip_wlan: add rtl8723ds support
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8723ds / hal / phydm / txbf / phydm_hal_txbf_api.c
1 #include "mp_precomp.h"\r
2 #include "phydm_precomp.h"\r
3 \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
7 \r
8 /*this function is only used for BFer*/\r
9 u1Byte\r
10 phydm_get_ndpa_rate(\r
11         IN PVOID                pDM_VOID\r
12         )\r
13 {\r
14         PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
15         u1Byte          NDPARate = ODM_RATE6M;\r
16 \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
21 \r
22         ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_TRACE, ("[%s] NDPARate = 0x%x\n", __func__, NDPARate));\r
23 \r
24         return NDPARate;\r
25 \r
26 }\r
27 \r
28 /*this function is only used for BFer*/\r
29 u1Byte\r
30 phydm_get_beamforming_sounding_info(\r
31         IN PVOID                pDM_VOID,\r
32         IN pu2Byte      Troughput,\r
33         IN u1Byte       Total_BFee_Num,\r
34         IN pu1Byte      TxRate\r
35         )\r
36 {\r
37         u1Byte  idx = 0;\r
38         u1Byte  soundingdecision = 0xff;\r
39         PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
40 \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
44         }\r
45 \r
46         for (idx = 0; idx < Total_BFee_Num; idx++) {\r
47                 if (Troughput[idx] <= 10)\r
48                         soundingdecision = soundingdecision & ~(1<<idx);\r
49         }\r
50 \r
51         ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_TRACE, ("[%s] soundingdecision = 0x%x\n", __func__, soundingdecision));\r
52 \r
53         return soundingdecision;\r
54 \r
55 }\r
56 \r
57 /*this function is only used for BFer*/\r
58 u1Byte\r
59 phydm_get_mu_bfee_snding_decision(\r
60         IN PVOID                pDM_VOID,\r
61         IN u2Byte       Throughput\r
62         )\r
63 {\r
64         u1Byte  snding_score = 0;\r
65         PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
66 \r
67         /*Throughput unit is Mbps*/\r
68         if (Throughput >= 500)\r
69                 snding_score = 100;\r
70         else if (Throughput >= 450)\r
71                 snding_score = 90;\r
72         else if (Throughput >= 400)\r
73                 snding_score = 80;\r
74         else if (Throughput >= 350)\r
75                 snding_score = 70;\r
76         else if (Throughput >= 300)\r
77                 snding_score = 60;\r
78         else if (Throughput >= 250)\r
79                 snding_score = 50;\r
80         else if (Throughput >= 200)\r
81                 snding_score = 40;\r
82         else if (Throughput >= 150)\r
83                 snding_score = 30;\r
84         else if (Throughput >= 100)\r
85                 snding_score = 20;\r
86         else if (Throughput >= 50)\r
87                 snding_score = 10;\r
88         else\r
89                 snding_score = 0;\r
90         \r
91         ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_TRACE, ("[%s] snding_score = 0x%d\n", __func__, snding_score));\r
92 \r
93         return snding_score;\r
94 \r
95 }\r
96 \r
97 \r
98 #endif\r
99 #if (DM_ODM_SUPPORT_TYPE != ODM_AP)\r
100 u1Byte\r
101 Beamforming_GetHTNDPTxRate(\r
102         IN      PVOID   pDM_VOID,\r
103         u1Byte  CompSteeringNumofBFer\r
104 )\r
105 {\r
106         PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
107         u1Byte Nr_index = 0;\r
108         u1Byte NDPTxRate;\r
109         /*Find Nr*/\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
113         else\r
114 #endif\r
115                 Nr_index = TxBF_Nr(1, CompSteeringNumofBFer);\r
116         \r
117         switch (Nr_index) {\r
118         case 1:\r
119         NDPTxRate = ODM_MGN_MCS8;\r
120         break;\r
121 \r
122         case 2:\r
123         NDPTxRate = ODM_MGN_MCS16;\r
124         break;\r
125 \r
126         case 3:\r
127         NDPTxRate = ODM_MGN_MCS24;\r
128         break;\r
129                         \r
130         default:\r
131         NDPTxRate = ODM_MGN_MCS8;\r
132         break;\r
133         }\r
134 \r
135 return NDPTxRate;\r
136 \r
137 }\r
138 \r
139 u1Byte\r
140 Beamforming_GetVHTNDPTxRate(\r
141         IN      PVOID   pDM_VOID,\r
142         u1Byte  CompSteeringNumofBFer\r
143 )\r
144 {\r
145         PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
146         u1Byte Nr_index = 0;\r
147         u1Byte NDPTxRate;\r
148         /*Find Nr*/\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
152         else\r
153 #endif\r
154                 Nr_index = TxBF_Nr(1, CompSteeringNumofBFer);\r
155         \r
156         switch (Nr_index) {\r
157         case 1:\r
158         NDPTxRate = ODM_MGN_VHT2SS_MCS0;\r
159         break;\r
160 \r
161         case 2:\r
162         NDPTxRate = ODM_MGN_VHT3SS_MCS0;\r
163         break;\r
164 \r
165         case 3:\r
166         NDPTxRate = ODM_MGN_VHT4SS_MCS0;\r
167         break;\r
168                         \r
169         default:\r
170         NDPTxRate = ODM_MGN_VHT2SS_MCS0;\r
171         break;\r
172         }\r
173 \r
174 return NDPTxRate;\r
175 \r
176 }\r
177 #endif\r
178 \r
179 #endif\r
180 \r