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};
92
93static inline bool iwl_has_secure_boot(u32 hw_rev,
94 enum iwl_device_family family)
95{
96
97 if ((family == IWL_DEVICE_FAMILY_8000) && (hw_rev & 0xC))
98 return true;
99
100 return false;
101}
102
103
104
105
106
107
108
109
110
111
112enum iwl_led_mode {
113 IWL_LED_DEFAULT,
114 IWL_LED_RF_STATE,
115 IWL_LED_BLINK,
116 IWL_LED_DISABLE,
117};
118
119
120
121
122
123#define IWL_MAX_PLCP_ERR_THRESHOLD_MIN 1
124#define IWL_MAX_PLCP_ERR_THRESHOLD_DEF 50
125#define IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF 100
126#define IWL_MAX_PLCP_ERR_EXT_LONG_THRESHOLD_DEF 200
127#define IWL_MAX_PLCP_ERR_THRESHOLD_MAX 255
128#define IWL_MAX_PLCP_ERR_THRESHOLD_DISABLE 0
129
130
131#define IWL_WATCHDOG_DISABLED 0
132#define IWL_DEF_WD_TIMEOUT 2500
133#define IWL_LONG_WD_TIMEOUT 10000
134#define IWL_MAX_WD_TIMEOUT 120000
135
136#define IWL_DEFAULT_MAX_TX_POWER 22
137#define IWL_TX_CSUM_NETIF_FLAGS (NETIF_F_IPV6_CSUM | NETIF_F_IP_CSUM |\
138 NETIF_F_TSO | NETIF_F_TSO6)
139
140
141#define ANT_NONE 0x0
142#define ANT_A BIT(0)
143#define ANT_B BIT(1)
144#define ANT_C BIT(2)
145#define ANT_AB (ANT_A | ANT_B)
146#define ANT_AC (ANT_A | ANT_C)
147#define ANT_BC (ANT_B | ANT_C)
148#define ANT_ABC (ANT_A | ANT_B | ANT_C)
149
150static inline u8 num_of_ant(u8 mask)
151{
152 return !!((mask) & ANT_A) +
153 !!((mask) & ANT_B) +
154 !!((mask) & ANT_C);
155}
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170struct iwl_base_params {
171 unsigned int wd_timeout;
172
173 u16 eeprom_size;
174 u16 max_event_log_size;
175
176 u8 pll_cfg:1,
177 shadow_ram_support:1,
178 shadow_reg_enable:1,
179 pcie_l1_allowed:1,
180 apmg_wake_up_wa:1,
181 scd_chain_ext_wa:1;
182
183 u8 num_of_queues;
184
185 u8 max_ll_items;
186 u8 led_compensation;
187};
188
189
190
191
192
193
194
195struct iwl_ht_params {
196 u8 ht_greenfield_support:1,
197 stbc:1,
198 ldpc:1,
199 use_rts_for_aggregation:1;
200 u8 ht40_bands;
201};
202
203
204
205
206
207
208struct iwl_tt_tx_backoff {
209 s32 temperature;
210 u32 backoff;
211};
212
213#define TT_TX_BACKOFF_SIZE 6
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231struct iwl_tt_params {
232 u32 ct_kill_entry;
233 u32 ct_kill_exit;
234 u32 ct_kill_duration;
235 u32 dynamic_smps_entry;
236 u32 dynamic_smps_exit;
237 u32 tx_protection_entry;
238 u32 tx_protection_exit;
239 struct iwl_tt_tx_backoff tx_backoff[TT_TX_BACKOFF_SIZE];
240 u8 support_ct_kill:1,
241 support_dynamic_smps:1,
242 support_tx_protection:1,
243 support_tx_backoff:1;
244};
245
246
247
248
249#define EEPROM_REG_BAND_1_CHANNELS 0x08
250#define EEPROM_REG_BAND_2_CHANNELS 0x26
251#define EEPROM_REG_BAND_3_CHANNELS 0x42
252#define EEPROM_REG_BAND_4_CHANNELS 0x5C
253#define EEPROM_REG_BAND_5_CHANNELS 0x74
254#define EEPROM_REG_BAND_24_HT40_CHANNELS 0x82
255#define EEPROM_REG_BAND_52_HT40_CHANNELS 0x92
256#define EEPROM_6000_REG_BAND_24_HT40_CHANNELS 0x80
257#define EEPROM_REGULATORY_BAND_NO_HT40 0
258
259
260#define OTP_LOW_IMAGE_SIZE (2 * 512 * sizeof(u16))
261#define OTP_LOW_IMAGE_SIZE_FAMILY_7000 (16 * 512 * sizeof(u16))
262#define OTP_LOW_IMAGE_SIZE_FAMILY_8000 (32 * 512 * sizeof(u16))
263#define OTP_LOW_IMAGE_SIZE_FAMILY_9000 OTP_LOW_IMAGE_SIZE_FAMILY_8000
264#define OTP_LOW_IMAGE_SIZE_FAMILY_A000 OTP_LOW_IMAGE_SIZE_FAMILY_9000
265
266struct iwl_eeprom_params {
267 const u8 regulatory_bands[7];
268 bool enhanced_txpower;
269};
270
271
272
273
274
275struct iwl_pwr_tx_backoff {
276 u32 pwr;
277 u32 backoff;
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
334 const struct iwl_base_params *base_params;
335
336 const struct iwl_ht_params *ht_params;
337 const struct iwl_eeprom_params *eeprom_params;
338 const struct iwl_pwr_tx_backoff *pwr_tx_backoffs;
339 const char *default_nvm_file_B_step;
340 const char *default_nvm_file_C_step;
341 const struct iwl_tt_params *thermal_params;
342 enum iwl_device_family device_family;
343 enum iwl_led_mode led_mode;
344 u32 max_data_size;
345 u32 max_inst_size;
346 netdev_features_t features;
347 u32 dccm_offset;
348 u32 dccm_len;
349 u32 dccm2_offset;
350 u32 dccm2_len;
351 u32 smem_offset;
352 u32 smem_len;
353 u16 nvm_ver;
354 u16 nvm_calib_ver;
355 u16 rx_with_siso_diversity:1,
356 bt_shared_single_ant:1,
357 internal_wimax_coex:1,
358 host_interrupt_operation_mode:1,
359 high_temp:1,
360 mac_addr_from_csr:1,
361 lp_xtal_workaround:1,
362 disable_dummy_notification:1,
363 apmg_not_supported:1,
364 mq_rx_supported:1,
365 vht_mu_mimo_supported:1,
366 rf_id:1,
367 integrated:1,
368 use_tfh:1;
369 u8 valid_tx_ant;
370 u8 valid_rx_ant;
371 u8 non_shared_ant;
372 u8 nvm_hw_section_num;
373 u8 max_rx_agg_size;
374 u8 max_tx_agg_size;
375 u8 max_ht_ampdu_exponent;
376 u8 max_vht_ampdu_exponent;
377 u8 ucode_api_max;
378 u8 ucode_api_min;
379};
380
381
382
383
384#if IS_ENABLED(CONFIG_IWLDVM)
385extern const struct iwl_cfg iwl5300_agn_cfg;
386extern const struct iwl_cfg iwl5100_agn_cfg;
387extern const struct iwl_cfg iwl5350_agn_cfg;
388extern const struct iwl_cfg iwl5100_bgn_cfg;
389extern const struct iwl_cfg iwl5100_abg_cfg;
390extern const struct iwl_cfg iwl5150_agn_cfg;
391extern const struct iwl_cfg iwl5150_abg_cfg;
392extern const struct iwl_cfg iwl6005_2agn_cfg;
393extern const struct iwl_cfg iwl6005_2abg_cfg;
394extern const struct iwl_cfg iwl6005_2bg_cfg;
395extern const struct iwl_cfg iwl6005_2agn_sff_cfg;
396extern const struct iwl_cfg iwl6005_2agn_d_cfg;
397extern const struct iwl_cfg iwl6005_2agn_mow1_cfg;
398extern const struct iwl_cfg iwl6005_2agn_mow2_cfg;
399extern const struct iwl_cfg iwl1030_bgn_cfg;
400extern const struct iwl_cfg iwl1030_bg_cfg;
401extern const struct iwl_cfg iwl6030_2agn_cfg;
402extern const struct iwl_cfg iwl6030_2abg_cfg;
403extern const struct iwl_cfg iwl6030_2bgn_cfg;
404extern const struct iwl_cfg iwl6030_2bg_cfg;
405extern const struct iwl_cfg iwl6000i_2agn_cfg;
406extern const struct iwl_cfg iwl6000i_2abg_cfg;
407extern const struct iwl_cfg iwl6000i_2bg_cfg;
408extern const struct iwl_cfg iwl6000_3agn_cfg;
409extern const struct iwl_cfg iwl6050_2agn_cfg;
410extern const struct iwl_cfg iwl6050_2abg_cfg;
411extern const struct iwl_cfg iwl6150_bgn_cfg;
412extern const struct iwl_cfg iwl6150_bg_cfg;
413extern const struct iwl_cfg iwl1000_bgn_cfg;
414extern const struct iwl_cfg iwl1000_bg_cfg;
415extern const struct iwl_cfg iwl100_bgn_cfg;
416extern const struct iwl_cfg iwl100_bg_cfg;
417extern const struct iwl_cfg iwl130_bgn_cfg;
418extern const struct iwl_cfg iwl130_bg_cfg;
419extern const struct iwl_cfg iwl2000_2bgn_cfg;
420extern const struct iwl_cfg iwl2000_2bgn_d_cfg;
421extern const struct iwl_cfg iwl2030_2bgn_cfg;
422extern const struct iwl_cfg iwl6035_2agn_cfg;
423extern const struct iwl_cfg iwl6035_2agn_sff_cfg;
424extern const struct iwl_cfg iwl105_bgn_cfg;
425extern const struct iwl_cfg iwl105_bgn_d_cfg;
426extern const struct iwl_cfg iwl135_bgn_cfg;
427#endif
428#if IS_ENABLED(CONFIG_IWLMVM)
429extern const struct iwl_cfg iwl7260_2ac_cfg;
430extern const struct iwl_cfg iwl7260_2ac_cfg_high_temp;
431extern const struct iwl_cfg iwl7260_2n_cfg;
432extern const struct iwl_cfg iwl7260_n_cfg;
433extern const struct iwl_cfg iwl3160_2ac_cfg;
434extern const struct iwl_cfg iwl3160_2n_cfg;
435extern const struct iwl_cfg iwl3160_n_cfg;
436extern const struct iwl_cfg iwl3165_2ac_cfg;
437extern const struct iwl_cfg iwl3168_2ac_cfg;
438extern const struct iwl_cfg iwl7265_2ac_cfg;
439extern const struct iwl_cfg iwl7265_2n_cfg;
440extern const struct iwl_cfg iwl7265_n_cfg;
441extern const struct iwl_cfg iwl7265d_2ac_cfg;
442extern const struct iwl_cfg iwl7265d_2n_cfg;
443extern const struct iwl_cfg iwl7265d_n_cfg;
444extern const struct iwl_cfg iwl8260_2n_cfg;
445extern const struct iwl_cfg iwl8260_2ac_cfg;
446extern const struct iwl_cfg iwl8265_2ac_cfg;
447extern const struct iwl_cfg iwl8275_2ac_cfg;
448extern const struct iwl_cfg iwl4165_2ac_cfg;
449extern const struct iwl_cfg iwl8260_2ac_sdio_cfg;
450extern const struct iwl_cfg iwl8265_2ac_sdio_cfg;
451extern const struct iwl_cfg iwl4165_2ac_sdio_cfg;
452extern const struct iwl_cfg iwl9000lc_2ac_cfg;
453extern const struct iwl_cfg iwl9160_2ac_cfg;
454extern const struct iwl_cfg iwl9260_2ac_cfg;
455extern const struct iwl_cfg iwl9270_2ac_cfg;
456extern const struct iwl_cfg iwl9460_2ac_cfg;
457extern const struct iwl_cfg iwl9560_2ac_cfg;
458extern const struct iwl_cfg iwla000_2ac_cfg;
459#endif
460
461#endif
462