#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
);
#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
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
#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;
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
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)
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);
}
case PHYDM_CFOTRACK:
pStruct = &DM_CfoTrack;
break;
+
+ case PHYDM_ADAPTIVITY:
+ pStruct = &(pDM_Odm->Adaptivity);
+ break;
default:
break;
case PHYDM_CFOTRACK:
pStruct = &(pDM_Odm->DM_CfoTrack);
break;
+
+ case PHYDM_ADAPTIVITY:
+ pStruct = &(pDM_Odm->Adaptivity);
+ break;
default:
break;
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)
{
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
}
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
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;
}
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);
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)
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
}
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;
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;
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;
//
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:
case ODM_CMNINFO_LINK:
pDM_Odm->bLinked = (BOOLEAN)Value;
break;
-
+
case ODM_CMNINFO_STATION_STATE:
pDM_Odm->bsta_state = (BOOLEAN)Value;
break;
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;
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
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;
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,
(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,
(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
}
*/
-
-//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
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
}
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
+
+
}
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
}
//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)
// 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;
}
}
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
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
return psd_report;
}
+#endif
u4Byte
-ConvertTo_dB(
+odm_ConvertTo_dB(
u4Byte Value)
{
u1Byte i;
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])
{
}
}
- 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)
}
}
#endif
-#endif
//
// ODM multi-port consideration, added by Roger, 2013.10.01.
#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
+/*===========================================================*/
+