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.c
index 13e5e28ec647e46f6f927c95e407a5be502009b0..e89ce1ed69cfcb6a6afe548a88b30184278a6581 100755 (executable)
 #include "phydm_precomp.h"
 
 
-const u2Byte dB_Invert_Table[8][12] = {
-       {       1,              1,              1,              2,              2,              2,              2,              3,              3,              3,              4,              4},
-       {       4,              5,              6,              6,              7,              8,              9,              10,             11,             13,             14,             16},
-       {       18,             20,             22,             25,             28,             32,             35,             40,             45,             50,             56,             63},
-       {       71,             79,             89,             100,    112,    126,    141,    158,    178,    200,    224,    251},
-       {       282,    316,    355,    398,    447,    501,    562,    631,    708,    794,    891,    1000},
-       {       1122,   1259,   1413,   1585,   1778,   1995,   2239,   2512,   2818,   3162,   3548,   3981},
-       {       4467,   5012,   5623,   6310,   7079,   7943,   8913,   10000,  11220,  12589,  14125,  15849},
-       {       17783,  19953,  22387,  25119,  28184,  31623,  35481,  39811,  44668,  50119,  56234,  65535}};
+const u2Byte dB_Invert_Table[12][8] = {
+       {       1,              1,              1,              2,              2,              2,              2,              3},
+       {       3,              3,              4,              4,              4,              5,              6,              6},
+       {       7,              8,              9,              10,             11,             13,             14,             16},
+       {       18,             20,             22,             25,             28,             32,             35,             40},
+       {       45,             50,             56,             63,             71,             79,             89,             100},
+       {       112,            126,            141,            158,            178,            200,            224,            251},
+       {       282,            316,            355,            398,            447,            501,            562,            631},
+       {       708,            794,            891,            1000,   1122,   1259,   1413,   1585},
+       {       1778,   1995,   2239,   2512,   2818,   3162,   3548,   3981},
+       {       4467,   5012,   5623,   6310,   7079,   7943,   8913,   10000},
+       {       11220,  12589,  14125,  15849,  17783,  19953,  22387,  25119},
+       {       28184,  31623,  35481,  39811,  44668,  50119,  56234,  65535}
+};
 
 
 //============================================================
 // Local Function predefine.
 //============================================================
 
-VOID
-odm_SwAntDetectInit(
-       IN              PDM_ODM_T               pDM_Odm
-       );
-
-
-
-
-
-VOID
-odm_AntennaDiversityInit(
-       IN              PDM_ODM_T               pDM_Odm 
-);
-
-VOID
-odm_AntennaDiversity(
-       IN              PDM_ODM_T               pDM_Odm 
-);
+/* START------------COMMON INFO RELATED--------------- */
 
 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
 VOID
@@ -67,24 +55,13 @@ ODM_UpdateInitRateWorkItemCallback(
     );
 #endif
 
-
 VOID
 odm_GlobalAdapterCheck(
        IN              VOID
        );
 
-//Remove RAMask by RS_James
-
-
+//move to odm_PowerTacking.h by YuChen
 
-VOID
-odm_IQCalibrate(
-               IN      PDM_ODM_T       pDM_Odm 
-               );
-
-//remove PT by Yuchen
-
-//Remove Edca by Yu Chen
 
 
 VOID
@@ -92,15 +69,51 @@ odm_UpdatePowerTrainingState(
        IN      PDM_ODM_T       pDM_Odm
 );
 
-VOID
-ODM_AsocEntry_Init(
-       IN      PDM_ODM_T       pDM_Odm
-       );
-
 //============================================================
 //3 Export Interface
 //============================================================
 
+/*Y = 10*log(X)*/
+s4Byte
+ODM_PWdB_Conversion(
+       IN  s4Byte X,
+       IN  u4Byte TotalBit,
+       IN  u4Byte DecimalBit
+       )
+{
+       s4Byte Y, integer = 0, decimal = 0;
+       u4Byte i;
+
+       if(X == 0)
+               X = 1; // log2(x), x can't be 0
+
+       for(i = (TotalBit-1); i > 0; i--)
+       {
+               if(X & BIT(i))
+               {
+                       integer = i;
+                       if(i > 0)
+                               decimal = (X & BIT(i-1))?2:0; //decimal is 0.5dB*3=1.5dB~=2dB 
+                       break;
+               }
+       }
+       
+       Y = 3*(integer-DecimalBit)+decimal; //10*log(x)=3*log2(x), 
+
+       return Y;
+}
+
+s4Byte
+ODM_SignConversion(
+    IN  s4Byte value,
+    IN  u4Byte TotalBit
+    )
+{
+       if(value&BIT(TotalBit-1))
+               value -= BIT(TotalBit);
+       return value;
+}
+
 VOID
 ODM_InitMpDriverStatus(
        IN              PDM_ODM_T               pDM_Odm
@@ -152,13 +165,52 @@ ODM_UpdateMpDriverStatus(
 #endif
 }
 
+VOID
+PHYDM_InitTRXAntennaSetting(
+       IN              PDM_ODM_T               pDM_Odm
+)
+{
+#if RTL8814A_SUPPORT
+       u1Byte  RxAnt = 0, TxAnt = 0;
+
+       RxAnt = (u1Byte)ODM_GetBBReg(pDM_Odm, ODM_REG(BB_RX_PATH,pDM_Odm), ODM_BIT(BB_RX_PATH,pDM_Odm));
+       TxAnt = (u1Byte)ODM_GetBBReg(pDM_Odm, ODM_REG(BB_TX_PATH,pDM_Odm), ODM_BIT(BB_TX_PATH,pDM_Odm));
+       pDM_Odm->TRXAntStatus =  (RxAnt << 4) + TxAnt;
+#endif
+}
+
+VOID
+phydm_Init_cck_setting(
+       IN              PDM_ODM_T               pDM_Odm
+)
+{
+       u4Byte value_824,value_82c;
+
+       pDM_Odm->bCckHighPower = (BOOLEAN) ODM_GetBBReg(pDM_Odm, ODM_REG(CCK_RPT_FORMAT,pDM_Odm), ODM_BIT(CCK_RPT_FORMAT,pDM_Odm));
+
+       #if (RTL8192E_SUPPORT == 1)
+       if(pDM_Odm->SupportICType & (ODM_RTL8192E))
+       {
+               /* 0x824[9] = 0x82C[9] = 0xA80[7]  these regiaters settinh should be equal or CCK RSSI report may inaccurate */
+               value_824 = ODM_GetBBReg(pDM_Odm, 0x824, BIT9);
+               value_82c = ODM_GetBBReg(pDM_Odm, 0x82c, BIT9);
+               
+               if(value_824 != value_82c)
+               {
+                       ODM_SetBBReg(pDM_Odm, 0x82c , BIT9, value_824);
+               }
+               ODM_SetBBReg(pDM_Odm, 0xa80 , BIT7, value_824);
+               pDM_Odm->cck_agc_report_type = (BOOLEAN)value_824;
+       }
+       #endif
+}
+
 VOID
 odm_CommonInfoSelfInit(
        IN              PDM_ODM_T               pDM_Odm
        )
 {
-       pFAT_T                  pDM_FatTable = &pDM_Odm->DM_FatTable;
-       pDM_Odm->bCckHighPower = (BOOLEAN) ODM_GetBBReg(pDM_Odm, ODM_REG(CCK_RPT_FORMAT,pDM_Odm), ODM_BIT(CCK_RPT_FORMAT,pDM_Odm));             
+       phydm_Init_cck_setting(pDM_Odm);
        pDM_Odm->RFPathRxEnable = (u1Byte) ODM_GetBBReg(pDM_Odm, ODM_REG(BB_RX_PATH,pDM_Odm), ODM_BIT(BB_RX_PATH,pDM_Odm));
 #if (DM_ODM_SUPPORT_TYPE != ODM_CE)    
        pDM_Odm->pbNet_closed = &pDM_Odm->BOOLEAN_temp;
@@ -166,9 +218,15 @@ odm_CommonInfoSelfInit(
 
        PHYDM_InitDebugSetting(pDM_Odm);
        ODM_InitMpDriverStatus(pDM_Odm);
+       PHYDM_InitTRXAntennaSetting(pDM_Odm);
 
        pDM_Odm->TxRate = 0xFF;
 
+       pDM_Odm->number_linked_client = 0;
+       pDM_Odm->pre_number_linked_client = 0;
+       pDM_Odm->number_active_client = 0;
+       pDM_Odm->pre_number_active_client = 0;
+       
 }
 
 VOID
@@ -176,8 +234,8 @@ odm_CommonInfoSelfUpdate(
        IN              PDM_ODM_T               pDM_Odm
        )
 {
-       u1Byte  EntryCnt=0;
-       u1Byte  i;
+       u1Byte  EntryCnt = 0, num_active_client = 0;
+       u4Byte  i, OneEntry_MACID = 0, ma_rx_tp = 0;
        PSTA_INFO_T     pEntry;
 
 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
@@ -206,30 +264,68 @@ odm_CommonInfoSelfUpdate(
                pDM_Odm->bsta_state = FALSE;
 #endif
 
-
-       if(*(pDM_Odm->pBandWidth) == ODM_BW40M)
+/* THis variable cannot be used because it is wrong*/
+#if (DM_ODM_SUPPORT_TYPE == ODM_AP)
+       if (*(pDM_Odm->pBandWidth) == ODM_BW40M)
        {
-               if(*(pDM_Odm->pSecChOffset) == 1)
-                       pDM_Odm->ControlChannel = *(pDM_Odm->pChannel) -2;
-               else if(*(pDM_Odm->pSecChOffset) == 2)
-                       pDM_Odm->ControlChannel = *(pDM_Odm->pChannel) +2;
-       }
-       else
+               if (*(pDM_Odm->pSecChOffset) == 1)
+                       pDM_Odm->ControlChannel = *(pDM_Odm->pChannel) + 2;
+               else if (*(pDM_Odm->pSecChOffset) == 2)
+                       pDM_Odm->ControlChannel = *(pDM_Odm->pChannel) - 2;
+       } else if (*(pDM_Odm->pBandWidth) == ODM_BW80M) {
+               if (*(pDM_Odm->pSecChOffset) == 1)
+                       pDM_Odm->ControlChannel = *(pDM_Odm->pChannel) + 6;
+               else if (*(pDM_Odm->pSecChOffset) == 2)
+                       pDM_Odm->ControlChannel = *(pDM_Odm->pChannel) - 6;
+       } else
+               pDM_Odm->ControlChannel = *(pDM_Odm->pChannel);
+#else
+       if (*(pDM_Odm->pBandWidth) == ODM_BW40M) {
+               if (*(pDM_Odm->pSecChOffset) == 1)
+                       pDM_Odm->ControlChannel = *(pDM_Odm->pChannel) - 2;
+               else if (*(pDM_Odm->pSecChOffset) == 2)
+                       pDM_Odm->ControlChannel = *(pDM_Odm->pChannel) + 2;
+       } else
                pDM_Odm->ControlChannel = *(pDM_Odm->pChannel);
+#endif
 
        for (i=0; i<ODM_ASSOCIATE_ENTRY_NUM; i++)
        {
                pEntry = pDM_Odm->pODM_StaInfo[i];
                if(IS_STA_VALID(pEntry))
+               {
                        EntryCnt++;
+                       if(EntryCnt==1)
+                       {
+                               OneEntry_MACID=i;
+                       }
+
+                       #if (DM_ODM_SUPPORT_TYPE == ODM_AP)
+                               ma_rx_tp =  (pEntry->rx_byte_cnt_LowMAW)<<3; /*  low moving average RX  TP   ( bit /sec)*/
+
+                               ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_RA_DBG, ODM_DBG_LOUD, ("ClientTP[%d]: ((%d )) bit/sec\n", i, ma_rx_tp));
+                               
+                               if (ma_rx_tp > ACTIVE_TP_THRESHOLD)
+                                       num_active_client++;
+                       #endif
+                }
        }
        
        if(EntryCnt == 1)
+       {
                pDM_Odm->bOneEntryOnly = TRUE;
+               pDM_Odm->OneEntry_MACID=OneEntry_MACID;
+       }
        else
                pDM_Odm->bOneEntryOnly = FALSE;
 
-       // Update MP driver status
+       pDM_Odm->pre_number_linked_client = pDM_Odm->number_linked_client;
+       pDM_Odm->pre_number_active_client = pDM_Odm->number_active_client;
+       
+       pDM_Odm->number_linked_client = EntryCnt;
+       pDM_Odm->number_active_client = num_active_client;      
+
+       /* Update MP driver status*/
        ODM_UpdateMpDriverStatus(pDM_Odm);
 }
 
@@ -260,6 +356,10 @@ PhyDM_Get_Structure(
                case    PHYDM_CFOTRACK:
                        pStruct = &DM_CfoTrack;
                break;
+
+               case    PHYDM_ADAPTIVITY:
+                       pStruct = &(pDM_Odm->Adaptivity);
+               break;
                
                default:
                break;
@@ -274,6 +374,10 @@ PhyDM_Get_Structure(
                case    PHYDM_CFOTRACK:
                        pStruct = &(pDM_Odm->DM_CfoTrack);
                break;
+
+               case    PHYDM_ADAPTIVITY:
+                       pStruct = &(pDM_Odm->Adaptivity);
+               break;
                
                default:
                break;
@@ -303,23 +407,23 @@ ODM_DMInit(
        IN              PDM_ODM_T               pDM_Odm
        )
 {
-
        odm_CommonInfoSelfInit(pDM_Odm);
        odm_DIGInit(pDM_Odm);
        Phydm_NHMCounterStatisticsInit(pDM_Odm);
        Phydm_AdaptivityInit(pDM_Odm);
+       phydm_ra_info_init(pDM_Odm);
        odm_RateAdaptiveMaskInit(pDM_Odm);
+       odm_RA_ParaAdjust_init(pDM_Odm);
        ODM_CfoTrackingInit(pDM_Odm);
        ODM_EdcaTurboInit(pDM_Odm);
        odm_RSSIMonitorInit(pDM_Odm);
-       odm_TXPowerTrackingInit(pDM_Odm);
+       phydm_rf_init(pDM_Odm);
        odm_AntennaDiversityInit(pDM_Odm);
        odm_AutoChannelSelectInit(pDM_Odm);
-
-#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))
-       ODM_ClearTxPowerTrackingState(pDM_Odm);
        odm_PathDiversityInit(pDM_Odm);
-#endif
+#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN))
+       phydm_Beamforming_Init(pDM_Odm);
+#endif 
 
        if(pDM_Odm->SupportICType & ODM_IC_11N_SERIES)
        {
@@ -346,22 +450,6 @@ ODM_DMInit(
                        odm_PrimaryCCA_Check_Init(pDM_Odm);
        #endif
 
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
-       #if (RTL8723A_SUPPORT == 1)
-               if(pDM_Odm->SupportICType == ODM_RTL8723A)
-                       odm_PSDMonitorInit(pDM_Odm);
-       #endif
-
-       #if (RTL8192D_SUPPORT == 1)
-               if(pDM_Odm->SupportICType==ODM_RTL8192D)
-                       odm_PathDivInit_92D(pDM_Odm);
-       #endif
-
-       #if ((RTL8192C_SUPPORT == 1) || (RTL8192D_SUPPORT == 1))
-               if(pDM_Odm->SupportICType & (ODM_RTL8192C|ODM_RTL8192D))
-                       odm_RXHPInit(pDM_Odm);
-       #endif
-#endif
 #endif
 
        }
@@ -373,11 +461,108 @@ ODM_DMReset(
        IN              PDM_ODM_T               pDM_Odm
        )
 {
-        #if (defined(CONFIG_HW_ANTENNA_DIVERSITY))
        ODM_AntDivReset(pDM_Odm);
-        #endif
 }
 
+
+VOID
+phydm_support_ablity_debug(
+       IN              PVOID           pDM_VOID,
+       IN              u4Byte          *const dm_value,
+       IN              u4Byte                  *_used,
+       OUT             char                    *output,
+       IN              u4Byte                  *_out_len
+       )
+{
+       PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;
+       u4Byte                  pre_support_ability;
+       u4Byte used = *_used;
+       u4Byte out_len = *_out_len;
+
+       pre_support_ability = pDM_Odm->SupportAbility ; 
+       PHYDM_SNPRINTF((output+used, out_len-used,"\n%s\n", "================================"));
+       if(dm_value[0] == 100)
+       {
+               PHYDM_SNPRINTF((output+used, out_len-used, "[Supportablity] PhyDM Selection\n"));
+               PHYDM_SNPRINTF((output+used, out_len-used,"%s\n", "================================"));
+               PHYDM_SNPRINTF((output+used, out_len-used, "00. (( %s ))DIG  \n", ((pDM_Odm->SupportAbility & ODM_BB_DIG)?("V"):(".")) ));
+               PHYDM_SNPRINTF((output+used, out_len-used, "01. (( %s ))RA_MASK  \n", ((pDM_Odm->SupportAbility & ODM_BB_RA_MASK)?("V"):(".")) ));
+               PHYDM_SNPRINTF((output+used, out_len-used, "02. (( %s ))DYNAMIC_TXPWR  \n", ((pDM_Odm->SupportAbility & ODM_BB_DYNAMIC_TXPWR)?("V"):("."))   ));                
+               PHYDM_SNPRINTF((output+used, out_len-used, "03. (( %s ))FA_CNT  \n", ((pDM_Odm->SupportAbility & ODM_BB_FA_CNT)?("V"):("."))  ));
+               PHYDM_SNPRINTF((output+used, out_len-used, "04. (( %s ))RSSI_MONITOR  \n", ((pDM_Odm->SupportAbility & ODM_BB_RSSI_MONITOR)?("V"):("."))   ));
+               PHYDM_SNPRINTF((output+used, out_len-used, "05. (( %s ))CCK_PD  \n", ((pDM_Odm->SupportAbility & ODM_BB_CCK_PD)?("V"):("."))   ));      
+               PHYDM_SNPRINTF((output+used, out_len-used, "06. (( %s ))ANT_DIV  \n", ((pDM_Odm->SupportAbility & ODM_BB_ANT_DIV)?("V"):("."))  ));
+               PHYDM_SNPRINTF((output+used, out_len-used, "07. (( %s ))PWR_SAVE  \n", ((pDM_Odm->SupportAbility & ODM_BB_PWR_SAVE)?("V"):("."))  ));
+               PHYDM_SNPRINTF((output+used, out_len-used, "08. (( %s ))PWR_TRAIN  \n", ((pDM_Odm->SupportAbility & ODM_BB_PWR_TRAIN)?("V"):("."))   ));        
+               PHYDM_SNPRINTF((output+used, out_len-used, "09. (( %s ))RATE_ADAPTIVE  \n", ((pDM_Odm->SupportAbility & ODM_BB_RATE_ADAPTIVE)?("V"):("."))   ));
+               PHYDM_SNPRINTF((output+used, out_len-used, "10. (( %s ))PATH_DIV  \n", ((pDM_Odm->SupportAbility & ODM_BB_PATH_DIV)?("V"):("."))));
+               PHYDM_SNPRINTF((output+used, out_len-used, "11. (( %s ))PSD  \n", ((pDM_Odm->SupportAbility & ODM_BB_PSD)?("V"):(".")) ));      
+               PHYDM_SNPRINTF((output+used, out_len-used, "12. (( %s ))RXHP  \n", ((pDM_Odm->SupportAbility & ODM_BB_RXHP)?("V"):("."))   ));
+               PHYDM_SNPRINTF((output+used, out_len-used, "13. (( %s ))ADAPTIVITY  \n", ((pDM_Odm->SupportAbility & ODM_BB_ADAPTIVITY)?("V"):(".")) ));        
+               PHYDM_SNPRINTF((output+used, out_len-used, "14. (( %s ))CFO_TRACKING  \n", ((pDM_Odm->SupportAbility & ODM_BB_CFO_TRACKING)?("V"):(".")) ));
+               PHYDM_SNPRINTF((output+used, out_len-used, "15. (( %s ))NHM_CNT  \n", ((pDM_Odm->SupportAbility & ODM_BB_NHM_CNT)?("V"):("."))  ));     
+               PHYDM_SNPRINTF((output+used, out_len-used, "16. (( %s ))PRIMARY_CCA  \n", ((pDM_Odm->SupportAbility & ODM_BB_PRIMARY_CCA)?("V"):(".")) ));
+               PHYDM_SNPRINTF((output+used, out_len-used, "20. (( %s ))EDCA_TURBO  \n", ((pDM_Odm->SupportAbility & ODM_MAC_EDCA_TURBO)?("V"):("."))  ));      
+               PHYDM_SNPRINTF((output+used, out_len-used, "21. (( %s ))EARLY_MODE  \n", ((pDM_Odm->SupportAbility & ODM_MAC_EARLY_MODE)?("V"):(".")) ));
+               PHYDM_SNPRINTF((output+used, out_len-used, "24. (( %s ))TX_PWR_TRACK  \n", ((pDM_Odm->SupportAbility & ODM_RF_TX_PWR_TRACK)?("V"):("."))  ));   
+               PHYDM_SNPRINTF((output+used, out_len-used, "25. (( %s ))RX_GAIN_TRACK  \n", ((pDM_Odm->SupportAbility & ODM_RF_RX_GAIN_TRACK)?("V"):("."))  ));
+               PHYDM_SNPRINTF((output+used, out_len-used, "26. (( %s ))RF_CALIBRATION  \n", ((pDM_Odm->SupportAbility & ODM_RF_CALIBRATION)?("V"):("."))   ));
+               PHYDM_SNPRINTF((output+used, out_len-used,"%s\n", "================================"));
+       }
+       /*
+       else if(dm_value[0] == 101)
+       {
+               pDM_Odm->SupportAbility = 0 ;
+               DbgPrint("Disable all SupportAbility components \n");
+               PHYDM_SNPRINTF((output+used, out_len-used,"%s\n", "Disable all SupportAbility components"));    
+       }
+       */
+       else
+       {
+
+               if(dm_value[1] == 1) //enable
+               {
+                       pDM_Odm->SupportAbility |= BIT(dm_value[0]) ;
+                       if(BIT(dm_value[0]) & ODM_BB_PATH_DIV)
+                       {
+                               odm_PathDiversityInit(pDM_Odm);
+                       }
+               }
+               else if(dm_value[1] == 2) //disable
+               {
+                       pDM_Odm->SupportAbility &= ~(BIT(dm_value[0])) ;
+               }
+               else
+               {
+                       //DbgPrint("\n[Warning!!!]  1:enable,  2:disable \n\n");
+                       PHYDM_SNPRINTF((output+used, out_len-used,"%s\n", "[Warning!!!]  1:enable,  2:disable"));
+               }
+       }
+       PHYDM_SNPRINTF((output+used, out_len-used,"pre-SupportAbility  =  0x%x\n",  pre_support_ability ));     
+       PHYDM_SNPRINTF((output+used, out_len-used,"Curr-SupportAbility =  0x%x\n", pDM_Odm->SupportAbility ));
+       PHYDM_SNPRINTF((output+used, out_len-used,"%s\n", "================================"));
+}
+
+#if (DM_ODM_SUPPORT_TYPE & ODM_WIN)
+//
+//tmp modify for LC Only
+//
+VOID
+ODM_DMWatchdog_LPS(
+       IN              PDM_ODM_T               pDM_Odm
+       )
+{      
+       odm_CommonInfoSelfUpdate(pDM_Odm);
+       odm_FalseAlarmCounterStatistics(pDM_Odm);
+       odm_RSSIMonitorCheck(pDM_Odm);
+       odm_DIGbyRSSI_LPS(pDM_Odm);     
+       odm_CCKPacketDetectionThresh(pDM_Odm);
+       odm_CommonInfoSelfReset(pDM_Odm);
+
+       if(*(pDM_Odm->pbPowerSaving)==TRUE)
+               return;
+}
+#endif
 //
 // 2011/09/20 MH This is the entry pointer for all team to execute HW out source DM.
 // You can not add any dummy function here, be care, you can only use DM structure
@@ -392,12 +577,24 @@ ODM_DMWatchdog(
        odm_CommonInfoSelfUpdate(pDM_Odm);
        phydm_BasicDbgMessage(pDM_Odm);
        odm_HWSetting(pDM_Odm);
+
+#if (DM_ODM_SUPPORT_TYPE == ODM_AP)
+       {
+       prtl8192cd_priv priv            = pDM_Odm->priv;
+       if( (priv->auto_channel != 0) && (priv->auto_channel != 2) )//if ACS running, do not do FA/CCA counter read
+               return;
+       }
+#endif 
        odm_FalseAlarmCounterStatistics(pDM_Odm);
        odm_RSSIMonitorCheck(pDM_Odm);
 
        if(*(pDM_Odm->pbPowerSaving) == TRUE)
        {
                odm_DIGbyRSSI_LPS(pDM_Odm);
+               {
+                       pDIG_T  pDM_DigTable = &pDM_Odm->DM_DigTable;
+                       Phydm_Adaptivity(pDM_Odm, pDM_DigTable->CurIGValue);
+               }
                ODM_RT_TRACE(pDM_Odm,ODM_COMP_COMMON, ODM_DBG_LOUD, ("DMWatchdog in power saving mode\n"));
                return;
        }
@@ -407,9 +604,10 @@ ODM_DMWatchdog(
        odm_DIG(pDM_Odm);
        {
                pDIG_T  pDM_DigTable = &pDM_Odm->DM_DigTable;
-               pDM_Odm->bAdaOn = Phydm_Adaptivity(pDM_Odm, pDM_DigTable->CurIGValue);
+               Phydm_Adaptivity(pDM_Odm, pDM_DigTable->CurIGValue);
        }
        odm_CCKPacketDetectionThresh(pDM_Odm);
+       phydm_ra_dynamic_retry_limit(pDM_Odm);
        odm_RefreshRateAdaptiveMask(pDM_Odm);
        odm_RefreshBasicRateMask(pDM_Odm);
        odm_DynamicBBPowerSaving(pDM_Odm);
@@ -418,21 +616,14 @@ ODM_DMWatchdog(
        ODM_CfoTracking(pDM_Odm);
        odm_DynamicTxPower(pDM_Odm);
        odm_AntennaDiversity(pDM_Odm);
+#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN))
+       phydm_Beamforming_Watchdog(pDM_Odm);
+#endif
 
-#if( DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))
-
-       ODM_TXPowerTrackingCheck(pDM_Odm);
+       phydm_rf_watchdog(pDM_Odm);
 
-       if(pDM_Odm->SupportICType & ODM_IC_11AC_SERIES)
-               odm_IQCalibrate(pDM_Odm);
-       else 
-#endif
        if(pDM_Odm->SupportICType & ODM_IC_11N_SERIES)
        {
-#if (RTL8192D_SUPPORT == 1)
-               if(pDM_Odm->SupportICType==ODM_RTL8192D)
-                       ODM_DynamicEarlyMode(pDM_Odm);
-#endif
                
 #if (RTL8188E_SUPPORT == 1)
                if(pDM_Odm->SupportICType==ODM_RTL8188E)
@@ -445,13 +636,6 @@ ODM_DMWatchdog(
                if(pDM_Odm->SupportICType==ODM_RTL8192E)
                        odm_DynamicPrimaryCCA_Check(pDM_Odm); 
        #endif
-
-#if( DM_ODM_SUPPORT_TYPE == ODM_WIN)
-       #if ((RTL8192C_SUPPORT == 1) || (RTL8192D_SUPPORT == 1))
-               if(pDM_Odm->SupportICType & (ODM_RTL8192C|ODM_RTL8192D))
-                       odm_RXHP(pDM_Odm);
-       #endif
-#endif
 #endif
        }
 
@@ -562,6 +746,9 @@ ODM_CmnInfoInit(
                case    ODM_CMNINFO_EXT_TRSW:
                        pDM_Odm->ExtTRSW = (u1Byte)Value;
                        break;
+               case    ODM_CMNINFO_EXT_LNA_GAIN:
+                       pDM_Odm->ExtLNAGain = (u1Byte)Value;
+                       break;
                case    ODM_CMNINFO_PATCH_ID:
                        pDM_Odm->PatchID = (u1Byte)Value;
                        break;
@@ -580,6 +767,9 @@ ODM_CmnInfoInit(
                case    ODM_CMNINFO_DOMAIN_CODE_5G:
                        pDM_Odm->odm_Regulation5G = (u1Byte)Value;
                        break;
+               case    ODM_CMNINFO_CONFIG_BB_RF:
+                       pDM_Odm->ConfigBBRF = (BOOLEAN)Value;
+                       break;
                case    ODM_CMNINFO_IQKFWOFFLOAD:
                        pDM_Odm->IQKFWOffload = (u1Byte)Value;
                        break;
@@ -700,10 +890,17 @@ ODM_CmnInfoHook(
                        pDM_Odm->DM_DigTable.pbP2pLinkInProgress = (u1Byte *)pValue;
                        break;
 
-               case ODM_CMNINFO_FCS_MODE:
+               case    ODM_CMNINFO_IS1ANTENNA:
+                       pDM_Odm->pIs1Antenna = (BOOLEAN *)pValue;
+                       break;
+                       
+               case    ODM_CMNINFO_RFDEFAULTPATH:
+                       pDM_Odm->pRFDefaultPath= (u1Byte *)pValue;
+                       break;
+
+               case    ODM_CMNINFO_FCS_MODE:
                        pDM_Odm->pIsFcsModeEnable = (BOOLEAN *)pValue;
                        break;
-//sd7 only
 
                //case  ODM_CMNINFO_RTSTA_AID:
                //      pDM_Odm->pAidMap =  (u1Byte *)pValue;
@@ -751,6 +948,16 @@ ODM_CmnInfoPtrArrayHook(
                //              
                case    ODM_CMNINFO_STA_STATUS:
                        pDM_Odm->pODM_StaInfo[Index] = (PSTA_INFO_T)pValue;
+                       
+                       if (IS_STA_VALID(pDM_Odm->pODM_StaInfo[Index]))
+                       #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
+                               pDM_Odm->platform2phydm_macid_table[((PSTA_INFO_T)pValue)->AssociatedMacId] = Index; /*AssociatedMacId are unique bttween different Adapter*/
+                       #elif (DM_ODM_SUPPORT_TYPE == ODM_AP)
+                               pDM_Odm->platform2phydm_macid_table[((PSTA_INFO_T)pValue)->aid] = Index;
+                       #elif (DM_ODM_SUPPORT_TYPE == ODM_CE)
+                               pDM_Odm->platform2phydm_macid_table[((PSTA_INFO_T)pValue)->mac_id] = Index;
+                       #endif
+                       
                        break;          
                //To remove the compiler warning, must add an empty default statement to handle the other values.                               
                default:
@@ -799,7 +1006,7 @@ ODM_CmnInfoUpdate(
                case    ODM_CMNINFO_LINK:
                        pDM_Odm->bLinked = (BOOLEAN)Value;
                        break;
-                       
+
                case    ODM_CMNINFO_STATION_STATE:
                        pDM_Odm->bsta_state = (BOOLEAN)Value;
                        break;
@@ -822,6 +1029,7 @@ ODM_CmnInfoUpdate(
                case    ODM_CMNINFO_RA_THRESHOLD_LOW:
                        pDM_Odm->RateAdaptive.LowRSSIThresh = (u1Byte)Value;
                        break;
+#if defined(BT_30_SUPPORT) && (BT_30_SUPPORT == 1)
                // The following is for BT HS mode and BT coexist mechanism.
                case ODM_CMNINFO_BT_ENABLED:
                        pDM_Odm->bBtEnabled = (BOOLEAN)Value;
@@ -843,10 +1051,18 @@ ODM_CmnInfoUpdate(
                        pDM_Odm->bBtLimitedDig = (BOOLEAN)Value;
                        break;  
 
+               case ODM_CMNINFO_BT_DIG:
+                       pDM_Odm->btHsDigVal = (u1Byte)Value;
+                       break;
+                       
+               case    ODM_CMNINFO_BT_BUSY:
+                       pDM_Odm->bBtBusy = (BOOLEAN)Value;
+                       break;  
+
                case    ODM_CMNINFO_BT_DISABLE_EDCA:
                        pDM_Odm->bBtDisableEdcaTurbo = (BOOLEAN)Value;
                        break;
-
+#endif
 
 #if(DM_ODM_SUPPORT_TYPE & ODM_AP)              // for repeater mode add by YuChen 2014.06.23
 #ifdef UNIVERSAL_REPEATER
@@ -855,6 +1071,11 @@ ODM_CmnInfoUpdate(
                        break;
 #endif
 #endif
+
+               case    ODM_CMNINFO_AP_TOTAL_NUM:
+                       pDM_Odm->APTotalNum = (u1Byte)Value;
+                       break;
+
 /*
                case    ODM_CMNINFO_OP_MODE:
                        pDM_Odm->OPMode = (u1Byte)Value;
@@ -897,21 +1118,23 @@ ODM_CmnInfoUpdate(
 VOID
 ODM_InitAllWorkItems(IN PDM_ODM_T      pDM_Odm )
 {
-#if USE_WORKITEM
-       PADAPTER                pAdapter = pDM_Odm->Adapter;
 
+       PADAPTER                pAdapter = pDM_Odm->Adapter;
+#if USE_WORKITEM
+#if (RTL8723B_SUPPORT == 1)||(RTL8821A_SUPPORT == 1)
        ODM_InitializeWorkItem( pDM_Odm, 
                                                        &pDM_Odm->DM_SWAT_Table.SwAntennaSwitchWorkitem_8723B, 
                                                        (RT_WORKITEM_CALL_BACK)ODM_SW_AntDiv_WorkitemCallback,
                                                        (PVOID)pAdapter,
                                                        "AntennaSwitchWorkitem");
-       
+#endif
+       #if ((RTL8192C_SUPPORT == 1) && (defined(CONFIG_SW_ANTENNA_DIVERSITY))) 
        ODM_InitializeWorkItem( pDM_Odm, 
                                                        &pDM_Odm->DM_SWAT_Table.SwAntennaSwitchWorkitem, 
                                                        (RT_WORKITEM_CALL_BACK)odm_SwAntDivChkAntSwitchWorkitemCallback,
                                                        (PVOID)pAdapter,
                                                        "AntennaSwitchWorkitem");
-       
+       #endif  
 
        ODM_InitializeWorkItem(
                pDM_Odm,
@@ -940,16 +1163,14 @@ ODM_InitAllWorkItems(IN PDM_ODM_T        pDM_Odm )
                (RT_WORKITEM_CALL_BACK)ODM_UpdateInitRateWorkItemCallback, 
                (PVOID)pAdapter,
                "RaRptWorkitem");
-       
-#if(defined(CONFIG_HW_ANTENNA_DIVERSITY))
-#if (RTL8188E_SUPPORT == 1)
+
+#if( defined(CONFIG_5G_CG_SMART_ANT_DIVERSITY) ) ||( defined(CONFIG_2G_CG_SMART_ANT_DIVERSITY) )
        ODM_InitializeWorkItem(
                pDM_Odm,
                &(pDM_Odm->FastAntTrainingWorkitem), 
                (RT_WORKITEM_CALL_BACK)odm_FastAntTrainingWorkItemCallback, 
                (PVOID)pAdapter,
                "FastAntTrainingWorkitem");
-#endif
 #endif
        ODM_InitializeWorkItem(
                pDM_Odm,
@@ -957,32 +1178,86 @@ ODM_InitAllWorkItems(IN PDM_ODM_T        pDM_Odm )
                (RT_WORKITEM_CALL_BACK)odm_PSD_RXHPWorkitemCallback, 
                (PVOID)pAdapter,
                "PSDRXHP_WorkItem");  
-#endif
+#endif /*#if USE_WORKITEM*/
+       ODM_InitializeWorkItem(
+               pDM_Odm,
+               &(pDM_Odm->BeamformingInfo.TxbfInfo.Txbf_EnterWorkItem),
+               (RT_WORKITEM_CALL_BACK)halComTxbf_EnterWorkItemCallback,
+               (PVOID)pAdapter,
+               "Txbf_EnterWorkIterm");
+       
+       ODM_InitializeWorkItem(
+               pDM_Odm,
+               &(pDM_Odm->BeamformingInfo.TxbfInfo.Txbf_LeaveWorkItem),
+               (RT_WORKITEM_CALL_BACK)halComTxbf_LeaveWorkItemCallback,
+               (PVOID)pAdapter,
+               "Txbf_LeaveWorkIterm");
+       
+       ODM_InitializeWorkItem(
+               pDM_Odm,
+               &(pDM_Odm->BeamformingInfo.TxbfInfo.Txbf_FwNdpaWorkItem),
+               (RT_WORKITEM_CALL_BACK)halComTxbf_FwNdpaWorkItemCallback,
+               (PVOID)pAdapter,
+               "Txbf_FwNdpaWorkIterm");
+
+       ODM_InitializeWorkItem(
+               pDM_Odm,
+               &(pDM_Odm->BeamformingInfo.TxbfInfo.Txbf_ClkWorkItem),
+               (RT_WORKITEM_CALL_BACK)halComTxbf_ClkWorkItemCallback,
+               (PVOID)pAdapter,
+               "Txbf_ClkWorkIterm");
+
+       ODM_InitializeWorkItem(
+               pDM_Odm,
+               &(pDM_Odm->BeamformingInfo.TxbfInfo.Txbf_RateWorkItem),
+               (RT_WORKITEM_CALL_BACK)halComTxbf_RateWorkItemCallback,
+               (PVOID)pAdapter,
+               "Txbf_ClkWorkIterm");
+
+       ODM_InitializeWorkItem(
+               pDM_Odm,
+               &(pDM_Odm->BeamformingInfo.TxbfInfo.Txbf_StatusWorkItem),
+               (RT_WORKITEM_CALL_BACK)halComTxbf_StatusWorkItemCallback,
+               (PVOID)pAdapter,
+               "Txbf_StatusWorkItem");
+
+       ODM_InitializeWorkItem(
+               pDM_Odm,
+               &(pDM_Odm->BeamformingInfo.TxbfInfo.Txbf_ResetTxPathWorkItem),
+               (RT_WORKITEM_CALL_BACK)halComTxbf_ResetTxPathWorkItemCallback,
+               (PVOID)pAdapter,
+               "Txbf_ResetTxPathWorkItem");
+
+
 }
 
 VOID
 ODM_FreeAllWorkItems(IN PDM_ODM_T      pDM_Odm )
 {
 #if USE_WORKITEM
-       ODM_FreeWorkItem(       &(pDM_Odm->DM_SWAT_Table.SwAntennaSwitchWorkitem_8723B));
-       
-       ODM_FreeWorkItem(       &(pDM_Odm->DM_SWAT_Table.SwAntennaSwitchWorkitem));
-
+#if (RTL8723B_SUPPORT == 1)||(RTL8821A_SUPPORT == 1)
+       ODM_FreeWorkItem(&(pDM_Odm->DM_SWAT_Table.SwAntennaSwitchWorkitem_8723B));
+#endif
+       ODM_FreeWorkItem(&(pDM_Odm->DM_SWAT_Table.SwAntennaSwitchWorkitem));
        ODM_FreeWorkItem(&(pDM_Odm->PathDivSwitchWorkitem));      
-
        ODM_FreeWorkItem(&(pDM_Odm->CCKPathDiversityWorkitem));
-       
        ODM_FreeWorkItem(&(pDM_Odm->FastAntTrainingWorkitem));
-
        ODM_FreeWorkItem(&(pDM_Odm->MPT_DIGWorkitem));
-
        ODM_FreeWorkItem(&(pDM_Odm->RaRptWorkitem));
-
        ODM_FreeWorkItem((&pDM_Odm->DM_RXHP_Table.PSDTimeWorkitem));
+       ODM_FreeWorkItem((&pDM_Odm->sbdcnt_workitem));
 #endif
+       ODM_FreeWorkItem((&pDM_Odm->BeamformingInfo.TxbfInfo.Txbf_EnterWorkItem));
+       ODM_FreeWorkItem((&pDM_Odm->BeamformingInfo.TxbfInfo.Txbf_LeaveWorkItem));
+       ODM_FreeWorkItem((&pDM_Odm->BeamformingInfo.TxbfInfo.Txbf_FwNdpaWorkItem));
+       ODM_FreeWorkItem((&pDM_Odm->BeamformingInfo.TxbfInfo.Txbf_ClkWorkItem));
+       ODM_FreeWorkItem((&pDM_Odm->BeamformingInfo.TxbfInfo.Txbf_RateWorkItem));
+       ODM_FreeWorkItem((&pDM_Odm->BeamformingInfo.TxbfInfo.Txbf_StatusWorkItem));
+       ODM_FreeWorkItem((&pDM_Odm->BeamformingInfo.TxbfInfo.Txbf_ResetTxPathWorkItem));
+
 
 }
-#endif
+#endif /*#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)*/
 
 /*
 VOID
@@ -1031,55 +1306,6 @@ odm_IsLinked(
 }
 */
 
-
-//3============================================================
-//3 DIG
-//3============================================================
-/*-----------------------------------------------------------------------------
- * Function:   odm_DIGInit()
- *
- * Overview:   Set DIG scheme init value.
- *
- * Input:              NONE
- *
- * Output:             NONE
- *
- * Return:             NONE
- *
- * Revised History:
- *     When            Who             Remark
- *
- *---------------------------------------------------------------------------*/
-
-//Remove DIG by yuchen
-
-//Remove DIG and FA check by Yu Chen
-
-
-//3============================================================
-//3 BB Power Save
-//3============================================================
-
-//Remove BB power saving by Yuchen
-
-//3============================================================
-//3 RATR MASK
-//3============================================================
-//3============================================================
-//3 Rate Adaptive
-//3============================================================
-
-//Remove RAMask by RS_James
-
-//3============================================================
-//3 Dynamic Tx Power
-//3============================================================
-
-//Remove BY YuChen
-
-//Remove  Rssimonitorcheck related function to odm_rssimonitorcheck.c 
-
-
 VOID
 ODM_InitAllTimers(
        IN PDM_ODM_T    pDM_Odm 
@@ -1091,25 +1317,34 @@ ODM_InitAllTimers(
        ODM_InitializeTimer(pDM_Odm,&pDM_Odm->DM_SWAT_Table.SwAntennaSwitchTimer,
                (RT_TIMER_CALL_BACK)odm_SwAntDivChkAntSwitchCallback, NULL, "SwAntennaSwitchTimer");
 #endif
-       
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
-       ODM_InitializeTimer(pDM_Odm, &pDM_Odm->PSDTimer, 
+
+#if (DM_ODM_SUPPORT_TYPE == ODM_AP)
+#ifdef MP_TEST
+       if (pDM_Odm->priv->pshare->rf_ft_var.mp_specific) 
+               ODM_InitializeTimer(pDM_Odm, &pDM_Odm->MPT_DIGTimer, 
+                       (RT_TIMER_CALL_BACK)odm_MPT_DIGCallback, NULL, "MPT_DIGTimer"); 
+#endif
+#elif(DM_ODM_SUPPORT_TYPE == ODM_WIN)
+       ODM_InitializeTimer(pDM_Odm, &pDM_Odm->MPT_DIGTimer, 
+               (RT_TIMER_CALL_BACK)odm_MPT_DIGCallback, NULL, "MPT_DIGTimer");
+#endif
+
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
+       ODM_InitializeTimer(pDM_Odm, &pDM_Odm->PSDTimer, 
                (RT_TIMER_CALL_BACK)dm_PSDMonitorCallback, NULL, "PSDTimer");
-       //
-       //Path Diversity
-       //Neil Chen--2011--06--16--  / 2012/02/23 MH Revise Arch.
-       //
        ODM_InitializeTimer(pDM_Odm, &pDM_Odm->PathDivSwitchTimer, 
                (RT_TIMER_CALL_BACK)odm_PathDivChkAntSwitchCallback, NULL, "PathDivTimer");
-
        ODM_InitializeTimer(pDM_Odm, &pDM_Odm->CCKPathDiversityTimer, 
                (RT_TIMER_CALL_BACK)odm_CCKTXPathDiversityCallback, NULL, "CCKPathDiversityTimer");
-
-       ODM_InitializeTimer(pDM_Odm, &pDM_Odm->MPT_DIGTimer, 
-               (RT_TIMER_CALL_BACK)odm_MPT_DIGCallback, NULL, "MPT_DIGTimer");
-
        ODM_InitializeTimer(pDM_Odm, &pDM_Odm->DM_RXHP_Table.PSDTimer,
-               (RT_TIMER_CALL_BACK)odm_PSD_RXHPCallback, NULL, "PSDRXHPTimer");  
+               (RT_TIMER_CALL_BACK)odm_PSD_RXHPCallback, NULL, "PSDRXHPTimer"); 
+       ODM_InitializeTimer(pDM_Odm, &pDM_Odm->sbdcnt_timer,
+               (RT_TIMER_CALL_BACK)phydm_sbd_callback, NULL, "SbdTimer"); 
+       ODM_InitializeTimer(pDM_Odm, &pDM_Odm->BeamformingInfo.TxbfInfo.Txbf_FwNdpaTimer,
+               (RT_TIMER_CALL_BACK)halComTxbf_FwNdpaTimerCallback, NULL, "Txbf_FwNdpaTimer");
+
+       ODM_InitializeTimer(pDM_Odm, &pDM_Odm->BeamformingInfo.BeamformingTimer,
+               (RT_TIMER_CALL_BACK)Beamforming_SWTimerCallback, NULL, "BeamformingTimer");
 #endif 
 }
 
@@ -1132,20 +1367,27 @@ ODM_CancelAllTimers(
        ODM_CancelTimer(pDM_Odm,&pDM_Odm->DM_SWAT_Table.SwAntennaSwitchTimer);
 #endif
 
+#if (DM_ODM_SUPPORT_TYPE == ODM_AP)
+#ifdef MP_TEST
+       if (pDM_Odm->priv->pshare->rf_ft_var.mp_specific)
+               ODM_CancelTimer(pDM_Odm, &pDM_Odm->MPT_DIGTimer);
+#endif
+#elif (DM_ODM_SUPPORT_TYPE == ODM_WIN)
+       ODM_CancelTimer(pDM_Odm, &pDM_Odm->MPT_DIGTimer);
+#endif
+
 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
        ODM_CancelTimer(pDM_Odm, &pDM_Odm->PSDTimer);   
-       //
-       //Path Diversity
-       //Neil Chen--2011--06--16--  / 2012/02/23 MH Revise Arch.
-       //
        ODM_CancelTimer(pDM_Odm, &pDM_Odm->PathDivSwitchTimer);
-
        ODM_CancelTimer(pDM_Odm, &pDM_Odm->CCKPathDiversityTimer);
-
        ODM_CancelTimer(pDM_Odm, &pDM_Odm->MPT_DIGTimer);
-
        ODM_CancelTimer(pDM_Odm, &pDM_Odm->DM_RXHP_Table.PSDTimer);
+       ODM_CancelTimer(pDM_Odm, &pDM_Odm->sbdcnt_timer);
+       ODM_CancelTimer(pDM_Odm, &pDM_Odm->BeamformingInfo.TxbfInfo.Txbf_FwNdpaTimer);
+       ODM_CancelTimer(pDM_Odm, &pDM_Odm->BeamformingInfo.BeamformingTimer);
 #endif 
+
+
 }
 
 
@@ -1160,20 +1402,24 @@ ODM_ReleaseAllTimers(
        ODM_ReleaseTimer(pDM_Odm,&pDM_Odm->DM_SWAT_Table.SwAntennaSwitchTimer);
 #endif
 
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
+#if (DM_ODM_SUPPORT_TYPE == ODM_AP)
+    #ifdef MP_TEST
+       if (pDM_Odm->priv->pshare->rf_ft_var.mp_specific)
+               ODM_ReleaseTimer(pDM_Odm, &pDM_Odm->MPT_DIGTimer);
+    #endif
+#elif(DM_ODM_SUPPORT_TYPE == ODM_WIN)
+ODM_ReleaseTimer(pDM_Odm, &pDM_Odm->MPT_DIGTimer);
+#endif
 
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
        ODM_ReleaseTimer(pDM_Odm, &pDM_Odm->PSDTimer);
-       //
-       //Path Diversity
-       //Neil Chen--2011--06--16--  / 2012/02/23 MH Revise Arch.
-       //
        ODM_ReleaseTimer(pDM_Odm, &pDM_Odm->PathDivSwitchTimer);
-
        ODM_ReleaseTimer(pDM_Odm, &pDM_Odm->CCKPathDiversityTimer);
-
        ODM_ReleaseTimer(pDM_Odm, &pDM_Odm->MPT_DIGTimer);
-
-       ODM_ReleaseTimer(pDM_Odm, &pDM_Odm->DM_RXHP_Table.PSDTimer); 
+       ODM_ReleaseTimer(pDM_Odm, &pDM_Odm->DM_RXHP_Table.PSDTimer);
+       ODM_ReleaseTimer(pDM_Odm, &pDM_Odm->sbdcnt_timer);
+       ODM_ReleaseTimer(pDM_Odm, &pDM_Odm->BeamformingInfo.TxbfInfo.Txbf_FwNdpaTimer);
+       ODM_ReleaseTimer(pDM_Odm, &pDM_Odm->BeamformingInfo.BeamformingTimer);
 #endif 
 }
 
@@ -1182,157 +1428,30 @@ ODM_ReleaseAllTimers(
 //3 Tx Power Tracking
 //3============================================================
 
-VOID
-odm_IQCalibrate(
-               IN      PDM_ODM_T       pDM_Odm 
-               )
-{
-       PADAPTER        Adapter = pDM_Odm->Adapter;
-
-#if( DM_ODM_SUPPORT_TYPE == ODM_WIN)   
-       if(*pDM_Odm->pIsFcsModeEnable)
-               return;
-#endif
-
-       if(!IS_HARDWARE_TYPE_JAGUAR(Adapter))
-               return;
-       else if(IS_HARDWARE_TYPE_8812AU(Adapter))
-               return;
-#if (RTL8821A_SUPPORT == 1)
-       if(pDM_Odm->bLinked)
-       {
-               if((*pDM_Odm->pChannel != pDM_Odm->preChannel) && (!*pDM_Odm->pbScanInProcess))
-               {
-                       pDM_Odm->preChannel = *pDM_Odm->pChannel;
-                       pDM_Odm->LinkedInterval = 0;
-               }
-
-               if(pDM_Odm->LinkedInterval < 3)
-                       pDM_Odm->LinkedInterval++;
-               
-               if(pDM_Odm->LinkedInterval == 2)
-               {
-                       // Mark out IQK flow to prevent tx stuck. by Maddest 20130306
-                       // Open it verified by James 20130715
-                       PHY_IQCalibrate_8821A(pDM_Odm, FALSE);
-               }
-       }
-       else
-               pDM_Odm->LinkedInterval = 0;
-#endif
-}
-
-
-
-//antenna mapping info
-// 1: right-side antenna
-// 2/0: left-side antenna
-//PDM_SWAT_Table->CCK_Ant1_Cnt /OFDM_Ant1_Cnt:  for right-side antenna:   Ant:1    RxDefaultAnt1
-//PDM_SWAT_Table->CCK_Ant2_Cnt /OFDM_Ant2_Cnt:  for left-side antenna:     Ant:0    RxDefaultAnt2
-// We select left antenna as default antenna in initial process, modify it as needed
-//
-
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
-
-// Only for 8723A SW ANT DIV INIT--2012--07--17
-VOID
-odm_SwAntDivInit_NIC_8723A(
-       IN      PDM_ODM_T               pDM_Odm)
-{
-       pSWAT_T         pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;
-       PADAPTER                Adapter = pDM_Odm->Adapter;
-       
-       u1Byte                  btAntNum=BT_GetPgAntNum(Adapter);
-
-       if(IS_HARDWARE_TYPE_8723A(Adapter))
-       {
-               pDM_SWAT_Table->ANTA_ON =TRUE;
-               
-               // Set default antenna B status by PG
-               if(btAntNum == 2)
-                       pDM_SWAT_Table->ANTB_ON = TRUE;
-               else if(btAntNum == 1)
-                       pDM_SWAT_Table->ANTB_ON = FALSE;
-               else
-                       pDM_SWAT_Table->ANTB_ON = TRUE;
-       }       
-       
-}
-
-#endif //end #ifMP
-
 
 
-//3============================================================
-//3 SW Antenna Diversity
-//3============================================================
 
+#if (DM_ODM_SUPPORT_TYPE == ODM_AP)
 VOID
-odm_AntennaDiversityInit(
-       IN              PDM_ODM_T               pDM_Odm 
-)
+ODM_InitAllThreads(
+       IN PDM_ODM_T    pDM_Odm 
+       )
 {
-       if(pDM_Odm->mp_mode == TRUE)
-               return;
-
-       if(pDM_Odm->SupportICType & (ODM_OLD_IC_ANTDIV_SUPPORT))
-       {
-               #if (RTL8192C_SUPPORT==1) 
-               ODM_OldIC_AntDiv_Init(pDM_Odm);
-               #endif
-       }
-       else
-       {
-               #if(defined(CONFIG_HW_ANTENNA_DIVERSITY))
-               ODM_AntDiv_Config(pDM_Odm);
-               ODM_AntDivInit(pDM_Odm);
-               #endif
-       }
+       #ifdef TPT_THREAD
+       kTPT_task_init(pDM_Odm->priv);
+       #endif
 }
 
 VOID
-odm_AntennaDiversity(
-       IN              PDM_ODM_T               pDM_Odm 
-)
-{
-       if(pDM_Odm->mp_mode == TRUE)
-               return;
-
-       if(pDM_Odm->SupportICType & (ODM_OLD_IC_ANTDIV_SUPPORT))
-       {
-               #if (RTL8192C_SUPPORT==1) 
-               ODM_OldIC_AntDiv(pDM_Odm);
-               #endif
-       }
-       else
-       {
-               #if(defined(CONFIG_HW_ANTENNA_DIVERSITY))
-               ODM_AntDiv(pDM_Odm);
-               #endif
-       }
-}
-
-
-void
-odm_SwAntDetectInit(
-       IN              PDM_ODM_T               pDM_Odm
+ODM_StopAllThreads(
+       IN PDM_ODM_T    pDM_Odm 
        )
 {
-       pSWAT_T         pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;
-#if (RTL8723B_SUPPORT == 1)
-       pDM_SWAT_Table->SWAS_NoLink_BK_Reg92c = ODM_Read4Byte(pDM_Odm, rDPDT_control);
-#endif
-       pDM_SWAT_Table->PreAntenna = MAIN_ANT;
-       pDM_SWAT_Table->CurAntenna = MAIN_ANT;
-       pDM_SWAT_Table->SWAS_NoLink_State = 0;
+       #ifdef TPT_THREAD
+       kTPT_task_stop(pDM_Odm->priv);
+       #endif
 }
-
-
-//============================================================
-//EDCA Turbo
-//============================================================
-
-//Remove Edca by Yuchen
+#endif 
 
 
 #if( DM_ODM_SUPPORT_TYPE == ODM_WIN) 
@@ -1352,7 +1471,7 @@ ODM_CheckPowerStatus(
        // 2011/07/27 MH We are not testing ready~~!! We may fail to get correct value when init sequence.
        if (pMgntInfo->init_adpt_in_progress == TRUE)
        {
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("ODM_CheckPowerStatus Return TRUE, due to initadapter"));
+               ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("ODM_CheckPowerStatus Return TRUE, due to initadapter\n"));
                return  TRUE;
        }
        
@@ -1368,6 +1487,37 @@ ODM_CheckPowerStatus(
        }
        return  TRUE;
 }
+#elif( DM_ODM_SUPPORT_TYPE == ODM_AP)
+BOOLEAN
+ODM_CheckPowerStatus(
+               IN      PADAPTER                Adapter)
+{
+       /*
+          HAL_DATA_TYPE                *pHalData = GET_HAL_DATA(Adapter);
+          PDM_ODM_T                    pDM_Odm = &pHalData->DM_OutSrc;
+          RT_RF_POWER_STATE    rtState;
+          PMGNT_INFO                   pMgntInfo       = &(Adapter->MgntInfo);
+
+       // 2011/07/27 MH We are not testing ready~~!! We may fail to get correct value when init sequence.
+       if (pMgntInfo->init_adpt_in_progress == TRUE)
+       {
+       ODM_RT_TRACE(pDM_Odm,COMP_INIT, DBG_LOUD, ("ODM_CheckPowerStatus Return TRUE, due to initadapter"));
+       return  TRUE;
+       }
+
+       //
+       //      2011/07/19 MH We can not execute tx pwoer tracking/ LLC calibrate or IQK.
+       //
+       Adapter->HalFunc.GetHwRegHandler(Adapter, HW_VAR_RF_STATE, (pu1Byte)(&rtState));        
+       if(Adapter->bDriverStopped || Adapter->bDriverIsGoingToPnpSetPowerSleep || rtState == eRfOff)
+       {
+       ODM_RT_TRACE(pDM_Odm,COMP_INIT, DBG_LOUD, ("ODM_CheckPowerStatus Return FALSE, due to %d/%d/%d\n", 
+       Adapter->bDriverStopped, Adapter->bDriverIsGoingToPnpSetPowerSleep, rtState));
+       return  FALSE;
+       }
+        */
+       return  TRUE;
+}
 #endif
 
 // need to ODM CE Platform
@@ -1406,7 +1556,7 @@ GetPSDData(
        psd_report = ODM_GetBBReg(pDM_Odm,0x8B4, bMaskDWord) & 0x0000FFFF;
        
 #if 1//(DEV_BUS_TYPE == RT_PCI_INTERFACE) && ( (RT_PLATFORM == PLATFORM_LINUX) || (RT_PLATFORM == PLATFORM_MACOSX))
-       psd_report = (u4Byte) (ConvertTo_dB(psd_report))+(u4Byte)(initial_gain_psd-0x1c);
+       psd_report = (u4Byte) (odm_ConvertTo_dB(psd_report))+(u4Byte)(initial_gain_psd-0x1c);
 #else
        psd_report = (int) (20*log10((double)psd_report))+(int)(initial_gain_psd-0x1c);
 #endif
@@ -1414,9 +1564,10 @@ GetPSDData(
        return psd_report;
        
 }
+#endif
 
 u4Byte 
-ConvertTo_dB(
+odm_ConvertTo_dB(
        u4Byte  Value)
 {
        u1Byte i;
@@ -1424,21 +1575,21 @@ ConvertTo_dB(
        u4Byte dB;
 
        Value = Value & 0xFFFF;
-       
-       for (i=0;i<8;i++)
+
+       for (i = 0; i < 12; i++)
        {
-               if (Value <= dB_Invert_Table[i][11])
+               if (Value <= dB_Invert_Table[i][7])
                {
                        break;
                }
        }
 
-       if (i >= 8)
+       if (i >= 12)
        {
                return (96);    // maximum 96 dB
        }
 
-       for (j=0;j<12;j++)
+       for (j = 0; j < 8; j++)
        {
                if (Value <= dB_Invert_Table[i][j])
                {
@@ -1446,673 +1597,27 @@ ConvertTo_dB(
                }
        }
 
-       dB = i*12 + j + 1;
+       dB = (i << 3) + j + 1;
 
        return (dB);
 }
 
-#endif
-
-
-#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN| ODM_CE))
-
-VOID
-odm_PHY_SaveAFERegisters(
-       IN      PDM_ODM_T       pDM_Odm,
-       IN      pu4Byte         AFEReg,
-       IN      pu4Byte         AFEBackup,
-       IN      u4Byte          RegisterNum
-       )
-{
-       u4Byte  i;
-       
-       //RT_DISP(FINIT, INIT_IQK, ("Save ADDA parameters.\n"));
-       for( i = 0 ; i < RegisterNum ; i++){
-               AFEBackup[i] = ODM_GetBBReg(pDM_Odm, AFEReg[i], bMaskDWord);
-       }
-}
-
-VOID
-odm_PHY_ReloadAFERegisters(
-       IN      PDM_ODM_T       pDM_Odm,
-       IN      pu4Byte         AFEReg,
-       IN      pu4Byte         AFEBackup,
-       IN      u4Byte          RegiesterNum
-       )
-{
-       u4Byte  i;
-
-       //RT_DISP(FINIT, INIT_IQK, ("Reload ADDA power saving parameters !\n"));
-       for(i = 0 ; i < RegiesterNum; i++)
-       {
-       
-               ODM_SetBBReg(pDM_Odm, AFEReg[i], bMaskDWord, AFEBackup[i]);
-       }
-}
-
-//
-// Description:
-//     Set Single/Dual Antenna default setting for products that do not do detection in advance.
-//
-// Added by Joseph, 2012.03.22
-//
-VOID
-ODM_SingleDualAntennaDefaultSetting(
-       IN              PDM_ODM_T               pDM_Odm
-       )
-{
-       pSWAT_T         pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;
-       PADAPTER        pAdapter         =  pDM_Odm->Adapter;
-       u1Byte btAntNum = 2;
-#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN))
-       btAntNum=BT_GetPgAntNum(pAdapter);
-#elif (DM_ODM_SUPPORT_TYPE & (ODM_CE))
-#ifdef CONFIG_BT_COEXIST
-       btAntNum = hal_btcoex_GetPgAntNum(pAdapter);
-#endif
-#endif
-
-       // Set default antenna A and B status
-       if(btAntNum == 2)
-       {
-               pDM_SWAT_Table->ANTA_ON=TRUE;
-               pDM_SWAT_Table->ANTB_ON=TRUE;
-               //RT_TRACE(COMP_ANTENNA, DBG_LOUD, ("Dual antenna\n"));
-       }
-#ifdef CONFIG_BT_COEXIST
-       else if(btAntNum == 1)
-       {// Set antenna A as default
-               pDM_SWAT_Table->ANTA_ON=TRUE;
-               pDM_SWAT_Table->ANTB_ON=FALSE;
-               //RT_TRACE(COMP_ANTENNA, DBG_LOUD, ("Single antenna\n"));
-       }
-       else
-       {
-               //RT_ASSERT(FALSE, ("Incorrect antenna number!!\n"));
-       }
-#endif
-}
-
-
-
-//2 8723A ANT DETECT
-//
-// Description:
-//     Implement IQK single tone for RF DPK loopback and BB PSD scanning. 
-//     This function is cooperated with BB team Neil. 
-//
-// Added by Roger, 2011.12.15
-//
-BOOLEAN
-ODM_SingleDualAntennaDetection(
-       IN              PDM_ODM_T               pDM_Odm,
-       IN              u1Byte                  mode
-       )
-{
-       PADAPTER        pAdapter         =  pDM_Odm->Adapter;
-       pSWAT_T         pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;
-       u4Byte          CurrentChannel,RfLoopReg;
-       u1Byte          n;
-       u4Byte          Reg88c, Regc08, Reg874, Regc50, Reg948=0, Regb2c=0, Reg92c=0, AFE_rRx_Wait_CCA=0;
-       u1Byte          initial_gain = 0x5a;
-       u4Byte          PSD_report_tmp;
-       u4Byte          AntA_report = 0x0, AntB_report = 0x0,AntO_report=0x0;
-       BOOLEAN         bResult = TRUE;
-       u4Byte          AFE_Backup[16];
-       u4Byte          AFE_REG_8723A[16] = {
-                                       rRx_Wait_CCA,   rTx_CCK_RFON, 
-                                       rTx_CCK_BBON,   rTx_OFDM_RFON,
-                                       rTx_OFDM_BBON,  rTx_To_Rx,
-                                       rTx_To_Tx,              rRx_CCK, 
-                                       rRx_OFDM,               rRx_Wait_RIFS, 
-                                       rRx_TO_Rx,              rStandby,
-                                       rSleep,                 rPMPD_ANAEN,    
-                                       rFPGA0_XCD_SwitchControl, rBlue_Tooth};
-
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SingleDualAntennaDetection()============> \n"));     
-
-       
-       if(!(pDM_Odm->SupportICType & (ODM_RTL8723A|ODM_RTL8192C|ODM_RTL8723B)))
-               return bResult;
-
-       // Retrieve antenna detection registry info, added by Roger, 2012.11.27.
-       if(!IS_ANT_DETECT_SUPPORT_SINGLE_TONE(pAdapter))
-               return bResult;
-
-       if(pDM_Odm->SupportICType == ODM_RTL8192C)
-       {
-               //Which path in ADC/DAC is turnned on for PSD: both I/Q
-               ODM_SetBBReg(pDM_Odm, 0x808, BIT10|BIT11, 0x3);
-               //Ageraged number: 8
-               ODM_SetBBReg(pDM_Odm, 0x808, BIT12|BIT13, 0x1);
-               //pts = 128;
-               ODM_SetBBReg(pDM_Odm, 0x808, BIT14|BIT15, 0x0);
-       }
-
-       //1 Backup Current RF/BB Settings       
-       
-       CurrentChannel = ODM_GetRFReg(pDM_Odm, ODM_RF_PATH_A, ODM_CHANNEL, bRFRegOffsetMask);
-       RfLoopReg = ODM_GetRFReg(pDM_Odm, ODM_RF_PATH_A, 0x00, bRFRegOffsetMask);
-       if(!(pDM_Odm->SupportICType == ODM_RTL8723B))
-       ODM_SetBBReg(pDM_Odm, rFPGA0_XA_RFInterfaceOE, ODM_DPDT, Antenna_A);  // change to Antenna A
-#if (RTL8723B_SUPPORT == 1)
-       else
-       {
-               Reg92c = ODM_GetBBReg(pDM_Odm, 0x92c, bMaskDWord);
-               Reg948 = ODM_GetBBReg(pDM_Odm, rS0S1_PathSwitch, bMaskDWord);
-               Regb2c = ODM_GetBBReg(pDM_Odm, AGC_table_select, bMaskDWord);
-               ODM_SetBBReg(pDM_Odm, rDPDT_control, 0x3, 0x1);
-               ODM_SetBBReg(pDM_Odm, rfe_ctrl_anta_src, 0xff, 0x77);
-               ODM_SetBBReg(pDM_Odm, rS0S1_PathSwitch, 0x3ff, 0x000);
-               ODM_SetBBReg(pDM_Odm, AGC_table_select, BIT31, 0x0);
-       }
-#endif
-       ODM_StallExecution(10);
-       
-       //Store A Path Register 88c, c08, 874, c50
-       Reg88c = ODM_GetBBReg(pDM_Odm, rFPGA0_AnalogParameter4, bMaskDWord);
-       Regc08 = ODM_GetBBReg(pDM_Odm, rOFDM0_TRMuxPar, bMaskDWord);
-       Reg874 = ODM_GetBBReg(pDM_Odm, rFPGA0_XCD_RFInterfaceSW, bMaskDWord);
-       Regc50 = ODM_GetBBReg(pDM_Odm, rOFDM0_XAAGCCore1, bMaskDWord);  
-       
-       // Store AFE Registers
-       if(pDM_Odm->SupportICType & (ODM_RTL8723A|ODM_RTL8192C))
-       odm_PHY_SaveAFERegisters(pDM_Odm, AFE_REG_8723A, AFE_Backup, 16);       
-       else if(pDM_Odm->SupportICType == ODM_RTL8723B)
-               AFE_rRx_Wait_CCA = ODM_GetBBReg(pDM_Odm, rRx_Wait_CCA,bMaskDWord);
-       
-       //Set PSD 128 pts
-       ODM_SetBBReg(pDM_Odm, rFPGA0_PSDFunction, BIT14|BIT15, 0x0);  //128 pts
-       
-       // To SET CH1 to do
-       ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, ODM_CHANNEL, bRFRegOffsetMask, 0x7401);     //Channel 1
-       
-       // AFE all on step
-       if(pDM_Odm->SupportICType & (ODM_RTL8723A|ODM_RTL8192C))
-       {
-               ODM_SetBBReg(pDM_Odm, rRx_Wait_CCA, bMaskDWord, 0x6FDB25A4);
-               ODM_SetBBReg(pDM_Odm, rTx_CCK_RFON, bMaskDWord, 0x6FDB25A4);
-               ODM_SetBBReg(pDM_Odm, rTx_CCK_BBON, bMaskDWord, 0x6FDB25A4);
-               ODM_SetBBReg(pDM_Odm, rTx_OFDM_RFON, bMaskDWord, 0x6FDB25A4);
-               ODM_SetBBReg(pDM_Odm, rTx_OFDM_BBON, bMaskDWord, 0x6FDB25A4);
-               ODM_SetBBReg(pDM_Odm, rTx_To_Rx, bMaskDWord, 0x6FDB25A4);
-               ODM_SetBBReg(pDM_Odm, rTx_To_Tx, bMaskDWord, 0x6FDB25A4);
-               ODM_SetBBReg(pDM_Odm, rRx_CCK, bMaskDWord, 0x6FDB25A4);
-               ODM_SetBBReg(pDM_Odm, rRx_OFDM, bMaskDWord, 0x6FDB25A4);
-               ODM_SetBBReg(pDM_Odm, rRx_Wait_RIFS, bMaskDWord, 0x6FDB25A4);
-               ODM_SetBBReg(pDM_Odm, rRx_TO_Rx, bMaskDWord, 0x6FDB25A4);
-               ODM_SetBBReg(pDM_Odm, rStandby, bMaskDWord, 0x6FDB25A4);
-               ODM_SetBBReg(pDM_Odm, rSleep, bMaskDWord, 0x6FDB25A4);
-               ODM_SetBBReg(pDM_Odm, rPMPD_ANAEN, bMaskDWord, 0x6FDB25A4);
-               ODM_SetBBReg(pDM_Odm, rFPGA0_XCD_SwitchControl, bMaskDWord, 0x6FDB25A4);
-               ODM_SetBBReg(pDM_Odm, rBlue_Tooth, bMaskDWord, 0x6FDB25A4);
-       }
-       else if(pDM_Odm->SupportICType == ODM_RTL8723B)
-       {
-               ODM_SetBBReg(pDM_Odm, rRx_Wait_CCA, bMaskDWord, 0x01c00016);
-       }
-
-       // 3 wire Disable
-       ODM_SetBBReg(pDM_Odm, rFPGA0_AnalogParameter4, bMaskDWord, 0xCCF000C0);
-       
-       //BB IQK Setting
-       ODM_SetBBReg(pDM_Odm, rOFDM0_TRMuxPar, bMaskDWord, 0x000800E4);
-       ODM_SetBBReg(pDM_Odm, rFPGA0_XCD_RFInterfaceSW, bMaskDWord, 0x22208000);
-
-       //IQK setting tone@ 4.34Mhz
-       ODM_SetBBReg(pDM_Odm, rTx_IQK_Tone_A, bMaskDWord, 0x10008C1C);
-       ODM_SetBBReg(pDM_Odm, rTx_IQK, bMaskDWord, 0x01007c00); 
-
-       //Page B init
-       ODM_SetBBReg(pDM_Odm, rConfig_AntA, bMaskDWord, 0x00080000);
-       ODM_SetBBReg(pDM_Odm, rConfig_AntA, bMaskDWord, 0x0f600000);
-       ODM_SetBBReg(pDM_Odm, rRx_IQK, bMaskDWord, 0x01004800);
-       ODM_SetBBReg(pDM_Odm, rRx_IQK_Tone_A, bMaskDWord, 0x10008c1f);
-       ODM_SetBBReg(pDM_Odm, rTx_IQK_PI_A, bMaskDWord, 0x82150008);
-       ODM_SetBBReg(pDM_Odm, rRx_IQK_PI_A, bMaskDWord, 0x28150008);
-       ODM_SetBBReg(pDM_Odm, rIQK_AGC_Rsp, bMaskDWord, 0x001028d0);    
-
-       //RF loop Setting
-       if(pDM_Odm->SupportICType & (ODM_RTL8723A|ODM_RTL8192C))
-       ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, 0x0, 0xFFFFF, 0x50008);    
-       
-       //IQK Single tone start
-       ODM_SetBBReg(pDM_Odm, rFPGA0_IQK, bMaskH3Bytes, 0x808000);
-       ODM_SetBBReg(pDM_Odm, rIQK_AGC_Pts, bMaskDWord, 0xf9000000);
-       ODM_SetBBReg(pDM_Odm, rIQK_AGC_Pts, bMaskDWord, 0xf8000000);
-       
-       ODM_StallExecution(10000);
-
-       // PSD report of antenna A
-       PSD_report_tmp=0x0;
-       for (n=0;n<2;n++)
-       {
-               PSD_report_tmp =  GetPSDData(pDM_Odm, 14, initial_gain);        
-               if(PSD_report_tmp >AntA_report)
-                       AntA_report=PSD_report_tmp;
-       }
-
-        // change to Antenna B
-       if(pDM_Odm->SupportICType & (ODM_RTL8723A|ODM_RTL8192C))
-               ODM_SetBBReg(pDM_Odm, rFPGA0_XA_RFInterfaceOE, ODM_DPDT, Antenna_B); 
-#if (RTL8723B_SUPPORT == 1)
-       else if(pDM_Odm->SupportICType == ODM_RTL8723B)
-               ODM_SetBBReg(pDM_Odm, rDPDT_control, 0x3, 0x2);
-#endif
-
-       ODM_StallExecution(10); 
-
-       // PSD report of antenna B
-       PSD_report_tmp=0x0;
-       for (n=0;n<2;n++)
-       {
-               PSD_report_tmp =  GetPSDData(pDM_Odm, 14, initial_gain);        
-               if(PSD_report_tmp > AntB_report)
-                       AntB_report=PSD_report_tmp;
-       }
-
-       // change to open case
-       if(pDM_Odm->SupportICType & (ODM_RTL8723A|ODM_RTL8192C))
-               ODM_SetBBReg(pDM_Odm, rFPGA0_XA_RFInterfaceOE, ODM_DPDT, 0);  // change to Antenna A
-#if (RTL8723B_SUPPORT == 1)
-       else if(pDM_Odm->SupportICType == ODM_RTL8723B)
-               ODM_SetBBReg(pDM_Odm, rDPDT_control, 0x3, 0x0);
-#endif
-
-       ODM_StallExecution(10); 
-       
-       // PSD report of open case
-       PSD_report_tmp=0x0;
-       for (n=0;n<2;n++)
-       {
-               PSD_report_tmp =  GetPSDData(pDM_Odm, 14, initial_gain);        
-               if(PSD_report_tmp > AntO_report)
-                       AntO_report=PSD_report_tmp;
-       }
-
-       //Close IQK Single Tone function
-       ODM_SetBBReg(pDM_Odm, rFPGA0_IQK, bMaskH3Bytes, 0x000000);      
-
-       //1 Return to antanna A
-       if(pDM_Odm->SupportICType & (ODM_RTL8723A|ODM_RTL8192C))
-               ODM_SetBBReg(pDM_Odm, rFPGA0_XA_RFInterfaceOE, ODM_DPDT, Antenna_A);  // change to Antenna A
-#if (RTL8723B_SUPPORT == 1)
-       else if(pDM_Odm->SupportICType == ODM_RTL8723B)
-       {
-               // external DPDT
-               ODM_SetBBReg(pDM_Odm, rDPDT_control, bMaskDWord, Reg92c);
-
-               //internal S0/S1
-               ODM_SetBBReg(pDM_Odm, rS0S1_PathSwitch, bMaskDWord, Reg948);
-               ODM_SetBBReg(pDM_Odm, AGC_table_select, bMaskDWord, Regb2c);
-       }
-#endif
-       ODM_SetBBReg(pDM_Odm, rFPGA0_AnalogParameter4, bMaskDWord, Reg88c);
-       ODM_SetBBReg(pDM_Odm, rOFDM0_TRMuxPar, bMaskDWord, Regc08);
-       ODM_SetBBReg(pDM_Odm, rFPGA0_XCD_RFInterfaceSW, bMaskDWord, Reg874);
-       ODM_SetBBReg(pDM_Odm, rOFDM0_XAAGCCore1, 0x7F, 0x40);
-       ODM_SetBBReg(pDM_Odm, rOFDM0_XAAGCCore1, bMaskDWord, Regc50);
-       ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, RF_CHNLBW, bRFRegOffsetMask,CurrentChannel);
-       ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, 0x00, bRFRegOffsetMask,RfLoopReg);
-
-       //Reload AFE Registers
-       if(pDM_Odm->SupportICType & (ODM_RTL8723A|ODM_RTL8192C))
-       odm_PHY_ReloadAFERegisters(pDM_Odm, AFE_REG_8723A, AFE_Backup, 16);     
-       else if(pDM_Odm->SupportICType == ODM_RTL8723B)
-               ODM_SetBBReg(pDM_Odm, rRx_Wait_CCA, bMaskDWord, AFE_rRx_Wait_CCA);
-
-       if(pDM_Odm->SupportICType == ODM_RTL8723A)
-       {
-               //2 Test Ant B based on Ant A is ON
-               if(mode==ANTTESTB)
-               {
-                       if(AntA_report >=       100)
-                       {
-                               if(AntB_report > (AntA_report+1))
-                               {
-                                       pDM_SWAT_Table->ANTB_ON=FALSE;
-                                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SingleDualAntennaDetection(): Single Antenna A\n"));         
-                               }       
-                               else
-                               {
-                                       pDM_SWAT_Table->ANTB_ON=TRUE;
-                                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SingleDualAntennaDetection(): Dual Antenna is A and B\n"));  
-                               }       
-                       }
-                       else
-                       {
-                                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SingleDualAntennaDetection(): Need to check again\n"));
-                               pDM_SWAT_Table->ANTB_ON=FALSE; // Set Antenna B off as default 
-                               bResult = FALSE;
-                       }
-               }       
-               //2 Test Ant A and B based on DPDT Open
-               else if(mode==ANTTESTALL)
-               {
-                       if((AntO_report >=100) && (AntO_report <=118))
-                       {
-                               if(AntA_report > (AntO_report+1))
-                               {
-                                       pDM_SWAT_Table->ANTA_ON=FALSE;
-                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("Ant A is OFF\n"));
-                               }       
-                               else
-                               {
-                                       pDM_SWAT_Table->ANTA_ON=TRUE;
-                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("Ant A is ON\n"));
-                               }
-
-                               if(AntB_report > (AntO_report+2))
-                               {
-                                       pDM_SWAT_Table->ANTB_ON=FALSE;
-                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("Ant B is OFF\n"));
-                               }       
-                               else
-                               {
-                                       pDM_SWAT_Table->ANTB_ON=TRUE;
-                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("Ant B is ON\n"));
-                               }
-                               
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("psd_report_A[%d]= %d \n", 2416, AntA_report));   
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("psd_report_B[%d]= %d \n", 2416, AntB_report));   
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("psd_report_O[%d]= %d \n", 2416, AntO_report));
-                               
-                               pDM_Odm->AntDetectedInfo.bAntDetected= TRUE;
-                               pDM_Odm->AntDetectedInfo.dBForAntA = AntA_report;
-                               pDM_Odm->AntDetectedInfo.dBForAntB = AntB_report;
-                               pDM_Odm->AntDetectedInfo.dBForAntO = AntO_report;
-                               
-                               }
-                       else
-                               {
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("return FALSE!!\n"));
-                               bResult = FALSE;
-                       }
-               }
-       }
-       else if(pDM_Odm->SupportICType == ODM_RTL8192C)
-       {
-               if(AntA_report >=       100)
-               {
-                       if(AntB_report > (AntA_report+2))
-                       {
-                               pDM_SWAT_Table->ANTA_ON=FALSE;
-                               pDM_SWAT_Table->ANTB_ON=TRUE;
-                               ODM_SetBBReg(pDM_Odm,  rFPGA0_XA_RFInterfaceOE, 0x300, Antenna_B);
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SingleDualAntennaDetection(): Single Antenna B\n"));         
-                       }       
-                       else if(AntA_report > (AntB_report+2))
-                       {
-                               pDM_SWAT_Table->ANTA_ON=TRUE;
-                               pDM_SWAT_Table->ANTB_ON=FALSE;
-                               ODM_SetBBReg(pDM_Odm,  rFPGA0_XA_RFInterfaceOE, 0x300, Antenna_A);
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SingleDualAntennaDetection(): Single Antenna A\n"));
-                       }       
-                       else
-                       {
-                               pDM_SWAT_Table->ANTA_ON=TRUE;
-                               pDM_SWAT_Table->ANTB_ON=TRUE;
-                               RT_TRACE(COMP_ANTENNA, DBG_LOUD, ("ODM_SingleDualAntennaDetection(): Dual Antenna \n"));
-                       }
-               }
-               else
-               {
-                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SingleDualAntennaDetection(): Need to check again\n"));
-                       pDM_SWAT_Table->ANTA_ON=TRUE; // Set Antenna A on as default 
-                       pDM_SWAT_Table->ANTB_ON=FALSE; // Set Antenna B off as default 
-                       bResult = FALSE;
-               }
-       }
-       else if(pDM_Odm->SupportICType == ODM_RTL8723B)
-       {
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("psd_report_A[%d]= %d \n", 2416, AntA_report));   
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("psd_report_B[%d]= %d \n", 2416, AntB_report));   
-               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("psd_report_O[%d]= %d \n", 2416, AntO_report));
-               
-               //2 Test Ant B based on Ant A is ON
-               if(mode==ANTTESTB)
-               {
-                       if(AntA_report >=100 && AntA_report <= 116)
-                       {
-                               if(AntB_report >= (AntA_report+4) && AntB_report > 116)
-                               {
-                                       pDM_SWAT_Table->ANTB_ON=FALSE;
-                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SingleDualAntennaDetection(): Single Antenna A\n"));         
-                               }       
-                               else if(AntB_report >=100 && AntB_report <= 116)
-                               {
-                                       pDM_SWAT_Table->ANTB_ON=TRUE;
-                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SingleDualAntennaDetection(): Dual Antenna is A and B\n"));  
-                               }
-                               else
-                               {
-                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SingleDualAntennaDetection(): Need to check again\n"));
-                                       pDM_SWAT_Table->ANTB_ON=FALSE; // Set Antenna B off as default 
-                                       bResult = FALSE;
-                               }
-                       }
-                       else
-                       {
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SingleDualAntennaDetection(): Need to check again\n"));
-                               pDM_SWAT_Table->ANTB_ON=FALSE; // Set Antenna B off as default 
-                               bResult = FALSE;
-                       }
-               }       
-               //2 Test Ant A and B based on DPDT Open
-               else if(mode==ANTTESTALL)
-               {
-                       if((AntA_report >= 100) && (AntB_report >= 100) && (AntA_report <= 120) && (AntB_report <= 120))
-                       {
-                               if((AntA_report - AntB_report < 2) || (AntB_report - AntA_report < 2))
-                               {
-                                       pDM_SWAT_Table->ANTA_ON=TRUE;
-                                       pDM_SWAT_Table->ANTB_ON=TRUE;
-                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("ODM_SingleDualAntennaDetection(): Dual Antenna\n"));
-                               }
-                               else if(((AntA_report - AntB_report >= 2) && (AntA_report - AntB_report <= 4)) || 
-                                       ((AntB_report - AntA_report >= 2) && (AntB_report - AntA_report <= 4)))
-                               {
-                                       pDM_SWAT_Table->ANTA_ON=FALSE;
-                                       pDM_SWAT_Table->ANTB_ON=FALSE;
-                                       bResult = FALSE;
-                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SingleDualAntennaDetection(): Need to check again\n"));
-                               }
-                               else
-                               {
-                                       pDM_SWAT_Table->ANTA_ON = TRUE;
-                                       pDM_SWAT_Table->ANTB_ON=FALSE;
-                                       ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("ODM_SingleDualAntennaDetection(): Single Antenna A\n"));
-                               }
-                               
-                               pDM_Odm->AntDetectedInfo.bAntDetected= TRUE;
-                               pDM_Odm->AntDetectedInfo.dBForAntA = AntA_report;
-                               pDM_Odm->AntDetectedInfo.dBForAntB = AntB_report;
-                               pDM_Odm->AntDetectedInfo.dBForAntO = AntO_report;
-                               
-                       }
-                       else
-                       {
-                               ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("return FALSE!!\n"));
-                               bResult = FALSE;
-                       }
-               }
-       }
-               
-       return bResult;
-
-}
-
-
-#endif   // end odm_CE
-
-#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN| ODM_CE))
-
-VOID
-odm_Set_RA_DM_ARFB_by_Noisy(
-       IN      PDM_ODM_T       pDM_Odm
-)
-{
-       //DbgPrint("DM_ARFB ====> \n");
-       if (pDM_Odm->bNoisyState){
-               ODM_Write4Byte(pDM_Odm,0x430,0x00000000);
-               ODM_Write4Byte(pDM_Odm,0x434,0x05040200);
-               //DbgPrint("DM_ARFB ====> Noisy State\n");
-       }
-       else{
-               ODM_Write4Byte(pDM_Odm,0x430,0x02010000);
-               ODM_Write4Byte(pDM_Odm,0x434,0x07050403);
-               //DbgPrint("DM_ARFB ====> Clean State\n");
-       }
-       
-}
-
-VOID
-ODM_UpdateNoisyState(
-       IN      PDM_ODM_T       pDM_Odm,
-       IN      BOOLEAN         bNoisyStateFromC2H
-       )
-{
-       //DbgPrint("Get C2H Command! NoisyState=0x%x\n ", bNoisyStateFromC2H);
-       if(pDM_Odm->SupportICType == ODM_RTL8821  || pDM_Odm->SupportICType == ODM_RTL8812  || 
-          pDM_Odm->SupportICType == ODM_RTL8723B || pDM_Odm->SupportICType == ODM_RTL8192E || pDM_Odm->SupportICType == ODM_RTL8188E)
-       {
-               pDM_Odm->bNoisyState = bNoisyStateFromC2H;
-       }
-       odm_Set_RA_DM_ARFB_by_Noisy(pDM_Odm);
-};
-
-u4Byte
-Set_RA_DM_Ratrbitmap_by_Noisy(
-       IN      PDM_ODM_T       pDM_Odm,
-       IN      WIRELESS_MODE   WirelessMode,
-       IN      u4Byte                  ratr_bitmap,
-       IN      u1Byte                  rssi_level
-)
+u4Byte 
+odm_ConvertTo_linear(
+       u4Byte  Value)
 {
-       u4Byte ret_bitmap = ratr_bitmap;
-       switch (WirelessMode)
-       {
-               case WIRELESS_MODE_AC_24G :
-               case WIRELESS_MODE_AC_5G :
-               case WIRELESS_MODE_AC_ONLY:
-                       if (pDM_Odm->bNoisyState){ // in Noisy State
-                               if (rssi_level==1)
-                                       ret_bitmap&=0xfe3f0e08;
-                               else if (rssi_level==2)
-                                       ret_bitmap&=0xff3f8f8c;
-                               else if (rssi_level==3)
-                                       ret_bitmap&=0xffffffcc ;
-                               else
-                                       ret_bitmap&=0xffffffff ;
-                       }
-                       else{                                   // in SNR State
-                               if (rssi_level==1){
-                                       ret_bitmap&=0xfc3e0c08;
-                               }
-                               else if (rssi_level==2){
-                                       ret_bitmap&=0xfe3f0e08;
-                               }
-                               else if (rssi_level==3){
-                                       ret_bitmap&=0xffbfefcc;
-                               }
-                               else{
-                                       ret_bitmap&=0x0fffffff;
-                               }
-                       }
-                       break;
-               case WIRELESS_MODE_B:
-               case WIRELESS_MODE_A:
-               case WIRELESS_MODE_G:
-               case WIRELESS_MODE_N_24G:
-               case WIRELESS_MODE_N_5G:
-                       if (pDM_Odm->bNoisyState){
-                               if (rssi_level==1)
-                                       ret_bitmap&=0x0f0e0c08;
-                               else if (rssi_level==2)
-                                       ret_bitmap&=0x0f8f0e0c;
-                               else if (rssi_level==3)
-                                       ret_bitmap&=0x0fefefcc ;
-                               else
-                                       ret_bitmap&=0xffffffff ;
-                       }
-                       else{
-                               if (rssi_level==1){
-                                       ret_bitmap&=0x0f8f0e08;
-                               }
-                               else if (rssi_level==2){
-                                       ret_bitmap&=0x0fcf8f8c;
-                               }
-                               else if (rssi_level==3){
-                                       ret_bitmap&=0x0fffffcc;
-                               }
-                               else{
-                                       ret_bitmap&=0x0fffffff;
-                               }
-                       }
-                       break;
-               default:
-                       break;
-       }
-       //DbgPrint("DM_RAMask ====> rssi_LV = %d, BITMAP = %x \n", rssi_level, ret_bitmap);
-       return ret_bitmap;
-
-}
+       u1Byte i;
+       u1Byte j;
+       u4Byte linear;
 
+       Value = Value & 0xFF;
 
+       i = (u1Byte)((Value - 1) >> 3);
+       j = (u1Byte)(Value-1) - (i << 3);
 
-VOID
-ODM_UpdateInitRate(
-       IN      PDM_ODM_T       pDM_Odm,
-       IN      u1Byte          Rate
-       )
-{
-       u1Byte                  p = 0;
+       linear = dB_Invert_Table[i][j];
 
-       ODM_RT_TRACE(pDM_Odm,ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,("Get C2H Command! Rate=0x%x\n", Rate));
-       
-       if(pDM_Odm->SupportICType == ODM_RTL8821  || pDM_Odm->SupportICType == ODM_RTL8812  || 
-          pDM_Odm->SupportICType == ODM_RTL8723B || pDM_Odm->SupportICType == ODM_RTL8192E || pDM_Odm->SupportICType == ODM_RTL8188E)
-       {
-               pDM_Odm->TxRate = Rate;
-#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
-       #if DEV_BUS_TYPE==RT_PCI_INTERFACE
-               #if USE_WORKITEM
-               PlatformScheduleWorkItem(&pDM_Odm->RaRptWorkitem);
-               #else
-               if(pDM_Odm->SupportICType == ODM_RTL8821)
-               {
-                       ODM_TxPwrTrackSetPwr8821A(pDM_Odm, MIX_MODE, ODM_RF_PATH_A, 0);
-               }
-               else if(pDM_Odm->SupportICType == ODM_RTL8812)
-               {
-                       for (p = ODM_RF_PATH_A; p < MAX_PATH_NUM_8812A; p++)            
-                       {
-                               ODM_TxPwrTrackSetPwr8812A(pDM_Odm, MIX_MODE, p, 0);
-                       }
-               }
-               else if(pDM_Odm->SupportICType == ODM_RTL8723B)
-               {
-                       ODM_TxPwrTrackSetPwr_8723B(pDM_Odm, MIX_MODE, ODM_RF_PATH_A, 0);
-               }
-               else if(pDM_Odm->SupportICType == ODM_RTL8192E)
-               {
-                       for (p = ODM_RF_PATH_A; p < MAX_PATH_NUM_8192E; p++)            
-                       {
-                               ODM_TxPwrTrackSetPwr92E(pDM_Odm, MIX_MODE, p, 0);
-                       }
-               }
-               else if(pDM_Odm->SupportICType == ODM_RTL8188E)
-               {
-                       ODM_TxPwrTrackSetPwr88E(pDM_Odm, MIX_MODE, ODM_RF_PATH_A, 0);
-               }
-               #endif
-       #else
-               PlatformScheduleWorkItem(&pDM_Odm->RaRptWorkitem);
-       #endif  
-#endif
-       }
-       else
-               return;
+       return (linear);
 }
 
 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
@@ -2155,7 +1660,6 @@ ODM_UpdateInitRateWorkItemCallback(
        }
 }
 #endif
-#endif
 
 //
 // ODM multi-port consideration, added by Roger, 2013.10.01.
@@ -2395,3 +1899,46 @@ odm_UpdatePowerTrainingState(
 #endif
 }
 
+
+
+/*===========================================================*/
+/* The following is for compile only*/
+/*===========================================================*/
+/*#define TARGET_CHNL_NUM_2G_5G        59*/
+#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
+
+u1Byte GetRightChnlPlaceforIQK(u1Byte chnl)
+{
+       u1Byte  channel_all[TARGET_CHNL_NUM_2G_5G] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 100, 
+               102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 149, 151, 153, 155, 157, 159, 161, 163, 165};
+       u1Byte  place = chnl;
+
+       
+       if (chnl > 14) {
+               for (place = 14; place < sizeof(channel_all); place++) {
+                       if (channel_all[place] == chnl)
+                               return place-13;
+               }
+       }
+       
+       return 0;
+}
+
+VOID
+FillH2CCmd92C( 
+       IN      PADAPTER                Adapter,
+       IN      u1Byte  ElementID,
+       IN      u4Byte  CmdLen,
+       IN      pu1Byte pCmdBuffer
+)
+{}
+VOID
+PHY_SetTxPowerLevel8192C(
+       IN      PADAPTER                Adapter,
+       IN      u1Byte                  channel
+       )
+{
+}
+#endif
+/*===========================================================*/
+