--- /dev/null
+/******************************************************************************\r
+ *\r
+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
+ * \r
+ * This program is free software; you can redistribute it and/or modify it\r
+ * under the terms of version 2 of the GNU General Public License as\r
+ * published by the Free Software Foundation.\r
+ *\r
+ * This program is distributed in the hope that it will be useful, but WITHOUT\r
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\r
+ * more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License along with\r
+ * this program; if not, write to the Free Software Foundation, Inc.,\r
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
+ *\r
+ *\r
+ ******************************************************************************/\r
+\r
+//============================================================\r
+// include files\r
+//============================================================\r
+\r
+#include "mp_precomp.h"\r
+#include "phydm_precomp.h"\r
+\r
+#define READ_AND_CONFIG_MP(ic, txt) (ODM_ReadAndConfig_MP_##ic##txt(pDM_Odm))\r
+#define READ_AND_CONFIG_TC(ic, txt) (ODM_ReadAndConfig_TC_##ic##txt(pDM_Odm))\r
+\r
+\r
+#if (PHYDM_TESTCHIP_SUPPORT == 1)\r
+#define READ_AND_CONFIG(ic, txt) do {\\r
+ if (pDM_Odm->bIsMPChip)\\r
+ READ_AND_CONFIG_MP(ic,txt);\\r
+ else\\r
+ READ_AND_CONFIG_TC(ic,txt);\\r
+ } while(0)\r
+#else\r
+ #define READ_AND_CONFIG READ_AND_CONFIG_MP\r
+#endif\r
+\r
+\r
+#define READ_FIRMWARE_MP(ic, txt) (ODM_ReadFirmware_MP_##ic##txt(pDM_Odm, pFirmware, pSize))\r
+#define READ_FIRMWARE_TC(ic, txt) (ODM_ReadFirmware_TC_##ic##txt(pDM_Odm, pFirmware, pSize)) \r
+\r
+#if (PHYDM_TESTCHIP_SUPPORT == 1)\r
+#define READ_FIRMWARE(ic, txt) do {\\r
+ if (pDM_Odm->bIsMPChip)\\r
+ READ_FIRMWARE_MP(ic,txt);\\r
+ else\\r
+ READ_FIRMWARE_TC(ic,txt);\\r
+ } while(0) \r
+#else\r
+#define READ_FIRMWARE READ_FIRMWARE_MP\r
+#endif\r
+ \r
+#define GET_VERSION_MP(ic, txt) (ODM_GetVersion_MP_##ic##txt())\r
+#define GET_VERSION_TC(ic, txt) (ODM_GetVersion_TC_##ic##txt())\r
+#define GET_VERSION(ic, txt) (pDM_Odm->bIsMPChip?GET_VERSION_MP(ic,txt):GET_VERSION_TC(ic,txt))\r
+\r
+u1Byte\r
+odm_QueryRxPwrPercentage(\r
+ IN s1Byte AntPower\r
+ )\r
+{\r
+ if ((AntPower <= -100) || (AntPower >= 20))\r
+ return 0;\r
+ else if (AntPower >= 0)\r
+ return 100;\r
+ else\r
+ return (100 + AntPower);\r
+}\r
+\r
+\r
+//\r
+// 2012/01/12 MH MOve some signal strength smooth method to MP HAL layer.\r
+// IF other SW team do not support the feature, remove this section.??\r
+//\r
+s4Byte\r
+odm_SignalScaleMapping_92CSeries_patch_RT_CID_819x_Lenovo( \r
+ IN OUT PDM_ODM_T pDM_Odm,\r
+ s4Byte CurrSig \r
+)\r
+{ \r
+ s4Byte RetSig = 0;\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+ //if(pDM_Odm->SupportInterface == ODM_ITRF_PCIE) \r
+ {\r
+ // Step 1. Scale mapping.\r
+ // 20100611 Joseph: Re-tunning RSSI presentation for Lenovo.\r
+ // 20100426 Joseph: Modify Signal strength mapping.\r
+ // This modification makes the RSSI indication similar to Intel solution.\r
+ // 20100414 Joseph: Tunning RSSI for Lenovo according to RTL8191SE.\r
+ if (CurrSig >= 54 && CurrSig <= 100)\r
+ RetSig = 100;\r
+ else if (CurrSig >= 42 && CurrSig <= 53)\r
+ RetSig = 95;\r
+ else if (CurrSig >= 36 && CurrSig <= 41)\r
+ RetSig = 74 + ((CurrSig - 36) * 20) / 6;\r
+ else if (CurrSig >= 33 && CurrSig <= 35)\r
+ RetSig = 65 + ((CurrSig - 33) * 8) / 2;\r
+ else if (CurrSig >= 18 && CurrSig <= 32)\r
+ RetSig = 62 + ((CurrSig - 18) * 2) / 15;\r
+ else if (CurrSig >= 15 && CurrSig <= 17)\r
+ RetSig = 33 + ((CurrSig - 15) * 28) / 2;\r
+ else if (CurrSig >= 10 && CurrSig <= 14)\r
+ RetSig = 39;\r
+ else if (CurrSig >= 8 && CurrSig <= 9)\r
+ RetSig = 33;\r
+ else if (CurrSig <= 8)\r
+ RetSig = 19;\r
+ }\r
+#endif //ENDIF (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+ return RetSig;\r
+}\r
+\r
+s4Byte\r
+odm_SignalScaleMapping_92CSeries_patch_RT_CID_819x_Netcore( \r
+ IN OUT PDM_ODM_T pDM_Odm,\r
+ s4Byte CurrSig \r
+)\r
+{\r
+ s4Byte RetSig = 0;\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+ //if(pDM_Odm->SupportInterface == ODM_ITRF_USB)\r
+ {\r
+ // Netcore request this modification because 2009.04.13 SU driver use it. \r
+ if (CurrSig >= 31 && CurrSig <= 100)\r
+ RetSig = 100;\r
+ else if (CurrSig >= 21 && CurrSig <= 30)\r
+ RetSig = 90 + ((CurrSig - 20) / 1);\r
+ else if (CurrSig >= 11 && CurrSig <= 20)\r
+ RetSig = 80 + ((CurrSig - 10) / 1);\r
+ else if (CurrSig >= 7 && CurrSig <= 10)\r
+ RetSig = 69 + (CurrSig - 7);\r
+ else if (CurrSig == 6)\r
+ RetSig = 54;\r
+ else if (CurrSig == 5)\r
+ RetSig = 45;\r
+ else if (CurrSig == 4)\r
+ RetSig = 36;\r
+ else if (CurrSig == 3)\r
+ RetSig = 27;\r
+ else if (CurrSig == 2)\r
+ RetSig = 18;\r
+ else if (CurrSig == 1)\r
+ RetSig = 9;\r
+ else\r
+ RetSig = CurrSig;\r
+ }\r
+#endif //ENDIF (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+ return RetSig;\r
+}\r
+\r
+\r
+s4Byte\r
+odm_SignalScaleMapping_92CSeries( \r
+ IN OUT PDM_ODM_T pDM_Odm,\r
+ IN s4Byte CurrSig \r
+)\r
+{\r
+ s4Byte RetSig = 0; \r
+#if (DEV_BUS_TYPE == RT_PCI_INTERFACE) \r
+ if (pDM_Odm->SupportInterface == ODM_ITRF_PCIE) \r
+ {\r
+ // Step 1. Scale mapping.\r
+ if(CurrSig >= 61 && CurrSig <= 100)\r
+ {\r
+ RetSig = 90 + ((CurrSig - 60) / 4);\r
+ }\r
+ else if(CurrSig >= 41 && CurrSig <= 60)\r
+ {\r
+ RetSig = 78 + ((CurrSig - 40) / 2);\r
+ }\r
+ else if(CurrSig >= 31 && CurrSig <= 40)\r
+ {\r
+ RetSig = 66 + (CurrSig - 30);\r
+ }\r
+ else if(CurrSig >= 21 && CurrSig <= 30)\r
+ {\r
+ RetSig = 54 + (CurrSig - 20);\r
+ }\r
+ else if(CurrSig >= 5 && CurrSig <= 20)\r
+ {\r
+ RetSig = 42 + (((CurrSig - 5) * 2) / 3);\r
+ }\r
+ else if(CurrSig == 4)\r
+ {\r
+ RetSig = 36;\r
+ }\r
+ else if(CurrSig == 3)\r
+ {\r
+ RetSig = 27;\r
+ }\r
+ else if(CurrSig == 2)\r
+ {\r
+ RetSig = 18;\r
+ }\r
+ else if(CurrSig == 1)\r
+ {\r
+ RetSig = 9;\r
+ }\r
+ else\r
+ {\r
+ RetSig = CurrSig;\r
+ }\r
+ }\r
+#endif\r
+\r
+#if ((DEV_BUS_TYPE == RT_USB_INTERFACE) ||(DEV_BUS_TYPE == RT_SDIO_INTERFACE))\r
+ if((pDM_Odm->SupportInterface == ODM_ITRF_USB) || (pDM_Odm->SupportInterface == ODM_ITRF_SDIO))\r
+ {\r
+ if(CurrSig >= 51 && CurrSig <= 100)\r
+ {\r
+ RetSig = 100;\r
+ }\r
+ else if(CurrSig >= 41 && CurrSig <= 50)\r
+ {\r
+ RetSig = 80 + ((CurrSig - 40)*2);\r
+ }\r
+ else if(CurrSig >= 31 && CurrSig <= 40)\r
+ {\r
+ RetSig = 66 + (CurrSig - 30);\r
+ }\r
+ else if(CurrSig >= 21 && CurrSig <= 30)\r
+ {\r
+ RetSig = 54 + (CurrSig - 20);\r
+ }\r
+ else if(CurrSig >= 10 && CurrSig <= 20)\r
+ {\r
+ RetSig = 42 + (((CurrSig - 10) * 2) / 3);\r
+ }\r
+ else if(CurrSig >= 5 && CurrSig <= 9)\r
+ {\r
+ RetSig = 22 + (((CurrSig - 5) * 3) / 2);\r
+ }\r
+ else if(CurrSig >= 1 && CurrSig <= 4)\r
+ {\r
+ RetSig = 6 + (((CurrSig - 1) * 3) / 2);\r
+ }\r
+ else\r
+ {\r
+ RetSig = CurrSig;\r
+ }\r
+ }\r
+\r
+#endif\r
+ return RetSig;\r
+}\r
+s4Byte\r
+odm_SignalScaleMapping( \r
+ IN OUT PDM_ODM_T pDM_Odm,\r
+ IN s4Byte CurrSig \r
+)\r
+{ \r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+ if( (pDM_Odm->SupportPlatform == ODM_WIN) && \r
+ (pDM_Odm->SupportInterface != ODM_ITRF_PCIE) && //USB & SDIO\r
+ (pDM_Odm->PatchID==10))//pMgntInfo->CustomerID == RT_CID_819x_Netcore\r
+ {\r
+ return odm_SignalScaleMapping_92CSeries_patch_RT_CID_819x_Netcore(pDM_Odm,CurrSig);\r
+ }\r
+ else if( (pDM_Odm->SupportPlatform == ODM_WIN) && \r
+ (pDM_Odm->SupportInterface == ODM_ITRF_PCIE) &&\r
+ (pDM_Odm->PatchID==19))//pMgntInfo->CustomerID == RT_CID_819x_Lenovo)\r
+ {\r
+ return odm_SignalScaleMapping_92CSeries_patch_RT_CID_819x_Lenovo(pDM_Odm, CurrSig);\r
+ }else\r
+#endif\r
+ {\r
+#ifdef CONFIG_SIGNAL_SCALE_MAPPING \r
+ return odm_SignalScaleMapping_92CSeries(pDM_Odm,CurrSig);\r
+#else\r
+ return CurrSig;\r
+#endif\r
+ }\r
+ \r
+}\r
+\r
+\r
+\r
+static u1Byte odm_SQ_process_patch_RT_CID_819x_Lenovo(\r
+ IN PDM_ODM_T pDM_Odm,\r
+ IN u1Byte isCCKrate,\r
+ IN u1Byte PWDB_ALL,\r
+ IN u1Byte path,\r
+ IN u1Byte RSSI\r
+)\r
+{\r
+ u1Byte SQ = 0;\r
+#if (DM_ODM_SUPPORT_TYPE & ODM_WIN) \r
+\r
+ if(isCCKrate){\r
+ \r
+ if (IS_HARDWARE_TYPE_8192E(pDM_Odm->Adapter)) {\r
+\r
+ //\r
+ // <Roger_Notes> Expected signal strength and bars indication at Lenovo lab. 2013.04.11\r
+ // 802.11n, 802.11b, 802.11g only at channel 6\r
+ //\r
+ // Attenuation (dB) OS Signal Bars RSSI by Xirrus (dBm)\r
+ // 50 5 -49\r
+ // 55 5 -49\r
+ // 60 5 -50\r
+ // 65 5 -51\r
+ // 70 5 -52\r
+ // 75 5 -54\r
+ // 80 5 -55\r
+ // 85 4 -60\r
+ // 90 3 -63\r
+ // 95 3 -65\r
+ // 100 2 -67\r
+ // 102 2 -67\r
+ // 104 1 -70\r
+ // \r
+\r
+ if(PWDB_ALL >= 50)\r
+ SQ = 100;\r
+ else if(PWDB_ALL >= 35 && PWDB_ALL < 50) \r
+ SQ = 80;\r
+ else if(PWDB_ALL >= 31 && PWDB_ALL < 35)\r
+ SQ = 60;\r
+ else if(PWDB_ALL >= 22 && PWDB_ALL < 31)\r
+ SQ = 40;\r
+ else if(PWDB_ALL >= 18 && PWDB_ALL < 22)\r
+ SQ = 20;\r
+ else\r
+ SQ = 10;\r
+ } else {\r
+ if (PWDB_ALL >= 50)\r
+ SQ = 100;\r
+ else if (PWDB_ALL >= 35 && PWDB_ALL < 50) \r
+ SQ = 80;\r
+ else if (PWDB_ALL >= 22 && PWDB_ALL < 35)\r
+ SQ = 60;\r
+ else if (PWDB_ALL >= 18 && PWDB_ALL < 22)\r
+ SQ = 40;\r
+ else\r
+ SQ = 10;\r
+ }\r
+ \r
+ }\r
+ else\r
+ {//OFDM rate \r
+\r
+ if (IS_HARDWARE_TYPE_8192E(pDM_Odm->Adapter)) {\r
+ if(RSSI >= 45)\r
+ SQ = 100;\r
+ else if(RSSI >= 22 && RSSI < 45)\r
+ SQ = 80;\r
+ else if(RSSI >= 18 && RSSI < 22)\r
+ SQ = 40;\r
+ else\r
+ SQ = 20;\r
+ } else {\r
+ if(RSSI >= 45)\r
+ SQ = 100;\r
+ else if(RSSI >= 22 && RSSI < 45)\r
+ SQ = 80;\r
+ else if(RSSI >= 18 && RSSI < 22)\r
+ SQ = 40;\r
+ else\r
+ SQ = 20; \r
+ }\r
+ }\r
+\r
+ RT_TRACE(COMP_DBG, DBG_TRACE, ("isCCKrate(%#d), PWDB_ALL(%#d), RSSI(%#d), SQ(%#d)\n", isCCKrate, PWDB_ALL, RSSI, SQ));\r
+ \r
+#endif\r
+ return SQ;\r
+}\r
+\r
+static u1Byte odm_SQ_process_patch_RT_CID_819x_Acer(\r
+ IN PDM_ODM_T pDM_Odm,\r
+ IN u1Byte isCCKrate,\r
+ IN u1Byte PWDB_ALL,\r
+ IN u1Byte path,\r
+ IN u1Byte RSSI\r
+)\r
+{\r
+ u1Byte SQ = 0;\r
+ \r
+#if (DM_ODM_SUPPORT_TYPE & ODM_WIN) \r
+\r
+ if(isCCKrate){\r
+\r
+ RT_TRACE(COMP_DBG, DBG_WARNING, ("odm_SQ_process_patch_RT_Acer\n"));\r
+ \r
+#if OS_WIN_FROM_WIN8(OS_VERSION) \r
+\r
+ if(PWDB_ALL >= 50)\r
+ SQ = 100;\r
+ else if(PWDB_ALL >= 35 && PWDB_ALL < 50) \r
+ SQ = 80;\r
+ else if(PWDB_ALL >= 30 && PWDB_ALL < 35)\r
+ SQ = 60;\r
+ else if(PWDB_ALL >= 25 && PWDB_ALL < 30)\r
+ SQ = 40;\r
+ else if(PWDB_ALL >= 20 && PWDB_ALL < 25)\r
+ SQ = 20;\r
+ else\r
+ SQ = 10; \r
+#else\r
+ if(PWDB_ALL >= 50)\r
+ SQ = 100;\r
+ else if(PWDB_ALL >= 35 && PWDB_ALL < 50) \r
+ SQ = 80;\r
+ else if(PWDB_ALL >= 30 && PWDB_ALL < 35)\r
+ SQ = 60;\r
+ else if(PWDB_ALL >= 25 && PWDB_ALL < 30)\r
+ SQ = 40;\r
+ else if(PWDB_ALL >= 20 && PWDB_ALL < 25)\r
+ SQ = 20;\r
+ else\r
+ SQ = 10; \r
+\r
+ if(PWDB_ALL == 0)// Abnormal case, do not indicate the value above 20 on Win7\r
+ SQ = 20;\r
+#endif \r
+\r
+ \r
+ \r
+ }\r
+ else\r
+ {//OFDM rate \r
+\r
+ if (IS_HARDWARE_TYPE_8192E(pDM_Odm->Adapter)) {\r
+ if(RSSI >= 45)\r
+ SQ = 100;\r
+ else if(RSSI >= 22 && RSSI < 45)\r
+ SQ = 80;\r
+ else if(RSSI >= 18 && RSSI < 22)\r
+ SQ = 40;\r
+ else\r
+ SQ = 20;\r
+ }\r
+ else\r
+ {\r
+ if(RSSI >= 35)\r
+ SQ = 100;\r
+ else if(RSSI >= 30 && RSSI < 35)\r
+ SQ = 80;\r
+ else if(RSSI >= 25 && RSSI < 30)\r
+ SQ = 40;\r
+ else\r
+ SQ = 20; \r
+ }\r
+ }\r
+\r
+ RT_TRACE(COMP_DBG, DBG_LOUD, ("isCCKrate(%#d), PWDB_ALL(%#d), RSSI(%#d), SQ(%#d)\n", isCCKrate, PWDB_ALL, RSSI, SQ));\r
+ \r
+#endif\r
+ return SQ;\r
+}\r
+ \r
+static u1Byte \r
+odm_EVMdbToPercentage(\r
+ IN s1Byte Value\r
+ )\r
+{\r
+ //\r
+ // -33dB~0dB to 0%~99%\r
+ //\r
+ s1Byte ret_val;\r
+ \r
+ ret_val = Value;\r
+ ret_val /= 2;\r
+\r
+ /*DbgPrint("Value=%d\n", Value);*/\r
+ /*ODM_RT_DISP(FRX, RX_PHY_SQ, ("EVMdbToPercentage92C Value=%d / %x\n", ret_val, ret_val));*/\r
+#ifdef ODM_EVM_ENHANCE_ANTDIV\r
+ if (ret_val >= 0)\r
+ ret_val = 0;\r
+\r
+ if (ret_val <= -40)\r
+ ret_val = -40;\r
+\r
+ ret_val = 0 - ret_val;\r
+ ret_val *= 3;\r
+#else\r
+ if (ret_val >= 0)\r
+ ret_val = 0;\r
+\r
+ if (ret_val <= -33)\r
+ ret_val = -33;\r
+\r
+ ret_val = 0 - ret_val;\r
+ ret_val *= 3;\r
+\r
+ if (ret_val == 99)\r
+ ret_val = 100;\r
+#endif\r
+\r
+ return (u1Byte)ret_val;\r
+}\r
+ \r
+static u1Byte \r
+odm_EVMdbm_JaguarSeries(\r
+ IN s1Byte Value\r
+ )\r
+{\r
+ s1Byte ret_val = Value;\r
+ \r
+ // -33dB~0dB to 33dB ~ 0dB\r
+ if(ret_val == -128)\r
+ ret_val = 127;\r
+ else if (ret_val < 0)\r
+ ret_val = 0 - ret_val;\r
+ \r
+ ret_val = ret_val >> 1;\r
+ return (u1Byte)ret_val;\r
+}\r
+\r
+static s2Byte\r
+odm_Cfo(\r
+ IN s1Byte Value\r
+)\r
+{\r
+ s2Byte ret_val;\r
+\r
+ if (Value < 0)\r
+ {\r
+ ret_val = 0 - Value;\r
+ ret_val = (ret_val << 1) + (ret_val >> 1) ; // *2.5~=312.5/2^7\r
+ ret_val = ret_val | BIT12; // set bit12 as 1 for negative cfo\r
+ }\r
+ else\r
+ {\r
+ ret_val = Value;\r
+ ret_val = (ret_val << 1) + (ret_val>>1) ; // *2.5~=312.5/2^7\r
+ }\r
+ return ret_val;\r
+}\r
+\r
+#if(ODM_IC_11N_SERIES_SUPPORT == 1)\r
+\r
+s1Byte\r
+odm_CCKRSSI_8703B(\r
+ IN u2Byte LNA_idx,\r
+ IN u1Byte VGA_idx\r
+ )\r
+{\r
+ s1Byte rx_pwr_all = 0x00;\r
+ \r
+ switch (LNA_idx) {\r
+ case 0xf:\r
+ rx_pwr_all = -48 - (2 * VGA_idx);\r
+ break; \r
+ case 0xb:\r
+ rx_pwr_all = -42 - (2 * VGA_idx); /*TBD*/\r
+ break;\r
+ case 0xa:\r
+ rx_pwr_all = -36 - (2 * VGA_idx);\r
+ break;\r
+ case 8:\r
+ rx_pwr_all = -32 - (2 * VGA_idx);\r
+ break;\r
+ case 7: \r
+ rx_pwr_all = -19 - (2 * VGA_idx);\r
+ break; \r
+ case 4: \r
+ rx_pwr_all = -6 - (2 * VGA_idx);\r
+ break;\r
+ case 0: \r
+ rx_pwr_all = -2 - (2 * VGA_idx);\r
+ break;\r
+ default:\r
+ /*rx_pwr_all = -53+(2*(31-VGA_idx));*/\r
+ /*DbgPrint("wrong LNA index\n");*/\r
+ break;\r
+ \r
+ }\r
+ return rx_pwr_all;\r
+}\r
+\r
+s1Byte\r
+odm_CCKRSSI_8192E(\r
+ IN OUT PDM_ODM_T pDM_Odm,\r
+ IN u2Byte LNA_idx,\r
+ IN u1Byte VGA_idx\r
+ )\r
+{\r
+ s1Byte rx_pwr_all = 0;\r
+ s1Byte lna_gain = 0;\r
+ s1Byte lna_gain_table_0[8] = {15, 9, -10, -21, -23, -27, -43, -44}; \r
+ s1Byte lna_gain_table_1[8] = {24, 18, 13, -4, -11, -18, -31, -36};/*use 8192EU to calibrate this table. 2015.12.15, Dino*/\r
+\r
+ if (pDM_Odm->cck_agc_report_type == 0)\r
+ lna_gain = lna_gain_table_0[LNA_idx];\r
+ else\r
+ lna_gain = lna_gain_table_1[LNA_idx];\r
+\r
+ rx_pwr_all = lna_gain - (2 * VGA_idx);\r
+ \r
+ return rx_pwr_all;\r
+}\r
+\r
+s1Byte\r
+odm_CCKRSSI_8188E(\r
+ IN OUT PDM_ODM_T pDM_Odm,\r
+ IN u2Byte LNA_idx,\r
+ IN u1Byte VGA_idx\r
+ )\r
+{\r
+ s1Byte rx_pwr_all = 0;\r
+ s1Byte lna_gain = 0;\r
+ s1Byte lna_gain_table_0[8] = {17, -1, -13, -29, -32, -35, -38, -41};/*only use lna0/1/2/3/7*/\r
+ s1Byte lna_gain_table_1[8] = {29, 20, 12, 3, -6, -15, -24, -33}; /*only use lna3 /7*/\r
+\r
+ if (pDM_Odm->CutVersion >= ODM_CUT_I) /*SMIC*/\r
+ lna_gain = lna_gain_table_0[LNA_idx];\r
+ else /*TSMC*/ \r
+ lna_gain = lna_gain_table_1[LNA_idx];\r
+ \r
+ rx_pwr_all = lna_gain - (2 * VGA_idx);\r
+ \r
+ return rx_pwr_all;\r
+}\r
+\r
+VOID\r
+odm_RxPhyStatus92CSeries_Parsing(\r
+ IN OUT PDM_ODM_T pDM_Odm,\r
+ OUT PODM_PHY_INFO_T pPhyInfo, \r
+ IN pu1Byte pPhyStatus,\r
+ IN PODM_PACKET_INFO_T pPktinfo\r
+ )\r
+{ \r
+ SWAT_T *pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;\r
+ u1Byte i, Max_spatial_stream;\r
+ s1Byte rx_pwr[4], rx_pwr_all=0;\r
+ u1Byte EVM, PWDB_ALL = 0, PWDB_ALL_BT;\r
+ u1Byte RSSI, total_rssi=0;\r
+ BOOLEAN isCCKrate=FALSE; \r
+ u1Byte rf_rx_num = 0;\r
+ u1Byte cck_highpwr = 0;\r
+ u1Byte LNA_idx = 0;\r
+ u1Byte VGA_idx = 0;\r
+ u1Byte cck_agc_rpt;\r
+ PPHY_STATUS_RPT_8192CD_T pPhyStaRpt = (PPHY_STATUS_RPT_8192CD_T)pPhyStatus;\r
+\r
+ isCCKrate = (pPktinfo->DataRate <= ODM_RATE11M) ? TRUE : FALSE;\r
+\r
+ if (pPktinfo->bToSelf)\r
+ pDM_Odm->curr_station_id = pPktinfo->StationID;\r
+ \r
+ pPhyInfo->RxMIMOSignalQuality[ODM_RF_PATH_A] = -1;\r
+ pPhyInfo->RxMIMOSignalQuality[ODM_RF_PATH_B] = -1;\r
+\r
+\r
+ if(isCCKrate)\r
+ {\r
+ pDM_Odm->PhyDbgInfo.NumQryPhyStatusCCK++;\r
+ cck_agc_rpt = pPhyStaRpt->cck_agc_rpt_ofdm_cfosho_a ;\r
+ \r
+ if (pDM_Odm->SupportICType & (ODM_RTL8703B)) {\r
+ \r
+ #if (RTL8703B_SUPPORT == 1)\r
+ if (pDM_Odm->cck_agc_report_type == 1) { /*4 bit LNA*/\r
+\r
+ u1Byte cck_agc_rpt_b = (pPhyStaRpt->cck_rpt_b_ofdm_cfosho_b & BIT7) ? 1 : 0;\r
+ \r
+ LNA_idx = (cck_agc_rpt_b << 3) | ((cck_agc_rpt & 0xE0) >> 5);\r
+ VGA_idx = (cck_agc_rpt & 0x1F);\r
+ \r
+ rx_pwr_all = odm_CCKRSSI_8703B(LNA_idx, VGA_idx); \r
+ }\r
+ #endif\r
+ } else { /*3 bit LNA*/\r
+ \r
+ LNA_idx = ((cck_agc_rpt & 0xE0) >>5);\r
+ VGA_idx = (cck_agc_rpt & 0x1F);\r
+ \r
+ if (pDM_Odm->SupportICType & (ODM_RTL8188E)) {\r
+ \r
+ #if (RTL8188E_SUPPORT == 1) \r
+ rx_pwr_all = odm_CCKRSSI_8188E(pDM_Odm, LNA_idx, VGA_idx);\r
+ /**/\r
+ #endif\r
+ } \r
+ #if (RTL8192E_SUPPORT == 1) \r
+ else if (pDM_Odm->SupportICType & (ODM_RTL8192E)) {\r
+ \r
+ rx_pwr_all = odm_CCKRSSI_8192E(pDM_Odm, LNA_idx, VGA_idx);\r
+ /**/\r
+ }\r
+ #endif\r
+ #if (RTL8723B_SUPPORT == 1)\r
+ else if (pDM_Odm->SupportICType & (ODM_RTL8723B)) {\r
+ \r
+ rx_pwr_all = odm_CCKRSSI_8723B(LNA_idx,VGA_idx);\r
+ /**/\r
+ } \r
+ #endif\r
+ #if (RTL8188F_SUPPORT == 1)\r
+ else if (pDM_Odm->SupportICType & (ODM_RTL8188F)) {\r
+ \r
+ rx_pwr_all = odm_CCKRSSI_8188F(LNA_idx, VGA_idx);\r
+ /**/\r
+ }\r
+ #endif\r
+ }\r
+ \r
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_RSSI_MONITOR, ODM_DBG_LOUD, ("ExtLNAGain (( %d )), LNA_idx: (( 0x%x )), VGA_idx: (( 0x%x )), rx_pwr_all: (( %d ))\n", \r
+ pDM_Odm->ExtLNAGain, LNA_idx, VGA_idx, rx_pwr_all));\r
+ \r
+ if (pDM_Odm->BoardType & ODM_BOARD_EXT_LNA) \r
+ rx_pwr_all -= pDM_Odm->ExtLNAGain;\r
+\r
+ PWDB_ALL = odm_QueryRxPwrPercentage(rx_pwr_all);\r
+ \r
+ if (pPktinfo->bToSelf) {\r
+ pDM_Odm->cck_lna_idx = LNA_idx;\r
+ pDM_Odm->cck_vga_idx = VGA_idx;\r
+ }\r
+ pPhyInfo->RxPWDBAll = PWDB_ALL;\r
+\r
+#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
+ pPhyInfo->BTRxRSSIPercentage = PWDB_ALL;\r
+ pPhyInfo->RecvSignalPower = rx_pwr_all;\r
+#endif \r
+ //\r
+ // (3) Get Signal Quality (EVM)\r
+ //\r
+ //if(pPktinfo->bPacketMatchBSSID)\r
+ {\r
+ u1Byte SQ,SQ_rpt; \r
+ \r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN) \r
+ if((pDM_Odm->SupportPlatform == ODM_WIN) &&\r
+ (pDM_Odm->PatchID==RT_CID_819x_Lenovo)){\r
+ SQ = odm_SQ_process_patch_RT_CID_819x_Lenovo(pDM_Odm,isCCKrate,PWDB_ALL,0,0);\r
+ }else if((pDM_Odm->SupportPlatform == ODM_WIN) &&\r
+ (pDM_Odm->PatchID==RT_CID_819x_Acer))\r
+ {\r
+ SQ = odm_SQ_process_patch_RT_CID_819x_Acer(pDM_Odm,isCCKrate,PWDB_ALL,0,0);\r
+ }else \r
+#endif\r
+ if(pPhyInfo->RxPWDBAll > 40 && !pDM_Odm->bInHctTest){\r
+ SQ = 100;\r
+ }\r
+ else{ \r
+ SQ_rpt = pPhyStaRpt->cck_sig_qual_ofdm_pwdb_all;\r
+ \r
+ if(SQ_rpt > 64)\r
+ SQ = 0;\r
+ else if (SQ_rpt < 20)\r
+ SQ = 100;\r
+ else\r
+ SQ = ((64-SQ_rpt) * 100) / 44;\r
+ \r
+ }\r
+ \r
+ //DbgPrint("cck SQ = %d\n", SQ);\r
+ pPhyInfo->SignalQuality = SQ;\r
+ pPhyInfo->RxMIMOSignalQuality[ODM_RF_PATH_A] = SQ;\r
+ pPhyInfo->RxMIMOSignalQuality[ODM_RF_PATH_B] = -1;\r
+ }\r
+\r
+ for (i = ODM_RF_PATH_A; i < ODM_RF_PATH_MAX; i++) {\r
+ if (i == 0)\r
+ pPhyInfo->RxMIMOSignalStrength[0] = PWDB_ALL;\r
+ else\r
+ pPhyInfo->RxMIMOSignalStrength[1] = 0;\r
+ }\r
+ }\r
+ else //2 is OFDM rate\r
+ {\r
+ pDM_Odm->PhyDbgInfo.NumQryPhyStatusOFDM++;\r
+\r
+ // \r
+ // (1)Get RSSI for HT rate\r
+ //\r
+ \r
+ for(i = ODM_RF_PATH_A; i < ODM_RF_PATH_MAX; i++) \r
+ {\r
+ // 2008/01/30 MH we will judge RF RX path now.\r
+ if (pDM_Odm->RFPathRxEnable & BIT(i))\r
+ rf_rx_num++;\r
+ //else\r
+ //continue;\r
+\r
+ rx_pwr[i] = ((pPhyStaRpt->path_agc[i].gain& 0x3F)*2) - 110;\r
+ \r
+ if (pPktinfo->bToSelf) {\r
+ pDM_Odm->ofdm_agc_idx[i] = (pPhyStaRpt->path_agc[i].gain & 0x3F);\r
+ /**/\r
+ }\r
+\r
+ #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
+ pPhyInfo->RxPwr[i] = rx_pwr[i];\r
+ #endif \r
+\r
+ /* Translate DBM to percentage. */\r
+ RSSI = odm_QueryRxPwrPercentage(rx_pwr[i]);\r
+ total_rssi += RSSI;\r
+ //RT_DISP(FRX, RX_PHY_SS, ("RF-%d RXPWR=%x RSSI=%d\n", i, rx_pwr[i], RSSI));\r
+ \r
+ pPhyInfo->RxMIMOSignalStrength[i] =(u1Byte) RSSI;\r
+\r
+ #if (DM_ODM_SUPPORT_TYPE & (/*ODM_WIN|*/ODM_CE|ODM_AP))\r
+ //Get Rx snr value in DB \r
+ pPhyInfo->RxSNR[i] = pDM_Odm->PhyDbgInfo.RxSNRdB[i] = (s4Byte)(pPhyStaRpt->path_rxsnr[i]/2);\r
+ #endif\r
+ \r
+ /* Record Signal Strength for next packet */\r
+ //if(pPktinfo->bPacketMatchBSSID)\r
+ { \r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN) \r
+ if((pDM_Odm->SupportPlatform == ODM_WIN) &&\r
+ (pDM_Odm->PatchID==RT_CID_819x_Lenovo))\r
+ {\r
+ if(i==ODM_RF_PATH_A)\r
+ pPhyInfo->SignalQuality = odm_SQ_process_patch_RT_CID_819x_Lenovo(pDM_Odm,isCCKrate,PWDB_ALL,i,RSSI);\r
+ \r
+ } \r
+ else if((pDM_Odm->SupportPlatform == ODM_WIN) &&\r
+ (pDM_Odm->PatchID==RT_CID_819x_Acer))\r
+ {\r
+ pPhyInfo->SignalQuality = odm_SQ_process_patch_RT_CID_819x_Acer(pDM_Odm,isCCKrate,PWDB_ALL,0,RSSI);\r
+ } \r
+#endif \r
+ }\r
+ }\r
+ \r
+ \r
+ //\r
+ // (2)PWDB, Average PWDB cacluated by hardware (for rate adaptive)\r
+ //\r
+ rx_pwr_all = (((pPhyStaRpt->cck_sig_qual_ofdm_pwdb_all) >> 1 )& 0x7f) -110; \r
+ \r
+ PWDB_ALL_BT = PWDB_ALL = odm_QueryRxPwrPercentage(rx_pwr_all); \r
+ \r
+ \r
+ pPhyInfo->RxPWDBAll = PWDB_ALL;\r
+ //ODM_RT_TRACE(pDM_Odm,ODM_COMP_RSSI_MONITOR, ODM_DBG_LOUD, ("ODM OFDM RSSI=%d\n",pPhyInfo->RxPWDBAll));\r
+ #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
+ pPhyInfo->BTRxRSSIPercentage = PWDB_ALL_BT;\r
+ pPhyInfo->RxPower = rx_pwr_all;\r
+ pPhyInfo->RecvSignalPower = rx_pwr_all;\r
+ #endif\r
+ \r
+ if((pDM_Odm->SupportPlatform == ODM_WIN) &&(pDM_Odm->PatchID==19)){\r
+ //do nothing \r
+ }else if((pDM_Odm->SupportPlatform == ODM_WIN) &&(pDM_Odm->PatchID==25)){\r
+ //do nothing \r
+ }\r
+ else{//pMgntInfo->CustomerID != RT_CID_819x_Lenovo\r
+ //\r
+ // (3)EVM of HT rate\r
+ //\r
+ if(pPktinfo->DataRate >=ODM_RATEMCS8 && pPktinfo->DataRate <=ODM_RATEMCS15)\r
+ Max_spatial_stream = 2; //both spatial stream make sense\r
+ else\r
+ Max_spatial_stream = 1; //only spatial stream 1 makes sense\r
+\r
+ for(i=0; i<Max_spatial_stream; i++)\r
+ {\r
+ // Do not use shift operation like "rx_evmX >>= 1" because the compilor of free build environment\r
+ // fill most significant bit to "zero" when doing shifting operation which may change a negative \r
+ // value to positive one, then the dbm value (which is supposed to be negative) is not correct anymore. \r
+ EVM = odm_EVMdbToPercentage( (pPhyStaRpt->stream_rxevm[i] )); //dbm\r
+\r
+ //GET_RX_STATUS_DESC_RX_MCS(pDesc), pDrvInfo->rxevm[i], "%", EVM));\r
+ \r
+ //if(pPktinfo->bPacketMatchBSSID)\r
+ {\r
+ if(i==ODM_RF_PATH_A) // Fill value in RFD, Get the first spatial stream only\r
+ { \r
+ pPhyInfo->SignalQuality = (u1Byte)(EVM & 0xff);\r
+ } \r
+ pPhyInfo->RxMIMOSignalQuality[i] = (u1Byte)(EVM & 0xff);\r
+ }\r
+ }\r
+ }\r
+\r
+ ODM_ParsingCFO(pDM_Odm, pPktinfo, pPhyStaRpt->path_cfotail);\r
+ \r
+ }\r
+#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
+ //UI BSS List signal strength(in percentage), make it good looking, from 0~100.\r
+ //It is assigned to the BSS List in GetValueFromBeaconOrProbeRsp().\r
+ if(isCCKrate)\r
+ { \r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+ // 2012/01/12 MH Use customeris signal strength from HalComRxdDesc.c/ \r
+ pPhyInfo->SignalStrength = SignalScaleProc(pDM_Odm->Adapter, PWDB_ALL, TRUE, TRUE);\r
+#else\r
+ pPhyInfo->SignalStrength = (u1Byte)(odm_SignalScaleMapping(pDM_Odm, PWDB_ALL));/*PWDB_ALL;*/\r
+#endif /*#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)*/\r
+ }\r
+ else\r
+ { \r
+ if (rf_rx_num != 0)\r
+ { \r
+ #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+ // 2012/01/12 MH Use customeris signal strength from HalComRxdDesc.c/ \r
+ pPhyInfo->SignalStrength = SignalScaleProc(pDM_Odm->Adapter, (total_rssi /= rf_rx_num), TRUE, FALSE);\r
+ #else\r
+ pPhyInfo->SignalStrength = (u1Byte)(odm_SignalScaleMapping(pDM_Odm, total_rssi /= rf_rx_num));\r
+ #endif\r
+ }\r
+ }\r
+#endif /*#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))*/\r
+\r
+ //DbgPrint("isCCKrate = %d, pPhyInfo->RxPWDBAll = %d, pPhyStaRpt->cck_agc_rpt_ofdm_cfosho_a = 0x%x\n", \r
+ //isCCKrate, pPhyInfo->RxPWDBAll, pPhyStaRpt->cck_agc_rpt_ofdm_cfosho_a);\r
+\r
+ //For 92C/92D HW (Hybrid) Antenna Diversity\r
+#if (defined(CONFIG_PHYDM_ANTENNA_DIVERSITY)) \r
+ //For 88E HW Antenna Diversity\r
+ pDM_Odm->DM_FatTable.antsel_rx_keep_0 = pPhyStaRpt->ant_sel;\r
+ pDM_Odm->DM_FatTable.antsel_rx_keep_1 = pPhyStaRpt->ant_sel_b;\r
+ pDM_Odm->DM_FatTable.antsel_rx_keep_2 = pPhyStaRpt->antsel_rx_keep_2;\r
+#endif\r
+}\r
+#endif\r
+\r
+#if ODM_IC_11AC_SERIES_SUPPORT\r
+\r
+VOID\r
+odm_RxPhyBWJaguarSeries_Parsing(\r
+ OUT PODM_PHY_INFO_T pPhyInfo,\r
+ IN PODM_PACKET_INFO_T pPktinfo,\r
+ IN PPHY_STATUS_RPT_8812_T pPhyStaRpt\r
+)\r
+{\r
+\r
+ if(pPktinfo->DataRate <= ODM_RATE54M) {\r
+ switch (pPhyStaRpt->r_RFMOD) {\r
+ case 1:\r
+ if (pPhyStaRpt->sub_chnl == 0)\r
+ pPhyInfo->BandWidth = 1;\r
+ else\r
+ pPhyInfo->BandWidth = 0;\r
+ break;\r
+\r
+ case 2:\r
+ if (pPhyStaRpt->sub_chnl == 0)\r
+ pPhyInfo->BandWidth = 2;\r
+ else if (pPhyStaRpt->sub_chnl == 9 || pPhyStaRpt->sub_chnl == 10)\r
+ pPhyInfo->BandWidth = 1;\r
+ else\r
+ pPhyInfo->BandWidth = 0;\r
+ break;\r
+\r
+ default:\r
+ case 0:\r
+ pPhyInfo->BandWidth = 0;\r
+ break;\r
+ }\r
+ }\r
+\r
+}\r
+\r
+VOID\r
+odm_RxPhyStatusJaguarSeries_Parsing(\r
+ IN OUT PDM_ODM_T pDM_Odm,\r
+ OUT PODM_PHY_INFO_T pPhyInfo,\r
+ IN pu1Byte pPhyStatus,\r
+ IN PODM_PACKET_INFO_T pPktinfo\r
+)\r
+{\r
+ u1Byte i, Max_spatial_stream;\r
+ s1Byte rx_pwr[4], rx_pwr_all = 0;\r
+ u1Byte EVM, EVMdbm, PWDB_ALL = 0, PWDB_ALL_BT;\r
+ u1Byte RSSI, avg_rssi = 0, best_rssi = 0, second_rssi = 0;\r
+ u1Byte isCCKrate = 0; \r
+ u1Byte rf_rx_num = 0;\r
+ u1Byte cck_highpwr = 0;\r
+ u1Byte LNA_idx, VGA_idx;\r
+ PPHY_STATUS_RPT_8812_T pPhyStaRpt = (PPHY_STATUS_RPT_8812_T)pPhyStatus;\r
+ pFAT_T pDM_FatTable = &pDM_Odm->DM_FatTable;\r
+\r
+ odm_RxPhyBWJaguarSeries_Parsing(pPhyInfo, pPktinfo, pPhyStaRpt);\r
+\r
+ if (pPktinfo->DataRate <= ODM_RATE11M)\r
+ isCCKrate = TRUE;\r
+ else\r
+ isCCKrate = FALSE;\r
+\r
+ if (pPktinfo->bToSelf)\r
+ pDM_Odm->curr_station_id = pPktinfo->StationID;\r
+ else\r
+ pDM_Odm->curr_station_id = 0xff;\r
+\r
+ pPhyInfo->RxMIMOSignalQuality[ODM_RF_PATH_A] = -1;\r
+ pPhyInfo->RxMIMOSignalQuality[ODM_RF_PATH_B] = -1;\r
+ pPhyInfo->RxMIMOSignalQuality[ODM_RF_PATH_C] = -1;\r
+ pPhyInfo->RxMIMOSignalQuality[ODM_RF_PATH_D] = -1;\r
+\r
+ if (isCCKrate) {\r
+ u1Byte cck_agc_rpt;\r
+ pDM_Odm->PhyDbgInfo.NumQryPhyStatusCCK++;\r
+\r
+ /*(1)Hardware does not provide RSSI for CCK*/\r
+ /*(2)PWDB, Average PWDB calculated by hardware (for rate adaptive)*/\r
+\r
+ /*if(pHalData->eRFPowerState == eRfOn)*/\r
+ cck_highpwr = pDM_Odm->bCckHighPower;\r
+ /*else*/\r
+ /*cck_highpwr = FALSE;*/\r
+\r
+ cck_agc_rpt = pPhyStaRpt->cfosho[0] ;\r
+ LNA_idx = ((cck_agc_rpt & 0xE0) >> 5);\r
+ VGA_idx = (cck_agc_rpt & 0x1F);\r
+\r
+ if (pDM_Odm->SupportICType == ODM_RTL8812) {\r
+ switch (LNA_idx) {\r
+ case 7:\r
+ if (VGA_idx <= 27)\r
+ rx_pwr_all = -100 + 2 * (27 - VGA_idx); /*VGA_idx = 27~2*/\r
+ else\r
+ rx_pwr_all = -100;\r
+ break;\r
+ case 6:\r
+ rx_pwr_all = -48 + 2 * (2 - VGA_idx); /*VGA_idx = 2~0*/\r
+ break;\r
+ case 5:\r
+ rx_pwr_all = -42 + 2 * (7 - VGA_idx); /*VGA_idx = 7~5*/\r
+ break;\r
+ case 4:\r
+ rx_pwr_all = -36 + 2 * (7 - VGA_idx); /*VGA_idx = 7~4*/\r
+ break;\r
+ case 3:\r
+ /*rx_pwr_all = -28 + 2*(7-VGA_idx); VGA_idx = 7~0*/\r
+ rx_pwr_all = -24 + 2 * (7 - VGA_idx); /*VGA_idx = 7~0*/\r
+ break;\r
+ case 2:\r
+ if (cck_highpwr)\r
+ rx_pwr_all = -12 + 2 * (5 - VGA_idx); /*VGA_idx = 5~0*/\r
+ else\r
+ rx_pwr_all = -6 + 2 * (5 - VGA_idx);\r
+ break;\r
+ case 1:\r
+ rx_pwr_all = 8 - 2 * VGA_idx;\r
+ break;\r
+ case 0:\r
+ rx_pwr_all = 14 - 2 * VGA_idx;\r
+ break;\r
+ default:\r
+ /*DbgPrint("CCK Exception default\n");*/\r
+ break;\r
+ }\r
+ rx_pwr_all += 6;\r
+ PWDB_ALL = odm_QueryRxPwrPercentage(rx_pwr_all);\r
+\r
+ if (cck_highpwr == FALSE) {\r
+ if (PWDB_ALL >= 80)\r
+ PWDB_ALL = ((PWDB_ALL - 80) << 1) + ((PWDB_ALL - 80) >> 1) + 80;\r
+ else if ((PWDB_ALL <= 78) && (PWDB_ALL >= 20))\r
+ PWDB_ALL += 3;\r
+ if (PWDB_ALL > 100)\r
+ PWDB_ALL = 100;\r
+ }\r
+ } else if (pDM_Odm->SupportICType & (ODM_RTL8821 | ODM_RTL8881A)) {\r
+ s1Byte Pout = -6;\r
+\r
+ switch (LNA_idx) {\r
+ case 5:\r
+ rx_pwr_all = Pout - 32 - (2 * VGA_idx);\r
+ break;\r
+ case 4:\r
+ rx_pwr_all = Pout - 24 - (2 * VGA_idx);\r
+ break;\r
+ case 2:\r
+ rx_pwr_all = Pout - 11 - (2 * VGA_idx);\r
+ break;\r
+ case 1:\r
+ rx_pwr_all = Pout + 5 - (2 * VGA_idx);\r
+ break;\r
+ case 0:\r
+ rx_pwr_all = Pout + 21 - (2 * VGA_idx);\r
+ break;\r
+ }\r
+ PWDB_ALL = odm_QueryRxPwrPercentage(rx_pwr_all);\r
+ } else if (pDM_Odm->SupportICType == ODM_RTL8814A || pDM_Odm->SupportICType == ODM_RTL8822B) {\r
+ s1Byte Pout = -6;\r
+\r
+ switch (LNA_idx) {\r
+ /*CCK only use LNA: 2, 3, 5, 7*/\r
+ case 7:\r
+ rx_pwr_all = Pout - 32 - (2 * VGA_idx);\r
+ break;\r
+ case 5:\r
+ rx_pwr_all = Pout - 22 - (2 * VGA_idx);\r
+ break;\r
+ case 3:\r
+ rx_pwr_all = Pout - 2 - (2 * VGA_idx);\r
+ break;\r
+ case 2:\r
+ rx_pwr_all = Pout + 5 - (2 * VGA_idx);\r
+ break;\r
+ /*case 6:*/\r
+ /*rx_pwr_all = Pout -26 - (2*VGA_idx);*/\r
+ /*break;*/\r
+ /*case 4:*/\r
+ /*rx_pwr_all = Pout - 8 - (2*VGA_idx);*/\r
+ /*break;*/\r
+ /*case 1:*/\r
+ /*rx_pwr_all = Pout + 21 - (2*VGA_idx);*/\r
+ /*break;*/\r
+ /*case 0:*/\r
+ /*rx_pwr_all = Pout + 10 - (2*VGA_idx);*/\r
+/* // break;*/\r
+ default:\r
+/* //DbgPrint("CCK Exception default\n");*/\r
+ break;\r
+ }\r
+ PWDB_ALL = odm_QueryRxPwrPercentage(rx_pwr_all);\r
+ }\r
+\r
+ pDM_Odm->cck_lna_idx = LNA_idx;\r
+ pDM_Odm->cck_vga_idx = VGA_idx;\r
+ pPhyInfo->RxPWDBAll = PWDB_ALL;\r
+/* //if(pPktinfo->StationID == 0)*/\r
+/* //{*/\r
+/* // DbgPrint("CCK: LNA_idx = %d, VGA_idx = %d, pPhyInfo->RxPWDBAll = %d\n",*/\r
+/* // LNA_idx, VGA_idx, pPhyInfo->RxPWDBAll);*/\r
+/* //}*/\r
+#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
+ pPhyInfo->BTRxRSSIPercentage = PWDB_ALL;\r
+ pPhyInfo->RecvSignalPower = rx_pwr_all;\r
+#endif\r
+ /*(3) Get Signal Quality (EVM)*/\r
+ /*if (pPktinfo->bPacketMatchBSSID)*/\r
+ {\r
+ u1Byte SQ, SQ_rpt;\r
+\r
+ if ((pDM_Odm->SupportPlatform == ODM_WIN) &&\r
+ (pDM_Odm->PatchID == RT_CID_819x_Lenovo)) {\r
+ SQ = odm_SQ_process_patch_RT_CID_819x_Lenovo(pDM_Odm, isCCKrate, PWDB_ALL, 0, 0);\r
+ } else if (pPhyInfo->RxPWDBAll > 40 && !pDM_Odm->bInHctTest) {\r
+ SQ = 100;\r
+ } else {\r
+ SQ_rpt = pPhyStaRpt->pwdb_all;\r
+\r
+ if (SQ_rpt > 64)\r
+ SQ = 0;\r
+ else if (SQ_rpt < 20)\r
+ SQ = 100;\r
+ else\r
+ SQ = ((64 - SQ_rpt) * 100) / 44;\r
+ }\r
+\r
+/* //DbgPrint("cck SQ = %d\n", SQ);*/\r
+ pPhyInfo->SignalQuality = SQ;\r
+ pPhyInfo->RxMIMOSignalQuality[ODM_RF_PATH_A] = SQ;\r
+ }\r
+\r
+ for (i = ODM_RF_PATH_A; i < ODM_RF_PATH_MAX_JAGUAR; i++) {\r
+ if (i == 0)\r
+ pPhyInfo->RxMIMOSignalStrength[0] = PWDB_ALL;\r
+ else\r
+ pPhyInfo->RxMIMOSignalStrength[i] = 0;\r
+ }\r
+ } else { \r
+ /*is OFDM rate*/\r
+ pDM_FatTable->hw_antsw_occur = pPhyStaRpt->hw_antsw_occur;\r
+ \r
+ pDM_Odm->PhyDbgInfo.NumQryPhyStatusOFDM++;\r
+\r
+ /*(1)Get RSSI for OFDM rate*/\r
+\r
+ for (i = ODM_RF_PATH_A; i < ODM_RF_PATH_MAX_JAGUAR; i++) {\r
+ /*2008/01/30 MH we will judge RF RX path now.*/\r
+/* //DbgPrint("pDM_Odm->RFPathRxEnable = %x\n", pDM_Odm->RFPathRxEnable);*/\r
+ if (pDM_Odm->RFPathRxEnable & BIT(i))\r
+ rf_rx_num++;\r
+/* //else*/\r
+/* //continue;*/\r
+ /*2012.05.25 LukeLee: Testchip AGC report is wrong, it should be restored back to old formula in MP chip*/\r
+/* //if((pDM_Odm->SupportICType & (ODM_RTL8812|ODM_RTL8821)) && (!pDM_Odm->bIsMPChip))*/\r
+ if (i < ODM_RF_PATH_C)\r
+ rx_pwr[i] = (pPhyStaRpt->gain_trsw[i] & 0x7F) - 110;\r
+ else\r
+ rx_pwr[i] = (pPhyStaRpt->gain_trsw_cd[i - 2] & 0x7F) - 110;\r
+/* //else*/\r
+ /*rx_pwr[i] = ((pPhyStaRpt->gain_trsw[i]& 0x3F)*2) - 110; OLD FORMULA*/\r
+\r
+#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
+ pPhyInfo->RxPwr[i] = rx_pwr[i];\r
+#endif\r
+\r
+ /* Translate DBM to percentage. */\r
+ RSSI = odm_QueryRxPwrPercentage(rx_pwr[i]); \r
+ \r
+ /*total_rssi += RSSI;*/\r
+ /*Get the best two RSSI*/\r
+ if (RSSI > best_rssi && RSSI > second_rssi) {\r
+ second_rssi = best_rssi;\r
+ best_rssi = RSSI;\r
+ } else if (RSSI > second_rssi && RSSI <= best_rssi)\r
+ second_rssi = RSSI;\r
+\r
+ /*RT_DISP(FRX, RX_PHY_SS, ("RF-%d RXPWR=%x RSSI=%d\n", i, rx_pwr[i], RSSI));*/\r
+\r
+ pPhyInfo->RxMIMOSignalStrength[i] = (u1Byte) RSSI;\r
+\r
+\r
+ /*Get Rx snr value in DB*/\r
+ if (i < ODM_RF_PATH_C)\r
+ pPhyInfo->RxSNR[i] = pDM_Odm->PhyDbgInfo.RxSNRdB[i] = pPhyStaRpt->rxsnr[i] / 2;\r
+ else if (pDM_Odm->SupportICType & (ODM_RTL8814A | ODM_RTL8822B))\r
+ pPhyInfo->RxSNR[i] = pDM_Odm->PhyDbgInfo.RxSNRdB[i] = pPhyStaRpt->csi_current[i - 2] / 2;\r
+\r
+#if (DM_ODM_SUPPORT_TYPE != ODM_AP)\r
+ /*(2) CFO_short & CFO_tail*/\r
+ if (i < ODM_RF_PATH_C) {\r
+ pPhyInfo->Cfo_short[i] = odm_Cfo((pPhyStaRpt->cfosho[i]));\r
+ pPhyInfo->Cfo_tail[i] = odm_Cfo((pPhyStaRpt->cfotail[i]));\r
+ }\r
+#endif\r
+ /* Record Signal Strength for next packet */\r
+ if (pPktinfo->bPacketMatchBSSID) {\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+ if ((pDM_Odm->SupportPlatform == ODM_WIN) &&\r
+ (pDM_Odm->PatchID == RT_CID_819x_Lenovo)) {\r
+ if (i == ODM_RF_PATH_A)\r
+ pPhyInfo->SignalQuality = odm_SQ_process_patch_RT_CID_819x_Lenovo(pDM_Odm, isCCKrate, PWDB_ALL, i, RSSI);\r
+\r
+ }\r
+#endif\r
+ }\r
+ }\r
+\r
+ /*(3)PWDB, Average PWDB calculated by hardware (for rate adaptive)*/\r
+\r
+ /*2012.05.25 LukeLee: Testchip AGC report is wrong, it should be restored back to old formula in MP chip*/\r
+ if ((pDM_Odm->SupportICType & (ODM_RTL8812 | ODM_RTL8821 | ODM_RTL8881A)) && (!pDM_Odm->bIsMPChip))\r
+ rx_pwr_all = (pPhyStaRpt->pwdb_all & 0x7f) - 110;\r
+ else\r
+ rx_pwr_all = (((pPhyStaRpt->pwdb_all) >> 1) & 0x7f) - 110; /*OLD FORMULA*/\r
+\r
+ PWDB_ALL_BT = PWDB_ALL = odm_QueryRxPwrPercentage(rx_pwr_all);\r
+\r
+ pPhyInfo->RxPWDBAll = PWDB_ALL;\r
+ /*ODM_RT_TRACE(pDM_Odm,ODM_COMP_RSSI_MONITOR, ODM_DBG_LOUD, ("ODM OFDM RSSI=%d\n",pPhyInfo->RxPWDBAll));*/\r
+#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
+ pPhyInfo->BTRxRSSIPercentage = PWDB_ALL_BT;\r
+ pPhyInfo->RxPower = rx_pwr_all;\r
+ pPhyInfo->RecvSignalPower = rx_pwr_all;\r
+#endif\r
+\r
+ if ((pDM_Odm->SupportPlatform == ODM_WIN) && (pDM_Odm->PatchID == 19)) {\r
+ /*do nothing*/\r
+ } else {\r
+ /*pMgntInfo->CustomerID != RT_CID_819x_Lenovo*/\r
+\r
+ /*(4)EVM of OFDM rate*/\r
+ \r
+ if ((pPktinfo->DataRate >= ODM_RATEMCS8) &&\r
+ (pPktinfo->DataRate <= ODM_RATEMCS15))\r
+ Max_spatial_stream = 2;\r
+ else if ((pPktinfo->DataRate >= ODM_RATEVHTSS2MCS0) &&\r
+ (pPktinfo->DataRate <= ODM_RATEVHTSS2MCS9))\r
+ Max_spatial_stream = 2;\r
+ else if ((pPktinfo->DataRate >= ODM_RATEMCS16) &&\r
+ (pPktinfo->DataRate <= ODM_RATEMCS23))\r
+ Max_spatial_stream = 3;\r
+ else if ((pPktinfo->DataRate >= ODM_RATEVHTSS3MCS0) &&\r
+ (pPktinfo->DataRate <= ODM_RATEVHTSS3MCS9))\r
+ Max_spatial_stream = 3;\r
+ else\r
+ Max_spatial_stream = 1;\r
+\r
+ /*if (pPktinfo->bPacketMatchBSSID) */\r
+ {\r
+ /*DbgPrint("pPktinfo->DataRate = %d\n", pPktinfo->DataRate);*/\r
+\r
+ for (i = 0; i < Max_spatial_stream; i++) {\r
+ /*Do not use shift operation like "rx_evmX >>= 1" because the compilor of free build environment*/\r
+ /*fill most significant bit to "zero" when doing shifting operation which may change a negative*/\r
+ /*value to positive one, then the dbm value (which is supposed to be negative) is not correct anymore.*/\r
+\r
+ if (pPktinfo->DataRate >= ODM_RATE6M && pPktinfo->DataRate <= ODM_RATE54M) {\r
+ if (i == ODM_RF_PATH_A) {\r
+ EVM = odm_EVMdbToPercentage((pPhyStaRpt->sigevm)); /*dbm*/\r
+ EVM += 20;\r
+ if (EVM > 100)\r
+ EVM = 100;\r
+ }\r
+ } else {\r
+ if (i < ODM_RF_PATH_C) {\r
+ if (pPhyStaRpt->rxevm[i] == -128)\r
+ pPhyStaRpt->rxevm[i] = -25;\r
+ EVM = odm_EVMdbToPercentage((pPhyStaRpt->rxevm[i])); /*dbm*/\r
+ } else {\r
+ if (pPhyStaRpt->rxevm_cd[i - 2] == -128){\r
+ pPhyStaRpt->rxevm_cd[i - 2] = -25;\r
+ }\r
+ EVM = odm_EVMdbToPercentage((pPhyStaRpt->rxevm_cd[i - 2])); /*dbm*/\r
+ }\r
+ }\r
+\r
+ if (i < ODM_RF_PATH_C)\r
+ EVMdbm = odm_EVMdbm_JaguarSeries(pPhyStaRpt->rxevm[i]);\r
+ else\r
+ EVMdbm = odm_EVMdbm_JaguarSeries(pPhyStaRpt->rxevm_cd[i - 2]);\r
+ /*RT_DISP(FRX, RX_PHY_SQ, ("RXRATE=%x RXEVM=%x EVM=%s%d\n",*/\r
+ /*pPktinfo->DataRate, pPhyStaRpt->rxevm[i], "%", EVM));*/\r
+\r
+ {\r
+ if (i == ODM_RF_PATH_A) { \r
+ /*Fill value in RFD, Get the first spatial stream only*/\r
+ pPhyInfo->SignalQuality = EVM;\r
+ }\r
+ pPhyInfo->RxMIMOSignalQuality[i] = EVM;\r
+#if (DM_ODM_SUPPORT_TYPE != ODM_AP)\r
+ pPhyInfo->RxMIMOEVMdbm[i] = EVMdbm;\r
+#endif\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ ODM_ParsingCFO(pDM_Odm, pPktinfo, pPhyStaRpt->cfotail);\r
+\r
+ }\r
+/* //DbgPrint("isCCKrate= %d, pPhyInfo->SignalStrength=%d % PWDB_AL=%d rf_rx_num=%d\n", isCCKrate, pPhyInfo->SignalStrength, PWDB_ALL, rf_rx_num);*/\r
+\r
+#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
+ /*UI BSS List signal strength(in percentage), make it good looking, from 0~100.*/\r
+ /*It is assigned to the BSS List in GetValueFromBeaconOrProbeRsp().*/\r
+ if (isCCKrate) {\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+ /*2012/01/12 MH Use customeris signal strength from HalComRxdDesc.c/*/\r
+ pPhyInfo->SignalStrength = SignalScaleProc(pDM_Odm->Adapter, PWDB_ALL, FALSE, TRUE);\r
+#else\r
+ pPhyInfo->SignalStrength = (u1Byte)(odm_SignalScaleMapping(pDM_Odm, PWDB_ALL));/*PWDB_ALL;*/\r
+#endif\r
+ } else { \r
+ if (rf_rx_num != 0) {\r
+ /* 2015/01 Sean, use the best two RSSI only, suggested by Ynlin and ChenYu.*/\r
+ if (rf_rx_num == 1)\r
+ avg_rssi = best_rssi;\r
+ else\r
+ avg_rssi = (best_rssi + second_rssi)/2;\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+ /* 2012/01/12 MH Use customeris signal strength from HalComRxdDesc.c/*/ \r
+ pPhyInfo->SignalStrength = SignalScaleProc(pDM_Odm->Adapter, avg_rssi, FALSE, FALSE);\r
+#else\r
+ pPhyInfo->SignalStrength = (u1Byte)(odm_SignalScaleMapping(pDM_Odm, avg_rssi));\r
+#endif\r
+ }\r
+ }\r
+#endif\r
+ pDM_Odm->RxPWDBAve = pDM_Odm->RxPWDBAve + pPhyInfo->RxPWDBAll;\r
+\r
+ pDM_Odm->DM_FatTable.antsel_rx_keep_0 = pPhyStaRpt->antidx_anta;\r
+ pDM_Odm->DM_FatTable.antsel_rx_keep_1 = pPhyStaRpt->antidx_antb;\r
+ pDM_Odm->DM_FatTable.antsel_rx_keep_2 = pPhyStaRpt->antidx_antc;\r
+ pDM_Odm->DM_FatTable.antsel_rx_keep_3 = pPhyStaRpt->antidx_antd;\r
+ /*ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("StaID[%d]: antidx_anta = ((%d)), MatchBSSID = ((%d))\n", pPktinfo->StationID, pPhyStaRpt->antidx_anta, pPktinfo->bPacketMatchBSSID));*/\r
+\r
+\r
+/* DbgPrint("pPhyStaRpt->antidx_anta = %d, pPhyStaRpt->antidx_antb = %d\n",*/\r
+/* pPhyStaRpt->antidx_anta, pPhyStaRpt->antidx_antb);*/\r
+/* DbgPrint("----------------------------\n");*/\r
+/* DbgPrint("pPktinfo->StationID=%d, pPktinfo->DataRate=0x%x\n",pPktinfo->StationID, pPktinfo->DataRate);*/\r
+/* DbgPrint("pPhyStaRpt->r_RFMOD = %d\n", pPhyStaRpt->r_RFMOD);*/\r
+/* DbgPrint("pPhyStaRpt->gain_trsw[0]=0x%x, pPhyStaRpt->gain_trsw[1]=0x%x\n",*/\r
+/* pPhyStaRpt->gain_trsw[0],pPhyStaRpt->gain_trsw[1]);*/\r
+/* DbgPrint("pPhyStaRpt->gain_trsw[2]=0x%x, pPhyStaRpt->gain_trsw[3]=0x%x\n",*/\r
+/* pPhyStaRpt->gain_trsw_cd[0],pPhyStaRpt->gain_trsw_cd[1]);*/\r
+/* DbgPrint("pPhyStaRpt->pwdb_all = 0x%x, pPhyInfo->RxPWDBAll = %d\n", pPhyStaRpt->pwdb_all, pPhyInfo->RxPWDBAll);*/\r
+/* DbgPrint("pPhyStaRpt->cfotail[i] = 0x%x, pPhyStaRpt->CFO_tail[i] = 0x%x\n", pPhyStaRpt->cfotail[0], pPhyStaRpt->cfotail[1]);*/\r
+/* DbgPrint("pPhyStaRpt->rxevm[0] = %d, pPhyStaRpt->rxevm[1] = %d\n", pPhyStaRpt->rxevm[0], pPhyStaRpt->rxevm[1]);*/\r
+/* DbgPrint("pPhyStaRpt->rxevm[2] = %d, pPhyStaRpt->rxevm[3] = %d\n", pPhyStaRpt->rxevm_cd[0], pPhyStaRpt->rxevm_cd[1]);*/\r
+/* DbgPrint("pPhyInfo->RxMIMOSignalStrength[0]=%d, pPhyInfo->RxMIMOSignalStrength[1]=%d, RxPWDBAll=%d\n",*/\r
+/* pPhyInfo->RxMIMOSignalStrength[0], pPhyInfo->RxMIMOSignalStrength[1], pPhyInfo->RxPWDBAll);*/\r
+/* DbgPrint("pPhyInfo->RxMIMOSignalStrength[2]=%d, pPhyInfo->RxMIMOSignalStrength[3]=%d\n",*/\r
+/* pPhyInfo->RxMIMOSignalStrength[2], pPhyInfo->RxMIMOSignalStrength[3]);*/\r
+/* DbgPrint("ppPhyInfo->RxMIMOSignalQuality[0]=%d, pPhyInfo->RxMIMOSignalQuality[1]=%d\n",*/\r
+/* pPhyInfo->RxMIMOSignalQuality[0], pPhyInfo->RxMIMOSignalQuality[1]);*/\r
+/* DbgPrint("ppPhyInfo->RxMIMOSignalQuality[2]=%d, pPhyInfo->RxMIMOSignalQuality[3]=%d\n",*/\r
+/* pPhyInfo->RxMIMOSignalQuality[2], pPhyInfo->RxMIMOSignalQuality[3]);*/\r
+\r
+}\r
+\r
+#endif\r
+\r
+VOID\r
+phydm_reset_rssi_for_dm(\r
+ IN OUT PDM_ODM_T pDM_Odm,\r
+ IN u1Byte station_id\r
+ )\r
+{\r
+ PSTA_INFO_T pEntry;\r
+ #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN))\r
+ PADAPTER Adapter = pDM_Odm->Adapter;\r
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);\r
+ #endif\r
+\r
+ pEntry = pDM_Odm->pODM_StaInfo[station_id];\r
+\r
+ if (!IS_STA_VALID(pEntry)) {\r
+ /**/\r
+ return;\r
+ }\r
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_RSSI_MONITOR, ODM_DBG_LOUD, ("Reset RSSI for macid = (( %d ))\n", station_id));\r
+\r
+ \r
+ pEntry->rssi_stat.UndecoratedSmoothedCCK = -1;\r
+ pEntry->rssi_stat.UndecoratedSmoothedOFDM = -1;\r
+ pEntry->rssi_stat.UndecoratedSmoothedPWDB = -1;\r
+ pEntry->rssi_stat.OFDM_pkt = 0;\r
+ pEntry->rssi_stat.CCK_pkt = 0;\r
+ pEntry->rssi_stat.CCK_sum_power = 0;\r
+ pEntry->rssi_stat.bsend_rssi = RA_RSSI_STATE_INIT;\r
+ pEntry->rssi_stat.PacketMap = 0;\r
+ pEntry->rssi_stat.ValidBit = 0;\r
+\r
+ /*in WIN Driver: sta_ID==0 -> pEntry==NULL -> default port HAL_Data*/\r
+ #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN))\r
+ pEntry->bUsed = 0;\r
+ if (station_id == 0) { \r
+ \r
+ pHalData->UndecoratedSmoothedPWDB = -1;\r
+ /**/\r
+ }\r
+ #endif\r
+\r
+}\r
+\r
+VOID\r
+odm_Init_RSSIForDM(\r
+ IN OUT PDM_ODM_T pDM_Odm\r
+ )\r
+{\r
+\r
+}\r
+\r
+VOID\r
+odm_Process_RSSIForDM( \r
+ IN OUT PDM_ODM_T pDM_Odm,\r
+ OUT PODM_PHY_INFO_T pPhyInfo,\r
+ IN PODM_PACKET_INFO_T pPktinfo\r
+ )\r
+{\r
+ \r
+ s4Byte UndecoratedSmoothedPWDB, UndecoratedSmoothedCCK, UndecoratedSmoothedOFDM, RSSI_Ave, CCK_pkt;\r
+ u1Byte i, isCCKrate=0; \r
+ u1Byte RSSI_max, RSSI_min;\r
+ u4Byte Weighting=0;\r
+ u1Byte send_rssi_2_fw = 0;\r
+ PSTA_INFO_T pEntry;\r
+ #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN)) \r
+ pFAT_T pDM_FatTable = &pDM_Odm->DM_FatTable;\r
+ PADAPTER Adapter = pDM_Odm->Adapter;\r
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);\r
+ #endif\r
+\r
+ if (pPktinfo->StationID >= ODM_ASSOCIATE_ENTRY_NUM)\r
+ return;\r
+\r
+ #ifdef CONFIG_S0S1_SW_ANTENNA_DIVERSITY\r
+ odm_S0S1_SwAntDivByCtrlFrame_ProcessRSSI(pDM_Odm, pPhyInfo, pPktinfo);\r
+ #endif\r
+\r
+ //\r
+ // 2012/05/30 MH/Luke.Lee Add some description \r
+ // In windows driver: AP/IBSS mode STA\r
+ //\r
+ //if (pDM_Odm->SupportPlatform == ODM_WIN)\r
+ //{\r
+ // pEntry = pDM_Odm->pODM_StaInfo[pDM_Odm->pAidMap[pPktinfo->StationID-1]]; \r
+ //}\r
+ //else\r
+ pEntry = pDM_Odm->pODM_StaInfo[pPktinfo->StationID]; \r
+\r
+ if (!IS_STA_VALID(pEntry)) { \r
+ return;\r
+ /**/\r
+ }\r
+ \r
+#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN)) \r
+ if ((pDM_Odm->SupportAbility & ODM_BB_ANT_DIV) &&\r
+ (pDM_FatTable->enable_ctrl_frame_antdiv)\r
+ )\r
+ {\r
+ if (pPktinfo->bPacketMatchBSSID)\r
+ pDM_Odm->data_frame_num++;\r
+ \r
+ if ((pDM_FatTable->use_ctrl_frame_antdiv)) {\r
+ if (!pPktinfo->bToSelf)/*data frame + CTRL frame*/\r
+ return;\r
+ } else {\r
+ if ((!pPktinfo->bPacketMatchBSSID))/*data frame only*/\r
+ return;\r
+ } \r
+ } else\r
+#endif\r
+ {\r
+ if ((!pPktinfo->bPacketMatchBSSID))/*data frame only*/\r
+ return;\r
+ }\r
+\r
+ if(pPktinfo->bPacketBeacon)\r
+ pDM_Odm->PhyDbgInfo.NumQryBeaconPkt++;\r
+ \r
+ isCCKrate = (pPktinfo->DataRate <= ODM_RATE11M )?TRUE :FALSE;\r
+ pDM_Odm->RxRate = pPktinfo->DataRate;\r
+\r
+ //--------------Statistic for antenna/path diversity------------------\r
+ if(pDM_Odm->SupportAbility & ODM_BB_ANT_DIV)\r
+ {\r
+ #if (defined(CONFIG_PHYDM_ANTENNA_DIVERSITY))\r
+ ODM_Process_RSSIForAntDiv(pDM_Odm,pPhyInfo,pPktinfo);\r
+ #endif\r
+ }\r
+ #if(defined(CONFIG_PATH_DIVERSITY))\r
+ else if(pDM_Odm->SupportAbility & ODM_BB_PATH_DIV)\r
+ {\r
+ phydm_process_rssi_for_path_div(pDM_Odm,pPhyInfo,pPktinfo);\r
+ }\r
+ #endif\r
+ //-----------------Smart Antenna Debug Message------------------//\r
+ \r
+ UndecoratedSmoothedCCK = pEntry->rssi_stat.UndecoratedSmoothedCCK;\r
+ UndecoratedSmoothedOFDM = pEntry->rssi_stat.UndecoratedSmoothedOFDM;\r
+ UndecoratedSmoothedPWDB = pEntry->rssi_stat.UndecoratedSmoothedPWDB; \r
+ \r
+ if(pPktinfo->bPacketToSelf || pPktinfo->bPacketBeacon)\r
+ {\r
+\r
+ if(!isCCKrate)//ofdm rate\r
+ {\r
+#if (RTL8814A_SUPPORT == 1) || (RTL8822B_SUPPORT == 1)\r
+ if (pDM_Odm->SupportICType & (ODM_RTL8814A|ODM_RTL8822B)) {\r
+ u1Byte RX_count = 0;\r
+ u4Byte RSSI_linear = 0;\r
+\r
+ if (pDM_Odm->RXAntStatus & ODM_RF_A) {\r
+ pDM_Odm->RSSI_A = pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_A];\r
+ RX_count++;\r
+ RSSI_linear += odm_ConvertTo_linear(pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_A]);\r
+ } else\r
+ pDM_Odm->RSSI_A = 0;\r
+\r
+ if (pDM_Odm->RXAntStatus & ODM_RF_B) {\r
+ pDM_Odm->RSSI_B = pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_B];\r
+ RX_count++;\r
+ RSSI_linear += odm_ConvertTo_linear(pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_B]);\r
+ } else\r
+ pDM_Odm->RSSI_B = 0;\r
+ \r
+ if (pDM_Odm->RXAntStatus & ODM_RF_C) {\r
+ pDM_Odm->RSSI_C = pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_C];\r
+ RX_count++;\r
+ RSSI_linear += odm_ConvertTo_linear(pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_C]);\r
+ } else\r
+ pDM_Odm->RSSI_C = 0;\r
+\r
+ if (pDM_Odm->RXAntStatus & ODM_RF_D) {\r
+ pDM_Odm->RSSI_D = pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_D];\r
+ RX_count++;\r
+ RSSI_linear += odm_ConvertTo_linear(pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_D]);\r
+ } else\r
+ pDM_Odm->RSSI_D = 0;\r
+\r
+ /* Calculate average RSSI */\r
+ switch (RX_count) {\r
+ case 2:\r
+ RSSI_linear = (RSSI_linear >> 1);\r
+ break;\r
+ case 3:\r
+ RSSI_linear = ((RSSI_linear) + (RSSI_linear << 1) + (RSSI_linear << 3)) >> 5; /* RSSI_linear/3 ~ RSSI_linear*11/32 */\r
+ break;\r
+ case 4:\r
+ RSSI_linear = (RSSI_linear >> 2);\r
+ break;\r
+ } \r
+ RSSI_Ave = odm_ConvertTo_dB(RSSI_linear);\r
+ } else\r
+#endif\r
+ {\r
+ if (pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_B] == 0) {\r
+ RSSI_Ave = pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_A];\r
+ pDM_Odm->RSSI_A = pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_A];\r
+ pDM_Odm->RSSI_B = 0;\r
+ } else {\r
+ /*DbgPrint("pRfd->Status.RxMIMOSignalStrength[0] = %d, pRfd->Status.RxMIMOSignalStrength[1] = %d\n",*/ \r
+ /*pRfd->Status.RxMIMOSignalStrength[0], pRfd->Status.RxMIMOSignalStrength[1]);*/\r
+ pDM_Odm->RSSI_A = pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_A];\r
+ pDM_Odm->RSSI_B = pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_B];\r
+ \r
+ if (pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_A] > pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_B]) {\r
+ RSSI_max = pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_A];\r
+ RSSI_min = pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_B];\r
+ } else {\r
+ RSSI_max = pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_B];\r
+ RSSI_min = pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_A];\r
+ }\r
+ if ((RSSI_max - RSSI_min) < 3)\r
+ RSSI_Ave = RSSI_max;\r
+ else if ((RSSI_max - RSSI_min) < 6)\r
+ RSSI_Ave = RSSI_max - 1;\r
+ else if ((RSSI_max - RSSI_min) < 10)\r
+ RSSI_Ave = RSSI_max - 2;\r
+ else\r
+ RSSI_Ave = RSSI_max - 3;\r
+ }\r
+ }\r
+ \r
+ //1 Process OFDM RSSI\r
+ if(UndecoratedSmoothedOFDM <= 0) // initialize\r
+ {\r
+ UndecoratedSmoothedOFDM = pPhyInfo->RxPWDBAll;\r
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_RSSI_MONITOR, ODM_DBG_LOUD, ("OFDM_INIT: (( %d ))\n", UndecoratedSmoothedOFDM));\r
+ }\r
+ else\r
+ {\r
+ if(pPhyInfo->RxPWDBAll > (u4Byte)UndecoratedSmoothedOFDM)\r
+ {\r
+ UndecoratedSmoothedOFDM = \r
+ ( ((UndecoratedSmoothedOFDM)*(Rx_Smooth_Factor-1)) + \r
+ (RSSI_Ave)) /(Rx_Smooth_Factor);\r
+ UndecoratedSmoothedOFDM = UndecoratedSmoothedOFDM + 1;\r
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_RSSI_MONITOR, ODM_DBG_LOUD, ("OFDM_1: (( %d ))\n", UndecoratedSmoothedOFDM));\r
+ }\r
+ else\r
+ {\r
+ UndecoratedSmoothedOFDM = \r
+ ( ((UndecoratedSmoothedOFDM)*(Rx_Smooth_Factor-1)) + \r
+ (RSSI_Ave)) /(Rx_Smooth_Factor);\r
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_RSSI_MONITOR, ODM_DBG_LOUD, ("OFDM_2: (( %d ))\n", UndecoratedSmoothedOFDM));\r
+ }\r
+ } \r
+ if (pEntry->rssi_stat.OFDM_pkt != 64) {\r
+ i = 63;\r
+ pEntry->rssi_stat.OFDM_pkt -= (u1Byte)(((pEntry->rssi_stat.PacketMap>>i)&BIT0)-1);\r
+ }\r
+ pEntry->rssi_stat.PacketMap = (pEntry->rssi_stat.PacketMap<<1) | BIT0; \r
+ \r
+ }\r
+ else\r
+ {\r
+ RSSI_Ave = pPhyInfo->RxPWDBAll;\r
+ pDM_Odm->RSSI_A = (u1Byte) pPhyInfo->RxPWDBAll;\r
+ pDM_Odm->RSSI_B = 0xFF;\r
+ pDM_Odm->RSSI_C = 0xFF;\r
+ pDM_Odm->RSSI_D = 0xFF;\r
+\r
+ if (pEntry->rssi_stat.CCK_pkt <= 63)\r
+ pEntry->rssi_stat.CCK_pkt++;\r
+\r
+ //1 Process CCK RSSI\r
+ if(UndecoratedSmoothedCCK <= 0) // initialize\r
+ {\r
+ UndecoratedSmoothedCCK = pPhyInfo->RxPWDBAll;\r
+ pEntry->rssi_stat.CCK_sum_power = (u2Byte)pPhyInfo->RxPWDBAll ; /*reset*/\r
+ pEntry->rssi_stat.CCK_pkt = 1; /*reset*/\r
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_RSSI_MONITOR, ODM_DBG_LOUD, ("CCK_INIT: (( %d ))\n", UndecoratedSmoothedCCK));\r
+ } else if (pEntry->rssi_stat.CCK_pkt <= CCK_RSSI_INIT_COUNT) {\r
+ \r
+ pEntry->rssi_stat.CCK_sum_power = pEntry->rssi_stat.CCK_sum_power + (u2Byte)pPhyInfo->RxPWDBAll;\r
+ UndecoratedSmoothedCCK = pEntry->rssi_stat.CCK_sum_power/pEntry->rssi_stat.CCK_pkt;\r
+ \r
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_RSSI_MONITOR, ODM_DBG_LOUD, ("CCK_0: (( %d )), SumPow = (( %d )), CCK_pkt = (( %d ))\n", \r
+ UndecoratedSmoothedCCK, pEntry->rssi_stat.CCK_sum_power, pEntry->rssi_stat.CCK_pkt));\r
+ }\r
+ else\r
+ {\r
+ if(pPhyInfo->RxPWDBAll > (u4Byte)UndecoratedSmoothedCCK)\r
+ {\r
+ UndecoratedSmoothedCCK = \r
+ ( ((UndecoratedSmoothedCCK)*(Rx_Smooth_Factor-1)) + \r
+ (pPhyInfo->RxPWDBAll)) /(Rx_Smooth_Factor);\r
+ UndecoratedSmoothedCCK = UndecoratedSmoothedCCK + 1;\r
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_RSSI_MONITOR, ODM_DBG_LOUD, ("CCK_1: (( %d ))\n", UndecoratedSmoothedCCK));\r
+ }\r
+ else\r
+ {\r
+ UndecoratedSmoothedCCK = \r
+ ( ((UndecoratedSmoothedCCK)*(Rx_Smooth_Factor-1)) + \r
+ (pPhyInfo->RxPWDBAll)) /(Rx_Smooth_Factor);\r
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_RSSI_MONITOR, ODM_DBG_LOUD, ("CCK_2: (( %d ))\n", UndecoratedSmoothedCCK));\r
+ }\r
+ }\r
+ i = 63;\r
+ pEntry->rssi_stat.OFDM_pkt -= (u1Byte)((pEntry->rssi_stat.PacketMap>>i)&BIT0); \r
+ pEntry->rssi_stat.PacketMap = pEntry->rssi_stat.PacketMap<<1;\r
+ }\r
+\r
+ //if(pEntry)\r
+ {\r
+ //2011.07.28 LukeLee: modified to prevent unstable CCK RSSI\r
+ if (pEntry->rssi_stat.OFDM_pkt == 64) { /* speed up when all packets are OFDM*/\r
+ UndecoratedSmoothedPWDB = UndecoratedSmoothedOFDM;\r
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_RSSI_MONITOR, ODM_DBG_LOUD, ("PWDB_0[%d] = (( %d ))\n", pPktinfo->StationID, UndecoratedSmoothedCCK));\r
+ } else {\r
+ if (pEntry->rssi_stat.ValidBit < 64)\r
+ pEntry->rssi_stat.ValidBit++;\r
+\r
+ if (pEntry->rssi_stat.ValidBit == 64) {\r
+ Weighting = ((pEntry->rssi_stat.OFDM_pkt) > 4) ? 64 : (pEntry->rssi_stat.OFDM_pkt<<4);\r
+ UndecoratedSmoothedPWDB = (Weighting*UndecoratedSmoothedOFDM+(64-Weighting)*UndecoratedSmoothedCCK)>>6;\r
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_RSSI_MONITOR, ODM_DBG_LOUD, ("PWDB_1[%d] = (( %d )), W = (( %d ))\n", pPktinfo->StationID, UndecoratedSmoothedCCK, Weighting));\r
+ } else {\r
+ if (pEntry->rssi_stat.ValidBit != 0)\r
+ UndecoratedSmoothedPWDB = (pEntry->rssi_stat.OFDM_pkt*UndecoratedSmoothedOFDM+(pEntry->rssi_stat.ValidBit-pEntry->rssi_stat.OFDM_pkt)*UndecoratedSmoothedCCK)/pEntry->rssi_stat.ValidBit;\r
+ else\r
+ UndecoratedSmoothedPWDB = 0;\r
+\r
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_RSSI_MONITOR, ODM_DBG_LOUD, ("PWDB_2[%d] = (( %d )), OFDM_pkt = (( %d )), Valid_Bit = (( %d ))\n", pPktinfo->StationID, UndecoratedSmoothedCCK, pEntry->rssi_stat.OFDM_pkt, pEntry->rssi_stat.ValidBit));\r
+ }\r
+ }\r
+ \r
+ \r
+ if ((pEntry->rssi_stat.OFDM_pkt >= 1 || pEntry->rssi_stat.CCK_pkt >= 5) && (pEntry->rssi_stat.bsend_rssi == RA_RSSI_STATE_INIT)) {\r
+ \r
+ send_rssi_2_fw = 1;\r
+ pEntry->rssi_stat.bsend_rssi = RA_RSSI_STATE_SEND;\r
+ }\r
+\r
+ pEntry->rssi_stat.UndecoratedSmoothedCCK = UndecoratedSmoothedCCK;\r
+ pEntry->rssi_stat.UndecoratedSmoothedOFDM = UndecoratedSmoothedOFDM;\r
+ pEntry->rssi_stat.UndecoratedSmoothedPWDB = UndecoratedSmoothedPWDB;\r
+\r
+\r
+ \r
+ if (send_rssi_2_fw) /* Trigger init rate by RSSI */ {\r
+ \r
+ if (pEntry->rssi_stat.OFDM_pkt != 0)\r
+ pEntry->rssi_stat.UndecoratedSmoothedPWDB = UndecoratedSmoothedOFDM;\r
+\r
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_RSSI_MONITOR, ODM_DBG_LOUD, ("[Send to FW] PWDB = (( %d )), OFDM_pkt = (( %d )), CCK_pkt = (( %d ))\n", \r
+ UndecoratedSmoothedPWDB, pEntry->rssi_stat.OFDM_pkt, pEntry->rssi_stat.CCK_pkt));\r
+ \r
+ #if (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
+ phydm_ra_rssi_rpt_wk(pDM_Odm);\r
+ #endif\r
+ }\r
+ \r
+\r
+ /*in WIN Driver: sta_ID==0 -> pEntry==NULL -> default port HAL_Data*/\r
+ #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN)) \r
+ \r
+ if (pPktinfo->StationID == 0) { \r
+ /**/\r
+ pHalData->UndecoratedSmoothedPWDB = UndecoratedSmoothedPWDB;\r
+ }\r
+ #endif\r
+ \r
+ //DbgPrint("OFDM_pkt=%d, Weighting=%d\n", OFDM_pkt, Weighting);\r
+ //DbgPrint("UndecoratedSmoothedOFDM=%d, UndecoratedSmoothedPWDB=%d, UndecoratedSmoothedCCK=%d\n", \r
+ // UndecoratedSmoothedOFDM, UndecoratedSmoothedPWDB, UndecoratedSmoothedCCK);\r
+ \r
+ }\r
+ \r
+ }\r
+}\r
+\r
+\r
+#if(ODM_IC_11N_SERIES_SUPPORT ==1)\r
+//\r
+// Endianness before calling this API\r
+//\r
+VOID\r
+ODM_PhyStatusQuery_92CSeries(\r
+ IN OUT PDM_ODM_T pDM_Odm,\r
+ OUT PODM_PHY_INFO_T pPhyInfo,\r
+ IN pu1Byte pPhyStatus, \r
+ IN PODM_PACKET_INFO_T pPktinfo\r
+ )\r
+{\r
+ odm_RxPhyStatus92CSeries_Parsing(pDM_Odm, pPhyInfo, pPhyStatus, pPktinfo);\r
+ odm_Process_RSSIForDM(pDM_Odm, pPhyInfo, pPktinfo);\r
+}\r
+#endif\r
+\r
+\r
+//\r
+// Endianness before calling this API\r
+//\r
+#if ODM_IC_11AC_SERIES_SUPPORT\r
+\r
+VOID\r
+ODM_PhyStatusQuery_JaguarSeries(\r
+ IN OUT PDM_ODM_T pDM_Odm,\r
+ OUT PODM_PHY_INFO_T pPhyInfo,\r
+ IN pu1Byte pPhyStatus, \r
+ IN PODM_PACKET_INFO_T pPktinfo\r
+ )\r
+{\r
+ odm_RxPhyStatusJaguarSeries_Parsing(pDM_Odm, pPhyInfo, pPhyStatus, pPktinfo);\r
+ odm_Process_RSSIForDM(pDM_Odm, pPhyInfo, pPktinfo);\r
+ \r
+ #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+ /*phydm_sbd_check(pDM_Odm);*/\r
+ #endif\r
+}\r
+#endif\r
+\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+VOID\r
+phydm_normal_driver_rx_sniffer(\r
+ IN OUT PDM_ODM_T pDM_Odm,\r
+ IN pu1Byte pDesc,\r
+ IN PRT_RFD_STATUS pRtRfdStatus,\r
+ IN pu1Byte pDrvInfo,\r
+ IN u1Byte PHYStatus\r
+ )\r
+{\r
+ #if (defined(CONFIG_PHYDM_RX_SNIFFER_PARSING)) \r
+ u4Byte *pMsg;\r
+ u2Byte seq_num;\r
+ pFAT_T pDM_FatTable = &pDM_Odm->DM_FatTable;\r
+\r
+ if (pRtRfdStatus->PacketReportType != NORMAL_RX)\r
+ return;\r
+ \r
+ if (!pDM_Odm->bLinked) {\r
+ if (pRtRfdStatus->bHwError)\r
+ return;\r
+ }\r
+\r
+ if (!(pDM_FatTable->FAT_State == FAT_TRAINING_STATE))\r
+ return;\r
+ \r
+ if (PHYStatus == TRUE) {\r
+\r
+ if ((pDM_Odm->rx_pkt_type == Type_BlockAck) || (pDM_Odm->rx_pkt_type == Type_RTS) || (pDM_Odm->rx_pkt_type == Type_CTS))\r
+ seq_num = 0;\r
+ else\r
+ seq_num = pRtRfdStatus->Seq_Num;\r
+\r
+ ODM_RT_TRACE_F(pDM_Odm, ODM_COMP_SNIFFER, ODM_DBG_LOUD, ("%04d , %01s , Rate=0x%02x , L=%04d , %s , %s", \r
+ seq_num,\r
+ /*pRtRfdStatus->MacID,*/\r
+ ((pRtRfdStatus->bCRC) ? "C" : (pRtRfdStatus->bIsAMPDU) ? "A" : "_"),\r
+ pRtRfdStatus->DataRate,\r
+ pRtRfdStatus->Length,\r
+ ((pRtRfdStatus->BandWidth == 0) ? "20M":((pRtRfdStatus->BandWidth == 1) ? "40M" : "80M")),\r
+ ((pRtRfdStatus->bLDPC) ? "LDP" : "BCC")\r
+ )); \r
+ \r
+ if (pDM_Odm->rx_pkt_type == Type_Asoc_Req) {\r
+ ODM_RT_TRACE_F(pDM_Odm, ODM_COMP_SNIFFER, ODM_DBG_LOUD, (" , [%s]", "AS_REQ"));\r
+ /**/\r
+ } else if (pDM_Odm->rx_pkt_type == Type_Asoc_Rsp) {\r
+ ODM_RT_TRACE_F(pDM_Odm, ODM_COMP_SNIFFER, ODM_DBG_LOUD, (" , [%s]", "AS_RSP"));\r
+ /**/\r
+ } else if (pDM_Odm->rx_pkt_type == Type_Probe_Req) {\r
+ ODM_RT_TRACE_F(pDM_Odm, ODM_COMP_SNIFFER, ODM_DBG_LOUD, (" , [%s]", "PR_REQ"));\r
+ /**/\r
+ } else if (pDM_Odm->rx_pkt_type == Type_Probe_Rsp) {\r
+ ODM_RT_TRACE_F(pDM_Odm, ODM_COMP_SNIFFER, ODM_DBG_LOUD, (" , [%s]", "PR_RSP"));\r
+ /**/\r
+ } else if (pDM_Odm->rx_pkt_type == Type_Deauth) {\r
+ ODM_RT_TRACE_F(pDM_Odm, ODM_COMP_SNIFFER, ODM_DBG_LOUD, (" , [%s]", "DEAUTH"));\r
+ /**/\r
+ } else if (pDM_Odm->rx_pkt_type == Type_Beacon) {\r
+ ODM_RT_TRACE_F(pDM_Odm, ODM_COMP_SNIFFER, ODM_DBG_LOUD, (" , [%s]", "BEACON"));\r
+ /**/\r
+ } else if (pDM_Odm->rx_pkt_type == Type_BlockAckReq) {\r
+ ODM_RT_TRACE_F(pDM_Odm, ODM_COMP_SNIFFER, ODM_DBG_LOUD, (" , [%s]", "BA_REQ"));\r
+ /**/\r
+ } else if (pDM_Odm->rx_pkt_type == Type_RTS) {\r
+ ODM_RT_TRACE_F(pDM_Odm, ODM_COMP_SNIFFER, ODM_DBG_LOUD, (" , [%s]", "__RTS_"));\r
+ /**/\r
+ } else if (pDM_Odm->rx_pkt_type == Type_CTS) {\r
+ ODM_RT_TRACE_F(pDM_Odm, ODM_COMP_SNIFFER, ODM_DBG_LOUD, (" , [%s]", "__CTS_"));\r
+ /**/\r
+ } else if (pDM_Odm->rx_pkt_type == Type_Ack) {\r
+ ODM_RT_TRACE_F(pDM_Odm, ODM_COMP_SNIFFER, ODM_DBG_LOUD, (" , [%s]", "__ACK_"));\r
+ /**/\r
+ } else if (pDM_Odm->rx_pkt_type == Type_BlockAck) {\r
+ ODM_RT_TRACE_F(pDM_Odm, ODM_COMP_SNIFFER, ODM_DBG_LOUD, (" , [%s]", "__BA__"));\r
+ /**/\r
+ } else if (pDM_Odm->rx_pkt_type == Type_Data) {\r
+ ODM_RT_TRACE_F(pDM_Odm, ODM_COMP_SNIFFER, ODM_DBG_LOUD, (" , [%s]", "_DATA_"));\r
+ /**/\r
+ } else if (pDM_Odm->rx_pkt_type == Type_Data_Ack) {\r
+ ODM_RT_TRACE_F(pDM_Odm, ODM_COMP_SNIFFER, ODM_DBG_LOUD, (" , [%s]", "Data_Ack"));\r
+ /**/\r
+ } else if (pDM_Odm->rx_pkt_type == Type_QosData) {\r
+ ODM_RT_TRACE_F(pDM_Odm, ODM_COMP_SNIFFER, ODM_DBG_LOUD, (" , [%s]", "QoS_Data"));\r
+ /**/\r
+ } else {\r
+ ODM_RT_TRACE_F(pDM_Odm, ODM_COMP_SNIFFER, ODM_DBG_LOUD, (" , [0x%x]", pDM_Odm->rx_pkt_type));\r
+ /**/\r
+ }\r
+\r
+ ODM_RT_TRACE_F(pDM_Odm, ODM_COMP_SNIFFER, ODM_DBG_LOUD, (" , [RSSI=%d,%d,%d,%d ]",\r
+ pDM_Odm->RSSI_A,\r
+ pDM_Odm->RSSI_B,\r
+ pDM_Odm->RSSI_C,\r
+ pDM_Odm->RSSI_D\r
+ ));\r
+ \r
+ pMsg = (pu4Byte)pDrvInfo;\r
+ \r
+ ODM_RT_TRACE_F(pDM_Odm, ODM_COMP_SNIFFER, ODM_DBG_LOUD, (" , P-STS[28:0]=%08x-%08x-%08x-%08x-%08x-%08x-%08x\n",\r
+ pMsg[6], pMsg[5], pMsg[4], pMsg[3], pMsg[2], pMsg[1], pMsg[1]));\r
+ } else {\r
+ \r
+ ODM_RT_TRACE_F(pDM_Odm, ODM_COMP_SNIFFER, ODM_DBG_LOUD, ("%04d , %01s , Rate=0x%02x , L=%04d , %s , %s\n", \r
+ pRtRfdStatus->Seq_Num,\r
+ /*pRtRfdStatus->MacID,*/\r
+ ((pRtRfdStatus->bCRC) ? "C" : (pRtRfdStatus->bIsAMPDU) ? "A" : "_"),\r
+ pRtRfdStatus->DataRate,\r
+ pRtRfdStatus->Length,\r
+ ((pRtRfdStatus->BandWidth == 0) ? "20M" : ((pRtRfdStatus->BandWidth == 1) ? "40M" : "80M")),\r
+ ((pRtRfdStatus->bLDPC) ? "LDP" : "BCC")\r
+ )); \r
+ }\r
+\r
+\r
+ #endif\r
+}\r
+#endif\r
+\r
+VOID\r
+ODM_PhyStatusQuery(\r
+ IN OUT PDM_ODM_T pDM_Odm,\r
+ OUT PODM_PHY_INFO_T pPhyInfo,\r
+ IN pu1Byte pPhyStatus, \r
+ IN PODM_PACKET_INFO_T pPktinfo\r
+ )\r
+{\r
+#if (ODM_PHY_STATUS_NEW_TYPE_SUPPORT == 1)\r
+ if (pDM_Odm->SupportICType & ODM_IC_PHY_STATUE_NEW_TYPE) {\r
+ phydm_RxPhyStatusNewType(pDM_Odm, pPhyStatus, pPktinfo, pPhyInfo);\r
+ return;\r
+ }\r
+#endif\r
+\r
+#if ODM_IC_11AC_SERIES_SUPPORT\r
+ if (pDM_Odm->SupportICType & ODM_IC_11AC_SERIES)\r
+ ODM_PhyStatusQuery_JaguarSeries(pDM_Odm, pPhyInfo, pPhyStatus, pPktinfo);\r
+#endif\r
+\r
+#if ODM_IC_11N_SERIES_SUPPORT\r
+ if(pDM_Odm->SupportICType & ODM_IC_11N_SERIES )\r
+ ODM_PhyStatusQuery_92CSeries(pDM_Odm,pPhyInfo,pPhyStatus,pPktinfo);\r
+#endif\r
+}\r
+ \r
+// For future use.\r
+VOID\r
+ODM_MacStatusQuery(\r
+ IN OUT PDM_ODM_T pDM_Odm,\r
+ IN pu1Byte pMacStatus,\r
+ IN u1Byte MacID, \r
+ IN BOOLEAN bPacketMatchBSSID,\r
+ IN BOOLEAN bPacketToSelf,\r
+ IN BOOLEAN bPacketBeacon\r
+ )\r
+{\r
+ // 2011/10/19 Driver team will handle in the future.\r
+ \r
+}\r
+\r
+\r
+//\r
+// If you want to add a new IC, Please follow below template and generate a new one.\r
+// \r
+//\r
+\r
+HAL_STATUS\r
+ODM_ConfigRFWithHeaderFile(\r
+ IN PDM_ODM_T pDM_Odm,\r
+ IN ODM_RF_Config_Type ConfigType,\r
+ IN ODM_RF_RADIO_PATH_E eRFPath\r
+ )\r
+{\r
+#if (DM_ODM_SUPPORT_TYPE & ODM_WIN) \r
+ PADAPTER Adapter = pDM_Odm->Adapter;\r
+ PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); \r
+#endif\r
+\r
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, \r
+ ("===>ODM_ConfigRFWithHeaderFile (%s)\n", (pDM_Odm->bIsMPChip) ? "MPChip" : "TestChip"));\r
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, \r
+ ("pDM_Odm->SupportPlatform: 0x%X, pDM_Odm->SupportInterface: 0x%X, pDM_Odm->BoardType: 0x%X\n",\r
+ pDM_Odm->SupportPlatform, pDM_Odm->SupportInterface, pDM_Odm->BoardType));\r
+\r
+//1 AP doesn't use PHYDM power tracking table in these ICs\r
+#if (DM_ODM_SUPPORT_TYPE != ODM_AP)\r
+#if (RTL8812A_SUPPORT == 1)\r
+ if (pDM_Odm->SupportICType == ODM_RTL8812)\r
+ {\r
+ if(ConfigType == CONFIG_RF_RADIO) {\r
+ if(eRFPath == ODM_RF_PATH_A){\r
+ READ_AND_CONFIG_MP(8812A,_RadioA);\r
+ }\r
+ else if(eRFPath == ODM_RF_PATH_B){\r
+ READ_AND_CONFIG_MP(8812A,_RadioB);\r
+ }\r
+ }\r
+ else if(ConfigType == CONFIG_RF_TXPWR_LMT) {\r
+ #if (DM_ODM_SUPPORT_TYPE & ODM_WIN) && (DEV_BUS_TYPE == RT_PCI_INTERFACE)\r
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);\r
+ if ((pHalData->EEPROMSVID == 0x17AA && pHalData->EEPROMSMID == 0xA811) ||\r
+ (pHalData->EEPROMSVID == 0x10EC && pHalData->EEPROMSMID == 0xA812) ||\r
+ (pHalData->EEPROMSVID == 0x10EC && pHalData->EEPROMSMID == 0x8812))\r
+ READ_AND_CONFIG_MP(8812A,_TXPWR_LMT_HM812A03);\r
+ else\r
+ #endif \r
+ READ_AND_CONFIG_MP(8812A,_TXPWR_LMT);\r
+ }\r
+ }\r
+#endif\r
+#if (RTL8821A_SUPPORT == 1)\r
+ if (pDM_Odm->SupportICType == ODM_RTL8821)\r
+ {\r
+ if(ConfigType == CONFIG_RF_RADIO) {\r
+ if(eRFPath == ODM_RF_PATH_A){\r
+ READ_AND_CONFIG_MP(8821A,_RadioA);\r
+ }\r
+ }\r
+ else if(ConfigType == CONFIG_RF_TXPWR_LMT) {\r
+ if (pDM_Odm->SupportInterface == ODM_ITRF_USB) {\r
+ if (pDM_Odm->ExtPA5G || pDM_Odm->ExtLNA5G)\r
+ READ_AND_CONFIG_MP(8821A,_TXPWR_LMT_8811AU_FEM);\r
+ else\r
+ READ_AND_CONFIG_MP(8821A,_TXPWR_LMT_8811AU_IPA); \r
+ } \r
+ else {\r
+ #if (DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
+ if (pMgntInfo->CustomerID == RT_CID_8821AE_ASUS_MB)\r
+ READ_AND_CONFIG_MP(8821A,_TXPWR_LMT_8821A_SAR_8mm);\r
+ else if (pMgntInfo->CustomerID == RT_CID_ASUS_NB)\r
+ READ_AND_CONFIG_MP(8821A,_TXPWR_LMT_8821A_SAR_5mm);\r
+ else\r
+ #endif\r
+ READ_AND_CONFIG_MP(8821A,_TXPWR_LMT_8821A); \r
+ }\r
+ }\r
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("<===8821_ODM_ConfigRFWithHeaderFile\n"));\r
+ }\r
+#endif\r
+#if (RTL8192E_SUPPORT == 1)\r
+ if (pDM_Odm->SupportICType == ODM_RTL8192E)\r
+ {\r
+ if(ConfigType == CONFIG_RF_RADIO) {\r
+ if(eRFPath == ODM_RF_PATH_A)\r
+ READ_AND_CONFIG_MP(8192E,_RadioA);\r
+ else if(eRFPath == ODM_RF_PATH_B)\r
+ READ_AND_CONFIG_MP(8192E,_RadioB);\r
+ } else if (ConfigType == CONFIG_RF_TXPWR_LMT) {\r
+#if (DM_ODM_SUPPORT_TYPE & ODM_WIN) && (DEV_BUS_TYPE == RT_PCI_INTERFACE) /*Refine by Vincent Lan for 5mm SAR pwr limit*/\r
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);\r
+\r
+ if ((pHalData->EEPROMSVID == 0x11AD && pHalData->EEPROMSMID == 0x8192) || \r
+ (pHalData->EEPROMSVID == 0x11AD && pHalData->EEPROMSMID == 0x8193))\r
+ READ_AND_CONFIG_MP(8192E, _TXPWR_LMT_8192E_SAR_5mm);\r
+ else\r
+#endif \r
+ READ_AND_CONFIG_MP(8192E, _TXPWR_LMT);\r
+ }\r
+ }\r
+#endif\r
+#if (RTL8723D_SUPPORT == 1)\r
+ if (pDM_Odm->SupportICType == ODM_RTL8723D) {\r
+ if (ConfigType == CONFIG_RF_RADIO) {\r
+ if (eRFPath == ODM_RF_PATH_A)\r
+ READ_AND_CONFIG_MP(8723D, _RadioA);\r
+ } else if (ConfigType == CONFIG_RF_TXPWR_LMT) \r
+ READ_AND_CONFIG_MP(8723D, _TXPWR_LMT); \r
+ }\r
+#endif\r
+#endif//(DM_ODM_SUPPORT_TYPE != ODM_AP)\r
+\r
+//1 All platforms support\r
+#if (RTL8188E_SUPPORT == 1)\r
+ if (pDM_Odm->SupportICType == ODM_RTL8188E)\r
+ {\r
+ if(ConfigType == CONFIG_RF_RADIO) {\r
+ if(eRFPath == ODM_RF_PATH_A)\r
+ READ_AND_CONFIG_MP(8188E,_RadioA);\r
+ }\r
+ else if(ConfigType == CONFIG_RF_TXPWR_LMT)\r
+ READ_AND_CONFIG_MP(8188E,_TXPWR_LMT);\r
+ }\r
+#endif\r
+#if (RTL8723B_SUPPORT == 1)\r
+ if (pDM_Odm->SupportICType == ODM_RTL8723B) {\r
+ if (ConfigType == CONFIG_RF_RADIO)\r
+ READ_AND_CONFIG_MP(8723B, _RadioA);\r
+ else if (ConfigType == CONFIG_RF_TXPWR_LMT)\r
+ READ_AND_CONFIG_MP(8723B, _TXPWR_LMT);\r
+ }\r
+#endif\r
+#if (RTL8814A_SUPPORT == 1)\r
+ if (pDM_Odm->SupportICType == ODM_RTL8814A)\r
+ {\r
+ if(ConfigType == CONFIG_RF_RADIO) {\r
+ if(eRFPath == ODM_RF_PATH_A)\r
+ READ_AND_CONFIG_MP(8814A,_RadioA);\r
+ else if(eRFPath == ODM_RF_PATH_B)\r
+ READ_AND_CONFIG_MP(8814A,_RadioB);\r
+ else if(eRFPath == ODM_RF_PATH_C)\r
+ READ_AND_CONFIG_MP(8814A,_RadioC);\r
+ else if(eRFPath == ODM_RF_PATH_D)\r
+ READ_AND_CONFIG_MP(8814A,_RadioD);\r
+ } \r
+ else if(ConfigType == CONFIG_RF_TXPWR_LMT) \r
+ READ_AND_CONFIG_MP(8814A,_TXPWR_LMT);\r
+ }\r
+#endif\r
+#if (RTL8703B_SUPPORT == 1)\r
+ if (pDM_Odm->SupportICType == ODM_RTL8703B) {\r
+ if (ConfigType == CONFIG_RF_RADIO) {\r
+ if (eRFPath == ODM_RF_PATH_A)\r
+ READ_AND_CONFIG_MP(8703B, _RadioA);\r
+ } \r
+ }\r
+#endif\r
+#if (RTL8188F_SUPPORT == 1)\r
+ if (pDM_Odm->SupportICType == ODM_RTL8188F) {\r
+ if (ConfigType == CONFIG_RF_RADIO) {\r
+ if (eRFPath == ODM_RF_PATH_A)\r
+ READ_AND_CONFIG_MP(8188F, _RadioA);\r
+ } else if (ConfigType == CONFIG_RF_TXPWR_LMT)\r
+ READ_AND_CONFIG_MP(8188F, _TXPWR_LMT);\r
+ }\r
+#endif\r
+#if (RTL8822B_SUPPORT == 1)\r
+ if (pDM_Odm->SupportICType == ODM_RTL8822B) {\r
+ if (ConfigType == CONFIG_RF_RADIO) {\r
+ if (eRFPath == ODM_RF_PATH_A)\r
+ READ_AND_CONFIG_MP(8822B, _RadioA);\r
+ else if (eRFPath == ODM_RF_PATH_B)\r
+ READ_AND_CONFIG_MP(8822B, _RadioB);\r
+ } else if(ConfigType == CONFIG_RF_TXPWR_LMT){\r
+ if (pDM_Odm->RFEType == 5)\r
+ READ_AND_CONFIG_MP(8822B, _TXPWR_LMT_type5);\r
+ else \r
+ READ_AND_CONFIG_MP(8822B, _TXPWR_LMT); \r
+ }\r
+ }\r
+#endif\r
+\r
+#if (RTL8197F_SUPPORT == 1)\r
+ if (pDM_Odm->SupportICType == ODM_RTL8197F) {\r
+ if (ConfigType == CONFIG_RF_RADIO) {\r
+ if (eRFPath == ODM_RF_PATH_A)\r
+ READ_AND_CONFIG_MP(8197F, _RadioA);\r
+ else if (eRFPath == ODM_RF_PATH_B)\r
+ READ_AND_CONFIG_MP(8197F, _RadioB);\r
+ } \r
+ }\r
+#endif\r
+\r
+#if (RTL8821C_SUPPORT == 1)\r
+ if (pDM_Odm->SupportICType == ODM_RTL8821C) {\r
+ if (ConfigType == CONFIG_RF_RADIO) {\r
+ if (eRFPath == ODM_RF_PATH_A)\r
+ READ_AND_CONFIG_TC(8821C, _RadioA);\r
+ } else if (ConfigType == CONFIG_RF_TXPWR_LMT)\r
+ READ_AND_CONFIG_TC(8821C, _TXPWR_LMT);\r
+ }\r
+#endif\r
+\r
+ return HAL_STATUS_SUCCESS;\r
+}\r
+\r
+HAL_STATUS\r
+ODM_ConfigRFWithTxPwrTrackHeaderFile(\r
+ IN PDM_ODM_T pDM_Odm\r
+ )\r
+{\r
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, \r
+ ("===>ODM_ConfigRFWithTxPwrTrackHeaderFile (%s)\n", (pDM_Odm->bIsMPChip) ? "MPChip" : "TestChip"));\r
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, \r
+ ("pDM_Odm->SupportPlatform: 0x%X, pDM_Odm->SupportInterface: 0x%X, pDM_Odm->BoardType: 0x%X\n",\r
+ pDM_Odm->SupportPlatform, pDM_Odm->SupportInterface, pDM_Odm->BoardType));\r
+\r
+\r
+//1 AP doesn't use PHYDM power tracking table in these ICs\r
+#if (DM_ODM_SUPPORT_TYPE != ODM_AP)\r
+#if RTL8821A_SUPPORT\r
+ if(pDM_Odm->SupportICType == ODM_RTL8821)\r
+ {\r
+ if (pDM_Odm->SupportInterface == ODM_ITRF_PCIE)\r
+ READ_AND_CONFIG_MP(8821A,_TxPowerTrack_PCIE);\r
+ else if (pDM_Odm->SupportInterface == ODM_ITRF_USB)\r
+ READ_AND_CONFIG_MP(8821A,_TxPowerTrack_USB); \r
+ else if (pDM_Odm->SupportInterface == ODM_ITRF_SDIO)\r
+ READ_AND_CONFIG_MP(8821A,_TxPowerTrack_SDIO);\r
+ }\r
+#endif\r
+#if RTL8812A_SUPPORT \r
+ if(pDM_Odm->SupportICType == ODM_RTL8812)\r
+ {\r
+ if (pDM_Odm->SupportInterface == ODM_ITRF_PCIE)\r
+ READ_AND_CONFIG_MP(8812A,_TxPowerTrack_PCIE);\r
+ else if (pDM_Odm->SupportInterface == ODM_ITRF_USB) {\r
+ if (pDM_Odm->RFEType == 3 && pDM_Odm->bIsMPChip) \r
+ READ_AND_CONFIG_MP(8812A,_TxPowerTrack_RFE3); \r
+ else\r
+ READ_AND_CONFIG_MP(8812A,_TxPowerTrack_USB); \r
+ }\r
+ \r
+ }\r
+#endif \r
+#if RTL8192E_SUPPORT \r
+ if(pDM_Odm->SupportICType == ODM_RTL8192E)\r
+ {\r
+ if (pDM_Odm->SupportInterface == ODM_ITRF_PCIE)\r
+ READ_AND_CONFIG_MP(8192E,_TxPowerTrack_PCIE);\r
+ else if (pDM_Odm->SupportInterface == ODM_ITRF_USB)\r
+ READ_AND_CONFIG_MP(8192E,_TxPowerTrack_USB); \r
+ else if (pDM_Odm->SupportInterface == ODM_ITRF_SDIO)\r
+ READ_AND_CONFIG_MP(8192E,_TxPowerTrack_SDIO); \r
+ }\r
+#endif\r
+#if RTL8723D_SUPPORT\r
+ if (pDM_Odm->SupportICType == ODM_RTL8723D) {\r
+ if (pDM_Odm->SupportInterface == ODM_ITRF_PCIE)\r
+ READ_AND_CONFIG_MP(8723D, _TxPowerTrack_PCIE);\r
+ else if (pDM_Odm->SupportInterface == ODM_ITRF_USB)\r
+ READ_AND_CONFIG_MP(8723D, _TxPowerTrack_USB); \r
+ else if (pDM_Odm->SupportInterface == ODM_ITRF_SDIO)\r
+ READ_AND_CONFIG_MP(8723D, _TxPowerTrack_SDIO); \r
+ \r
+ READ_AND_CONFIG_MP(8723D, _TxXtalTrack);\r
+ }\r
+#endif\r
+#if RTL8188E_SUPPORT \r
+ if(pDM_Odm->SupportICType == ODM_RTL8188E)\r
+ {\r
+ if (PHY_QueryMacReg(pDM_Odm->Adapter, 0xF0, 0xF000) >= 8) { /*if 0xF0[15:12] >= 8, SMIC*/\r
+ if (pDM_Odm->SupportInterface == ODM_ITRF_PCIE)\r
+ READ_AND_CONFIG_MP(8188E, _TxPowerTrack_PCIE_ICUT);\r
+ else if (pDM_Odm->SupportInterface == ODM_ITRF_USB)\r
+ READ_AND_CONFIG_MP(8188E, _TxPowerTrack_USB_ICUT);\r
+ else if (pDM_Odm->SupportInterface == ODM_ITRF_SDIO)\r
+ READ_AND_CONFIG_MP(8188E, _TxPowerTrack_SDIO_ICUT);\r
+ } else { /*else 0xF0[15:12] < 8, TSMC*/\r
+ if (pDM_Odm->SupportInterface == ODM_ITRF_PCIE)\r
+ READ_AND_CONFIG_MP(8188E, _TxPowerTrack_PCIE);\r
+ else if (pDM_Odm->SupportInterface == ODM_ITRF_USB)\r
+ READ_AND_CONFIG_MP(8188E, _TxPowerTrack_USB);\r
+ else if (pDM_Odm->SupportInterface == ODM_ITRF_SDIO)\r
+ READ_AND_CONFIG_MP(8188E, _TxPowerTrack_SDIO);\r
+ }\r
+ \r
+ }\r
+#endif\r
+#endif//(DM_ODM_SUPPORT_TYPE != ODM_AP)\r
+\r
+//1 All platforms support\r
+#if RTL8723B_SUPPORT\r
+ if (pDM_Odm->SupportICType == ODM_RTL8723B) {\r
+ if (pDM_Odm->SupportInterface == ODM_ITRF_PCIE)\r
+ READ_AND_CONFIG_MP(8723B, _TxPowerTrack_PCIE);\r
+ else if (pDM_Odm->SupportInterface == ODM_ITRF_USB)\r
+ READ_AND_CONFIG_MP(8723B, _TxPowerTrack_USB);\r
+ else if (pDM_Odm->SupportInterface == ODM_ITRF_SDIO)\r
+ READ_AND_CONFIG_MP(8723B, _TxPowerTrack_SDIO);\r
+ }\r
+#endif \r
+#if RTL8814A_SUPPORT\r
+ if(pDM_Odm->SupportICType == ODM_RTL8814A) \r
+ {\r
+ if(pDM_Odm->RFEType == 0)\r
+ READ_AND_CONFIG_MP(8814A,_TxPowerTrack_Type0);\r
+ else if(pDM_Odm->RFEType == 2)\r
+ READ_AND_CONFIG_MP(8814A,_TxPowerTrack_Type2);\r
+ else if (pDM_Odm->RFEType == 5)\r
+ READ_AND_CONFIG_MP(8814A, _TxPowerTrack_Type5);\r
+ else\r
+ READ_AND_CONFIG_MP(8814A,_TxPowerTrack);\r
+ \r
+ READ_AND_CONFIG_MP(8814A, _TxPowerTSSI);\r
+ }\r
+#endif\r
+#if RTL8703B_SUPPORT\r
+ if (pDM_Odm->SupportICType == ODM_RTL8703B) {\r
+ if (pDM_Odm->SupportInterface == ODM_ITRF_USB)\r
+ READ_AND_CONFIG_MP(8703B, _TxPowerTrack_USB);\r
+ else if (pDM_Odm->SupportInterface == ODM_ITRF_SDIO)\r
+ READ_AND_CONFIG_MP(8703B, _TxPowerTrack_SDIO); \r
+\r
+ READ_AND_CONFIG_MP(8703B, _TxXtalTrack);\r
+ }\r
+#endif\r
+\r
+#if RTL8188F_SUPPORT\r
+ if (pDM_Odm->SupportICType == ODM_RTL8188F) {\r
+ if (pDM_Odm->SupportInterface == ODM_ITRF_USB)\r
+ READ_AND_CONFIG_MP(8188F, _TxPowerTrack_USB);\r
+ else if (pDM_Odm->SupportInterface == ODM_ITRF_SDIO)\r
+ READ_AND_CONFIG_MP(8188F, _TxPowerTrack_SDIO);\r
+ }\r
+#endif\r
+\r
+#if RTL8822B_SUPPORT\r
+ if (pDM_Odm->SupportICType == ODM_RTL8822B) {\r
+ if (pDM_Odm->RFEType == 0)\r
+ READ_AND_CONFIG_MP(8822B, _TxPowerTrack_type0);\r
+ else if (pDM_Odm->RFEType == 1)\r
+ READ_AND_CONFIG_MP(8822B, _TxPowerTrack_type1);\r
+ else if ((pDM_Odm->RFEType == 3) || (pDM_Odm->RFEType == 5))\r
+ READ_AND_CONFIG_MP(8822B, _TxPowerTrack_Type3_Type5);\r
+ else if (pDM_Odm->RFEType == 6)\r
+ READ_AND_CONFIG_MP(8822B, _TxPowerTrack_type6);\r
+ else if (pDM_Odm->RFEType == 7)\r
+ READ_AND_CONFIG_MP(8822B, _TxPowerTrack_type7);\r
+ else\r
+ READ_AND_CONFIG_MP(8822B, _TxPowerTrack);\r
+ }\r
+#endif\r
+\r
+#if RTL8197F_SUPPORT\r
+ if (pDM_Odm->SupportICType == ODM_RTL8197F) {\r
+ if (pDM_Odm->RFEType == 0)\r
+ READ_AND_CONFIG_MP(8197F, _TxPowerTrack_Type0);\r
+ else if (pDM_Odm->RFEType == 1)\r
+ READ_AND_CONFIG_MP(8197F, _TxPowerTrack_Type1);\r
+ else\r
+ READ_AND_CONFIG_MP(8197F, _TxPowerTrack);\r
+ }\r
+#endif \r
+\r
+#if RTL8821C_SUPPORT\r
+ if (pDM_Odm->SupportICType == ODM_RTL8821C)\r
+ READ_AND_CONFIG_TC(8821C, _TxPowerTrack);\r
+#endif\r
+\r
+ return HAL_STATUS_SUCCESS;\r
+}\r
+\r
+HAL_STATUS\r
+ODM_ConfigBBWithHeaderFile(\r
+ IN PDM_ODM_T pDM_Odm,\r
+ IN ODM_BB_Config_Type ConfigType\r
+ )\r
+{\r
+#if (DM_ODM_SUPPORT_TYPE & ODM_WIN) \r
+ PADAPTER Adapter = pDM_Odm->Adapter;\r
+ PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); \r
+#endif\r
+\r
+//1 AP doesn't use PHYDM initialization in these ICs\r
+#if (DM_ODM_SUPPORT_TYPE != ODM_AP) \r
+#if (RTL8812A_SUPPORT == 1) \r
+ if(pDM_Odm->SupportICType == ODM_RTL8812)\r
+ {\r
+ if (ConfigType == CONFIG_BB_PHY_REG) {\r
+ READ_AND_CONFIG_MP(8812A, _PHY_REG);\r
+ } else if (ConfigType == CONFIG_BB_AGC_TAB) {\r
+ READ_AND_CONFIG_MP(8812A, _AGC_TAB);\r
+ } else if (ConfigType == CONFIG_BB_PHY_REG_PG) {\r
+ if (pDM_Odm->RFEType == 3 && pDM_Odm->bIsMPChip) \r
+ READ_AND_CONFIG_MP(8812A, _PHY_REG_PG_ASUS);\r
+ #if (DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
+ else if (pMgntInfo->CustomerID == RT_CID_WNC_NEC && pDM_Odm->bIsMPChip) \r
+ READ_AND_CONFIG_MP(8812A, _PHY_REG_PG_NEC);\r
+ #if RT_PLATFORM == PLATFORM_MACOSX\r
+ /*{1827}{1024} for BUFFALO power by rate table. Isaiah 2013-11-29*/\r
+ else if (pMgntInfo->CustomerID == RT_CID_DNI_BUFFALO)\r
+ READ_AND_CONFIG_MP(8812A, _PHY_REG_PG_DNI);\r
+ /* TP-Link T4UH, Isaiah 2015-03-16*/\r
+ else if (pMgntInfo->CustomerID == RT_CID_TPLINK_HPWR) {\r
+ DbgPrint("RT_CID_TPLINK_HPWR:: _PHY_REG_PG_TPLINK\n");\r
+ READ_AND_CONFIG_MP(8812A, _PHY_REG_PG_TPLINK);\r
+ }\r
+ #endif\r
+ #endif \r
+ else\r
+ READ_AND_CONFIG_MP(8812A, _PHY_REG_PG);\r
+ }\r
+ else if(ConfigType == CONFIG_BB_PHY_REG_MP){\r
+ READ_AND_CONFIG_MP(8812A,_PHY_REG_MP);\r
+ }\r
+ else if(ConfigType == CONFIG_BB_AGC_TAB_DIFF)\r
+ {\r
+ if ((36 <= *pDM_Odm->pChannel) && (*pDM_Odm->pChannel <= 64)) \r
+ AGC_DIFF_CONFIG_MP(8812A,LB);\r
+ else if (100 <= *pDM_Odm->pChannel) \r
+ AGC_DIFF_CONFIG_MP(8812A,HB);\r
+ }\r
+ ODM_RT_TRACE(pDM_Odm,ODM_COMP_INIT, ODM_DBG_LOUD, (" ===> phy_ConfigBBWithHeaderFile() phy:Rtl8812AGCTABArray\n"));\r
+ ODM_RT_TRACE(pDM_Odm,ODM_COMP_INIT, ODM_DBG_LOUD, (" ===> phy_ConfigBBWithHeaderFile() agc:Rtl8812PHY_REGArray\n"));\r
+ } \r
+#endif\r
+#if (RTL8821A_SUPPORT == 1) \r
+ if (pDM_Odm->SupportICType == ODM_RTL8821) {\r
+ if (ConfigType == CONFIG_BB_PHY_REG) {\r
+ READ_AND_CONFIG_MP(8821A, _PHY_REG);\r
+ } else if (ConfigType == CONFIG_BB_AGC_TAB) {\r
+ READ_AND_CONFIG_MP(8821A, _AGC_TAB);\r
+ } else if (ConfigType == CONFIG_BB_PHY_REG_PG) {\r
+ #if (DM_ODM_SUPPORT_TYPE & ODM_WIN) \r
+ #if (DEV_BUS_TYPE == RT_PCI_INTERFACE)\r
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);\r
+\r
+ if ((pHalData->EEPROMSVID == 0x1043 && pHalData->EEPROMSMID == 0x207F))\r
+ READ_AND_CONFIG_MP(8821A, _PHY_REG_PG_E202SA);\r
+ else\r
+ #endif\r
+ #if (RT_PLATFORM == PLATFORM_MACOSX)\r
+ /*{1827}{1022} for BUFFALO power by rate table. Isaiah 2013-10-18*/\r
+ if (pMgntInfo->CustomerID == RT_CID_DNI_BUFFALO) {\r
+ /*{1024} for BUFFALO power by rate table. (JP/US)*/\r
+ if (pMgntInfo->ChannelPlan == RT_CHANNEL_DOMAIN_US_2G_CANADA_5G)\r
+ READ_AND_CONFIG_MP(8821A, _PHY_REG_PG_DNI_US);\r
+ else\r
+ READ_AND_CONFIG_MP(8821A, _PHY_REG_PG_DNI_JP);\r
+ } else\r
+ #endif\r
+ #endif\r
+ READ_AND_CONFIG_MP(8821A,_PHY_REG_PG);\r
+ } \r
+ ODM_RT_TRACE(pDM_Odm,ODM_COMP_INIT, ODM_DBG_LOUD, (" ===> phy_ConfigBBWithHeaderFile() phy:Rtl8821AGCTABArray\n"));\r
+ ODM_RT_TRACE(pDM_Odm,ODM_COMP_INIT, ODM_DBG_LOUD, (" ===> phy_ConfigBBWithHeaderFile() agc:Rtl8821PHY_REGArray\n"));\r
+ } \r
+#endif\r
+#if (RTL8192E_SUPPORT == 1)\r
+ if(pDM_Odm->SupportICType == ODM_RTL8192E)\r
+ {\r
+ if(ConfigType == CONFIG_BB_PHY_REG){\r
+ READ_AND_CONFIG_MP(8192E,_PHY_REG);\r
+ }else if(ConfigType == CONFIG_BB_AGC_TAB){\r
+ READ_AND_CONFIG_MP(8192E,_AGC_TAB);\r
+ }else if(ConfigType == CONFIG_BB_PHY_REG_PG){\r
+ READ_AND_CONFIG_MP(8192E,_PHY_REG_PG);\r
+ }\r
+ }\r
+#endif\r
+#if (RTL8723D_SUPPORT == 1)\r
+ if (pDM_Odm->SupportICType == ODM_RTL8723D) {\r
+ if (ConfigType == CONFIG_BB_PHY_REG)\r
+ READ_AND_CONFIG_MP(8723D, _PHY_REG);\r
+ else if (ConfigType == CONFIG_BB_AGC_TAB)\r
+ READ_AND_CONFIG_MP(8723D, _AGC_TAB);\r
+ else if (ConfigType == CONFIG_BB_PHY_REG_PG)\r
+ READ_AND_CONFIG_MP(8723D, _PHY_REG_PG);\r
+ }\r
+#endif\r
+#endif//(DM_ODM_SUPPORT_TYPE != ODM_AP)\r
+\r
+\r
+//1 All platforms support\r
+#if (RTL8188E_SUPPORT == 1)\r
+ if(pDM_Odm->SupportICType == ODM_RTL8188E)\r
+ {\r
+ if(ConfigType == CONFIG_BB_PHY_REG)\r
+ READ_AND_CONFIG_MP(8188E,_PHY_REG);\r
+ else if(ConfigType == CONFIG_BB_AGC_TAB)\r
+ READ_AND_CONFIG_MP(8188E,_AGC_TAB);\r
+ else if(ConfigType == CONFIG_BB_PHY_REG_PG)\r
+ READ_AND_CONFIG_MP(8188E,_PHY_REG_PG);\r
+ }\r
+#endif\r
+#if (RTL8723B_SUPPORT == 1)\r
+ if (pDM_Odm->SupportICType == ODM_RTL8723B) {\r
+ if (ConfigType == CONFIG_BB_PHY_REG) {\r
+ READ_AND_CONFIG_MP(8723B, _PHY_REG);\r
+ } else if (ConfigType == CONFIG_BB_AGC_TAB) {\r
+ READ_AND_CONFIG_MP(8723B, _AGC_TAB);\r
+ } else if (ConfigType == CONFIG_BB_PHY_REG_PG) {\r
+ READ_AND_CONFIG_MP(8723B, _PHY_REG_PG);\r
+ }\r
+ }\r
+#endif\r
+#if (RTL8814A_SUPPORT == 1)\r
+ if(pDM_Odm->SupportICType == ODM_RTL8814A)\r
+ {\r
+ if(ConfigType == CONFIG_BB_PHY_REG){\r
+ READ_AND_CONFIG_MP(8814A,_PHY_REG);\r
+ }else if(ConfigType == CONFIG_BB_AGC_TAB){\r
+ READ_AND_CONFIG_MP(8814A,_AGC_TAB);\r
+ }else if(ConfigType == CONFIG_BB_PHY_REG_PG){\r
+ READ_AND_CONFIG_MP(8814A,_PHY_REG_PG);\r
+ }else if(ConfigType == CONFIG_BB_PHY_REG_MP){\r
+ READ_AND_CONFIG_MP(8814A,_PHY_REG_MP);\r
+ }\r
+ }\r
+#endif\r
+#if (RTL8703B_SUPPORT == 1)\r
+ if (pDM_Odm->SupportICType == ODM_RTL8703B) {\r
+ if (ConfigType == CONFIG_BB_PHY_REG)\r
+ READ_AND_CONFIG_MP(8703B, _PHY_REG);\r
+ else if (ConfigType == CONFIG_BB_AGC_TAB)\r
+ READ_AND_CONFIG_MP(8703B, _AGC_TAB);\r
+ else if (ConfigType == CONFIG_BB_PHY_REG_PG)\r
+ READ_AND_CONFIG_MP(8703B, _PHY_REG_PG);\r
+ }\r
+#endif\r
+#if (RTL8188F_SUPPORT == 1)\r
+ if (pDM_Odm->SupportICType == ODM_RTL8188F) {\r
+ if (ConfigType == CONFIG_BB_PHY_REG) \r
+ READ_AND_CONFIG_MP(8188F, _PHY_REG);\r
+ else if (ConfigType == CONFIG_BB_AGC_TAB) \r
+ READ_AND_CONFIG_MP(8188F, _AGC_TAB);\r
+ else if (ConfigType == CONFIG_BB_PHY_REG_PG) \r
+ READ_AND_CONFIG_MP(8188F, _PHY_REG_PG);\r
+ }\r
+#endif\r
+#if (RTL8822B_SUPPORT == 1)\r
+ if (pDM_Odm->SupportICType == ODM_RTL8822B) {\r
+ if (ConfigType == CONFIG_BB_PHY_REG)\r
+ READ_AND_CONFIG_MP(8822B, _PHY_REG);\r
+ else if (ConfigType == CONFIG_BB_AGC_TAB)\r
+ READ_AND_CONFIG_MP(8822B, _AGC_TAB);\r
+ else if (ConfigType == CONFIG_BB_PHY_REG_PG)\r
+ READ_AND_CONFIG_MP(8822B, _PHY_REG_PG);\r
+ /*else if (ConfigType == CONFIG_BB_PHY_REG_MP)*/\r
+ /*READ_AND_CONFIG_MP(8822B, _PHY_REG_MP);*/\r
+ }\r
+#endif\r
+\r
+#if (RTL8197F_SUPPORT == 1)\r
+ if (pDM_Odm->SupportICType == ODM_RTL8197F) {\r
+ if (ConfigType == CONFIG_BB_PHY_REG) {\r
+ READ_AND_CONFIG_MP(8197F, _PHY_REG);\r
+ if (pDM_Odm->CutVersion == ODM_CUT_A)\r
+ phydm_phypara_a_cut(pDM_Odm);\r
+ } else if (ConfigType == CONFIG_BB_AGC_TAB)\r
+ READ_AND_CONFIG_MP(8197F, _AGC_TAB);\r
+/* else if(ConfigType == CONFIG_BB_PHY_REG_PG)\r
+ READ_AND_CONFIG_MP(8197F, _PHY_REG_PG);\r
+ else if(ConfigType == CONFIG_BB_PHY_REG_MP)\r
+ READ_AND_CONFIG_MP(8197F, _PHY_REG_MP); */\r
+ }\r
+#endif\r
+\r
+#if (RTL8821C_SUPPORT == 1) \r
+ if (pDM_Odm->SupportICType == ODM_RTL8821C)\r
+ {\r
+ if (ConfigType == CONFIG_BB_PHY_REG) {\r
+ READ_AND_CONFIG_TC(8821C, _PHY_REG);\r
+ } else if (ConfigType == CONFIG_BB_AGC_TAB) { \r
+ READ_AND_CONFIG_TC(8821C, _AGC_TAB);\r
+ } else if (ConfigType == CONFIG_BB_PHY_REG_PG) {\r
+ READ_AND_CONFIG_TC(8821C, _PHY_REG_PG);\r
+ }\r
+ } \r
+#endif\r
+\r
+#if (RTL8195A_SUPPORT == 1)\r
+ if (pDM_Odm->SupportICType == ODM_RTL8195A)\r
+ {\r
+ if(ConfigType == CONFIG_BB_PHY_REG)\r
+ READ_AND_CONFIG(8195A, _PHY_REG);\r
+ else if(ConfigType == CONFIG_BB_AGC_TAB)\r
+ READ_AND_CONFIG(8195A, _AGC_TAB);\r
+ else if(ConfigType == CONFIG_BB_PHY_REG_PG)\r
+ READ_AND_CONFIG(8195A, _PHY_REG_PG);\r
+ }\r
+#endif\r
+\r
+ return HAL_STATUS_SUCCESS; \r
+} \r
+\r
+HAL_STATUS\r
+ODM_ConfigMACWithHeaderFile(\r
+ IN PDM_ODM_T pDM_Odm\r
+ )\r
+{\r
+#if (DM_ODM_SUPPORT_TYPE & ODM_WIN) \r
+ PADAPTER Adapter = pDM_Odm->Adapter;\r
+#endif\r
+\r
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, \r
+ ("===>ODM_ConfigMACWithHeaderFile (%s)\n", (pDM_Odm->bIsMPChip) ? "MPChip" : "TestChip"));\r
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, \r
+ ("pDM_Odm->SupportPlatform: 0x%X, pDM_Odm->SupportInterface: 0x%X, pDM_Odm->BoardType: 0x%X\n",\r
+ pDM_Odm->SupportPlatform, pDM_Odm->SupportInterface, pDM_Odm->BoardType));\r
+\r
+//1 AP doesn't use PHYDM initialization in these ICs\r
+#if (DM_ODM_SUPPORT_TYPE != ODM_AP) \r
+#if (RTL8812A_SUPPORT == 1)\r
+ if (pDM_Odm->SupportICType == ODM_RTL8812){\r
+ READ_AND_CONFIG_MP(8812A, _MAC_REG);\r
+ }\r
+#endif\r
+#if (RTL8821A_SUPPORT == 1)\r
+ if (pDM_Odm->SupportICType == ODM_RTL8821){\r
+ READ_AND_CONFIG_MP(8821A, _MAC_REG);\r
+\r
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("<===8821_ODM_ConfigMACwithHeaderFile\n"));\r
+ }\r
+#endif\r
+#if (RTL8192E_SUPPORT == 1) \r
+ if (pDM_Odm->SupportICType == ODM_RTL8192E){\r
+ READ_AND_CONFIG_MP(8192E, _MAC_REG);\r
+ }\r
+#endif\r
+#if (RTL8723D_SUPPORT == 1) \r
+ if (pDM_Odm->SupportICType == ODM_RTL8723D)\r
+ READ_AND_CONFIG_MP(8723D, _MAC_REG);\r
+#endif\r
+#endif//(DM_ODM_SUPPORT_TYPE != ODM_AP)\r
+\r
+//1 All platforms support\r
+#if (RTL8188E_SUPPORT == 1) \r
+ if (pDM_Odm->SupportICType == ODM_RTL8188E){\r
+ READ_AND_CONFIG_MP(8188E, _MAC_REG);\r
+ }\r
+#endif\r
+#if (RTL8723B_SUPPORT == 1) \r
+ if (pDM_Odm->SupportICType == ODM_RTL8723B) {\r
+ READ_AND_CONFIG_MP(8723B, _MAC_REG);\r
+ }\r
+#endif\r
+#if (RTL8814A_SUPPORT == 1) \r
+ if (pDM_Odm->SupportICType == ODM_RTL8814A){\r
+ READ_AND_CONFIG_MP(8814A, _MAC_REG);\r
+ }\r
+#endif\r
+#if (RTL8703B_SUPPORT == 1) \r
+ if (pDM_Odm->SupportICType == ODM_RTL8703B)\r
+ READ_AND_CONFIG_MP(8703B, _MAC_REG);\r
+#endif\r
+#if (RTL8188F_SUPPORT == 1) \r
+ if (pDM_Odm->SupportICType == ODM_RTL8188F) \r
+ READ_AND_CONFIG_MP(8188F, _MAC_REG);\r
+#endif\r
+#if (RTL8822B_SUPPORT == 1) \r
+ if (pDM_Odm->SupportICType == ODM_RTL8822B)\r
+ READ_AND_CONFIG_MP(8822B, _MAC_REG);\r
+#endif\r
+\r
+#if (RTL8197F_SUPPORT == 1) \r
+ if (pDM_Odm->SupportICType == ODM_RTL8197F)\r
+ READ_AND_CONFIG_MP(8197F, _MAC_REG);\r
+#endif\r
+\r
+#if (RTL8821C_SUPPORT == 1)\r
+ if (pDM_Odm->SupportICType == ODM_RTL8821C)\r
+ READ_AND_CONFIG_TC(8821C, _MAC_REG);\r
+#endif\r
+\r
+#if (RTL8195A_SUPPORT == 1) \r
+ if (pDM_Odm->SupportICType == ODM_RTL8195A)\r
+ READ_AND_CONFIG_MP(8195A, _MAC_REG);\r
+#endif\r
+\r
+ return HAL_STATUS_SUCCESS; \r
+} \r
+\r
+HAL_STATUS\r
+ODM_ConfigFWWithHeaderFile(\r
+ IN PDM_ODM_T pDM_Odm,\r
+ IN ODM_FW_Config_Type ConfigType,\r
+ OUT u1Byte *pFirmware,\r
+ OUT u4Byte *pSize\r
+ )\r
+{\r
+#if (DM_ODM_SUPPORT_TYPE != ODM_AP)\r
+\r
+#if (RTL8188E_SUPPORT == 1) \r
+ if (pDM_Odm->SupportICType == ODM_RTL8188E)\r
+ {\r
+ #ifdef CONFIG_SFW_SUPPORTED\r
+ if (ConfigType == CONFIG_FW_NIC)\r
+ READ_FIRMWARE_MP(8188E_T,_FW_NIC);\r
+ else if (ConfigType == CONFIG_FW_WoWLAN)\r
+ READ_FIRMWARE_MP(8188E_T,_FW_WoWLAN);\r
+ else if(ConfigType == CONFIG_FW_NIC_2)\r
+ READ_FIRMWARE_MP(8188E_S,_FW_NIC);\r
+ else if (ConfigType == CONFIG_FW_WoWLAN_2)\r
+ READ_FIRMWARE_MP(8188E_S,_FW_WoWLAN);\r
+ #ifdef CONFIG_AP_WOWLAN\r
+ if (ConfigType == CONFIG_FW_AP)\r
+ READ_FIRMWARE_MP(8188E_T,_FW_AP);\r
+ else if (ConfigType == CONFIG_FW_AP_2)\r
+ READ_FIRMWARE_MP(8188E_S,_FW_AP);\r
+ #endif //CONFIG_AP_WOWLAN\r
+ #else\r
+ if (ConfigType == CONFIG_FW_NIC)\r
+ READ_FIRMWARE_MP(8188E_T,_FW_NIC);\r
+ else if (ConfigType == CONFIG_FW_WoWLAN)\r
+ READ_FIRMWARE_MP(8188E_T,_FW_WoWLAN);\r
+ #ifdef CONFIG_AP_WOWLAN\r
+ else if (ConfigType == CONFIG_FW_AP)\r
+ READ_FIRMWARE_MP(8188E_T,_FW_AP);\r
+ #endif //CONFIG_AP_WOWLAN\r
+ #endif\r
+ }\r
+#endif\r
+#if (RTL8723B_SUPPORT == 1) \r
+ if (pDM_Odm->SupportICType == ODM_RTL8723B)\r
+ {\r
+ if (ConfigType == CONFIG_FW_NIC)\r
+ READ_FIRMWARE_MP(8723B,_FW_NIC);\r
+ else if (ConfigType == CONFIG_FW_WoWLAN)\r
+ READ_FIRMWARE_MP(8723B,_FW_WoWLAN);\r
+ #ifdef CONFIG_AP_WOWLAN\r
+ else if (ConfigType == CONFIG_FW_AP_WoWLAN)\r
+ READ_FIRMWARE(8723B,_FW_AP_WoWLAN);\r
+ #endif\r
+ \r
+ }\r
+#endif //#if (RTL8723B_SUPPORT == 1) \r
+#if (RTL8812A_SUPPORT == 1)\r
+ if (pDM_Odm->SupportICType == ODM_RTL8812)\r
+ {\r
+ if (ConfigType == CONFIG_FW_NIC)\r
+ READ_FIRMWARE_MP(8812A,_FW_NIC);\r
+ else if (ConfigType == CONFIG_FW_WoWLAN)\r
+ READ_FIRMWARE_MP(8812A,_FW_WoWLAN);\r
+ else if (ConfigType == CONFIG_FW_BT)\r
+ READ_FIRMWARE_MP(8812A,_FW_NIC_BT);\r
+ #ifdef CONFIG_AP_WOWLAN\r
+ else if (ConfigType == CONFIG_FW_AP_WoWLAN)\r
+ READ_FIRMWARE(8812A,_FW_AP);\r
+ #endif\r
+ }\r
+#endif\r
+#if (RTL8821A_SUPPORT == 1)\r
+ if (pDM_Odm->SupportICType == ODM_RTL8821){\r
+ if (ConfigType == CONFIG_FW_NIC)\r
+ READ_FIRMWARE_MP(8821A,_FW_NIC);\r
+ else if (ConfigType == CONFIG_FW_WoWLAN)\r
+ READ_FIRMWARE_MP(8821A,_FW_WoWLAN);\r
+ #ifdef CONFIG_AP_WOWLAN\r
+ else if (ConfigType == CONFIG_FW_AP_WoWLAN)\r
+ READ_FIRMWARE_MP(8821A , _FW_AP);\r
+ #endif /*CONFIG_AP_WOWLAN*/\r
+ else if (ConfigType == CONFIG_FW_BT)\r
+ READ_FIRMWARE_MP(8821A,_FW_NIC_BT);\r
+ }\r
+#endif\r
+#if (RTL8192E_SUPPORT == 1)\r
+ if (pDM_Odm->SupportICType == ODM_RTL8192E)\r
+ {\r
+ if (ConfigType == CONFIG_FW_NIC)\r
+ READ_FIRMWARE_MP(8192E,_FW_NIC);\r
+ else if (ConfigType == CONFIG_FW_WoWLAN)\r
+ READ_FIRMWARE_MP(8192E,_FW_WoWLAN);\r
+ #ifdef CONFIG_AP_WOWLAN\r
+ else if (ConfigType == CONFIG_FW_AP_WoWLAN)\r
+ READ_FIRMWARE_MP(8192E,_FW_AP);\r
+ #endif\r
+ }\r
+#endif\r
+#if (RTL8723D_SUPPORT == 1)\r
+ if (pDM_Odm->SupportICType == ODM_RTL8723D) {\r
+ if (ConfigType == CONFIG_FW_NIC) {\r
+ READ_FIRMWARE_MP(8723D, _FW_NIC);\r
+ } else if (ConfigType == CONFIG_FW_WoWLAN) {\r
+ READ_FIRMWARE_MP(8723D, _FW_WoWLAN);\r
+ }\r
+ }\r
+#endif\r
+/*#if (RTL8814A_SUPPORT == 1)\r
+ if (pDM_Odm->SupportICType == ODM_RTL8814A)\r
+ {\r
+ if (ConfigType == CONFIG_FW_NIC)\r
+ READ_FIRMWARE_MP(8814A, _FW_NIC);\r
+ else if (ConfigType == CONFIG_FW_WoWLAN)\r
+ READ_FIRMWARE_MP(8814A, _FW_WoWLAN);\r
+ #ifdef CONFIG_AP_WOWLAN\r
+ else if (ConfigType == CONFIG_FW_AP_WoWLAN)\r
+ READ_FIRMWARE_MP(8814A, _FW_AP);\r
+ #endif\r
+ }\r
+#endif */\r
+\r
+#if (RTL8814A_SUPPORT == 1)\r
+ if (pDM_Odm->SupportICType == ODM_RTL8814A)\r
+ {\r
+ if (ConfigType == CONFIG_FW_NIC)\r
+ READ_FIRMWARE_MP(8814A,_FW_NIC);\r
+ #ifdef CONFIG_AP_WOWLAN\r
+ else if (ConfigType == CONFIG_FW_AP_WoWLAN)\r
+ READ_FIRMWARE_MP(8814A,_FW_AP);\r
+ #endif\r
+ }\r
+#endif\r
+\r
+#if (RTL8703B_SUPPORT == 1)\r
+ if (pDM_Odm->SupportICType == ODM_RTL8703B) {\r
+ if (ConfigType == CONFIG_FW_NIC)\r
+ READ_FIRMWARE_MP(8703B, _FW_NIC);\r
+ else if (ConfigType == CONFIG_FW_WoWLAN)\r
+ READ_FIRMWARE_MP(8703B, _FW_WoWLAN);\r
+ #ifdef CONFIG_AP_WOWLAN\r
+ else if (ConfigType == CONFIG_FW_AP_WoWLAN)\r
+ READ_FIRMWARE(8703B, _FW_AP_WoWLAN);\r
+ #endif\r
+ }\r
+#endif\r
+\r
+#if (RTL8188F_SUPPORT == 1)\r
+ if (pDM_Odm->SupportICType == ODM_RTL8188F) {\r
+ if (ConfigType == CONFIG_FW_NIC)\r
+ READ_FIRMWARE_MP(8188F, _FW_NIC);\r
+ else if (ConfigType == CONFIG_FW_WoWLAN)\r
+ READ_FIRMWARE_MP(8188F, _FW_WoWLAN);\r
+ #ifdef CONFIG_AP_WOWLAN\r
+ else if (ConfigType == CONFIG_FW_AP)\r
+ READ_FIRMWARE_MP(8188F, _FW_AP);\r
+ #endif\r
+ }\r
+#endif\r
+\r
+#if (RTL8822B_SUPPORT == 1)\r
+ if (pDM_Odm->SupportICType == ODM_RTL8822B) {\r
+ \r
+ if (ConfigType == CONFIG_FW_NIC)\r
+ READ_FIRMWARE_MP(8822B,_FW_NIC);\r
+ else if (ConfigType == CONFIG_FW_WoWLAN)\r
+ READ_FIRMWARE_MP(8822B, _FW_WoWLAN);\r
+ #ifdef CONFIG_AP_WOWLAN\r
+ else if (ConfigType == CONFIG_FW_AP_WoWLAN)\r
+ READ_FIRMWARE(8822B,_FW_AP);\r
+ #endif\r
+ }\r
+#endif\r
+\r
+#if (RTL8197F_SUPPORT == 1)\r
+ if (pDM_Odm->SupportICType == ODM_RTL8197F) {\r
+ if (ConfigType == CONFIG_FW_NIC)\r
+ READ_FIRMWARE_MP(8197F, _FW_NIC);\r
+ #ifdef CONFIG_AP_WOWLAN\r
+ else if (ConfigType == CONFIG_FW_AP_WoWLAN)\r
+ READ_FIRMWARE(8197F , _FW_AP);\r
+ #endif\r
+ }\r
+#endif\r
+\r
+#endif//(DM_ODM_SUPPORT_TYPE != ODM_AP)\r
+ return HAL_STATUS_SUCCESS; \r
+} \r
+\r
+u4Byte \r
+ODM_GetHWImgVersion(\r
+ IN PDM_ODM_T pDM_Odm\r
+ )\r
+{\r
+ u4Byte Version=0;\r
+\r
+//1 AP doesn't use PHYDM initialization in these ICs\r
+#if (DM_ODM_SUPPORT_TYPE != ODM_AP)\r
+#if (RTL8821A_SUPPORT == 1) \r
+ if (pDM_Odm->SupportICType == ODM_RTL8821)\r
+ Version = GET_VERSION_MP(8821A,_MAC_REG);\r
+#endif\r
+#if (RTL8192E_SUPPORT == 1) \r
+ if (pDM_Odm->SupportICType == ODM_RTL8192E)\r
+ Version = GET_VERSION_MP(8192E,_MAC_REG);\r
+#endif\r
+#if (RTL8812A_SUPPORT == 1) \r
+ if (pDM_Odm->SupportICType == ODM_RTL8812)\r
+ Version = GET_VERSION_MP(8812A,_MAC_REG);\r
+#endif\r
+#if (RTL8723D_SUPPORT == 1) \r
+ if (pDM_Odm->SupportICType == ODM_RTL8723D)\r
+ Version = GET_VERSION_MP(8723D, _MAC_REG);\r
+#endif\r
+#endif //(DM_ODM_SUPPORT_TYPE != ODM_AP)\r
+\r
+/*1 All platforms support*/\r
+#if (RTL8188E_SUPPORT == 1) \r
+ if (pDM_Odm->SupportICType == ODM_RTL8188E)\r
+ Version = GET_VERSION_MP(8188E,_MAC_REG);\r
+#endif\r
+#if (RTL8723B_SUPPORT == 1) \r
+ if (pDM_Odm->SupportICType == ODM_RTL8723B)\r
+ Version = GET_VERSION_MP(8723B, _MAC_REG);\r
+#endif\r
+#if (RTL8814A_SUPPORT == 1) \r
+ if (pDM_Odm->SupportICType == ODM_RTL8814A)\r
+ Version = GET_VERSION_MP(8814A,_MAC_REG);\r
+#endif\r
+#if (RTL8703B_SUPPORT == 1) \r
+ if (pDM_Odm->SupportICType == ODM_RTL8703B)\r
+ Version = GET_VERSION_MP(8703B, _MAC_REG);\r
+#endif\r
+#if (RTL8188F_SUPPORT == 1) \r
+ if (pDM_Odm->SupportICType == ODM_RTL8188F)\r
+ Version = GET_VERSION_MP(8188F, _MAC_REG);\r
+#endif\r
+#if (RTL8822B_SUPPORT == 1) \r
+ if (pDM_Odm->SupportICType == ODM_RTL8822B)\r
+ Version = GET_VERSION_MP(8822B, _MAC_REG);\r
+#endif\r
+\r
+#if (RTL8197F_SUPPORT == 1) \r
+ if (pDM_Odm->SupportICType == ODM_RTL8197F)\r
+ Version = GET_VERSION_MP(8197F, _MAC_REG);\r
+#endif\r
+\r
+#if (RTL8821C_SUPPORT == 1) \r
+ if (pDM_Odm->SupportICType == ODM_RTL8821C)\r
+ Version = GET_VERSION_TC(8821C, _MAC_REG);\r
+#endif\r
+\r
+ return Version;\r
+}\r
+\r
+#if (ODM_PHY_STATUS_NEW_TYPE_SUPPORT == 1)\r
+/* For 8822B only!! need to move to FW finally */\r
+/*==============================================*/\r
+\r
+VOID\r
+phydm_ResetPhyInfo(\r
+ IN PDM_ODM_T pPhydm,\r
+ OUT PODM_PHY_INFO_T pPhyInfo\r
+)\r
+{\r
+ pPhyInfo->RxPWDBAll = 0;\r
+ pPhyInfo->SignalQuality = 0;\r
+ pPhyInfo->BandWidth = 0;\r
+ pPhyInfo->RxCount = 0;\r
+ ODM_Memory_Set(pPhydm, pPhyInfo->RxMIMOSignalQuality, 0 , 4);\r
+ ODM_Memory_Set(pPhydm, pPhyInfo->RxMIMOSignalStrength, 0, 4);\r
+ ODM_Memory_Set(pPhydm, pPhyInfo->RxSNR, 0, 4);\r
+\r
+#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE)) \r
+ pPhyInfo->RxPower = -110;\r
+ pPhyInfo->RecvSignalPower = -110;\r
+ pPhyInfo->BTRxRSSIPercentage = 0;\r
+ pPhyInfo->SignalStrength = 0;\r
+ pPhyInfo->btCoexPwrAdjust = 0;\r
+ pPhyInfo->channel = 0;\r
+ pPhyInfo->bMuPacket = 0;\r
+ pPhyInfo->bBeamformed = 0;\r
+ pPhyInfo->rxsc = 0;\r
+ ODM_Memory_Set(pPhydm, pPhyInfo->RxPwr, -110, 4);\r
+ ODM_Memory_Set(pPhydm, pPhyInfo->RxMIMOEVMdbm, 0, 4);\r
+ ODM_Memory_Set(pPhydm, pPhyInfo->Cfo_short, 0, 8);\r
+ ODM_Memory_Set(pPhydm, pPhyInfo->Cfo_tail, 0, 8);\r
+#endif\r
+}\r
+\r
+VOID\r
+phydm_SetPerPathPhyInfo(\r
+ IN u1Byte RxPath,\r
+ IN s1Byte RxPwr,\r
+ IN s1Byte RxEVM,\r
+ IN s1Byte Cfo_tail,\r
+ IN s1Byte RxSNR,\r
+ OUT PODM_PHY_INFO_T pPhyInfo\r
+)\r
+{\r
+ u1Byte EVMdBm = 0;\r
+ u1Byte EVMPercentage = 0;\r
+\r
+ /* SNR is S(8,1), EVM is S(8,1), CFO is S(8,7) */\r
+ \r
+ if (RxEVM < 0) {\r
+ /* Calculate EVM in dBm */\r
+ EVMdBm = ((u1Byte)(0 - RxEVM) >> 1);\r
+\r
+ /* Calculate EVM in percentage */\r
+ if (EVMdBm >= 33)\r
+ EVMPercentage = 100;\r
+ else \r
+ EVMPercentage = (EVMdBm << 1) + (EVMdBm);\r
+ }\r
+ \r
+\r
+#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
+ pPhyInfo->RxPwr[RxPath] = RxPwr;\r
+ pPhyInfo->RxMIMOEVMdbm[RxPath] = EVMdBm;\r
+\r
+ /* CFO = CFO_tail * 312.5 / 2^7 ~= CFO tail * 39/512 (kHz)*/\r
+ pPhyInfo->Cfo_tail[RxPath] = Cfo_tail;\r
+ pPhyInfo->Cfo_tail[RxPath] = ((pPhyInfo->Cfo_tail[RxPath] << 5) + (pPhyInfo->Cfo_tail[RxPath] << 2) +\r
+ (pPhyInfo->Cfo_tail[RxPath] << 1) + (pPhyInfo->Cfo_tail[RxPath])) >> 9;\r
+#endif\r
+\r
+ pPhyInfo->RxMIMOSignalStrength[RxPath] = odm_QueryRxPwrPercentage(RxPwr);\r
+ pPhyInfo->RxMIMOSignalQuality[RxPath] = EVMPercentage;\r
+ pPhyInfo->RxSNR[RxPath] = RxSNR >> 1;\r
+\r
+/*\r
+ //if (pPktinfo->bPacketMatchBSSID) \r
+ {\r
+ DbgPrint("Path (%d)--------\n", RxPath);\r
+ DbgPrint("RxPwr = %d, Signal strength = %d\n", pPhyInfo->RxPwr[RxPath], pPhyInfo->RxMIMOSignalStrength[RxPath]);\r
+ DbgPrint("EVMdBm = %d, Signal quality = %d\n", pPhyInfo->RxMIMOEVMdbm[RxPath], pPhyInfo->RxMIMOSignalQuality[RxPath]);\r
+ DbgPrint("CFO = %d, SNR = %d\n", pPhyInfo->Cfo_tail[RxPath], pPhyInfo->RxSNR[RxPath]);\r
+ } \r
+*/\r
+}\r
+\r
+VOID\r
+phydm_SetCommonPhyInfo(\r
+ IN s1Byte RxPower,\r
+ IN u1Byte channel,\r
+ IN BOOLEAN bBeamformed,\r
+ IN BOOLEAN bMuPacket,\r
+ IN u1Byte bandwidth,\r
+ IN u1Byte signalQuality,\r
+ IN u1Byte rxsc,\r
+ OUT PODM_PHY_INFO_T pPhyInfo\r
+)\r
+{\r
+#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
+ pPhyInfo->RxPower = RxPower; /* RSSI in dB */\r
+ pPhyInfo->RecvSignalPower = RxPower; /* RSSI in dB */\r
+ pPhyInfo->channel = channel; /* channel number */\r
+ pPhyInfo->bBeamformed = bBeamformed; /* apply BF */\r
+ pPhyInfo->bMuPacket = bMuPacket; /* MU packet */\r
+ pPhyInfo->rxsc = rxsc;\r
+#endif\r
+ pPhyInfo->RxPWDBAll = odm_QueryRxPwrPercentage(RxPower); /* RSSI in percentage */\r
+ pPhyInfo->SignalQuality = signalQuality; /* signal quality */\r
+ pPhyInfo->BandWidth = bandwidth; /* bandwidth */\r
+\r
+/*\r
+ //if (pPktinfo->bPacketMatchBSSID)\r
+ {\r
+ DbgPrint("RxPWDBAll = %d, RxPower = %d, RecvSignalPower = %d\n", pPhyInfo->RxPWDBAll, pPhyInfo->RxPower, pPhyInfo->RecvSignalPower);\r
+ DbgPrint("SignalQuality = %d\n", pPhyInfo->SignalQuality);\r
+ DbgPrint("bBeamformed = %d, bMuPacket = %d, RxCount = %d\n", pPhyInfo->bBeamformed, pPhyInfo->bMuPacket, pPhyInfo->RxCount + 1);\r
+ DbgPrint("channel = %d, rxsc = %d, BandWidth = %d\n", channel, rxsc, bandwidth);\r
+ }\r
+*/\r
+}\r
+\r
+VOID\r
+phydm_GetRxPhyStatusType0(\r
+ IN PDM_ODM_T pDM_Odm,\r
+ IN pu1Byte pPhyStatus,\r
+ IN PODM_PACKET_INFO_T pPktinfo,\r
+ OUT PODM_PHY_INFO_T pPhyInfo\r
+)\r
+{\r
+ /* Type 0 is used for cck packet */\r
+ \r
+ PPHY_STATUS_RPT_JAGUAR2_TYPE0 pPhyStaRpt = (PPHY_STATUS_RPT_JAGUAR2_TYPE0)pPhyStatus;\r
+ u1Byte i, SQ = 0;\r
+ s1Byte RxPower = pPhyStaRpt->pwdb - 110;\r
+\r
+ /* Calculate Signal Quality*/\r
+ if (pPktinfo->bPacketMatchBSSID) {\r
+ if (pPhyStaRpt->signal_quality >= 64)\r
+ SQ = 0;\r
+ else if (pPhyStaRpt->signal_quality <= 20)\r
+ SQ = 100;\r
+ else {\r
+ /* mapping to 2~99% */\r
+ SQ = 64 - pPhyStaRpt->signal_quality;\r
+ SQ = ((SQ << 3) + SQ) >> 2;\r
+ }\r
+ }\r
+\r
+ /* Modify CCK PWDB if old AGC */\r
+ if (pDM_Odm->cck_new_agc == FALSE) {\r
+ u1Byte LNA_idx, VGA_idx;\r
+\r
+#if (RTL8197F_SUPPORT == 1) \r
+ if (pDM_Odm->SupportICType & ODM_RTL8197F)\r
+ LNA_idx = pPhyStaRpt->lna_l;\r
+ else\r
+#endif\r
+ LNA_idx = ((pPhyStaRpt->lna_h << 3) | pPhyStaRpt->lna_l);\r
+ VGA_idx = pPhyStaRpt->vga;\r
+ \r
+#if (RTL8723D_SUPPORT == 1)\r
+ if (pDM_Odm->SupportICType & ODM_RTL8723D)\r
+ RxPower = odm_CCKRSSI_8723D(LNA_idx, VGA_idx);\r
+#endif\r
+#if (RTL8822B_SUPPORT == 1)\r
+ /* Need to do !! */\r
+ /*if (pDM_Odm->SupportICType & ODM_RTL8822B) */\r
+ /*RxPower = odm_CCKRSSI_8822B(LNA_idx, VGA_idx);*/\r
+#endif\r
+#if (RTL8197F_SUPPORT == 1)\r
+ if (pDM_Odm->SupportICType & ODM_RTL8197F) \r
+ RxPower = odm_CCKRSSI_8197F(pDM_Odm, LNA_idx, VGA_idx);\r
+#endif\r
+ }\r
+\r
+ /* Update CCK packet counter */\r
+ pDM_Odm->PhyDbgInfo.NumQryPhyStatusCCK++;\r
+\r
+ /* Update Common information */\r
+ phydm_SetCommonPhyInfo(RxPower, pPhyStaRpt->channel, FALSE, \r
+ FALSE, ODM_BW20M, SQ, pPhyStaRpt->rxsc, pPhyInfo);\r
+\r
+ /* Update CCK pwdb */\r
+ phydm_SetPerPathPhyInfo(ODM_RF_PATH_A, RxPower, 0, 0, 0, pPhyInfo); /* Update per-path information */\r
+\r
+ pDM_Odm->DM_FatTable.antsel_rx_keep_0 = pPhyStaRpt->antidx_a;\r
+ pDM_Odm->DM_FatTable.antsel_rx_keep_1 = pPhyStaRpt->antidx_b;\r
+ pDM_Odm->DM_FatTable.antsel_rx_keep_2 = pPhyStaRpt->antidx_c;\r
+ pDM_Odm->DM_FatTable.antsel_rx_keep_3 = pPhyStaRpt->antidx_d;\r
+/*\r
+ //if (pPktinfo->bPacketMatchBSSID)\r
+ {\r
+ DbgPrint("pwdb = 0x%x, MP gain index = 0x%x, TRSW = 0x%x\n", pPhyStaRpt->pwdb, pPhyStaRpt->gain, pPhyStaRpt->trsw);\r
+ DbgPrint("channel = %d, band = %d, rxsc = %d\n", pPhyStaRpt->channel, pPhyStaRpt->band, pPhyStaRpt->rxsc);\r
+ DbgPrint("agc_table = 0x%x, agc_rpt 0x%x, bb_power = 0x%x\n", pPhyStaRpt->agc_table, pPhyStaRpt->agc_rpt, pPhyStaRpt->bb_power);\r
+ DbgPrint("length = %d, SQ = %d\n", pPhyStaRpt->length, pPhyStaRpt->signal_quality);\r
+ DbgPrint("antidx a = 0x%x, b = 0x%x, c = 0x%x, d = 0x%x\n", pPhyStaRpt->antidx_a, pPhyStaRpt->antidx_b, pPhyStaRpt->antidx_c, pPhyStaRpt->antidx_d);\r
+ DbgPrint("rsvd_0 = 0x%x, rsvd_1 = 0x%x, rsvd_2 = 0x%x\n", pPhyStaRpt->rsvd_0, pPhyStaRpt->rsvd_1, pPhyStaRpt->rsvd_2);\r
+ DbgPrint("rsvd_3 = 0x%x, rsvd_4 = 0x%x, rsvd_5 = 0x%x\n", pPhyStaRpt->rsvd_3, pPhyStaRpt->rsvd_4, pPhyStaRpt->rsvd_5);\r
+ DbgPrint("rsvd_6 = 0x%x, rsvd_7 = 0x%x, rsvd_8 = 0x%x\n", pPhyStaRpt->rsvd_6, pPhyStaRpt->rsvd_7, pPhyStaRpt->rsvd_8);\r
+ }\r
+*/\r
+}\r
+\r
+VOID\r
+phydm_GetRxPhyStatusType1(\r
+ IN PDM_ODM_T pDM_Odm,\r
+ IN pu1Byte pPhyStatus,\r
+ IN PODM_PACKET_INFO_T pPktinfo,\r
+ OUT PODM_PHY_INFO_T pPhyInfo\r
+)\r
+{\r
+ /* Type 1 is used for ofdm packet */\r
+\r
+ PPHY_STATUS_RPT_JAGUAR2_TYPE1 pPhyStaRpt = (PPHY_STATUS_RPT_JAGUAR2_TYPE1)pPhyStatus;\r
+ s1Byte rx_pwr_db = -120;\r
+ u1Byte i, rxsc, bw = ODM_BW20M, RxCount = 0;\r
+ BOOLEAN bMU;\r
+\r
+ /* Update OFDM packet counter */\r
+ pDM_Odm->PhyDbgInfo.NumQryPhyStatusOFDM++;\r
+\r
+ /* Update per-path information */\r
+ for (i = ODM_RF_PATH_A; i < ODM_RF_PATH_MAX_JAGUAR; i++) {\r
+ if (pDM_Odm->RXAntStatus & BIT(i)) {\r
+ s1Byte rx_path_pwr_db;\r
+\r
+ /* RX path counter */\r
+ RxCount++;\r
+\r
+ /* Update per-path information (RSSI_dB RSSI_percentage EVM SNR CFO SQ) */\r
+ /* EVM report is reported by stream, not path */\r
+ rx_path_pwr_db = pPhyStaRpt->pwdb[i] - 110; /* per-path pwdb in dB domain */\r
+ phydm_SetPerPathPhyInfo(i, rx_path_pwr_db, pPhyStaRpt->rxevm[RxCount - 1], \r
+ pPhyStaRpt->cfo_tail[i], pPhyStaRpt->rxsnr[i], pPhyInfo);\r
+\r
+ /* search maximum pwdb */\r
+ if (rx_path_pwr_db > rx_pwr_db)\r
+ rx_pwr_db = rx_path_pwr_db;\r
+ }\r
+ }\r
+\r
+ /* mapping RX counter from 1~4 to 0~3 */\r
+ if (RxCount > 0)\r
+ pPhyInfo->RxCount = RxCount - 1;\r
+ \r
+ /* Check if MU packet or not */\r
+ if ((pPhyStaRpt->gid != 0) && (pPhyStaRpt->gid != 63)) {\r
+ bMU = TRUE;\r
+ pDM_Odm->PhyDbgInfo.NumQryMuPkt++;\r
+ } else\r
+ bMU = FALSE;\r
+\r
+ /* Count BF packet */\r
+ pDM_Odm->PhyDbgInfo.NumQryBfPkt = pDM_Odm->PhyDbgInfo.NumQryBfPkt + pPhyStaRpt->beamformed;\r
+\r
+ /* Check sub-channel */\r
+ if ((pPktinfo->DataRate > ODM_RATE11M) && (pPktinfo->DataRate < ODM_RATEMCS0))\r
+ rxsc = pPhyStaRpt->l_rxsc;\r
+ else\r
+ rxsc = pPhyStaRpt->ht_rxsc;\r
+\r
+ /* Check RX bandwidth */\r
+ if (pDM_Odm->SupportICType & ODM_RTL8822B) {\r
+ if ((rxsc >= 1) && (rxsc <= 8))\r
+ bw = ODM_BW20M;\r
+ else if ((rxsc >= 9) && (rxsc <= 12))\r
+ bw = ODM_BW40M;\r
+ else if (rxsc >= 13)\r
+ bw = ODM_BW80M;\r
+ else\r
+ bw = pPhyStaRpt->rf_mode;\r
+ } else if (pDM_Odm->SupportICType & (ODM_RTL8197F|ODM_RTL8723D)) {\r
+ if (pPhyStaRpt->rf_mode == 0)\r
+ bw = ODM_BW20M;\r
+ else if ((rxsc == 1) || (rxsc == 2))\r
+ bw = ODM_BW20M;\r
+ else\r
+ bw = ODM_BW40M;\r
+ }\r
+\r
+ /* Update packet information */\r
+ phydm_SetCommonPhyInfo(rx_pwr_db, pPhyStaRpt->channel, (BOOLEAN)pPhyStaRpt->beamformed,\r
+ bMU, bw, odm_EVMdbToPercentage(pPhyStaRpt->rxevm[0]), rxsc, pPhyInfo);\r
+ ODM_ParsingCFO(pDM_Odm, pPktinfo, pPhyStaRpt->cfo_tail);\r
+ pDM_Odm->DM_FatTable.antsel_rx_keep_0 = pPhyStaRpt->antidx_a;\r
+ pDM_Odm->DM_FatTable.antsel_rx_keep_1 = pPhyStaRpt->antidx_b;\r
+ pDM_Odm->DM_FatTable.antsel_rx_keep_2 = pPhyStaRpt->antidx_c;\r
+ pDM_Odm->DM_FatTable.antsel_rx_keep_3 = pPhyStaRpt->antidx_d;\r
+\r
+ if (pPktinfo->bPacketMatchBSSID) {\r
+/*\r
+ DbgPrint("channel = %d, band = %d, l_rxsc = %d, ht_rxsc = %d, rf_mode = %d\n", pPhyStaRpt->channel, pPhyStaRpt->band, pPhyStaRpt->l_rxsc, pPhyStaRpt->ht_rxsc, pPhyStaRpt->rf_mode);\r
+ DbgPrint("Antidx A = %d, B = %d, C = %d, D = %d\n", pPhyStaRpt->antidx_a, pPhyStaRpt->antidx_b, pPhyStaRpt->antidx_c, pPhyStaRpt->antidx_d);\r
+ DbgPrint("pwdb A: 0x%x, B: 0x%x, C: 0x%x, D: 0x%x\n", pPhyStaRpt->pwdb[0], pPhyStaRpt->pwdb[1], pPhyStaRpt->pwdb[2], pPhyStaRpt->pwdb[3]);\r
+ DbgPrint("EVM A: %d, B: %d, C: %d, D: %d\n", pPhyStaRpt->rxevm[0], pPhyStaRpt->rxevm[1], pPhyStaRpt->rxevm[2], pPhyStaRpt->rxevm[3]);\r
+ DbgPrint("SNR A: %d, B: %d, C: %d, D: %d\n", pPhyStaRpt->rxsnr[0], pPhyStaRpt->rxsnr[1], pPhyStaRpt->rxsnr[2], pPhyStaRpt->rxsnr[3]);\r
+ DbgPrint("CFO A: %d, B: %d, C: %d, D: %d\n", pPhyStaRpt->cfo_tail[0], pPhyStaRpt->cfo_tail[1], pPhyStaRpt->cfo_tail[2], pPhyStaRpt->cfo_tail[3]);\r
+ DbgPrint("paid = %d, gid = %d, length = %d\n", (pPhyStaRpt->paid + (pPhyStaRpt->paid_msb<<8)), pPhyStaRpt->gid, pPhyStaRpt->lsig_length);\r
+ DbgPrint("ldpc: %d, stbc: %d, bf: %d, gnt_bt: %d, antsw: %d\n", pPhyStaRpt->ldpc, pPhyStaRpt->stbc, pPhyStaRpt->beamformed, pPhyStaRpt->gnt_bt, pPhyStaRpt->hw_antsw_occu);\r
+ DbgPrint("NBI: %d, pos: %d\n", pPhyStaRpt->nb_intf_flag, (pPhyStaRpt->intf_pos + (pPhyStaRpt->intf_pos_msb<<8)));\r
+ DbgPrint("rsvd_0 = %d, rsvd_1 = %d, rsvd_2 = %d, rsvd_3 = %d, rsvd_4 = %d, rsvd_5 = %d\n", pPhyStaRpt->rsvd_0, pPhyStaRpt->rsvd_1, pPhyStaRpt->rsvd_2, pPhyStaRpt->rsvd_3, pPhyStaRpt->rsvd_4, pPhyStaRpt->rsvd_5);\r
+*/\r
+ if ((pPhyStaRpt->gid != 0) && (pPhyStaRpt->gid != 63)) {\r
+ if (pPktinfo->DataRate >= ODM_RATEVHTSS1MCS0)\r
+ pDM_Odm->PhyDbgInfo.NumQryMuVhtPkt[pPktinfo->DataRate - 0x2C]++;\r
+ } else {\r
+ if (pPktinfo->DataRate >= ODM_RATEVHTSS1MCS0)\r
+ pDM_Odm->PhyDbgInfo.NumQryVhtPkt[pPktinfo->DataRate - 0x2C]++;\r
+ }\r
+ }\r
+/*\r
+ DbgPrint("phydm_GetRxPhyStatusType1 pPktinfo->bPacketMatchBSSID = %d\n", pPktinfo->bPacketMatchBSSID);\r
+ DbgPrint("pPktinfo->DataRate = 0x%x\n", pPktinfo->DataRate);\r
+*/\r
+}\r
+\r
+VOID\r
+phydm_GetRxPhyStatusType2(\r
+ IN PDM_ODM_T pDM_Odm,\r
+ IN pu1Byte pPhyStatus,\r
+ IN PODM_PACKET_INFO_T pPktinfo,\r
+ OUT PODM_PHY_INFO_T pPhyInfo\r
+)\r
+{\r
+ PPHY_STATUS_RPT_JAGUAR2_TYPE2 pPhyStaRpt = (PPHY_STATUS_RPT_JAGUAR2_TYPE2)pPhyStatus;\r
+ s1Byte rx_pwr_db = -120;\r
+ u1Byte i, rxsc, bw = ODM_BW20M, RxCount = 0;\r
+\r
+ /* Update OFDM packet counter */\r
+ pDM_Odm->PhyDbgInfo.NumQryPhyStatusOFDM++;\r
+\r
+ /* Update per-path information */\r
+ for (i = ODM_RF_PATH_A; i < ODM_RF_PATH_MAX_JAGUAR; i++) {\r
+ if (pDM_Odm->RXAntStatus & BIT(i)) {\r
+ s1Byte rx_path_pwr_db;\r
+\r
+ /* RX path counter */\r
+ RxCount++;\r
+\r
+ /* Update per-path information (RSSI_dB RSSI_percentage EVM SNR CFO SQ) */\r
+#if (RTL8197F_SUPPORT == 1)\r
+ if ((pDM_Odm->SupportICType & ODM_RTL8197F) && (pPhyStaRpt->pwdb[i] == 0x7f)) { /*for 97f workaround*/\r
+ \r
+ if (i == ODM_RF_PATH_A) {\r
+ rx_path_pwr_db = (pPhyStaRpt->gain_a)<<1;\r
+ rx_path_pwr_db = rx_path_pwr_db - 110;\r
+ } else if (i == ODM_RF_PATH_B) {\r
+ rx_path_pwr_db = (pPhyStaRpt->gain_b)<<1;\r
+ rx_path_pwr_db = rx_path_pwr_db - 110;\r
+ } else\r
+ rx_path_pwr_db = 0;\r
+ } else\r
+#endif\r
+ rx_path_pwr_db = pPhyStaRpt->pwdb[i] - 110; /* per-path pwdb in dB domain */\r
+ \r
+ phydm_SetPerPathPhyInfo(i, rx_path_pwr_db, 0, 0, 0, pPhyInfo);\r
+\r
+ /* search maximum pwdb */\r
+ if (rx_path_pwr_db > rx_pwr_db)\r
+ rx_pwr_db = rx_path_pwr_db;\r
+ }\r
+ }\r
+\r
+ /* mapping RX counter from 1~4 to 0~3 */\r
+ if (RxCount > 0)\r
+ pPhyInfo->RxCount = RxCount - 1;\r
+ \r
+ /* Check RX sub-channel */\r
+ if ((pPktinfo->DataRate > ODM_RATE11M) && (pPktinfo->DataRate < ODM_RATEMCS0))\r
+ rxsc = pPhyStaRpt->l_rxsc;\r
+ else\r
+ rxsc = pPhyStaRpt->ht_rxsc;\r
+\r
+ /* Check RX bandwidth */\r
+ /* the BW information of sc=0 is useless, because there is no information of RF mode*/\r
+\r
+ if (pDM_Odm->SupportICType & ODM_RTL8822B) {\r
+ if ((rxsc >= 1) && (rxsc <= 8))\r
+ bw = ODM_BW20M;\r
+ else if ((rxsc >= 9) && (rxsc <= 12))\r
+ bw = ODM_BW40M;\r
+ else if (rxsc >= 13)\r
+ bw = ODM_BW80M;\r
+ else\r
+ bw = ODM_BW20M;\r
+ } else if (pDM_Odm->SupportICType & (ODM_RTL8197F|ODM_RTL8723D)) {\r
+ if (rxsc == 3)\r
+ bw = ODM_BW40M;\r
+ else if ((rxsc == 1) || (rxsc == 2))\r
+ bw = ODM_BW20M;\r
+ else\r
+ bw = ODM_BW20M;\r
+ }\r
+\r
+ /* Update packet information */\r
+ phydm_SetCommonPhyInfo(rx_pwr_db, pPhyStaRpt->channel, (BOOLEAN)pPhyStaRpt->beamformed,\r
+ FALSE, bw, 0, rxsc, pPhyInfo);\r
+\r
+/*\r
+ //if (pPktinfo->bPacketMatchBSSID)\r
+ {\r
+ DbgPrint("channel = %d, band = %d, l_rxsc = %d, ht_rxsc = %d\n", pPhyStaRpt->channel, pPhyStaRpt->band, pPhyStaRpt->l_rxsc, pPhyStaRpt->ht_rxsc);\r
+ DbgPrint("pwdb A: 0x%x, B: 0x%x, C: 0x%x, D: 0x%x\n", pPhyStaRpt->pwdb[0], pPhyStaRpt->pwdb[1], pPhyStaRpt->pwdb[2], pPhyStaRpt->pwdb[3]);\r
+ DbgPrint("Agc table A: 0x%x, B: 0x%x, C: 0x%x, D: 0x%x\n", pPhyStaRpt->agc_table_a, pPhyStaRpt->agc_table_b, pPhyStaRpt->agc_table_c, pPhyStaRpt->agc_table_d);\r
+ DbgPrint("Gain A: 0x%x, B: 0x%x, C: 0x%x, D: 0x%x\n", pPhyStaRpt->gain_a, pPhyStaRpt->gain_b, pPhyStaRpt->gain_c, pPhyStaRpt->gain_d);\r
+ DbgPrint("TRSW A: 0x%x, B: 0x%x, C: 0x%x, D: 0x%x\n", pPhyStaRpt->trsw_a, pPhyStaRpt->trsw_b, pPhyStaRpt->trsw_c, pPhyStaRpt->trsw_d);\r
+ DbgPrint("AAGC step A: 0x%x, B: 0x%x, C: 0x%x, D: 0x%x\n", pPhyStaRpt->aagc_step_a, pPhyStaRpt->aagc_step_b, pPhyStaRpt->aagc_step_c, pPhyStaRpt->aagc_step_d);\r
+ DbgPrint("HT AAGC gain A: 0x%x, B: 0x%x, C: 0x%x, D: 0x%x\n", pPhyStaRpt->ht_aagc_gain[0], pPhyStaRpt->ht_aagc_gain[1], pPhyStaRpt->ht_aagc_gain[2], pPhyStaRpt->ht_aagc_gain[3]);\r
+ DbgPrint("DAGC gain A: 0x%x, B: 0x%x, C: 0x%x, D: 0x%x\n", pPhyStaRpt->dagc_gain[0], pPhyStaRpt->dagc_gain[1], pPhyStaRpt->dagc_gain[2], pPhyStaRpt->dagc_gain[3]);\r
+ DbgPrint("ldpc: %d, stbc: %d, bf: %d, gnt_bt: %d, antsw: %d\n", pPhyStaRpt->ldpc, pPhyStaRpt->stbc, pPhyStaRpt->beamformed, pPhyStaRpt->gnt_bt, pPhyStaRpt->hw_antsw_occu);\r
+ DbgPrint("counter: %d, syn_count: %d\n", pPhyStaRpt->counter, pPhyStaRpt->syn_count);\r
+ DbgPrint("cnt_cca2agc_rdy: %d, cnt_pw2cca: %d, shift_l_map\n", pPhyStaRpt->cnt_cca2agc_rdy, pPhyStaRpt->cnt_pw2cca, pPhyStaRpt->shift_l_map);\r
+ DbgPrint("rsvd_0 = %d, rsvd_1 = %d, rsvd_2 = %d, rsvd_3 = %d, rsvd_4 = %d, rsvd_5 = %d\n", pPhyStaRpt->rsvd_0, pPhyStaRpt->rsvd_1, pPhyStaRpt->rsvd_2, pPhyStaRpt->rsvd_3, pPhyStaRpt->rsvd_4);\r
+ DbgPrint("rsvd_5 = %d, rsvd_6 = %d, rsvd_6 = %d\n", pPhyStaRpt->rsvd_5, pPhyStaRpt->rsvd_6, pPhyStaRpt->rsvd_7);\r
+ }\r
+*/\r
+}\r
+\r
+VOID\r
+phydm_GetRxPhyStatusType5(\r
+ IN pu1Byte pPhyStatus\r
+)\r
+{\r
+/*\r
+ DbgPrint("DW0: 0x%02x%02x%02x%02x\n", *(pPhyStatus + 3), *(pPhyStatus + 2), *(pPhyStatus + 1), *(pPhyStatus + 0));\r
+ DbgPrint("DW1: 0x%02x%02x%02x%02x\n", *(pPhyStatus + 7), *(pPhyStatus + 6), *(pPhyStatus + 5), *(pPhyStatus + 4));\r
+ DbgPrint("DW2: 0x%02x%02x%02x%02x\n", *(pPhyStatus + 11), *(pPhyStatus + 10), *(pPhyStatus + 9), *(pPhyStatus + 8));\r
+ DbgPrint("DW3: 0x%02x%02x%02x%02x\n", *(pPhyStatus + 15), *(pPhyStatus + 14), *(pPhyStatus + 13), *(pPhyStatus + 12));\r
+ DbgPrint("DW4: 0x%02x%02x%02x%02x\n", *(pPhyStatus + 19), *(pPhyStatus + 18), *(pPhyStatus + 17), *(pPhyStatus + 16));\r
+ DbgPrint("DW5: 0x%02x%02x%02x%02x\n", *(pPhyStatus + 23), *(pPhyStatus + 22), *(pPhyStatus + 21), *(pPhyStatus + 20));\r
+ DbgPrint("DW6: 0x%02x%02x%02x%02x\n", *(pPhyStatus + 27), *(pPhyStatus + 26), *(pPhyStatus + 25), *(pPhyStatus + 24));\r
+*/\r
+}\r
+\r
+VOID\r
+phydm_Process_RSSIForDMNewType( \r
+ IN OUT PDM_ODM_T pDM_Odm,\r
+ IN PODM_PHY_INFO_T pPhyInfo,\r
+ IN PODM_PACKET_INFO_T pPktinfo\r
+ )\r
+{\r
+ s4Byte UndecoratedSmoothedPWDB, AccumulatePWDB;\r
+ u4Byte RSSI_Ave;\r
+ u1Byte i;\r
+ PSTA_INFO_T pEntry;\r
+ u1Byte scaling_factor = 4;\r
+ \r
+ if (pPktinfo->StationID >= ODM_ASSOCIATE_ENTRY_NUM)\r
+ return;\r
+\r
+ pEntry = pDM_Odm->pODM_StaInfo[pPktinfo->StationID]; \r
+\r
+ if (!IS_STA_VALID(pEntry))\r
+ return;\r
+\r
+ if ((!pPktinfo->bPacketMatchBSSID))/*data frame only*/\r
+ return;\r
+\r
+ if (pPktinfo->bPacketBeacon)\r
+ pDM_Odm->PhyDbgInfo.NumQryBeaconPkt++;\r
+ \r
+ if (pPktinfo->bPacketToSelf || pPktinfo->bPacketBeacon) {\r
+ u4Byte RSSI_linear = 0;\r
+\r
+ pDM_Odm->RxRate = pPktinfo->DataRate;\r
+ UndecoratedSmoothedPWDB = pEntry->rssi_stat.UndecoratedSmoothedPWDB;\r
+ AccumulatePWDB = pDM_Odm->AccumulatePWDB[pPktinfo->StationID];\r
+ pDM_Odm->RSSI_A = pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_A];\r
+ pDM_Odm->RSSI_B = pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_B];\r
+ pDM_Odm->RSSI_C = pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_C];\r
+ pDM_Odm->RSSI_D = pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_D];\r
+\r
+ for (i = ODM_RF_PATH_A; i < ODM_RF_PATH_MAX_JAGUAR; i++) {\r
+ if (pPhyInfo->RxMIMOSignalStrength[i] != 0)\r
+ RSSI_linear += odm_ConvertTo_linear(pPhyInfo->RxMIMOSignalStrength[i]);\r
+ }\r
+\r
+ switch (pPhyInfo->RxCount + 1) {\r
+ case 2:\r
+ RSSI_linear = (RSSI_linear >> 1);\r
+ break;\r
+ case 3:\r
+ RSSI_linear = ((RSSI_linear) + (RSSI_linear << 1) + (RSSI_linear << 3)) >> 5; /* RSSI_linear/3 ~ RSSI_linear*11/32 */\r
+ break;\r
+ case 4:\r
+ RSSI_linear = (RSSI_linear >> 2);\r
+ break;\r
+ }\r
+ RSSI_Ave = odm_ConvertTo_dB(RSSI_linear);\r
+\r
+ if (UndecoratedSmoothedPWDB <= 0) {\r
+ AccumulatePWDB = (pPhyInfo->RxPWDBAll << scaling_factor);\r
+ UndecoratedSmoothedPWDB = pPhyInfo->RxPWDBAll;\r
+ } else {\r
+ AccumulatePWDB = AccumulatePWDB - (AccumulatePWDB>>scaling_factor) + RSSI_Ave;\r
+ UndecoratedSmoothedPWDB = (AccumulatePWDB + (1<<(scaling_factor - 1)))>>scaling_factor;\r
+ }\r
+\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
+ if (pEntry->rssi_stat.UndecoratedSmoothedPWDB == -1)\r
+ phydm_ra_rssi_rpt_wk(pDM_Odm);\r
+#endif\r
+ pEntry->rssi_stat.UndecoratedSmoothedPWDB = UndecoratedSmoothedPWDB;\r
+ pDM_Odm->AccumulatePWDB[pPktinfo->StationID] = AccumulatePWDB;\r
+\r
+#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN)) \r
+ if (pPktinfo->StationID == 0) { \r
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pDM_Odm->Adapter);\r
+ \r
+ pHalData->UndecoratedSmoothedPWDB = UndecoratedSmoothedPWDB;\r
+ }\r
+#endif\r
+ }\r
+}\r
+\r
+VOID\r
+phydm_RxPhyStatusNewType(\r
+ IN PDM_ODM_T pPhydm,\r
+ IN pu1Byte pPhyStatus,\r
+ IN PODM_PACKET_INFO_T pPktinfo,\r
+ OUT PODM_PHY_INFO_T pPhyInfo\r
+)\r
+{\r
+ u1Byte phy_status_type = (*pPhyStatus & 0xf);\r
+\r
+ /*DbgPrint("phydm_RxPhyStatusNewType================> (page: %d)\n", phy_status_type);*/\r
+ \r
+ /* Memory reset */\r
+ phydm_ResetPhyInfo(pPhydm, pPhyInfo);\r
+\r
+ /* Phy status parsing */\r
+ switch (phy_status_type) {\r
+ case 0:\r
+ {\r
+ phydm_GetRxPhyStatusType0(pPhydm, pPhyStatus, pPktinfo, pPhyInfo);\r
+ break;\r
+ }\r
+ case 1:\r
+ {\r
+ phydm_GetRxPhyStatusType1(pPhydm, pPhyStatus, pPktinfo, pPhyInfo);\r
+ break;\r
+ }\r
+ case 2:\r
+ {\r
+ phydm_GetRxPhyStatusType2(pPhydm, pPhyStatus, pPktinfo, pPhyInfo);\r
+ break;\r
+ }\r
+/*\r
+ case 5:\r
+ {\r
+ phydm_GetRxPhyStatusType5(pPhyStatus);\r
+ return;\r
+ }\r
+*/\r
+ default:\r
+ return;\r
+ }\r
+\r
+ #if RTL8723D_SUPPORT == 1\r
+ if (pPhydm->SupportAbility & ODM_BB_ANT_DIV) {\r
+ #if (defined(CONFIG_PHYDM_ANTENNA_DIVERSITY))\r
+ ODM_Process_RSSIForAntDiv(pPhydm, pPhyInfo, pPktinfo);\r
+ #endif\r
+ } \r
+ #endif\r
+ /* Update signal strength to UI, and pPhyInfo->RxPWDBAll is the maximum RSSI of all path */\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+ pPhyInfo->SignalStrength = SignalScaleProc(pPhydm->Adapter, pPhyInfo->RxPWDBAll, FALSE, FALSE);\r
+#elif (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
+ pPhyInfo->SignalStrength = (u1Byte)(odm_SignalScaleMapping(pPhydm, pPhyInfo->RxPWDBAll));\r
+#endif\r
+\r
+ /* Calculate average RSSI and smoothed RSSI */\r
+ phydm_Process_RSSIForDMNewType(pPhydm, pPhyInfo, pPktinfo);\r
+\r
+}\r
+/*==============================================*/\r
+#endif\r
+\r
+u4Byte\r
+query_phydm_trx_capability(\r
+ IN PDM_ODM_T pDM_Odm\r
+)\r
+{\r
+ u4Byte value32 = 0xFFFFFFFF;\r
+\r
+ #if (RTL8821C_SUPPORT == 1)\r
+ if (pDM_Odm->SupportICType == ODM_RTL8821C)\r
+ value32 = query_phydm_trx_capability_8821c(pDM_Odm);\r
+ #endif\r
+\r
+ return value32;\r
+}\r
+\r
+u4Byte\r
+query_phydm_stbc_capability(\r
+ IN PDM_ODM_T pDM_Odm\r
+)\r
+{\r
+ u4Byte value32 = 0xFFFFFFFF;\r
+\r
+ #if (RTL8821C_SUPPORT == 1)\r
+ if (pDM_Odm->SupportICType == ODM_RTL8821C)\r
+ value32 = query_phydm_stbc_capability_8821c(pDM_Odm);\r
+ #endif\r
+\r
+ return value32;\r
+}\r
+\r
+u4Byte\r
+query_phydm_ldpc_capability(\r
+ IN PDM_ODM_T pDM_Odm\r
+)\r
+{\r
+ u4Byte value32 = 0xFFFFFFFF;\r
+\r
+ #if (RTL8821C_SUPPORT == 1)\r
+ if (pDM_Odm->SupportICType == ODM_RTL8821C)\r
+ value32 = query_phydm_ldpc_capability_8821c(pDM_Odm);\r
+ #endif\r
+\r
+ return value32;\r
+}\r
+\r
+u4Byte\r
+query_phydm_txbf_parameters(\r
+ IN PDM_ODM_T pDM_Odm\r
+)\r
+{\r
+ u4Byte value32 = 0xFFFFFFFF;\r
+\r
+ #if (RTL8821C_SUPPORT == 1)\r
+ if (pDM_Odm->SupportICType == ODM_RTL8821C)\r
+ value32 = query_phydm_txbf_parameters_8821c(pDM_Odm);\r
+ #endif\r
+\r
+ return value32;\r
+}\r
+\r
+u4Byte\r
+query_phydm_txbf_capability(\r
+ IN PDM_ODM_T pDM_Odm\r
+)\r
+{\r
+ u4Byte value32 = 0xFFFFFFFF;\r
+\r
+ #if (RTL8821C_SUPPORT == 1)\r
+ if (pDM_Odm->SupportICType == ODM_RTL8821C)\r
+ value32 = query_phydm_txbf_capability_8821c(pDM_Odm);\r
+ #endif\r
+\r
+ return value32;\r
+}\r