diff options
Diffstat (limited to 'drivers/net/wireless/iwlwifi/dvm/main.c')
| -rw-r--r-- | drivers/net/wireless/iwlwifi/dvm/main.c | 57 | 
1 files changed, 35 insertions, 22 deletions
diff --git a/drivers/net/wireless/iwlwifi/dvm/main.c b/drivers/net/wireless/iwlwifi/dvm/main.c index 7aad766865c..0b7f46f0b07 100644 --- a/drivers/net/wireless/iwlwifi/dvm/main.c +++ b/drivers/net/wireless/iwlwifi/dvm/main.c @@ -1,6 +1,6 @@  /******************************************************************************   * - * Copyright(c) 2003 - 2013 Intel Corporation. All rights reserved. + * Copyright(c) 2003 - 2014 Intel Corporation. All rights reserved.   *   * Portions of this file are derived from the ipw3945 project, as well   * as portions of the ieee80211 subsystem header files. @@ -128,7 +128,6 @@ int iwlagn_send_beacon_cmd(struct iwl_priv *priv)  	struct iwl_tx_beacon_cmd *tx_beacon_cmd;  	struct iwl_host_cmd cmd = {  		.id = REPLY_TX_BEACON, -		.flags = CMD_SYNC,  	};  	struct ieee80211_tx_info *info;  	u32 frame_size; @@ -252,13 +251,17 @@ static void iwl_bg_bt_runtime_config(struct work_struct *work)  	struct iwl_priv *priv =  		container_of(work, struct iwl_priv, bt_runtime_config); +	mutex_lock(&priv->mutex);  	if (test_bit(STATUS_EXIT_PENDING, &priv->status)) -		return; +		goto out;  	/* dont send host command if rf-kill is on */  	if (!iwl_is_ready_rf(priv)) -		return; +		goto out; +  	iwlagn_send_advance_bt_config(priv); +out: +	mutex_unlock(&priv->mutex);  }  static void iwl_bg_bt_full_concurrency(struct work_struct *work) @@ -307,8 +310,7 @@ int iwl_send_statistics_request(struct iwl_priv *priv, u8 flags, bool clear)  					sizeof(struct iwl_statistics_cmd),  					&statistics_cmd);  	else -		return iwl_dvm_send_cmd_pdu(priv, REPLY_STATISTICS_CMD, -					CMD_SYNC, +		return iwl_dvm_send_cmd_pdu(priv, REPLY_STATISTICS_CMD, 0,  					sizeof(struct iwl_statistics_cmd),  					&statistics_cmd);  } @@ -618,7 +620,7 @@ static void iwl_rf_kill_ct_config(struct iwl_priv *priv)  		ret = iwl_dvm_send_cmd_pdu(priv,  				       REPLY_CT_KILL_CONFIG_CMD, -				       CMD_SYNC, sizeof(adv_cmd), &adv_cmd); +				       0, sizeof(adv_cmd), &adv_cmd);  		if (ret)  			IWL_ERR(priv, "REPLY_CT_KILL_CONFIG_CMD failed\n");  		else @@ -633,7 +635,7 @@ static void iwl_rf_kill_ct_config(struct iwl_priv *priv)  		ret = iwl_dvm_send_cmd_pdu(priv,  				       REPLY_CT_KILL_CONFIG_CMD, -				       CMD_SYNC, sizeof(cmd), &cmd); +				       0, sizeof(cmd), &cmd);  		if (ret)  			IWL_ERR(priv, "REPLY_CT_KILL_CONFIG_CMD failed\n");  		else @@ -669,9 +671,7 @@ static int iwlagn_send_tx_ant_config(struct iwl_priv *priv, u8 valid_tx_ant)  	if (IWL_UCODE_API(priv->fw->ucode_ver) > 1) {  		IWL_DEBUG_HC(priv, "select valid tx ant: %u\n", valid_tx_ant); -		return iwl_dvm_send_cmd_pdu(priv, -					TX_ANT_CONFIGURATION_CMD, -					CMD_SYNC, +		return iwl_dvm_send_cmd_pdu(priv, TX_ANT_CONFIGURATION_CMD, 0,  					sizeof(struct iwl_tx_ant_config_cmd),  					&tx_ant_cmd);  	} else { @@ -699,7 +699,7 @@ static void iwl_send_bt_config(struct iwl_priv *priv)  		(bt_cmd.flags == BT_COEX_DISABLE) ? "disable" : "active");  	if (iwl_dvm_send_cmd_pdu(priv, REPLY_BT_CONFIG, -			     CMD_SYNC, sizeof(struct iwl_bt_cmd), &bt_cmd)) +			     0, sizeof(struct iwl_bt_cmd), &bt_cmd))  		IWL_ERR(priv, "failed to send BT Coex Config\n");  } @@ -983,7 +983,7 @@ static void iwl_bg_restart(struct work_struct *data)  			ieee80211_restart_hw(priv->hw);  		else  			IWL_ERR(priv, -				"Cannot request restart before registrating with mac80211"); +				"Cannot request restart before registrating with mac80211\n");  	} else {  		WARN_ON(1);  	} @@ -1123,7 +1123,6 @@ static void iwl_option_config(struct iwl_priv *priv)  static int iwl_eeprom_init_hw_params(struct iwl_priv *priv)  {  	struct iwl_nvm_data *data = priv->nvm_data; -	char *debug_msg;  	if (data->sku_cap_11n_enable &&  	    !priv->cfg->ht_params) { @@ -1137,8 +1136,8 @@ static int iwl_eeprom_init_hw_params(struct iwl_priv *priv)  		return -EINVAL;  	} -	debug_msg = "Device SKU: 24GHz %s %s, 52GHz %s %s, 11.n %s %s\n"; -	IWL_DEBUG_INFO(priv, debug_msg, +	IWL_DEBUG_INFO(priv, +		       "Device SKU: 24GHz %s %s, 52GHz %s %s, 11.n %s %s\n",  		       data->sku_cap_band_24GHz_enable ? "" : "NOT", "enabled",  		       data->sku_cap_band_52GHz_enable ? "" : "NOT", "enabled",  		       data->sku_cap_11n_enable ? "" : "NOT", "enabled"); @@ -1313,7 +1312,7 @@ static struct iwl_op_mode *iwl_op_mode_dvm_start(struct iwl_trans *trans,  	}  	/* Reset chip to save power until we load uCode during "up". */ -	iwl_trans_stop_hw(priv->trans, false); +	iwl_trans_stop_device(priv->trans);  	priv->nvm_data = iwl_parse_eeprom_data(priv->trans->dev, priv->cfg,  						  priv->eeprom_blob, @@ -1346,7 +1345,7 @@ static struct iwl_op_mode *iwl_op_mode_dvm_start(struct iwl_trans *trans,  	iwl_set_hw_params(priv);  	if (!(priv->nvm_data->sku_cap_ipan_enable)) { -		IWL_DEBUG_INFO(priv, "Your EEPROM disabled PAN"); +		IWL_DEBUG_INFO(priv, "Your EEPROM disabled PAN\n");  		ucode_flags &= ~IWL_UCODE_TLV_FLAGS_PAN;  		/*  		 * if not PAN, then don't support P2P -- might be a uCode @@ -1458,7 +1457,7 @@ static void iwl_op_mode_dvm_stop(struct iwl_op_mode *op_mode)  	dev_kfree_skb(priv->beacon_skb); -	iwl_trans_stop_hw(priv->trans, true); +	iwl_trans_op_mode_leave(priv->trans);  	ieee80211_free_hw(priv->hw);  } @@ -2015,10 +2014,10 @@ void iwlagn_lift_passive_no_rx(struct iwl_priv *priv)  	for (mq = 0; mq < IWLAGN_FIRST_AMPDU_QUEUE; mq++) {  		if (!test_bit(mq, &priv->transport_queue_stop)) { -			IWL_DEBUG_TX_QUEUES(priv, "Wake queue %d", mq); +			IWL_DEBUG_TX_QUEUES(priv, "Wake queue %d\n", mq);  			ieee80211_wake_queue(priv->hw, mq);  		} else { -			IWL_DEBUG_TX_QUEUES(priv, "Don't wake queue %d", mq); +			IWL_DEBUG_TX_QUEUES(priv, "Don't wake queue %d\n", mq);  		}  	} @@ -2035,7 +2034,7 @@ static void iwl_free_skb(struct iwl_op_mode *op_mode, struct sk_buff *skb)  	ieee80211_free_txskb(priv->hw, skb);  } -static void iwl_set_hw_rfkill_state(struct iwl_op_mode *op_mode, bool state) +static bool iwl_set_hw_rfkill_state(struct iwl_op_mode *op_mode, bool state)  {  	struct iwl_priv *priv = IWL_OP_MODE_GET_DVM(op_mode); @@ -2045,6 +2044,19 @@ static void iwl_set_hw_rfkill_state(struct iwl_op_mode *op_mode, bool state)  		clear_bit(STATUS_RF_KILL_HW, &priv->status);  	wiphy_rfkill_set_hw_state(priv->hw->wiphy, state); + +	return false; +} + +static void iwl_napi_add(struct iwl_op_mode *op_mode, +			 struct napi_struct *napi, +			 struct net_device *napi_dev, +			 int (*poll)(struct napi_struct *, int), +			 int weight) +{ +	struct iwl_priv *priv = IWL_OP_MODE_GET_DVM(op_mode); + +	ieee80211_napi_add(priv->hw, napi, napi_dev, poll, weight);  }  static const struct iwl_op_mode_ops iwl_dvm_ops = { @@ -2059,6 +2071,7 @@ static const struct iwl_op_mode_ops iwl_dvm_ops = {  	.cmd_queue_full = iwl_cmd_queue_full,  	.nic_config = iwl_nic_config,  	.wimax_active = iwl_wimax_active, +	.napi_add = iwl_napi_add,  };  /*****************************************************************************  | 
