diff options
Diffstat (limited to 'drivers/net/wireless/iwlegacy/common.c')
| -rw-r--r-- | drivers/net/wireless/iwlegacy/common.c | 35 | 
1 files changed, 14 insertions, 21 deletions
diff --git a/drivers/net/wireless/iwlegacy/common.c b/drivers/net/wireless/iwlegacy/common.c index 7e16d10a7f14..90b8970eadf0 100644 --- a/drivers/net/wireless/iwlegacy/common.c +++ b/drivers/net/wireless/iwlegacy/common.c @@ -3958,17 +3958,21 @@ il_connection_init_rx_config(struct il_priv *il)  	memset(&il->staging, 0, sizeof(il->staging)); -	if (!il->vif) { +	switch (il->iw_mode) { +	case NL80211_IFTYPE_UNSPECIFIED:  		il->staging.dev_type = RXON_DEV_TYPE_ESS; -	} else if (il->vif->type == NL80211_IFTYPE_STATION) { +		break; +	case NL80211_IFTYPE_STATION:  		il->staging.dev_type = RXON_DEV_TYPE_ESS;  		il->staging.filter_flags = RXON_FILTER_ACCEPT_GRP_MSK; -	} else if (il->vif->type == NL80211_IFTYPE_ADHOC) { +		break; +	case NL80211_IFTYPE_ADHOC:  		il->staging.dev_type = RXON_DEV_TYPE_IBSS;  		il->staging.flags = RXON_FLG_SHORT_PREAMBLE_MSK;  		il->staging.filter_flags =  		    RXON_FILTER_BCON_AWARE_MSK | RXON_FILTER_ACCEPT_GRP_MSK; -	} else { +		break; +	default:  		IL_ERR("Unsupported interface type %d\n", il->vif->type);  		return;  	} @@ -4550,8 +4554,7 @@ out:  EXPORT_SYMBOL(il_mac_add_interface);  static void -il_teardown_interface(struct il_priv *il, struct ieee80211_vif *vif, -		      bool mode_change) +il_teardown_interface(struct il_priv *il, struct ieee80211_vif *vif)  {  	lockdep_assert_held(&il->mutex); @@ -4560,9 +4563,7 @@ il_teardown_interface(struct il_priv *il, struct ieee80211_vif *vif,  		il_force_scan_end(il);  	} -	if (!mode_change) -		il_set_mode(il); - +	il_set_mode(il);  }  void @@ -4575,8 +4576,8 @@ il_mac_remove_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif)  	WARN_ON(il->vif != vif);  	il->vif = NULL; - -	il_teardown_interface(il, vif, false); +	il->iw_mode = NL80211_IFTYPE_UNSPECIFIED; +	il_teardown_interface(il, vif);  	memset(il->bssid, 0, ETH_ALEN);  	D_MAC80211("leave\n"); @@ -4685,18 +4686,10 @@ il_mac_change_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif,  	}  	/* success */ -	il_teardown_interface(il, vif, true);  	vif->type = newtype;  	vif->p2p = false; -	err = il_set_mode(il); -	WARN_ON(err); -	/* -	 * We've switched internally, but submitting to the -	 * device may have failed for some reason. Mask this -	 * error, because otherwise mac80211 will not switch -	 * (and set the interface type back) and we'll be -	 * out of sync with it. -	 */ +	il->iw_mode = newtype; +	il_teardown_interface(il, vif);  	err = 0;  out:  | 
