• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6.36/drivers/net/wireless/iwlwifi/
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
79static 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. */
87static void iwl6000_set_calib_version(struct iwl_priv *priv)
88{
89	if (priv->cfg->need_dc_calib &&
90	    (priv->cfg->ops->lib->eeprom_ops.calib_version(priv) >= 6))
91		iwl_set_bit(priv, CSR_GP_DRIVER_REG,
92				CSR_GP_DRIVER_REG_BIT_CALIB_VERSION6);
93}
94
95/* NIC configuration for 6000 series */
96static void iwl6000_nic_config(struct iwl_priv *priv)
97{
98	u16 radio_cfg;
99
100	radio_cfg = iwl_eeprom_query16(priv, EEPROM_RADIO_CONFIG);
101
102	/* write radio config values to register */
103	if (EEPROM_RF_CFG_TYPE_MSK(radio_cfg) <= EEPROM_RF_CONFIG_TYPE_MAX)
104		iwl_set_bit(priv, CSR_HW_IF_CONFIG_REG,
105			    EEPROM_RF_CFG_TYPE_MSK(radio_cfg) |
106			    EEPROM_RF_CFG_STEP_MSK(radio_cfg) |
107			    EEPROM_RF_CFG_DASH_MSK(radio_cfg));
108
109	/* set CSR_HW_CONFIG_REG for uCode use */
110	iwl_set_bit(priv, CSR_HW_IF_CONFIG_REG,
111		    CSR_HW_IF_CONFIG_REG_BIT_RADIO_SI |
112		    CSR_HW_IF_CONFIG_REG_BIT_MAC_SI);
113
114	/* no locking required for register write */
115	if (priv->cfg->pa_type == IWL_PA_INTERNAL) {
116		/* 2x2 IPA phy type */
117		iwl_write32(priv, CSR_GP_DRIVER_REG,
118			     CSR_GP_DRIVER_REG_BIT_RADIO_SKU_2x2_IPA);
119	}
120	/* else do nothing, uCode configured */
121	if (priv->cfg->ops->lib->temp_ops.set_calib_version)
122		priv->cfg->ops->lib->temp_ops.set_calib_version(priv);
123}
124
125static struct iwl_sensitivity_ranges iwl6000_sensitivity = {
126	.min_nrg_cck = 97,
127	.max_nrg_cck = 0, /* not used, set to 0 */
128	.auto_corr_min_ofdm = 80,
129	.auto_corr_min_ofdm_mrc = 128,
130	.auto_corr_min_ofdm_x1 = 105,
131	.auto_corr_min_ofdm_mrc_x1 = 192,
132
133	.auto_corr_max_ofdm = 145,
134	.auto_corr_max_ofdm_mrc = 232,
135	.auto_corr_max_ofdm_x1 = 110,
136	.auto_corr_max_ofdm_mrc_x1 = 232,
137
138	.auto_corr_min_cck = 125,
139	.auto_corr_max_cck = 175,
140	.auto_corr_min_cck_mrc = 160,
141	.auto_corr_max_cck_mrc = 310,
142	.nrg_th_cck = 97,
143	.nrg_th_ofdm = 100,
144
145	.barker_corr_th_min = 190,
146	.barker_corr_th_min_mrc = 390,
147	.nrg_th_cca = 62,
148};
149
150static int iwl6000_hw_set_hw_params(struct iwl_priv *priv)
151{
152	if (priv->cfg->mod_params->num_of_queues >= IWL_MIN_NUM_QUEUES &&
153	    priv->cfg->mod_params->num_of_queues <= IWLAGN_NUM_QUEUES)
154		priv->cfg->num_of_queues =
155			priv->cfg->mod_params->num_of_queues;
156
157	priv->hw_params.max_txq_num = priv->cfg->num_of_queues;
158	priv->hw_params.dma_chnl_num = FH50_TCSR_CHNL_NUM;
159	priv->hw_params.scd_bc_tbls_size =
160			priv->cfg->num_of_queues *
161			sizeof(struct iwlagn_scd_bc_tbl);
162	priv->hw_params.tfd_size = sizeof(struct iwl_tfd);
163	priv->hw_params.max_stations = IWLAGN_STATION_COUNT;
164	priv->hw_params.bcast_sta_id = IWLAGN_BROADCAST_ID;
165
166	priv->hw_params.max_data_size = IWL60_RTC_DATA_SIZE;
167	priv->hw_params.max_inst_size = IWL60_RTC_INST_SIZE;
168
169	priv->hw_params.max_bsm_size = 0;
170	priv->hw_params.ht40_channel =  BIT(IEEE80211_BAND_2GHZ) |
171					BIT(IEEE80211_BAND_5GHZ);
172	priv->hw_params.rx_wrt_ptr_reg = FH_RSCSR_CHNL0_WPTR;
173
174	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);
176	priv->hw_params.valid_tx_ant = priv->cfg->valid_tx_ant;
177	priv->hw_params.valid_rx_ant = priv->cfg->valid_rx_ant;
178
179	if (priv->cfg->ops->lib->temp_ops.set_ct_kill)
180		priv->cfg->ops->lib->temp_ops.set_ct_kill(priv);
181
182	/* Set initial sensitivity parameters */
183	/* Set initial calibration set */
184	priv->hw_params.sens = &iwl6000_sensitivity;
185	priv->hw_params.calib_init_cfg =
186		BIT(IWL_CALIB_XTAL)		|
187		BIT(IWL_CALIB_LO)		|
188		BIT(IWL_CALIB_TX_IQ)		|
189		BIT(IWL_CALIB_BASE_BAND);
190	if (priv->cfg->need_dc_calib)
191		priv->hw_params.calib_init_cfg |= BIT(IWL_CALIB_DC);
192
193	priv->hw_params.beacon_time_tsf_bits = IWLAGN_EXT_BEACON_TIME_POS;
194
195	return 0;
196}
197
198static int iwl6000_hw_channel_switch(struct iwl_priv *priv,
199				     struct ieee80211_channel_switch *ch_switch)
200{
201	struct iwl6000_channel_switch_cmd cmd;
202	const struct iwl_channel_info *ch_info;
203	u32 switch_time_in_usec, ucode_switch_time;
204	u16 ch;
205	u32 tsf_low;
206	u8 switch_count;
207	u16 beacon_interval = le16_to_cpu(priv->rxon_timing.beacon_interval);
208	struct ieee80211_vif *vif = priv->vif;
209	struct iwl_host_cmd hcmd = {
210		.id = REPLY_CHANNEL_SWITCH,
211		.len = sizeof(cmd),
212		.flags = CMD_SYNC,
213		.data = &cmd,
214	};
215
216	cmd.band = priv->band == IEEE80211_BAND_2GHZ;
217	ch = ieee80211_frequency_to_channel(ch_switch->channel->center_freq);
218	IWL_DEBUG_11H(priv, "channel switch from %u to %u\n",
219		      priv->active_rxon.channel, ch);
220	cmd.channel = cpu_to_le16(ch);
221	cmd.rxon_flags = priv->staging_rxon.flags;
222	cmd.rxon_filter_flags = priv->staging_rxon.filter_flags;
223	switch_count = ch_switch->count;
224	tsf_low = ch_switch->timestamp & 0x0ffffffff;
225	/*
226	 * calculate the ucode channel switch time
227	 * adding TSF as one of the factor for when to switch
228	 */
229	if ((priv->ucode_beacon_time > tsf_low) && beacon_interval) {
230		if (switch_count > ((priv->ucode_beacon_time - tsf_low) /
231		    beacon_interval)) {
232			switch_count -= (priv->ucode_beacon_time -
233				tsf_low) / beacon_interval;
234		} else
235			switch_count = 0;
236	}
237	if (switch_count <= 1)
238		cmd.switch_time = cpu_to_le32(priv->ucode_beacon_time);
239	else {
240		switch_time_in_usec =
241			vif->bss_conf.beacon_int * switch_count * TIME_UNIT;
242		ucode_switch_time = iwl_usecs_to_beacons(priv,
243							 switch_time_in_usec,
244							 beacon_interval);
245		cmd.switch_time = iwl_add_beacon_time(priv,
246						      priv->ucode_beacon_time,
247						      ucode_switch_time,
248						      beacon_interval);
249	}
250	IWL_DEBUG_11H(priv, "uCode time for the switch is 0x%x\n",
251		      cmd.switch_time);
252	ch_info = iwl_get_channel_info(priv, priv->band, ch);
253	if (ch_info)
254		cmd.expect_beacon = is_channel_radar(ch_info);
255	else {
256		IWL_ERR(priv, "invalid channel switch from %u to %u\n",
257			priv->active_rxon.channel, ch);
258		return -EFAULT;
259	}
260	priv->switch_rxon.channel = cmd.channel;
261	priv->switch_rxon.switch_in_progress = true;
262
263	return iwl_send_cmd_sync(priv, &hcmd);
264}
265
266static struct iwl_lib_ops iwl6000_lib = {
267	.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,
277	.setup_deferred_work = iwlagn_setup_deferred_work,
278	.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,
287	.update_chain_flags = iwl_update_chain_flags,
288	.set_channel_switch = iwl6000_hw_channel_switch,
289	.apm_ops = {
290		.init = iwl_apm_init,
291		.stop = iwl_apm_stop,
292		.config = iwl6000_nic_config,
293		.set_pwr_src = iwl_set_pwr_src,
294	},
295	.eeprom_ops = {
296		.regulatory_bands = {
297			EEPROM_REG_BAND_1_CHANNELS,
298			EEPROM_REG_BAND_2_CHANNELS,
299			EEPROM_REG_BAND_3_CHANNELS,
300			EEPROM_REG_BAND_4_CHANNELS,
301			EEPROM_REG_BAND_5_CHANNELS,
302			EEPROM_6000_REG_BAND_24_HT40_CHANNELS,
303			EEPROM_REG_BAND_52_HT40_CHANNELS
304		},
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,
310		.update_enhanced_txpower = iwlcore_eeprom_enhanced_txpower,
311	},
312	.post_associate = iwl_post_associate,
313	.isr = iwl_isr_ict,
314	.config_ap = iwl_config_ap,
315	.temp_ops = {
316		.temperature = iwlagn_temperature,
317		.set_ct_kill = iwl6000_set_ct_threshold,
318		.set_calib_version = iwl6000_set_calib_version,
319	 },
320	.manage_ibss_station = iwlagn_manage_ibss_station,
321	.update_bcast_station = iwl_update_bcast_station,
322	.debugfs_ops = {
323		.rx_stats_read = iwl_ucode_rx_stats_read,
324		.tx_stats_read = iwl_ucode_tx_stats_read,
325		.general_stats_read = iwl_ucode_general_stats_read,
326		.bt_stats_read = iwl_ucode_bt_stats_read,
327	},
328	.recover_from_tx_stall = iwl_bg_monitor_recover,
329	.check_plcp_health = iwl_good_plcp_health,
330	.check_ack_health = iwl_good_ack_health,
331	.txfifo_flush = iwlagn_txfifo_flush,
332	.dev_txfifo_flush = iwlagn_dev_txfifo_flush,
333};
334
335static const struct iwl_ops iwl6000_ops = {
336	.lib = &iwl6000_lib,
337	.hcmd = &iwlagn_hcmd,
338	.utils = &iwlagn_hcmd_utils,
339	.led = &iwlagn_led_ops,
340};
341
342static void do_not_send_bt_config(struct iwl_priv *priv)
343{
344}
345
346static struct iwl_hcmd_ops iwl6000g2b_hcmd = {
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};
353
354static const struct iwl_ops iwl6000g2b_ops = {
355	.lib = &iwl6000_lib,
356	.hcmd = &iwl6000g2b_hcmd,
357	.utils = &iwlagn_hcmd_utils,
358	.led = &iwlagn_led_ops,
359};
360
361struct iwl_cfg iwl6000g2a_2agn_cfg = {
362	.name = "6000 Series 2x2 AGN Gen2a",
363	.fw_name_pre = IWL6000G2A_FW_PRE,
364	.ucode_api_max = IWL6000G2_UCODE_API_MAX,
365	.ucode_api_min = IWL6000G2_UCODE_API_MIN,
366	.sku = IWL_SKU_A|IWL_SKU_G|IWL_SKU_N,
367	.ops = &iwl6000_ops,
368	.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,
372	.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,
377	.set_l0s = true,
378	.use_bsm = false,
379	.pa_type = IWL_PA_SYSTEM,
380	.max_ll_items = OTP_MAX_LL_ITEMS_6x00,
381	.shadow_ram_support = true,
382	.ht_greenfield_support = true,
383	.led_compensation = 51,
384	.use_rts_for_aggregation = true, /* use rts/cts protection */
385	.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
386	.supports_idle = true,
387	.adv_thermal_throttle = true,
388	.support_ct_kill_exit = true,
389	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
390	.chain_noise_scale = 1000,
391	.monitor_recover_period = IWL_DEF_MONITORING_PERIOD,
392	.max_event_log_size = 512,
393	.ucode_tracing = true,
394	.sensitivity_calib_by_driver = true,
395	.chain_noise_calib_by_driver = true,
396	.need_dc_calib = true,
397};
398
399struct iwl_cfg iwl6000g2a_2abg_cfg = {
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,
407	.eeprom_ver = EEPROM_6000G2_EEPROM_VERSION,
408	.eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION,
409	.num_of_queues = IWLAGN_NUM_QUEUES,
410	.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,
415	.set_l0s = true,
416	.use_bsm = false,
417	.pa_type = IWL_PA_SYSTEM,
418	.max_ll_items = OTP_MAX_LL_ITEMS_6x00,
419	.shadow_ram_support = true,
420	.led_compensation = 51,
421	.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
422	.supports_idle = true,
423	.adv_thermal_throttle = true,
424	.support_ct_kill_exit = true,
425	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
426	.chain_noise_scale = 1000,
427	.monitor_recover_period = IWL_DEF_MONITORING_PERIOD,
428	.max_event_log_size = 512,
429	.sensitivity_calib_by_driver = true,
430	.chain_noise_calib_by_driver = true,
431	.need_dc_calib = true,
432};
433
434struct 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,
442	.eeprom_ver = EEPROM_6000G2_EEPROM_VERSION,
443	.eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION,
444	.num_of_queues = IWLAGN_NUM_QUEUES,
445	.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,
450	.set_l0s = true,
451	.use_bsm = false,
452	.pa_type = IWL_PA_SYSTEM,
453	.max_ll_items = OTP_MAX_LL_ITEMS_6x00,
454	.shadow_ram_support = true,
455	.led_compensation = 51,
456	.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
457	.supports_idle = true,
458	.adv_thermal_throttle = true,
459	.support_ct_kill_exit = true,
460	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
461	.chain_noise_scale = 1000,
462	.monitor_recover_period = IWL_DEF_MONITORING_PERIOD,
463	.max_event_log_size = 512,
464	.sensitivity_calib_by_driver = true,
465	.chain_noise_calib_by_driver = true,
466	.need_dc_calib = true,
467};
468
469struct iwl_cfg iwl6000g2b_2agn_cfg = {
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,
491	.led_compensation = 51,
492	.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};
506
507struct iwl_cfg iwl6000g2b_2abg_cfg = {
508	.name = "6000 Series 2x2 ABG Gen2b",
509	.fw_name_pre = IWL6000G2B_FW_PRE,
510	.ucode_api_max = IWL6000G2_UCODE_API_MAX,
511	.ucode_api_min = IWL6000G2_UCODE_API_MIN,
512	.sku = IWL_SKU_A|IWL_SKU_G,
513	.ops = &iwl6000g2b_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_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};
542
543struct iwl_cfg iwl6000g2b_2bgn_cfg = {
544	.name = "6000 Series 2x2 BGN Gen2b",
545	.fw_name_pre = IWL6000G2B_FW_PRE,
546	.ucode_api_max = IWL6000G2_UCODE_API_MAX,
547	.ucode_api_min = IWL6000G2_UCODE_API_MIN,
548	.sku = IWL_SKU_G|IWL_SKU_N,
549	.ops = &iwl6000g2b_ops,
550	.eeprom_size = OTP_LOW_IMAGE_SIZE,
551	.eeprom_ver = EEPROM_6000G2_EEPROM_VERSION,
552	.eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION,
553	.num_of_queues = IWLAGN_NUM_QUEUES,
554	.num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES,
555	.mod_params = &iwlagn_mod_params,
556	.valid_tx_ant = ANT_AB,
557	.valid_rx_ant = ANT_AB,
558	.pll_cfg_val = 0,
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};
580
581struct iwl_cfg iwl6000g2b_2bg_cfg = {
582	.name = "6000 Series 2x2 BG Gen2b",
583	.fw_name_pre = IWL6000G2B_FW_PRE,
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};
616
617struct iwl_cfg iwl6000g2b_bgn_cfg = {
618	.name = "6000 Series 1x2 BGN Gen2b",
619	.fw_name_pre = IWL6000G2B_FW_PRE,
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};
654
655struct iwl_cfg iwl6000g2b_bg_cfg = {
656	.name = "6000 Series 1x2 BG Gen2b",
657	.fw_name_pre = IWL6000G2B_FW_PRE,
658	.ucode_api_max = IWL6000G2_UCODE_API_MAX,
659	.ucode_api_min = IWL6000G2_UCODE_API_MIN,
660	.sku = IWL_SKU_G,
661	.ops = &iwl6000g2b_ops,
662	.eeprom_size = OTP_LOW_IMAGE_SIZE,
663	.eeprom_ver = EEPROM_6000G2_EEPROM_VERSION,
664	.eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION,
665	.num_of_queues = IWLAGN_NUM_QUEUES,
666	.num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES,
667	.mod_params = &iwlagn_mod_params,
668	.valid_tx_ant = ANT_A,
669	.valid_rx_ant = ANT_AB,
670	.pll_cfg_val = 0,
671	.set_l0s = true,
672	.use_bsm = false,
673	.pa_type = IWL_PA_SYSTEM,
674	.max_ll_items = OTP_MAX_LL_ITEMS_6x00,
675	.shadow_ram_support = true,
676	.led_compensation = 51,
677	.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
678	.supports_idle = true,
679	.adv_thermal_throttle = true,
680	.support_ct_kill_exit = true,
681	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
682	.chain_noise_scale = 1000,
683	.monitor_recover_period = IWL_LONG_MONITORING_PERIOD,
684	.max_event_log_size = 512,
685	.sensitivity_calib_by_driver = true,
686	.chain_noise_calib_by_driver = true,
687	.need_dc_calib = true,
688	.bt_statistics = true,
689};
690
691/*
692 * "i": Internal configuration, use internal Power Amplifier
693 */
694struct iwl_cfg iwl6000i_2agn_cfg = {
695	.name = "Intel(R) Centrino(R) Advanced-N 6200 AGN",
696	.fw_name_pre = IWL6000_FW_PRE,
697	.ucode_api_max = IWL6000_UCODE_API_MAX,
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};
730
731struct iwl_cfg iwl6000i_2abg_cfg = {
732	.name = "Intel(R) Centrino(R) Advanced-N 6200 ABG",
733	.fw_name_pre = IWL6000_FW_PRE,
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};
765
766struct iwl_cfg iwl6000i_2bg_cfg = {
767	.name = "Intel(R) Centrino(R) Advanced-N 6200 BG",
768	.fw_name_pre = IWL6000_FW_PRE,
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};
800
801struct iwl_cfg iwl6050_2agn_cfg = {
802	.name = "Intel(R) Centrino(R) Advanced-N + WiMAX 6250 AGN",
803	.fw_name_pre = IWL6050_FW_PRE,
804	.ucode_api_max = IWL6050_UCODE_API_MAX,
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
839struct 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};
876
877struct iwl_cfg iwl6050_2abg_cfg = {
878	.name = "Intel(R) Centrino(R) Advanced-N + WiMAX 6250 ABG",
879	.fw_name_pre = IWL6050_FW_PRE,
880	.ucode_api_max = IWL6050_UCODE_API_MAX,
881	.ucode_api_min = IWL6050_UCODE_API_MIN,
882	.sku = IWL_SKU_A|IWL_SKU_G,
883	.ops = &iwl6000_ops,
884	.eeprom_size = OTP_LOW_IMAGE_SIZE,
885	.eeprom_ver = EEPROM_6050_EEPROM_VERSION,
886	.eeprom_calib_ver = EEPROM_6050_TX_POWER_VERSION,
887	.num_of_queues = IWLAGN_NUM_QUEUES,
888	.num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES,
889	.mod_params = &iwlagn_mod_params,
890	.valid_tx_ant = ANT_AB,
891	.valid_rx_ant = ANT_AB,
892	.pll_cfg_val = 0,
893	.set_l0s = true,
894	.use_bsm = false,
895	.pa_type = IWL_PA_SYSTEM,
896	.max_ll_items = OTP_MAX_LL_ITEMS_6x50,
897	.shadow_ram_support = true,
898	.led_compensation = 51,
899	.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
900	.supports_idle = true,
901	.adv_thermal_throttle = true,
902	.support_ct_kill_exit = true,
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};
912
913struct iwl_cfg iwl6000_3agn_cfg = {
914	.name = "Intel(R) Centrino(R) Ultimate-N 6300 AGN",
915	.fw_name_pre = IWL6000_FW_PRE,
916	.ucode_api_max = IWL6000_UCODE_API_MAX,
917	.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,
922	.eeprom_calib_ver = EEPROM_6000_TX_POWER_VERSION,
923	.num_of_queues = IWLAGN_NUM_QUEUES,
924	.num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES,
925	.mod_params = &iwlagn_mod_params,
926	.valid_tx_ant = ANT_ABC,
927	.valid_rx_ant = ANT_ABC,
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};
949
950MODULE_FIRMWARE(IWL6000_MODULE_FIRMWARE(IWL6000_UCODE_API_MAX));
951MODULE_FIRMWARE(IWL6050_MODULE_FIRMWARE(IWL6050_UCODE_API_MAX));
952MODULE_FIRMWARE(IWL6000G2A_MODULE_FIRMWARE(IWL6000G2_UCODE_API_MAX));
953MODULE_FIRMWARE(IWL6000G2B_MODULE_FIRMWARE(IWL6000G2_UCODE_API_MAX));
954