8723BU: Update 8723BU wifi driver to version v4.3.16_14189.20150519_BTCOEX2015119...
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8723bu / hal / OUTSRC / phydm_HWConfig.c
index e8dc0a60b356535cdd28524a5c2e93b1813ab905..d7da773522c41f5ee58e962146bdd434d5159413 100755 (executable)
@@ -59,7 +59,6 @@
 #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
-\r
 u1Byte\r
 odm_QueryRxPwrPercentage(\r
        IN              s1Byte          AntPower\r
@@ -302,6 +301,7 @@ odm_SignalScaleMapping(
        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
@@ -313,8 +313,9 @@ odm_SignalScaleMapping(
                        (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
-       }\r
-       else{           \r
+       }else\r
+#endif\r
+        {              \r
                return odm_SignalScaleMapping_92CSeries(pDM_Odm,CurrSig);\r
        }\r
        \r
@@ -571,9 +572,19 @@ odm_EVMdbToPercentage(
 \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
                \r
        if(ret_val >= 0)\r
                ret_val = 0;\r
+               if(ret_val <= -40)\r
+                       ret_val = -40;\r
+\r
+               ret_val = 0 - ret_val;\r
+               ret_val*=3;\r
+\r
+       #else\r
+               if(ret_val >= 0)\r
+                       ret_val = 0;\r
        if(ret_val <= -33)\r
                ret_val = -33;\r
 \r
@@ -582,6 +593,7 @@ odm_EVMdbToPercentage(
 \r
        if(ret_val == 99)\r
                ret_val = 100;\r
+       #endif\r
 \r
        return(ret_val);\r
 }\r
@@ -644,7 +656,7 @@ odm_RxPhyStatus92CSeries_Parsing(
        u1Byte                          LNA_idx, VGA_idx;\r
        PPHY_STATUS_RPT_8192CD_T pPhyStaRpt = (PPHY_STATUS_RPT_8192CD_T)pPhyStatus;\r
 \r
-       isCCKrate = (pPktinfo->DataRate <= DESC_RATE11M)?TRUE :FALSE;\r
+       isCCKrate = (pPktinfo->DataRate <= ODM_RATE11M) ? TRUE : FALSE;\r
        pPhyInfo->RxMIMOSignalQuality[ODM_RF_PATH_A] = -1;\r
        pPhyInfo->RxMIMOSignalQuality[ODM_RF_PATH_B] = -1;\r
 \r
@@ -676,58 +688,101 @@ odm_RxPhyStatus92CSeries_Parsing(
                        VGA_idx = (cck_agc_rpt & 0x1F); \r
                        if(pDM_Odm->SupportICType & (ODM_RTL8188E|ODM_RTL8192E))\r
                        {\r
-                               switch(LNA_idx)\r
+                               if(pDM_Odm->cck_agc_report_type == 0 && (pDM_Odm->SupportICType & ODM_RTL8192E) )\r
                                {\r
-                                       case 7:\r
-                                               if(VGA_idx <= 27)\r
-                                                       rx_pwr_all = -100 + 2*(27-VGA_idx); //VGA_idx = 27~2\r
-                                               else\r
+                                       switch(LNA_idx)\r
+                                       {\r
+                                               case 7:\r
+                                                       rx_pwr_all = -45  - 2*(VGA_idx);\r
+                                                       break;\r
+                                               case 6:\r
+                                                       rx_pwr_all = -43 -2*(VGA_idx); \r
+                                                       break;\r
+                                               case 5:\r
+                                                       rx_pwr_all = -27 - 2*(VGA_idx); \r
+                                                       break;\r
+                                               case 4:\r
+                                                       rx_pwr_all = -21 - 2*(VGA_idx); \r
+                                                       break;\r
+                                               case 3:\r
+                                                       rx_pwr_all = -18 - 2*(VGA_idx); \r
+                                                       break;\r
+                                               case 2:\r
+                                                       rx_pwr_all = -6 - 2*(VGA_idx);\r
+                                                       break;\r
+                                               case 1:\r
+                                                       rx_pwr_all = 9 -2*(VGA_idx);\r
+                                                       break;\r
+                                               case 0:\r
+                                                       rx_pwr_all = 15 -2*(VGA_idx);\r
+                                                       break;\r
+                                               default:\r
+\r
+                                                       break;\r
+                                       }\r
+\r
+                                       if(pDM_Odm->BoardType & ODM_BOARD_EXT_LNA)\r
+                                       {\r
+                                               rx_pwr_all -= pDM_Odm->ExtLNAGain;\r
+                                       }\r
+                                       \r
+                                       PWDB_ALL = odm_QueryRxPwrPercentage(rx_pwr_all);\r
+                               }\r
+                               else\r
+                               {                                       \r
+                                       switch(LNA_idx)\r
+                                       {\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
+                                                       break;\r
+                                               case 6:\r
                                                        rx_pwr_all = -48 + 2*(2-VGA_idx); //VGA_idx = 2~0\r
-                                               break;\r
-                                       case 5:\r
+                                                       break;\r
+                                               case 5:\r
                                                        rx_pwr_all = -42 + 2*(7-VGA_idx); //VGA_idx = 7~5\r
-                                               break;\r
-                                       case 4:\r
+                                                       break;\r
+                                               case 4:\r
                                                        rx_pwr_all = -36 + 2*(7-VGA_idx); //VGA_idx = 7~4\r
-                                               break;\r
-                                       case 3:\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
+                                                       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
+                                                       break;\r
+                                               default:\r
+                                                       //DbgPrint("CCK Exception default\n");\r
+                                                       break;\r
+                                       }\r
+                                       rx_pwr_all += 8;\r
 \r
-                               //2012.10.08 LukeLee: Modify for 92E CCK RSSI\r
-                               if(pDM_Odm->SupportICType == ODM_RTL8192E)\r
-                                       rx_pwr_all += 10;\r
+                                       //2012.10.08 LukeLee: Modify for 92E CCK RSSI\r
+                                       if(pDM_Odm->SupportICType == ODM_RTL8192E)\r
+                                               rx_pwr_all += 8;\r
                                \r
-                               PWDB_ALL = odm_QueryRxPwrPercentage(rx_pwr_all);\r
-                               if(cck_highpwr == FALSE)\r
-                               {\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
+                                       PWDB_ALL = odm_QueryRxPwrPercentage(rx_pwr_all);\r
+                                       if(cck_highpwr == FALSE)\r
+                                       {\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
                                }\r
                        }\r
                        else if(pDM_Odm->SupportICType & (ODM_RTL8723B))\r
@@ -830,16 +885,17 @@ odm_RxPhyStatus92CSeries_Parsing(
                {\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
-                       }\r
-                       else if((pDM_Odm->SupportPlatform == ODM_WIN) &&\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
-                       }\r
-                       else if(pPhyInfo->RxPWDBAll > 40 && !pDM_Odm->bInHctTest){\r
+                       }else \r
+#endif\r
+                       if(pPhyInfo->RxPWDBAll > 40 && !pDM_Odm->bInHctTest){\r
                                SQ = 100;\r
                        }\r
                        else{                                           \r
@@ -860,7 +916,7 @@ odm_RxPhyStatus92CSeries_Parsing(
                        pPhyInfo->RxMIMOSignalQuality[ODM_RF_PATH_B] = -1;\r
                }\r
        }\r
-       else //is OFDM rate\r
+       else //is OFDM rate\r
        {\r
                pDM_Odm->PhyDbgInfo.NumQryPhyStatusOFDM++;\r
 \r
@@ -878,7 +934,6 @@ odm_RxPhyStatus92CSeries_Parsing(
 \r
                        rx_pwr[i] = ((pPhyStaRpt->path_agc[i].gain& 0x3F)*2) - 110;\r
 \r
-\r
                #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
                        pPhyInfo->RxPwr[i] = rx_pwr[i];\r
                #endif  \r
@@ -888,9 +943,10 @@ odm_RxPhyStatus92CSeries_Parsing(
                        total_rssi += RSSI;\r
                        //RT_DISP(FRX, RX_PHY_SS, ("RF-%d RXPWR=%x RSSI=%d\n", i, rx_pwr[i], RSSI));\r
 \r
-                       //Modification for ext-LNA board\r
+\r
                        if(pDM_Odm->SupportICType&ODM_RTL8192C)\r
                        {       \r
+                               //Modification for ext-LNA board        \r
                                if(pDM_Odm->BoardType & (ODM_BOARD_EXT_LNA | ODM_BOARD_EXT_PA))\r
                                {\r
                                        if((pPhyStaRpt->path_agc[i].trsw) == 1)\r
@@ -905,7 +961,7 @@ odm_RxPhyStatus92CSeries_Parsing(
                \r
                        pPhyInfo->RxMIMOSignalStrength[i] =(u1Byte) RSSI;\r
 \r
-               #if (DM_ODM_SUPPORT_TYPE &  (/*ODM_WIN|*/ODM_CE|ODM_AP|ODM_ADSL))\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
@@ -913,6 +969,7 @@ odm_RxPhyStatus92CSeries_Parsing(
                        /* 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
@@ -925,7 +982,7 @@ odm_RxPhyStatus92CSeries_Parsing(
                                {\r
                                        pPhyInfo->SignalQuality = odm_SQ_process_patch_RT_CID_819x_Acer(pDM_Odm,isCCKrate,PWDB_ALL,0,RSSI);\r
                                }       \r
-                               \r
+#endif                         \r
                        }\r
                }\r
                \r
@@ -936,7 +993,7 @@ odm_RxPhyStatus92CSeries_Parsing(
                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
-               //RT_DISP(FRX, RX_PHY_SS, ("PWDB_ALL=%d\n",PWDB_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
@@ -955,7 +1012,7 @@ odm_RxPhyStatus92CSeries_Parsing(
                        //\r
                        // (3)EVM of HT rate\r
                        //\r
-                       if(pPktinfo->DataRate >=DESC_RATEMCS8 && pPktinfo->DataRate <=DESC_RATEMCS15)\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
@@ -967,7 +1024,6 @@ odm_RxPhyStatus92CSeries_Parsing(
                                // 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
-                               //RT_DISP(FRX, RX_PHY_SQ, ("RXRATE=%x RXEVM=%x EVM=%s%d\n", \r
                                //GET_RX_STATUS_DESC_RX_MCS(pDesc), pDrvInfo->rxevm[i], "%", EVM));\r
                                \r
                                //if(pPktinfo->bPacketMatchBSSID)\r
@@ -991,33 +1047,46 @@ odm_RxPhyStatus92CSeries_Parsing(
        {               \r
 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
                // 2012/01/12 MH Use customeris signal strength from HalComRxdDesc.c/   \r
+               if(pDM_Odm->PatchID == RT_CID_819x_Acer)\r
+               {\r
+                       if(IS_HARDWARE_TYPE_8723BE(pDM_Odm->Adapter))\r
+                               pPhyInfo->SignalStrength = (u1Byte) (PWDB_ALL - 4);\r
+                       else if(IS_HARDWARE_TYPE_8188EE(pDM_Odm->Adapter))\r
+                               pPhyInfo->SignalStrength = (u1Byte) (PWDB_ALL + 6);\r
+                       else\r
+                               pPhyInfo->SignalStrength = (u1Byte) (PWDB_ALL - 4);\r
+               }\r
+               else\r
                pPhyInfo->SignalStrength = (u1Byte)(SignalScaleMapping(pDM_Odm->Adapter, PWDB_ALL));//PWDB_ALL;\r
 #else\r
-#ifdef CONFIG_SKIP_SIGNAL_SCALE_MAPPING\r
+       #ifdef CONFIG_SKIP_SIGNAL_SCALE_MAPPING\r
                pPhyInfo->SignalStrength = (u1Byte)PWDB_ALL;\r
-#else\r
+       #else\r
                pPhyInfo->SignalStrength = (u1Byte)(odm_SignalScaleMapping(pDM_Odm, PWDB_ALL));//PWDB_ALL;\r
-#endif\r
-#endif\r
+       #endif\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
+               #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
                        // 2012/01/12 MH Use customeris signal strength from HalComRxdDesc.c/   \r
-                       pPhyInfo->SignalStrength = (u1Byte)(SignalScaleMapping(pDM_Odm->Adapter, total_rssi/=rf_rx_num));//PWDB_ALL;\r
-#else\r
-#ifdef CONFIG_SKIP_SIGNAL_SCALE_MAPPING\r
+                       if(pDM_Odm->PatchID == RT_CID_819x_Acer)\r
+                               pPhyInfo->SignalStrength = (u1Byte) (total_rssi/=rf_rx_num);\r
+                       else\r
+                               pPhyInfo->SignalStrength = (u1Byte)(SignalScaleMapping(pDM_Odm->Adapter, total_rssi/=rf_rx_num));/*PWDB*/\r
+               #else\r
+                       #ifdef CONFIG_SKIP_SIGNAL_SCALE_MAPPING\r
                        total_rssi/=rf_rx_num;\r
                        pPhyInfo->SignalStrength = (u1Byte)total_rssi;\r
-#else\r
+                       #else\r
                        pPhyInfo->SignalStrength = (u1Byte)(odm_SignalScaleMapping(pDM_Odm, total_rssi/=rf_rx_num));\r
-#endif\r
-#endif\r
+                       #endif\r
+               #endif\r
                }\r
        }\r
-#endif\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
@@ -1033,351 +1102,370 @@ odm_RxPhyStatus92CSeries_Parsing(
 }\r
 #endif\r
 \r
-\r
 #if    ODM_IC_11AC_SERIES_SUPPORT\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 = 0, EVMdbm, PWDB_ALL = 0, PWDB_ALL_BT;\r
-       u1Byte                          RSSI, total_rssi=0;\r
-       u1Byte                          isCCKrate=0;    \r
-       u1Byte                          rf_rx_num = 0;\r
-       u1Byte                          cck_highpwr = 0;\r
-       u1Byte                          LNA_idx, VGA_idx;\r
-\r
-       \r
-       PPHY_STATUS_RPT_8812_T pPhyStaRpt = (PPHY_STATUS_RPT_8812_T)pPhyStatus; \r
-\r
-       if(pPktinfo->DataRate <= DESC_RATE54M)\r
-       {\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
+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
-                       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
+       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
-                       default:        case 0:\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
+                       break;\r
+\r
+               default:\r
+               case 0:\r
+                       pPhyInfo->BandWidth = 0;\r
+                       break;\r
+               }\r
        }\r
 \r
-       if(pPktinfo->DataRate <= DESC_RATE11M)\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, total_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
+\r
+       if (pDM_Odm->SupportICType == ODM_RTL8812 || pDM_Odm->SupportICType == ODM_RTL8821)\r
+               odm_RxPhyBWJaguarSeries_Parsing(pPhyInfo, pPktinfo, pPhyStaRpt);\r
+\r
+       if (pPktinfo->DataRate <= ODM_RATE11M)\r
                isCCKrate = TRUE;\r
        else\r
                isCCKrate = FALSE;\r
-       \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
-\r
-       if(isCCKrate)\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 cacluated by hardware (for rate adaptive)\r
-               //\r
 \r
-               //if(pHalData->eRFPowerState == eRfOn)\r
-                       cck_highpwr = pDM_Odm->bCckHighPower;\r
-               //else\r
-               //      cck_highpwr = FALSE;\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
-               {\r
-                       switch(LNA_idx)\r
-                       {\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
+               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
-                       {\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
+\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
+                               if (PWDB_ALL > 100)\r
                                        PWDB_ALL = 100;\r
                        }\r
-               }\r
-               else if(pDM_Odm->SupportICType == ODM_RTL8821)\r
-               {\r
+               } else if (pDM_Odm->SupportICType & (ODM_RTL8821 | ODM_RTL8881A)) {\r
                        s1Byte Pout = -6;\r
-                               \r
-                       switch(LNA_idx)\r
-                               {\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
+\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
+\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(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
-               //\r
-               // (3) Get Signal Quality (EVM)\r
-               //\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
-                       {\r
-                               SQ = odm_SQ_process_patch_RT_CID_819x_Lenovo(pDM_Odm,isCCKrate,PWDB_ALL,0,0);\r
-                       }\r
-                       else if(pPhyInfo->RxPWDBAll > 40 && !pDM_Odm->bInHctTest)\r
-                       {\r
+#endif\r
+               /*(3) Get Signal Quality (EVM)*/\r
+               if (pPktinfo->bPacketMatchBSSID) {\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
-                       }\r
-                       else\r
-                       {                                               \r
+                       } else {\r
                                SQ_rpt = pPhyStaRpt->pwdb_all;\r
-                                       \r
-                               if(SQ_rpt > 64)\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
+                                       SQ = ((64 - SQ_rpt) * 100) / 44;\r
                        }\r
-                       \r
-                       //DbgPrint("cck SQ = %d\n", SQ);\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
-       else //is OFDM rate\r
-       {\r
+       } else {\r
+               /*is OFDM rate*/\r
                pDM_Odm->PhyDbgInfo.NumQryPhyStatusOFDM++;\r
 \r
-               // \r
-               // (1)Get RSSI for OFDM 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
-                       //DbgPrint("pDM_Odm->RFPathRxEnable = %x\n", pDM_Odm->RFPathRxEnable);\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
-                       {                               \r
                                rf_rx_num++;\r
-                       }\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
-                               rx_pwr[i] = (pPhyStaRpt->gain_trsw[i]&0x7F) - 110;\r
-                       //else\r
-                       //      rx_pwr[i] = ((pPhyStaRpt->gain_trsw[i]& 0x3F)*2) - 110;  //OLD FORMULA\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
+#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
                        pPhyInfo->RxPwr[i] = rx_pwr[i];\r
-               #endif  \r
+#endif\r
 \r
                        /* Translate DBM to percentage. */\r
-                       RSSI = odm_QueryRxPwrPercentage(rx_pwr[i]);     \r
-               \r
+                       RSSI = odm_QueryRxPwrPercentage(rx_pwr[i]);\r
+\r
                        total_rssi += RSSI;\r
-                       //RT_DISP(FRX, RX_PHY_SS, ("RF-%d RXPWR=%x RSSI=%d\n", i, rx_pwr[i], 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
-               \r
-                       pPhyInfo->RxMIMOSignalStrength[i] =(u1Byte) RSSI;\r
 \r
-               #if (DM_ODM_SUPPORT_TYPE &  (ODM_WIN|ODM_CE|ODM_AP|ODM_ADSL))\r
-                       //Get Rx snr value in DB                \r
-                       pPhyInfo->RxSNR[i] = pDM_Odm->PhyDbgInfo.RxSNRdB[i] = pPhyStaRpt->rxsnr[i]/2;\r
-               #endif\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
-                       //\r
-                       // (2) CFO_short  & CFO_tail\r
-                       //                      \r
-                       pPhyInfo->Cfo_short[i] = odm_Cfo( (pPhyStaRpt->cfosho[i]) );\r
-                       pPhyInfo->Cfo_tail[i] = odm_Cfo( (pPhyStaRpt->cfotail[i]) );\r
+\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
 \r
                        /* Record Signal Strength for next packet */\r
-                       //if(pPktinfo->bPacketMatchBSSID)\r
-                       {                               \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
+                       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
-               \r
-               //\r
-               // (3)PWDB, Average PWDB cacluated 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)) && (!pDM_Odm->bIsMPChip))\r
-                       rx_pwr_all = (pPhyStaRpt->pwdb_all& 0x7f) -110;\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
+                       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
-               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
+               /*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
+#endif\r
 \r
-               //DbgPrint("OFDM: pPhyInfo->RxPWDBAll = %d, pPhyInfo->RxMIMOSignalStrength[0] = %d, pPhyInfo->RxMIMOSignalStrength[1] = %d\n",\r
-               //      pPhyInfo->RxPWDBAll, pPhyInfo->RxMIMOSignalStrength[0], pPhyInfo->RxMIMOSignalStrength[1]);\r
-       \r
-       \r
-               if((pDM_Odm->SupportPlatform == ODM_WIN) &&(pDM_Odm->PatchID==19))\r
-               {\r
-                       //do nothing    \r
-               }\r
-               else\r
-               {       //pMgntInfo->CustomerID != RT_CID_819x_Lenovo\r
-                       //\r
-                       // (4)EVM of OFDM rate\r
-                       //\r
-                       if(     (pPktinfo->DataRate>=DESC_RATEMCS8) &&\r
-                               (pPktinfo->DataRate <=DESC_RATEMCS15))\r
-                               Max_spatial_stream = 2;\r
-                       else if(        (pPktinfo->DataRate>=DESC_RATEVHTSS2MCS0) &&\r
-                               (pPktinfo->DataRate <=DESC_RATEVHTSS2MCS9))\r
-                               Max_spatial_stream = 2;\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
+                               Max_spatial_stream = 1;\r
 \r
-                       //if(pPktinfo->bPacketMatchBSSID)\r
-                       {\r
-                               //DbgPrint("pPktinfo->DataRate = %d\n", pPktinfo->DataRate);\r
+                       if (pPktinfo->bPacketMatchBSSID) {\r
+                               /*DbgPrint("pPktinfo->DataRate = %d\n", pPktinfo->DataRate);*/\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
-                                       //\r
-                                       // 2013/09/02 MH According to 8812AU test, when use RX evm the value sometimes\r
-                                       // will be incorrect and 1SS-MCS-0-7 always incorrect. Only use LSIG the evm value\r
-                                       // seems ok. This seems BB bug, we need use another way to display better SQ.\r
-                                       //\r
-                                       //if (pPktinfo->DataRate>=DESC8812_RATE6M && pPktinfo->DataRate<=DESC8812_RATE54M)\r
-                                       {\r
-                                               \r
-                                               if(i==ODM_RF_PATH_A )\r
-                                               {\r
-                                                       EVM = odm_EVMdbToPercentage( (pPhyStaRpt->sigevm ));    //dbm\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 >= DESC_RATE6M && pPktinfo->DataRate <= DESC_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
-                                       }\r
-#if 0\r
-                                       else\r
-                                       {\r
-                                               if (pPhyStaRpt->rxevm[i] == -128)\r
-                                               {\r
-                                                       pPhyStaRpt->rxevm[i] = -25;\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
-                                               EVM = odm_EVMdbToPercentage( (pPhyStaRpt->rxevm[i] ));  //dbm\r
                                        }\r
-#endif\r
-                                       EVMdbm = odm_EVMdbm_JaguarSeries(pPhyStaRpt->rxevm[i]);\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_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) // Fill value in RFD, Get the first spatial stream only\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
+                                               }\r
                                                pPhyInfo->RxMIMOSignalQuality[i] = EVM;\r
                                                pPhyInfo->RxMIMOEVMdbm[i] = EVMdbm;\r
                                        }\r
@@ -1386,49 +1474,60 @@ odm_RxPhyStatusJaguarSeries_Parsing(
                }\r
 \r
                ODM_ParsingCFO(pDM_Odm, pPktinfo, pPhyStaRpt->cfotail);\r
-               \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
+/*     //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
-       {               \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 = (u1Byte)(SignalScaleMapping(pDM_Odm->Adapter, PWDB_ALL));//PWDB_ALL;\r
+               /*2012/01/12 MH Use customeris signal strength from HalComRxdDesc.c/*/\r
+               pPhyInfo->SignalStrength = (u1Byte)(SignalScaleMapping(pDM_Odm->Adapter, PWDB_ALL));/*PWDB_ALL;*/\r
 #else\r
-               pPhyInfo->SignalStrength = (u1Byte)(odm_SignalScaleMapping(pDM_Odm, PWDB_ALL));//PWDB_ALL;\r
+               pPhyInfo->SignalStrength = (u1Byte)(odm_SignalScaleMapping(pDM_Odm, PWDB_ALL));/*PWDB_ALL;*/\r
 #endif\r
-       }\r
-       else\r
-       {       \r
-               if (rf_rx_num != 0)\r
-               {                       \r
+       } else {\r
+               if (rf_rx_num != 0) {\r
 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
-                       // 2012/01/12 MH Use customeris signal strength from HalComRxdDesc.c/   \r
-                       pPhyInfo->SignalStrength = (u1Byte)(SignalScaleMapping(pDM_Odm->Adapter, total_rssi/=rf_rx_num));//PWDB_ALL;\r
+                       /*2012/01/12 MH Use customeris signal strength from HalComRxdDesc.c/*/\r
+                       pPhyInfo->SignalStrength = (u1Byte)(SignalScaleMapping(pDM_Odm->Adapter, total_rssi /= rf_rx_num)); /*PWDB_ALL;*/\r
 #else\r
-                       pPhyInfo->SignalStrength = (u1Byte)(odm_SignalScaleMapping(pDM_Odm, total_rssi/=rf_rx_num));\r
+                       pPhyInfo->SignalStrength = (u1Byte)(odm_SignalScaleMapping(pDM_Odm, total_rssi /= rf_rx_num));\r
 #endif\r
                }\r
        }\r
 #endif\r
        pDM_Odm->RxPWDBAve = pDM_Odm->RxPWDBAve + pPhyInfo->RxPWDBAll;\r
-       \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
-\r
-       //DbgPrint("pPhyStaRpt->antidx_anta = %d, pPhyStaRpt->antidx_antb = %d, pPhyStaRpt->resvd_1 = %d", \r
-       //      pPhyStaRpt->antidx_anta, pPhyStaRpt->antidx_antb, pPhyStaRpt->resvd_1);\r
-\r
-       //DbgPrint("----------------------------\n");\r
-       //DbgPrint("pPktinfo->StationID=%d, pPktinfo->DataRate=0x%x\n",pPktinfo->StationID, pPktinfo->DataRate);\r
-       //DbgPrint("pPhyStaRpt->gain_trsw[0]=0x%x, pPhyStaRpt->gain_trsw[1]=0x%x, pPhyStaRpt->pwdb_all=0x%x\n",\r
-       //                      pPhyStaRpt->gain_trsw[0],pPhyStaRpt->gain_trsw[1], pPhyStaRpt->pwdb_all);\r
-       //DbgPrint("pPhyInfo->RxMIMOSignalStrength[0]=%d, pPhyInfo->RxMIMOSignalStrength[1]=%d, RxPWDBAll=%d\n",\r
-       //                      pPhyInfo->RxMIMOSignalStrength[0], pPhyInfo->RxMIMOSignalStrength[1], pPhyInfo->RxPWDBAll);\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
+\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
@@ -1457,7 +1556,7 @@ odm_Process_RSSIForDM(
        u4Byte                  Weighting=0;\r
        PSTA_INFO_T             pEntry;\r
 \r
-       if(pPktinfo->StationID == 0xFF)\r
+       if (pPktinfo->StationID >= ODM_ASSOCIATE_ENTRY_NUM)\r
                return;\r
 \r
 #if (RTL8723B_SUPPORT == 1)||(RTL8821A_SUPPORT == 1)\r
@@ -1490,15 +1589,8 @@ odm_Process_RSSIForDM(
        if(pPktinfo->bPacketBeacon)\r
                pDM_Odm->PhyDbgInfo.NumQryBeaconPkt++;\r
        \r
-       isCCKrate = (pPktinfo->DataRate <= DESC_RATE11M)?TRUE :FALSE;\r
+       isCCKrate = (pPktinfo->DataRate <= ODM_RATE11M )?TRUE :FALSE;\r
        pDM_Odm->RxRate = pPktinfo->DataRate;\r
-       /*\r
-       if(!isCCKrate)\r
-       {\r
-               DbgPrint("OFDM: pPktinfo->StationID=%d, isCCKrate=%d, pPhyInfo->RxPWDBAll=%d\n",\r
-                       pPktinfo->StationID, isCCKrate, pPhyInfo->RxPWDBAll);\r
-       }\r
-       */\r
 \r
        //--------------Statistic for antenna/path diversity------------------\r
        if(pDM_Odm->SupportAbility & ODM_BB_ANT_DIV)\r
@@ -1507,22 +1599,12 @@ odm_Process_RSSIForDM(
                        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
-               #if (RTL8812A_SUPPORT == 1)\r
-               if(pDM_Odm->SupportICType == ODM_RTL8812)\r
-               {\r
-                       pPATHDIV_T      pDM_PathDiv = &pDM_Odm->DM_PathDiv;\r
-                       if(pPktinfo->bPacketToSelf || pPktinfo->bPacketMatchBSSID)\r
-                       {\r
-                               if(pPktinfo->DataRate > DESC_RATE11M)\r
-                                       ODM_PathStatistics_8812A(pDM_Odm, pPktinfo->StationID, pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_A], \r
-                                                                                                                                             pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_B]);\r
-                       }\r
-               }\r
-               #endif\r
+               phydm_process_rssi_for_path_div(pDM_Odm,pPhyInfo,pPktinfo);\r
        }\r
-\r
+       #endif\r
        //-----------------Smart Antenna Debug Message------------------//\r
        \r
        UndecoratedSmoothedCCK =  pEntry->rssi_stat.UndecoratedSmoothedCCK;\r
@@ -1710,10 +1792,12 @@ ODM_PhyStatusQuery_92CSeries(
 }\r
 #endif\r
 \r
-#if(ODM_IC_11AC_SERIES_SUPPORT == 1)\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
@@ -1722,7 +1806,6 @@ ODM_PhyStatusQuery_JaguarSeries(
        IN              PODM_PACKET_INFO_T                      pPktinfo\r
        )\r
 {\r
-\r
        odm_RxPhyStatusJaguarSeries_Parsing(\r
                                                        pDM_Odm,\r
                                                        pPhyInfo,\r
@@ -1730,11 +1813,12 @@ ODM_PhyStatusQuery_JaguarSeries(
                                                        pPktinfo);\r
        \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
-\r
 VOID\r
 ODM_PhyStatusQuery(\r
        IN OUT  PDM_ODM_T                                       pDM_Odm,\r
@@ -1743,12 +1827,13 @@ ODM_PhyStatusQuery(
        IN              PODM_PACKET_INFO_T                      pPktinfo\r
        )\r
 {\r
-#if(ODM_IC_11AC_SERIES_SUPPORT == 1)\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 ==1)\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
@@ -1782,7 +1867,10 @@ ODM_ConfigRFWithHeaderFile(
        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
@@ -1790,6 +1878,8 @@ ODM_ConfigRFWithHeaderFile(
                                ("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 (RTL8723A_SUPPORT == 1)\r
        if (pDM_Odm->SupportICType == ODM_RTL8723A)\r
        {\r
@@ -1799,57 +1889,58 @@ ODM_ConfigRFWithHeaderFile(
                }\r
        }\r
 #endif\r
-\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
-       }\r
-#endif\r
-\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
-                       {\r
+                       if(eRFPath == ODM_RF_PATH_A){\r
                                READ_AND_CONFIG_MP(8812A,_RadioA);\r
                        }\r
-                       else if(eRFPath == ODM_RF_PATH_B)\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
+                       #endif                          \r
                        READ_AND_CONFIG_MP(8812A,_TXPWR_LMT);\r
                }\r
        }\r
 #endif\r
-\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
-                       {\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
                        \r
+                       \r
+                       \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
-                       } else {\r
-                               READ_AND_CONFIG_MP(8821A,_TXPWR_LMT_8821A);                     \r
+                       } \r
+                       else {\r
+                               #if (DM_ODM_SUPPORT_TYPE &  ODM_WIN)    \r
+                               PADAPTER                Adapter = pDM_Odm->Adapter;\r
+                               PMGNT_INFO              pMgntInfo = &(Adapter->MgntInfo);       \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_8821AE_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
@@ -1859,12 +1950,10 @@ ODM_ConfigRFWithHeaderFile(
 #if (RTL8723B_SUPPORT == 1)\r
        if (pDM_Odm->SupportICType == ODM_RTL8723B)\r
        {\r
-               if(ConfigType == CONFIG_RF_RADIO) {\r
+               if(ConfigType == CONFIG_RF_RADIO)\r
                        READ_AND_CONFIG_MP(8723B,_RadioA);\r
-               }\r
-               else if(ConfigType == CONFIG_RF_TXPWR_LMT) {\r
+               else if(ConfigType == CONFIG_RF_TXPWR_LMT)\r
                        READ_AND_CONFIG_MP(8723B,_TXPWR_LMT);\r
-               }\r
        }\r
 #endif\r
 \r
@@ -1877,23 +1966,87 @@ ODM_ConfigRFWithHeaderFile(
                        else if(eRFPath == ODM_RF_PATH_B)\r
                                READ_AND_CONFIG_MP(8192E,_RadioB);\r
                }\r
-               else if(ConfigType == CONFIG_RF_TXPWR_LMT) {\r
+               else if(ConfigType == CONFIG_RF_TXPWR_LMT)\r
                        READ_AND_CONFIG_MP(8192E,_TXPWR_LMT);\r
-               }\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 (RTL8814A_SUPPORT == 1)\r
        if (pDM_Odm->SupportICType == ODM_RTL8814A)\r
        {\r
-               /*\r
-               if(ConfigType == CONFIG_RF_TXPWR_LMT) {\r
-                       READ_AND_CONFIG(8813A,_TXPWR_LMT);\r
-               }\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
-       \r
+\r
+//1 New ICs (WIN only)\r
+#if (DM_ODM_SUPPORT_TYPE &  ODM_WIN)\r
+#if (RTL8821B_SUPPORT == 1)\r
+       if (pDM_Odm->SupportICType == ODM_RTL8821B)\r
+       {\r
+               if (ConfigType == CONFIG_RF_RADIO) {\r
+                       if (eRFPath == ODM_RF_PATH_A)\r
+                               READ_AND_CONFIG(8821B, _RadioA);\r
+               } else if (ConfigType == CONFIG_RF_TXPWR_LMT)\r
+                       READ_AND_CONFIG(8821B, _TXPWR_LMT);\r
+       }\r
+#endif\r
+#if (RTL8822B_SUPPORT == 1)\r
+               if (pDM_Odm->SupportICType == ODM_RTL8822B)\r
+               {\r
+                       if(ConfigType == CONFIG_RF_RADIO) {\r
+                               if(eRFPath == ODM_RF_PATH_A)\r
+                                       READ_AND_CONFIG_TC(8822B,_RadioA);\r
+                               else if(eRFPath == ODM_RF_PATH_B)\r
+                                       READ_AND_CONFIG_TC(8822B,_RadioB);\r
+                       }       \r
+               }\r
+#endif\r
+#if (RTL8703B_SUPPORT == 1)\r
+               if (pDM_Odm->SupportICType == ODM_RTL8703B)\r
+               {\r
+                       if(ConfigType == CONFIG_RF_RADIO) {\r
+                               if(eRFPath == ODM_RF_PATH_A)\r
+                                       READ_AND_CONFIG_TC(8703B,_RadioA);\r
+                       }       \r
+               }\r
+#endif\r
+#if ((DEV_BUS_TYPE == RT_USB_INTERFACE) || (DEV_BUS_TYPE == RT_SDIO_INTERFACE))\r
+#if (RTL8188F_SUPPORT == 1)\r
+               if (pDM_Odm->SupportICType == ODM_RTL8188F)\r
+               {\r
+                       if(ConfigType == CONFIG_RF_RADIO) {\r
+                               if(eRFPath == ODM_RF_PATH_A)\r
+                                       READ_AND_CONFIG_TC(8188F,_RadioA);\r
+                       }       \r
+               }\r
+#endif\r
+#endif\r
+#endif//(DM_ODM_SUPPORT_TYPE &  ODM_WIN)\r
+\r
        return HAL_STATUS_SUCCESS;\r
 }\r
 \r
@@ -1907,22 +2060,23 @@ ODM_ConfigRFWithTxPwrTrackHeaderFile(
        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
-       if(0)\r
-       {\r
-       }\r
-#if (RTL8821A_SUPPORT == 1) \r
-       else if(pDM_Odm->SupportICType == ODM_RTL8821)\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\r
-                       READ_AND_CONFIG_MP(8821A,_TxPowerTrack_PCIE);\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 == 1)\r
-       else if(pDM_Odm->SupportICType == ODM_RTL8812)\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
@@ -1934,18 +2088,20 @@ ODM_ConfigRFWithTxPwrTrackHeaderFile(
                }\r
                \r
        }\r
-#endif\r
-#if (RTL8192E_SUPPORT == 1) \r
-       else if(pDM_Odm->SupportICType == ODM_RTL8192E)\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 RTL8723B_SUPPORT   \r
-       else if(pDM_Odm->SupportICType == ODM_RTL8723B)\r
+       if(pDM_Odm->SupportICType == ODM_RTL8723B)\r
        {\r
                if (pDM_Odm->SupportInterface == ODM_ITRF_PCIE)\r
                        READ_AND_CONFIG_MP(8723B,_TxPowerTrack_PCIE);\r
@@ -1956,16 +2112,54 @@ ODM_ConfigRFWithTxPwrTrackHeaderFile(
        }\r
 #endif \r
 #if RTL8188E_SUPPORT   \r
-       else if(pDM_Odm->SupportICType == ODM_RTL8188E)\r
+       if(pDM_Odm->SupportICType == ODM_RTL8188E)\r
        {\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
+#endif\r
+#endif//(DM_ODM_SUPPORT_TYPE !=  ODM_AP)\r
+\r
+//1 All platforms support\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\r
-                       READ_AND_CONFIG_MP(8188E,_TxPowerTrack_PCIE);\r
+                       READ_AND_CONFIG_MP(8814A,_TxPowerTrack);\r
        }\r
+#endif \r
+\r
+//1 New ICs (WIN only)\r
+#if (DM_ODM_SUPPORT_TYPE &  ODM_WIN)\r
+#if RTL8821B_SUPPORT\r
+       if(pDM_Odm->SupportICType == ODM_RTL8821B)\r
+                       READ_AND_CONFIG(8821B,_TxPowerTrack);                   \r
+#endif \r
+#if RTL8822B_SUPPORT\r
+       if(pDM_Odm->SupportICType == ODM_RTL8822B)\r
+                       READ_AND_CONFIG_TC(8822B,_TxPowerTrack);                        \r
+#endif \r
+#if RTL8703B_SUPPORT\r
+       if(pDM_Odm->SupportICType == ODM_RTL8703B)\r
+                       READ_AND_CONFIG_TC(8703B,_TxPowerTrack_PCIE);                   \r
+#endif \r
+\r
+#if ((DEV_BUS_TYPE == RT_USB_INTERFACE) || (DEV_BUS_TYPE == RT_SDIO_INTERFACE))\r
+#if RTL8188F_SUPPORT\r
+       if(pDM_Odm->SupportICType == ODM_RTL8188F)\r
+                       READ_AND_CONFIG_TC(8188F,_TxPowerTrack_PCIE);                   \r
+#endif \r
 #endif\r
+#endif//(DM_ODM_SUPPORT_TYPE &  ODM_WIN)\r
+\r
 \r
        return HAL_STATUS_SUCCESS;\r
 }\r
@@ -1976,75 +2170,43 @@ ODM_ConfigBBWithHeaderFile(
        IN      ODM_BB_Config_Type              ConfigType\r
        )\r
 {\r
-#if (DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_WIN))\r
+#if (DM_ODM_SUPPORT_TYPE &  ODM_WIN)   \r
        PADAPTER                Adapter = pDM_Odm->Adapter;\r
-#if (DM_ODM_SUPPORT_TYPE &  ODM_WIN)\r
        PMGNT_INFO              pMgntInfo = &(Adapter->MgntInfo);       \r
 #endif\r
-#endif\r
-       \r
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, \r
-                               ("===>ODM_ConfigBBWithHeaderFile (%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 (RTL8723A_SUPPORT == 1) \r
-    if(pDM_Odm->SupportICType == ODM_RTL8723A)\r
+       if(pDM_Odm->SupportICType == ODM_RTL8723A)\r
        {\r
-               if(ConfigType == CONFIG_BB_PHY_REG)\r
-               {\r
+               if(ConfigType == CONFIG_BB_PHY_REG){\r
                        READ_AND_CONFIG_MP(8723A,_PHY_REG);\r
-               }\r
-               else if(ConfigType == CONFIG_BB_AGC_TAB)\r
-               {\r
+               }else if(ConfigType == CONFIG_BB_AGC_TAB){\r
                        READ_AND_CONFIG_MP(8723A,_AGC_TAB);\r
-               }\r
+               }               \r
        }               \r
 #endif\r
-\r
-#if (RTL8188E_SUPPORT == 1)\r
-    if(pDM_Odm->SupportICType == ODM_RTL8188E)\r
-       {\r
-               if(ConfigType == CONFIG_BB_PHY_REG)\r
-               {\r
-                               READ_AND_CONFIG_MP(8188E,_PHY_REG);\r
-               }\r
-               else if(ConfigType == CONFIG_BB_AGC_TAB)\r
-               {\r
-                               READ_AND_CONFIG_MP(8188E,_AGC_TAB);\r
-               }\r
-               else if(ConfigType == CONFIG_BB_PHY_REG_PG)\r
-               {\r
-                       READ_AND_CONFIG_MP(8188E,_PHY_REG_PG);\r
-               }\r
-       }\r
-#endif\r
-\r
 #if (RTL8812A_SUPPORT == 1) \r
        if(pDM_Odm->SupportICType == ODM_RTL8812)\r
        {\r
-               if(ConfigType == CONFIG_BB_PHY_REG)\r
-               {\r
+               if(ConfigType == CONFIG_BB_PHY_REG){\r
                        READ_AND_CONFIG_MP(8812A,_PHY_REG);\r
-               }\r
-               else if(ConfigType == CONFIG_BB_AGC_TAB)\r
-               {\r
+               }else if(ConfigType == CONFIG_BB_AGC_TAB){\r
                        READ_AND_CONFIG_MP(8812A,_AGC_TAB);\r
                }\r
                else if(ConfigType == CONFIG_BB_PHY_REG_PG)\r
                {\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
+                       #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
-#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
-               {\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
@@ -2054,80 +2216,142 @@ ODM_ConfigBBWithHeaderFile(
                        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
-\r
 #if (RTL8821A_SUPPORT == 1) \r
        if(pDM_Odm->SupportICType == ODM_RTL8821)\r
        {\r
-               if(ConfigType == CONFIG_BB_PHY_REG)\r
-               {\r
+               if(ConfigType == CONFIG_BB_PHY_REG){\r
                        READ_AND_CONFIG_MP(8821A,_PHY_REG);\r
-               }\r
-               else if(ConfigType == CONFIG_BB_AGC_TAB)\r
-               {\r
+               }else if(ConfigType == CONFIG_BB_AGC_TAB){\r
                        READ_AND_CONFIG_MP(8821A,_AGC_TAB);\r
-               }\r
-               else if(ConfigType == CONFIG_BB_PHY_REG_PG)\r
-               {\r
+               }else if(ConfigType == CONFIG_BB_PHY_REG_PG){\r
                        READ_AND_CONFIG_MP(8821A,_PHY_REG_PG);\r
-               }\r
-       }\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 (RTL8723B_SUPPORT == 1)\r
-    if(pDM_Odm->SupportICType == ODM_RTL8723B)\r
+       if(pDM_Odm->SupportICType == ODM_RTL8723B)\r
        {\r
-\r
-               if(ConfigType == CONFIG_BB_PHY_REG)\r
-               {\r
+               if(ConfigType == CONFIG_BB_PHY_REG){\r
                        READ_AND_CONFIG_MP(8723B,_PHY_REG);\r
-               }\r
-               else if(ConfigType == CONFIG_BB_AGC_TAB)\r
-               {\r
+               }else if(ConfigType == CONFIG_BB_AGC_TAB){\r
                        READ_AND_CONFIG_MP(8723B,_AGC_TAB);\r
-               }\r
-               else if(ConfigType == CONFIG_BB_PHY_REG_PG)\r
-               {\r
+               }else if(ConfigType == CONFIG_BB_PHY_REG_PG){\r
                        READ_AND_CONFIG_MP(8723B,_PHY_REG_PG);\r
                }\r
        }\r
 #endif\r
 #if (RTL8192E_SUPPORT == 1)\r
-    if(pDM_Odm->SupportICType == ODM_RTL8192E)\r
+       if(pDM_Odm->SupportICType == ODM_RTL8192E)\r
        {\r
-\r
-               if(ConfigType == CONFIG_BB_PHY_REG)\r
-               {\r
+               if(ConfigType == CONFIG_BB_PHY_REG){\r
                        READ_AND_CONFIG_MP(8192E,_PHY_REG);\r
-               }\r
-               else if(ConfigType == CONFIG_BB_AGC_TAB)\r
-               {\r
+               }else if(ConfigType == CONFIG_BB_AGC_TAB){\r
                        READ_AND_CONFIG_MP(8192E,_AGC_TAB);\r
-               }\r
-               else if(ConfigType == CONFIG_BB_PHY_REG_PG)\r
-               {\r
+               }else if(ConfigType == CONFIG_BB_PHY_REG_PG){\r
                        READ_AND_CONFIG_MP(8192E,_PHY_REG_PG);\r
                }\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 (RTL8814A_SUPPORT == 1)\r
-    if(pDM_Odm->SupportICType == ODM_RTL8814A)\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
 \r
-               if(ConfigType == CONFIG_BB_PHY_REG)\r
-               {\r
-                       READ_AND_CONFIG(8813A,_PHY_REG);\r
+//1 New ICs (WIN only)\r
+#if (DM_ODM_SUPPORT_TYPE &  ODM_WIN)\r
+#if (RTL8821B_SUPPORT == 1) \r
+       if(pDM_Odm->SupportICType == ODM_RTL8821B)\r
+       {\r
+               if (ConfigType == CONFIG_BB_PHY_REG) {\r
+                       READ_AND_CONFIG(8821B,_PHY_REG);\r
+               } else if (ConfigType == CONFIG_BB_AGC_TAB) { \r
+                   READ_AND_CONFIG(8821B,_AGC_TAB);\r
+               } else if (ConfigType == CONFIG_BB_PHY_REG_PG) {\r
+                       READ_AND_CONFIG(8821B,_PHY_REG_PG);\r
                }\r
+       }               \r
+#endif\r
+#if (RTL8822B_SUPPORT == 1)\r
+       if(pDM_Odm->SupportICType == ODM_RTL8822B)\r
+       {\r
+               if(ConfigType == CONFIG_BB_PHY_REG)\r
+                       READ_AND_CONFIG_TC(8822B,_PHY_REG);\r
                else if(ConfigType == CONFIG_BB_AGC_TAB)\r
-               {\r
-                       READ_AND_CONFIG(8813A,_AGC_TAB);\r
-               }\r
+                       READ_AND_CONFIG_TC(8822B,_AGC_TAB);\r
                else if(ConfigType == CONFIG_BB_PHY_REG_PG)\r
-               {\r
-                       //READ_AND_CONFIG(8813A,_PHY_REG_PG);\r
-               }\r
+                       READ_AND_CONFIG_TC(8822B,_PHY_REG_PG);\r
+               else if(ConfigType == CONFIG_BB_PHY_REG_MP)\r
+                       READ_AND_CONFIG_TC(8822B,_PHY_REG_MP);\r
        }\r
 #endif\r
+#if (RTL8703B_SUPPORT == 1)\r
+       if(pDM_Odm->SupportICType == ODM_RTL8703B)\r
+       {\r
+               if(ConfigType == CONFIG_BB_PHY_REG)\r
+                       READ_AND_CONFIG_TC(8703B,_PHY_REG);\r
+               else if(ConfigType == CONFIG_BB_AGC_TAB)\r
+                       READ_AND_CONFIG_TC(8703B,_AGC_TAB);\r
+               else if(ConfigType == CONFIG_BB_PHY_REG_PG)\r
+                       READ_AND_CONFIG_TC(8703B,_PHY_REG_PG);\r
+       }\r
+#endif\r
+#if ((DEV_BUS_TYPE == RT_USB_INTERFACE) || (DEV_BUS_TYPE == RT_SDIO_INTERFACE))\r
+#if (RTL8188F_SUPPORT == 1)\r
+       if(pDM_Odm->SupportICType == ODM_RTL8188F)\r
+       {\r
+               if(ConfigType == CONFIG_BB_PHY_REG)\r
+                       READ_AND_CONFIG_TC(8188F,_PHY_REG);\r
+               else if(ConfigType == CONFIG_BB_AGC_TAB)\r
+                       READ_AND_CONFIG_TC(8188F,_AGC_TAB);\r
+               else if(ConfigType == CONFIG_BB_PHY_REG_PG)\r
+                       READ_AND_CONFIG_TC(8188F,_PHY_REG_PG);\r
+       }\r
+#endif\r
+#endif\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
+#endif//(DM_ODM_SUPPORT_TYPE &  ODM_WIN)\r
+\r
        return HAL_STATUS_SUCCESS; \r
 }                 \r
 \r
@@ -2136,57 +2360,89 @@ ODM_ConfigMACWithHeaderFile(
        IN      PDM_ODM_T       pDM_Odm\r
        )\r
 {\r
-#if (DM_ODM_SUPPORT_TYPE &  (ODM_CE|ODM_WIN))  \r
+#if (DM_ODM_SUPPORT_TYPE &  ODM_WIN)   \r
        PADAPTER                Adapter = pDM_Odm->Adapter;\r
+       PMGNT_INFO              pMgntInfo = &(Adapter->MgntInfo);       \r
 #endif\r
-       u1Byte result = HAL_STATUS_SUCCESS;\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
+       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 initialization in these ICs\r
+#if (DM_ODM_SUPPORT_TYPE !=  ODM_AP)   \r
 #if (RTL8723A_SUPPORT == 1)\r
-       if (pDM_Odm->SupportICType == ODM_RTL8723A)\r
-       {\r
+       if (pDM_Odm->SupportICType == ODM_RTL8723A){\r
                READ_AND_CONFIG_MP(8723A,_MAC_REG);\r
        }\r
 #endif\r
-#if (RTL8188E_SUPPORT == 1)  \r
-       if (pDM_Odm->SupportICType == ODM_RTL8188E)\r
-       {\r
-               READ_AND_CONFIG_MP(8188E,_MAC_REG);\r
-       }\r
-#endif\r
 #if (RTL8812A_SUPPORT == 1)\r
-       if (pDM_Odm->SupportICType == ODM_RTL8812)\r
-       {\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
-       {\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 (RTL8723B_SUPPORT == 1)  \r
-       if (pDM_Odm->SupportICType == ODM_RTL8723B)\r
-       {\r
+       if (pDM_Odm->SupportICType == ODM_RTL8723B){\r
                READ_AND_CONFIG_MP(8723B,_MAC_REG);\r
        }\r
 #endif\r
 #if (RTL8192E_SUPPORT == 1)  \r
-       if (pDM_Odm->SupportICType == ODM_RTL8192E)\r
-       {\r
+       if (pDM_Odm->SupportICType == ODM_RTL8192E){\r
                READ_AND_CONFIG_MP(8192E,_MAC_REG);\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
+               READ_AND_CONFIG_MP(8188E,_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
+\r
+//1 New ICs (WIN only)\r
+#if (DM_ODM_SUPPORT_TYPE &  ODM_WIN)\r
+#if (RTL8821B_SUPPORT == 1)\r
+       if (pDM_Odm->SupportICType == ODM_RTL8821B){\r
+               READ_AND_CONFIG(8821B,_MAC_REG);\r
+       }\r
+#endif\r
+#if (RTL8822B_SUPPORT == 1)  \r
+       if (pDM_Odm->SupportICType == ODM_RTL8822B)\r
+               READ_AND_CONFIG_TC(8822B,_MAC_REG);\r
+#endif\r
+#if (RTL8703B_SUPPORT == 1)  \r
+       if (pDM_Odm->SupportICType == ODM_RTL8703B)\r
+               READ_AND_CONFIG_TC(8703B,_MAC_REG);\r
+#endif\r
 \r
-       return result;\r
+#if ((DEV_BUS_TYPE == RT_USB_INTERFACE) || (DEV_BUS_TYPE == RT_SDIO_INTERFACE))\r
+#if (RTL8188F_SUPPORT == 1)  \r
+       if (pDM_Odm->SupportICType == ODM_RTL8188F)\r
+               READ_AND_CONFIG_TC(8188F,_MAC_REG);\r
+#endif\r
+#endif\r
+#if (RTL8195A_SUPPORT == 1)  \r
+       if (pDM_Odm->SupportICType == ODM_RTL8195A)\r
+               READ_AND_CONFIG_MP(8195A,_MAC_REG);\r
+#endif\r
+#endif /*#if (DM_ODM_SUPPORT_TYPE &  ODM_WIN)*/\r
+\r
+       return HAL_STATUS_SUCCESS;    \r
 } \r
 \r
 HAL_STATUS\r
@@ -2197,97 +2453,72 @@ ODM_ConfigFWWithHeaderFile(
        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
-               {\r
+               if (ConfigType == CONFIG_FW_NIC){\r
                        READ_FIRMWARE_MP(8188E,_FW_NIC_T);\r
-               }\r
-               else if (ConfigType == CONFIG_FW_WoWLAN)\r
-               {\r
+               }else if (ConfigType == CONFIG_FW_WoWLAN){\r
                        READ_FIRMWARE_MP(8188E,_FW_WoWLAN_T);\r
-               }\r
-               else if(ConfigType == CONFIG_FW_NIC_2)\r
-               {\r
+               }else if(ConfigType == CONFIG_FW_NIC_2){\r
                        READ_FIRMWARE_MP(8188E,_FW_NIC_S);\r
-               }\r
-               else if (ConfigType == CONFIG_FW_WoWLAN_2)\r
-               {\r
+               }else if (ConfigType == CONFIG_FW_WoWLAN_2){\r
                        READ_FIRMWARE_MP(8188E,_FW_WoWLAN_S);\r
                }\r
        #else\r
                if (ConfigType == CONFIG_FW_NIC)\r
-               {\r
                        READ_FIRMWARE_MP(8188E,_FW_NIC);\r
-               }\r
                else if (ConfigType == CONFIG_FW_WoWLAN)\r
-               {\r
                        READ_FIRMWARE_MP(8188E,_FW_WoWLAN);\r
-               }\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
-               {\r
+               if (ConfigType == CONFIG_FW_NIC){\r
                        READ_FIRMWARE_MP(8723B,_FW_NIC);\r
-               }\r
-               else if (ConfigType == CONFIG_FW_WoWLAN)\r
-               {\r
+               }else if (ConfigType == CONFIG_FW_WoWLAN){\r
                        READ_FIRMWARE_MP(8723B,_FW_WoWLAN);\r
-               }\r
-#ifdef CONFIG_AP_WOWLAN\r
-               else if (ConfigType == CONFIG_FW_AP_WoWLAN)\r
-               {\r
+               #ifdef CONFIG_AP_WOWLAN\r
+               }else if (ConfigType == CONFIG_FW_AP_WoWLAN){\r
                        READ_FIRMWARE(8723B,_FW_AP_WoWLAN);\r
-               }\r
-#endif\r
-               else if (ConfigType == CONFIG_FW_BT)\r
-               {\r
+               #endif\r
+               }else if (ConfigType == CONFIG_FW_BT){\r
                        READ_FIRMWARE_MP(8723B,_FW_BT);\r
-               }\r
-               else if (ConfigType == CONFIG_FW_MP)\r
-               {\r
+               #if (DM_ODM_SUPPORT_TYPE == ODM_CE)\r
+               }else if (ConfigType == CONFIG_FW_MP){\r
                        READ_FIRMWARE_MP(8723B,_FW_MP);\r
+               #endif\r
                }\r
        }\r
-#endif\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
-               {\r
+               if (ConfigType == CONFIG_FW_NIC){\r
                        READ_FIRMWARE_MP(8812A,_FW_NIC);\r
-               }\r
-               else if (ConfigType == CONFIG_FW_WoWLAN)\r
-               {\r
+               }else if (ConfigType == CONFIG_FW_WoWLAN){\r
                        READ_FIRMWARE_MP(8812A,_FW_WoWLAN);\r
-               }\r
-               else if (ConfigType == CONFIG_FW_BT)\r
-               {\r
+               }else if (ConfigType == CONFIG_FW_BT){\r
                        READ_FIRMWARE_MP(8812A,_FW_NIC_BT);\r
                }\r
-\r
        }\r
 #endif\r
 #if (RTL8821A_SUPPORT == 1)\r
-       if (pDM_Odm->SupportICType == ODM_RTL8821)\r
-       {\r
-               if (ConfigType == CONFIG_FW_NIC)\r
-               {\r
+       if (pDM_Odm->SupportICType == ODM_RTL8821){\r
+               if (ConfigType == CONFIG_FW_NIC){\r
                        READ_FIRMWARE_MP(8821A,_FW_NIC);\r
-               }\r
-               else if (ConfigType == CONFIG_FW_WoWLAN)\r
-               {\r
+               }else if (ConfigType == CONFIG_FW_WoWLAN){\r
                        READ_FIRMWARE_MP(8821A,_FW_WoWLAN);\r
-               }\r
-               else if (ConfigType == CONFIG_FW_BT)\r
-               {\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
        }\r
@@ -2295,27 +2526,63 @@ ODM_ConfigFWWithHeaderFile(
 #if (RTL8192E_SUPPORT == 1)\r
        if (pDM_Odm->SupportICType == ODM_RTL8192E)\r
        {\r
-               if (ConfigType == CONFIG_FW_NIC)\r
-               {\r
+               if (ConfigType == CONFIG_FW_NIC){\r
                        READ_FIRMWARE_MP(8192E,_FW_NIC);\r
-               }\r
-               else if (ConfigType == CONFIG_FW_WoWLAN)\r
-               {\r
+               }else if (ConfigType == CONFIG_FW_WoWLAN){\r
                        READ_FIRMWARE_MP(8192E,_FW_WoWLAN);\r
-               }\r
-#ifdef CONFIG_AP_WOWLAN\r
+               #ifdef CONFIG_AP_WOWLAN\r
                else if (ConfigType == CONFIG_FW_AP_WoWLAN)\r
-               {\r
                        READ_FIRMWARE_MP(8192E,_FW_AP_WoWLAN);\r
+               #endif\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
+       }\r
 #endif\r
 \r
+//1 New ICs (WIN only)\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+#if (RTL8821B_SUPPORT == 1)\r
+       if (pDM_Odm->SupportICType == ODM_RTL8821B)\r
+       {\r
+       }\r
+#endif\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(8822B,_FW_WoWLAN);\r
        }\r
 #endif\r
+#if (RTL8703B_SUPPORT == 1)\r
+       if (pDM_Odm->SupportICType == ODM_RTL8703B)\r
+       {\r
+               if (ConfigType == CONFIG_FW_NIC)\r
+                       READ_FIRMWARE_MP(8703B,_FW_NIC);\r
+       }\r
+#endif\r
+#if ((DEV_BUS_TYPE == RT_USB_INTERFACE) || (DEV_BUS_TYPE == RT_SDIO_INTERFACE))\r
+#if (RTL8188F_SUPPORT == 1)\r
+       if (pDM_Odm->SupportICType == ODM_RTL8188F)\r
+       {\r
+               if (ConfigType == CONFIG_FW_NIC)\r
+                       READ_FIRMWARE_MP(8188F,_FW_NIC);\r
+       }\r
+#endif\r
+#endif\r
+#endif//(DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+\r
+#endif//(DM_ODM_SUPPORT_TYPE != ODM_AP)\r
        return HAL_STATUS_SUCCESS;    \r
 } \r
 \r
-\r
 u4Byte \r
 ODM_GetHWImgVersion(\r
        IN      PDM_ODM_T       pDM_Odm\r
@@ -2323,40 +2590,63 @@ ODM_GetHWImgVersion(
 {\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 (RTL8723A_SUPPORT == 1)  \r
        if (pDM_Odm->SupportICType == ODM_RTL8723A)\r
                Version = GET_VERSION_MP(8723A,_MAC_REG);\r
 #endif\r
-\r
 #if (RTL8723B_SUPPORT == 1)  \r
        if (pDM_Odm->SupportICType == ODM_RTL8723B)\r
                Version = GET_VERSION_MP(8723B,_MAC_REG);\r
 #endif\r
-\r
-#if (RTL8188E_SUPPORT == 1)  \r
-       if (pDM_Odm->SupportICType == ODM_RTL8188E)\r
-               Version = GET_VERSION_MP(8188E,_MAC_REG);\r
-#endif\r
-\r
 #if (RTL8821A_SUPPORT == 1)  \r
        if (pDM_Odm->SupportICType == ODM_RTL8821)\r
                Version = GET_VERSION_MP(8821A,_MAC_REG);\r
 #endif\r
-\r
 #if (RTL8192E_SUPPORT == 1)  \r
        if (pDM_Odm->SupportICType == ODM_RTL8192E)\r
                Version = GET_VERSION_MP(8192E,_MAC_REG);\r
 #endif\r
-\r
 #if (RTL8812A_SUPPORT == 1)  \r
        if (pDM_Odm->SupportICType == ODM_RTL8812)\r
                Version = GET_VERSION_MP(8812A,_MAC_REG);\r
 #endif\r
+#endif //(DM_ODM_SUPPORT_TYPE != ODM_AP)\r
 \r
-       return Version;\r
-}\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 (RTL8814A_SUPPORT == 1)  \r
+       if (pDM_Odm->SupportICType == ODM_RTL8814A)\r
+               Version = GET_VERSION_MP(8814A,_MAC_REG);\r
+#endif\r
 \r
+//1 New ICs (WIN only)\r
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
+#if (RTL8821B_SUPPORT == 1)  \r
+       if (pDM_Odm->SupportICType == ODM_RTL8821B)\r
+               Version = GET_VERSION(8821B,_MAC_REG);\r
+#endif\r
+#if (RTL8822B_SUPPORT == 1)  \r
+       if (pDM_Odm->SupportICType == ODM_RTL8822B)\r
+               Version = GET_VERSION(8822B, _MAC_REG);\r
+#endif\r
+#if (RTL8703B_SUPPORT == 1)  \r
+       if (pDM_Odm->SupportICType == ODM_RTL8703B)\r
+               Version = GET_VERSION_TC(8703B, _MAC_REG);\r
+#endif\r
+#if ((DEV_BUS_TYPE == RT_USB_INTERFACE) || (DEV_BUS_TYPE == RT_SDIO_INTERFACE))\r
+#if (RTL8188F_SUPPORT == 1)  \r
+       if (pDM_Odm->SupportICType == ODM_RTL8188F)\r
+               Version = GET_VERSION_TC(8188F, _MAC_REG);\r
+#endif\r
+#endif\r
+#endif //(DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
 \r
+       return Version;\r
+}\r
 \r
 \r