1
2
3
4
5
6#ifndef __IWL_CONFIG_H__
7#define __IWL_CONFIG_H__
8
9#include <linux/types.h>
10#include <linux/netdevice.h>
11#include <linux/ieee80211.h>
12#include <linux/nl80211.h>
13#include "iwl-csr.h"
14
15enum iwl_device_family {
16 IWL_DEVICE_FAMILY_UNDEFINED,
17 IWL_DEVICE_FAMILY_1000,
18 IWL_DEVICE_FAMILY_100,
19 IWL_DEVICE_FAMILY_2000,
20 IWL_DEVICE_FAMILY_2030,
21 IWL_DEVICE_FAMILY_105,
22 IWL_DEVICE_FAMILY_135,
23 IWL_DEVICE_FAMILY_5000,
24 IWL_DEVICE_FAMILY_5150,
25 IWL_DEVICE_FAMILY_6000,
26 IWL_DEVICE_FAMILY_6000i,
27 IWL_DEVICE_FAMILY_6005,
28 IWL_DEVICE_FAMILY_6030,
29 IWL_DEVICE_FAMILY_6050,
30 IWL_DEVICE_FAMILY_6150,
31 IWL_DEVICE_FAMILY_7000,
32 IWL_DEVICE_FAMILY_8000,
33 IWL_DEVICE_FAMILY_9000,
34 IWL_DEVICE_FAMILY_22000,
35 IWL_DEVICE_FAMILY_AX210,
36};
37
38
39
40
41
42
43
44
45
46
47enum iwl_led_mode {
48 IWL_LED_DEFAULT,
49 IWL_LED_RF_STATE,
50 IWL_LED_BLINK,
51 IWL_LED_DISABLE,
52};
53
54
55
56
57
58
59
60enum iwl_nvm_type {
61 IWL_NVM,
62 IWL_NVM_EXT,
63 IWL_NVM_SDP,
64};
65
66
67
68
69
70#define IWL_MAX_PLCP_ERR_THRESHOLD_MIN 1
71#define IWL_MAX_PLCP_ERR_THRESHOLD_DEF 50
72#define IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF 100
73#define IWL_MAX_PLCP_ERR_EXT_LONG_THRESHOLD_DEF 200
74#define IWL_MAX_PLCP_ERR_THRESHOLD_MAX 255
75#define IWL_MAX_PLCP_ERR_THRESHOLD_DISABLE 0
76
77
78#define IWL_WATCHDOG_DISABLED 0
79#define IWL_DEF_WD_TIMEOUT 2500
80#define IWL_LONG_WD_TIMEOUT 10000
81#define IWL_MAX_WD_TIMEOUT 120000
82
83#define IWL_DEFAULT_MAX_TX_POWER 22
84#define IWL_TX_CSUM_NETIF_FLAGS (NETIF_F_IPV6_CSUM | NETIF_F_IP_CSUM |\
85 NETIF_F_TSO | NETIF_F_TSO6)
86
87
88#define ANT_NONE 0x0
89#define ANT_INVALID 0xff
90#define ANT_A BIT(0)
91#define ANT_B BIT(1)
92#define ANT_C BIT(2)
93#define ANT_AB (ANT_A | ANT_B)
94#define ANT_AC (ANT_A | ANT_C)
95#define ANT_BC (ANT_B | ANT_C)
96#define ANT_ABC (ANT_A | ANT_B | ANT_C)
97#define MAX_ANT_NUM 3
98
99
100static inline u8 num_of_ant(u8 mask)
101{
102 return !!((mask) & ANT_A) +
103 !!((mask) & ANT_B) +
104 !!((mask) & ANT_C);
105}
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122struct iwl_base_params {
123 unsigned int wd_timeout;
124
125 u16 eeprom_size;
126 u16 max_event_log_size;
127
128 u8 pll_cfg:1,
129 shadow_ram_support:1,
130 shadow_reg_enable:1,
131 pcie_l1_allowed:1,
132 apmg_wake_up_wa:1,
133 scd_chain_ext_wa:1;
134
135 u16 num_of_queues;
136 u32 max_tfd_queue_size;
137
138 u8 max_ll_items;
139 u8 led_compensation;
140};
141
142
143
144
145
146
147
148struct iwl_ht_params {
149 u8 ht_greenfield_support:1,
150 stbc:1,
151 ldpc:1,
152 use_rts_for_aggregation:1;
153 u8 ht40_bands;
154};
155
156
157
158
159
160
161struct iwl_tt_tx_backoff {
162 s32 temperature;
163 u32 backoff;
164};
165
166#define TT_TX_BACKOFF_SIZE 6
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184struct iwl_tt_params {
185 u32 ct_kill_entry;
186 u32 ct_kill_exit;
187 u32 ct_kill_duration;
188 u32 dynamic_smps_entry;
189 u32 dynamic_smps_exit;
190 u32 tx_protection_entry;
191 u32 tx_protection_exit;
192 struct iwl_tt_tx_backoff tx_backoff[TT_TX_BACKOFF_SIZE];
193 u8 support_ct_kill:1,
194 support_dynamic_smps:1,
195 support_tx_protection:1,
196 support_tx_backoff:1;
197};
198
199
200
201
202#define EEPROM_REG_BAND_1_CHANNELS 0x08
203#define EEPROM_REG_BAND_2_CHANNELS 0x26
204#define EEPROM_REG_BAND_3_CHANNELS 0x42
205#define EEPROM_REG_BAND_4_CHANNELS 0x5C
206#define EEPROM_REG_BAND_5_CHANNELS 0x74
207#define EEPROM_REG_BAND_24_HT40_CHANNELS 0x82
208#define EEPROM_REG_BAND_52_HT40_CHANNELS 0x92
209#define EEPROM_6000_REG_BAND_24_HT40_CHANNELS 0x80
210#define EEPROM_REGULATORY_BAND_NO_HT40 0
211
212
213#define OTP_LOW_IMAGE_SIZE_2K (2 * 512 * sizeof(u16))
214#define OTP_LOW_IMAGE_SIZE_16K (16 * 512 * sizeof(u16))
215#define OTP_LOW_IMAGE_SIZE_32K (32 * 512 * sizeof(u16))
216
217struct iwl_eeprom_params {
218 const u8 regulatory_bands[7];
219 bool enhanced_txpower;
220};
221
222
223
224
225
226struct iwl_pwr_tx_backoff {
227 u32 pwr;
228 u32 backoff;
229};
230
231enum iwl_cfg_trans_ltr_delay {
232 IWL_CFG_TRANS_LTR_DELAY_NONE = 0,
233 IWL_CFG_TRANS_LTR_DELAY_200US = 1,
234 IWL_CFG_TRANS_LTR_DELAY_2500US = 2,
235 IWL_CFG_TRANS_LTR_DELAY_1820US = 3,
236};
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260struct iwl_cfg_trans_params {
261 const struct iwl_base_params *base_params;
262 enum iwl_device_family device_family;
263 u32 umac_prph_offset;
264 u32 xtal_latency;
265 u32 extra_phy_cfg_flags;
266 u32 rf_id:1,
267 use_tfh:1,
268 gen2:1,
269 mq_rx_supported:1,
270 integrated:1,
271 low_latency_xtal:1,
272 bisr_workaround:1,
273 ltr_delay:2;
274};
275
276
277
278
279
280
281struct iwl_fw_mon_reg {
282 u32 addr;
283 u32 mask;
284};
285
286
287
288
289
290
291
292struct iwl_fw_mon_regs {
293 struct iwl_fw_mon_reg write_ptr;
294 struct iwl_fw_mon_reg cycle_cnt;
295 struct iwl_fw_mon_reg cur_frag;
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
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351struct iwl_cfg {
352 struct iwl_cfg_trans_params trans;
353
354 const char *name;
355 const char *fw_name_pre;
356
357 const struct iwl_ht_params *ht_params;
358 const struct iwl_eeprom_params *eeprom_params;
359 const struct iwl_pwr_tx_backoff *pwr_tx_backoffs;
360 const char *default_nvm_file_C_step;
361 const struct iwl_tt_params *thermal_params;
362 enum iwl_led_mode led_mode;
363 enum iwl_nvm_type nvm_type;
364 u32 max_data_size;
365 u32 max_inst_size;
366 netdev_features_t features;
367 u32 dccm_offset;
368 u32 dccm_len;
369 u32 dccm2_offset;
370 u32 dccm2_len;
371 u32 smem_offset;
372 u32 smem_len;
373 u16 nvm_ver;
374 u16 nvm_calib_ver;
375 u32 rx_with_siso_diversity:1,
376 tx_with_siso_diversity:1,
377 bt_shared_single_ant:1,
378 internal_wimax_coex:1,
379 host_interrupt_operation_mode:1,
380 high_temp:1,
381 mac_addr_from_csr:1,
382 lp_xtal_workaround:1,
383 disable_dummy_notification:1,
384 apmg_not_supported:1,
385 vht_mu_mimo_supported:1,
386 cdb:1,
387 dbgc_supported:1,
388 uhb_supported:1;
389 u8 valid_tx_ant;
390 u8 valid_rx_ant;
391 u8 non_shared_ant;
392 u8 nvm_hw_section_num;
393 u8 max_tx_agg_size;
394 u8 ucode_api_max;
395 u8 ucode_api_min;
396 u16 num_rbds;
397 u32 min_umac_error_event_table;
398 u32 d3_debug_data_base_addr;
399 u32 d3_debug_data_length;
400 u32 min_txq_size;
401 u32 gp2_reg_addr;
402 u32 min_256_ba_txq_size;
403 const struct iwl_fw_mon_regs mon_dram_regs;
404 const struct iwl_fw_mon_regs mon_smem_regs;
405};
406
407#define IWL_CFG_ANY (~0)
408
409#define IWL_CFG_MAC_TYPE_PU 0x31
410#define IWL_CFG_MAC_TYPE_PNJ 0x32
411#define IWL_CFG_MAC_TYPE_TH 0x32
412#define IWL_CFG_MAC_TYPE_QU 0x33
413#define IWL_CFG_MAC_TYPE_QUZ 0x35
414#define IWL_CFG_MAC_TYPE_QNJ 0x36
415#define IWL_CFG_MAC_TYPE_SO 0x37
416#define IWL_CFG_MAC_TYPE_SNJ 0x42
417#define IWL_CFG_MAC_TYPE_SOF 0x43
418#define IWL_CFG_MAC_TYPE_MA 0x44
419
420#define IWL_CFG_RF_TYPE_TH 0x105
421#define IWL_CFG_RF_TYPE_TH1 0x108
422#define IWL_CFG_RF_TYPE_JF2 0x105
423#define IWL_CFG_RF_TYPE_JF1 0x108
424#define IWL_CFG_RF_TYPE_HR2 0x10A
425#define IWL_CFG_RF_TYPE_HR1 0x10C
426#define IWL_CFG_RF_TYPE_GF 0x10D
427#define IWL_CFG_RF_TYPE_MR 0x110
428
429#define IWL_CFG_RF_ID_TH 0x1
430#define IWL_CFG_RF_ID_TH1 0x1
431#define IWL_CFG_RF_ID_JF 0x3
432#define IWL_CFG_RF_ID_JF1 0x6
433#define IWL_CFG_RF_ID_JF1_DIV 0xA
434#define IWL_CFG_RF_ID_HR 0x7
435#define IWL_CFG_RF_ID_HR1 0x4
436
437#define IWL_CFG_NO_160 0x1
438#define IWL_CFG_160 0x0
439
440#define IWL_CFG_CORES_BT 0x0
441#define IWL_CFG_CORES_BT_GNSS 0x5
442
443#define IWL_CFG_NO_CDB 0x0
444#define IWL_CFG_CDB 0x1
445
446#define IWL_SUBDEVICE_RF_ID(subdevice) ((u16)((subdevice) & 0x00F0) >> 4)
447#define IWL_SUBDEVICE_NO_160(subdevice) ((u16)((subdevice) & 0x0200) >> 9)
448#define IWL_SUBDEVICE_CORES(subdevice) ((u16)((subdevice) & 0x1C00) >> 10)
449
450struct iwl_dev_info {
451 u16 device;
452 u16 subdevice;
453 u16 mac_type;
454 u16 rf_type;
455 u8 mac_step;
456 u8 rf_id;
457 u8 no_160;
458 u8 cores;
459 u8 cdb;
460 const struct iwl_cfg *cfg;
461 const char *name;
462};
463
464
465
466
467extern const struct iwl_cfg_trans_params iwl9000_trans_cfg;
468extern const struct iwl_cfg_trans_params iwl9560_trans_cfg;
469extern const struct iwl_cfg_trans_params iwl9560_long_latency_trans_cfg;
470extern const struct iwl_cfg_trans_params iwl9560_shared_clk_trans_cfg;
471extern const struct iwl_cfg_trans_params iwl_qnj_trans_cfg;
472extern const struct iwl_cfg_trans_params iwl_qu_trans_cfg;
473extern const struct iwl_cfg_trans_params iwl_qu_medium_latency_trans_cfg;
474extern const struct iwl_cfg_trans_params iwl_qu_long_latency_trans_cfg;
475extern const struct iwl_cfg_trans_params iwl_ax200_trans_cfg;
476extern const struct iwl_cfg_trans_params iwl_snj_trans_cfg;
477extern const struct iwl_cfg_trans_params iwl_so_trans_cfg;
478extern const struct iwl_cfg_trans_params iwl_so_long_latency_trans_cfg;
479extern const struct iwl_cfg_trans_params iwl_ma_trans_cfg;
480extern const char iwl9162_name[];
481extern const char iwl9260_name[];
482extern const char iwl9260_1_name[];
483extern const char iwl9270_name[];
484extern const char iwl9461_name[];
485extern const char iwl9462_name[];
486extern const char iwl9560_name[];
487extern const char iwl9162_160_name[];
488extern const char iwl9260_160_name[];
489extern const char iwl9270_160_name[];
490extern const char iwl9461_160_name[];
491extern const char iwl9462_160_name[];
492extern const char iwl9560_160_name[];
493extern const char iwl9260_killer_1550_name[];
494extern const char iwl9560_killer_1550i_name[];
495extern const char iwl9560_killer_1550s_name[];
496extern const char iwl_ax200_name[];
497extern const char iwl_ax203_name[];
498extern const char iwl_ax201_name[];
499extern const char iwl_ax101_name[];
500extern const char iwl_ax200_killer_1650w_name[];
501extern const char iwl_ax200_killer_1650x_name[];
502extern const char iwl_ax201_killer_1650s_name[];
503extern const char iwl_ax201_killer_1650i_name[];
504extern const char iwl_ma_name[];
505extern const char iwl_ax211_name[];
506extern const char iwl_ax411_name[];
507#if IS_ENABLED(CONFIG_IWLDVM)
508extern const struct iwl_cfg iwl5300_agn_cfg;
509extern const struct iwl_cfg iwl5100_agn_cfg;
510extern const struct iwl_cfg iwl5350_agn_cfg;
511extern const struct iwl_cfg iwl5100_bgn_cfg;
512extern const struct iwl_cfg iwl5100_abg_cfg;
513extern const struct iwl_cfg iwl5150_agn_cfg;
514extern const struct iwl_cfg iwl5150_abg_cfg;
515extern const struct iwl_cfg iwl6005_2agn_cfg;
516extern const struct iwl_cfg iwl6005_2abg_cfg;
517extern const struct iwl_cfg iwl6005_2bg_cfg;
518extern const struct iwl_cfg iwl6005_2agn_sff_cfg;
519extern const struct iwl_cfg iwl6005_2agn_d_cfg;
520extern const struct iwl_cfg iwl6005_2agn_mow1_cfg;
521extern const struct iwl_cfg iwl6005_2agn_mow2_cfg;
522extern const struct iwl_cfg iwl1030_bgn_cfg;
523extern const struct iwl_cfg iwl1030_bg_cfg;
524extern const struct iwl_cfg iwl6030_2agn_cfg;
525extern const struct iwl_cfg iwl6030_2abg_cfg;
526extern const struct iwl_cfg iwl6030_2bgn_cfg;
527extern const struct iwl_cfg iwl6030_2bg_cfg;
528extern const struct iwl_cfg iwl6000i_2agn_cfg;
529extern const struct iwl_cfg iwl6000i_2abg_cfg;
530extern const struct iwl_cfg iwl6000i_2bg_cfg;
531extern const struct iwl_cfg iwl6000_3agn_cfg;
532extern const struct iwl_cfg iwl6050_2agn_cfg;
533extern const struct iwl_cfg iwl6050_2abg_cfg;
534extern const struct iwl_cfg iwl6150_bgn_cfg;
535extern const struct iwl_cfg iwl6150_bg_cfg;
536extern const struct iwl_cfg iwl1000_bgn_cfg;
537extern const struct iwl_cfg iwl1000_bg_cfg;
538extern const struct iwl_cfg iwl100_bgn_cfg;
539extern const struct iwl_cfg iwl100_bg_cfg;
540extern const struct iwl_cfg iwl130_bgn_cfg;
541extern const struct iwl_cfg iwl130_bg_cfg;
542extern const struct iwl_cfg iwl2000_2bgn_cfg;
543extern const struct iwl_cfg iwl2000_2bgn_d_cfg;
544extern const struct iwl_cfg iwl2030_2bgn_cfg;
545extern const struct iwl_cfg iwl6035_2agn_cfg;
546extern const struct iwl_cfg iwl6035_2agn_sff_cfg;
547extern const struct iwl_cfg iwl105_bgn_cfg;
548extern const struct iwl_cfg iwl105_bgn_d_cfg;
549extern const struct iwl_cfg iwl135_bgn_cfg;
550#endif
551#if IS_ENABLED(CONFIG_IWLMVM)
552extern const struct iwl_cfg iwl7260_2ac_cfg;
553extern const struct iwl_cfg iwl7260_2ac_cfg_high_temp;
554extern const struct iwl_cfg iwl7260_2n_cfg;
555extern const struct iwl_cfg iwl7260_n_cfg;
556extern const struct iwl_cfg iwl3160_2ac_cfg;
557extern const struct iwl_cfg iwl3160_2n_cfg;
558extern const struct iwl_cfg iwl3160_n_cfg;
559extern const struct iwl_cfg iwl3165_2ac_cfg;
560extern const struct iwl_cfg iwl3168_2ac_cfg;
561extern const struct iwl_cfg iwl7265_2ac_cfg;
562extern const struct iwl_cfg iwl7265_2n_cfg;
563extern const struct iwl_cfg iwl7265_n_cfg;
564extern const struct iwl_cfg iwl7265d_2ac_cfg;
565extern const struct iwl_cfg iwl7265d_2n_cfg;
566extern const struct iwl_cfg iwl7265d_n_cfg;
567extern const struct iwl_cfg iwl8260_2n_cfg;
568extern const struct iwl_cfg iwl8260_2ac_cfg;
569extern const struct iwl_cfg iwl8265_2ac_cfg;
570extern const struct iwl_cfg iwl8275_2ac_cfg;
571extern const struct iwl_cfg iwl4165_2ac_cfg;
572extern const struct iwl_cfg iwl9260_2ac_cfg;
573extern const struct iwl_cfg iwl9560_qu_b0_jf_b0_cfg;
574extern const struct iwl_cfg iwl9560_qu_c0_jf_b0_cfg;
575extern const struct iwl_cfg iwl9560_quz_a0_jf_b0_cfg;
576extern const struct iwl_cfg iwl9560_qnj_b0_jf_b0_cfg;
577extern const struct iwl_cfg iwl9560_2ac_cfg_soc;
578extern const struct iwl_cfg iwl_qu_b0_hr1_b0;
579extern const struct iwl_cfg iwl_qu_c0_hr1_b0;
580extern const struct iwl_cfg iwl_quz_a0_hr1_b0;
581extern const struct iwl_cfg iwl_qu_b0_hr_b0;
582extern const struct iwl_cfg iwl_qu_c0_hr_b0;
583extern const struct iwl_cfg iwl_ax200_cfg_cc;
584extern const struct iwl_cfg iwl_ax201_cfg_qu_hr;
585extern const struct iwl_cfg iwl_ax201_cfg_qu_hr;
586extern const struct iwl_cfg iwl_ax201_cfg_qu_c0_hr_b0;
587extern const struct iwl_cfg iwl_ax201_cfg_quz_hr;
588extern const struct iwl_cfg iwl_ax1650i_cfg_quz_hr;
589extern const struct iwl_cfg iwl_ax1650s_cfg_quz_hr;
590extern const struct iwl_cfg killer1650s_2ax_cfg_qu_b0_hr_b0;
591extern const struct iwl_cfg killer1650i_2ax_cfg_qu_b0_hr_b0;
592extern const struct iwl_cfg killer1650s_2ax_cfg_qu_c0_hr_b0;
593extern const struct iwl_cfg killer1650i_2ax_cfg_qu_c0_hr_b0;
594extern const struct iwl_cfg killer1650x_2ax_cfg;
595extern const struct iwl_cfg killer1650w_2ax_cfg;
596extern const struct iwl_cfg iwl_qnj_b0_hr_b0_cfg;
597extern const struct iwl_cfg iwlax210_2ax_cfg_so_jf_a0;
598extern const struct iwl_cfg iwlax210_2ax_cfg_so_hr_a0;
599extern const struct iwl_cfg iwlax211_2ax_cfg_so_gf_a0;
600extern const struct iwl_cfg iwlax211_2ax_cfg_so_gf_a0_long;
601extern const struct iwl_cfg iwlax210_2ax_cfg_ty_gf_a0;
602extern const struct iwl_cfg iwlax411_2ax_cfg_so_gf4_a0;
603extern const struct iwl_cfg iwlax411_2ax_cfg_so_gf4_a0_long;
604extern const struct iwl_cfg iwlax411_2ax_cfg_sosnj_gf4_a0;
605extern const struct iwl_cfg iwlax211_cfg_snj_gf_a0;
606extern const struct iwl_cfg iwl_cfg_snj_hr_b0;
607extern const struct iwl_cfg iwl_cfg_snj_a0_jf_b0;
608extern const struct iwl_cfg iwl_cfg_ma_a0_hr_b0;
609extern const struct iwl_cfg iwl_cfg_ma_a0_gf_a0;
610extern const struct iwl_cfg iwl_cfg_ma_a0_gf4_a0;
611extern const struct iwl_cfg iwl_cfg_ma_a0_mr_a0;
612extern const struct iwl_cfg iwl_cfg_snj_a0_mr_a0;
613extern const struct iwl_cfg iwl_cfg_so_a0_hr_a0;
614extern const struct iwl_cfg iwl_cfg_quz_a0_hr_b0;
615#endif
616
617#endif
618