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#ifndef __IWL_CONFIG_H__
63#define __IWL_CONFIG_H__
64
65#include <linux/types.h>
66#include <linux/netdevice.h>
67#include <linux/ieee80211.h>
68#include <linux/nl80211.h>
69#include "iwl-csr.h"
70
71enum iwl_device_family {
72 IWL_DEVICE_FAMILY_UNDEFINED,
73 IWL_DEVICE_FAMILY_1000,
74 IWL_DEVICE_FAMILY_100,
75 IWL_DEVICE_FAMILY_2000,
76 IWL_DEVICE_FAMILY_2030,
77 IWL_DEVICE_FAMILY_105,
78 IWL_DEVICE_FAMILY_135,
79 IWL_DEVICE_FAMILY_5000,
80 IWL_DEVICE_FAMILY_5150,
81 IWL_DEVICE_FAMILY_6000,
82 IWL_DEVICE_FAMILY_6000i,
83 IWL_DEVICE_FAMILY_6005,
84 IWL_DEVICE_FAMILY_6030,
85 IWL_DEVICE_FAMILY_6050,
86 IWL_DEVICE_FAMILY_6150,
87 IWL_DEVICE_FAMILY_7000,
88 IWL_DEVICE_FAMILY_8000,
89 IWL_DEVICE_FAMILY_9000,
90 IWL_DEVICE_FAMILY_22000,
91 IWL_DEVICE_FAMILY_22560,
92 IWL_DEVICE_FAMILY_AX210,
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
116
117enum iwl_nvm_type {
118 IWL_NVM,
119 IWL_NVM_EXT,
120 IWL_NVM_SDP,
121};
122
123
124
125
126
127#define IWL_MAX_PLCP_ERR_THRESHOLD_MIN 1
128#define IWL_MAX_PLCP_ERR_THRESHOLD_DEF 50
129#define IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF 100
130#define IWL_MAX_PLCP_ERR_EXT_LONG_THRESHOLD_DEF 200
131#define IWL_MAX_PLCP_ERR_THRESHOLD_MAX 255
132#define IWL_MAX_PLCP_ERR_THRESHOLD_DISABLE 0
133
134
135#define IWL_WATCHDOG_DISABLED 0
136#define IWL_DEF_WD_TIMEOUT 2500
137#define IWL_LONG_WD_TIMEOUT 10000
138#define IWL_MAX_WD_TIMEOUT 120000
139
140#define IWL_DEFAULT_MAX_TX_POWER 22
141#define IWL_TX_CSUM_NETIF_FLAGS (NETIF_F_IPV6_CSUM | NETIF_F_IP_CSUM |\
142 NETIF_F_TSO | NETIF_F_TSO6)
143
144
145#define ANT_NONE 0x0
146#define ANT_INVALID 0xff
147#define ANT_A BIT(0)
148#define ANT_B BIT(1)
149#define ANT_C BIT(2)
150#define ANT_AB (ANT_A | ANT_B)
151#define ANT_AC (ANT_A | ANT_C)
152#define ANT_BC (ANT_B | ANT_C)
153#define ANT_ABC (ANT_A | ANT_B | ANT_C)
154#define MAX_ANT_NUM 3
155
156
157static inline u8 num_of_ant(u8 mask)
158{
159 return !!((mask) & ANT_A) +
160 !!((mask) & ANT_B) +
161 !!((mask) & ANT_C);
162}
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178struct iwl_base_params {
179 unsigned int wd_timeout;
180
181 u16 eeprom_size;
182 u16 max_event_log_size;
183
184 u8 pll_cfg:1,
185 shadow_ram_support:1,
186 shadow_reg_enable:1,
187 pcie_l1_allowed:1,
188 apmg_wake_up_wa:1,
189 scd_chain_ext_wa:1;
190
191 u16 num_of_queues;
192 u32 max_tfd_queue_size;
193
194 u8 max_ll_items;
195 u8 led_compensation;
196};
197
198
199
200
201
202
203
204struct iwl_ht_params {
205 u8 ht_greenfield_support:1,
206 stbc:1,
207 ldpc:1,
208 use_rts_for_aggregation:1;
209 u8 ht40_bands;
210};
211
212
213
214
215
216
217struct iwl_tt_tx_backoff {
218 s32 temperature;
219 u32 backoff;
220};
221
222#define TT_TX_BACKOFF_SIZE 6
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240struct iwl_tt_params {
241 u32 ct_kill_entry;
242 u32 ct_kill_exit;
243 u32 ct_kill_duration;
244 u32 dynamic_smps_entry;
245 u32 dynamic_smps_exit;
246 u32 tx_protection_entry;
247 u32 tx_protection_exit;
248 struct iwl_tt_tx_backoff tx_backoff[TT_TX_BACKOFF_SIZE];
249 u8 support_ct_kill:1,
250 support_dynamic_smps:1,
251 support_tx_protection:1,
252 support_tx_backoff:1;
253};
254
255
256
257
258#define EEPROM_REG_BAND_1_CHANNELS 0x08
259#define EEPROM_REG_BAND_2_CHANNELS 0x26
260#define EEPROM_REG_BAND_3_CHANNELS 0x42
261#define EEPROM_REG_BAND_4_CHANNELS 0x5C
262#define EEPROM_REG_BAND_5_CHANNELS 0x74
263#define EEPROM_REG_BAND_24_HT40_CHANNELS 0x82
264#define EEPROM_REG_BAND_52_HT40_CHANNELS 0x92
265#define EEPROM_6000_REG_BAND_24_HT40_CHANNELS 0x80
266#define EEPROM_REGULATORY_BAND_NO_HT40 0
267
268
269#define OTP_LOW_IMAGE_SIZE_2K (2 * 512 * sizeof(u16))
270#define OTP_LOW_IMAGE_SIZE_16K (16 * 512 * sizeof(u16))
271#define OTP_LOW_IMAGE_SIZE_32K (32 * 512 * sizeof(u16))
272
273struct iwl_eeprom_params {
274 const u8 regulatory_bands[7];
275 bool enhanced_txpower;
276};
277
278
279
280
281
282struct iwl_pwr_tx_backoff {
283 u32 pwr;
284 u32 backoff;
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
318struct iwl_csr_params {
319 u8 flag_sw_reset;
320 u8 flag_mac_clock_ready;
321 u8 flag_init_done;
322 u8 flag_mac_access_req;
323 u8 flag_val_mac_access_en;
324 u8 flag_master_dis;
325 u8 flag_stop_master;
326 u8 addr_sw_reset;
327 u32 mac_addr0_otp;
328 u32 mac_addr1_otp;
329 u32 mac_addr0_strap;
330 u32 mac_addr1_strap;
331};
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
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
394struct iwl_cfg {
395
396 const char *name;
397 const char *fw_name_pre;
398
399 const struct iwl_base_params *base_params;
400
401 const struct iwl_ht_params *ht_params;
402 const struct iwl_eeprom_params *eeprom_params;
403 const struct iwl_pwr_tx_backoff *pwr_tx_backoffs;
404 const char *default_nvm_file_C_step;
405 const struct iwl_tt_params *thermal_params;
406 const struct iwl_csr_params *csr;
407 enum iwl_device_family device_family;
408 enum iwl_led_mode led_mode;
409 enum iwl_nvm_type nvm_type;
410 u32 max_data_size;
411 u32 max_inst_size;
412 netdev_features_t features;
413 u32 dccm_offset;
414 u32 dccm_len;
415 u32 dccm2_offset;
416 u32 dccm2_len;
417 u32 smem_offset;
418 u32 smem_len;
419 u32 soc_latency;
420 u16 nvm_ver;
421 u16 nvm_calib_ver;
422 u32 rx_with_siso_diversity:1,
423 bt_shared_single_ant:1,
424 internal_wimax_coex:1,
425 host_interrupt_operation_mode:1,
426 high_temp:1,
427 mac_addr_from_csr:1,
428 lp_xtal_workaround:1,
429 disable_dummy_notification:1,
430 apmg_not_supported:1,
431 mq_rx_supported:1,
432 vht_mu_mimo_supported:1,
433 rf_id:1,
434 integrated:1,
435 use_tfh:1,
436 gen2:1,
437 cdb:1,
438 dbgc_supported:1,
439 bisr_workaround:1,
440 uhb_supported:1;
441 u8 valid_tx_ant;
442 u8 valid_rx_ant;
443 u8 non_shared_ant;
444 u8 nvm_hw_section_num;
445 u8 max_rx_agg_size;
446 u8 max_tx_agg_size;
447 u8 max_ht_ampdu_exponent;
448 u8 max_vht_ampdu_exponent;
449 u8 ucode_api_max;
450 u8 ucode_api_min;
451 u32 min_umac_error_event_table;
452 u32 extra_phy_cfg_flags;
453 u32 d3_debug_data_base_addr;
454 u32 d3_debug_data_length;
455 u32 min_txq_size;
456 u32 umac_prph_offset;
457 u32 fw_mon_smem_write_ptr_addr;
458 u32 fw_mon_smem_write_ptr_msk;
459 u32 fw_mon_smem_cycle_cnt_ptr_addr;
460 u32 fw_mon_smem_cycle_cnt_ptr_msk;
461 u32 gp2_reg_addr;
462 u32 min_256_ba_txq_size;
463};
464
465extern const struct iwl_csr_params iwl_csr_v1;
466extern const struct iwl_csr_params iwl_csr_v2;
467
468
469
470
471#if IS_ENABLED(CONFIG_IWLDVM)
472extern const struct iwl_cfg iwl5300_agn_cfg;
473extern const struct iwl_cfg iwl5100_agn_cfg;
474extern const struct iwl_cfg iwl5350_agn_cfg;
475extern const struct iwl_cfg iwl5100_bgn_cfg;
476extern const struct iwl_cfg iwl5100_abg_cfg;
477extern const struct iwl_cfg iwl5150_agn_cfg;
478extern const struct iwl_cfg iwl5150_abg_cfg;
479extern const struct iwl_cfg iwl6005_2agn_cfg;
480extern const struct iwl_cfg iwl6005_2abg_cfg;
481extern const struct iwl_cfg iwl6005_2bg_cfg;
482extern const struct iwl_cfg iwl6005_2agn_sff_cfg;
483extern const struct iwl_cfg iwl6005_2agn_d_cfg;
484extern const struct iwl_cfg iwl6005_2agn_mow1_cfg;
485extern const struct iwl_cfg iwl6005_2agn_mow2_cfg;
486extern const struct iwl_cfg iwl1030_bgn_cfg;
487extern const struct iwl_cfg iwl1030_bg_cfg;
488extern const struct iwl_cfg iwl6030_2agn_cfg;
489extern const struct iwl_cfg iwl6030_2abg_cfg;
490extern const struct iwl_cfg iwl6030_2bgn_cfg;
491extern const struct iwl_cfg iwl6030_2bg_cfg;
492extern const struct iwl_cfg iwl6000i_2agn_cfg;
493extern const struct iwl_cfg iwl6000i_2abg_cfg;
494extern const struct iwl_cfg iwl6000i_2bg_cfg;
495extern const struct iwl_cfg iwl6000_3agn_cfg;
496extern const struct iwl_cfg iwl6050_2agn_cfg;
497extern const struct iwl_cfg iwl6050_2abg_cfg;
498extern const struct iwl_cfg iwl6150_bgn_cfg;
499extern const struct iwl_cfg iwl6150_bg_cfg;
500extern const struct iwl_cfg iwl1000_bgn_cfg;
501extern const struct iwl_cfg iwl1000_bg_cfg;
502extern const struct iwl_cfg iwl100_bgn_cfg;
503extern const struct iwl_cfg iwl100_bg_cfg;
504extern const struct iwl_cfg iwl130_bgn_cfg;
505extern const struct iwl_cfg iwl130_bg_cfg;
506extern const struct iwl_cfg iwl2000_2bgn_cfg;
507extern const struct iwl_cfg iwl2000_2bgn_d_cfg;
508extern const struct iwl_cfg iwl2030_2bgn_cfg;
509extern const struct iwl_cfg iwl6035_2agn_cfg;
510extern const struct iwl_cfg iwl6035_2agn_sff_cfg;
511extern const struct iwl_cfg iwl105_bgn_cfg;
512extern const struct iwl_cfg iwl105_bgn_d_cfg;
513extern const struct iwl_cfg iwl135_bgn_cfg;
514#endif
515#if IS_ENABLED(CONFIG_IWLMVM)
516extern const struct iwl_cfg iwl7260_2ac_cfg;
517extern const struct iwl_cfg iwl7260_2ac_cfg_high_temp;
518extern const struct iwl_cfg iwl7260_2n_cfg;
519extern const struct iwl_cfg iwl7260_n_cfg;
520extern const struct iwl_cfg iwl3160_2ac_cfg;
521extern const struct iwl_cfg iwl3160_2n_cfg;
522extern const struct iwl_cfg iwl3160_n_cfg;
523extern const struct iwl_cfg iwl3165_2ac_cfg;
524extern const struct iwl_cfg iwl3168_2ac_cfg;
525extern const struct iwl_cfg iwl7265_2ac_cfg;
526extern const struct iwl_cfg iwl7265_2n_cfg;
527extern const struct iwl_cfg iwl7265_n_cfg;
528extern const struct iwl_cfg iwl7265d_2ac_cfg;
529extern const struct iwl_cfg iwl7265d_2n_cfg;
530extern const struct iwl_cfg iwl7265d_n_cfg;
531extern const struct iwl_cfg iwl8260_2n_cfg;
532extern const struct iwl_cfg iwl8260_2ac_cfg;
533extern const struct iwl_cfg iwl8265_2ac_cfg;
534extern const struct iwl_cfg iwl8275_2ac_cfg;
535extern const struct iwl_cfg iwl4165_2ac_cfg;
536extern const struct iwl_cfg iwl9160_2ac_cfg;
537extern const struct iwl_cfg iwl9260_2ac_cfg;
538extern const struct iwl_cfg iwl9260_2ac_160_cfg;
539extern const struct iwl_cfg iwl9260_killer_2ac_cfg;
540extern const struct iwl_cfg iwl9270_2ac_cfg;
541extern const struct iwl_cfg iwl9460_2ac_cfg;
542extern const struct iwl_cfg iwl9560_2ac_cfg;
543extern const struct iwl_cfg iwl9560_2ac_cfg_quz_a0_jf_b0_soc;
544extern const struct iwl_cfg iwl9560_2ac_160_cfg;
545extern const struct iwl_cfg iwl9560_2ac_160_cfg_quz_a0_jf_b0_soc;
546extern const struct iwl_cfg iwl9460_2ac_cfg_soc;
547extern const struct iwl_cfg iwl9461_2ac_cfg_soc;
548extern const struct iwl_cfg iwl9461_2ac_cfg_quz_a0_jf_b0_soc;
549extern const struct iwl_cfg iwl9462_2ac_cfg_soc;
550extern const struct iwl_cfg iwl9462_2ac_cfg_quz_a0_jf_b0_soc;
551extern const struct iwl_cfg iwl9560_2ac_cfg_soc;
552extern const struct iwl_cfg iwl9560_2ac_160_cfg_soc;
553extern const struct iwl_cfg iwl9560_killer_2ac_cfg_soc;
554extern const struct iwl_cfg iwl9560_killer_s_2ac_cfg_soc;
555extern const struct iwl_cfg iwl9560_killer_i_2ac_cfg_quz_a0_jf_b0_soc;
556extern const struct iwl_cfg iwl9560_killer_s_2ac_cfg_quz_a0_jf_b0_soc;
557extern const struct iwl_cfg iwl9460_2ac_cfg_shared_clk;
558extern const struct iwl_cfg iwl9461_2ac_cfg_shared_clk;
559extern const struct iwl_cfg iwl9462_2ac_cfg_shared_clk;
560extern const struct iwl_cfg iwl9560_2ac_cfg_shared_clk;
561extern const struct iwl_cfg iwl9560_2ac_160_cfg_shared_clk;
562extern const struct iwl_cfg iwl9560_killer_2ac_cfg_shared_clk;
563extern const struct iwl_cfg iwl9560_killer_s_2ac_cfg_shared_clk;
564extern const struct iwl_cfg iwl22000_2ac_cfg_hr;
565extern const struct iwl_cfg iwl22000_2ac_cfg_hr_cdb;
566extern const struct iwl_cfg iwl22000_2ac_cfg_jf;
567extern const struct iwl_cfg iwl_ax101_cfg_qu_hr;
568extern const struct iwl_cfg iwl_ax101_cfg_qu_c0_hr_b0;
569extern const struct iwl_cfg iwl_ax101_cfg_quz_hr;
570extern const struct iwl_cfg iwl22000_2ax_cfg_hr;
571extern const struct iwl_cfg iwl_ax200_cfg_cc;
572extern const struct iwl_cfg iwl_ax201_cfg_qu_hr;
573extern const struct iwl_cfg iwl_ax201_cfg_qu_hr;
574extern const struct iwl_cfg iwl_ax201_cfg_qu_c0_hr_b0;
575extern const struct iwl_cfg iwl_ax201_cfg_quz_hr;
576extern const struct iwl_cfg iwl_ax1650i_cfg_quz_hr;
577extern const struct iwl_cfg iwl_ax1650s_cfg_quz_hr;
578extern const struct iwl_cfg killer1650s_2ax_cfg_qu_b0_hr_b0;
579extern const struct iwl_cfg killer1650i_2ax_cfg_qu_b0_hr_b0;
580extern const struct iwl_cfg killer1650s_2ax_cfg_qu_c0_hr_b0;
581extern const struct iwl_cfg killer1650i_2ax_cfg_qu_c0_hr_b0;
582extern const struct iwl_cfg killer1650x_2ax_cfg;
583extern const struct iwl_cfg killer1650w_2ax_cfg;
584extern const struct iwl_cfg iwl9461_2ac_cfg_qu_b0_jf_b0;
585extern const struct iwl_cfg iwl9462_2ac_cfg_qu_b0_jf_b0;
586extern const struct iwl_cfg iwl9560_2ac_cfg_qu_b0_jf_b0;
587extern const struct iwl_cfg iwl9560_2ac_160_cfg_qu_b0_jf_b0;
588extern const struct iwl_cfg iwl9461_2ac_cfg_qu_c0_jf_b0;
589extern const struct iwl_cfg iwl9462_2ac_cfg_qu_c0_jf_b0;
590extern const struct iwl_cfg iwl9560_2ac_cfg_qu_c0_jf_b0;
591extern const struct iwl_cfg iwl9560_2ac_160_cfg_qu_c0_jf_b0;
592extern const struct iwl_cfg killer1550i_2ac_cfg_qu_b0_jf_b0;
593extern const struct iwl_cfg killer1550s_2ac_cfg_qu_b0_jf_b0;
594extern const struct iwl_cfg iwl22000_2ax_cfg_jf;
595extern const struct iwl_cfg iwl22000_2ax_cfg_qnj_hr_a0_f0;
596extern const struct iwl_cfg iwl22000_2ax_cfg_qnj_hr_b0_f0;
597extern const struct iwl_cfg iwl22000_2ax_cfg_qnj_hr_b0;
598extern const struct iwl_cfg iwl9560_2ac_cfg_qnj_jf_b0;
599extern const struct iwl_cfg iwl22000_2ax_cfg_qnj_hr_a0;
600extern const struct iwl_cfg iwlax210_2ax_cfg_so_jf_a0;
601extern const struct iwl_cfg iwlax210_2ax_cfg_so_hr_a0;
602extern const struct iwl_cfg iwlax211_2ax_cfg_so_gf_a0;
603extern const struct iwl_cfg iwlax210_2ax_cfg_ty_gf_a0;
604extern const struct iwl_cfg iwlax411_2ax_cfg_so_gf4_a0;
605#endif
606
607#endif
608