// // Description: // Change RF power state. // // Assumption: // This function must be executed in re-schdulable context, // ie. PASSIVE_LEVEL. // // 050823, by rcnjko. // static bool SetRFPowerState( struct net_device* dev, RT_RF_POWER_STATE eRFPowerState ) { struct r8192_priv *priv = ieee80211_priv(dev); bool bResult = false; RT_TRACE(COMP_RF,"---------> SetRFPowerState(): eRFPowerState(%d)\n", eRFPowerState); #ifdef RTL8192E if(eRFPowerState == priv->ieee80211->eRFPowerState && priv->bHwRfOffAction == 0) #else if(eRFPowerState == priv->ieee80211->eRFPowerState) #endif { RT_TRACE(COMP_POWER, "<--------- SetRFPowerState(): discard the request for eRFPowerState(%d) is the same.\n", eRFPowerState); return bResult; } bResult = SetRFPowerState8190(dev, eRFPowerState); RT_TRACE(COMP_POWER, "<--------- SetRFPowerState(): bResult(%d)\n", bResult); return bResult; }
// // Description: // Chang RF Power State. // Note that, only MgntActSet_RF_State() is allowed to set HW_VAR_RF_STATE. // // Assumption: // PASSIVE LEVEL. // bool MgntActSet_RF_State(struct r8192_priv *priv, RT_RF_POWER_STATE StateToSet, RT_RF_CHANGE_SOURCE ChangeSource) { bool bActionAllowed = false; bool bConnectBySSID = false; RT_RF_POWER_STATE rtState; RT_TRACE(COMP_POWER, "===>MgntActSet_RF_State(): StateToSet(%d)\n",StateToSet); spin_lock(&priv->rf_ps_lock); rtState = priv->eRFPowerState; switch(StateToSet) { case eRfOn: priv->RfOffReason &= (~ChangeSource); if (!priv->RfOffReason) { priv->RfOffReason = 0; bActionAllowed = true; if(rtState == eRfOff && ChangeSource >=RF_CHANGE_BY_HW ) { bConnectBySSID = true; } } else RT_TRACE(COMP_POWER, "MgntActSet_RF_State - eRfon reject pMgntInfo->RfOffReason= 0x%x, ChangeSource=0x%X\n", priv->RfOffReason, ChangeSource); break; case eRfOff: if (priv->RfOffReason > RF_CHANGE_BY_IPS) { // Disconnect to current BSS when radio off. Asked by QuanTa. MgntDisconnect(priv, disas_lv_ss); } priv->RfOffReason |= ChangeSource; bActionAllowed = true; break; case eRfSleep: priv->RfOffReason |= ChangeSource; bActionAllowed = true; break; } if (bActionAllowed) { RT_TRACE(COMP_POWER, "MgntActSet_RF_State(): Action is allowed.... StateToSet(%d), RfOffReason(%#X)\n", StateToSet, priv->RfOffReason); // Config HW to the specified mode. SetRFPowerState8190(priv, StateToSet); } else { RT_TRACE(COMP_POWER, "MgntActSet_RF_State(): Action is rejected.... StateToSet(%d), ChangeSource(%#X), RfOffReason(%#X)\n", StateToSet, ChangeSource, priv->RfOffReason); } // Release RF spinlock spin_unlock(&priv->rf_ps_lock); RT_TRACE(COMP_POWER, "<===MgntActSet_RF_State()\n"); return bActionAllowed; }