iwl-6000.c 34.8 KB
Newer Older
1
2
/******************************************************************************
 *
3
 * Copyright(c) 2008 - 2010 Intel Corporation. All rights reserved.
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of version 2 of the GNU General Public License as
 * published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
 * more details.
 *
 * You should have received a copy of the GNU General Public License along with
 * this program; if not, write to the Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
 *
 * The full GNU General Public License is included in this distribution in the
 * file called LICENSE.
 *
 * Contact Information:
 *  Intel Linux Wireless <ilw@linux.intel.com>
 * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
 *
 *****************************************************************************/

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/pci.h>
#include <linux/dma-mapping.h>
#include <linux/delay.h>
#include <linux/skbuff.h>
#include <linux/netdevice.h>
#include <linux/wireless.h>
#include <net/mac80211.h>
#include <linux/etherdevice.h>
#include <asm/unaligned.h>

#include "iwl-eeprom.h"
#include "iwl-dev.h"
#include "iwl-core.h"
#include "iwl-io.h"
#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"
Johannes Berg's avatar
Johannes Berg committed
49
#include "iwl-agn-led.h"
50
#include "iwl-agn-debugfs.h"
51
52

/* Highest firmware API version supported */
53
54
#define IWL6000_UCODE_API_MAX 4
#define IWL6050_UCODE_API_MAX 4
55
#define IWL6000G2_UCODE_API_MAX 5
56
57

/* Lowest firmware API version supported */
58
59
#define IWL6000_UCODE_API_MIN 4
#define IWL6050_UCODE_API_MIN 4
60
#define IWL6000G2_UCODE_API_MIN 4
61
62
63
64
65
66
67
68
69

#define IWL6000_FW_PRE "iwlwifi-6000-"
#define _IWL6000_MODULE_FIRMWARE(api) IWL6000_FW_PRE #api ".ucode"
#define IWL6000_MODULE_FIRMWARE(api) _IWL6000_MODULE_FIRMWARE(api)

#define IWL6050_FW_PRE "iwlwifi-6050-"
#define _IWL6050_MODULE_FIRMWARE(api) IWL6050_FW_PRE #api ".ucode"
#define IWL6050_MODULE_FIRMWARE(api) _IWL6050_MODULE_FIRMWARE(api)

70
71
72
73
#define IWL6000G2A_FW_PRE "iwlwifi-6000g2a-"
#define _IWL6000G2A_MODULE_FIRMWARE(api) IWL6000G2A_FW_PRE #api ".ucode"
#define IWL6000G2A_MODULE_FIRMWARE(api) _IWL6000G2A_MODULE_FIRMWARE(api)

74
75
76
77
#define IWL6000G2B_FW_PRE "iwlwifi-6000g2b-"
#define _IWL6000G2B_MODULE_FIRMWARE(api) IWL6000G2B_FW_PRE #api ".ucode"
#define IWL6000G2B_MODULE_FIRMWARE(api) _IWL6000G2B_MODULE_FIRMWARE(api)

78

79
80
81
82
83
84
85
static void iwl6000_set_ct_threshold(struct iwl_priv *priv)
{
	/* want Celsius */
	priv->hw_params.ct_kill_threshold = CT_KILL_THRESHOLD;
	priv->hw_params.ct_kill_exit_threshold = CT_KILL_EXIT_THRESHOLD;
}

86
/* Indicate calibration version to uCode. */
87
static void iwl6000_set_calib_version(struct iwl_priv *priv)
88
{
89
90
	if (priv->cfg->need_dc_calib &&
	    (priv->cfg->ops->lib->eeprom_ops.calib_version(priv) >= 6))
91
92
93
94
		iwl_set_bit(priv, CSR_GP_DRIVER_REG,
				CSR_GP_DRIVER_REG_BIT_CALIB_VERSION6);
}

95
96
97
/* NIC configuration for 6000 series */
static void iwl6000_nic_config(struct iwl_priv *priv)
{
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
	u16 radio_cfg;

	radio_cfg = iwl_eeprom_query16(priv, EEPROM_RADIO_CONFIG);

	/* write radio config values to register */
	if (EEPROM_RF_CFG_TYPE_MSK(radio_cfg) <= EEPROM_RF_CONFIG_TYPE_MAX)
		iwl_set_bit(priv, CSR_HW_IF_CONFIG_REG,
			    EEPROM_RF_CFG_TYPE_MSK(radio_cfg) |
			    EEPROM_RF_CFG_STEP_MSK(radio_cfg) |
			    EEPROM_RF_CFG_DASH_MSK(radio_cfg));

	/* set CSR_HW_CONFIG_REG for uCode use */
	iwl_set_bit(priv, CSR_HW_IF_CONFIG_REG,
		    CSR_HW_IF_CONFIG_REG_BIT_RADIO_SI |
		    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
117
118
119
120
		/* 2x2 IPA phy type */
		iwl_write32(priv, CSR_GP_DRIVER_REG,
			     CSR_GP_DRIVER_REG_BIT_RADIO_SKU_2x2_IPA);
	}
	/* else do nothing, uCode configured */
121
122
	if (priv->cfg->ops->lib->temp_ops.set_calib_version)
		priv->cfg->ops->lib->temp_ops.set_calib_version(priv);
123
124
}

125
126
127
128
129
130
131
132
133
134
static struct iwl_sensitivity_ranges iwl6000_sensitivity = {
	.min_nrg_cck = 97,
	.max_nrg_cck = 0, /* not used, set to 0 */
	.auto_corr_min_ofdm = 80,
	.auto_corr_min_ofdm_mrc = 128,
	.auto_corr_min_ofdm_x1 = 105,
	.auto_corr_min_ofdm_mrc_x1 = 192,

	.auto_corr_max_ofdm = 145,
	.auto_corr_max_ofdm_mrc = 232,
135
	.auto_corr_max_ofdm_x1 = 110,
136
137
138
139
140
141
142
143
	.auto_corr_max_ofdm_mrc_x1 = 232,

	.auto_corr_min_cck = 125,
	.auto_corr_max_cck = 175,
	.auto_corr_min_cck_mrc = 160,
	.auto_corr_max_cck_mrc = 310,
	.nrg_th_cck = 97,
	.nrg_th_ofdm = 100,
144
145
146
147

	.barker_corr_th_min = 190,
	.barker_corr_th_min_mrc = 390,
	.nrg_th_cca = 62,
148
149
150
151
};

static int iwl6000_hw_set_hw_params(struct iwl_priv *priv)
{
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
155
		priv->cfg->num_of_queues =
			priv->cfg->mod_params->num_of_queues;
156

157
	priv->hw_params.max_txq_num = priv->cfg->num_of_queues;
158
159
	priv->hw_params.dma_chnl_num = FH50_TCSR_CHNL_NUM;
	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
164
	priv->hw_params.max_stations = IWLAGN_STATION_COUNT;
	priv->hw_params.bcast_sta_id = IWLAGN_BROADCAST_ID;
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184

	priv->hw_params.max_data_size = IWL60_RTC_DATA_SIZE;
	priv->hw_params.max_inst_size = IWL60_RTC_INST_SIZE;

	priv->hw_params.max_bsm_size = 0;
	priv->hw_params.ht40_channel =  BIT(IEEE80211_BAND_2GHZ) |
					BIT(IEEE80211_BAND_5GHZ);
	priv->hw_params.rx_wrt_ptr_reg = FH_RSCSR_CHNL0_WPTR;

	priv->hw_params.tx_chains_num = num_of_ant(priv->cfg->valid_tx_ant);
	priv->hw_params.rx_chains_num = num_of_ant(priv->cfg->valid_rx_ant);
	priv->hw_params.valid_tx_ant = priv->cfg->valid_tx_ant;
	priv->hw_params.valid_rx_ant = priv->cfg->valid_rx_ant;

	if (priv->cfg->ops->lib->temp_ops.set_ct_kill)
		priv->cfg->ops->lib->temp_ops.set_ct_kill(priv);

	/* Set initial sensitivity parameters */
	/* Set initial calibration set */
	priv->hw_params.sens = &iwl6000_sensitivity;
185
186
187
188
189
	priv->hw_params.calib_init_cfg =
		BIT(IWL_CALIB_XTAL)		|
		BIT(IWL_CALIB_LO)		|
		BIT(IWL_CALIB_TX_IQ)		|
		BIT(IWL_CALIB_BASE_BAND);
190
191
	if (priv->cfg->need_dc_calib)
		priv->hw_params.calib_init_cfg |= BIT(IWL_CALIB_DC);
192

193
194
	priv->hw_params.beacon_time_tsf_bits = IWLAGN_EXT_BEACON_TIME_POS;

195
196
197
	return 0;
}

198
199
static int iwl6000_hw_channel_switch(struct iwl_priv *priv,
				     struct ieee80211_channel_switch *ch_switch)
200
201
202
{
	struct iwl6000_channel_switch_cmd cmd;
	const struct iwl_channel_info *ch_info;
203
204
205
206
207
208
	u32 switch_time_in_usec, ucode_switch_time;
	u16 ch;
	u32 tsf_low;
	u8 switch_count;
	u16 beacon_interval = le16_to_cpu(priv->rxon_timing.beacon_interval);
	struct ieee80211_vif *vif = priv->vif;
209
210
211
	struct iwl_host_cmd hcmd = {
		.id = REPLY_CHANNEL_SWITCH,
		.len = sizeof(cmd),
212
		.flags = CMD_SYNC,
213
214
215
216
		.data = &cmd,
	};

	cmd.band = priv->band == IEEE80211_BAND_2GHZ;
217
	ch = ch_switch->channel->hw_value;
218
219
220
	IWL_DEBUG_11H(priv, "channel switch from %u to %u\n",
		      priv->active_rxon.channel, ch);
	cmd.channel = cpu_to_le16(ch);
Wey-Yi Guy's avatar
Wey-Yi Guy committed
221
222
	cmd.rxon_flags = priv->staging_rxon.flags;
	cmd.rxon_filter_flags = priv->staging_rxon.filter_flags;
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
	switch_count = ch_switch->count;
	tsf_low = ch_switch->timestamp & 0x0ffffffff;
	/*
	 * calculate the ucode channel switch time
	 * adding TSF as one of the factor for when to switch
	 */
	if ((priv->ucode_beacon_time > tsf_low) && beacon_interval) {
		if (switch_count > ((priv->ucode_beacon_time - tsf_low) /
		    beacon_interval)) {
			switch_count -= (priv->ucode_beacon_time -
				tsf_low) / beacon_interval;
		} else
			switch_count = 0;
	}
	if (switch_count <= 1)
		cmd.switch_time = cpu_to_le32(priv->ucode_beacon_time);
	else {
		switch_time_in_usec =
			vif->bss_conf.beacon_int * switch_count * TIME_UNIT;
		ucode_switch_time = iwl_usecs_to_beacons(priv,
							 switch_time_in_usec,
							 beacon_interval);
		cmd.switch_time = iwl_add_beacon_time(priv,
						      priv->ucode_beacon_time,
						      ucode_switch_time,
						      beacon_interval);
	}
	IWL_DEBUG_11H(priv, "uCode time for the switch is 0x%x\n",
		      cmd.switch_time);
	ch_info = iwl_get_channel_info(priv, priv->band, ch);
253
254
255
256
	if (ch_info)
		cmd.expect_beacon = is_channel_radar(ch_info);
	else {
		IWL_ERR(priv, "invalid channel switch from %u to %u\n",
257
			priv->active_rxon.channel, ch);
258
259
		return -EFAULT;
	}
260
	priv->switch_rxon.channel = cmd.channel;
Wey-Yi Guy's avatar
Wey-Yi Guy committed
261
	priv->switch_rxon.switch_in_progress = true;
262
263
264
265

	return iwl_send_cmd_sync(priv, &hcmd);
}

266
static struct iwl_lib_ops iwl6000_lib = {
267
	.set_hw_params = iwl6000_hw_set_hw_params,
268
269
270
271
272
	.txq_update_byte_cnt_tbl = iwlagn_txq_update_byte_cnt_tbl,
	.txq_inval_byte_cnt_tbl = iwlagn_txq_inval_byte_cnt_tbl,
	.txq_set_sched = iwlagn_txq_set_sched,
	.txq_agg_enable = iwlagn_txq_agg_enable,
	.txq_agg_disable = iwlagn_txq_agg_disable,
273
274
275
	.txq_attach_buf_to_tfd = iwl_hw_txq_attach_buf_to_tfd,
	.txq_free_tfd = iwl_hw_txq_free_tfd,
	.txq_init = iwl_hw_tx_queue_init,
276
277
278
	.rx_handler_setup = iwlagn_rx_handler_setup,
	.setup_deferred_work = iwlagn_setup_deferred_work,
	.is_valid_rtc_data_addr = iwlagn_hw_valid_rtc_data_addr,
279
	.load_ucode = iwlagn_load_ucode,
280
281
	.dump_nic_event_log = iwl_dump_nic_event_log,
	.dump_nic_error_log = iwl_dump_nic_error_log,
282
	.dump_csr = iwl_dump_csr,
283
	.dump_fh = iwl_dump_fh,
284
285
	.init_alive_start = iwlagn_init_alive_start,
	.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
294
295
296
		.set_pwr_src = iwl_set_pwr_src,
	},
	.eeprom_ops = {
		.regulatory_bands = {
297
298
299
300
301
			EEPROM_REG_BAND_1_CHANNELS,
			EEPROM_REG_BAND_2_CHANNELS,
			EEPROM_REG_BAND_3_CHANNELS,
			EEPROM_REG_BAND_4_CHANNELS,
			EEPROM_REG_BAND_5_CHANNELS,
302
			EEPROM_6000_REG_BAND_24_HT40_CHANNELS,
303
			EEPROM_REG_BAND_52_HT40_CHANNELS
304
305
306
307
		},
		.verify_signature  = iwlcore_eeprom_verify_signature,
		.acquire_semaphore = iwlcore_eeprom_acquire_semaphore,
		.release_semaphore = iwlcore_eeprom_release_semaphore,
308
309
		.calib_version	= iwlagn_eeprom_calib_version,
		.query_addr = iwlagn_eeprom_query_addr,
310
		.update_enhanced_txpower = iwlcore_eeprom_enhanced_txpower,
311
312
313
314
315
	},
	.post_associate = iwl_post_associate,
	.isr = iwl_isr_ict,
	.config_ap = iwl_config_ap,
	.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
323
324
325
	.debugfs_ops = {
		.rx_stats_read = iwl_ucode_rx_stats_read,
		.tx_stats_read = iwl_ucode_tx_stats_read,
		.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
330
	.check_plcp_health = iwl_good_plcp_health,
	.check_ack_health = iwl_good_ack_health,
331
	.txfifo_flush = iwlagn_txfifo_flush,
332
	.dev_txfifo_flush = iwlagn_dev_txfifo_flush,
333
334
335
336
337
	.tt_ops = {
		.lower_power_detection = iwl_tt_is_low_power_state,
		.tt_power_mode = iwl_tt_current_power_mode,
		.ct_kill_check = iwl_check_for_ct_kill,
	}
338
339
};

340
341
342
343
344
345
346
347
348
349
static struct iwl_lib_ops iwl6000g2b_lib = {
	.set_hw_params = iwl6000_hw_set_hw_params,
	.txq_update_byte_cnt_tbl = iwlagn_txq_update_byte_cnt_tbl,
	.txq_inval_byte_cnt_tbl = iwlagn_txq_inval_byte_cnt_tbl,
	.txq_set_sched = iwlagn_txq_set_sched,
	.txq_agg_enable = iwlagn_txq_agg_enable,
	.txq_agg_disable = iwlagn_txq_agg_disable,
	.txq_attach_buf_to_tfd = iwl_hw_txq_attach_buf_to_tfd,
	.txq_free_tfd = iwl_hw_txq_free_tfd,
	.txq_init = iwl_hw_tx_queue_init,
Wey-Yi Guy's avatar
Wey-Yi Guy committed
350
351
352
	.rx_handler_setup = iwlagn_bt_rx_handler_setup,
	.setup_deferred_work = iwlagn_bt_setup_deferred_work,
	.cancel_deferred_work = iwlagn_bt_cancel_deferred_work,
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
	.is_valid_rtc_data_addr = iwlagn_hw_valid_rtc_data_addr,
	.load_ucode = iwlagn_load_ucode,
	.dump_nic_event_log = iwl_dump_nic_event_log,
	.dump_nic_error_log = iwl_dump_nic_error_log,
	.dump_csr = iwl_dump_csr,
	.dump_fh = iwl_dump_fh,
	.init_alive_start = iwlagn_init_alive_start,
	.alive_notify = iwlagn_alive_notify,
	.send_tx_power = iwlagn_send_tx_power,
	.update_chain_flags = iwl_update_chain_flags,
	.set_channel_switch = iwl6000_hw_channel_switch,
	.apm_ops = {
		.init = iwl_apm_init,
		.stop = iwl_apm_stop,
		.config = iwl6000_nic_config,
		.set_pwr_src = iwl_set_pwr_src,
	},
	.eeprom_ops = {
		.regulatory_bands = {
			EEPROM_REG_BAND_1_CHANNELS,
			EEPROM_REG_BAND_2_CHANNELS,
			EEPROM_REG_BAND_3_CHANNELS,
			EEPROM_REG_BAND_4_CHANNELS,
			EEPROM_REG_BAND_5_CHANNELS,
			EEPROM_6000_REG_BAND_24_HT40_CHANNELS,
			EEPROM_REG_BAND_52_HT40_CHANNELS
		},
		.verify_signature  = iwlcore_eeprom_verify_signature,
		.acquire_semaphore = iwlcore_eeprom_acquire_semaphore,
		.release_semaphore = iwlcore_eeprom_release_semaphore,
		.calib_version	= iwlagn_eeprom_calib_version,
		.query_addr = iwlagn_eeprom_query_addr,
		.update_enhanced_txpower = iwlcore_eeprom_enhanced_txpower,
	},
	.post_associate = iwl_post_associate,
	.isr = iwl_isr_ict,
	.config_ap = iwl_config_ap,
	.temp_ops = {
		.temperature = iwlagn_temperature,
		.set_ct_kill = iwl6000_set_ct_threshold,
		.set_calib_version = iwl6000_set_calib_version,
	 },
	.manage_ibss_station = iwlagn_manage_ibss_station,
	.update_bcast_station = iwl_update_bcast_station,
	.debugfs_ops = {
		.rx_stats_read = iwl_ucode_rx_stats_read,
		.tx_stats_read = iwl_ucode_tx_stats_read,
		.general_stats_read = iwl_ucode_general_stats_read,
		.bt_stats_read = iwl_ucode_bt_stats_read,
	},
	.recover_from_tx_stall = iwl_bg_monitor_recover,
	.check_plcp_health = iwl_good_plcp_health,
	.check_ack_health = iwl_good_ack_health,
	.txfifo_flush = iwlagn_txfifo_flush,
	.dev_txfifo_flush = iwlagn_dev_txfifo_flush,
	.tt_ops = {
		.lower_power_detection = iwl_tt_is_low_power_state,
		.tt_power_mode = iwl_tt_current_power_mode,
		.ct_kill_check = iwl_check_for_ct_kill,
	}
};

Emese Revfy's avatar
Emese Revfy committed
415
static const struct iwl_ops iwl6000_ops = {
416
	.lib = &iwl6000_lib,
417
418
	.hcmd = &iwlagn_hcmd,
	.utils = &iwlagn_hcmd_utils,
Johannes Berg's avatar
Johannes Berg committed
419
	.led = &iwlagn_led_ops,
420
421
};

422
static const struct iwl_ops iwl6000g2b_ops = {
423
	.lib = &iwl6000g2b_lib,
Wey-Yi Guy's avatar
Wey-Yi Guy committed
424
	.hcmd = &iwlagn_bt_hcmd,
425
426
427
428
	.utils = &iwlagn_hcmd_utils,
	.led = &iwlagn_led_ops,
};

429
430
431
struct iwl_cfg iwl6000g2a_2agn_cfg = {
	.name = "6000 Series 2x2 AGN Gen2a",
	.fw_name_pre = IWL6000G2A_FW_PRE,
432
433
	.ucode_api_max = IWL6000G2_UCODE_API_MAX,
	.ucode_api_min = IWL6000G2_UCODE_API_MIN,
434
435
436
	.sku = IWL_SKU_A|IWL_SKU_G|IWL_SKU_N,
	.ops = &iwl6000_ops,
	.eeprom_size = OTP_LOW_IMAGE_SIZE,
437
438
	.eeprom_ver = EEPROM_6000G2_EEPROM_VERSION,
	.eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION,
439
440
441
442
443
444
445
446
	.num_of_queues = IWLAGN_NUM_QUEUES,
	.num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES,
	.mod_params = &iwlagn_mod_params,
	.valid_tx_ant = ANT_AB,
	.valid_rx_ant = ANT_AB,
	.pll_cfg_val = 0,
	.set_l0s = true,
	.use_bsm = false,
447
	.pa_type = IWL_PA_SYSTEM,
448
449
450
451
	.max_ll_items = OTP_MAX_LL_ITEMS_6x00,
	.shadow_ram_support = true,
	.ht_greenfield_support = true,
	.led_compensation = 51,
Johannes Berg's avatar
Johannes Berg committed
452
	.use_rts_for_aggregation = true, /* use rts/cts protection */
453
454
455
456
457
458
	.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
	.supports_idle = true,
	.adv_thermal_throttle = true,
	.support_ct_kill_exit = true,
	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
	.chain_noise_scale = 1000,
Wey-Yi Guy's avatar
Wey-Yi Guy committed
459
	.monitor_recover_period = IWL_DEF_MONITORING_PERIOD,
460
	.max_event_log_size = 512,
461
	.ucode_tracing = true,
462
463
	.sensitivity_calib_by_driver = true,
	.chain_noise_calib_by_driver = true,
464
	.need_dc_calib = true,
465
466
};

467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
struct iwl_cfg iwl6000g2a_2abg_cfg = {
	.name = "6000 Series 2x2 ABG Gen2a",
	.fw_name_pre = IWL6000G2A_FW_PRE,
	.ucode_api_max = IWL6000G2_UCODE_API_MAX,
	.ucode_api_min = IWL6000G2_UCODE_API_MIN,
	.sku = IWL_SKU_A|IWL_SKU_G,
	.ops = &iwl6000_ops,
	.eeprom_size = OTP_LOW_IMAGE_SIZE,
	.eeprom_ver = EEPROM_6000G2_EEPROM_VERSION,
	.eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION,
	.num_of_queues = IWLAGN_NUM_QUEUES,
	.num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES,
	.mod_params = &iwlagn_mod_params,
	.valid_tx_ant = ANT_AB,
	.valid_rx_ant = ANT_AB,
	.pll_cfg_val = 0,
	.set_l0s = true,
	.use_bsm = false,
	.pa_type = IWL_PA_SYSTEM,
	.max_ll_items = OTP_MAX_LL_ITEMS_6x00,
	.shadow_ram_support = true,
	.led_compensation = 51,
	.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
	.supports_idle = true,
	.adv_thermal_throttle = true,
	.support_ct_kill_exit = true,
	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
	.chain_noise_scale = 1000,
Wey-Yi Guy's avatar
Wey-Yi Guy committed
495
	.monitor_recover_period = IWL_DEF_MONITORING_PERIOD,
496
	.max_event_log_size = 512,
497
498
	.sensitivity_calib_by_driver = true,
	.chain_noise_calib_by_driver = true,
499
	.need_dc_calib = true,
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
};

struct iwl_cfg iwl6000g2a_2bg_cfg = {
	.name = "6000 Series 2x2 BG Gen2a",
	.fw_name_pre = IWL6000G2A_FW_PRE,
	.ucode_api_max = IWL6000G2_UCODE_API_MAX,
	.ucode_api_min = IWL6000G2_UCODE_API_MIN,
	.sku = IWL_SKU_G,
	.ops = &iwl6000_ops,
	.eeprom_size = OTP_LOW_IMAGE_SIZE,
	.eeprom_ver = EEPROM_6000G2_EEPROM_VERSION,
	.eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION,
	.num_of_queues = IWLAGN_NUM_QUEUES,
	.num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES,
	.mod_params = &iwlagn_mod_params,
	.valid_tx_ant = ANT_AB,
	.valid_rx_ant = ANT_AB,
	.pll_cfg_val = 0,
	.set_l0s = true,
	.use_bsm = false,
	.pa_type = IWL_PA_SYSTEM,
	.max_ll_items = OTP_MAX_LL_ITEMS_6x00,
	.shadow_ram_support = true,
	.led_compensation = 51,
	.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
	.supports_idle = true,
	.adv_thermal_throttle = true,
	.support_ct_kill_exit = true,
	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
	.chain_noise_scale = 1000,
Wey-Yi Guy's avatar
Wey-Yi Guy committed
530
	.monitor_recover_period = IWL_DEF_MONITORING_PERIOD,
531
	.max_event_log_size = 512,
532
533
	.sensitivity_calib_by_driver = true,
	.chain_noise_calib_by_driver = true,
534
	.need_dc_calib = true,
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
};

struct iwl_cfg iwl6000g2b_2agn_cfg = {
	.name = "6000 Series 2x2 AGN Gen2b",
	.fw_name_pre = IWL6000G2B_FW_PRE,
	.ucode_api_max = IWL6000G2_UCODE_API_MAX,
	.ucode_api_min = IWL6000G2_UCODE_API_MIN,
	.sku = IWL_SKU_A|IWL_SKU_G|IWL_SKU_N,
	.ops = &iwl6000g2b_ops,
	.eeprom_size = OTP_LOW_IMAGE_SIZE,
	.eeprom_ver = EEPROM_6000G2_EEPROM_VERSION,
	.eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION,
	.num_of_queues = IWLAGN_NUM_QUEUES,
	.num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES,
	.mod_params = &iwlagn_mod_params,
	.valid_tx_ant = ANT_AB,
	.valid_rx_ant = ANT_AB,
	.pll_cfg_val = 0,
	.set_l0s = true,
	.use_bsm = false,
	.pa_type = IWL_PA_SYSTEM,
	.max_ll_items = OTP_MAX_LL_ITEMS_6x00,
	.shadow_ram_support = true,
	.ht_greenfield_support = true,
	.led_compensation = 51,
Johannes Berg's avatar
Johannes Berg committed
560
	.use_rts_for_aggregation = true, /* use rts/cts protection */
561
562
563
564
	.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
	.supports_idle = true,
	.adv_thermal_throttle = true,
	.support_ct_kill_exit = true,
565
	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DISABLE,
566
	.chain_noise_scale = 1000,
567
	.monitor_recover_period = IWL_LONG_MONITORING_PERIOD,
568
	.max_event_log_size = 512,
569
570
	.sensitivity_calib_by_driver = true,
	.chain_noise_calib_by_driver = true,
571
	.need_dc_calib = true,
572
	.bt_statistics = true,
573
574
575
	/* Due to bluetooth, we transmit 2.4 GHz probes only on antenna A */
	.scan_tx_antennas[IEEE80211_BAND_2GHZ] = ANT_A,
	.advanced_bt_coexist = true,
576
	.bt_init_traffic_load = IWL_BT_COEX_TRAFFIC_LOAD_NONE,
Wey-Yi Guy's avatar
Wey-Yi Guy committed
577
	.bt_prio_boost = IWLAGN_BT_PRIO_BOOST_DEFAULT,
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
};

struct iwl_cfg iwl6000g2b_2abg_cfg = {
	.name = "6000 Series 2x2 ABG Gen2b",
	.fw_name_pre = IWL6000G2B_FW_PRE,
	.ucode_api_max = IWL6000G2_UCODE_API_MAX,
	.ucode_api_min = IWL6000G2_UCODE_API_MIN,
	.sku = IWL_SKU_A|IWL_SKU_G,
	.ops = &iwl6000g2b_ops,
	.eeprom_size = OTP_LOW_IMAGE_SIZE,
	.eeprom_ver = EEPROM_6000G2_EEPROM_VERSION,
	.eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION,
	.num_of_queues = IWLAGN_NUM_QUEUES,
	.num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES,
	.mod_params = &iwlagn_mod_params,
	.valid_tx_ant = ANT_AB,
	.valid_rx_ant = ANT_AB,
	.pll_cfg_val = 0,
	.set_l0s = true,
	.use_bsm = false,
	.pa_type = IWL_PA_SYSTEM,
	.max_ll_items = OTP_MAX_LL_ITEMS_6x00,
	.shadow_ram_support = true,
	.led_compensation = 51,
	.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
	.supports_idle = true,
	.adv_thermal_throttle = true,
	.support_ct_kill_exit = true,
606
	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DISABLE,
607
	.chain_noise_scale = 1000,
608
	.monitor_recover_period = IWL_LONG_MONITORING_PERIOD,
609
	.max_event_log_size = 512,
610
611
	.sensitivity_calib_by_driver = true,
	.chain_noise_calib_by_driver = true,
612
	.need_dc_calib = true,
613
	.bt_statistics = true,
614
615
616
	/* Due to bluetooth, we transmit 2.4 GHz probes only on antenna A */
	.scan_tx_antennas[IEEE80211_BAND_2GHZ] = ANT_A,
	.advanced_bt_coexist = true,
617
	.bt_init_traffic_load = IWL_BT_COEX_TRAFFIC_LOAD_NONE,
Wey-Yi Guy's avatar
Wey-Yi Guy committed
618
	.bt_prio_boost = IWLAGN_BT_PRIO_BOOST_DEFAULT,
619
620
};

621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
struct iwl_cfg iwl6000g2b_2bgn_cfg = {
	.name = "6000 Series 2x2 BGN Gen2b",
	.fw_name_pre = IWL6000G2B_FW_PRE,
	.ucode_api_max = IWL6000G2_UCODE_API_MAX,
	.ucode_api_min = IWL6000G2_UCODE_API_MIN,
	.sku = IWL_SKU_G|IWL_SKU_N,
	.ops = &iwl6000g2b_ops,
	.eeprom_size = OTP_LOW_IMAGE_SIZE,
	.eeprom_ver = EEPROM_6000G2_EEPROM_VERSION,
	.eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION,
	.num_of_queues = IWLAGN_NUM_QUEUES,
	.num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES,
	.mod_params = &iwlagn_mod_params,
	.valid_tx_ant = ANT_AB,
	.valid_rx_ant = ANT_AB,
	.pll_cfg_val = 0,
	.set_l0s = true,
	.use_bsm = false,
	.pa_type = IWL_PA_SYSTEM,
	.max_ll_items = OTP_MAX_LL_ITEMS_6x00,
	.shadow_ram_support = true,
	.ht_greenfield_support = true,
	.led_compensation = 51,
Johannes Berg's avatar
Johannes Berg committed
644
	.use_rts_for_aggregation = true, /* use rts/cts protection */
645
646
647
648
	.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
	.supports_idle = true,
	.adv_thermal_throttle = true,
	.support_ct_kill_exit = true,
649
	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DISABLE,
650
	.chain_noise_scale = 1000,
651
	.monitor_recover_period = IWL_LONG_MONITORING_PERIOD,
652
	.max_event_log_size = 512,
653
654
	.sensitivity_calib_by_driver = true,
	.chain_noise_calib_by_driver = true,
655
	.need_dc_calib = true,
656
	.bt_statistics = true,
657
658
659
	/* Due to bluetooth, we transmit 2.4 GHz probes only on antenna A */
	.scan_tx_antennas[IEEE80211_BAND_2GHZ] = ANT_A,
	.advanced_bt_coexist = true,
660
	.bt_init_traffic_load = IWL_BT_COEX_TRAFFIC_LOAD_NONE,
Wey-Yi Guy's avatar
Wey-Yi Guy committed
661
	.bt_prio_boost = IWLAGN_BT_PRIO_BOOST_DEFAULT,
662
663
};

664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
struct iwl_cfg iwl6000g2b_2bg_cfg = {
	.name = "6000 Series 2x2 BG Gen2b",
	.fw_name_pre = IWL6000G2B_FW_PRE,
	.ucode_api_max = IWL6000G2_UCODE_API_MAX,
	.ucode_api_min = IWL6000G2_UCODE_API_MIN,
	.sku = IWL_SKU_G,
	.ops = &iwl6000g2b_ops,
	.eeprom_size = OTP_LOW_IMAGE_SIZE,
	.eeprom_ver = EEPROM_6000G2_EEPROM_VERSION,
	.eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION,
	.num_of_queues = IWLAGN_NUM_QUEUES,
	.num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES,
	.mod_params = &iwlagn_mod_params,
	.valid_tx_ant = ANT_AB,
	.valid_rx_ant = ANT_AB,
	.pll_cfg_val = 0,
	.set_l0s = true,
	.use_bsm = false,
	.pa_type = IWL_PA_SYSTEM,
	.max_ll_items = OTP_MAX_LL_ITEMS_6x00,
	.shadow_ram_support = true,
	.led_compensation = 51,
	.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
	.supports_idle = true,
	.adv_thermal_throttle = true,
	.support_ct_kill_exit = true,
690
	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DISABLE,
691
	.chain_noise_scale = 1000,
692
	.monitor_recover_period = IWL_LONG_MONITORING_PERIOD,
693
	.max_event_log_size = 512,
694
695
	.sensitivity_calib_by_driver = true,
	.chain_noise_calib_by_driver = true,
696
	.need_dc_calib = true,
697
	.bt_statistics = true,
698
699
700
	/* Due to bluetooth, we transmit 2.4 GHz probes only on antenna A */
	.scan_tx_antennas[IEEE80211_BAND_2GHZ] = ANT_A,
	.advanced_bt_coexist = true,
701
	.bt_init_traffic_load = IWL_BT_COEX_TRAFFIC_LOAD_NONE,
Wey-Yi Guy's avatar
Wey-Yi Guy committed
702
	.bt_prio_boost = IWLAGN_BT_PRIO_BOOST_DEFAULT,
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
};

struct iwl_cfg iwl6000g2b_bgn_cfg = {
	.name = "6000 Series 1x2 BGN Gen2b",
	.fw_name_pre = IWL6000G2B_FW_PRE,
	.ucode_api_max = IWL6000G2_UCODE_API_MAX,
	.ucode_api_min = IWL6000G2_UCODE_API_MIN,
	.sku = IWL_SKU_G|IWL_SKU_N,
	.ops = &iwl6000g2b_ops,
	.eeprom_size = OTP_LOW_IMAGE_SIZE,
	.eeprom_ver = EEPROM_6000G2_EEPROM_VERSION,
	.eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION,
	.num_of_queues = IWLAGN_NUM_QUEUES,
	.num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES,
	.mod_params = &iwlagn_mod_params,
	.valid_tx_ant = ANT_A,
	.valid_rx_ant = ANT_AB,
	.pll_cfg_val = 0,
	.set_l0s = true,
	.use_bsm = false,
	.pa_type = IWL_PA_SYSTEM,
	.max_ll_items = OTP_MAX_LL_ITEMS_6x00,
	.shadow_ram_support = true,
	.ht_greenfield_support = true,
	.led_compensation = 51,
Johannes Berg's avatar
Johannes Berg committed
728
	.use_rts_for_aggregation = true, /* use rts/cts protection */
729
730
731
732
	.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
	.supports_idle = true,
	.adv_thermal_throttle = true,
	.support_ct_kill_exit = true,
733
	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DISABLE,
734
	.chain_noise_scale = 1000,
735
	.monitor_recover_period = IWL_LONG_MONITORING_PERIOD,
736
	.max_event_log_size = 512,
737
738
	.sensitivity_calib_by_driver = true,
	.chain_noise_calib_by_driver = true,
739
	.need_dc_calib = true,
740
	.bt_statistics = true,
741
742
743
	/* Due to bluetooth, we transmit 2.4 GHz probes only on antenna A */
	.scan_tx_antennas[IEEE80211_BAND_2GHZ] = ANT_A,
	.advanced_bt_coexist = true,
744
	.bt_init_traffic_load = IWL_BT_COEX_TRAFFIC_LOAD_NONE,
Wey-Yi Guy's avatar
Wey-Yi Guy committed
745
	.bt_prio_boost = IWLAGN_BT_PRIO_BOOST_DEFAULT,
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
};

struct iwl_cfg iwl6000g2b_bg_cfg = {
	.name = "6000 Series 1x2 BG Gen2b",
	.fw_name_pre = IWL6000G2B_FW_PRE,
	.ucode_api_max = IWL6000G2_UCODE_API_MAX,
	.ucode_api_min = IWL6000G2_UCODE_API_MIN,
	.sku = IWL_SKU_G,
	.ops = &iwl6000g2b_ops,
	.eeprom_size = OTP_LOW_IMAGE_SIZE,
	.eeprom_ver = EEPROM_6000G2_EEPROM_VERSION,
	.eeprom_calib_ver = EEPROM_6000G2_TX_POWER_VERSION,
	.num_of_queues = IWLAGN_NUM_QUEUES,
	.num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES,
	.mod_params = &iwlagn_mod_params,
	.valid_tx_ant = ANT_A,
	.valid_rx_ant = ANT_AB,
	.pll_cfg_val = 0,
	.set_l0s = true,
	.use_bsm = false,
	.pa_type = IWL_PA_SYSTEM,
	.max_ll_items = OTP_MAX_LL_ITEMS_6x00,
	.shadow_ram_support = true,
	.led_compensation = 51,
	.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
	.supports_idle = true,
	.adv_thermal_throttle = true,
	.support_ct_kill_exit = true,
774
	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DISABLE,
775
	.chain_noise_scale = 1000,
776
	.monitor_recover_period = IWL_LONG_MONITORING_PERIOD,
777
	.max_event_log_size = 512,
778
779
	.sensitivity_calib_by_driver = true,
	.chain_noise_calib_by_driver = true,
780
	.need_dc_calib = true,
781
	.bt_statistics = true,
782
783
784
	/* Due to bluetooth, we transmit 2.4 GHz probes only on antenna A */
	.scan_tx_antennas[IEEE80211_BAND_2GHZ] = ANT_A,
	.advanced_bt_coexist = true,
785
	.bt_init_traffic_load = IWL_BT_COEX_TRAFFIC_LOAD_NONE,
Wey-Yi Guy's avatar
Wey-Yi Guy committed
786
	.bt_prio_boost = IWLAGN_BT_PRIO_BOOST_DEFAULT,
787
788
};

789
790
791
/*
 * "i": Internal configuration, use internal Power Amplifier
 */
792
struct iwl_cfg iwl6000i_2agn_cfg = {
793
	.name = "Intel(R) Centrino(R) Advanced-N 6200 AGN",
794
795
796
797
798
	.fw_name_pre = IWL6000_FW_PRE,
	.ucode_api_max = IWL6000_UCODE_API_MAX,
	.ucode_api_min = IWL6000_UCODE_API_MIN,
	.sku = IWL_SKU_A|IWL_SKU_G|IWL_SKU_N,
	.ops = &iwl6000_ops,
799
	.eeprom_size = OTP_LOW_IMAGE_SIZE,
800
	.eeprom_ver = EEPROM_6000_EEPROM_VERSION,
801
	.eeprom_calib_ver = EEPROM_6000_TX_POWER_VERSION,
802
803
	.num_of_queues = IWLAGN_NUM_QUEUES,
	.num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES,
804
	.mod_params = &iwlagn_mod_params,
805
806
	.valid_tx_ant = ANT_BC,
	.valid_rx_ant = ANT_BC,
807
	.pll_cfg_val = 0,
808
	.set_l0s = true,
809
	.use_bsm = false,
810
	.pa_type = IWL_PA_INTERNAL,
811
812
	.max_ll_items = OTP_MAX_LL_ITEMS_6x00,
	.shadow_ram_support = true,
813
	.ht_greenfield_support = true,
814
	.led_compensation = 51,
Johannes Berg's avatar
Johannes Berg committed
815
	.use_rts_for_aggregation = true, /* use rts/cts protection */
816
	.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
817
	.supports_idle = true,
818
	.adv_thermal_throttle = true,
819
	.support_ct_kill_exit = true,
820
	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
821
	.chain_noise_scale = 1000,
Wey-Yi Guy's avatar
Wey-Yi Guy committed
822
	.monitor_recover_period = IWL_DEF_MONITORING_PERIOD,
823
	.max_event_log_size = 1024,
824
	.ucode_tracing = true,
825
826
	.sensitivity_calib_by_driver = true,
	.chain_noise_calib_by_driver = true,
827
828
};

829
struct iwl_cfg iwl6000i_2abg_cfg = {
830
	.name = "Intel(R) Centrino(R) Advanced-N 6200 ABG",
831
832
833
834
835
836
837
	.fw_name_pre = IWL6000_FW_PRE,
	.ucode_api_max = IWL6000_UCODE_API_MAX,
	.ucode_api_min = IWL6000_UCODE_API_MIN,
	.sku = IWL_SKU_A|IWL_SKU_G,
	.ops = &iwl6000_ops,
	.eeprom_size = OTP_LOW_IMAGE_SIZE,
	.eeprom_ver = EEPROM_6000_EEPROM_VERSION,
838
	.eeprom_calib_ver = EEPROM_6000_TX_POWER_VERSION,
839
840
	.num_of_queues = IWLAGN_NUM_QUEUES,
	.num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES,
841
	.mod_params = &iwlagn_mod_params,
842
843
	.valid_tx_ant = ANT_BC,
	.valid_rx_ant = ANT_BC,
844
	.pll_cfg_val = 0,
845
	.set_l0s = true,
846
	.use_bsm = false,
847
848
849
850
	.pa_type = IWL_PA_INTERNAL,
	.max_ll_items = OTP_MAX_LL_ITEMS_6x00,
	.shadow_ram_support = true,
	.led_compensation = 51,
851
	.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
852
	.supports_idle = true,
853
	.adv_thermal_throttle = true,
854
	.support_ct_kill_exit = true,
855
	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
856
	.chain_noise_scale = 1000,
Wey-Yi Guy's avatar
Wey-Yi Guy committed
857
	.monitor_recover_period = IWL_DEF_MONITORING_PERIOD,
858
	.max_event_log_size = 1024,
859
	.ucode_tracing = true,
860
861
	.sensitivity_calib_by_driver = true,
	.chain_noise_calib_by_driver = true,
862
863
864
};

struct iwl_cfg iwl6000i_2bg_cfg = {
865
	.name = "Intel(R) Centrino(R) Advanced-N 6200 BG",
866
867
868
869
870
871
872
	.fw_name_pre = IWL6000_FW_PRE,
	.ucode_api_max = IWL6000_UCODE_API_MAX,
	.ucode_api_min = IWL6000_UCODE_API_MIN,
	.sku = IWL_SKU_G,
	.ops = &iwl6000_ops,
	.eeprom_size = OTP_LOW_IMAGE_SIZE,
	.eeprom_ver = EEPROM_6000_EEPROM_VERSION,
873
	.eeprom_calib_ver = EEPROM_6000_TX_POWER_VERSION,
874
875
	.num_of_queues = IWLAGN_NUM_QUEUES,
	.num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES,
876
	.mod_params = &iwlagn_mod_params,
877
878
	.valid_tx_ant = ANT_BC,
	.valid_rx_ant = ANT_BC,
879
	.pll_cfg_val = 0,
880
	.set_l0s = true,
881
	.use_bsm = false,
882
883
884
885
	.pa_type = IWL_PA_INTERNAL,
	.max_ll_items = OTP_MAX_LL_ITEMS_6x00,
	.shadow_ram_support = true,
	.led_compensation = 51,
886
	.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
887
	.supports_idle = true,
888
	.adv_thermal_throttle = true,
889
	.support_ct_kill_exit = true,
890
	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
891
	.chain_noise_scale = 1000,
Wey-Yi Guy's avatar
Wey-Yi Guy committed
892
	.monitor_recover_period = IWL_DEF_MONITORING_PERIOD,
893
	.max_event_log_size = 1024,
894
	.ucode_tracing = true,
895
896
	.sensitivity_calib_by_driver = true,
	.chain_noise_calib_by_driver = true,
897
898
};

899
struct iwl_cfg iwl6050_2agn_cfg = {
900
	.name = "Intel(R) Centrino(R) Advanced-N + WiMAX 6250 AGN",
901
902
903
904
	.fw_name_pre = IWL6050_FW_PRE,
	.ucode_api_max = IWL6050_UCODE_API_MAX,
	.ucode_api_min = IWL6050_UCODE_API_MIN,
	.sku = IWL_SKU_A|IWL_SKU_G|IWL_SKU_N,
905
	.ops = &iwl6000_ops,
906
	.eeprom_size = OTP_LOW_IMAGE_SIZE,
907
	.eeprom_ver = EEPROM_6050_EEPROM_VERSION,
908
	.eeprom_calib_ver = EEPROM_6050_TX_POWER_VERSION,
909
910
	.num_of_queues = IWLAGN_NUM_QUEUES,
	.num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES,
911
	.mod_params = &iwlagn_mod_params,
912
913
	.valid_tx_ant = ANT_AB,
	.valid_rx_ant = ANT_AB,
914
	.pll_cfg_val = 0,
915
	.set_l0s = true,
916
	.use_bsm = false,
917
	.pa_type = IWL_PA_SYSTEM,
918
	.max_ll_items = OTP_MAX_LL_ITEMS_6x50,
919
	.shadow_ram_support = true,
920
	.ht_greenfield_support = true,
921
	.led_compensation = 51,
Johannes Berg's avatar
Johannes Berg committed
922
	.use_rts_for_aggregation = true, /* use rts/cts protection */
923
	.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
924
925
926
927
928
	.supports_idle = true,
	.adv_thermal_throttle = true,
	.support_ct_kill_exit = true,
	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
	.chain_noise_scale = 1500,
Wey-Yi Guy's avatar
Wey-Yi Guy committed
929
	.monitor_recover_period = IWL_DEF_MONITORING_PERIOD,
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
	.max_event_log_size = 1024,
	.ucode_tracing = true,
	.sensitivity_calib_by_driver = true,
	.chain_noise_calib_by_driver = true,
	.need_dc_calib = true,
};

struct iwl_cfg iwl6050g2_bgn_cfg = {
	.name = "6050 Series 1x2 BGN Gen2",
	.fw_name_pre = IWL6050_FW_PRE,
	.ucode_api_max = IWL6050_UCODE_API_MAX,
	.ucode_api_min = IWL6050_UCODE_API_MIN,
	.sku = IWL_SKU_G|IWL_SKU_N,
	.ops = &iwl6000_ops,
	.eeprom_size = OTP_LOW_IMAGE_SIZE,
	.eeprom_ver = EEPROM_6050G2_EEPROM_VERSION,
	.eeprom_calib_ver = EEPROM_6050G2_TX_POWER_VERSION,
	.num_of_queues = IWLAGN_NUM_QUEUES,
	.num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES,
	.mod_params = &iwlagn_mod_params,
	.valid_tx_ant = ANT_A,
	.valid_rx_ant = ANT_AB,
	.pll_cfg_val = 0,
	.set_l0s = true,
	.use_bsm = false,
	.pa_type = IWL_PA_SYSTEM,
	.max_ll_items = OTP_MAX_LL_ITEMS_6x50,
	.shadow_ram_support = true,
	.ht_greenfield_support = true,
	.led_compensation = 51,
Johannes Berg's avatar
Johannes Berg committed
960
	.use_rts_for_aggregation = true, /* use rts/cts protection */
961
	.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
962
	.supports_idle = true,
963
	.adv_thermal_throttle = true,
964
	.support_ct_kill_exit = true,
965
	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
966
	.chain_noise_scale = 1500,
Wey-Yi Guy's avatar
Wey-Yi Guy committed
967
	.monitor_recover_period = IWL_DEF_MONITORING_PERIOD,
968
	.max_event_log_size = 1024,
969
	.ucode_tracing = true,
970
971
	.sensitivity_calib_by_driver = true,
	.chain_noise_calib_by_driver = true,
972
	.need_dc_calib = true,
973
974
};

975
struct iwl_cfg iwl6050_2abg_cfg = {
976
	.name = "Intel(R) Centrino(R) Advanced-N + WiMAX 6250 ABG",
977
978
979
980
	.fw_name_pre = IWL6050_FW_PRE,
	.ucode_api_max = IWL6050_UCODE_API_MAX,
	.ucode_api_min = IWL6050_UCODE_API_MIN,
	.sku = IWL_SKU_A|IWL_SKU_G,
981
	.ops = &iwl6000_ops,
982
	.eeprom_size = OTP_LOW_IMAGE_SIZE,
983
	.eeprom_ver = EEPROM_6050_EEPROM_VERSION,
984
	.eeprom_calib_ver = EEPROM_6050_TX_POWER_VERSION,
985
986
	.num_of_queues = IWLAGN_NUM_QUEUES,
	.num_of_ampdu_queues = IWLAGN_NUM_AMPDU_QUEUES,
987
	.mod_params = &iwlagn_mod_params,
988
989
	.valid_tx_ant = ANT_AB,
	.valid_rx_ant = ANT_AB,
990
	.pll_cfg_val = 0,
991
	.set_l0s = true,
992
	.use_bsm = false,
993
	.pa_type = IWL_PA_SYSTEM,
994
	.max_ll_items = OTP_MAX_LL_ITEMS_6x50,
995
996
	.shadow_ram_support = true,
	.led_compensation = 51,
997
	.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
998
	.supports_idle = true,
999
	.adv_thermal_throttle = true,
1000
	.support_ct_kill_exit = true,