diff options
Diffstat (limited to 'drivers/net/wireless/mwifiex/join.c')
| -rw-r--r-- | drivers/net/wireless/mwifiex/join.c | 78 | 
1 files changed, 46 insertions, 32 deletions
diff --git a/drivers/net/wireless/mwifiex/join.c b/drivers/net/wireless/mwifiex/join.c index 9d7c0e6c4fc..89dc62a467f 100644 --- a/drivers/net/wireless/mwifiex/join.c +++ b/drivers/net/wireless/mwifiex/join.c @@ -515,8 +515,7 @@ int mwifiex_cmd_802_11_associate(struct mwifiex_private *priv,  	if (ISSUPP_11ACENABLED(priv->adapter->fw_cap_info) &&  	    !bss_desc->disable_11n && !bss_desc->disable_11ac && -	    (priv->adapter->config_bands & BAND_GAC || -	     priv->adapter->config_bands & BAND_AAC)) +	    priv->adapter->config_bands & BAND_AAC)  		mwifiex_cmd_append_11ac_tlv(priv, bss_desc, &pos);  	/* Append vendor specific IE TLV */ @@ -621,7 +620,7 @@ int mwifiex_ret_802_11_associate(struct mwifiex_private *priv,  	int ret = 0;  	struct ieee_types_assoc_rsp *assoc_rsp;  	struct mwifiex_bssdescriptor *bss_desc; -	u8 enable_data = true; +	bool enable_data = true;  	u16 cap_info, status_code;  	assoc_rsp = (struct ieee_types_assoc_rsp *) &resp->params; @@ -902,9 +901,9 @@ mwifiex_cmd_802_11_ad_hoc_start(struct mwifiex_private *priv,  	mwifiex_get_active_data_rates(priv, adhoc_start->data_rate);  	if ((adapter->adhoc_start_band & BAND_G) &&  	    (priv->curr_pkt_filter & HostCmd_ACT_MAC_ADHOC_G_PROTECTION_ON)) { -		if (mwifiex_send_cmd_async(priv, HostCmd_CMD_MAC_CONTROL, -					   HostCmd_ACT_GEN_SET, 0, -					   &priv->curr_pkt_filter)) { +		if (mwifiex_send_cmd(priv, HostCmd_CMD_MAC_CONTROL, +				     HostCmd_ACT_GEN_SET, 0, +				     &priv->curr_pkt_filter, false)) {  			dev_err(adapter->dev,  				"ADHOC_S_CMD: G Protection config failed\n");  			return -1; @@ -983,7 +982,7 @@ mwifiex_cmd_802_11_ad_hoc_start(struct mwifiex_private *priv,  		       cpu_to_le16(sizeof(struct ieee80211_ht_cap));  		radio_type = mwifiex_band_to_radio_type(  					priv->adapter->config_bands); -		mwifiex_fill_cap_info(priv, radio_type, ht_cap); +		mwifiex_fill_cap_info(priv, radio_type, &ht_cap->ht_cap);  		if (adapter->sec_chan_offset ==  					IEEE80211_HT_PARAM_CHA_SEC_NONE) { @@ -1074,9 +1073,9 @@ mwifiex_cmd_802_11_ad_hoc_join(struct mwifiex_private *priv,  			priv->  			curr_pkt_filter | HostCmd_ACT_MAC_ADHOC_G_PROTECTION_ON; -		if (mwifiex_send_cmd_async(priv, HostCmd_CMD_MAC_CONTROL, -					   HostCmd_ACT_GEN_SET, 0, -					   &curr_pkt_filter)) { +		if (mwifiex_send_cmd(priv, HostCmd_CMD_MAC_CONTROL, +				     HostCmd_ACT_GEN_SET, 0, +				     &curr_pkt_filter, false)) {  			dev_err(priv->adapter->dev,  				"ADHOC_J_CMD: G Protection config failed\n");  			return -1; @@ -1300,8 +1299,7 @@ int mwifiex_associate(struct mwifiex_private *priv,  	if (ISSUPP_11ACENABLED(priv->adapter->fw_cap_info) &&  	    !bss_desc->disable_11n && !bss_desc->disable_11ac && -	    (priv->adapter->config_bands & BAND_GAC || -	     priv->adapter->config_bands & BAND_AAC)) +	    priv->adapter->config_bands & BAND_AAC)  		mwifiex_set_11ac_ba_params(priv);  	else  		mwifiex_set_ba_params(priv); @@ -1314,8 +1312,8 @@ int mwifiex_associate(struct mwifiex_private *priv,  	   retrieval */  	priv->assoc_rsp_size = 0; -	return mwifiex_send_cmd_sync(priv, HostCmd_CMD_802_11_ASSOCIATE, -				    HostCmd_ACT_GEN_SET, 0, bss_desc); +	return mwifiex_send_cmd(priv, HostCmd_CMD_802_11_ASSOCIATE, +				HostCmd_ACT_GEN_SET, 0, bss_desc, true);  }  /* @@ -1335,14 +1333,13 @@ mwifiex_adhoc_start(struct mwifiex_private *priv,  		priv->curr_bss_params.band);  	if (ISSUPP_11ACENABLED(priv->adapter->fw_cap_info) && -	    (priv->adapter->config_bands & BAND_GAC || -	     priv->adapter->config_bands & BAND_AAC)) +	    priv->adapter->config_bands & BAND_AAC)  		mwifiex_set_11ac_ba_params(priv);  	else  		mwifiex_set_ba_params(priv); -	return mwifiex_send_cmd_sync(priv, HostCmd_CMD_802_11_AD_HOC_START, -				    HostCmd_ACT_GEN_SET, 0, adhoc_ssid); +	return mwifiex_send_cmd(priv, HostCmd_CMD_802_11_AD_HOC_START, +				HostCmd_ACT_GEN_SET, 0, adhoc_ssid, true);  }  /* @@ -1376,8 +1373,7 @@ int mwifiex_adhoc_join(struct mwifiex_private *priv,  	if (ISSUPP_11ACENABLED(priv->adapter->fw_cap_info) &&  	    !bss_desc->disable_11n && !bss_desc->disable_11ac && -	    (priv->adapter->config_bands & BAND_GAC || -	     priv->adapter->config_bands & BAND_AAC)) +	    priv->adapter->config_bands & BAND_AAC)  		mwifiex_set_11ac_ba_params(priv);  	else  		mwifiex_set_ba_params(priv); @@ -1387,8 +1383,8 @@ int mwifiex_adhoc_join(struct mwifiex_private *priv,  	dev_dbg(priv->adapter->dev, "info: curr_bss_params.band = %c\n",  		priv->curr_bss_params.band); -	return mwifiex_send_cmd_sync(priv, HostCmd_CMD_802_11_AD_HOC_JOIN, -				    HostCmd_ACT_GEN_SET, 0, bss_desc); +	return mwifiex_send_cmd(priv, HostCmd_CMD_802_11_AD_HOC_JOIN, +				HostCmd_ACT_GEN_SET, 0, bss_desc, true);  }  /* @@ -1407,8 +1403,8 @@ static int mwifiex_deauthenticate_infra(struct mwifiex_private *priv, u8 *mac)  	else  		memcpy(mac_address, mac, ETH_ALEN); -	ret = mwifiex_send_cmd_sync(priv, HostCmd_CMD_802_11_DEAUTHENTICATE, -				    HostCmd_ACT_GEN_SET, 0, mac_address); +	ret = mwifiex_send_cmd(priv, HostCmd_CMD_802_11_DEAUTHENTICATE, +			       HostCmd_ACT_GEN_SET, 0, mac_address, true);  	return ret;  } @@ -1422,27 +1418,45 @@ static int mwifiex_deauthenticate_infra(struct mwifiex_private *priv, u8 *mac)   */  int mwifiex_deauthenticate(struct mwifiex_private *priv, u8 *mac)  { +	int ret = 0; +  	if (!priv->media_connected)  		return 0;  	switch (priv->bss_mode) {  	case NL80211_IFTYPE_STATION:  	case NL80211_IFTYPE_P2P_CLIENT: -		return mwifiex_deauthenticate_infra(priv, mac); +		ret = mwifiex_deauthenticate_infra(priv, mac); +		if (ret) +			cfg80211_disconnected(priv->netdev, 0, NULL, 0, +					      GFP_KERNEL); +		break;  	case NL80211_IFTYPE_ADHOC: -		return mwifiex_send_cmd_sync(priv, -					     HostCmd_CMD_802_11_AD_HOC_STOP, -					     HostCmd_ACT_GEN_SET, 0, NULL); +		return mwifiex_send_cmd(priv, HostCmd_CMD_802_11_AD_HOC_STOP, +					HostCmd_ACT_GEN_SET, 0, NULL, true);  	case NL80211_IFTYPE_AP: -		return mwifiex_send_cmd_sync(priv, HostCmd_CMD_UAP_BSS_STOP, -					     HostCmd_ACT_GEN_SET, 0, NULL); +		return mwifiex_send_cmd(priv, HostCmd_CMD_UAP_BSS_STOP, +					HostCmd_ACT_GEN_SET, 0, NULL, true);  	default:  		break;  	} -	return 0; +	return ret; +} + +/* This function deauthenticates/disconnects from all BSS. */ +void mwifiex_deauthenticate_all(struct mwifiex_adapter *adapter) +{ +	struct mwifiex_private *priv; +	int i; + +	for (i = 0; i < adapter->priv_num; i++) { +		priv = adapter->priv[i]; +		if (priv) +			mwifiex_deauthenticate(priv, NULL); +	}  } -EXPORT_SYMBOL_GPL(mwifiex_deauthenticate); +EXPORT_SYMBOL_GPL(mwifiex_deauthenticate_all);  /*   * This function converts band to radio type used in channel TLV.  | 
