diff options
author | Wey-Yi Guy <wey-yi.w.guy@intel.com> | 2011-06-06 15:05:46 -0400 |
---|---|---|
committer | Wey-Yi Guy <wey-yi.w.guy@intel.com> | 2011-06-11 10:09:28 -0400 |
commit | 8895075886bbcfdab6ad7923ae8ab3b3314549c4 (patch) | |
tree | 3890b7456d8747e58f66ee805b70d7d7e3568b0b /drivers/net/wireless/iwlwifi | |
parent | 052692976e40bc124a8615ec880dd83046d71c24 (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.c | 9 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn-lib.c | 5 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn.c | 6 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-core.c | 8 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-core.h | 6 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-eeprom.h | 3 |
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 | ||
109 | int iwl_eeprom_check_sku(struct iwl_priv *priv) | 109 | int 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 | ||
92 | struct iwl_hcmd_ops { | 88 | struct 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) |