Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1ea87396 authored by Assaf Krauss's avatar Assaf Krauss Committed by John W. Linville
Browse files

iwlwifi: Completing the parameter packaging



This patch completes the changes regarding the packaging of user
parameters.

Signed-off-by: default avatarAssaf Krauss <assaf.krauss@intel.com>
Signed-off-by: default avatarTomas Winkler <tomas.winkler@intel.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 83f7d57c
Loading
Loading
Loading
Loading
+43 −11
Original line number Original line Diff line number Diff line
@@ -43,6 +43,14 @@
#include "iwl-4965.h"
#include "iwl-4965.h"
#include "iwl-helpers.h"
#include "iwl-helpers.h"


/* module parameters */
static struct iwl_mod_params iwl4965_mod_params = {
	.num_of_queues = IWL_MAX_NUM_QUEUES,
	.enable_qos = 1,
	.amsdu_size_8K = 1,
	/* the rest are 0 by default */
};

static void iwl4965_hw_card_show_info(struct iwl_priv *priv);
static void iwl4965_hw_card_show_info(struct iwl_priv *priv);


#define IWL_DECLARE_RATE_INFO(r, s, ip, in, rp, rn, pp, np)    \
#define IWL_DECLARE_RATE_INFO(r, s, ip, in, rp, rn, pp, np)    \
@@ -110,7 +118,7 @@ static int iwl4965_init_drv(struct iwl_priv *priv)
	int ret;
	int ret;
	int i;
	int i;


	priv->antenna = (enum iwl4965_antenna)iwl4965_mod_params.antenna;
	priv->antenna = (enum iwl4965_antenna)priv->cfg->mod_params->antenna;
	priv->retry_rate = 1;
	priv->retry_rate = 1;
	priv->ibss_beacon = NULL;
	priv->ibss_beacon = NULL;


@@ -404,7 +412,7 @@ static int iwl4965_rx_init(struct iwl_priv *priv, struct iwl4965_rx_queue *rxq)
		return rc;
		return rc;
	}
	}


	if (iwl4965_mod_params.amsdu_size_8K)
	if (priv->cfg->mod_params->amsdu_size_8K)
		rb_size = FH_RCSR_RX_CONFIG_REG_VAL_RB_SIZE_8K;
		rb_size = FH_RCSR_RX_CONFIG_REG_VAL_RB_SIZE_8K;
	else
	else
		rb_size = FH_RCSR_RX_CONFIG_REG_VAL_RB_SIZE_4K;
		rb_size = FH_RCSR_RX_CONFIG_REG_VAL_RB_SIZE_4K;
@@ -1877,8 +1885,8 @@ int iwl4965_hw_set_hw_setting(struct iwl_priv *priv)
{
{
	int ret = 0;
	int ret = 0;


	if ((iwl4965_mod_params.num_of_queues > IWL_MAX_NUM_QUEUES) ||
	if ((priv->cfg->mod_params->num_of_queues > IWL_MAX_NUM_QUEUES) ||
	    (iwl4965_mod_params.num_of_queues < IWL_MIN_NUM_QUEUES)) {
	    (priv->cfg->mod_params->num_of_queues < IWL_MIN_NUM_QUEUES)) {
		IWL_ERROR("invalid queues_num, should be between %d and %d\n",
		IWL_ERROR("invalid queues_num, should be between %d and %d\n",
			  IWL_MIN_NUM_QUEUES, IWL_MAX_NUM_QUEUES);
			  IWL_MIN_NUM_QUEUES, IWL_MAX_NUM_QUEUES);
		ret = -EINVAL;
		ret = -EINVAL;
@@ -1898,11 +1906,11 @@ int iwl4965_hw_set_hw_setting(struct iwl_priv *priv)


	memset(priv->hw_setting.shared_virt, 0, sizeof(struct iwl4965_shared));
	memset(priv->hw_setting.shared_virt, 0, sizeof(struct iwl4965_shared));


	priv->hw_setting.max_txq_num = iwl4965_mod_params.num_of_queues;
	priv->hw_setting.max_txq_num = priv->cfg->mod_params->num_of_queues;
	priv->hw_setting.tx_cmd_len = sizeof(struct iwl4965_tx_cmd);
	priv->hw_setting.tx_cmd_len = sizeof(struct iwl4965_tx_cmd);
	priv->hw_setting.max_rxq_size = RX_QUEUE_SIZE;
	priv->hw_setting.max_rxq_size = RX_QUEUE_SIZE;
	priv->hw_setting.max_rxq_log = RX_QUEUE_SIZE_LOG;
	priv->hw_setting.max_rxq_log = RX_QUEUE_SIZE_LOG;
	if (iwl4965_mod_params.amsdu_size_8K)
	if (priv->cfg->mod_params->amsdu_size_8K)
		priv->hw_setting.rx_buf_size = IWL_RX_BUF_SIZE_8K;
		priv->hw_setting.rx_buf_size = IWL_RX_BUF_SIZE_8K;
	else
	else
		priv->hw_setting.rx_buf_size = IWL_RX_BUF_SIZE_4K;
		priv->hw_setting.rx_buf_size = IWL_RX_BUF_SIZE_4K;
@@ -3521,7 +3529,7 @@ static void iwl4965_handle_data_packet(struct iwl_priv *priv, int is_data,
	stats->flag = 0;
	stats->flag = 0;
	hdr = (struct ieee80211_hdr *)rxb->skb->data;
	hdr = (struct ieee80211_hdr *)rxb->skb->data;


	if (iwl4965_mod_params.hw_crypto)
	if (priv->cfg->mod_params->hw_crypto)
		iwl4965_set_decrypted_flag(priv, rxb->skb, ampdu_status, stats);
		iwl4965_set_decrypted_flag(priv, rxb->skb, ampdu_status, stats);


	if (priv->add_radiotap)
	if (priv->add_radiotap)
@@ -3644,7 +3652,8 @@ static int parse_elems(u8 *start, size_t len, struct ieee802_11_elems *elems)
	return 0;
	return 0;
}
}


void iwl4965_init_ht_hw_capab(struct ieee80211_ht_info *ht_info,
void iwl4965_init_ht_hw_capab(struct iwl_priv *priv,
			      struct ieee80211_ht_info *ht_info,
			      enum ieee80211_band band)
			      enum ieee80211_band band)
{
{
	ht_info->cap = 0;
	ht_info->cap = 0;
@@ -3661,10 +3670,9 @@ void iwl4965_init_ht_hw_capab(struct ieee80211_ht_info *ht_info,
	ht_info->cap |= (u16)IEEE80211_HT_CAP_SGI_20;
	ht_info->cap |= (u16)IEEE80211_HT_CAP_SGI_20;
	ht_info->cap |= (u16)(IEEE80211_HT_CAP_MIMO_PS &
	ht_info->cap |= (u16)(IEEE80211_HT_CAP_MIMO_PS &
			     (IWL_MIMO_PS_NONE << 2));
			     (IWL_MIMO_PS_NONE << 2));
	if (iwl4965_mod_params.amsdu_size_8K) {

		printk(KERN_DEBUG "iwl4965 in A-MSDU 8K support mode\n");
	if (priv->cfg->mod_params->amsdu_size_8K)
		ht_info->cap |= (u16)IEEE80211_HT_CAP_MAX_AMSDU;
		ht_info->cap |= (u16)IEEE80211_HT_CAP_MAX_AMSDU;
	}


	ht_info->ampdu_factor = CFG_HT_RX_AMPDU_FACTOR_DEF;
	ht_info->ampdu_factor = CFG_HT_RX_AMPDU_FACTOR_DEF;
	ht_info->ampdu_density = CFG_HT_MPDU_DENSITY_DEF;
	ht_info->ampdu_density = CFG_HT_MPDU_DENSITY_DEF;
@@ -4970,6 +4978,7 @@ static struct iwl_cfg iwl4965_agn_cfg = {
	.fw_name = "iwlwifi-4965" IWL4965_UCODE_API ".ucode",
	.fw_name = "iwlwifi-4965" IWL4965_UCODE_API ".ucode",
	.sku = IWL_SKU_A|IWL_SKU_G|IWL_SKU_N,
	.sku = IWL_SKU_A|IWL_SKU_G|IWL_SKU_N,
	.ops = &iwl4965_ops,
	.ops = &iwl4965_ops,
	.mod_params = &iwl4965_mod_params,
};
};


struct pci_device_id iwl4965_hw_card_ids[] = {
struct pci_device_id iwl4965_hw_card_ids[] = {
@@ -4979,3 +4988,26 @@ struct pci_device_id iwl4965_hw_card_ids[] = {
};
};


MODULE_DEVICE_TABLE(pci, iwl4965_hw_card_ids);
MODULE_DEVICE_TABLE(pci, iwl4965_hw_card_ids);

module_param_named(antenna, iwl4965_mod_params.antenna, int, 0444);
MODULE_PARM_DESC(antenna, "select antenna (1=Main, 2=Aux, default 0 [both])");
module_param_named(disable, iwl4965_mod_params.disable, int, 0444);
MODULE_PARM_DESC(disable, "manually disable the radio (default 0 [radio on])");
module_param_named(hwcrypto, iwl4965_mod_params.hw_crypto, int, 0444);
MODULE_PARM_DESC(hwcrypto,
		 "using hardware crypto engine (default 0 [software])\n");
module_param_named(debug, iwl4965_mod_params.debug, int, 0444);
MODULE_PARM_DESC(debug, "debug output mask");
module_param_named(
	disable_hw_scan, iwl4965_mod_params.disable_hw_scan, int, 0444);
MODULE_PARM_DESC(disable_hw_scan, "disable hardware scanning (default 0)");

module_param_named(queues_num, iwl4965_mod_params.num_of_queues, int, 0444);
MODULE_PARM_DESC(queues_num, "number of hw queues.");

/* QoS */
module_param_named(qos_enable, iwl4965_mod_params.enable_qos, int, 0444);
MODULE_PARM_DESC(qos_enable, "enable all QoS functionality");
module_param_named(amsdu_size_8K, iwl4965_mod_params.amsdu_size_8K, int, 0444);
MODULE_PARM_DESC(amsdu_size_8K, "enable 8K amsdu size");
+4 −5
Original line number Original line Diff line number Diff line
@@ -66,9 +66,6 @@ extern struct pci_device_id iwl4965_hw_card_ids[];
 *   averages within an s8's (used in some apps) range of negative values. */
 *   averages within an s8's (used in some apps) range of negative values. */
#define IWL_NOISE_MEAS_NOT_AVAILABLE (-127)
#define IWL_NOISE_MEAS_NOT_AVAILABLE (-127)


/* Module parameters accessible from iwl-*.c */
extern struct iwl_mod_params iwl4965_mod_params;

enum iwl4965_antenna {
enum iwl4965_antenna {
	IWL_ANTENNA_DIVERSITY,
	IWL_ANTENNA_DIVERSITY,
	IWL_ANTENNA_MAIN,
	IWL_ANTENNA_MAIN,
@@ -761,7 +758,8 @@ extern void iwl4965_hwrate_to_tx_control(struct iwl_priv *priv,
					 struct ieee80211_tx_control *control);
					 struct ieee80211_tx_control *control);


#ifdef CONFIG_IWL4965_HT
#ifdef CONFIG_IWL4965_HT
void iwl4965_init_ht_hw_capab(struct ieee80211_ht_info *ht_info,
void iwl4965_init_ht_hw_capab(struct iwl_priv *priv,
			      struct ieee80211_ht_info *ht_info,
			      enum ieee80211_band band);
			      enum ieee80211_band band);
void iwl4965_set_rxon_ht(struct iwl_priv *priv,
void iwl4965_set_rxon_ht(struct iwl_priv *priv,
			 struct iwl_ht_info *ht_info);
			 struct iwl_ht_info *ht_info);
@@ -773,7 +771,8 @@ int iwl4965_mac_ampdu_action(struct ieee80211_hw *hw,
int iwl4965_check_empty_hw_queue(struct iwl_priv *priv, int sta_id,
int iwl4965_check_empty_hw_queue(struct iwl_priv *priv, int sta_id,
					u8 tid, int txq_id);
					u8 tid, int txq_id);
#else
#else
static inline void iwl4965_init_ht_hw_capab(struct ieee80211_ht_info *ht_info,
static inline void iwl4965_init_ht_hw_capab(struct iwl_priv *priv,
					    struct ieee80211_ht_info *ht_info,
					    enum ieee80211_band band) {}
					    enum ieee80211_band band) {}


#endif /*CONFIG_IWL4965_HT */
#endif /*CONFIG_IWL4965_HT */
+8 −38
Original line number Original line Diff line number Diff line
@@ -59,14 +59,6 @@ static int iwl4965_tx_queue_update_write_ptr(struct iwl_priv *priv,
 *
 *
 ******************************************************************************/
 ******************************************************************************/


/* module parameters */
struct iwl_mod_params iwl4965_mod_params = {
	.num_of_queues = IWL_MAX_NUM_QUEUES,
	.enable_qos = 1,
	.amsdu_size_8K = 1,
	/* the rest are 0 by default */
};

/*
/*
 * module name, copyright, version, etc.
 * module name, copyright, version, etc.
 * NOTE: DRV_NAME is defined in iwlwifi.h for use by iwl-debug.h and printk
 * NOTE: DRV_NAME is defined in iwlwifi.h for use by iwl-debug.h and printk
@@ -4933,7 +4925,7 @@ int iwl4965_init_geos(struct iwl_priv *priv)
	sband->bitrates = &rates[IWL_FIRST_OFDM_RATE];
	sband->bitrates = &rates[IWL_FIRST_OFDM_RATE];
	sband->n_bitrates = IWL_RATE_COUNT - IWL_FIRST_OFDM_RATE;
	sband->n_bitrates = IWL_RATE_COUNT - IWL_FIRST_OFDM_RATE;


	iwl4965_init_ht_hw_capab(&sband->ht_info, IEEE80211_BAND_5GHZ);
	iwl4965_init_ht_hw_capab(priv, &sband->ht_info, IEEE80211_BAND_5GHZ);


	sband = &priv->bands[IEEE80211_BAND_2GHZ];
	sband = &priv->bands[IEEE80211_BAND_2GHZ];
	sband->channels = channels;
	sband->channels = channels;
@@ -4941,7 +4933,7 @@ int iwl4965_init_geos(struct iwl_priv *priv)
	sband->bitrates = rates;
	sband->bitrates = rates;
	sband->n_bitrates = IWL_RATE_COUNT;
	sband->n_bitrates = IWL_RATE_COUNT;


	iwl4965_init_ht_hw_capab(&sband->ht_info, IEEE80211_BAND_2GHZ);
	iwl4965_init_ht_hw_capab(priv, &sband->ht_info, IEEE80211_BAND_2GHZ);


	priv->ieee_channels = channels;
	priv->ieee_channels = channels;
	priv->ieee_rates = rates;
	priv->ieee_rates = rates;
@@ -6614,7 +6606,7 @@ static int iwl4965_mac_config(struct ieee80211_hw *hw, struct ieee80211_conf *co
		goto out;
		goto out;
	}
	}


	if (unlikely(!iwl4965_mod_params.disable_hw_scan &&
	if (unlikely(!priv->cfg->mod_params->disable_hw_scan &&
		     test_bit(STATUS_SCANNING, &priv->status))) {
		     test_bit(STATUS_SCANNING, &priv->status))) {
		IWL_DEBUG_MAC80211("leave - scanning\n");
		IWL_DEBUG_MAC80211("leave - scanning\n");
		set_bit(STATUS_CONF_PENDING, &priv->status);
		set_bit(STATUS_CONF_PENDING, &priv->status);
@@ -7050,7 +7042,7 @@ static int iwl4965_mac_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,


	IWL_DEBUG_MAC80211("enter\n");
	IWL_DEBUG_MAC80211("enter\n");


	if (!iwl4965_mod_params.hw_crypto) {
	if (!priv->cfg->mod_params->hw_crypto) {
		IWL_DEBUG_MAC80211("leave - hwcrypto disabled\n");
		IWL_DEBUG_MAC80211("leave - hwcrypto disabled\n");
		return -EOPNOTSUPP;
		return -EOPNOTSUPP;
	}
	}
@@ -8008,7 +8000,7 @@ static int iwl4965_pci_probe(struct pci_dev *pdev, const struct pci_device_id *e


	/* Disabling hardware scan means that mac80211 will perform scans
	/* Disabling hardware scan means that mac80211 will perform scans
	 * "the hard way", rather than using device's scan. */
	 * "the hard way", rather than using device's scan. */
	if (iwl4965_mod_params.disable_hw_scan) {
	if (cfg->mod_params->disable_hw_scan) {
		IWL_DEBUG_INFO("Disabling hw_scan\n");
		IWL_DEBUG_INFO("Disabling hw_scan\n");
		iwl4965_hw_ops.hw_scan = NULL;
		iwl4965_hw_ops.hw_scan = NULL;
	}
	}
@@ -8028,7 +8020,7 @@ static int iwl4965_pci_probe(struct pci_dev *pdev, const struct pci_device_id *e
	priv->pci_dev = pdev;
	priv->pci_dev = pdev;


#ifdef CONFIG_IWLWIFI_DEBUG
#ifdef CONFIG_IWLWIFI_DEBUG
	iwl_debug_level = iwl4965_mod_params.debug;
	iwl_debug_level = priv->cfg->mod_params->debug;
	atomic_set(&priv->restrict_refcnt, 0);
	atomic_set(&priv->restrict_refcnt, 0);
#endif
#endif


@@ -8126,12 +8118,12 @@ static int iwl4965_pci_probe(struct pci_dev *pdev, const struct pci_device_id *e
	 **********************************/
	 **********************************/


	/* Disable radio (SW RF KILL) via parameter when loading driver */
	/* Disable radio (SW RF KILL) via parameter when loading driver */
	if (iwl4965_mod_params.disable) {
	if (priv->cfg->mod_params->disable) {
		set_bit(STATUS_RF_KILL_SW, &priv->status);
		set_bit(STATUS_RF_KILL_SW, &priv->status);
		IWL_DEBUG_INFO("Radio disabled.\n");
		IWL_DEBUG_INFO("Radio disabled.\n");
	}
	}


	if (iwl4965_mod_params.enable_qos)
	if (priv->cfg->mod_params->enable_qos)
		priv->qos_data.qos_enable = 1;
		priv->qos_data.qos_enable = 1;


	/********************
	/********************
@@ -8322,27 +8314,5 @@ static void __exit iwl4965_exit(void)
	pci_unregister_driver(&iwl4965_driver);
	pci_unregister_driver(&iwl4965_driver);
}
}


module_param_named(antenna, iwl4965_mod_params.antenna, int, 0444);
MODULE_PARM_DESC(antenna, "select antenna (1=Main, 2=Aux, default 0 [both])");
module_param_named(disable, iwl4965_mod_params.disable, int, 0444);
MODULE_PARM_DESC(disable, "manually disable the radio (default 0 [radio on])");
module_param_named(hwcrypto, iwl4965_mod_params.hw_crypto, int, 0444);
MODULE_PARM_DESC(hwcrypto,
		 "using hardware crypto engine (default 0 [software])\n");
module_param_named(debug, iwl4965_mod_params.debug, int, 0444);
MODULE_PARM_DESC(debug, "debug output mask");
module_param_named(
	disable_hw_scan, iwl4965_mod_params.disable_hw_scan, int, 0444);
MODULE_PARM_DESC(disable_hw_scan, "disable hardware scanning (default 0)");

module_param_named(queues_num, iwl4965_mod_params.num_of_queues, int, 0444);
MODULE_PARM_DESC(queues_num, "number of hw queues.");

/* QoS */
module_param_named(qos_enable, iwl4965_mod_params.enable_qos, int, 0444);
MODULE_PARM_DESC(qos_enable, "enable all QoS functionality");
module_param_named(amsdu_size_8K, iwl4965_mod_params.amsdu_size_8K, int, 0444);
MODULE_PARM_DESC(amsdu_size_8K, "enable 8K amsdu size");

module_exit(iwl4965_exit);
module_exit(iwl4965_exit);
module_init(iwl4965_init);
module_init(iwl4965_init);