diff options
Diffstat (limited to 'drivers/net/wireless/mwifiex/sta_ioctl.c')
| -rw-r--r-- | drivers/net/wireless/mwifiex/sta_ioctl.c | 35 | 
1 files changed, 24 insertions, 11 deletions
diff --git a/drivers/net/wireless/mwifiex/sta_ioctl.c b/drivers/net/wireless/mwifiex/sta_ioctl.c index cb682561c43..f542bb8ccbc 100644 --- a/drivers/net/wireless/mwifiex/sta_ioctl.c +++ b/drivers/net/wireless/mwifiex/sta_ioctl.c @@ -56,7 +56,6 @@ int mwifiex_copy_mcast_addr(struct mwifiex_multicast_list *mlist,   */  int mwifiex_wait_queue_complete(struct mwifiex_adapter *adapter)  { -	bool cancel_flag = false;  	int status;  	struct cmd_ctrl_node *cmd_queued; @@ -70,14 +69,11 @@ int mwifiex_wait_queue_complete(struct mwifiex_adapter *adapter)  	atomic_inc(&adapter->cmd_pending);  	/* Wait for completion */ -	wait_event_interruptible(adapter->cmd_wait_q.wait, -				 *(cmd_queued->condition)); -	if (!*(cmd_queued->condition)) -		cancel_flag = true; - -	if (cancel_flag) { -		mwifiex_cancel_pending_ioctl(adapter); -		dev_dbg(adapter->dev, "cmd cancel\n"); +	status = wait_event_interruptible(adapter->cmd_wait_q.wait, +					  *(cmd_queued->condition)); +	if (status) { +		dev_err(adapter->dev, "cmd_wait_q terminated: %d\n", status); +		return status;  	}  	status = adapter->cmd_wait_q.status; @@ -287,6 +283,20 @@ int mwifiex_bss_start(struct mwifiex_private *priv, struct cfg80211_bss *bss,  		if (ret)  			goto done; +		if (bss_desc) { +			u8 config_bands = 0; + +			if (mwifiex_band_to_radio_type((u8) bss_desc->bss_band) +			    == HostCmd_SCAN_RADIO_TYPE_BG) +				config_bands = BAND_B | BAND_G | BAND_GN; +			else +				config_bands = BAND_A | BAND_AN; + +			if (!((config_bands | adapter->fw_bands) & +			      ~adapter->fw_bands)) +				adapter->config_bands = config_bands; +		} +  		ret = mwifiex_check_network_compatibility(priv, bss_desc);  		if (ret)  			goto done; @@ -496,8 +506,11 @@ int mwifiex_enable_hs(struct mwifiex_adapter *adapter)  		return false;  	} -	wait_event_interruptible(adapter->hs_activate_wait_q, -				 adapter->hs_activate_wait_q_woken); +	if (wait_event_interruptible(adapter->hs_activate_wait_q, +				     adapter->hs_activate_wait_q_woken)) { +		dev_err(adapter->dev, "hs_activate_wait_q terminated\n"); +		return false; +	}  	return true;  }  |