diff options
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-6000.c')
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-6000.c | 894 |
1 files changed, 293 insertions, 601 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-6000.c b/drivers/net/wireless/iwlwifi/iwl-6000.c index cee06b968de8..5b150bc70b06 100644 --- a/drivers/net/wireless/iwlwifi/iwl-6000.c +++ b/drivers/net/wireless/iwlwifi/iwl-6000.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /****************************************************************************** | 1 | /****************************************************************************** |
2 | * | 2 | * |
3 | * Copyright(c) 2008 - 2010 Intel Corporation. All rights reserved. | 3 | * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved. |
4 | * | 4 | * |
5 | * This program is free software; you can redistribute it and/or modify it | 5 | * This program is free software; you can redistribute it and/or modify it |
6 | * under the terms of version 2 of the GNU General Public License as | 6 | * under the terms of version 2 of the GNU General Public License as |
@@ -36,6 +36,7 @@ | |||
36 | #include <net/mac80211.h> | 36 | #include <net/mac80211.h> |
37 | #include <linux/etherdevice.h> | 37 | #include <linux/etherdevice.h> |
38 | #include <asm/unaligned.h> | 38 | #include <asm/unaligned.h> |
39 | #include <linux/stringify.h> | ||
39 | 40 | ||
40 | #include "iwl-eeprom.h" | 41 | #include "iwl-eeprom.h" |
41 | #include "iwl-dev.h" | 42 | #include "iwl-dev.h" |
@@ -46,13 +47,11 @@ | |||
46 | #include "iwl-helpers.h" | 47 | #include "iwl-helpers.h" |
47 | #include "iwl-agn-hw.h" | 48 | #include "iwl-agn-hw.h" |
48 | #include "iwl-6000-hw.h" | 49 | #include "iwl-6000-hw.h" |
49 | #include "iwl-agn-led.h" | ||
50 | #include "iwl-agn-debugfs.h" | ||
51 | 50 | ||
52 | /* Highest firmware API version supported */ | 51 | /* Highest firmware API version supported */ |
53 | #define IWL6000_UCODE_API_MAX 4 | 52 | #define IWL6000_UCODE_API_MAX 4 |
54 | #define IWL6050_UCODE_API_MAX 4 | 53 | #define IWL6050_UCODE_API_MAX 5 |
55 | #define IWL6000G2_UCODE_API_MAX 4 | 54 | #define IWL6000G2_UCODE_API_MAX 5 |
56 | 55 | ||
57 | /* Lowest firmware API version supported */ | 56 | /* Lowest firmware API version supported */ |
58 | #define IWL6000_UCODE_API_MIN 4 | 57 | #define IWL6000_UCODE_API_MIN 4 |
@@ -60,21 +59,16 @@ | |||
60 | #define IWL6000G2_UCODE_API_MIN 4 | 59 | #define IWL6000G2_UCODE_API_MIN 4 |
61 | 60 | ||
62 | #define IWL6000_FW_PRE "iwlwifi-6000-" | 61 | #define IWL6000_FW_PRE "iwlwifi-6000-" |
63 | #define _IWL6000_MODULE_FIRMWARE(api) IWL6000_FW_PRE #api ".ucode" | 62 | #define IWL6000_MODULE_FIRMWARE(api) IWL6000_FW_PRE __stringify(api) ".ucode" |
64 | #define IWL6000_MODULE_FIRMWARE(api) _IWL6000_MODULE_FIRMWARE(api) | ||
65 | 63 | ||
66 | #define IWL6050_FW_PRE "iwlwifi-6050-" | 64 | #define IWL6050_FW_PRE "iwlwifi-6050-" |
67 | #define _IWL6050_MODULE_FIRMWARE(api) IWL6050_FW_PRE #api ".ucode" | 65 | #define IWL6050_MODULE_FIRMWARE(api) IWL6050_FW_PRE __stringify(api) ".ucode" |
68 | #define IWL6050_MODULE_FIRMWARE(api) _IWL6050_MODULE_FIRMWARE(api) | ||
69 | 66 | ||
70 | #define IWL6000G2A_FW_PRE "iwlwifi-6000g2a-" | 67 | #define IWL6005_FW_PRE "iwlwifi-6000g2a-" |
71 | #define _IWL6000G2A_MODULE_FIRMWARE(api) IWL6000G2A_FW_PRE #api ".ucode" | 68 | #define IWL6005_MODULE_FIRMWARE(api) IWL6005_FW_PRE __stringify(api) ".ucode" |
72 | #define IWL6000G2A_MODULE_FIRMWARE(api) _IWL6000G2A_MODULE_FIRMWARE(api) | ||
73 | |||
74 | #define IWL6000G2B_FW_PRE "iwlwifi-6000g2b-" | ||
75 | #define _IWL6000G2B_MODULE_FIRMWARE(api) IWL6000G2B_FW_PRE #api ".ucode" | ||
76 | #define IWL6000G2B_MODULE_FIRMWARE(api) _IWL6000G2B_MODULE_FIRMWARE(api) | ||
77 | 69 | ||
70 | #define IWL6030_FW_PRE "iwlwifi-6000g2b-" | ||
71 | #define IWL6030_MODULE_FIRMWARE(api) IWL6030_FW_PRE __stringify(api) ".ucode" | ||
78 | 72 | ||
79 | static void iwl6000_set_ct_threshold(struct iwl_priv *priv) | 73 | static void iwl6000_set_ct_threshold(struct iwl_priv *priv) |
80 | { | 74 | { |
@@ -83,13 +77,22 @@ static void iwl6000_set_ct_threshold(struct iwl_priv *priv) | |||
83 | priv->hw_params.ct_kill_exit_threshold = CT_KILL_EXIT_THRESHOLD; | 77 | priv->hw_params.ct_kill_exit_threshold = CT_KILL_EXIT_THRESHOLD; |
84 | } | 78 | } |
85 | 79 | ||
86 | /* Indicate calibration version to uCode. */ | 80 | static void iwl6050_additional_nic_config(struct iwl_priv *priv) |
87 | static void iwl6000_set_calib_version(struct iwl_priv *priv) | 81 | { |
82 | /* Indicate calibration version to uCode. */ | ||
83 | if (iwlagn_eeprom_calib_version(priv) >= 6) | ||
84 | iwl_set_bit(priv, CSR_GP_DRIVER_REG, | ||
85 | CSR_GP_DRIVER_REG_BIT_CALIB_VERSION6); | ||
86 | } | ||
87 | |||
88 | static void iwl6150_additional_nic_config(struct iwl_priv *priv) | ||
88 | { | 89 | { |
89 | if (priv->cfg->need_dc_calib && | 90 | /* Indicate calibration version to uCode. */ |
90 | (priv->cfg->ops->lib->eeprom_ops.calib_version(priv) >= 6)) | 91 | if (iwlagn_eeprom_calib_version(priv) >= 6) |
91 | iwl_set_bit(priv, CSR_GP_DRIVER_REG, | 92 | iwl_set_bit(priv, CSR_GP_DRIVER_REG, |
92 | CSR_GP_DRIVER_REG_BIT_CALIB_VERSION6); | 93 | CSR_GP_DRIVER_REG_BIT_CALIB_VERSION6); |
94 | iwl_set_bit(priv, CSR_GP_DRIVER_REG, | ||
95 | CSR_GP_DRIVER_REG_BIT_6050_1x2); | ||
93 | } | 96 | } |
94 | 97 | ||
95 | /* NIC configuration for 6000 series */ | 98 | /* NIC configuration for 6000 series */ |
@@ -117,9 +120,11 @@ static void iwl6000_nic_config(struct iwl_priv *priv) | |||
117 | iwl_write32(priv, CSR_GP_DRIVER_REG, | 120 | iwl_write32(priv, CSR_GP_DRIVER_REG, |
118 | CSR_GP_DRIVER_REG_BIT_RADIO_SKU_2x2_IPA); | 121 | CSR_GP_DRIVER_REG_BIT_RADIO_SKU_2x2_IPA); |
119 | } | 122 | } |
120 | /* else do nothing, uCode configured */ | 123 | /* do additional nic configuration if needed */ |
121 | if (priv->cfg->ops->lib->temp_ops.set_calib_version) | 124 | if (priv->cfg->ops->nic && |
122 | priv->cfg->ops->lib->temp_ops.set_calib_version(priv); | 125 | priv->cfg->ops->nic->additional_nic_config) { |
126 | priv->cfg->ops->nic->additional_nic_config(priv); | ||
127 | } | ||
123 | } | 128 | } |
124 | 129 | ||
125 | static struct iwl_sensitivity_ranges iwl6000_sensitivity = { | 130 | static struct iwl_sensitivity_ranges iwl6000_sensitivity = { |
@@ -149,35 +154,37 @@ static struct iwl_sensitivity_ranges iwl6000_sensitivity = { | |||
149 | 154 | ||
150 | static int iwl6000_hw_set_hw_params(struct iwl_priv *priv) | 155 | static int iwl6000_hw_set_hw_params(struct iwl_priv *priv) |
151 | { | 156 | { |
152 | if (priv->cfg->mod_params->num_of_queues >= IWL_MIN_NUM_QUEUES && | 157 | if (iwlagn_mod_params.num_of_queues >= IWL_MIN_NUM_QUEUES && |
153 | priv->cfg->mod_params->num_of_queues <= IWLAGN_NUM_QUEUES) | 158 | iwlagn_mod_params.num_of_queues <= IWLAGN_NUM_QUEUES) |
154 | priv->cfg->num_of_queues = | 159 | priv->cfg->base_params->num_of_queues = |
155 | priv->cfg->mod_params->num_of_queues; | 160 | iwlagn_mod_params.num_of_queues; |
156 | 161 | ||
157 | priv->hw_params.max_txq_num = priv->cfg->num_of_queues; | 162 | priv->hw_params.max_txq_num = priv->cfg->base_params->num_of_queues; |
158 | priv->hw_params.dma_chnl_num = FH50_TCSR_CHNL_NUM; | 163 | priv->hw_params.dma_chnl_num = FH50_TCSR_CHNL_NUM; |
159 | priv->hw_params.scd_bc_tbls_size = | 164 | priv->hw_params.scd_bc_tbls_size = |
160 | priv->cfg->num_of_queues * | 165 | priv->cfg->base_params->num_of_queues * |
161 | sizeof(struct iwlagn_scd_bc_tbl); | 166 | sizeof(struct iwlagn_scd_bc_tbl); |
162 | priv->hw_params.tfd_size = sizeof(struct iwl_tfd); | 167 | priv->hw_params.tfd_size = sizeof(struct iwl_tfd); |
163 | priv->hw_params.max_stations = IWLAGN_STATION_COUNT; | 168 | priv->hw_params.max_stations = IWLAGN_STATION_COUNT; |
164 | priv->hw_params.bcast_sta_id = IWLAGN_BROADCAST_ID; | 169 | priv->contexts[IWL_RXON_CTX_BSS].bcast_sta_id = IWLAGN_BROADCAST_ID; |
165 | 170 | ||
166 | priv->hw_params.max_data_size = IWL60_RTC_DATA_SIZE; | 171 | priv->hw_params.max_data_size = IWL60_RTC_DATA_SIZE; |
167 | priv->hw_params.max_inst_size = IWL60_RTC_INST_SIZE; | 172 | priv->hw_params.max_inst_size = IWL60_RTC_INST_SIZE; |
168 | 173 | ||
169 | priv->hw_params.max_bsm_size = 0; | ||
170 | priv->hw_params.ht40_channel = BIT(IEEE80211_BAND_2GHZ) | | 174 | priv->hw_params.ht40_channel = BIT(IEEE80211_BAND_2GHZ) | |
171 | BIT(IEEE80211_BAND_5GHZ); | 175 | BIT(IEEE80211_BAND_5GHZ); |
172 | priv->hw_params.rx_wrt_ptr_reg = FH_RSCSR_CHNL0_WPTR; | 176 | priv->hw_params.rx_wrt_ptr_reg = FH_RSCSR_CHNL0_WPTR; |
173 | 177 | ||
174 | priv->hw_params.tx_chains_num = num_of_ant(priv->cfg->valid_tx_ant); | 178 | priv->hw_params.tx_chains_num = num_of_ant(priv->cfg->valid_tx_ant); |
175 | priv->hw_params.rx_chains_num = num_of_ant(priv->cfg->valid_rx_ant); | 179 | if (priv->cfg->rx_with_siso_diversity) |
180 | priv->hw_params.rx_chains_num = 1; | ||
181 | else | ||
182 | priv->hw_params.rx_chains_num = | ||
183 | num_of_ant(priv->cfg->valid_rx_ant); | ||
176 | priv->hw_params.valid_tx_ant = priv->cfg->valid_tx_ant; | 184 | priv->hw_params.valid_tx_ant = priv->cfg->valid_tx_ant; |
177 | priv->hw_params.valid_rx_ant = priv->cfg->valid_rx_ant; | 185 | priv->hw_params.valid_rx_ant = priv->cfg->valid_rx_ant; |
178 | 186 | ||
179 | if (priv->cfg->ops->lib->temp_ops.set_ct_kill) | 187 | iwl6000_set_ct_threshold(priv); |
180 | priv->cfg->ops->lib->temp_ops.set_ct_kill(priv); | ||
181 | 188 | ||
182 | /* Set initial sensitivity parameters */ | 189 | /* Set initial sensitivity parameters */ |
183 | /* Set initial calibration set */ | 190 | /* Set initial calibration set */ |
@@ -188,7 +195,9 @@ static int iwl6000_hw_set_hw_params(struct iwl_priv *priv) | |||
188 | BIT(IWL_CALIB_TX_IQ) | | 195 | BIT(IWL_CALIB_TX_IQ) | |
189 | BIT(IWL_CALIB_BASE_BAND); | 196 | BIT(IWL_CALIB_BASE_BAND); |
190 | if (priv->cfg->need_dc_calib) | 197 | if (priv->cfg->need_dc_calib) |
191 | priv->hw_params.calib_init_cfg |= BIT(IWL_CALIB_DC); | 198 | priv->hw_params.calib_rt_cfg |= BIT(IWL_CALIB_CFG_DC_IDX); |
199 | if (priv->cfg->need_temp_offset_calib) | ||
200 | priv->hw_params.calib_init_cfg |= BIT(IWL_CALIB_TEMP_OFFSET); | ||
192 | 201 | ||
193 | priv->hw_params.beacon_time_tsf_bits = IWLAGN_EXT_BEACON_TIME_POS; | 202 | priv->hw_params.beacon_time_tsf_bits = IWLAGN_EXT_BEACON_TIME_POS; |
194 | 203 | ||
@@ -198,28 +207,33 @@ static int iwl6000_hw_set_hw_params(struct iwl_priv *priv) | |||
198 | static int iwl6000_hw_channel_switch(struct iwl_priv *priv, | 207 | static int iwl6000_hw_channel_switch(struct iwl_priv *priv, |
199 | struct ieee80211_channel_switch *ch_switch) | 208 | struct ieee80211_channel_switch *ch_switch) |
200 | { | 209 | { |
210 | /* | ||
211 | * MULTI-FIXME | ||
212 | * See iwl_mac_channel_switch. | ||
213 | */ | ||
214 | struct iwl_rxon_context *ctx = &priv->contexts[IWL_RXON_CTX_BSS]; | ||
201 | struct iwl6000_channel_switch_cmd cmd; | 215 | struct iwl6000_channel_switch_cmd cmd; |
202 | const struct iwl_channel_info *ch_info; | 216 | const struct iwl_channel_info *ch_info; |
203 | u32 switch_time_in_usec, ucode_switch_time; | 217 | u32 switch_time_in_usec, ucode_switch_time; |
204 | u16 ch; | 218 | u16 ch; |
205 | u32 tsf_low; | 219 | u32 tsf_low; |
206 | u8 switch_count; | 220 | u8 switch_count; |
207 | u16 beacon_interval = le16_to_cpu(priv->rxon_timing.beacon_interval); | 221 | u16 beacon_interval = le16_to_cpu(ctx->timing.beacon_interval); |
208 | struct ieee80211_vif *vif = priv->vif; | 222 | struct ieee80211_vif *vif = ctx->vif; |
209 | struct iwl_host_cmd hcmd = { | 223 | struct iwl_host_cmd hcmd = { |
210 | .id = REPLY_CHANNEL_SWITCH, | 224 | .id = REPLY_CHANNEL_SWITCH, |
211 | .len = sizeof(cmd), | 225 | .len = { sizeof(cmd), }, |
212 | .flags = CMD_SYNC, | 226 | .flags = CMD_SYNC, |
213 | .data = &cmd, | 227 | .data = { &cmd, }, |
214 | }; | 228 | }; |
215 | 229 | ||
216 | cmd.band = priv->band == IEEE80211_BAND_2GHZ; | 230 | cmd.band = priv->band == IEEE80211_BAND_2GHZ; |
217 | ch = ieee80211_frequency_to_channel(ch_switch->channel->center_freq); | 231 | ch = ch_switch->channel->hw_value; |
218 | IWL_DEBUG_11H(priv, "channel switch from %u to %u\n", | 232 | IWL_DEBUG_11H(priv, "channel switch from %u to %u\n", |
219 | priv->active_rxon.channel, ch); | 233 | ctx->active.channel, ch); |
220 | cmd.channel = cpu_to_le16(ch); | 234 | cmd.channel = cpu_to_le16(ch); |
221 | cmd.rxon_flags = priv->staging_rxon.flags; | 235 | cmd.rxon_flags = ctx->staging.flags; |
222 | cmd.rxon_filter_flags = priv->staging_rxon.filter_flags; | 236 | cmd.rxon_filter_flags = ctx->staging.filter_flags; |
223 | switch_count = ch_switch->count; | 237 | switch_count = ch_switch->count; |
224 | tsf_low = ch_switch->timestamp & 0x0ffffffff; | 238 | tsf_low = ch_switch->timestamp & 0x0ffffffff; |
225 | /* | 239 | /* |
@@ -254,43 +268,24 @@ static int iwl6000_hw_channel_switch(struct iwl_priv *priv, | |||
254 | cmd.expect_beacon = is_channel_radar(ch_info); | 268 | cmd.expect_beacon = is_channel_radar(ch_info); |
255 | else { | 269 | else { |
256 | IWL_ERR(priv, "invalid channel switch from %u to %u\n", | 270 | IWL_ERR(priv, "invalid channel switch from %u to %u\n", |
257 | priv->active_rxon.channel, ch); | 271 | ctx->active.channel, ch); |
258 | return -EFAULT; | 272 | return -EFAULT; |
259 | } | 273 | } |
260 | priv->switch_rxon.channel = cmd.channel; | ||
261 | priv->switch_rxon.switch_in_progress = true; | ||
262 | 274 | ||
263 | return iwl_send_cmd_sync(priv, &hcmd); | 275 | return iwl_send_cmd_sync(priv, &hcmd); |
264 | } | 276 | } |
265 | 277 | ||
266 | static struct iwl_lib_ops iwl6000_lib = { | 278 | static struct iwl_lib_ops iwl6000_lib = { |
267 | .set_hw_params = iwl6000_hw_set_hw_params, | 279 | .set_hw_params = iwl6000_hw_set_hw_params, |
268 | .txq_update_byte_cnt_tbl = iwlagn_txq_update_byte_cnt_tbl, | ||
269 | .txq_inval_byte_cnt_tbl = iwlagn_txq_inval_byte_cnt_tbl, | ||
270 | .txq_set_sched = iwlagn_txq_set_sched, | ||
271 | .txq_agg_enable = iwlagn_txq_agg_enable, | ||
272 | .txq_agg_disable = iwlagn_txq_agg_disable, | ||
273 | .txq_attach_buf_to_tfd = iwl_hw_txq_attach_buf_to_tfd, | ||
274 | .txq_free_tfd = iwl_hw_txq_free_tfd, | ||
275 | .txq_init = iwl_hw_tx_queue_init, | ||
276 | .rx_handler_setup = iwlagn_rx_handler_setup, | 280 | .rx_handler_setup = iwlagn_rx_handler_setup, |
277 | .setup_deferred_work = iwlagn_setup_deferred_work, | 281 | .setup_deferred_work = iwlagn_setup_deferred_work, |
278 | .is_valid_rtc_data_addr = iwlagn_hw_valid_rtc_data_addr, | 282 | .is_valid_rtc_data_addr = iwlagn_hw_valid_rtc_data_addr, |
279 | .load_ucode = iwlagn_load_ucode, | ||
280 | .dump_nic_event_log = iwl_dump_nic_event_log, | ||
281 | .dump_nic_error_log = iwl_dump_nic_error_log, | ||
282 | .dump_csr = iwl_dump_csr, | ||
283 | .dump_fh = iwl_dump_fh, | ||
284 | .init_alive_start = iwlagn_init_alive_start, | ||
285 | .alive_notify = iwlagn_alive_notify, | ||
286 | .send_tx_power = iwlagn_send_tx_power, | 283 | .send_tx_power = iwlagn_send_tx_power, |
287 | .update_chain_flags = iwl_update_chain_flags, | 284 | .update_chain_flags = iwl_update_chain_flags, |
288 | .set_channel_switch = iwl6000_hw_channel_switch, | 285 | .set_channel_switch = iwl6000_hw_channel_switch, |
289 | .apm_ops = { | 286 | .apm_ops = { |
290 | .init = iwl_apm_init, | 287 | .init = iwl_apm_init, |
291 | .stop = iwl_apm_stop, | ||
292 | .config = iwl6000_nic_config, | 288 | .config = iwl6000_nic_config, |
293 | .set_pwr_src = iwl_set_pwr_src, | ||
294 | }, | 289 | }, |
295 | .eeprom_ops = { | 290 | .eeprom_ops = { |
296 | .regulatory_bands = { | 291 | .regulatory_bands = { |
@@ -302,612 +297,332 @@ static struct iwl_lib_ops iwl6000_lib = { | |||
302 | EEPROM_6000_REG_BAND_24_HT40_CHANNELS, | 297 | EEPROM_6000_REG_BAND_24_HT40_CHANNELS, |
303 | EEPROM_REG_BAND_52_HT40_CHANNELS | 298 | EEPROM_REG_BAND_52_HT40_CHANNELS |
304 | }, | 299 | }, |
305 | .verify_signature = iwlcore_eeprom_verify_signature, | ||
306 | .acquire_semaphore = iwlcore_eeprom_acquire_semaphore, | ||
307 | .release_semaphore = iwlcore_eeprom_release_semaphore, | ||
308 | .calib_version = iwlagn_eeprom_calib_version, | ||
309 | .query_addr = iwlagn_eeprom_query_addr, | 300 | .query_addr = iwlagn_eeprom_query_addr, |
310 | .update_enhanced_txpower = iwlcore_eeprom_enhanced_txpower, | 301 | .update_enhanced_txpower = iwlcore_eeprom_enhanced_txpower, |
311 | }, | 302 | }, |
312 | .post_associate = iwl_post_associate, | ||
313 | .isr = iwl_isr_ict, | ||
314 | .config_ap = iwl_config_ap, | ||
315 | .temp_ops = { | 303 | .temp_ops = { |
316 | .temperature = iwlagn_temperature, | 304 | .temperature = iwlagn_temperature, |
317 | .set_ct_kill = iwl6000_set_ct_threshold, | ||
318 | .set_calib_version = iwl6000_set_calib_version, | ||
319 | }, | 305 | }, |
320 | .manage_ibss_station = iwlagn_manage_ibss_station, | 306 | .txfifo_flush = iwlagn_txfifo_flush, |
321 | .update_bcast_station = iwl_update_bcast_station, | 307 | .dev_txfifo_flush = iwlagn_dev_txfifo_flush, |
322 | .debugfs_ops = { | 308 | }; |
323 | .rx_stats_read = iwl_ucode_rx_stats_read, | 309 | |
324 | .tx_stats_read = iwl_ucode_tx_stats_read, | 310 | static struct iwl_lib_ops iwl6030_lib = { |
325 | .general_stats_read = iwl_ucode_general_stats_read, | 311 | .set_hw_params = iwl6000_hw_set_hw_params, |
326 | .bt_stats_read = iwl_ucode_bt_stats_read, | 312 | .rx_handler_setup = iwlagn_bt_rx_handler_setup, |
313 | .setup_deferred_work = iwlagn_bt_setup_deferred_work, | ||
314 | .cancel_deferred_work = iwlagn_bt_cancel_deferred_work, | ||
315 | .is_valid_rtc_data_addr = iwlagn_hw_valid_rtc_data_addr, | ||
316 | .send_tx_power = iwlagn_send_tx_power, | ||
317 | .update_chain_flags = iwl_update_chain_flags, | ||
318 | .set_channel_switch = iwl6000_hw_channel_switch, | ||
319 | .apm_ops = { | ||
320 | .init = iwl_apm_init, | ||
321 | .config = iwl6000_nic_config, | ||
327 | }, | 322 | }, |
328 | .recover_from_tx_stall = iwl_bg_monitor_recover, | 323 | .eeprom_ops = { |
329 | .check_plcp_health = iwl_good_plcp_health, | 324 | .regulatory_bands = { |
330 | .check_ack_health = iwl_good_ack_health, | 325 | EEPROM_REG_BAND_1_CHANNELS, |
326 | EEPROM_REG_BAND_2_CHANNELS, | ||
327 | EEPROM_REG_BAND_3_CHANNELS, | ||
328 | EEPROM_REG_BAND_4_CHANNELS, | ||
329 | EEPROM_REG_BAND_5_CHANNELS, | ||
330 | EEPROM_6000_REG_BAND_24_HT40_CHANNELS, | ||
331 | EEPROM_REG_BAND_52_HT40_CHANNELS | ||
332 | }, | ||
333 | .query_addr = iwlagn_eeprom_query_addr, | ||
334 | .update_enhanced_txpower = iwlcore_eeprom_enhanced_txpower, | ||
335 | }, | ||
336 | .temp_ops = { | ||
337 | .temperature = iwlagn_temperature, | ||
338 | }, | ||
331 | .txfifo_flush = iwlagn_txfifo_flush, | 339 | .txfifo_flush = iwlagn_txfifo_flush, |
332 | .dev_txfifo_flush = iwlagn_dev_txfifo_flush, | 340 | .dev_txfifo_flush = iwlagn_dev_txfifo_flush, |
333 | }; | 341 | }; |
334 | 342 | ||
343 | static struct iwl_nic_ops iwl6050_nic_ops = { | ||
344 | .additional_nic_config = &iwl6050_additional_nic_config, | ||
345 | }; | ||
346 | |||
347 | static struct iwl_nic_ops iwl6150_nic_ops = { | ||
348 | .additional_nic_config = &iwl6150_additional_nic_config, | ||
349 | }; | ||
350 | |||
335 | static const struct iwl_ops iwl6000_ops = { | 351 | static const struct iwl_ops iwl6000_ops = { |
336 | .lib = &iwl6000_lib, | 352 | .lib = &iwl6000_lib, |
337 | .hcmd = &iwlagn_hcmd, | 353 | .hcmd = &iwlagn_hcmd, |
338 | .utils = &iwlagn_hcmd_utils, | 354 | .utils = &iwlagn_hcmd_utils, |
339 | .led = &iwlagn_led_ops, | ||
340 | }; | 355 | }; |
341 | 356 | ||
342 | static void do_not_send_bt_config(struct iwl_priv *priv) | 357 | static const struct iwl_ops iwl6050_ops = { |
343 | { | 358 | .lib = &iwl6000_lib, |
344 | } | 359 | .hcmd = &iwlagn_hcmd, |
345 | 360 | .utils = &iwlagn_hcmd_utils, | |
346 | static struct iwl_hcmd_ops iwl6000g2b_hcmd = { | 361 | .nic = &iwl6050_nic_ops, |
347 | .rxon_assoc = iwlagn_send_rxon_assoc, | ||
348 | .commit_rxon = iwl_commit_rxon, | ||
349 | .set_rxon_chain = iwl_set_rxon_chain, | ||
350 | .set_tx_ant = iwlagn_send_tx_ant_config, | ||
351 | .send_bt_config = do_not_send_bt_config, | ||
352 | }; | 362 | }; |
353 | 363 | ||
354 | static const struct iwl_ops iwl6000g2b_ops = { | 364 | static const struct iwl_ops iwl6150_ops = { |
355 | .lib = &iwl6000_lib, | 365 | .lib = &iwl6000_lib, |
356 | .hcmd = &iwl6000g2b_hcmd, | 366 | .hcmd = &iwlagn_hcmd, |
357 | .utils = &iwlagn_hcmd_utils, | 367 | .utils = &iwlagn_hcmd_utils, |
358 | .led = &iwlagn_led_ops, | 368 | .nic = &iwl6150_nic_ops, |
359 | }; | 369 | }; |
360 | 370 | ||
361 | struct iwl_cfg iwl6000g2a_2agn_cfg = { | 371 | static const struct iwl_ops iwl6030_ops = { |
362 | .name = "6000 Series 2x2 AGN Gen2a", | 372 | .lib = &iwl6030_lib, |
363 | .fw_name_pre = IWL6000G2A_FW_PRE, | 373 | .hcmd = &iwlagn_bt_hcmd, |
364 | .ucode_api_max = IWL6000G2_UCODE_API_MAX, | 374 | .utils = &iwlagn_hcmd_utils, |
365 | .ucode_api_min = IWL6000G2_UCODE_API_MIN, | 375 | }; |
366 | .sku = IWL_SKU_A|IWL_SKU_G|IWL_SKU_N, | 376 | |
367 | .ops = &iwl6000_ops, | 377 | static struct iwl_base_params iwl6000_base_params = { |
368 | .eeprom_size = OTP_LOW_IMAGE_SIZE, | 378 | .eeprom_size = OTP_LOW_IMAGE_SIZE, |
369 | .eeprom_ver = EEPROM_6000G2_EEPROM_VERSION, | ||
370 | .eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION, | ||
371 | .num_of_queues = IWLAGN_NUM_QUEUES, | 379 | .num_of_queues = IWLAGN_NUM_QUEUES, |
372 | .num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES, | 380 | .num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES, |
373 | .mod_params = &iwlagn_mod_params, | ||
374 | .valid_tx_ant = ANT_AB, | ||
375 | .valid_rx_ant = ANT_AB, | ||
376 | .pll_cfg_val = 0, | 381 | .pll_cfg_val = 0, |
377 | .set_l0s = true, | ||
378 | .use_bsm = false, | ||
379 | .pa_type = IWL_PA_SYSTEM, | ||
380 | .max_ll_items = OTP_MAX_LL_ITEMS_6x00, | 382 | .max_ll_items = OTP_MAX_LL_ITEMS_6x00, |
381 | .shadow_ram_support = true, | 383 | .shadow_ram_support = true, |
382 | .ht_greenfield_support = true, | ||
383 | .led_compensation = 51, | 384 | .led_compensation = 51, |
384 | .use_rts_for_aggregation = true, /* use rts/cts protection */ | ||
385 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, | 385 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, |
386 | .supports_idle = true, | ||
387 | .adv_thermal_throttle = true, | 386 | .adv_thermal_throttle = true, |
388 | .support_ct_kill_exit = true, | 387 | .support_ct_kill_exit = true, |
389 | .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, | 388 | .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, |
390 | .chain_noise_scale = 1000, | 389 | .chain_noise_scale = 1000, |
391 | .monitor_recover_period = IWL_DEF_MONITORING_PERIOD, | 390 | .wd_timeout = IWL_DEF_WD_TIMEOUT, |
392 | .max_event_log_size = 512, | 391 | .max_event_log_size = 512, |
393 | .ucode_tracing = true, | 392 | .shadow_reg_enable = true, |
394 | .sensitivity_calib_by_driver = true, | ||
395 | .chain_noise_calib_by_driver = true, | ||
396 | .need_dc_calib = true, | ||
397 | }; | 393 | }; |
398 | 394 | ||
399 | struct iwl_cfg iwl6000g2a_2abg_cfg = { | 395 | static struct iwl_base_params iwl6050_base_params = { |
400 | .name = "6000 Series 2x2 ABG Gen2a", | ||
401 | .fw_name_pre = IWL6000G2A_FW_PRE, | ||
402 | .ucode_api_max = IWL6000G2_UCODE_API_MAX, | ||
403 | .ucode_api_min = IWL6000G2_UCODE_API_MIN, | ||
404 | .sku = IWL_SKU_A|IWL_SKU_G, | ||
405 | .ops = &iwl6000_ops, | ||
406 | .eeprom_size = OTP_LOW_IMAGE_SIZE, | 396 | .eeprom_size = OTP_LOW_IMAGE_SIZE, |
407 | .eeprom_ver = EEPROM_6000G2_EEPROM_VERSION, | ||
408 | .eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION, | ||
409 | .num_of_queues = IWLAGN_NUM_QUEUES, | 397 | .num_of_queues = IWLAGN_NUM_QUEUES, |
410 | .num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES, | 398 | .num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES, |
411 | .mod_params = &iwlagn_mod_params, | ||
412 | .valid_tx_ant = ANT_AB, | ||
413 | .valid_rx_ant = ANT_AB, | ||
414 | .pll_cfg_val = 0, | 399 | .pll_cfg_val = 0, |
415 | .set_l0s = true, | 400 | .max_ll_items = OTP_MAX_LL_ITEMS_6x50, |
416 | .use_bsm = false, | ||
417 | .pa_type = IWL_PA_SYSTEM, | ||
418 | .max_ll_items = OTP_MAX_LL_ITEMS_6x00, | ||
419 | .shadow_ram_support = true, | 401 | .shadow_ram_support = true, |
420 | .led_compensation = 51, | 402 | .led_compensation = 51, |
421 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, | 403 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, |
422 | .supports_idle = true, | ||
423 | .adv_thermal_throttle = true, | 404 | .adv_thermal_throttle = true, |
424 | .support_ct_kill_exit = true, | 405 | .support_ct_kill_exit = true, |
425 | .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, | 406 | .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, |
426 | .chain_noise_scale = 1000, | 407 | .chain_noise_scale = 1500, |
427 | .monitor_recover_period = IWL_DEF_MONITORING_PERIOD, | 408 | .wd_timeout = IWL_DEF_WD_TIMEOUT, |
428 | .max_event_log_size = 512, | 409 | .max_event_log_size = 1024, |
429 | .sensitivity_calib_by_driver = true, | 410 | .shadow_reg_enable = true, |
430 | .chain_noise_calib_by_driver = true, | ||
431 | .need_dc_calib = true, | ||
432 | }; | 411 | }; |
433 | 412 | static struct iwl_base_params iwl6000_g2_base_params = { | |
434 | struct iwl_cfg iwl6000g2a_2bg_cfg = { | ||
435 | .name = "6000 Series 2x2 BG Gen2a", | ||
436 | .fw_name_pre = IWL6000G2A_FW_PRE, | ||
437 | .ucode_api_max = IWL6000G2_UCODE_API_MAX, | ||
438 | .ucode_api_min = IWL6000G2_UCODE_API_MIN, | ||
439 | .sku = IWL_SKU_G, | ||
440 | .ops = &iwl6000_ops, | ||
441 | .eeprom_size = OTP_LOW_IMAGE_SIZE, | 413 | .eeprom_size = OTP_LOW_IMAGE_SIZE, |
442 | .eeprom_ver = EEPROM_6000G2_EEPROM_VERSION, | ||
443 | .eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION, | ||
444 | .num_of_queues = IWLAGN_NUM_QUEUES, | 414 | .num_of_queues = IWLAGN_NUM_QUEUES, |
445 | .num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES, | 415 | .num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES, |
446 | .mod_params = &iwlagn_mod_params, | ||
447 | .valid_tx_ant = ANT_AB, | ||
448 | .valid_rx_ant = ANT_AB, | ||
449 | .pll_cfg_val = 0, | 416 | .pll_cfg_val = 0, |
450 | .set_l0s = true, | ||
451 | .use_bsm = false, | ||
452 | .pa_type = IWL_PA_SYSTEM, | ||
453 | .max_ll_items = OTP_MAX_LL_ITEMS_6x00, | 417 | .max_ll_items = OTP_MAX_LL_ITEMS_6x00, |
454 | .shadow_ram_support = true, | 418 | .shadow_ram_support = true, |
455 | .led_compensation = 51, | 419 | .led_compensation = 57, |
456 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, | 420 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, |
457 | .supports_idle = true, | ||
458 | .adv_thermal_throttle = true, | 421 | .adv_thermal_throttle = true, |
459 | .support_ct_kill_exit = true, | 422 | .support_ct_kill_exit = true, |
460 | .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, | 423 | .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, |
461 | .chain_noise_scale = 1000, | 424 | .chain_noise_scale = 1000, |
462 | .monitor_recover_period = IWL_DEF_MONITORING_PERIOD, | 425 | .wd_timeout = IWL_LONG_WD_TIMEOUT, |
463 | .max_event_log_size = 512, | 426 | .max_event_log_size = 512, |
464 | .sensitivity_calib_by_driver = true, | 427 | .shadow_reg_enable = true, |
465 | .chain_noise_calib_by_driver = true, | ||
466 | .need_dc_calib = true, | ||
467 | }; | 428 | }; |
468 | 429 | ||
469 | struct iwl_cfg iwl6000g2b_2agn_cfg = { | 430 | static struct iwl_ht_params iwl6000_ht_params = { |
470 | .name = "6000 Series 2x2 AGN Gen2b", | ||
471 | .fw_name_pre = IWL6000G2B_FW_PRE, | ||
472 | .ucode_api_max = IWL6000G2_UCODE_API_MAX, | ||
473 | .ucode_api_min = IWL6000G2_UCODE_API_MIN, | ||
474 | .sku = IWL_SKU_A|IWL_SKU_G|IWL_SKU_N, | ||
475 | .ops = &iwl6000g2b_ops, | ||
476 | .eeprom_size = OTP_LOW_IMAGE_SIZE, | ||
477 | .eeprom_ver = EEPROM_6000G2_EEPROM_VERSION, | ||
478 | .eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION, | ||
479 | .num_of_queues = IWLAGN_NUM_QUEUES, | ||
480 | .num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES, | ||
481 | .mod_params = &iwlagn_mod_params, | ||
482 | .valid_tx_ant = ANT_AB, | ||
483 | .valid_rx_ant = ANT_AB, | ||
484 | .pll_cfg_val = 0, | ||
485 | .set_l0s = true, | ||
486 | .use_bsm = false, | ||
487 | .pa_type = IWL_PA_SYSTEM, | ||
488 | .max_ll_items = OTP_MAX_LL_ITEMS_6x00, | ||
489 | .shadow_ram_support = true, | ||
490 | .ht_greenfield_support = true, | 431 | .ht_greenfield_support = true, |
491 | .led_compensation = 51, | ||
492 | .use_rts_for_aggregation = true, /* use rts/cts protection */ | 432 | .use_rts_for_aggregation = true, /* use rts/cts protection */ |
493 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, | ||
494 | .supports_idle = true, | ||
495 | .adv_thermal_throttle = true, | ||
496 | .support_ct_kill_exit = true, | ||
497 | .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, | ||
498 | .chain_noise_scale = 1000, | ||
499 | .monitor_recover_period = IWL_LONG_MONITORING_PERIOD, | ||
500 | .max_event_log_size = 512, | ||
501 | .sensitivity_calib_by_driver = true, | ||
502 | .chain_noise_calib_by_driver = true, | ||
503 | .need_dc_calib = true, | ||
504 | .bt_statistics = true, | ||
505 | }; | 433 | }; |
506 | 434 | ||
507 | struct iwl_cfg iwl6000g2b_2abg_cfg = { | 435 | static struct iwl_bt_params iwl6000_bt_params = { |
508 | .name = "6000 Series 2x2 ABG Gen2b", | 436 | /* Due to bluetooth, we transmit 2.4 GHz probes only on antenna A */ |
509 | .fw_name_pre = IWL6000G2B_FW_PRE, | 437 | .advanced_bt_coexist = true, |
510 | .ucode_api_max = IWL6000G2_UCODE_API_MAX, | 438 | .agg_time_limit = BT_AGG_THRESHOLD_DEF, |
511 | .ucode_api_min = IWL6000G2_UCODE_API_MIN, | 439 | .bt_init_traffic_load = IWL_BT_COEX_TRAFFIC_LOAD_NONE, |
512 | .sku = IWL_SKU_A|IWL_SKU_G, | 440 | .bt_prio_boost = IWLAGN_BT_PRIO_BOOST_DEFAULT, |
513 | .ops = &iwl6000g2b_ops, | 441 | .bt_sco_disable = true, |
514 | .eeprom_size = OTP_LOW_IMAGE_SIZE, | ||
515 | .eeprom_ver = EEPROM_6000G2_EEPROM_VERSION, | ||
516 | .eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION, | ||
517 | .num_of_queues = IWLAGN_NUM_QUEUES, | ||
518 | .num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES, | ||
519 | .mod_params = &iwlagn_mod_params, | ||
520 | .valid_tx_ant = ANT_AB, | ||
521 | .valid_rx_ant = ANT_AB, | ||
522 | .pll_cfg_val = 0, | ||
523 | .set_l0s = true, | ||
524 | .use_bsm = false, | ||
525 | .pa_type = IWL_PA_SYSTEM, | ||
526 | .max_ll_items = OTP_MAX_LL_ITEMS_6x00, | ||
527 | .shadow_ram_support = true, | ||
528 | .led_compensation = 51, | ||
529 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, | ||
530 | .supports_idle = true, | ||
531 | .adv_thermal_throttle = true, | ||
532 | .support_ct_kill_exit = true, | ||
533 | .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, | ||
534 | .chain_noise_scale = 1000, | ||
535 | .monitor_recover_period = IWL_LONG_MONITORING_PERIOD, | ||
536 | .max_event_log_size = 512, | ||
537 | .sensitivity_calib_by_driver = true, | ||
538 | .chain_noise_calib_by_driver = true, | ||
539 | .need_dc_calib = true, | ||
540 | .bt_statistics = true, | ||
541 | }; | 442 | }; |
542 | 443 | ||
543 | struct iwl_cfg iwl6000g2b_2bgn_cfg = { | 444 | #define IWL_DEVICE_6005 \ |
544 | .name = "6000 Series 2x2 BGN Gen2b", | 445 | .fw_name_pre = IWL6005_FW_PRE, \ |
545 | .fw_name_pre = IWL6000G2B_FW_PRE, | 446 | .ucode_api_max = IWL6000G2_UCODE_API_MAX, \ |
546 | .ucode_api_max = IWL6000G2_UCODE_API_MAX, | 447 | .ucode_api_min = IWL6000G2_UCODE_API_MIN, \ |
547 | .ucode_api_min = IWL6000G2_UCODE_API_MIN, | 448 | .eeprom_ver = EEPROM_6005_EEPROM_VERSION, \ |
548 | .sku = IWL_SKU_G|IWL_SKU_N, | 449 | .eeprom_calib_ver = EEPROM_6005_TX_POWER_VERSION, \ |
549 | .ops = &iwl6000g2b_ops, | 450 | .ops = &iwl6000_ops, \ |
550 | .eeprom_size = OTP_LOW_IMAGE_SIZE, | 451 | .base_params = &iwl6000_g2_base_params, \ |
551 | .eeprom_ver = EEPROM_6000G2_EEPROM_VERSION, | 452 | .need_dc_calib = true, \ |
552 | .eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION, | 453 | .need_temp_offset_calib = true, \ |
553 | .num_of_queues = IWLAGN_NUM_QUEUES, | 454 | .led_mode = IWL_LED_RF_STATE |
554 | .num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES, | 455 | |
555 | .mod_params = &iwlagn_mod_params, | 456 | struct iwl_cfg iwl6005_2agn_cfg = { |
556 | .valid_tx_ant = ANT_AB, | 457 | .name = "Intel(R) Centrino(R) Advanced-N 6205 AGN", |
557 | .valid_rx_ant = ANT_AB, | 458 | IWL_DEVICE_6005, |
558 | .pll_cfg_val = 0, | 459 | .ht_params = &iwl6000_ht_params, |
559 | .set_l0s = true, | ||
560 | .use_bsm = false, | ||
561 | .pa_type = IWL_PA_SYSTEM, | ||
562 | .max_ll_items = OTP_MAX_LL_ITEMS_6x00, | ||
563 | .shadow_ram_support = true, | ||
564 | .ht_greenfield_support = true, | ||
565 | .led_compensation = 51, | ||
566 | .use_rts_for_aggregation = true, /* use rts/cts protection */ | ||
567 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, | ||
568 | .supports_idle = true, | ||
569 | .adv_thermal_throttle = true, | ||
570 | .support_ct_kill_exit = true, | ||
571 | .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, | ||
572 | .chain_noise_scale = 1000, | ||
573 | .monitor_recover_period = IWL_LONG_MONITORING_PERIOD, | ||
574 | .max_event_log_size = 512, | ||
575 | .sensitivity_calib_by_driver = true, | ||
576 | .chain_noise_calib_by_driver = true, | ||
577 | .need_dc_calib = true, | ||
578 | .bt_statistics = true, | ||
579 | }; | 460 | }; |
580 | 461 | ||
581 | struct iwl_cfg iwl6000g2b_2bg_cfg = { | 462 | struct iwl_cfg iwl6005_2abg_cfg = { |
582 | .name = "6000 Series 2x2 BG Gen2b", | 463 | .name = "Intel(R) Centrino(R) Advanced-N 6205 ABG", |
583 | .fw_name_pre = IWL6000G2B_FW_PRE, | 464 | IWL_DEVICE_6005, |
584 | .ucode_api_max = IWL6000G2_UCODE_API_MAX, | ||
585 | .ucode_api_min = IWL6000G2_UCODE_API_MIN, | ||
586 | .sku = IWL_SKU_G, | ||
587 | .ops = &iwl6000g2b_ops, | ||
588 | .eeprom_size = OTP_LOW_IMAGE_SIZE, | ||
589 | .eeprom_ver = EEPROM_6000G2_EEPROM_VERSION, | ||
590 | .eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION, | ||
591 | .num_of_queues = IWLAGN_NUM_QUEUES, | ||
592 | .num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES, | ||
593 | .mod_params = &iwlagn_mod_params, | ||
594 | .valid_tx_ant = ANT_AB, | ||
595 | .valid_rx_ant = ANT_AB, | ||
596 | .pll_cfg_val = 0, | ||
597 | .set_l0s = true, | ||
598 | .use_bsm = false, | ||
599 | .pa_type = IWL_PA_SYSTEM, | ||
600 | .max_ll_items = OTP_MAX_LL_ITEMS_6x00, | ||
601 | .shadow_ram_support = true, | ||
602 | .led_compensation = 51, | ||
603 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, | ||
604 | .supports_idle = true, | ||
605 | .adv_thermal_throttle = true, | ||
606 | .support_ct_kill_exit = true, | ||
607 | .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, | ||
608 | .chain_noise_scale = 1000, | ||
609 | .monitor_recover_period = IWL_LONG_MONITORING_PERIOD, | ||
610 | .max_event_log_size = 512, | ||
611 | .sensitivity_calib_by_driver = true, | ||
612 | .chain_noise_calib_by_driver = true, | ||
613 | .need_dc_calib = true, | ||
614 | .bt_statistics = true, | ||
615 | }; | 465 | }; |
616 | 466 | ||
617 | struct iwl_cfg iwl6000g2b_bgn_cfg = { | 467 | struct iwl_cfg iwl6005_2bg_cfg = { |
618 | .name = "6000 Series 1x2 BGN Gen2b", | 468 | .name = "Intel(R) Centrino(R) Advanced-N 6205 BG", |
619 | .fw_name_pre = IWL6000G2B_FW_PRE, | 469 | IWL_DEVICE_6005, |
620 | .ucode_api_max = IWL6000G2_UCODE_API_MAX, | ||
621 | .ucode_api_min = IWL6000G2_UCODE_API_MIN, | ||
622 | .sku = IWL_SKU_G|IWL_SKU_N, | ||
623 | .ops = &iwl6000g2b_ops, | ||
624 | .eeprom_size = OTP_LOW_IMAGE_SIZE, | ||
625 | .eeprom_ver = EEPROM_6000G2_EEPROM_VERSION, | ||
626 | .eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION, | ||
627 | .num_of_queues = IWLAGN_NUM_QUEUES, | ||
628 | .num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES, | ||
629 | .mod_params = &iwlagn_mod_params, | ||
630 | .valid_tx_ant = ANT_A, | ||
631 | .valid_rx_ant = ANT_AB, | ||
632 | .pll_cfg_val = 0, | ||
633 | .set_l0s = true, | ||
634 | .use_bsm = false, | ||
635 | .pa_type = IWL_PA_SYSTEM, | ||
636 | .max_ll_items = OTP_MAX_LL_ITEMS_6x00, | ||
637 | .shadow_ram_support = true, | ||
638 | .ht_greenfield_support = true, | ||
639 | .led_compensation = 51, | ||
640 | .use_rts_for_aggregation = true, /* use rts/cts protection */ | ||
641 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, | ||
642 | .supports_idle = true, | ||
643 | .adv_thermal_throttle = true, | ||
644 | .support_ct_kill_exit = true, | ||
645 | .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, | ||
646 | .chain_noise_scale = 1000, | ||
647 | .monitor_recover_period = IWL_LONG_MONITORING_PERIOD, | ||
648 | .max_event_log_size = 512, | ||
649 | .sensitivity_calib_by_driver = true, | ||
650 | .chain_noise_calib_by_driver = true, | ||
651 | .need_dc_calib = true, | ||
652 | .bt_statistics = true, | ||
653 | }; | 470 | }; |
654 | 471 | ||
655 | struct iwl_cfg iwl6000g2b_bg_cfg = { | 472 | #define IWL_DEVICE_6030 \ |
656 | .name = "6000 Series 1x2 BG Gen2b", | 473 | .fw_name_pre = IWL6030_FW_PRE, \ |
657 | .fw_name_pre = IWL6000G2B_FW_PRE, | 474 | .ucode_api_max = IWL6000G2_UCODE_API_MAX, \ |
658 | .ucode_api_max = IWL6000G2_UCODE_API_MAX, | 475 | .ucode_api_min = IWL6000G2_UCODE_API_MIN, \ |
659 | .ucode_api_min = IWL6000G2_UCODE_API_MIN, | 476 | .eeprom_ver = EEPROM_6030_EEPROM_VERSION, \ |
660 | .sku = IWL_SKU_G, | 477 | .eeprom_calib_ver = EEPROM_6030_TX_POWER_VERSION, \ |
661 | .ops = &iwl6000g2b_ops, | 478 | .ops = &iwl6030_ops, \ |
662 | .eeprom_size = OTP_LOW_IMAGE_SIZE, | 479 | .base_params = &iwl6000_g2_base_params, \ |
663 | .eeprom_ver = EEPROM_6000G2_EEPROM_VERSION, | 480 | .bt_params = &iwl6000_bt_params, \ |
664 | .eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION, | 481 | .need_dc_calib = true, \ |
665 | .num_of_queues = IWLAGN_NUM_QUEUES, | 482 | .need_temp_offset_calib = true, \ |
666 | .num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES, | 483 | .led_mode = IWL_LED_RF_STATE, \ |
667 | .mod_params = &iwlagn_mod_params, | 484 | .adv_pm = true \ |
668 | .valid_tx_ant = ANT_A, | 485 | |
669 | .valid_rx_ant = ANT_AB, | 486 | struct iwl_cfg iwl6030_2agn_cfg = { |
670 | .pll_cfg_val = 0, | 487 | .name = "Intel(R) Centrino(R) Advanced-N 6230 AGN", |
671 | .set_l0s = true, | 488 | IWL_DEVICE_6030, |
672 | .use_bsm = false, | 489 | .ht_params = &iwl6000_ht_params, |
673 | .pa_type = IWL_PA_SYSTEM, | 490 | }; |
674 | .max_ll_items = OTP_MAX_LL_ITEMS_6x00, | 491 | |
675 | .shadow_ram_support = true, | 492 | struct iwl_cfg iwl6030_2abg_cfg = { |
676 | .led_compensation = 51, | 493 | .name = "Intel(R) Centrino(R) Advanced-N 6230 ABG", |
677 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, | 494 | IWL_DEVICE_6030, |
678 | .supports_idle = true, | 495 | }; |
679 | .adv_thermal_throttle = true, | 496 | |
680 | .support_ct_kill_exit = true, | 497 | struct iwl_cfg iwl6030_2bgn_cfg = { |
681 | .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, | 498 | .name = "Intel(R) Centrino(R) Advanced-N 6230 BGN", |
682 | .chain_noise_scale = 1000, | 499 | IWL_DEVICE_6030, |
683 | .monitor_recover_period = IWL_LONG_MONITORING_PERIOD, | 500 | .ht_params = &iwl6000_ht_params, |
684 | .max_event_log_size = 512, | 501 | }; |
685 | .sensitivity_calib_by_driver = true, | 502 | |
686 | .chain_noise_calib_by_driver = true, | 503 | struct iwl_cfg iwl6030_2bg_cfg = { |
687 | .need_dc_calib = true, | 504 | .name = "Intel(R) Centrino(R) Advanced-N 6230 BG", |
688 | .bt_statistics = true, | 505 | IWL_DEVICE_6030, |
506 | }; | ||
507 | |||
508 | struct iwl_cfg iwl6035_2agn_cfg = { | ||
509 | .name = "6035 Series 2x2 AGN/BT", | ||
510 | IWL_DEVICE_6030, | ||
511 | .ht_params = &iwl6000_ht_params, | ||
512 | }; | ||
513 | |||
514 | struct iwl_cfg iwl6035_2abg_cfg = { | ||
515 | .name = "6035 Series 2x2 ABG/BT", | ||
516 | IWL_DEVICE_6030, | ||
517 | }; | ||
518 | |||
519 | struct iwl_cfg iwl6035_2bg_cfg = { | ||
520 | .name = "6035 Series 2x2 BG/BT", | ||
521 | IWL_DEVICE_6030, | ||
522 | }; | ||
523 | |||
524 | struct iwl_cfg iwl1030_bgn_cfg = { | ||
525 | .name = "Intel(R) Centrino(R) Wireless-N 1030 BGN", | ||
526 | IWL_DEVICE_6030, | ||
527 | .ht_params = &iwl6000_ht_params, | ||
528 | }; | ||
529 | |||
530 | struct iwl_cfg iwl1030_bg_cfg = { | ||
531 | .name = "Intel(R) Centrino(R) Wireless-N 1030 BG", | ||
532 | IWL_DEVICE_6030, | ||
533 | }; | ||
534 | |||
535 | struct iwl_cfg iwl130_bgn_cfg = { | ||
536 | .name = "Intel(R) Centrino(R) Wireless-N 130 BGN", | ||
537 | IWL_DEVICE_6030, | ||
538 | .ht_params = &iwl6000_ht_params, | ||
539 | .rx_with_siso_diversity = true, | ||
540 | }; | ||
541 | |||
542 | struct iwl_cfg iwl130_bg_cfg = { | ||
543 | .name = "Intel(R) Centrino(R) Wireless-N 130 BG", | ||
544 | IWL_DEVICE_6030, | ||
545 | .rx_with_siso_diversity = true, | ||
689 | }; | 546 | }; |
690 | 547 | ||
691 | /* | 548 | /* |
692 | * "i": Internal configuration, use internal Power Amplifier | 549 | * "i": Internal configuration, use internal Power Amplifier |
693 | */ | 550 | */ |
551 | #define IWL_DEVICE_6000i \ | ||
552 | .fw_name_pre = IWL6000_FW_PRE, \ | ||
553 | .ucode_api_max = IWL6000_UCODE_API_MAX, \ | ||
554 | .ucode_api_min = IWL6000_UCODE_API_MIN, \ | ||
555 | .valid_tx_ant = ANT_BC, /* .cfg overwrite */ \ | ||
556 | .valid_rx_ant = ANT_BC, /* .cfg overwrite */ \ | ||
557 | .eeprom_ver = EEPROM_6000_EEPROM_VERSION, \ | ||
558 | .eeprom_calib_ver = EEPROM_6000_TX_POWER_VERSION, \ | ||
559 | .ops = &iwl6000_ops, \ | ||
560 | .base_params = &iwl6000_base_params, \ | ||
561 | .pa_type = IWL_PA_INTERNAL, \ | ||
562 | .led_mode = IWL_LED_BLINK | ||
563 | |||
694 | struct iwl_cfg iwl6000i_2agn_cfg = { | 564 | struct iwl_cfg iwl6000i_2agn_cfg = { |
695 | .name = "Intel(R) Centrino(R) Advanced-N 6200 AGN", | 565 | .name = "Intel(R) Centrino(R) Advanced-N 6200 AGN", |
696 | .fw_name_pre = IWL6000_FW_PRE, | 566 | IWL_DEVICE_6000i, |
697 | .ucode_api_max = IWL6000_UCODE_API_MAX, | 567 | .ht_params = &iwl6000_ht_params, |
698 | .ucode_api_min = IWL6000_UCODE_API_MIN, | ||
699 | .sku = IWL_SKU_A|IWL_SKU_G|IWL_SKU_N, | ||
700 | .ops = &iwl6000_ops, | ||
701 | .eeprom_size = OTP_LOW_IMAGE_SIZE, | ||
702 | .eeprom_ver = EEPROM_6000_EEPROM_VERSION, | ||
703 | .eeprom_calib_ver = EEPROM_6000_TX_POWER_VERSION, | ||
704 | .num_of_queues = IWLAGN_NUM_QUEUES, | ||
705 | .num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES, | ||
706 | .mod_params = &iwlagn_mod_params, | ||
707 | .valid_tx_ant = ANT_BC, | ||
708 | .valid_rx_ant = ANT_BC, | ||
709 | .pll_cfg_val = 0, | ||
710 | .set_l0s = true, | ||
711 | .use_bsm = false, | ||
712 | .pa_type = IWL_PA_INTERNAL, | ||
713 | .max_ll_items = OTP_MAX_LL_ITEMS_6x00, | ||
714 | .shadow_ram_support = true, | ||
715 | .ht_greenfield_support = true, | ||
716 | .led_compensation = 51, | ||
717 | .use_rts_for_aggregation = true, /* use rts/cts protection */ | ||
718 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, | ||
719 | .supports_idle = true, | ||
720 | .adv_thermal_throttle = true, | ||
721 | .support_ct_kill_exit = true, | ||
722 | .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, | ||
723 | .chain_noise_scale = 1000, | ||
724 | .monitor_recover_period = IWL_DEF_MONITORING_PERIOD, | ||
725 | .max_event_log_size = 1024, | ||
726 | .ucode_tracing = true, | ||
727 | .sensitivity_calib_by_driver = true, | ||
728 | .chain_noise_calib_by_driver = true, | ||
729 | }; | 568 | }; |
730 | 569 | ||
731 | struct iwl_cfg iwl6000i_2abg_cfg = { | 570 | struct iwl_cfg iwl6000i_2abg_cfg = { |
732 | .name = "Intel(R) Centrino(R) Advanced-N 6200 ABG", | 571 | .name = "Intel(R) Centrino(R) Advanced-N 6200 ABG", |
733 | .fw_name_pre = IWL6000_FW_PRE, | 572 | IWL_DEVICE_6000i, |
734 | .ucode_api_max = IWL6000_UCODE_API_MAX, | ||
735 | .ucode_api_min = IWL6000_UCODE_API_MIN, | ||
736 | .sku = IWL_SKU_A|IWL_SKU_G, | ||
737 | .ops = &iwl6000_ops, | ||
738 | .eeprom_size = OTP_LOW_IMAGE_SIZE, | ||
739 | .eeprom_ver = EEPROM_6000_EEPROM_VERSION, | ||
740 | .eeprom_calib_ver = EEPROM_6000_TX_POWER_VERSION, | ||
741 | .num_of_queues = IWLAGN_NUM_QUEUES, | ||
742 | .num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES, | ||
743 | .mod_params = &iwlagn_mod_params, | ||
744 | .valid_tx_ant = ANT_BC, | ||
745 | .valid_rx_ant = ANT_BC, | ||
746 | .pll_cfg_val = 0, | ||
747 | .set_l0s = true, | ||
748 | .use_bsm = false, | ||
749 | .pa_type = IWL_PA_INTERNAL, | ||
750 | .max_ll_items = OTP_MAX_LL_ITEMS_6x00, | ||
751 | .shadow_ram_support = true, | ||
752 | .led_compensation = 51, | ||
753 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, | ||
754 | .supports_idle = true, | ||
755 | .adv_thermal_throttle = true, | ||
756 | .support_ct_kill_exit = true, | ||
757 | .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, | ||
758 | .chain_noise_scale = 1000, | ||
759 | .monitor_recover_period = IWL_DEF_MONITORING_PERIOD, | ||
760 | .max_event_log_size = 1024, | ||
761 | .ucode_tracing = true, | ||
762 | .sensitivity_calib_by_driver = true, | ||
763 | .chain_noise_calib_by_driver = true, | ||
764 | }; | 573 | }; |
765 | 574 | ||
766 | struct iwl_cfg iwl6000i_2bg_cfg = { | 575 | struct iwl_cfg iwl6000i_2bg_cfg = { |
767 | .name = "Intel(R) Centrino(R) Advanced-N 6200 BG", | 576 | .name = "Intel(R) Centrino(R) Advanced-N 6200 BG", |
768 | .fw_name_pre = IWL6000_FW_PRE, | 577 | IWL_DEVICE_6000i, |
769 | .ucode_api_max = IWL6000_UCODE_API_MAX, | ||
770 | .ucode_api_min = IWL6000_UCODE_API_MIN, | ||
771 | .sku = IWL_SKU_G, | ||
772 | .ops = &iwl6000_ops, | ||
773 | .eeprom_size = OTP_LOW_IMAGE_SIZE, | ||
774 | .eeprom_ver = EEPROM_6000_EEPROM_VERSION, | ||
775 | .eeprom_calib_ver = EEPROM_6000_TX_POWER_VERSION, | ||
776 | .num_of_queues = IWLAGN_NUM_QUEUES, | ||
777 | .num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES, | ||
778 | .mod_params = &iwlagn_mod_params, | ||
779 | .valid_tx_ant = ANT_BC, | ||
780 | .valid_rx_ant = ANT_BC, | ||
781 | .pll_cfg_val = 0, | ||
782 | .set_l0s = true, | ||
783 | .use_bsm = false, | ||
784 | .pa_type = IWL_PA_INTERNAL, | ||
785 | .max_ll_items = OTP_MAX_LL_ITEMS_6x00, | ||
786 | .shadow_ram_support = true, | ||
787 | .led_compensation = 51, | ||
788 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, | ||
789 | .supports_idle = true, | ||
790 | .adv_thermal_throttle = true, | ||
791 | .support_ct_kill_exit = true, | ||
792 | .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, | ||
793 | .chain_noise_scale = 1000, | ||
794 | .monitor_recover_period = IWL_DEF_MONITORING_PERIOD, | ||
795 | .max_event_log_size = 1024, | ||
796 | .ucode_tracing = true, | ||
797 | .sensitivity_calib_by_driver = true, | ||
798 | .chain_noise_calib_by_driver = true, | ||
799 | }; | 578 | }; |
800 | 579 | ||
580 | #define IWL_DEVICE_6050 \ | ||
581 | .fw_name_pre = IWL6050_FW_PRE, \ | ||
582 | .ucode_api_max = IWL6050_UCODE_API_MAX, \ | ||
583 | .ucode_api_min = IWL6050_UCODE_API_MIN, \ | ||
584 | .valid_tx_ant = ANT_AB, /* .cfg overwrite */ \ | ||
585 | .valid_rx_ant = ANT_AB, /* .cfg overwrite */ \ | ||
586 | .ops = &iwl6050_ops, \ | ||
587 | .eeprom_ver = EEPROM_6050_EEPROM_VERSION, \ | ||
588 | .eeprom_calib_ver = EEPROM_6050_TX_POWER_VERSION, \ | ||
589 | .base_params = &iwl6050_base_params, \ | ||
590 | .need_dc_calib = true, \ | ||
591 | .led_mode = IWL_LED_BLINK, \ | ||
592 | .internal_wimax_coex = true | ||
593 | |||
801 | struct iwl_cfg iwl6050_2agn_cfg = { | 594 | struct iwl_cfg iwl6050_2agn_cfg = { |
802 | .name = "Intel(R) Centrino(R) Advanced-N + WiMAX 6250 AGN", | 595 | .name = "Intel(R) Centrino(R) Advanced-N + WiMAX 6250 AGN", |
803 | .fw_name_pre = IWL6050_FW_PRE, | 596 | IWL_DEVICE_6050, |
804 | .ucode_api_max = IWL6050_UCODE_API_MAX, | 597 | .ht_params = &iwl6000_ht_params, |
805 | .ucode_api_min = IWL6050_UCODE_API_MIN, | ||
806 | .sku = IWL_SKU_A|IWL_SKU_G|IWL_SKU_N, | ||
807 | .ops = &iwl6000_ops, | ||
808 | .eeprom_size = OTP_LOW_IMAGE_SIZE, | ||
809 | .eeprom_ver = EEPROM_6050_EEPROM_VERSION, | ||
810 | .eeprom_calib_ver = EEPROM_6050_TX_POWER_VERSION, | ||
811 | .num_of_queues = IWLAGN_NUM_QUEUES, | ||
812 | .num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES, | ||
813 | .mod_params = &iwlagn_mod_params, | ||
814 | .valid_tx_ant = ANT_AB, | ||
815 | .valid_rx_ant = ANT_AB, | ||
816 | .pll_cfg_val = 0, | ||
817 | .set_l0s = true, | ||
818 | .use_bsm = false, | ||
819 | .pa_type = IWL_PA_SYSTEM, | ||
820 | .max_ll_items = OTP_MAX_LL_ITEMS_6x50, | ||
821 | .shadow_ram_support = true, | ||
822 | .ht_greenfield_support = true, | ||
823 | .led_compensation = 51, | ||
824 | .use_rts_for_aggregation = true, /* use rts/cts protection */ | ||
825 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, | ||
826 | .supports_idle = true, | ||
827 | .adv_thermal_throttle = true, | ||
828 | .support_ct_kill_exit = true, | ||
829 | .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, | ||
830 | .chain_noise_scale = 1500, | ||
831 | .monitor_recover_period = IWL_DEF_MONITORING_PERIOD, | ||
832 | .max_event_log_size = 1024, | ||
833 | .ucode_tracing = true, | ||
834 | .sensitivity_calib_by_driver = true, | ||
835 | .chain_noise_calib_by_driver = true, | ||
836 | .need_dc_calib = true, | ||
837 | }; | ||
838 | |||
839 | struct iwl_cfg iwl6050g2_bgn_cfg = { | ||
840 | .name = "6050 Series 1x2 BGN Gen2", | ||
841 | .fw_name_pre = IWL6050_FW_PRE, | ||
842 | .ucode_api_max = IWL6050_UCODE_API_MAX, | ||
843 | .ucode_api_min = IWL6050_UCODE_API_MIN, | ||
844 | .sku = IWL_SKU_G|IWL_SKU_N, | ||
845 | .ops = &iwl6000_ops, | ||
846 | .eeprom_size = OTP_LOW_IMAGE_SIZE, | ||
847 | .eeprom_ver = EEPROM_6050G2_EEPROM_VERSION, | ||
848 | .eeprom_calib_ver = EEPROM_6050G2_TX_POWER_VERSION, | ||
849 | .num_of_queues = IWLAGN_NUM_QUEUES, | ||
850 | .num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES, | ||
851 | .mod_params = &iwlagn_mod_params, | ||
852 | .valid_tx_ant = ANT_A, | ||
853 | .valid_rx_ant = ANT_AB, | ||
854 | .pll_cfg_val = 0, | ||
855 | .set_l0s = true, | ||
856 | .use_bsm = false, | ||
857 | .pa_type = IWL_PA_SYSTEM, | ||
858 | .max_ll_items = OTP_MAX_LL_ITEMS_6x50, | ||
859 | .shadow_ram_support = true, | ||
860 | .ht_greenfield_support = true, | ||
861 | .led_compensation = 51, | ||
862 | .use_rts_for_aggregation = true, /* use rts/cts protection */ | ||
863 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, | ||
864 | .supports_idle = true, | ||
865 | .adv_thermal_throttle = true, | ||
866 | .support_ct_kill_exit = true, | ||
867 | .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, | ||
868 | .chain_noise_scale = 1500, | ||
869 | .monitor_recover_period = IWL_DEF_MONITORING_PERIOD, | ||
870 | .max_event_log_size = 1024, | ||
871 | .ucode_tracing = true, | ||
872 | .sensitivity_calib_by_driver = true, | ||
873 | .chain_noise_calib_by_driver = true, | ||
874 | .need_dc_calib = true, | ||
875 | }; | 598 | }; |
876 | 599 | ||
877 | struct iwl_cfg iwl6050_2abg_cfg = { | 600 | struct iwl_cfg iwl6050_2abg_cfg = { |
878 | .name = "Intel(R) Centrino(R) Advanced-N + WiMAX 6250 ABG", | 601 | .name = "Intel(R) Centrino(R) Advanced-N + WiMAX 6250 ABG", |
879 | .fw_name_pre = IWL6050_FW_PRE, | 602 | IWL_DEVICE_6050, |
880 | .ucode_api_max = IWL6050_UCODE_API_MAX, | 603 | }; |
881 | .ucode_api_min = IWL6050_UCODE_API_MIN, | 604 | |
882 | .sku = IWL_SKU_A|IWL_SKU_G, | 605 | #define IWL_DEVICE_6150 \ |
883 | .ops = &iwl6000_ops, | 606 | .fw_name_pre = IWL6050_FW_PRE, \ |
884 | .eeprom_size = OTP_LOW_IMAGE_SIZE, | 607 | .ucode_api_max = IWL6050_UCODE_API_MAX, \ |
885 | .eeprom_ver = EEPROM_6050_EEPROM_VERSION, | 608 | .ucode_api_min = IWL6050_UCODE_API_MIN, \ |
886 | .eeprom_calib_ver = EEPROM_6050_TX_POWER_VERSION, | 609 | .ops = &iwl6150_ops, \ |
887 | .num_of_queues = IWLAGN_NUM_QUEUES, | 610 | .eeprom_ver = EEPROM_6150_EEPROM_VERSION, \ |
888 | .num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES, | 611 | .eeprom_calib_ver = EEPROM_6150_TX_POWER_VERSION, \ |
889 | .mod_params = &iwlagn_mod_params, | 612 | .base_params = &iwl6050_base_params, \ |
890 | .valid_tx_ant = ANT_AB, | 613 | .need_dc_calib = true, \ |
891 | .valid_rx_ant = ANT_AB, | 614 | .led_mode = IWL_LED_BLINK, \ |
892 | .pll_cfg_val = 0, | 615 | .internal_wimax_coex = true |
893 | .set_l0s = true, | 616 | |
894 | .use_bsm = false, | 617 | struct iwl_cfg iwl6150_bgn_cfg = { |
895 | .pa_type = IWL_PA_SYSTEM, | 618 | .name = "Intel(R) Centrino(R) Wireless-N + WiMAX 6150 BGN", |
896 | .max_ll_items = OTP_MAX_LL_ITEMS_6x50, | 619 | IWL_DEVICE_6150, |
897 | .shadow_ram_support = true, | 620 | .ht_params = &iwl6000_ht_params, |
898 | .led_compensation = 51, | 621 | }; |
899 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, | 622 | |
900 | .supports_idle = true, | 623 | struct iwl_cfg iwl6150_bg_cfg = { |
901 | .adv_thermal_throttle = true, | 624 | .name = "Intel(R) Centrino(R) Wireless-N + WiMAX 6150 BG", |
902 | .support_ct_kill_exit = true, | 625 | IWL_DEVICE_6150, |
903 | .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, | ||
904 | .chain_noise_scale = 1500, | ||
905 | .monitor_recover_period = IWL_DEF_MONITORING_PERIOD, | ||
906 | .max_event_log_size = 1024, | ||
907 | .ucode_tracing = true, | ||
908 | .sensitivity_calib_by_driver = true, | ||
909 | .chain_noise_calib_by_driver = true, | ||
910 | .need_dc_calib = true, | ||
911 | }; | 626 | }; |
912 | 627 | ||
913 | struct iwl_cfg iwl6000_3agn_cfg = { | 628 | struct iwl_cfg iwl6000_3agn_cfg = { |
@@ -915,39 +630,16 @@ struct iwl_cfg iwl6000_3agn_cfg = { | |||
915 | .fw_name_pre = IWL6000_FW_PRE, | 630 | .fw_name_pre = IWL6000_FW_PRE, |
916 | .ucode_api_max = IWL6000_UCODE_API_MAX, | 631 | .ucode_api_max = IWL6000_UCODE_API_MAX, |
917 | .ucode_api_min = IWL6000_UCODE_API_MIN, | 632 | .ucode_api_min = IWL6000_UCODE_API_MIN, |
918 | .sku = IWL_SKU_A|IWL_SKU_G|IWL_SKU_N, | ||
919 | .ops = &iwl6000_ops, | ||
920 | .eeprom_size = OTP_LOW_IMAGE_SIZE, | ||
921 | .eeprom_ver = EEPROM_6000_EEPROM_VERSION, | 633 | .eeprom_ver = EEPROM_6000_EEPROM_VERSION, |
922 | .eeprom_calib_ver = EEPROM_6000_TX_POWER_VERSION, | 634 | .eeprom_calib_ver = EEPROM_6000_TX_POWER_VERSION, |
923 | .num_of_queues = IWLAGN_NUM_QUEUES, | 635 | .ops = &iwl6000_ops, |
924 | .num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES, | 636 | .base_params = &iwl6000_base_params, |
925 | .mod_params = &iwlagn_mod_params, | 637 | .ht_params = &iwl6000_ht_params, |
926 | .valid_tx_ant = ANT_ABC, | 638 | .need_dc_calib = true, |
927 | .valid_rx_ant = ANT_ABC, | 639 | .led_mode = IWL_LED_BLINK, |
928 | .pll_cfg_val = 0, | ||
929 | .set_l0s = true, | ||
930 | .use_bsm = false, | ||
931 | .pa_type = IWL_PA_SYSTEM, | ||
932 | .max_ll_items = OTP_MAX_LL_ITEMS_6x00, | ||
933 | .shadow_ram_support = true, | ||
934 | .ht_greenfield_support = true, | ||
935 | .led_compensation = 51, | ||
936 | .use_rts_for_aggregation = true, /* use rts/cts protection */ | ||
937 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, | ||
938 | .supports_idle = true, | ||
939 | .adv_thermal_throttle = true, | ||
940 | .support_ct_kill_exit = true, | ||
941 | .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, | ||
942 | .chain_noise_scale = 1000, | ||
943 | .monitor_recover_period = IWL_DEF_MONITORING_PERIOD, | ||
944 | .max_event_log_size = 1024, | ||
945 | .ucode_tracing = true, | ||
946 | .sensitivity_calib_by_driver = true, | ||
947 | .chain_noise_calib_by_driver = true, | ||
948 | }; | 640 | }; |
949 | 641 | ||
950 | MODULE_FIRMWARE(IWL6000_MODULE_FIRMWARE(IWL6000_UCODE_API_MAX)); | 642 | MODULE_FIRMWARE(IWL6000_MODULE_FIRMWARE(IWL6000_UCODE_API_MAX)); |
951 | MODULE_FIRMWARE(IWL6050_MODULE_FIRMWARE(IWL6050_UCODE_API_MAX)); | 643 | MODULE_FIRMWARE(IWL6050_MODULE_FIRMWARE(IWL6050_UCODE_API_MAX)); |
952 | MODULE_FIRMWARE(IWL6000G2A_MODULE_FIRMWARE(IWL6000G2_UCODE_API_MAX)); | 644 | MODULE_FIRMWARE(IWL6005_MODULE_FIRMWARE(IWL6000G2_UCODE_API_MAX)); |
953 | MODULE_FIRMWARE(IWL6000G2B_MODULE_FIRMWARE(IWL6000G2_UCODE_API_MAX)); | 645 | MODULE_FIRMWARE(IWL6030_MODULE_FIRMWARE(IWL6000G2_UCODE_API_MAX)); |