diff options
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-4965.c')
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-4965.c | 54 |
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 */ | ||
47 | static 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 | |||
46 | static void iwl4965_hw_card_show_info(struct iwl_priv *priv); | 54 | static 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 | ||
3647 | void iwl4965_init_ht_hw_capab(struct ieee80211_ht_info *ht_info, | 3655 | void 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 | ||
4975 | struct pci_device_id iwl4965_hw_card_ids[] = { | 4984 | struct pci_device_id iwl4965_hw_card_ids[] = { |
@@ -4979,3 +4988,26 @@ struct pci_device_id iwl4965_hw_card_ids[] = { | |||
4979 | }; | 4988 | }; |
4980 | 4989 | ||
4981 | MODULE_DEVICE_TABLE(pci, iwl4965_hw_card_ids); | 4990 | MODULE_DEVICE_TABLE(pci, iwl4965_hw_card_ids); |
4991 | |||
4992 | module_param_named(antenna, iwl4965_mod_params.antenna, int, 0444); | ||
4993 | MODULE_PARM_DESC(antenna, "select antenna (1=Main, 2=Aux, default 0 [both])"); | ||
4994 | module_param_named(disable, iwl4965_mod_params.disable, int, 0444); | ||
4995 | MODULE_PARM_DESC(disable, "manually disable the radio (default 0 [radio on])"); | ||
4996 | module_param_named(hwcrypto, iwl4965_mod_params.hw_crypto, int, 0444); | ||
4997 | MODULE_PARM_DESC(hwcrypto, | ||
4998 | "using hardware crypto engine (default 0 [software])\n"); | ||
4999 | module_param_named(debug, iwl4965_mod_params.debug, int, 0444); | ||
5000 | MODULE_PARM_DESC(debug, "debug output mask"); | ||
5001 | module_param_named( | ||
5002 | disable_hw_scan, iwl4965_mod_params.disable_hw_scan, int, 0444); | ||
5003 | MODULE_PARM_DESC(disable_hw_scan, "disable hardware scanning (default 0)"); | ||
5004 | |||
5005 | module_param_named(queues_num, iwl4965_mod_params.num_of_queues, int, 0444); | ||
5006 | MODULE_PARM_DESC(queues_num, "number of hw queues."); | ||
5007 | |||
5008 | /* QoS */ | ||
5009 | module_param_named(qos_enable, iwl4965_mod_params.enable_qos, int, 0444); | ||
5010 | MODULE_PARM_DESC(qos_enable, "enable all QoS functionality"); | ||
5011 | module_param_named(amsdu_size_8K, iwl4965_mod_params.amsdu_size_8K, int, 0444); | ||
5012 | MODULE_PARM_DESC(amsdu_size_8K, "enable 8K amsdu size"); | ||
5013 | |||