aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/iwlwifi
diff options
context:
space:
mode:
authorWey-Yi Guy <wey-yi.w.guy@intel.com>2011-06-06 15:05:46 -0400
committerWey-Yi Guy <wey-yi.w.guy@intel.com>2011-06-11 10:09:28 -0400
commit8895075886bbcfdab6ad7923ae8ab3b3314549c4 (patch)
tree3890b7456d8747e58f66ee805b70d7d7e3568b0b /drivers/net/wireless/iwlwifi
parent052692976e40bc124a8615ec880dd83046d71c24 (diff)
iwlagn: use sku capabilities information from EEPROM
Instead of having the separated define, use the sku capabilities in EEPROM Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
Diffstat (limited to 'drivers/net/wireless/iwlwifi')
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn-eeprom.c9
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn-lib.c5
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn.c6
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-core.c8
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-core.h6
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-eeprom.h3
6 files changed, 12 insertions, 25 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-eeprom.c b/drivers/net/wireless/iwlwifi/iwl-agn-eeprom.c
index 2ef9448b1c20..512d8beb3dfd 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn-eeprom.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn-eeprom.c
@@ -108,18 +108,11 @@ err:
108 108
109int iwl_eeprom_check_sku(struct iwl_priv *priv) 109int iwl_eeprom_check_sku(struct iwl_priv *priv)
110{ 110{
111 u16 eeprom_sku;
112 u16 radio_cfg; 111 u16 radio_cfg;
113 112
114 eeprom_sku = iwl_eeprom_query16(priv, EEPROM_SKU_CAP);
115
116 if (!priv->cfg->sku) { 113 if (!priv->cfg->sku) {
117 /* not using sku overwrite */ 114 /* not using sku overwrite */
118 priv->cfg->sku = 115 priv->cfg->sku = iwl_eeprom_query16(priv, EEPROM_SKU_CAP);
119 ((eeprom_sku & EEPROM_SKU_CAP_BAND_SELECTION) >>
120 EEPROM_SKU_CAP_BAND_POS);
121 if (eeprom_sku & EEPROM_SKU_CAP_11N_ENABLE)
122 priv->cfg->sku |= IWL_SKU_N;
123 } 116 }
124 if (!priv->cfg->sku) { 117 if (!priv->cfg->sku) {
125 IWL_ERR(priv, "Invalid device sku\n"); 118 IWL_ERR(priv, "Invalid device sku\n");
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-lib.c b/drivers/net/wireless/iwlwifi/iwl-agn-lib.c
index 58f6da0acfd2..90cd647088a7 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn-lib.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn-lib.c
@@ -1532,7 +1532,7 @@ int iwlagn_txfifo_flush(struct iwl_priv *priv, u16 flush_control)
1532 memset(&flush_cmd, 0, sizeof(flush_cmd)); 1532 memset(&flush_cmd, 0, sizeof(flush_cmd));
1533 flush_cmd.fifo_control = IWL_TX_FIFO_VO_MSK | IWL_TX_FIFO_VI_MSK | 1533 flush_cmd.fifo_control = IWL_TX_FIFO_VO_MSK | IWL_TX_FIFO_VI_MSK |
1534 IWL_TX_FIFO_BE_MSK | IWL_TX_FIFO_BK_MSK; 1534 IWL_TX_FIFO_BE_MSK | IWL_TX_FIFO_BK_MSK;
1535 if (priv->cfg->sku & IWL_SKU_N) 1535 if (priv->cfg->sku & EEPROM_SKU_CAP_11N_ENABLE)
1536 flush_cmd.fifo_control |= IWL_AGG_TX_QUEUE_MSK; 1536 flush_cmd.fifo_control |= IWL_AGG_TX_QUEUE_MSK;
1537 1537
1538 IWL_DEBUG_INFO(priv, "fifo queue control: 0X%x\n", 1538 IWL_DEBUG_INFO(priv, "fifo queue control: 0X%x\n",
@@ -2318,7 +2318,8 @@ int iwlagn_start_device(struct iwl_priv *priv)
2318{ 2318{
2319 int ret; 2319 int ret;
2320 2320
2321 if (iwl_prepare_card_hw(priv)) { 2321 if ((priv->cfg->sku & EEPROM_SKU_CAP_AMT_ENABLE) &&
2322 iwl_prepare_card_hw(priv)) {
2322 IWL_WARN(priv, "Exit HW not ready\n"); 2323 IWL_WARN(priv, "Exit HW not ready\n");
2323 return -EIO; 2324 return -EIO;
2324 } 2325 }
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c
index 3cd42a520956..488081fe1831 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
@@ -2515,7 +2515,7 @@ static int iwl_mac_setup_register(struct iwl_priv *priv,
2515 hw->flags |= IEEE80211_HW_SUPPORTS_PS | 2515 hw->flags |= IEEE80211_HW_SUPPORTS_PS |
2516 IEEE80211_HW_SUPPORTS_DYNAMIC_PS; 2516 IEEE80211_HW_SUPPORTS_DYNAMIC_PS;
2517 2517
2518 if (priv->cfg->sku & IWL_SKU_N) 2518 if (priv->cfg->sku & EEPROM_SKU_CAP_11N_ENABLE)
2519 hw->flags |= IEEE80211_HW_SUPPORTS_DYNAMIC_SMPS | 2519 hw->flags |= IEEE80211_HW_SUPPORTS_DYNAMIC_SMPS |
2520 IEEE80211_HW_SUPPORTS_STATIC_SMPS; 2520 IEEE80211_HW_SUPPORTS_STATIC_SMPS;
2521 2521
@@ -2756,7 +2756,7 @@ static int iwlagn_mac_ampdu_action(struct ieee80211_hw *hw,
2756 IWL_DEBUG_HT(priv, "A-MPDU action on addr %pM tid %d\n", 2756 IWL_DEBUG_HT(priv, "A-MPDU action on addr %pM tid %d\n",
2757 sta->addr, tid); 2757 sta->addr, tid);
2758 2758
2759 if (!(priv->cfg->sku & IWL_SKU_N)) 2759 if (!(priv->cfg->sku & EEPROM_SKU_CAP_11N_ENABLE))
2760 return -EACCES; 2760 return -EACCES;
2761 2761
2762 mutex_lock(&priv->mutex); 2762 mutex_lock(&priv->mutex);
@@ -3375,7 +3375,7 @@ static int iwl_set_hw_params(struct iwl_priv *priv)
3375 priv->hw_params.max_beacon_itrvl = IWL_MAX_UCODE_BEACON_INTERVAL; 3375 priv->hw_params.max_beacon_itrvl = IWL_MAX_UCODE_BEACON_INTERVAL;
3376 3376
3377 if (iwlagn_mod_params.disable_11n) 3377 if (iwlagn_mod_params.disable_11n)
3378 priv->cfg->sku &= ~IWL_SKU_N; 3378 priv->cfg->sku &= ~EEPROM_SKU_CAP_11N_ENABLE;
3379 3379
3380 /* Device-specific setup */ 3380 /* Device-specific setup */
3381 return priv->cfg->ops->lib->set_hw_params(priv); 3381 return priv->cfg->ops->lib->set_hw_params(priv);
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.c b/drivers/net/wireless/iwlwifi/iwl-core.c
index ad54f82597ca..445ddac06541 100644
--- a/drivers/net/wireless/iwlwifi/iwl-core.c
+++ b/drivers/net/wireless/iwlwifi/iwl-core.c
@@ -143,7 +143,7 @@ int iwlcore_init_geos(struct iwl_priv *priv)
143 sband->bitrates = &rates[IWL_FIRST_OFDM_RATE]; 143 sband->bitrates = &rates[IWL_FIRST_OFDM_RATE];
144 sband->n_bitrates = IWL_RATE_COUNT_LEGACY - IWL_FIRST_OFDM_RATE; 144 sband->n_bitrates = IWL_RATE_COUNT_LEGACY - IWL_FIRST_OFDM_RATE;
145 145
146 if (priv->cfg->sku & IWL_SKU_N) 146 if (priv->cfg->sku & EEPROM_SKU_CAP_11N_ENABLE)
147 iwlcore_init_ht_hw_capab(priv, &sband->ht_cap, 147 iwlcore_init_ht_hw_capab(priv, &sband->ht_cap,
148 IEEE80211_BAND_5GHZ); 148 IEEE80211_BAND_5GHZ);
149 149
@@ -153,7 +153,7 @@ int iwlcore_init_geos(struct iwl_priv *priv)
153 sband->bitrates = rates; 153 sband->bitrates = rates;
154 sband->n_bitrates = IWL_RATE_COUNT_LEGACY; 154 sband->n_bitrates = IWL_RATE_COUNT_LEGACY;
155 155
156 if (priv->cfg->sku & IWL_SKU_N) 156 if (priv->cfg->sku & EEPROM_SKU_CAP_11N_ENABLE)
157 iwlcore_init_ht_hw_capab(priv, &sband->ht_cap, 157 iwlcore_init_ht_hw_capab(priv, &sband->ht_cap,
158 IEEE80211_BAND_2GHZ); 158 IEEE80211_BAND_2GHZ);
159 159
@@ -208,12 +208,12 @@ int iwlcore_init_geos(struct iwl_priv *priv)
208 priv->tx_power_next = max_tx_power; 208 priv->tx_power_next = max_tx_power;
209 209
210 if ((priv->bands[IEEE80211_BAND_5GHZ].n_channels == 0) && 210 if ((priv->bands[IEEE80211_BAND_5GHZ].n_channels == 0) &&
211 priv->cfg->sku & IWL_SKU_A) { 211 priv->cfg->sku & EEPROM_SKU_CAP_BAND_52GHZ) {
212 IWL_INFO(priv, "Incorrectly detected BG card as ABG. " 212 IWL_INFO(priv, "Incorrectly detected BG card as ABG. "
213 "Please send your PCI ID 0x%04X:0x%04X to maintainer.\n", 213 "Please send your PCI ID 0x%04X:0x%04X to maintainer.\n",
214 priv->pci_dev->device, 214 priv->pci_dev->device,
215 priv->pci_dev->subsystem_device); 215 priv->pci_dev->subsystem_device);
216 priv->cfg->sku &= ~IWL_SKU_A; 216 priv->cfg->sku &= ~EEPROM_SKU_CAP_BAND_52GHZ;
217 } 217 }
218 218
219 IWL_INFO(priv, "Tunable channels: %d 802.11bg, %d 802.11a channels\n", 219 IWL_INFO(priv, "Tunable channels: %d 802.11bg, %d 802.11a channels\n",
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.h b/drivers/net/wireless/iwlwifi/iwl-core.h
index a16daf72e675..83ec5eb64ede 100644
--- a/drivers/net/wireless/iwlwifi/iwl-core.h
+++ b/drivers/net/wireless/iwlwifi/iwl-core.h
@@ -83,10 +83,6 @@ struct iwl_cmd;
83 83
84#define TIME_UNIT 1024 84#define TIME_UNIT 1024
85 85
86#define IWL_SKU_G 0x1
87#define IWL_SKU_A 0x2
88#define IWL_SKU_N 0x8
89
90#define IWL_CMD(x) case x: return #x 86#define IWL_CMD(x) case x: return #x
91 87
92struct iwl_hcmd_ops { 88struct iwl_hcmd_ops {
@@ -292,7 +288,7 @@ struct iwl_cfg {
292 const unsigned int ucode_api_min; 288 const unsigned int ucode_api_min;
293 u8 valid_tx_ant; 289 u8 valid_tx_ant;
294 u8 valid_rx_ant; 290 u8 valid_rx_ant;
295 unsigned int sku; 291 u16 sku;
296 u16 eeprom_ver; 292 u16 eeprom_ver;
297 u16 eeprom_calib_ver; 293 u16 eeprom_calib_ver;
298 const struct iwl_ops *ops; 294 const struct iwl_ops *ops;
diff --git a/drivers/net/wireless/iwlwifi/iwl-eeprom.h b/drivers/net/wireless/iwlwifi/iwl-eeprom.h
index 508631888c14..2d7005385be7 100644
--- a/drivers/net/wireless/iwlwifi/iwl-eeprom.h
+++ b/drivers/net/wireless/iwlwifi/iwl-eeprom.h
@@ -110,9 +110,6 @@ enum {
110}; 110};
111 111
112/* SKU Capabilities */ 112/* SKU Capabilities */
113#define EEPROM_SKU_CAP_BAND_POS (4)
114#define EEPROM_SKU_CAP_BAND_SELECTION \
115 (3 << EEPROM_SKU_CAP_BAND_POS)
116#define EEPROM_SKU_CAP_BAND_24GHZ (1 << 4) 113#define EEPROM_SKU_CAP_BAND_24GHZ (1 << 4)
117#define EEPROM_SKU_CAP_BAND_52GHZ (1 << 5) 114#define EEPROM_SKU_CAP_BAND_52GHZ (1 << 5)
118#define EEPROM_SKU_CAP_11N_ENABLE (1 << 6) 115#define EEPROM_SKU_CAP_11N_ENABLE (1 << 6)