aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/iwlwifi/iwl-4965.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-4965.c')
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-4965.c54
1 files changed, 43 insertions, 11 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