5f6dbd9561d7d738270bdc5caa49eec29e5518b4
[linux-2.6.git] / drivers / net / wireless / iwlwifi / iwl-6000.c
1 /******************************************************************************
2  *
3  * Copyright(c) 2008 - 2010 Intel Corporation. All rights reserved.
4  *
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
7  * published by the Free Software Foundation.
8  *
9  * This program is distributed in the hope that it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
12  * more details.
13  *
14  * You should have received a copy of the GNU General Public License along with
15  * this program; if not, write to the Free Software Foundation, Inc.,
16  * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
17  *
18  * The full GNU General Public License is included in this distribution in the
19  * file called LICENSE.
20  *
21  * Contact Information:
22  *  Intel Linux Wireless <ilw@linux.intel.com>
23  * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
24  *
25  *****************************************************************************/
26
27 #include <linux/kernel.h>
28 #include <linux/module.h>
29 #include <linux/init.h>
30 #include <linux/pci.h>
31 #include <linux/dma-mapping.h>
32 #include <linux/delay.h>
33 #include <linux/skbuff.h>
34 #include <linux/netdevice.h>
35 #include <linux/wireless.h>
36 #include <net/mac80211.h>
37 #include <linux/etherdevice.h>
38 #include <asm/unaligned.h>
39
40 #include "iwl-eeprom.h"
41 #include "iwl-dev.h"
42 #include "iwl-core.h"
43 #include "iwl-io.h"
44 #include "iwl-sta.h"
45 #include "iwl-agn.h"
46 #include "iwl-helpers.h"
47 #include "iwl-agn-hw.h"
48 #include "iwl-6000-hw.h"
49 #include "iwl-agn-led.h"
50 #include "iwl-agn-debugfs.h"
51
52 /* Highest firmware API version supported */
53 #define IWL6000_UCODE_API_MAX 4
54 #define IWL6050_UCODE_API_MAX 4
55 #define IWL6000G2_UCODE_API_MAX 4
56
57 /* Lowest firmware API version supported */
58 #define IWL6000_UCODE_API_MIN 4
59 #define IWL6050_UCODE_API_MIN 4
60 #define IWL6000G2_UCODE_API_MIN 4
61
62 #define IWL6000_FW_PRE "iwlwifi-6000-"
63 #define _IWL6000_MODULE_FIRMWARE(api) IWL6000_FW_PRE #api ".ucode"
64 #define IWL6000_MODULE_FIRMWARE(api) _IWL6000_MODULE_FIRMWARE(api)
65
66 #define IWL6050_FW_PRE "iwlwifi-6050-"
67 #define _IWL6050_MODULE_FIRMWARE(api) IWL6050_FW_PRE #api ".ucode"
68 #define IWL6050_MODULE_FIRMWARE(api) _IWL6050_MODULE_FIRMWARE(api)
69
70 #define IWL6000G2A_FW_PRE "iwlwifi-6000g2a-"
71 #define _IWL6000G2A_MODULE_FIRMWARE(api) IWL6000G2A_FW_PRE #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
78
79 static void iwl6000_set_ct_threshold(struct iwl_priv *priv)
80 {
81         /* want Celsius */
82         priv->hw_params.ct_kill_threshold = CT_KILL_THRESHOLD;
83         priv->hw_params.ct_kill_exit_threshold = CT_KILL_EXIT_THRESHOLD;
84 }
85
86 /* Indicate calibration version to uCode. */
87 static void iwl6050_set_calib_version(struct iwl_priv *priv)
88 {
89         if (priv->cfg->ops->lib->eeprom_ops.calib_version(priv) >= 6)
90                 iwl_set_bit(priv, CSR_GP_DRIVER_REG,
91                                 CSR_GP_DRIVER_REG_BIT_CALIB_VERSION6);
92 }
93
94 /* NIC configuration for 6000 series */
95 static void iwl6000_nic_config(struct iwl_priv *priv)
96 {
97         u16 radio_cfg;
98
99         radio_cfg = iwl_eeprom_query16(priv, EEPROM_RADIO_CONFIG);
100
101         /* write radio config values to register */
102         if (EEPROM_RF_CFG_TYPE_MSK(radio_cfg) <= EEPROM_RF_CONFIG_TYPE_MAX)
103                 iwl_set_bit(priv, CSR_HW_IF_CONFIG_REG,
104                             EEPROM_RF_CFG_TYPE_MSK(radio_cfg) |
105                             EEPROM_RF_CFG_STEP_MSK(radio_cfg) |
106                             EEPROM_RF_CFG_DASH_MSK(radio_cfg));
107
108         /* set CSR_HW_CONFIG_REG for uCode use */
109         iwl_set_bit(priv, CSR_HW_IF_CONFIG_REG,
110                     CSR_HW_IF_CONFIG_REG_BIT_RADIO_SI |
111                     CSR_HW_IF_CONFIG_REG_BIT_MAC_SI);
112
113         /* no locking required for register write */
114         if (priv->cfg->pa_type == IWL_PA_INTERNAL) {
115                 /* 2x2 IPA phy type */
116                 iwl_write32(priv, CSR_GP_DRIVER_REG,
117                              CSR_GP_DRIVER_REG_BIT_RADIO_SKU_2x2_IPA);
118         }
119         /* else do nothing, uCode configured */
120         if (priv->cfg->ops->lib->temp_ops.set_calib_version)
121                 priv->cfg->ops->lib->temp_ops.set_calib_version(priv);
122 }
123
124 static struct iwl_sensitivity_ranges iwl6000_sensitivity = {
125         .min_nrg_cck = 97,
126         .max_nrg_cck = 0, /* not used, set to 0 */
127         .auto_corr_min_ofdm = 80,
128         .auto_corr_min_ofdm_mrc = 128,
129         .auto_corr_min_ofdm_x1 = 105,
130         .auto_corr_min_ofdm_mrc_x1 = 192,
131
132         .auto_corr_max_ofdm = 145,
133         .auto_corr_max_ofdm_mrc = 232,
134         .auto_corr_max_ofdm_x1 = 110,
135         .auto_corr_max_ofdm_mrc_x1 = 232,
136
137         .auto_corr_min_cck = 125,
138         .auto_corr_max_cck = 175,
139         .auto_corr_min_cck_mrc = 160,
140         .auto_corr_max_cck_mrc = 310,
141         .nrg_th_cck = 97,
142         .nrg_th_ofdm = 100,
143
144         .barker_corr_th_min = 190,
145         .barker_corr_th_min_mrc = 390,
146         .nrg_th_cca = 62,
147 };
148
149 static int iwl6000_hw_set_hw_params(struct iwl_priv *priv)
150 {
151         if (priv->cfg->mod_params->num_of_queues >= IWL_MIN_NUM_QUEUES &&
152             priv->cfg->mod_params->num_of_queues <= IWLAGN_NUM_QUEUES)
153                 priv->cfg->num_of_queues =
154                         priv->cfg->mod_params->num_of_queues;
155
156         priv->hw_params.max_txq_num = priv->cfg->num_of_queues;
157         priv->hw_params.dma_chnl_num = FH50_TCSR_CHNL_NUM;
158         priv->hw_params.scd_bc_tbls_size =
159                         priv->cfg->num_of_queues *
160                         sizeof(struct iwlagn_scd_bc_tbl);
161         priv->hw_params.tfd_size = sizeof(struct iwl_tfd);
162         priv->hw_params.max_stations = IWL5000_STATION_COUNT;
163         priv->hw_params.bcast_sta_id = IWL5000_BROADCAST_ID;
164
165         priv->hw_params.max_data_size = IWL60_RTC_DATA_SIZE;
166         priv->hw_params.max_inst_size = IWL60_RTC_INST_SIZE;
167
168         priv->hw_params.max_bsm_size = 0;
169         priv->hw_params.ht40_channel =  BIT(IEEE80211_BAND_2GHZ) |
170                                         BIT(IEEE80211_BAND_5GHZ);
171         priv->hw_params.rx_wrt_ptr_reg = FH_RSCSR_CHNL0_WPTR;
172
173         priv->hw_params.tx_chains_num = num_of_ant(priv->cfg->valid_tx_ant);
174         priv->hw_params.rx_chains_num = num_of_ant(priv->cfg->valid_rx_ant);
175         priv->hw_params.valid_tx_ant = priv->cfg->valid_tx_ant;
176         priv->hw_params.valid_rx_ant = priv->cfg->valid_rx_ant;
177
178         if (priv->cfg->ops->lib->temp_ops.set_ct_kill)
179                 priv->cfg->ops->lib->temp_ops.set_ct_kill(priv);
180
181         /* Set initial sensitivity parameters */
182         /* Set initial calibration set */
183         priv->hw_params.sens = &iwl6000_sensitivity;
184         priv->hw_params.calib_init_cfg =
185                 BIT(IWL_CALIB_XTAL)             |
186                 BIT(IWL_CALIB_LO)               |
187                 BIT(IWL_CALIB_TX_IQ)            |
188                 BIT(IWL_CALIB_BASE_BAND);
189
190         priv->hw_params.beacon_time_tsf_bits = IWLAGN_EXT_BEACON_TIME_POS;
191
192         return 0;
193 }
194
195 static int iwl6050_hw_set_hw_params(struct iwl_priv *priv)
196 {
197         if (priv->cfg->mod_params->num_of_queues >= IWL_MIN_NUM_QUEUES &&
198             priv->cfg->mod_params->num_of_queues <= IWLAGN_NUM_QUEUES)
199                 priv->cfg->num_of_queues =
200                         priv->cfg->mod_params->num_of_queues;
201
202         priv->hw_params.max_txq_num = priv->cfg->num_of_queues;
203         priv->hw_params.dma_chnl_num = FH50_TCSR_CHNL_NUM;
204         priv->hw_params.scd_bc_tbls_size =
205                         priv->cfg->num_of_queues *
206                         sizeof(struct iwlagn_scd_bc_tbl);
207         priv->hw_params.tfd_size = sizeof(struct iwl_tfd);
208         priv->hw_params.max_stations = IWL5000_STATION_COUNT;
209         priv->hw_params.bcast_sta_id = IWL5000_BROADCAST_ID;
210
211         priv->hw_params.max_data_size = IWL60_RTC_DATA_SIZE;
212         priv->hw_params.max_inst_size = IWL60_RTC_INST_SIZE;
213
214         priv->hw_params.max_bsm_size = 0;
215         priv->hw_params.ht40_channel =  BIT(IEEE80211_BAND_2GHZ) |
216                                         BIT(IEEE80211_BAND_5GHZ);
217         priv->hw_params.rx_wrt_ptr_reg = FH_RSCSR_CHNL0_WPTR;
218
219         priv->hw_params.tx_chains_num = num_of_ant(priv->cfg->valid_tx_ant);
220         priv->hw_params.rx_chains_num = num_of_ant(priv->cfg->valid_rx_ant);
221         priv->hw_params.valid_tx_ant = priv->cfg->valid_tx_ant;
222         priv->hw_params.valid_rx_ant = priv->cfg->valid_rx_ant;
223
224         if (priv->cfg->ops->lib->temp_ops.set_ct_kill)
225                 priv->cfg->ops->lib->temp_ops.set_ct_kill(priv);
226
227         /* Set initial sensitivity parameters */
228         /* Set initial calibration set */
229         priv->hw_params.sens = &iwl6000_sensitivity;
230         priv->hw_params.calib_init_cfg =
231                 BIT(IWL_CALIB_XTAL)             |
232                 BIT(IWL_CALIB_DC)               |
233                 BIT(IWL_CALIB_LO)               |
234                 BIT(IWL_CALIB_TX_IQ)            |
235                 BIT(IWL_CALIB_BASE_BAND);
236
237         priv->hw_params.beacon_time_tsf_bits = IWLAGN_EXT_BEACON_TIME_POS;
238
239         return 0;
240 }
241
242 static int iwl6000_hw_channel_switch(struct iwl_priv *priv, u16 channel)
243 {
244         struct iwl6000_channel_switch_cmd cmd;
245         const struct iwl_channel_info *ch_info;
246         struct iwl_host_cmd hcmd = {
247                 .id = REPLY_CHANNEL_SWITCH,
248                 .len = sizeof(cmd),
249                 .flags = CMD_SIZE_HUGE,
250                 .data = &cmd,
251         };
252
253         IWL_DEBUG_11H(priv, "channel switch from %d to %d\n",
254                 priv->active_rxon.channel, channel);
255
256         cmd.band = priv->band == IEEE80211_BAND_2GHZ;
257         cmd.channel = cpu_to_le16(channel);
258         cmd.rxon_flags = priv->staging_rxon.flags;
259         cmd.rxon_filter_flags = priv->staging_rxon.filter_flags;
260         cmd.switch_time = cpu_to_le32(priv->ucode_beacon_time);
261         ch_info = iwl_get_channel_info(priv, priv->band, channel);
262         if (ch_info)
263                 cmd.expect_beacon = is_channel_radar(ch_info);
264         else {
265                 IWL_ERR(priv, "invalid channel switch from %u to %u\n",
266                         priv->active_rxon.channel, channel);
267                 return -EFAULT;
268         }
269         priv->switch_rxon.channel = cpu_to_le16(channel);
270         priv->switch_rxon.switch_in_progress = true;
271
272         return iwl_send_cmd_sync(priv, &hcmd);
273 }
274
275 static struct iwl_lib_ops iwl6000_lib = {
276         .set_hw_params = iwl6000_hw_set_hw_params,
277         .txq_update_byte_cnt_tbl = iwlagn_txq_update_byte_cnt_tbl,
278         .txq_inval_byte_cnt_tbl = iwlagn_txq_inval_byte_cnt_tbl,
279         .txq_set_sched = iwlagn_txq_set_sched,
280         .txq_agg_enable = iwlagn_txq_agg_enable,
281         .txq_agg_disable = iwlagn_txq_agg_disable,
282         .txq_attach_buf_to_tfd = iwl_hw_txq_attach_buf_to_tfd,
283         .txq_free_tfd = iwl_hw_txq_free_tfd,
284         .txq_init = iwl_hw_tx_queue_init,
285         .rx_handler_setup = iwlagn_rx_handler_setup,
286         .setup_deferred_work = iwlagn_setup_deferred_work,
287         .is_valid_rtc_data_addr = iwlagn_hw_valid_rtc_data_addr,
288         .load_ucode = iwlagn_load_ucode,
289         .dump_nic_event_log = iwl_dump_nic_event_log,
290         .dump_nic_error_log = iwl_dump_nic_error_log,
291         .dump_csr = iwl_dump_csr,
292         .dump_fh = iwl_dump_fh,
293         .init_alive_start = iwlagn_init_alive_start,
294         .alive_notify = iwlagn_alive_notify,
295         .send_tx_power = iwlagn_send_tx_power,
296         .update_chain_flags = iwl_update_chain_flags,
297         .set_channel_switch = iwl6000_hw_channel_switch,
298         .apm_ops = {
299                 .init = iwl_apm_init,
300                 .stop = iwl_apm_stop,
301                 .config = iwl6000_nic_config,
302                 .set_pwr_src = iwl_set_pwr_src,
303         },
304         .eeprom_ops = {
305                 .regulatory_bands = {
306                         EEPROM_REG_BAND_1_CHANNELS,
307                         EEPROM_REG_BAND_2_CHANNELS,
308                         EEPROM_REG_BAND_3_CHANNELS,
309                         EEPROM_REG_BAND_4_CHANNELS,
310                         EEPROM_REG_BAND_5_CHANNELS,
311                         EEPROM_6000_REG_BAND_24_HT40_CHANNELS,
312                         EEPROM_REG_BAND_52_HT40_CHANNELS
313                 },
314                 .verify_signature  = iwlcore_eeprom_verify_signature,
315                 .acquire_semaphore = iwlcore_eeprom_acquire_semaphore,
316                 .release_semaphore = iwlcore_eeprom_release_semaphore,
317                 .calib_version  = iwlagn_eeprom_calib_version,
318                 .query_addr = iwlagn_eeprom_query_addr,
319                 .update_enhanced_txpower = iwlcore_eeprom_enhanced_txpower,
320         },
321         .post_associate = iwl_post_associate,
322         .isr = iwl_isr_ict,
323         .config_ap = iwl_config_ap,
324         .temp_ops = {
325                 .temperature = iwlagn_temperature,
326                 .set_ct_kill = iwl6000_set_ct_threshold,
327          },
328         .manage_ibss_station = iwlagn_manage_ibss_station,
329         .debugfs_ops = {
330                 .rx_stats_read = iwl_ucode_rx_stats_read,
331                 .tx_stats_read = iwl_ucode_tx_stats_read,
332                 .general_stats_read = iwl_ucode_general_stats_read,
333         },
334         .recover_from_tx_stall = iwl_bg_monitor_recover,
335         .check_plcp_health = iwl_good_plcp_health,
336         .check_ack_health = iwl_good_ack_health,
337 };
338
339 static const struct iwl_ops iwl6000_ops = {
340         .lib = &iwl6000_lib,
341         .hcmd = &iwlagn_hcmd,
342         .utils = &iwlagn_hcmd_utils,
343         .led = &iwlagn_led_ops,
344 };
345
346 static void do_not_send_bt_config(struct iwl_priv *priv)
347 {
348 }
349
350 static struct iwl_hcmd_ops iwl6000g2b_hcmd = {
351         .rxon_assoc = iwlagn_send_rxon_assoc,
352         .commit_rxon = iwl_commit_rxon,
353         .set_rxon_chain = iwl_set_rxon_chain,
354         .set_tx_ant = iwlagn_send_tx_ant_config,
355         .send_bt_config = do_not_send_bt_config,
356 };
357
358 static const struct iwl_ops iwl6000g2b_ops = {
359         .lib = &iwl6000_lib,
360         .hcmd = &iwl6000g2b_hcmd,
361         .utils = &iwlagn_hcmd_utils,
362         .led = &iwlagn_led_ops,
363 };
364
365 static struct iwl_lib_ops iwl6050_lib = {
366         .set_hw_params = iwl6050_hw_set_hw_params,
367         .txq_update_byte_cnt_tbl = iwlagn_txq_update_byte_cnt_tbl,
368         .txq_inval_byte_cnt_tbl = iwlagn_txq_inval_byte_cnt_tbl,
369         .txq_set_sched = iwlagn_txq_set_sched,
370         .txq_agg_enable = iwlagn_txq_agg_enable,
371         .txq_agg_disable = iwlagn_txq_agg_disable,
372         .txq_attach_buf_to_tfd = iwl_hw_txq_attach_buf_to_tfd,
373         .txq_free_tfd = iwl_hw_txq_free_tfd,
374         .txq_init = iwl_hw_tx_queue_init,
375         .rx_handler_setup = iwlagn_rx_handler_setup,
376         .setup_deferred_work = iwlagn_setup_deferred_work,
377         .is_valid_rtc_data_addr = iwlagn_hw_valid_rtc_data_addr,
378         .load_ucode = iwlagn_load_ucode,
379         .dump_nic_event_log = iwl_dump_nic_event_log,
380         .dump_nic_error_log = iwl_dump_nic_error_log,
381         .dump_csr = iwl_dump_csr,
382         .dump_fh = iwl_dump_fh,
383         .init_alive_start = iwlagn_init_alive_start,
384         .alive_notify = iwlagn_alive_notify,
385         .send_tx_power = iwlagn_send_tx_power,
386         .update_chain_flags = iwl_update_chain_flags,
387         .set_channel_switch = iwl6000_hw_channel_switch,
388         .apm_ops = {
389                 .init = iwl_apm_init,
390                 .stop = iwl_apm_stop,
391                 .config = iwl6000_nic_config,
392                 .set_pwr_src = iwl_set_pwr_src,
393         },
394         .eeprom_ops = {
395                 .regulatory_bands = {
396                         EEPROM_REG_BAND_1_CHANNELS,
397                         EEPROM_REG_BAND_2_CHANNELS,
398                         EEPROM_REG_BAND_3_CHANNELS,
399                         EEPROM_REG_BAND_4_CHANNELS,
400                         EEPROM_REG_BAND_5_CHANNELS,
401                         EEPROM_6000_REG_BAND_24_HT40_CHANNELS,
402                         EEPROM_REG_BAND_52_HT40_CHANNELS
403                 },
404                 .verify_signature  = iwlcore_eeprom_verify_signature,
405                 .acquire_semaphore = iwlcore_eeprom_acquire_semaphore,
406                 .release_semaphore = iwlcore_eeprom_release_semaphore,
407                 .calib_version  = iwlagn_eeprom_calib_version,
408                 .query_addr = iwlagn_eeprom_query_addr,
409                 .update_enhanced_txpower = iwlcore_eeprom_enhanced_txpower,
410         },
411         .post_associate = iwl_post_associate,
412         .isr = iwl_isr_ict,
413         .config_ap = iwl_config_ap,
414         .temp_ops = {
415                 .temperature = iwlagn_temperature,
416                 .set_ct_kill = iwl6000_set_ct_threshold,
417                 .set_calib_version = iwl6050_set_calib_version,
418          },
419         .manage_ibss_station = iwlagn_manage_ibss_station,
420         .debugfs_ops = {
421                 .rx_stats_read = iwl_ucode_rx_stats_read,
422                 .tx_stats_read = iwl_ucode_tx_stats_read,
423                 .general_stats_read = iwl_ucode_general_stats_read,
424         },
425         .recover_from_tx_stall = iwl_bg_monitor_recover,
426         .check_plcp_health = iwl_good_plcp_health,
427         .check_ack_health = iwl_good_ack_health,
428 };
429
430 static const struct iwl_ops iwl6050_ops = {
431         .lib = &iwl6050_lib,
432         .hcmd = &iwlagn_hcmd,
433         .utils = &iwlagn_hcmd_utils,
434         .led = &iwlagn_led_ops,
435 };
436
437
438 struct iwl_cfg iwl6000g2a_2agn_cfg = {
439         .name = "6000 Series 2x2 AGN Gen2a",
440         .fw_name_pre = IWL6000G2A_FW_PRE,
441         .ucode_api_max = IWL6000G2_UCODE_API_MAX,
442         .ucode_api_min = IWL6000G2_UCODE_API_MIN,
443         .sku = IWL_SKU_A|IWL_SKU_G|IWL_SKU_N,
444         .ops = &iwl6000_ops,
445         .eeprom_size = OTP_LOW_IMAGE_SIZE,
446         .eeprom_ver = EEPROM_6000G2_EEPROM_VERSION,
447         .eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION,
448         .num_of_queues = IWLAGN_NUM_QUEUES,
449         .num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES,
450         .mod_params = &iwlagn_mod_params,
451         .valid_tx_ant = ANT_AB,
452         .valid_rx_ant = ANT_AB,
453         .pll_cfg_val = 0,
454         .set_l0s = true,
455         .use_bsm = false,
456         .pa_type = IWL_PA_SYSTEM,
457         .max_ll_items = OTP_MAX_LL_ITEMS_6x00,
458         .shadow_ram_support = true,
459         .ht_greenfield_support = true,
460         .led_compensation = 51,
461         .use_rts_for_ht = true, /* use rts/cts protection */
462         .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
463         .supports_idle = true,
464         .adv_thermal_throttle = true,
465         .support_ct_kill_exit = true,
466         .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
467         .chain_noise_scale = 1000,
468         .monitor_recover_period = IWL_MONITORING_PERIOD,
469         .max_event_log_size = 512,
470         .ucode_tracing = true,
471         .sensitivity_calib_by_driver = true,
472         .chain_noise_calib_by_driver = true,
473 };
474
475 struct iwl_cfg iwl6000g2a_2abg_cfg = {
476         .name = "6000 Series 2x2 ABG Gen2a",
477         .fw_name_pre = IWL6000G2A_FW_PRE,
478         .ucode_api_max = IWL6000G2_UCODE_API_MAX,
479         .ucode_api_min = IWL6000G2_UCODE_API_MIN,
480         .sku = IWL_SKU_A|IWL_SKU_G,
481         .ops = &iwl6000_ops,
482         .eeprom_size = OTP_LOW_IMAGE_SIZE,
483         .eeprom_ver = EEPROM_6000G2_EEPROM_VERSION,
484         .eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION,
485         .num_of_queues = IWLAGN_NUM_QUEUES,
486         .num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES,
487         .mod_params = &iwlagn_mod_params,
488         .valid_tx_ant = ANT_AB,
489         .valid_rx_ant = ANT_AB,
490         .pll_cfg_val = 0,
491         .set_l0s = true,
492         .use_bsm = false,
493         .pa_type = IWL_PA_SYSTEM,
494         .max_ll_items = OTP_MAX_LL_ITEMS_6x00,
495         .shadow_ram_support = true,
496         .led_compensation = 51,
497         .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
498         .supports_idle = true,
499         .adv_thermal_throttle = true,
500         .support_ct_kill_exit = true,
501         .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
502         .chain_noise_scale = 1000,
503         .monitor_recover_period = IWL_MONITORING_PERIOD,
504         .max_event_log_size = 512,
505 };
506
507 struct iwl_cfg iwl6000g2a_2bg_cfg = {
508         .name = "6000 Series 2x2 BG Gen2a",
509         .fw_name_pre = IWL6000G2A_FW_PRE,
510         .ucode_api_max = IWL6000G2_UCODE_API_MAX,
511         .ucode_api_min = IWL6000G2_UCODE_API_MIN,
512         .sku = IWL_SKU_G,
513         .ops = &iwl6000_ops,
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_MONITORING_PERIOD,
536         .max_event_log_size = 512,
537 };
538
539 struct iwl_cfg iwl6000g2b_2agn_cfg = {
540         .name = "6000 Series 2x2 AGN Gen2b",
541         .fw_name_pre = IWL6000G2B_FW_PRE,
542         .ucode_api_max = IWL6000G2_UCODE_API_MAX,
543         .ucode_api_min = IWL6000G2_UCODE_API_MIN,
544         .sku = IWL_SKU_A|IWL_SKU_G|IWL_SKU_N,
545         .ops = &iwl6000g2b_ops,
546         .eeprom_size = OTP_LOW_IMAGE_SIZE,
547         .eeprom_ver = EEPROM_6000G2_EEPROM_VERSION,
548         .eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION,
549         .num_of_queues = IWLAGN_NUM_QUEUES,
550         .num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES,
551         .mod_params = &iwlagn_mod_params,
552         .valid_tx_ant = ANT_AB,
553         .valid_rx_ant = ANT_AB,
554         .pll_cfg_val = 0,
555         .set_l0s = true,
556         .use_bsm = false,
557         .pa_type = IWL_PA_SYSTEM,
558         .max_ll_items = OTP_MAX_LL_ITEMS_6x00,
559         .shadow_ram_support = true,
560         .ht_greenfield_support = true,
561         .led_compensation = 51,
562         .use_rts_for_ht = true, /* use rts/cts protection */
563         .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
564         .supports_idle = true,
565         .adv_thermal_throttle = true,
566         .support_ct_kill_exit = true,
567         .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
568         .chain_noise_scale = 1000,
569         .monitor_recover_period = IWL_MONITORING_PERIOD,
570         .max_event_log_size = 512,
571 };
572
573 struct iwl_cfg iwl6000g2b_2abg_cfg = {
574         .name = "6000 Series 2x2 ABG Gen2b",
575         .fw_name_pre = IWL6000G2B_FW_PRE,
576         .ucode_api_max = IWL6000G2_UCODE_API_MAX,
577         .ucode_api_min = IWL6000G2_UCODE_API_MIN,
578         .sku = IWL_SKU_A|IWL_SKU_G,
579         .ops = &iwl6000g2b_ops,
580         .eeprom_size = OTP_LOW_IMAGE_SIZE,
581         .eeprom_ver = EEPROM_6000G2_EEPROM_VERSION,
582         .eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION,
583         .num_of_queues = IWLAGN_NUM_QUEUES,
584         .num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES,
585         .mod_params = &iwlagn_mod_params,
586         .valid_tx_ant = ANT_AB,
587         .valid_rx_ant = ANT_AB,
588         .pll_cfg_val = 0,
589         .set_l0s = true,
590         .use_bsm = false,
591         .pa_type = IWL_PA_SYSTEM,
592         .max_ll_items = OTP_MAX_LL_ITEMS_6x00,
593         .shadow_ram_support = true,
594         .led_compensation = 51,
595         .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
596         .supports_idle = true,
597         .adv_thermal_throttle = true,
598         .support_ct_kill_exit = true,
599         .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
600         .chain_noise_scale = 1000,
601         .monitor_recover_period = IWL_MONITORING_PERIOD,
602         .max_event_log_size = 512,
603 };
604
605 struct iwl_cfg iwl6000g2b_2bgn_cfg = {
606         .name = "6000 Series 2x2 BGN Gen2b",
607         .fw_name_pre = IWL6000G2B_FW_PRE,
608         .ucode_api_max = IWL6000G2_UCODE_API_MAX,
609         .ucode_api_min = IWL6000G2_UCODE_API_MIN,
610         .sku = IWL_SKU_G|IWL_SKU_N,
611         .ops = &iwl6000g2b_ops,
612         .eeprom_size = OTP_LOW_IMAGE_SIZE,
613         .eeprom_ver = EEPROM_6000G2_EEPROM_VERSION,
614         .eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION,
615         .num_of_queues = IWLAGN_NUM_QUEUES,
616         .num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES,
617         .mod_params = &iwlagn_mod_params,
618         .valid_tx_ant = ANT_AB,
619         .valid_rx_ant = ANT_AB,
620         .pll_cfg_val = 0,
621         .set_l0s = true,
622         .use_bsm = false,
623         .pa_type = IWL_PA_SYSTEM,
624         .max_ll_items = OTP_MAX_LL_ITEMS_6x00,
625         .shadow_ram_support = true,
626         .ht_greenfield_support = true,
627         .led_compensation = 51,
628         .use_rts_for_ht = true, /* use rts/cts protection */
629         .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
630         .supports_idle = true,
631         .adv_thermal_throttle = true,
632         .support_ct_kill_exit = true,
633         .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
634         .chain_noise_scale = 1000,
635         .monitor_recover_period = IWL_MONITORING_PERIOD,
636         .max_event_log_size = 512,
637 };
638
639 struct iwl_cfg iwl6000g2b_2bg_cfg = {
640         .name = "6000 Series 2x2 BG Gen2b",
641         .fw_name_pre = IWL6000G2B_FW_PRE,
642         .ucode_api_max = IWL6000G2_UCODE_API_MAX,
643         .ucode_api_min = IWL6000G2_UCODE_API_MIN,
644         .sku = IWL_SKU_G,
645         .ops = &iwl6000g2b_ops,
646         .eeprom_size = OTP_LOW_IMAGE_SIZE,
647         .eeprom_ver = EEPROM_6000G2_EEPROM_VERSION,
648         .eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION,
649         .num_of_queues = IWLAGN_NUM_QUEUES,
650         .num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES,
651         .mod_params = &iwlagn_mod_params,
652         .valid_tx_ant = ANT_AB,
653         .valid_rx_ant = ANT_AB,
654         .pll_cfg_val = 0,
655         .set_l0s = true,
656         .use_bsm = false,
657         .pa_type = IWL_PA_SYSTEM,
658         .max_ll_items = OTP_MAX_LL_ITEMS_6x00,
659         .shadow_ram_support = true,
660         .led_compensation = 51,
661         .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
662         .supports_idle = true,
663         .adv_thermal_throttle = true,
664         .support_ct_kill_exit = true,
665         .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
666         .chain_noise_scale = 1000,
667         .monitor_recover_period = IWL_MONITORING_PERIOD,
668         .max_event_log_size = 512,
669 };
670
671 struct iwl_cfg iwl6000g2b_bgn_cfg = {
672         .name = "6000 Series 1x2 BGN Gen2b",
673         .fw_name_pre = IWL6000G2B_FW_PRE,
674         .ucode_api_max = IWL6000G2_UCODE_API_MAX,
675         .ucode_api_min = IWL6000G2_UCODE_API_MIN,
676         .sku = IWL_SKU_G|IWL_SKU_N,
677         .ops = &iwl6000g2b_ops,
678         .eeprom_size = OTP_LOW_IMAGE_SIZE,
679         .eeprom_ver = EEPROM_6000G2_EEPROM_VERSION,
680         .eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION,
681         .num_of_queues = IWLAGN_NUM_QUEUES,
682         .num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES,
683         .mod_params = &iwlagn_mod_params,
684         .valid_tx_ant = ANT_A,
685         .valid_rx_ant = ANT_AB,
686         .pll_cfg_val = 0,
687         .set_l0s = true,
688         .use_bsm = false,
689         .pa_type = IWL_PA_SYSTEM,
690         .max_ll_items = OTP_MAX_LL_ITEMS_6x00,
691         .shadow_ram_support = true,
692         .ht_greenfield_support = true,
693         .led_compensation = 51,
694         .use_rts_for_ht = true, /* use rts/cts protection */
695         .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
696         .supports_idle = true,
697         .adv_thermal_throttle = true,
698         .support_ct_kill_exit = true,
699         .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
700         .chain_noise_scale = 1000,
701         .monitor_recover_period = IWL_MONITORING_PERIOD,
702         .max_event_log_size = 512,
703 };
704
705 struct iwl_cfg iwl6000g2b_bg_cfg = {
706         .name = "6000 Series 1x2 BG Gen2b",
707         .fw_name_pre = IWL6000G2B_FW_PRE,
708         .ucode_api_max = IWL6000G2_UCODE_API_MAX,
709         .ucode_api_min = IWL6000G2_UCODE_API_MIN,
710         .sku = IWL_SKU_G,
711         .ops = &iwl6000g2b_ops,
712         .eeprom_size = OTP_LOW_IMAGE_SIZE,
713         .eeprom_ver = EEPROM_6000G2_EEPROM_VERSION,
714         .eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION,
715         .num_of_queues = IWLAGN_NUM_QUEUES,
716         .num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES,
717         .mod_params = &iwlagn_mod_params,
718         .valid_tx_ant = ANT_A,
719         .valid_rx_ant = ANT_AB,
720         .pll_cfg_val = 0,
721         .set_l0s = true,
722         .use_bsm = false,
723         .pa_type = IWL_PA_SYSTEM,
724         .max_ll_items = OTP_MAX_LL_ITEMS_6x00,
725         .shadow_ram_support = true,
726         .led_compensation = 51,
727         .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
728         .supports_idle = true,
729         .adv_thermal_throttle = true,
730         .support_ct_kill_exit = true,
731         .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
732         .chain_noise_scale = 1000,
733         .monitor_recover_period = IWL_MONITORING_PERIOD,
734         .max_event_log_size = 512,
735 };
736
737 /*
738  * "i": Internal configuration, use internal Power Amplifier
739  */
740 struct iwl_cfg iwl6000i_2agn_cfg = {
741         .name = "Intel(R) Centrino(R) Advanced-N 6200 AGN",
742         .fw_name_pre = IWL6000_FW_PRE,
743         .ucode_api_max = IWL6000_UCODE_API_MAX,
744         .ucode_api_min = IWL6000_UCODE_API_MIN,
745         .sku = IWL_SKU_A|IWL_SKU_G|IWL_SKU_N,
746         .ops = &iwl6000_ops,
747         .eeprom_size = OTP_LOW_IMAGE_SIZE,
748         .eeprom_ver = EEPROM_6000_EEPROM_VERSION,
749         .eeprom_calib_ver = EEPROM_6000_TX_POWER_VERSION,
750         .num_of_queues = IWLAGN_NUM_QUEUES,
751         .num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES,
752         .mod_params = &iwlagn_mod_params,
753         .valid_tx_ant = ANT_BC,
754         .valid_rx_ant = ANT_BC,
755         .pll_cfg_val = 0,
756         .set_l0s = true,
757         .use_bsm = false,
758         .pa_type = IWL_PA_INTERNAL,
759         .max_ll_items = OTP_MAX_LL_ITEMS_6x00,
760         .shadow_ram_support = true,
761         .ht_greenfield_support = true,
762         .led_compensation = 51,
763         .use_rts_for_ht = true, /* use rts/cts protection */
764         .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
765         .supports_idle = true,
766         .adv_thermal_throttle = true,
767         .support_ct_kill_exit = true,
768         .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
769         .chain_noise_scale = 1000,
770         .monitor_recover_period = IWL_MONITORING_PERIOD,
771         .max_event_log_size = 1024,
772         .ucode_tracing = true,
773         .sensitivity_calib_by_driver = true,
774         .chain_noise_calib_by_driver = true,
775 };
776
777 struct iwl_cfg iwl6000i_2abg_cfg = {
778         .name = "Intel(R) Centrino(R) Advanced-N 6200 ABG",
779         .fw_name_pre = IWL6000_FW_PRE,
780         .ucode_api_max = IWL6000_UCODE_API_MAX,
781         .ucode_api_min = IWL6000_UCODE_API_MIN,
782         .sku = IWL_SKU_A|IWL_SKU_G,
783         .ops = &iwl6000_ops,
784         .eeprom_size = OTP_LOW_IMAGE_SIZE,
785         .eeprom_ver = EEPROM_6000_EEPROM_VERSION,
786         .eeprom_calib_ver = EEPROM_6000_TX_POWER_VERSION,
787         .num_of_queues = IWLAGN_NUM_QUEUES,
788         .num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES,
789         .mod_params = &iwlagn_mod_params,
790         .valid_tx_ant = ANT_BC,
791         .valid_rx_ant = ANT_BC,
792         .pll_cfg_val = 0,
793         .set_l0s = true,
794         .use_bsm = false,
795         .pa_type = IWL_PA_INTERNAL,
796         .max_ll_items = OTP_MAX_LL_ITEMS_6x00,
797         .shadow_ram_support = true,
798         .led_compensation = 51,
799         .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
800         .supports_idle = true,
801         .adv_thermal_throttle = true,
802         .support_ct_kill_exit = true,
803         .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
804         .chain_noise_scale = 1000,
805         .monitor_recover_period = IWL_MONITORING_PERIOD,
806         .max_event_log_size = 1024,
807         .ucode_tracing = true,
808         .sensitivity_calib_by_driver = true,
809         .chain_noise_calib_by_driver = true,
810 };
811
812 struct iwl_cfg iwl6000i_2bg_cfg = {
813         .name = "Intel(R) Centrino(R) Advanced-N 6200 BG",
814         .fw_name_pre = IWL6000_FW_PRE,
815         .ucode_api_max = IWL6000_UCODE_API_MAX,
816         .ucode_api_min = IWL6000_UCODE_API_MIN,
817         .sku = IWL_SKU_G,
818         .ops = &iwl6000_ops,
819         .eeprom_size = OTP_LOW_IMAGE_SIZE,
820         .eeprom_ver = EEPROM_6000_EEPROM_VERSION,
821         .eeprom_calib_ver = EEPROM_6000_TX_POWER_VERSION,
822         .num_of_queues = IWLAGN_NUM_QUEUES,
823         .num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES,
824         .mod_params = &iwlagn_mod_params,
825         .valid_tx_ant = ANT_BC,
826         .valid_rx_ant = ANT_BC,
827         .pll_cfg_val = 0,
828         .set_l0s = true,
829         .use_bsm = false,
830         .pa_type = IWL_PA_INTERNAL,
831         .max_ll_items = OTP_MAX_LL_ITEMS_6x00,
832         .shadow_ram_support = true,
833         .led_compensation = 51,
834         .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
835         .supports_idle = true,
836         .adv_thermal_throttle = true,
837         .support_ct_kill_exit = true,
838         .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
839         .chain_noise_scale = 1000,
840         .monitor_recover_period = IWL_MONITORING_PERIOD,
841         .max_event_log_size = 1024,
842         .ucode_tracing = true,
843         .sensitivity_calib_by_driver = true,
844         .chain_noise_calib_by_driver = true,
845 };
846
847 struct iwl_cfg iwl6050_2agn_cfg = {
848         .name = "Intel(R) Centrino(R) Advanced-N + WiMAX 6250 AGN",
849         .fw_name_pre = IWL6050_FW_PRE,
850         .ucode_api_max = IWL6050_UCODE_API_MAX,
851         .ucode_api_min = IWL6050_UCODE_API_MIN,
852         .sku = IWL_SKU_A|IWL_SKU_G|IWL_SKU_N,
853         .ops = &iwl6050_ops,
854         .eeprom_size = OTP_LOW_IMAGE_SIZE,
855         .eeprom_ver = EEPROM_6050_EEPROM_VERSION,
856         .eeprom_calib_ver = EEPROM_6050_TX_POWER_VERSION,
857         .num_of_queues = IWLAGN_NUM_QUEUES,
858         .num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES,
859         .mod_params = &iwlagn_mod_params,
860         .valid_tx_ant = ANT_AB,
861         .valid_rx_ant = ANT_AB,
862         .pll_cfg_val = 0,
863         .set_l0s = true,
864         .use_bsm = false,
865         .pa_type = IWL_PA_SYSTEM,
866         .max_ll_items = OTP_MAX_LL_ITEMS_6x50,
867         .shadow_ram_support = true,
868         .ht_greenfield_support = true,
869         .led_compensation = 51,
870         .use_rts_for_ht = true, /* use rts/cts protection */
871         .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
872         .supports_idle = true,
873         .adv_thermal_throttle = true,
874         .support_ct_kill_exit = true,
875         .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
876         .chain_noise_scale = 1500,
877         .monitor_recover_period = IWL_MONITORING_PERIOD,
878         .max_event_log_size = 1024,
879         .ucode_tracing = true,
880         .sensitivity_calib_by_driver = true,
881         .chain_noise_calib_by_driver = true,
882 };
883
884 struct iwl_cfg iwl6050_2abg_cfg = {
885         .name = "Intel(R) Centrino(R) Advanced-N + WiMAX 6250 ABG",
886         .fw_name_pre = IWL6050_FW_PRE,
887         .ucode_api_max = IWL6050_UCODE_API_MAX,
888         .ucode_api_min = IWL6050_UCODE_API_MIN,
889         .sku = IWL_SKU_A|IWL_SKU_G,
890         .ops = &iwl6050_ops,
891         .eeprom_size = OTP_LOW_IMAGE_SIZE,
892         .eeprom_ver = EEPROM_6050_EEPROM_VERSION,
893         .eeprom_calib_ver = EEPROM_6050_TX_POWER_VERSION,
894         .num_of_queues = IWLAGN_NUM_QUEUES,
895         .num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES,
896         .mod_params = &iwlagn_mod_params,
897         .valid_tx_ant = ANT_AB,
898         .valid_rx_ant = ANT_AB,
899         .pll_cfg_val = 0,
900         .set_l0s = true,
901         .use_bsm = false,
902         .pa_type = IWL_PA_SYSTEM,
903         .max_ll_items = OTP_MAX_LL_ITEMS_6x50,
904         .shadow_ram_support = true,
905         .led_compensation = 51,
906         .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
907         .supports_idle = true,
908         .adv_thermal_throttle = true,
909         .support_ct_kill_exit = true,
910         .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
911         .chain_noise_scale = 1500,
912         .monitor_recover_period = IWL_MONITORING_PERIOD,
913         .max_event_log_size = 1024,
914         .ucode_tracing = true,
915         .sensitivity_calib_by_driver = true,
916         .chain_noise_calib_by_driver = true,
917 };
918
919 struct iwl_cfg iwl6000_3agn_cfg = {
920         .name = "Intel(R) Centrino(R) Ultimate-N 6300 AGN",
921         .fw_name_pre = IWL6000_FW_PRE,
922         .ucode_api_max = IWL6000_UCODE_API_MAX,
923         .ucode_api_min = IWL6000_UCODE_API_MIN,
924         .sku = IWL_SKU_A|IWL_SKU_G|IWL_SKU_N,
925         .ops = &iwl6000_ops,
926         .eeprom_size = OTP_LOW_IMAGE_SIZE,
927         .eeprom_ver = EEPROM_6000_EEPROM_VERSION,
928         .eeprom_calib_ver = EEPROM_6000_TX_POWER_VERSION,
929         .num_of_queues = IWLAGN_NUM_QUEUES,
930         .num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES,
931         .mod_params = &iwlagn_mod_params,
932         .valid_tx_ant = ANT_ABC,
933         .valid_rx_ant = ANT_ABC,
934         .pll_cfg_val = 0,
935         .set_l0s = true,
936         .use_bsm = false,
937         .pa_type = IWL_PA_SYSTEM,
938         .max_ll_items = OTP_MAX_LL_ITEMS_6x00,
939         .shadow_ram_support = true,
940         .ht_greenfield_support = true,
941         .led_compensation = 51,
942         .use_rts_for_ht = true, /* use rts/cts protection */
943         .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
944         .supports_idle = true,
945         .adv_thermal_throttle = true,
946         .support_ct_kill_exit = true,
947         .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
948         .chain_noise_scale = 1000,
949         .monitor_recover_period = IWL_MONITORING_PERIOD,
950         .max_event_log_size = 1024,
951         .ucode_tracing = true,
952         .sensitivity_calib_by_driver = true,
953         .chain_noise_calib_by_driver = true,
954 };
955
956 MODULE_FIRMWARE(IWL6000_MODULE_FIRMWARE(IWL6000_UCODE_API_MAX));
957 MODULE_FIRMWARE(IWL6050_MODULE_FIRMWARE(IWL6050_UCODE_API_MAX));
958 MODULE_FIRMWARE(IWL6000G2A_MODULE_FIRMWARE(IWL6000G2_UCODE_API_MAX));
959 MODULE_FIRMWARE(IWL6000G2B_MODULE_FIRMWARE(IWL6000G2_UCODE_API_MAX));