diff options
Diffstat (limited to 'drivers/net/wireless')
| -rw-r--r-- | drivers/net/wireless/ath/ath9k/main.c | 2 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-1000.c | 1 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-5000.c | 1 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn-rxon.c | 36 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn-sta.c | 5 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn.c | 34 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn.h | 2 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-core.c | 22 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-core.h | 2 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-shared.h | 4 | ||||
| -rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8192ce/phy.c | 2 | ||||
| -rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8192cu/phy.c | 2 | ||||
| -rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8192de/phy.c | 2 | ||||
| -rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8192se/phy.c | 2 | 
14 files changed, 70 insertions, 47 deletions
diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c index 93fbe6f40898..d2348a5a7809 100644 --- a/drivers/net/wireless/ath/ath9k/main.c +++ b/drivers/net/wireless/ath/ath9k/main.c @@ -286,7 +286,7 @@ static bool ath_complete_reset(struct ath_softc *sc, bool start)  			ath_start_ani(common);  	} -	if (ath9k_hw_ops(ah)->antdiv_comb_conf_get && sc->ant_rx != 3) { +	if ((ah->caps.hw_caps & ATH9K_HW_CAP_ANT_DIV_COMB) && sc->ant_rx != 3) {  		struct ath_hw_antcomb_conf div_ant_conf;  		u8 lna_conf; diff --git a/drivers/net/wireless/iwlwifi/iwl-1000.c b/drivers/net/wireless/iwlwifi/iwl-1000.c index e12b48c2cff6..dd008b0e6417 100644 --- a/drivers/net/wireless/iwlwifi/iwl-1000.c +++ b/drivers/net/wireless/iwlwifi/iwl-1000.c @@ -191,6 +191,7 @@ static struct iwl_base_params iwl1000_base_params = {  	.chain_noise_scale = 1000,  	.wd_timeout = IWL_DEF_WD_TIMEOUT,  	.max_event_log_size = 128, +	.wd_disable = true,  };  static struct iwl_ht_params iwl1000_ht_params = {  	.ht_greenfield_support = true, diff --git a/drivers/net/wireless/iwlwifi/iwl-5000.c b/drivers/net/wireless/iwlwifi/iwl-5000.c index c511c98a89a8..f55fb2d1af52 100644 --- a/drivers/net/wireless/iwlwifi/iwl-5000.c +++ b/drivers/net/wireless/iwlwifi/iwl-5000.c @@ -364,6 +364,7 @@ static struct iwl_base_params iwl5000_base_params = {  	.wd_timeout = IWL_LONG_WD_TIMEOUT,  	.max_event_log_size = 512,  	.no_idle_support = true, +	.wd_disable = true,  };  static struct iwl_ht_params iwl5000_ht_params = {  	.ht_greenfield_support = true, diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-rxon.c b/drivers/net/wireless/iwlwifi/iwl-agn-rxon.c index 58a381c01c89..a7a6def40d05 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn-rxon.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn-rxon.c @@ -528,6 +528,24 @@ int iwlagn_commit_rxon(struct iwl_priv *priv, struct iwl_rxon_context *ctx)  	return 0;  } +void iwlagn_config_ht40(struct ieee80211_conf *conf, +	struct iwl_rxon_context *ctx) +{ +	if (conf_is_ht40_minus(conf)) { +		ctx->ht.extension_chan_offset = +			IEEE80211_HT_PARAM_CHA_SEC_BELOW; +		ctx->ht.is_40mhz = true; +	} else if (conf_is_ht40_plus(conf)) { +		ctx->ht.extension_chan_offset = +			IEEE80211_HT_PARAM_CHA_SEC_ABOVE; +		ctx->ht.is_40mhz = true; +	} else { +		ctx->ht.extension_chan_offset = +			IEEE80211_HT_PARAM_CHA_SEC_NONE; +		ctx->ht.is_40mhz = false; +	} +} +  int iwlagn_mac_config(struct ieee80211_hw *hw, u32 changed)  {  	struct iwl_priv *priv = hw->priv; @@ -586,19 +604,11 @@ int iwlagn_mac_config(struct ieee80211_hw *hw, u32 changed)  				ctx->ht.enabled = conf_is_ht(conf);  			if (ctx->ht.enabled) { -				if (conf_is_ht40_minus(conf)) { -					ctx->ht.extension_chan_offset = -						IEEE80211_HT_PARAM_CHA_SEC_BELOW; -					ctx->ht.is_40mhz = true; -				} else if (conf_is_ht40_plus(conf)) { -					ctx->ht.extension_chan_offset = -						IEEE80211_HT_PARAM_CHA_SEC_ABOVE; -					ctx->ht.is_40mhz = true; -				} else { -					ctx->ht.extension_chan_offset = -						IEEE80211_HT_PARAM_CHA_SEC_NONE; -					ctx->ht.is_40mhz = false; -				} +				/* if HT40 is used, it should not change +				 * after associated except channel switch */ +				if (iwl_is_associated_ctx(ctx) && +				     !ctx->ht.is_40mhz) +					iwlagn_config_ht40(conf, ctx);  			} else  				ctx->ht.is_40mhz = false; diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-sta.c b/drivers/net/wireless/iwlwifi/iwl-agn-sta.c index ed6283623932..4b2aa1da0953 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn-sta.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn-sta.c @@ -1268,9 +1268,6 @@ int iwl_set_dynamic_key(struct iwl_priv *priv,  	switch (keyconf->cipher) {  	case WLAN_CIPHER_SUITE_TKIP: -		keyconf->flags |= IEEE80211_KEY_FLAG_GENERATE_MMIC; -		keyconf->flags |= IEEE80211_KEY_FLAG_GENERATE_IV; -  		if (sta)  			addr = sta->addr;  		else /* station mode case only */ @@ -1283,8 +1280,6 @@ int iwl_set_dynamic_key(struct iwl_priv *priv,  					  seq.tkip.iv32, p1k, CMD_SYNC);  		break;  	case WLAN_CIPHER_SUITE_CCMP: -		keyconf->flags |= IEEE80211_KEY_FLAG_GENERATE_IV; -		/* fall through */  	case WLAN_CIPHER_SUITE_WEP40:  	case WLAN_CIPHER_SUITE_WEP104:  		ret = iwlagn_send_sta_key(priv, keyconf, sta_id, diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c index ccba69b7f8a7..bacc06c95e7a 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn.c @@ -2316,6 +2316,17 @@ static int iwlagn_mac_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,  		return -EOPNOTSUPP;  	} +	switch (key->cipher) { +	case WLAN_CIPHER_SUITE_TKIP: +		key->flags |= IEEE80211_KEY_FLAG_GENERATE_MMIC; +		/* fall through */ +	case WLAN_CIPHER_SUITE_CCMP: +		key->flags |= IEEE80211_KEY_FLAG_GENERATE_IV; +		break; +	default: +		break; +	} +  	/*  	 * We could program these keys into the hardware as well, but we  	 * don't expect much multicast traffic in IBSS and having keys @@ -2599,21 +2610,9 @@ static void iwlagn_mac_channel_switch(struct ieee80211_hw *hw,  	/* Configure HT40 channels */  	ctx->ht.enabled = conf_is_ht(conf); -	if (ctx->ht.enabled) { -		if (conf_is_ht40_minus(conf)) { -			ctx->ht.extension_chan_offset = -				IEEE80211_HT_PARAM_CHA_SEC_BELOW; -			ctx->ht.is_40mhz = true; -		} else if (conf_is_ht40_plus(conf)) { -			ctx->ht.extension_chan_offset = -				IEEE80211_HT_PARAM_CHA_SEC_ABOVE; -			ctx->ht.is_40mhz = true; -		} else { -			ctx->ht.extension_chan_offset = -				IEEE80211_HT_PARAM_CHA_SEC_NONE; -			ctx->ht.is_40mhz = false; -		} -	} else +	if (ctx->ht.enabled) +		iwlagn_config_ht40(conf, ctx); +	else  		ctx->ht.is_40mhz = false;  	if ((le16_to_cpu(ctx->staging.channel) != ch)) @@ -3499,9 +3498,10 @@ MODULE_PARM_DESC(plcp_check, "Check plcp health (default: 1 [enabled])");  module_param_named(ack_check, iwlagn_mod_params.ack_check, bool, S_IRUGO);  MODULE_PARM_DESC(ack_check, "Check ack health (default: 0 [disabled])"); -module_param_named(wd_disable, iwlagn_mod_params.wd_disable, bool, S_IRUGO); +module_param_named(wd_disable, iwlagn_mod_params.wd_disable, int, S_IRUGO);  MODULE_PARM_DESC(wd_disable, -		"Disable stuck queue watchdog timer (default: 0 [enabled])"); +		"Disable stuck queue watchdog timer 0=system default, " +		"1=disable, 2=enable (default: 0)");  /*   * set bt_coex_active to true, uCode will do kill/defer diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.h b/drivers/net/wireless/iwlwifi/iwl-agn.h index 5b936ec1a541..3856abaea507 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn.h +++ b/drivers/net/wireless/iwlwifi/iwl-agn.h @@ -86,6 +86,8 @@ void iwlagn_bss_info_changed(struct ieee80211_hw *hw,  			     struct ieee80211_vif *vif,  			     struct ieee80211_bss_conf *bss_conf,  			     u32 changes); +void iwlagn_config_ht40(struct ieee80211_conf *conf, +			struct iwl_rxon_context *ctx);  /* uCode */  int iwlagn_rx_calib_result(struct iwl_priv *priv, diff --git a/drivers/net/wireless/iwlwifi/iwl-core.c b/drivers/net/wireless/iwlwifi/iwl-core.c index 001fdf140abb..fcf54160e4ed 100644 --- a/drivers/net/wireless/iwlwifi/iwl-core.c +++ b/drivers/net/wireless/iwlwifi/iwl-core.c @@ -1810,11 +1810,23 @@ void iwl_setup_watchdog(struct iwl_priv *priv)  {  	unsigned int timeout = priv->cfg->base_params->wd_timeout; -	if (timeout && !iwlagn_mod_params.wd_disable) -		mod_timer(&priv->watchdog, -			  jiffies + msecs_to_jiffies(IWL_WD_TICK(timeout))); -	else -		del_timer(&priv->watchdog); +	if (!iwlagn_mod_params.wd_disable) { +		/* use system default */ +		if (timeout && !priv->cfg->base_params->wd_disable) +			mod_timer(&priv->watchdog, +				jiffies + +				msecs_to_jiffies(IWL_WD_TICK(timeout))); +		else +			del_timer(&priv->watchdog); +	} else { +		/* module parameter overwrite default configuration */ +		if (timeout && iwlagn_mod_params.wd_disable == 2) +			mod_timer(&priv->watchdog, +				jiffies + +				msecs_to_jiffies(IWL_WD_TICK(timeout))); +		else +			del_timer(&priv->watchdog); +	}  }  /** diff --git a/drivers/net/wireless/iwlwifi/iwl-core.h b/drivers/net/wireless/iwlwifi/iwl-core.h index 137da3380704..f2fc288f3dd3 100644 --- a/drivers/net/wireless/iwlwifi/iwl-core.h +++ b/drivers/net/wireless/iwlwifi/iwl-core.h @@ -113,6 +113,7 @@ struct iwl_lib_ops {   * @shadow_reg_enable: HW shadhow register bit   * @no_idle_support: do not support idle mode   * @hd_v2: v2 of enhanced sensitivity value, used for 2000 series and up + * wd_disable: disable watchdog timer   */  struct iwl_base_params {  	int eeprom_size; @@ -134,6 +135,7 @@ struct iwl_base_params {  	const bool shadow_reg_enable;  	const bool no_idle_support;  	const bool hd_v2; +	const bool wd_disable;  };  /*   * @advanced_bt_coexist: support advanced bt coexist diff --git a/drivers/net/wireless/iwlwifi/iwl-shared.h b/drivers/net/wireless/iwlwifi/iwl-shared.h index 1f7a93c67c45..14eaf37ce3b1 100644 --- a/drivers/net/wireless/iwlwifi/iwl-shared.h +++ b/drivers/net/wireless/iwlwifi/iwl-shared.h @@ -120,7 +120,7 @@ extern struct iwl_mod_params iwlagn_mod_params;   * @restart_fw: restart firmware, default = 1   * @plcp_check: enable plcp health check, default = true   * @ack_check: disable ack health check, default = false - * @wd_disable: enable stuck queue check, default = false + * @wd_disable: enable stuck queue check, default = 0   * @bt_coex_active: enable bt coex, default = true   * @led_mode: system default, default = 0   * @no_sleep_autoadjust: disable autoadjust, default = true @@ -141,7 +141,7 @@ struct iwl_mod_params {  	int restart_fw;  	bool plcp_check;  	bool ack_check; -	bool wd_disable; +	int  wd_disable;  	bool bt_coex_active;  	int led_mode;  	bool no_sleep_autoadjust; diff --git a/drivers/net/wireless/rtlwifi/rtl8192ce/phy.c b/drivers/net/wireless/rtlwifi/rtl8192ce/phy.c index 592a10ac5929..3b585aadabfc 100644 --- a/drivers/net/wireless/rtlwifi/rtl8192ce/phy.c +++ b/drivers/net/wireless/rtlwifi/rtl8192ce/phy.c @@ -569,7 +569,7 @@ static bool _rtl92ce_phy_set_rf_power_state(struct ieee80211_hw *hw,  		}  	case ERFSLEEP:{  			if (ppsc->rfpwr_state == ERFOFF) -				break; +				return false;  			for (queue_id = 0, i = 0;  			     queue_id < RTL_PCI_MAX_TX_QUEUE_COUNT;) {  				ring = &pcipriv->dev.tx_ring[queue_id]; diff --git a/drivers/net/wireless/rtlwifi/rtl8192cu/phy.c b/drivers/net/wireless/rtlwifi/rtl8192cu/phy.c index 72852900df84..e49cf2244c75 100644 --- a/drivers/net/wireless/rtlwifi/rtl8192cu/phy.c +++ b/drivers/net/wireless/rtlwifi/rtl8192cu/phy.c @@ -548,7 +548,7 @@ static bool _rtl92cu_phy_set_rf_power_state(struct ieee80211_hw *hw,  		break;  	case ERFSLEEP:  		if (ppsc->rfpwr_state == ERFOFF) -			break; +			return false;  		for (queue_id = 0, i = 0;  		     queue_id < RTL_PCI_MAX_TX_QUEUE_COUNT;) {  			ring = &pcipriv->dev.tx_ring[queue_id]; diff --git a/drivers/net/wireless/rtlwifi/rtl8192de/phy.c b/drivers/net/wireless/rtlwifi/rtl8192de/phy.c index 3ac7af1c5509..0883349e1c83 100644 --- a/drivers/net/wireless/rtlwifi/rtl8192de/phy.c +++ b/drivers/net/wireless/rtlwifi/rtl8192de/phy.c @@ -3374,7 +3374,7 @@ bool rtl92d_phy_set_rf_power_state(struct ieee80211_hw *hw,  		break;  	case ERFSLEEP:  		if (ppsc->rfpwr_state == ERFOFF) -			break; +			return false;  		for (queue_id = 0, i = 0;  		     queue_id < RTL_PCI_MAX_TX_QUEUE_COUNT;) { diff --git a/drivers/net/wireless/rtlwifi/rtl8192se/phy.c b/drivers/net/wireless/rtlwifi/rtl8192se/phy.c index f27171af979c..f10ac1ad9087 100644 --- a/drivers/net/wireless/rtlwifi/rtl8192se/phy.c +++ b/drivers/net/wireless/rtlwifi/rtl8192se/phy.c @@ -602,7 +602,7 @@ bool rtl92s_phy_set_rf_power_state(struct ieee80211_hw *hw,  		}  	case ERFSLEEP:  			if (ppsc->rfpwr_state == ERFOFF) -				break; +				return false;  			for (queue_id = 0, i = 0;  			     queue_id < RTL_PCI_MAX_TX_QUEUE_COUNT;) {  | 
