1
2
3
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65#ifndef __IWL_CONFIG_H__
66#define __IWL_CONFIG_H__
67
68#include <linux/types.h>
69#include <linux/netdevice.h>
70#include <linux/ieee80211.h>
71#include <linux/nl80211.h>
72
73enum iwl_device_family {
74 IWL_DEVICE_FAMILY_UNDEFINED,
75 IWL_DEVICE_FAMILY_1000,
76 IWL_DEVICE_FAMILY_100,
77 IWL_DEVICE_FAMILY_2000,
78 IWL_DEVICE_FAMILY_2030,
79 IWL_DEVICE_FAMILY_105,
80 IWL_DEVICE_FAMILY_135,
81 IWL_DEVICE_FAMILY_5000,
82 IWL_DEVICE_FAMILY_5150,
83 IWL_DEVICE_FAMILY_6000,
84 IWL_DEVICE_FAMILY_6000i,
85 IWL_DEVICE_FAMILY_6005,
86 IWL_DEVICE_FAMILY_6030,
87 IWL_DEVICE_FAMILY_6050,
88 IWL_DEVICE_FAMILY_6150,
89 IWL_DEVICE_FAMILY_7000,
90 IWL_DEVICE_FAMILY_8000,
91 IWL_DEVICE_FAMILY_9000,
92 IWL_DEVICE_FAMILY_A000,
93};
94
95
96
97
98
99
100
101
102
103
104enum iwl_led_mode {
105 IWL_LED_DEFAULT,
106 IWL_LED_RF_STATE,
107 IWL_LED_BLINK,
108 IWL_LED_DISABLE,
109};
110
111
112
113
114
115#define IWL_MAX_PLCP_ERR_THRESHOLD_MIN 1
116#define IWL_MAX_PLCP_ERR_THRESHOLD_DEF 50
117#define IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF 100
118#define IWL_MAX_PLCP_ERR_EXT_LONG_THRESHOLD_DEF 200
119#define IWL_MAX_PLCP_ERR_THRESHOLD_MAX 255
120#define IWL_MAX_PLCP_ERR_THRESHOLD_DISABLE 0
121
122
123#define IWL_WATCHDOG_DISABLED 0
124#define IWL_DEF_WD_TIMEOUT 2500
125#define IWL_LONG_WD_TIMEOUT 10000
126#define IWL_MAX_WD_TIMEOUT 120000
127
128#define IWL_DEFAULT_MAX_TX_POWER 22
129#define IWL_TX_CSUM_NETIF_FLAGS (NETIF_F_IPV6_CSUM | NETIF_F_IP_CSUM |\
130 NETIF_F_TSO | NETIF_F_TSO6)
131
132
133#define ANT_NONE 0x0
134#define ANT_INVALID 0xff
135#define ANT_A BIT(0)
136#define ANT_B BIT(1)
137#define ANT_C BIT(2)
138#define ANT_AB (ANT_A | ANT_B)
139#define ANT_AC (ANT_A | ANT_C)
140#define ANT_BC (ANT_B | ANT_C)
141#define ANT_ABC (ANT_A | ANT_B | ANT_C)
142
143static inline u8 num_of_ant(u8 mask)
144{
145 return !!((mask) & ANT_A) +
146 !!((mask) & ANT_B) +
147 !!((mask) & ANT_C);
148}
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163struct iwl_base_params {
164 unsigned int wd_timeout;
165
166 u16 eeprom_size;
167 u16 max_event_log_size;
168
169 u8 pll_cfg:1,
170 shadow_ram_support:1,
171 shadow_reg_enable:1,
172 pcie_l1_allowed:1,
173 apmg_wake_up_wa:1,
174 scd_chain_ext_wa:1;
175
176 u16 num_of_queues;
177
178 u8 max_ll_items;
179 u8 led_compensation;
180};
181
182
183
184
185
186
187
188struct iwl_ht_params {
189 u8 ht_greenfield_support:1,
190 stbc:1,
191 ldpc:1,
192 use_rts_for_aggregation:1;
193 u8 ht40_bands;
194};
195
196
197
198
199
200
201struct iwl_tt_tx_backoff {
202 s32 temperature;
203 u32 backoff;
204};
205
206#define TT_TX_BACKOFF_SIZE 6
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224struct iwl_tt_params {
225 u32 ct_kill_entry;
226 u32 ct_kill_exit;
227 u32 ct_kill_duration;
228 u32 dynamic_smps_entry;
229 u32 dynamic_smps_exit;
230 u32 tx_protection_entry;
231 u32 tx_protection_exit;
232 struct iwl_tt_tx_backoff tx_backoff[TT_TX_BACKOFF_SIZE];
233 u8 support_ct_kill:1,
234 support_dynamic_smps:1,
235 support_tx_protection:1,
236 support_tx_backoff:1;
237};
238
239
240
241
242#define EEPROM_REG_BAND_1_CHANNELS 0x08
243#define EEPROM_REG_BAND_2_CHANNELS 0x26
244#define EEPROM_REG_BAND_3_CHANNELS 0x42
245#define EEPROM_REG_BAND_4_CHANNELS 0x5C
246#define EEPROM_REG_BAND_5_CHANNELS 0x74
247#define EEPROM_REG_BAND_24_HT40_CHANNELS 0x82
248#define EEPROM_REG_BAND_52_HT40_CHANNELS 0x92
249#define EEPROM_6000_REG_BAND_24_HT40_CHANNELS 0x80
250#define EEPROM_REGULATORY_BAND_NO_HT40 0
251
252
253#define OTP_LOW_IMAGE_SIZE (2 * 512 * sizeof(u16))
254#define OTP_LOW_IMAGE_SIZE_FAMILY_7000 (16 * 512 * sizeof(u16))
255#define OTP_LOW_IMAGE_SIZE_FAMILY_8000 (32 * 512 * sizeof(u16))
256#define OTP_LOW_IMAGE_SIZE_FAMILY_9000 OTP_LOW_IMAGE_SIZE_FAMILY_8000
257#define OTP_LOW_IMAGE_SIZE_FAMILY_A000 OTP_LOW_IMAGE_SIZE_FAMILY_9000
258
259struct iwl_eeprom_params {
260 const u8 regulatory_bands[7];
261 bool enhanced_txpower;
262};
263
264
265
266
267
268struct iwl_pwr_tx_backoff {
269 u32 pwr;
270 u32 backoff;
271};
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329struct iwl_cfg {
330
331 const char *name;
332 const char *fw_name_pre;
333 const char *fw_name_pre_b_or_c_step;
334 const char *fw_name_pre_rf_next_step;
335
336 const struct iwl_base_params *base_params;
337
338 const struct iwl_ht_params *ht_params;
339 const struct iwl_eeprom_params *eeprom_params;
340 const struct iwl_pwr_tx_backoff *pwr_tx_backoffs;
341 const char *default_nvm_file_C_step;
342 const struct iwl_tt_params *thermal_params;
343 enum iwl_device_family device_family;
344 enum iwl_led_mode led_mode;
345 u32 max_data_size;
346 u32 max_inst_size;
347 netdev_features_t features;
348 u32 dccm_offset;
349 u32 dccm_len;
350 u32 dccm2_offset;
351 u32 dccm2_len;
352 u32 smem_offset;
353 u32 smem_len;
354 u16 nvm_ver;
355 u16 nvm_calib_ver;
356 u16 rx_with_siso_diversity:1,
357 bt_shared_single_ant:1,
358 internal_wimax_coex:1,
359 host_interrupt_operation_mode:1,
360 high_temp:1,
361 mac_addr_from_csr:1,
362 lp_xtal_workaround:1,
363 disable_dummy_notification:1,
364 apmg_not_supported:1,
365 mq_rx_supported:1,
366 vht_mu_mimo_supported:1,
367 rf_id:1,
368 integrated:1,
369 use_tfh:1,
370 gen2:1,
371 cdb:1,
372 ext_nvm:1,
373 dbgc_supported:1;
374 u8 valid_tx_ant;
375 u8 valid_rx_ant;
376 u8 non_shared_ant;
377 u8 nvm_hw_section_num;
378 u8 max_rx_agg_size;
379 u8 max_tx_agg_size;
380 u8 max_ht_ampdu_exponent;
381 u8 max_vht_ampdu_exponent;
382 u8 ucode_api_max;
383 u8 ucode_api_min;
384};
385
386
387
388
389#if IS_ENABLED(CONFIG_IWLDVM)
390extern const struct iwl_cfg iwl5300_agn_cfg;
391extern const struct iwl_cfg iwl5100_agn_cfg;
392extern const struct iwl_cfg iwl5350_agn_cfg;
393extern const struct iwl_cfg iwl5100_bgn_cfg;
394extern const struct iwl_cfg iwl5100_abg_cfg;
395extern const struct iwl_cfg iwl5150_agn_cfg;
396extern const struct iwl_cfg iwl5150_abg_cfg;
397extern const struct iwl_cfg iwl6005_2agn_cfg;
398extern const struct iwl_cfg iwl6005_2abg_cfg;
399extern const struct iwl_cfg iwl6005_2bg_cfg;
400extern const struct iwl_cfg iwl6005_2agn_sff_cfg;
401extern const struct iwl_cfg iwl6005_2agn_d_cfg;
402extern const struct iwl_cfg iwl6005_2agn_mow1_cfg;
403extern const struct iwl_cfg iwl6005_2agn_mow2_cfg;
404extern const struct iwl_cfg iwl1030_bgn_cfg;
405extern const struct iwl_cfg iwl1030_bg_cfg;
406extern const struct iwl_cfg iwl6030_2agn_cfg;
407extern const struct iwl_cfg iwl6030_2abg_cfg;
408extern const struct iwl_cfg iwl6030_2bgn_cfg;
409extern const struct iwl_cfg iwl6030_2bg_cfg;
410extern const struct iwl_cfg iwl6000i_2agn_cfg;
411extern const struct iwl_cfg iwl6000i_2abg_cfg;
412extern const struct iwl_cfg iwl6000i_2bg_cfg;
413extern const struct iwl_cfg iwl6000_3agn_cfg;
414extern const struct iwl_cfg iwl6050_2agn_cfg;
415extern const struct iwl_cfg iwl6050_2abg_cfg;
416extern const struct iwl_cfg iwl6150_bgn_cfg;
417extern const struct iwl_cfg iwl6150_bg_cfg;
418extern const struct iwl_cfg iwl1000_bgn_cfg;
419extern const struct iwl_cfg iwl1000_bg_cfg;
420extern const struct iwl_cfg iwl100_bgn_cfg;
421extern const struct iwl_cfg iwl100_bg_cfg;
422extern const struct iwl_cfg iwl130_bgn_cfg;
423extern const struct iwl_cfg iwl130_bg_cfg;
424extern const struct iwl_cfg iwl2000_2bgn_cfg;
425extern const struct iwl_cfg iwl2000_2bgn_d_cfg;
426extern const struct iwl_cfg iwl2030_2bgn_cfg;
427extern const struct iwl_cfg iwl6035_2agn_cfg;
428extern const struct iwl_cfg iwl6035_2agn_sff_cfg;
429extern const struct iwl_cfg iwl105_bgn_cfg;
430extern const struct iwl_cfg iwl105_bgn_d_cfg;
431extern const struct iwl_cfg iwl135_bgn_cfg;
432#endif
433#if IS_ENABLED(CONFIG_IWLMVM)
434extern const struct iwl_cfg iwl7260_2ac_cfg;
435extern const struct iwl_cfg iwl7260_2ac_cfg_high_temp;
436extern const struct iwl_cfg iwl7260_2n_cfg;
437extern const struct iwl_cfg iwl7260_n_cfg;
438extern const struct iwl_cfg iwl3160_2ac_cfg;
439extern const struct iwl_cfg iwl3160_2n_cfg;
440extern const struct iwl_cfg iwl3160_n_cfg;
441extern const struct iwl_cfg iwl3165_2ac_cfg;
442extern const struct iwl_cfg iwl3168_2ac_cfg;
443extern const struct iwl_cfg iwl7265_2ac_cfg;
444extern const struct iwl_cfg iwl7265_2n_cfg;
445extern const struct iwl_cfg iwl7265_n_cfg;
446extern const struct iwl_cfg iwl7265d_2ac_cfg;
447extern const struct iwl_cfg iwl7265d_2n_cfg;
448extern const struct iwl_cfg iwl7265d_n_cfg;
449extern const struct iwl_cfg iwl8260_2n_cfg;
450extern const struct iwl_cfg iwl8260_2ac_cfg;
451extern const struct iwl_cfg iwl8265_2ac_cfg;
452extern const struct iwl_cfg iwl8275_2ac_cfg;
453extern const struct iwl_cfg iwl4165_2ac_cfg;
454extern const struct iwl_cfg iwl8260_2ac_sdio_cfg;
455extern const struct iwl_cfg iwl8265_2ac_sdio_cfg;
456extern const struct iwl_cfg iwl4165_2ac_sdio_cfg;
457extern const struct iwl_cfg iwl9160_2ac_cfg;
458extern const struct iwl_cfg iwl9260_2ac_cfg;
459extern const struct iwl_cfg iwl9270_2ac_cfg;
460extern const struct iwl_cfg iwl9460_2ac_cfg;
461extern const struct iwl_cfg iwl9560_2ac_cfg;
462extern const struct iwl_cfg iwla000_2ac_cfg_hr;
463extern const struct iwl_cfg iwla000_2ac_cfg_hr_cdb;
464extern const struct iwl_cfg iwla000_2ac_cfg_jf;
465extern const struct iwl_cfg iwla000_2ax_cfg_hr;
466#endif
467
468#endif
469