void rtw_sreset_reset(struct rtw_adapter *active_adapter) { struct rtw_adapter *padapter = GET_PRIMARY_ADAPTER(active_adapter); struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter); struct sreset_priv *psrtpriv = &pHalData->srestpriv; struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv; unsigned long start = jiffies; DBG_8723A("%s\n", __func__); mutex_lock(&psrtpriv->silentreset_mutex); psrtpriv->silent_reset_inprogress = true; pwrpriv->change_rfpwrstate = rf_off; sreset_stop_adapter(padapter); ips_enter23a(padapter); ips_leave23a(padapter); sreset_start_adapter(padapter); psrtpriv->silent_reset_inprogress = false; mutex_unlock(&psrtpriv->silentreset_mutex); DBG_8723A("%s done in %d ms\n", __func__, jiffies_to_msecs(jiffies - start)); }
int _rtw_pwr_wakeup23a(struct rtw_adapter *padapter, u32 ips_deffer_ms, const char *caller) { struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv; struct mlme_priv *pmlmepriv = &padapter->mlmepriv; int ret = _SUCCESS; unsigned long start = jiffies; unsigned long new_deny_time; new_deny_time = jiffies + msecs_to_jiffies(ips_deffer_ms); if (time_before(pwrpriv->ips_deny_time, new_deny_time)) pwrpriv->ips_deny_time = new_deny_time; if (pwrpriv->ps_processing) { DBG_8723A("%s wait ps_processing...\n", __func__); while (pwrpriv->ps_processing && jiffies_to_msecs(jiffies - start) <= 3000) msleep(10); if (pwrpriv->ps_processing) DBG_8723A("%s wait ps_processing timeout\n", __func__); else DBG_8723A("%s wait ps_processing done\n", __func__); } if (rtw_sreset_inprogress(padapter)) { DBG_8723A("%s wait sreset_inprogress...\n", __func__); while (rtw_sreset_inprogress(padapter) && jiffies_to_msecs(jiffies - start) <= 4000) msleep(10); if (rtw_sreset_inprogress(padapter)) DBG_8723A("%s wait sreset_inprogress timeout\n", __func__); else DBG_8723A("%s wait sreset_inprogress done\n", __func__); } if (pwrpriv->bInSuspend) { DBG_8723A("%s wait bInSuspend...\n", __func__); while (pwrpriv->bInSuspend && (jiffies_to_msecs(jiffies - start) <= 3000)) { msleep(10); } if (pwrpriv->bInSuspend) DBG_8723A("%s wait bInSuspend timeout\n", __func__); else DBG_8723A("%s wait bInSuspend done\n", __func__); } /* System suspend is not allowed to wakeup */ if (pwrpriv->bInSuspend) { ret = _FAIL; goto exit; } /* I think this should be check in IPS, LPS, autosuspend functions... */ if (check_fwstate(pmlmepriv, _FW_LINKED)) { ret = _SUCCESS; goto exit; } if (rf_off == pwrpriv->rf_pwrstate) { DBG_8723A("%s call ips_leave23a....\n", __func__); if (ips_leave23a(padapter)== _FAIL) { DBG_8723A("======> ips_leave23a fail.............\n"); ret = _FAIL; goto exit; } } /* TODO: the following checking need to be merged... */ if (padapter->bDriverStopped || !padapter->bup || !padapter->hw_init_completed) { DBG_8723A("%s: bDriverStopped =%d, bup =%d, hw_init_completed " "=%u\n", caller, padapter->bDriverStopped, padapter->bup, padapter->hw_init_completed); ret = _FAIL; goto exit; } exit: new_deny_time = jiffies + msecs_to_jiffies(ips_deffer_ms); if (time_before(pwrpriv->ips_deny_time, new_deny_time)) pwrpriv->ips_deny_time = new_deny_time; return ret; }