net: wireless: rockchip: add rtl8822be pcie wifi driver
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8822be / hal / phydm / txbf / phydm_hal_txbf_api.c
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8822be/hal/phydm/txbf/phydm_hal_txbf_api.c b/drivers/net/wireless/rockchip_wlan/rtl8822be/hal/phydm/txbf/phydm_hal_txbf_api.c
new file mode 100644 (file)
index 0000000..fd3417b
--- /dev/null
@@ -0,0 +1,180 @@
+#include "mp_precomp.h"\r
+#include "phydm_precomp.h"\r
+\r
+#if (defined(CONFIG_BB_TXBF_API))\r
+#if (RTL8822B_SUPPORT == 1)\r
+/*Add by YuChen for 8822B MU-MIMO API*/\r
+\r
+/*this function is only used for BFer*/\r
+u1Byte\r
+phydm_get_ndpa_rate(\r
+       IN PVOID                pDM_VOID\r
+       )\r
+{\r
+       PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       u1Byte          NDPARate = ODM_RATE6M;\r
+\r
+       if (pDM_Odm->RSSI_Min >= 30)    /*link RSSI > 30%*/\r
+               NDPARate = ODM_RATE24M;\r
+       else if (pDM_Odm->RSSI_Min <= 25)\r
+               NDPARate = ODM_RATE6M;\r
+\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_TRACE, ("[%s] NDPARate = 0x%x\n", __func__, NDPARate));\r
+\r
+       return NDPARate;\r
+\r
+}\r
+\r
+/*this function is only used for BFer*/\r
+u1Byte\r
+phydm_get_beamforming_sounding_info(\r
+       IN PVOID                pDM_VOID,\r
+       IN pu2Byte      Troughput,\r
+       IN u1Byte       Total_BFee_Num,\r
+       IN pu1Byte      TxRate\r
+       )\r
+{\r
+       u1Byte  idx = 0;\r
+       u1Byte  soundingdecision = 0xff;\r
+       PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+\r
+       for (idx = 0; idx < Total_BFee_Num; idx++) {\r
+               if (((TxRate[idx] >= ODM_RATEVHTSS3MCS7) && (TxRate[idx] <= ODM_RATEVHTSS3MCS9)))\r
+                       soundingdecision = soundingdecision & ~(1<<idx);\r
+       }\r
+\r
+       for (idx = 0; idx < Total_BFee_Num; idx++) {\r
+               if (Troughput[idx] <= 10)\r
+                       soundingdecision = soundingdecision & ~(1<<idx);\r
+       }\r
+\r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_TRACE, ("[%s] soundingdecision = 0x%x\n", __func__, soundingdecision));\r
+\r
+       return soundingdecision;\r
+\r
+}\r
+\r
+/*this function is only used for BFer*/\r
+u1Byte\r
+phydm_get_mu_bfee_snding_decision(\r
+       IN PVOID                pDM_VOID,\r
+       IN u2Byte       Throughput\r
+       )\r
+{\r
+       u1Byte  snding_score = 0;\r
+       PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+\r
+       /*Throughput unit is Mbps*/\r
+       if (Throughput >= 500)\r
+               snding_score = 100;\r
+       else if (Throughput >= 450)\r
+               snding_score = 90;\r
+       else if (Throughput >= 400)\r
+               snding_score = 80;\r
+       else if (Throughput >= 350)\r
+               snding_score = 70;\r
+       else if (Throughput >= 300)\r
+               snding_score = 60;\r
+       else if (Throughput >= 250)\r
+               snding_score = 50;\r
+       else if (Throughput >= 200)\r
+               snding_score = 40;\r
+       else if (Throughput >= 150)\r
+               snding_score = 30;\r
+       else if (Throughput >= 100)\r
+               snding_score = 20;\r
+       else if (Throughput >= 50)\r
+               snding_score = 10;\r
+       else\r
+               snding_score = 0;\r
+       \r
+       ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_TXBF, ODM_DBG_TRACE, ("[%s] snding_score = 0x%d\n", __func__, snding_score));\r
+\r
+       return snding_score;\r
+\r
+}\r
+\r
+\r
+#endif\r
+#if (DM_ODM_SUPPORT_TYPE != ODM_AP)\r
+u1Byte\r
+Beamforming_GetHTNDPTxRate(\r
+       IN      PVOID   pDM_VOID,\r
+       u1Byte  CompSteeringNumofBFer\r
+)\r
+{\r
+       PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       u1Byte Nr_index = 0;\r
+       u1Byte NDPTxRate;\r
+       /*Find Nr*/\r
+#if (RTL8814A_SUPPORT == 1)    \r
+       if (pDM_Odm->SupportICType & ODM_RTL8814A)\r
+               Nr_index = TxBF_Nr(halTxbf8814A_GetNtx(pDM_Odm), CompSteeringNumofBFer);\r
+       else\r
+#endif\r
+               Nr_index = TxBF_Nr(1, CompSteeringNumofBFer);\r
+       \r
+       switch (Nr_index) {\r
+       case 1:\r
+       NDPTxRate = ODM_MGN_MCS8;\r
+       break;\r
+\r
+       case 2:\r
+       NDPTxRate = ODM_MGN_MCS16;\r
+       break;\r
+\r
+       case 3:\r
+       NDPTxRate = ODM_MGN_MCS24;\r
+       break;\r
+                       \r
+       default:\r
+       NDPTxRate = ODM_MGN_MCS8;\r
+       break;\r
+       }\r
+\r
+return NDPTxRate;\r
+\r
+}\r
+\r
+u1Byte\r
+Beamforming_GetVHTNDPTxRate(\r
+       IN      PVOID   pDM_VOID,\r
+       u1Byte  CompSteeringNumofBFer\r
+)\r
+{\r
+       PDM_ODM_T       pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
+       u1Byte Nr_index = 0;\r
+       u1Byte NDPTxRate;\r
+       /*Find Nr*/\r
+#if (RTL8814A_SUPPORT == 1)\r
+       if (pDM_Odm->SupportICType & ODM_RTL8814A)\r
+               Nr_index = TxBF_Nr(halTxbf8814A_GetNtx(pDM_Odm), CompSteeringNumofBFer);\r
+       else\r
+#endif\r
+               Nr_index = TxBF_Nr(1, CompSteeringNumofBFer);\r
+       \r
+       switch (Nr_index) {\r
+       case 1:\r
+       NDPTxRate = ODM_MGN_VHT2SS_MCS0;\r
+       break;\r
+\r
+       case 2:\r
+       NDPTxRate = ODM_MGN_VHT3SS_MCS0;\r
+       break;\r
+\r
+       case 3:\r
+       NDPTxRate = ODM_MGN_VHT4SS_MCS0;\r
+       break;\r
+                       \r
+       default:\r
+       NDPTxRate = ODM_MGN_VHT2SS_MCS0;\r
+       break;\r
+       }\r
+\r
+return NDPTxRate;\r
+\r
+}\r
+#endif\r
+\r
+#endif\r
+\r