Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 255815
b: refs/heads/master
c: 4b9d8d6
h: refs/heads/master
i:
  255813: eab82a0
  255811: e3f0512
  255807: 09d5dcc
v: v3
  • Loading branch information
Mike McCormack authored and John W. Linville committed Jun 20, 2011
1 parent bc77d3c commit 4b9c835
Show file tree
Hide file tree
Showing 4 changed files with 8 additions and 63 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 9c0504403725ca77153a0bdad2f3bef0a05e32f0
refs/heads/master: 4b9d8d67b44aae18e1c4b71281f5cfc0f2105cf6
63 changes: 4 additions & 59 deletions trunk/drivers/net/wireless/rtlwifi/ps.c
Original file line number Diff line number Diff line change
Expand Up @@ -79,53 +79,12 @@ EXPORT_SYMBOL(rtl_ps_disable_nic);

bool rtl_ps_set_rf_state(struct ieee80211_hw *hw,
enum rf_pwrstate state_toset,
u32 changesource, bool protect_or_not)
u32 changesource)
{
struct rtl_priv *rtlpriv = rtl_priv(hw);
struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
bool actionallowed = false;
u16 rfwait_cnt = 0;

/*protect_or_not = true; */

if (protect_or_not)
goto no_protect;

/*
*Only one thread can change
*the RF state at one time, and others
*should wait to be executed.
*/
while (true) {
spin_lock(&rtlpriv->locks.rf_ps_lock);
if (ppsc->rfchange_inprogress) {
spin_unlock(&rtlpriv->locks.rf_ps_lock);

RT_TRACE(rtlpriv, COMP_ERR, DBG_WARNING,
("RF Change in progress!"
"Wait to set..state_toset(%d).\n",
state_toset));

/* Set RF after the previous action is done. */
while (ppsc->rfchange_inprogress) {
rfwait_cnt++;
mdelay(1);

/*
*Wait too long, return false to avoid
*to be stuck here.
*/
if (rfwait_cnt > 100)
return false;
}
} else {
ppsc->rfchange_inprogress = true;
spin_unlock(&rtlpriv->locks.rf_ps_lock);
break;
}
}

no_protect:
switch (state_toset) {
case ERFON:
ppsc->rfoff_reason &= (~changesource);
Expand Down Expand Up @@ -167,12 +126,6 @@ bool rtl_ps_set_rf_state(struct ieee80211_hw *hw,
if (actionallowed)
rtlpriv->cfg->ops->set_rf_power_state(hw, state_toset);

if (!protect_or_not) {
spin_lock(&rtlpriv->locks.rf_ps_lock);
ppsc->rfchange_inprogress = false;
spin_unlock(&rtlpriv->locks.rf_ps_lock);
}

return actionallowed;
}
EXPORT_SYMBOL(rtl_ps_set_rf_state);
Expand All @@ -195,8 +148,7 @@ static void _rtl_ps_inactive_ps(struct ieee80211_hw *hw)
}
}

rtl_ps_set_rf_state(hw, ppsc->inactive_pwrstate,
RF_CHANGE_BY_IPS, false);
rtl_ps_set_rf_state(hw, ppsc->inactive_pwrstate, RF_CHANGE_BY_IPS);

if (ppsc->inactive_pwrstate == ERFOFF &&
rtlhal->interface == INTF_PCI) {
Expand Down Expand Up @@ -587,7 +539,7 @@ void rtl_swlps_rf_awake(struct ieee80211_hw *hw)
}

spin_lock(&rtlpriv->locks.lps_lock);
rtl_ps_set_rf_state(hw, ERFON, RF_CHANGE_BY_PS, false);
rtl_ps_set_rf_state(hw, ERFON, RF_CHANGE_BY_PS);
spin_unlock(&rtlpriv->locks.lps_lock);
}

Expand Down Expand Up @@ -621,15 +573,8 @@ void rtl_swlps_rf_sleep(struct ieee80211_hw *hw)
if (rtlpriv->link_info.busytraffic)
return;

spin_lock(&rtlpriv->locks.rf_ps_lock);
if (rtlpriv->psc.rfchange_inprogress) {
spin_unlock(&rtlpriv->locks.rf_ps_lock);
return;
}
spin_unlock(&rtlpriv->locks.rf_ps_lock);

spin_lock(&rtlpriv->locks.lps_lock);
rtl_ps_set_rf_state(hw, ERFSLEEP, RF_CHANGE_BY_PS, false);
rtl_ps_set_rf_state(hw, ERFSLEEP, RF_CHANGE_BY_PS);
spin_unlock(&rtlpriv->locks.lps_lock);

if (ppsc->reg_rfps_level & RT_RF_OFF_LEVL_ASPM &&
Expand Down
3 changes: 1 addition & 2 deletions trunk/drivers/net/wireless/rtlwifi/ps.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,7 @@
#define MAX_SW_LPS_SLEEP_INTV 5

bool rtl_ps_set_rf_state(struct ieee80211_hw *hw,
enum rf_pwrstate state_toset, u32 changesource,
bool protect_or_not);
enum rf_pwrstate state_toset, u32 changesource);
bool rtl_ps_enable_nic(struct ieee80211_hw *hw);
bool rtl_ps_disable_nic(struct ieee80211_hw *hw);
void rtl_ips_nic_off(struct ieee80211_hw *hw);
Expand Down
3 changes: 2 additions & 1 deletion trunk/drivers/net/wireless/rtlwifi/rtl8192se/hw.c
Original file line number Diff line number Diff line change
Expand Up @@ -994,7 +994,8 @@ int rtl92se_hw_init(struct ieee80211_hw *hw)

rtlpriv->psc.rfoff_reason = RF_CHANGE_BY_INIT;
rtlpriv->psc.rfpwr_state = ERFON;
rtl_ps_set_rf_state(hw, ERFOFF, rfoffreason, true);
/* FIXME: check spinlocks if this block is uncommented */
rtl_ps_set_rf_state(hw, ERFOFF, rfoffreason);
} else {
/* gpio radio on/off is out of adapter start */
if (rtlpriv->psc.hwradiooff == false) {
Expand Down

0 comments on commit 4b9c835

Please sign in to comment.