static void sreset_restore_network_station(struct rtw_adapter *padapter) { struct mlme_priv *mlmepriv = &padapter->mlmepriv; struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info; u8 threshold; rtw_setopmode_cmd23a(padapter, NL80211_IFTYPE_STATION); /* TH = 1 => means that invalidate usb rx aggregation */ /* TH = 0 => means that validate usb rx aggregation, use init value. */ if (mlmepriv->htpriv.ht_option) { if (padapter->registrypriv.wifi_spec == 1) threshold = 1; else threshold = 0; } else threshold = 1; rtl8723a_set_rxdma_agg_pg_th(padapter, threshold); set_channel_bwmode23a(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode); hw_var_set_bssid(padapter, pmlmeinfo->network.MacAddress); hw_var_set_mlme_join(padapter, 0); rtl8723a_set_media_status(padapter, pmlmeinfo->state & 0x3); mlmeext_joinbss_event_callback23a(padapter, 1); /* restore Sequence No. */ rtl8723au_write8(padapter, REG_NQOS_SEQ, padapter->xmitpriv.nqos_ssn); sreset_restore_security_station(padapter); }
int ips_leave23a(struct rtw_adapter *padapter) { struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv; struct security_priv *psecuritypriv = &padapter->securitypriv; struct mlme_priv *pmlmepriv = &padapter->mlmepriv; int result = _SUCCESS; int keyid; down(&pwrpriv->lock); if (pwrpriv->rf_pwrstate == rf_off && !pwrpriv->bips_processing) { pwrpriv->bips_processing = true; pwrpriv->change_rfpwrstate = rf_on; pwrpriv->ips_leave23a_cnts++; DBG_8723A("==>ips_leave23a cnts:%d\n", pwrpriv->ips_leave23a_cnts); result = rtw_ips_pwr_up23a(padapter); if (result == _SUCCESS) pwrpriv->rf_pwrstate = rf_on; DBG_8723A_LEVEL(_drv_always_, "nolinked power save leave\n"); if (psecuritypriv->dot11PrivacyAlgrthm == WLAN_CIPHER_SUITE_WEP40 || psecuritypriv->dot11PrivacyAlgrthm == WLAN_CIPHER_SUITE_WEP104) { DBG_8723A("==>%s, channel(%d), processing(%x)\n", __func__, padapter->mlmeextpriv.cur_channel, pwrpriv->bips_processing); set_channel_bwmode23a(padapter, padapter->mlmeextpriv.cur_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20); for (keyid = 0; keyid < 4; keyid++) { if (pmlmepriv->key_mask & BIT(keyid)) { if (keyid == psecuritypriv->dot11PrivacyKeyIndex) result = rtw_set_key23a(padapter, psecuritypriv, keyid, 1); else result = rtw_set_key23a(padapter, psecuritypriv, keyid, 0); } } } DBG_8723A("==> ips_leave23a.....LED(0x%08x)...\n", rtl8723au_read32(padapter, 0x4c)); pwrpriv->bips_processing = false; pwrpriv->bkeepfwalive = false; pwrpriv->bpower_saving = false; } up(&pwrpriv->lock); return result; }