aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAssaf Krauss <assaf.krauss@intel.com>2008-03-18 17:57:50 -0400
committerJohn W. Linville <linville@tuxdriver.com>2008-03-25 16:41:58 -0400
commit1ea8739648cfff4027c3db0f4cee5de87bfd3886 (patch)
treeadc59885cb8b89596b1392a816da1d476f5ac4e2
parent83f7d57c37e83ab11009d58565e1010597b88db6 (diff)
iwlwifi: Completing the parameter packaging
This patch completes the changes regarding the packaging of user parameters. Signed-off-by: Assaf Krauss <assaf.krauss@intel.com> Signed-off-by: Tomas Winkler <tomas.winkler@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-4965.c54
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-4965.h9
-rw-r--r--drivers/net/wireless/iwlwifi/iwl4965-base.c46
3 files changed, 55 insertions, 54 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-4965.c b/drivers/net/wireless/iwlwifi/iwl-4965.c
index 46b3f47edefd..1db873b02f1e 100644
--- a/drivers/net/wireless/iwlwifi/iwl-4965.c
+++ b/drivers/net/wireless/iwlwifi/iwl-4965.c
@@ -43,6 +43,14 @@
43#include "iwl-4965.h" 43#include "iwl-4965.h"
44#include "iwl-helpers.h" 44#include "iwl-helpers.h"
45 45
46/* module parameters */
47static struct iwl_mod_params iwl4965_mod_params = {
48 .num_of_queues = IWL_MAX_NUM_QUEUES,
49 .enable_qos = 1,
50 .amsdu_size_8K = 1,
51 /* the rest are 0 by default */
52};
53
46static void iwl4965_hw_card_show_info(struct iwl_priv *priv); 54static void iwl4965_hw_card_show_info(struct iwl_priv *priv);
47 55
48#define IWL_DECLARE_RATE_INFO(r, s, ip, in, rp, rn, pp, np) \ 56#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)
110 int ret; 118 int ret;
111 int i; 119 int i;
112 120
113 priv->antenna = (enum iwl4965_antenna)iwl4965_mod_params.antenna; 121 priv->antenna = (enum iwl4965_antenna)priv->cfg->mod_params->antenna;
114 priv->retry_rate = 1; 122 priv->retry_rate = 1;
115 priv->ibss_beacon = NULL; 123 priv->ibss_beacon = NULL;
116 124
@@ -404,7 +412,7 @@ static int iwl4965_rx_init(struct iwl_priv *priv, struct iwl4965_rx_queue *rxq)
404 return rc; 412 return rc;
405 } 413 }
406 414
407 if (iwl4965_mod_params.amsdu_size_8K) 415 if (priv->cfg->mod_params->amsdu_size_8K)
408 rb_size = FH_RCSR_RX_CONFIG_REG_VAL_RB_SIZE_8K; 416 rb_size = FH_RCSR_RX_CONFIG_REG_VAL_RB_SIZE_8K;
409 else 417 else
410 rb_size = FH_RCSR_RX_CONFIG_REG_VAL_RB_SIZE_4K; 418 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)
1877{ 1885{
1878 int ret = 0; 1886 int ret = 0;
1879 1887
1880 if ((iwl4965_mod_params.num_of_queues > IWL_MAX_NUM_QUEUES) || 1888 if ((priv->cfg->mod_params->num_of_queues > IWL_MAX_NUM_QUEUES) ||
1881 (iwl4965_mod_params.num_of_queues < IWL_MIN_NUM_QUEUES)) { 1889 (priv->cfg->mod_params->num_of_queues < IWL_MIN_NUM_QUEUES)) {
1882 IWL_ERROR("invalid queues_num, should be between %d and %d\n", 1890 IWL_ERROR("invalid queues_num, should be between %d and %d\n",
1883 IWL_MIN_NUM_QUEUES, IWL_MAX_NUM_QUEUES); 1891 IWL_MIN_NUM_QUEUES, IWL_MAX_NUM_QUEUES);
1884 ret = -EINVAL; 1892 ret = -EINVAL;
@@ -1898,11 +1906,11 @@ int iwl4965_hw_set_hw_setting(struct iwl_priv *priv)
1898 1906
1899 memset(priv->hw_setting.shared_virt, 0, sizeof(struct iwl4965_shared)); 1907 memset(priv->hw_setting.shared_virt, 0, sizeof(struct iwl4965_shared));
1900 1908
1901 priv->hw_setting.max_txq_num = iwl4965_mod_params.num_of_queues; 1909 priv->hw_setting.max_txq_num = priv->cfg->mod_params->num_of_queues;
1902 priv->hw_setting.tx_cmd_len = sizeof(struct iwl4965_tx_cmd); 1910 priv->hw_setting.tx_cmd_len = sizeof(struct iwl4965_tx_cmd);
1903 priv->hw_setting.max_rxq_size = RX_QUEUE_SIZE; 1911 priv->hw_setting.max_rxq_size = RX_QUEUE_SIZE;
1904 priv->hw_setting.max_rxq_log = RX_QUEUE_SIZE_LOG; 1912 priv->hw_setting.max_rxq_log = RX_QUEUE_SIZE_LOG;
1905 if (iwl4965_mod_params.amsdu_size_8K) 1913 if (priv->cfg->mod_params->amsdu_size_8K)
1906 priv->hw_setting.rx_buf_size = IWL_RX_BUF_SIZE_8K; 1914 priv->hw_setting.rx_buf_size = IWL_RX_BUF_SIZE_8K;
1907 else 1915 else
1908 priv->hw_setting.rx_buf_size = IWL_RX_BUF_SIZE_4K; 1916 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,
3521 stats->flag = 0; 3529 stats->flag = 0;
3522 hdr = (struct ieee80211_hdr *)rxb->skb->data; 3530 hdr = (struct ieee80211_hdr *)rxb->skb->data;
3523 3531
3524 if (iwl4965_mod_params.hw_crypto) 3532 if (priv->cfg->mod_params->hw_crypto)
3525 iwl4965_set_decrypted_flag(priv, rxb->skb, ampdu_status, stats); 3533 iwl4965_set_decrypted_flag(priv, rxb->skb, ampdu_status, stats);
3526 3534
3527 if (priv->add_radiotap) 3535 if (priv->add_radiotap)
@@ -3644,7 +3652,8 @@ static int parse_elems(u8 *start, size_t len, struct ieee802_11_elems *elems)
3644 return 0; 3652 return 0;
3645} 3653}
3646 3654
3647void iwl4965_init_ht_hw_capab(struct ieee80211_ht_info *ht_info, 3655void iwl4965_init_ht_hw_capab(struct iwl_priv *priv,
3656 struct ieee80211_ht_info *ht_info,
3648 enum ieee80211_band band) 3657 enum ieee80211_band band)
3649{ 3658{
3650 ht_info->cap = 0; 3659 ht_info->cap = 0;
@@ -3661,10 +3670,9 @@ void iwl4965_init_ht_hw_capab(struct ieee80211_ht_info *ht_info,
3661 ht_info->cap |= (u16)IEEE80211_HT_CAP_SGI_20; 3670 ht_info->cap |= (u16)IEEE80211_HT_CAP_SGI_20;
3662 ht_info->cap |= (u16)(IEEE80211_HT_CAP_MIMO_PS & 3671 ht_info->cap |= (u16)(IEEE80211_HT_CAP_MIMO_PS &
3663 (IWL_MIMO_PS_NONE << 2)); 3672 (IWL_MIMO_PS_NONE << 2));
3664 if (iwl4965_mod_params.amsdu_size_8K) { 3673
3665 printk(KERN_DEBUG "iwl4965 in A-MSDU 8K support mode\n"); 3674 if (priv->cfg->mod_params->amsdu_size_8K)
3666 ht_info->cap |= (u16)IEEE80211_HT_CAP_MAX_AMSDU; 3675 ht_info->cap |= (u16)IEEE80211_HT_CAP_MAX_AMSDU;
3667 }
3668 3676
3669 ht_info->ampdu_factor = CFG_HT_RX_AMPDU_FACTOR_DEF; 3677 ht_info->ampdu_factor = CFG_HT_RX_AMPDU_FACTOR_DEF;
3670 ht_info->ampdu_density = CFG_HT_MPDU_DENSITY_DEF; 3678 ht_info->ampdu_density = CFG_HT_MPDU_DENSITY_DEF;
@@ -4970,6 +4978,7 @@ static struct iwl_cfg iwl4965_agn_cfg = {
4970 .fw_name = "iwlwifi-4965" IWL4965_UCODE_API ".ucode", 4978 .fw_name = "iwlwifi-4965" IWL4965_UCODE_API ".ucode",
4971 .sku = IWL_SKU_A|IWL_SKU_G|IWL_SKU_N, 4979 .sku = IWL_SKU_A|IWL_SKU_G|IWL_SKU_N,
4972 .ops = &iwl4965_ops, 4980 .ops = &iwl4965_ops,
4981 .mod_params = &iwl4965_mod_params,
4973}; 4982};
4974 4983
4975struct pci_device_id iwl4965_hw_card_ids[] = { 4984struct pci_device_id iwl4965_hw_card_ids[] = {
@@ -4979,3 +4988,26 @@ struct pci_device_id iwl4965_hw_card_ids[] = {
4979}; 4988};
4980 4989
4981MODULE_DEVICE_TABLE(pci, iwl4965_hw_card_ids); 4990MODULE_DEVICE_TABLE(pci, iwl4965_hw_card_ids);
4991
4992module_param_named(antenna, iwl4965_mod_params.antenna, int, 0444);
4993MODULE_PARM_DESC(antenna, "select antenna (1=Main, 2=Aux, default 0 [both])");
4994module_param_named(disable, iwl4965_mod_params.disable, int, 0444);
4995MODULE_PARM_DESC(disable, "manually disable the radio (default 0 [radio on])");
4996module_param_named(hwcrypto, iwl4965_mod_params.hw_crypto, int, 0444);
4997MODULE_PARM_DESC(hwcrypto,
4998 "using hardware crypto engine (default 0 [software])\n");
4999module_param_named(debug, iwl4965_mod_params.debug, int, 0444);
5000MODULE_PARM_DESC(debug, "debug output mask");
5001module_param_named(
5002 disable_hw_scan, iwl4965_mod_params.disable_hw_scan, int, 0444);
5003MODULE_PARM_DESC(disable_hw_scan, "disable hardware scanning (default 0)");
5004
5005module_param_named(queues_num, iwl4965_mod_params.num_of_queues, int, 0444);
5006MODULE_PARM_DESC(queues_num, "number of hw queues.");
5007
5008/* QoS */
5009module_param_named(qos_enable, iwl4965_mod_params.enable_qos, int, 0444);
5010MODULE_PARM_DESC(qos_enable, "enable all QoS functionality");
5011module_param_named(amsdu_size_8K, iwl4965_mod_params.amsdu_size_8K, int, 0444);
5012MODULE_PARM_DESC(amsdu_size_8K, "enable 8K amsdu size");
5013
diff --git a/drivers/net/wireless/iwlwifi/iwl-4965.h b/drivers/net/wireless/iwlwifi/iwl-4965.h
index 810b8e28dc83..960b53b20df8 100644
--- a/drivers/net/wireless/iwlwifi/iwl-4965.h
+++ b/drivers/net/wireless/iwlwifi/iwl-4965.h
@@ -66,9 +66,6 @@ extern struct pci_device_id iwl4965_hw_card_ids[];
66 * averages within an s8's (used in some apps) range of negative values. */ 66 * averages within an s8's (used in some apps) range of negative values. */
67#define IWL_NOISE_MEAS_NOT_AVAILABLE (-127) 67#define IWL_NOISE_MEAS_NOT_AVAILABLE (-127)
68 68
69/* Module parameters accessible from iwl-*.c */
70extern struct iwl_mod_params iwl4965_mod_params;
71
72enum iwl4965_antenna { 69enum iwl4965_antenna {
73 IWL_ANTENNA_DIVERSITY, 70 IWL_ANTENNA_DIVERSITY,
74 IWL_ANTENNA_MAIN, 71 IWL_ANTENNA_MAIN,
@@ -761,7 +758,8 @@ extern void iwl4965_hwrate_to_tx_control(struct iwl_priv *priv,
761 struct ieee80211_tx_control *control); 758 struct ieee80211_tx_control *control);
762 759
763#ifdef CONFIG_IWL4965_HT 760#ifdef CONFIG_IWL4965_HT
764void iwl4965_init_ht_hw_capab(struct ieee80211_ht_info *ht_info, 761void iwl4965_init_ht_hw_capab(struct iwl_priv *priv,
762 struct ieee80211_ht_info *ht_info,
765 enum ieee80211_band band); 763 enum ieee80211_band band);
766void iwl4965_set_rxon_ht(struct iwl_priv *priv, 764void iwl4965_set_rxon_ht(struct iwl_priv *priv,
767 struct iwl_ht_info *ht_info); 765 struct iwl_ht_info *ht_info);
@@ -773,7 +771,8 @@ int iwl4965_mac_ampdu_action(struct ieee80211_hw *hw,
773int iwl4965_check_empty_hw_queue(struct iwl_priv *priv, int sta_id, 771int iwl4965_check_empty_hw_queue(struct iwl_priv *priv, int sta_id,
774 u8 tid, int txq_id); 772 u8 tid, int txq_id);
775#else 773#else
776static inline void iwl4965_init_ht_hw_capab(struct ieee80211_ht_info *ht_info, 774static inline void iwl4965_init_ht_hw_capab(struct iwl_priv *priv,
775 struct ieee80211_ht_info *ht_info,
777 enum ieee80211_band band) {} 776 enum ieee80211_band band) {}
778 777
779#endif /*CONFIG_IWL4965_HT */ 778#endif /*CONFIG_IWL4965_HT */
diff --git a/drivers/net/wireless/iwlwifi/iwl4965-base.c b/drivers/net/wireless/iwlwifi/iwl4965-base.c
index 8fe09e893279..44cfd0274976 100644
--- a/drivers/net/wireless/iwlwifi/iwl4965-base.c
+++ b/drivers/net/wireless/iwlwifi/iwl4965-base.c
@@ -59,14 +59,6 @@ static int iwl4965_tx_queue_update_write_ptr(struct iwl_priv *priv,
59 * 59 *
60 ******************************************************************************/ 60 ******************************************************************************/
61 61
62/* module parameters */
63struct iwl_mod_params iwl4965_mod_params = {
64 .num_of_queues = IWL_MAX_NUM_QUEUES,
65 .enable_qos = 1,
66 .amsdu_size_8K = 1,
67 /* the rest are 0 by default */
68};
69
70/* 62/*
71 * module name, copyright, version, etc. 63 * module name, copyright, version, etc.
72 * NOTE: DRV_NAME is defined in iwlwifi.h for use by iwl-debug.h and printk 64 * 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)
4933 sband->bitrates = &rates[IWL_FIRST_OFDM_RATE]; 4925 sband->bitrates = &rates[IWL_FIRST_OFDM_RATE];
4934 sband->n_bitrates = IWL_RATE_COUNT - IWL_FIRST_OFDM_RATE; 4926 sband->n_bitrates = IWL_RATE_COUNT - IWL_FIRST_OFDM_RATE;
4935 4927
4936 iwl4965_init_ht_hw_capab(&sband->ht_info, IEEE80211_BAND_5GHZ); 4928 iwl4965_init_ht_hw_capab(priv, &sband->ht_info, IEEE80211_BAND_5GHZ);
4937 4929
4938 sband = &priv->bands[IEEE80211_BAND_2GHZ]; 4930 sband = &priv->bands[IEEE80211_BAND_2GHZ];
4939 sband->channels = channels; 4931 sband->channels = channels;
@@ -4941,7 +4933,7 @@ int iwl4965_init_geos(struct iwl_priv *priv)
4941 sband->bitrates = rates; 4933 sband->bitrates = rates;
4942 sband->n_bitrates = IWL_RATE_COUNT; 4934 sband->n_bitrates = IWL_RATE_COUNT;
4943 4935
4944 iwl4965_init_ht_hw_capab(&sband->ht_info, IEEE80211_BAND_2GHZ); 4936 iwl4965_init_ht_hw_capab(priv, &sband->ht_info, IEEE80211_BAND_2GHZ);
4945 4937
4946 priv->ieee_channels = channels; 4938 priv->ieee_channels = channels;
4947 priv->ieee_rates = rates; 4939 priv->ieee_rates = rates;
@@ -6614,7 +6606,7 @@ static int iwl4965_mac_config(struct ieee80211_hw *hw, struct ieee80211_conf *co
6614 goto out; 6606 goto out;
6615 } 6607 }
6616 6608
6617 if (unlikely(!iwl4965_mod_params.disable_hw_scan && 6609 if (unlikely(!priv->cfg->mod_params->disable_hw_scan &&
6618 test_bit(STATUS_SCANNING, &priv->status))) { 6610 test_bit(STATUS_SCANNING, &priv->status))) {
6619 IWL_DEBUG_MAC80211("leave - scanning\n"); 6611 IWL_DEBUG_MAC80211("leave - scanning\n");
6620 set_bit(STATUS_CONF_PENDING, &priv->status); 6612 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,
7050 7042
7051 IWL_DEBUG_MAC80211("enter\n"); 7043 IWL_DEBUG_MAC80211("enter\n");
7052 7044
7053 if (!iwl4965_mod_params.hw_crypto) { 7045 if (!priv->cfg->mod_params->hw_crypto) {
7054 IWL_DEBUG_MAC80211("leave - hwcrypto disabled\n"); 7046 IWL_DEBUG_MAC80211("leave - hwcrypto disabled\n");
7055 return -EOPNOTSUPP; 7047 return -EOPNOTSUPP;
7056 } 7048 }
@@ -8008,7 +8000,7 @@ static int iwl4965_pci_probe(struct pci_dev *pdev, const struct pci_device_id *e
8008 8000
8009 /* Disabling hardware scan means that mac80211 will perform scans 8001 /* Disabling hardware scan means that mac80211 will perform scans
8010 * "the hard way", rather than using device's scan. */ 8002 * "the hard way", rather than using device's scan. */
8011 if (iwl4965_mod_params.disable_hw_scan) { 8003 if (cfg->mod_params->disable_hw_scan) {
8012 IWL_DEBUG_INFO("Disabling hw_scan\n"); 8004 IWL_DEBUG_INFO("Disabling hw_scan\n");
8013 iwl4965_hw_ops.hw_scan = NULL; 8005 iwl4965_hw_ops.hw_scan = NULL;
8014 } 8006 }
@@ -8028,7 +8020,7 @@ static int iwl4965_pci_probe(struct pci_dev *pdev, const struct pci_device_id *e
8028 priv->pci_dev = pdev; 8020 priv->pci_dev = pdev;
8029 8021
8030#ifdef CONFIG_IWLWIFI_DEBUG 8022#ifdef CONFIG_IWLWIFI_DEBUG
8031 iwl_debug_level = iwl4965_mod_params.debug; 8023 iwl_debug_level = priv->cfg->mod_params->debug;
8032 atomic_set(&priv->restrict_refcnt, 0); 8024 atomic_set(&priv->restrict_refcnt, 0);
8033#endif 8025#endif
8034 8026
@@ -8126,12 +8118,12 @@ static int iwl4965_pci_probe(struct pci_dev *pdev, const struct pci_device_id *e
8126 **********************************/ 8118 **********************************/
8127 8119
8128 /* Disable radio (SW RF KILL) via parameter when loading driver */ 8120 /* Disable radio (SW RF KILL) via parameter when loading driver */
8129 if (iwl4965_mod_params.disable) { 8121 if (priv->cfg->mod_params->disable) {
8130 set_bit(STATUS_RF_KILL_SW, &priv->status); 8122 set_bit(STATUS_RF_KILL_SW, &priv->status);
8131 IWL_DEBUG_INFO("Radio disabled.\n"); 8123 IWL_DEBUG_INFO("Radio disabled.\n");
8132 } 8124 }
8133 8125
8134 if (iwl4965_mod_params.enable_qos) 8126 if (priv->cfg->mod_params->enable_qos)
8135 priv->qos_data.qos_enable = 1; 8127 priv->qos_data.qos_enable = 1;
8136 8128
8137 /******************** 8129 /********************
@@ -8322,27 +8314,5 @@ static void __exit iwl4965_exit(void)
8322 pci_unregister_driver(&iwl4965_driver); 8314 pci_unregister_driver(&iwl4965_driver);
8323} 8315}
8324 8316
8325module_param_named(antenna, iwl4965_mod_params.antenna, int, 0444);
8326MODULE_PARM_DESC(antenna, "select antenna (1=Main, 2=Aux, default 0 [both])");
8327module_param_named(disable, iwl4965_mod_params.disable, int, 0444);
8328MODULE_PARM_DESC(disable, "manually disable the radio (default 0 [radio on])");
8329module_param_named(hwcrypto, iwl4965_mod_params.hw_crypto, int, 0444);
8330MODULE_PARM_DESC(hwcrypto,
8331 "using hardware crypto engine (default 0 [software])\n");
8332module_param_named(debug, iwl4965_mod_params.debug, int, 0444);
8333MODULE_PARM_DESC(debug, "debug output mask");
8334module_param_named(
8335 disable_hw_scan, iwl4965_mod_params.disable_hw_scan, int, 0444);
8336MODULE_PARM_DESC(disable_hw_scan, "disable hardware scanning (default 0)");
8337
8338module_param_named(queues_num, iwl4965_mod_params.num_of_queues, int, 0444);
8339MODULE_PARM_DESC(queues_num, "number of hw queues.");
8340
8341/* QoS */
8342module_param_named(qos_enable, iwl4965_mod_params.enable_qos, int, 0444);
8343MODULE_PARM_DESC(qos_enable, "enable all QoS functionality");
8344module_param_named(amsdu_size_8K, iwl4965_mod_params.amsdu_size_8K, int, 0444);
8345MODULE_PARM_DESC(amsdu_size_8K, "enable 8K amsdu size");
8346
8347module_exit(iwl4965_exit); 8317module_exit(iwl4965_exit);
8348module_init(iwl4965_init); 8318module_init(iwl4965_init);