Esempio n. 1
0
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);
}
Esempio n. 2
0
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;
}