void DynamicCCKThreshold(struct net_device *dev) { struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); u16 CCK_Up_Th; u16 CCK_Lw_Th; u16 CCKFalseAlarm; CCK_Up_Th = priv->CCKUpperTh; CCK_Lw_Th = priv->CCKLowerTh; CCKFalseAlarm = (u16)((priv->FalseAlarmRegValue & 0x0000ffff) >> 8); if(priv->StageCCKTh < 3 && CCKFalseAlarm >= CCK_Up_Th) { priv->StageCCKTh ++; UpdateCCKThreshold(dev); } else if(priv->StageCCKTh > 0 && CCKFalseAlarm <= CCK_Lw_Th) { priv->StageCCKTh --; UpdateCCKThreshold(dev); } }
void DynamicInitGain(_adapter *padapter) { struct mib_info *_sys_mib = &(padapter->_sys_mib); u16 CCKFalseAlarm, OFDMFalseAlarm; u16 OfdmFA1, OfdmFA2; u16 CCK_Up_Th, CCK_Lw_Th; int InitialGainStep = 7; // The number of initial gain stages. int LowestGainStage = 4; // The capable lowest stage of performing dig workitem. set_current_state(TASK_INTERRUPTIBLE); #ifdef TODO _sys_mib->FalseAlarmRegValue = read32(padapter, CCK_FALSE_ALARM); #endif CCKFalseAlarm = (u16)(_sys_mib->FalseAlarmRegValue & 0x0000ffff); OFDMFalseAlarm = (u16)( (_sys_mib->FalseAlarmRegValue>>16) & 0x0000ffff); OfdmFA1 = 0x15; OfdmFA2 = ((u16)(_sys_mib->RegDigOfdmFaUpTh)) << 8; //OfdmFA2 = 0xC00; DEBUG_INFO(("\n r8187_dig_thread:FalseAlarmRegValue = %8x \n", _sys_mib->FalseAlarmRegValue)); // The number of initial gain steps is different, by Bruce, 2007-04-13. if(_sys_mib->InitialGain == 0) //autoDIG {// Advised from SD3 DZ, by Bruce, 2007-06-05. _sys_mib->InitialGain = 4; // In 87B, m74dBm means State 4 (m82dBm) } #ifdef TODO if(padapter->registrypriv.chip_version != VERSION_8187B_B) { // Advised from SD3 DZ, by Bruce, 2007-06-05. OfdmFA1 = 0x20; } #endif InitialGainStep = 8; LowestGainStage = 1; if (OFDMFalseAlarm > OfdmFA1) { if (OFDMFalseAlarm > OfdmFA2) { _sys_mib->DIG_NumberFallbackVote++; if (_sys_mib->DIG_NumberFallbackVote >1) { // serious OFDM False Alarm, need fallback // By Bruce, 2007-03-29. // if (priv->InitialGain < 7) // In 87B, m66dBm means State 7 (m74dBm) if (_sys_mib->InitialGain < InitialGainStep) { _sys_mib->InitialGain = (_sys_mib->InitialGain + 1); UpdateInitialGain(padapter); // 2005.01.06, by rcnjko. } _sys_mib->DIG_NumberFallbackVote = 0; _sys_mib->DIG_NumberUpgradeVote = 0; } } else { if (_sys_mib->DIG_NumberFallbackVote) _sys_mib->DIG_NumberFallbackVote--; } _sys_mib->DIG_NumberUpgradeVote=0; } else //OFDM False Alarm < 0x15 { if (_sys_mib->DIG_NumberFallbackVote) _sys_mib->DIG_NumberFallbackVote--; _sys_mib->DIG_NumberUpgradeVote++; if (_sys_mib->DIG_NumberUpgradeVote>9) { if (_sys_mib->InitialGain > LowestGainStage) // In 87B, m78dBm means State 4 (m864dBm) { _sys_mib->InitialGain = (_sys_mib->InitialGain - 1); UpdateInitialGain(padapter); // 2005.01.06, by rcnjko. } _sys_mib->DIG_NumberFallbackVote = 0; _sys_mib->DIG_NumberUpgradeVote = 0; } } // By Bruce, 2007-03-29. // Dynamically update CCK Power Detection Threshold. CCK_Up_Th = _sys_mib->CCKUpperTh; CCK_Lw_Th = _sys_mib->CCKLowerTh; CCKFalseAlarm = (u16)((_sys_mib->FalseAlarmRegValue & 0x0000ffff) >> 8); // We only care about the higher byte. if( _sys_mib->StageCCKTh < 3 && CCKFalseAlarm >= CCK_Up_Th) { _sys_mib->StageCCKTh ++; UpdateCCKThreshold(padapter); } else if(_sys_mib->StageCCKTh > 0 && CCKFalseAlarm <= CCK_Lw_Th) { _sys_mib->StageCCKTh --; UpdateCCKThreshold(padapter); } }