diff options
Diffstat (limited to 'drivers/net/wireless/iwlwifi/dvm/mac80211.c')
| -rw-r--r-- | drivers/net/wireless/iwlwifi/dvm/mac80211.c | 32 | 
1 files changed, 23 insertions, 9 deletions
diff --git a/drivers/net/wireless/iwlwifi/dvm/mac80211.c b/drivers/net/wireless/iwlwifi/dvm/mac80211.c index 323e4a33fca..cab23af0be9 100644 --- a/drivers/net/wireless/iwlwifi/dvm/mac80211.c +++ b/drivers/net/wireless/iwlwifi/dvm/mac80211.c @@ -777,9 +777,12 @@ static int iwlagn_mac_ampdu_action(struct ieee80211_hw *hw,  		IWL_DEBUG_HT(priv, "start Tx\n");  		ret = iwlagn_tx_agg_start(priv, vif, sta, tid, ssn);  		break; -	case IEEE80211_AMPDU_TX_STOP_CONT:  	case IEEE80211_AMPDU_TX_STOP_FLUSH:  	case IEEE80211_AMPDU_TX_STOP_FLUSH_CONT: +		IWL_DEBUG_HT(priv, "Flush Tx\n"); +		ret = iwlagn_tx_agg_flush(priv, vif, sta, tid); +		break; +	case IEEE80211_AMPDU_TX_STOP_CONT:  		IWL_DEBUG_HT(priv, "stop Tx\n");  		ret = iwlagn_tx_agg_stop(priv, vif, sta, tid);  		if ((ret == 0) && (priv->agg_tids_count > 0)) { @@ -967,7 +970,7 @@ static void iwlagn_mac_channel_switch(struct ieee80211_hw *hw,  {  	struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw);  	struct ieee80211_conf *conf = &hw->conf; -	struct ieee80211_channel *channel = ch_switch->channel; +	struct ieee80211_channel *channel = ch_switch->chandef.chan;  	struct iwl_ht_config *ht_conf = &priv->current_ht_config;  	/*  	 * MULTI-FIXME @@ -1005,11 +1008,21 @@ static void iwlagn_mac_channel_switch(struct ieee80211_hw *hw,  	priv->current_ht_config.smps = conf->smps_mode;  	/* Configure HT40 channels */ -	ctx->ht.enabled = conf_is_ht(conf); -	if (ctx->ht.enabled) -		iwlagn_config_ht40(conf, ctx); -	else +	switch (cfg80211_get_chandef_type(&ch_switch->chandef)) { +	case NL80211_CHAN_NO_HT: +	case NL80211_CHAN_HT20:  		ctx->ht.is_40mhz = false; +		ctx->ht.extension_chan_offset = IEEE80211_HT_PARAM_CHA_SEC_NONE; +		break; +	case NL80211_CHAN_HT40MINUS: +		ctx->ht.extension_chan_offset = IEEE80211_HT_PARAM_CHA_SEC_BELOW; +		ctx->ht.is_40mhz = true; +		break; +	case NL80211_CHAN_HT40PLUS: +		ctx->ht.extension_chan_offset = IEEE80211_HT_PARAM_CHA_SEC_ABOVE; +		ctx->ht.is_40mhz = true; +		break; +	}  	if ((le16_to_cpu(ctx->staging.channel) != ch))  		ctx->staging.flags = 0; @@ -1100,7 +1113,7 @@ static void iwlagn_configure_filter(struct ieee80211_hw *hw,  			FIF_BCN_PRBRESP_PROMISC | FIF_CONTROL;  } -static void iwlagn_mac_flush(struct ieee80211_hw *hw, bool drop) +static void iwlagn_mac_flush(struct ieee80211_hw *hw, u32 queues, bool drop)  {  	struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); @@ -1122,7 +1135,7 @@ static void iwlagn_mac_flush(struct ieee80211_hw *hw, bool drop)  	 */  	if (drop) {  		IWL_DEBUG_MAC80211(priv, "send flush command\n"); -		if (iwlagn_txfifo_flush(priv)) { +		if (iwlagn_txfifo_flush(priv, 0)) {  			IWL_ERR(priv, "flush request fail\n");  			goto done;  		} @@ -1137,7 +1150,8 @@ done:  static int iwlagn_mac_remain_on_channel(struct ieee80211_hw *hw,  				     struct ieee80211_vif *vif,  				     struct ieee80211_channel *channel, -				     int duration) +				     int duration, +				     enum ieee80211_roc_type type)  {  	struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw);  	struct iwl_rxon_context *ctx = &priv->contexts[IWL_RXON_CTX_PAN];  |