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 #include <linux/module.h>
55 #include <linux/stringify.h>
56 #include "iwl-config.h"
57 #include "fw/file.h"
58
59
60 #define IWL9000_UCODE_API_MAX 46
61
62
63 #define IWL9000_UCODE_API_MIN 30
64
65
66 #define IWL9000_NVM_VERSION 0x0a1d
67
68
69 #define IWL9000_DCCM_OFFSET 0x800000
70 #define IWL9000_DCCM_LEN 0x18000
71 #define IWL9000_DCCM2_OFFSET 0x880000
72 #define IWL9000_DCCM2_LEN 0x8000
73 #define IWL9000_SMEM_OFFSET 0x400000
74 #define IWL9000_SMEM_LEN 0x68000
75
76 #define IWL9000_FW_PRE "iwlwifi-9000-pu-b0-jf-b0-"
77 #define IWL9260_FW_PRE "iwlwifi-9260-th-b0-jf-b0-"
78 #define IWL9000_MODULE_FIRMWARE(api) \
79 IWL9000_FW_PRE __stringify(api) ".ucode"
80 #define IWL9260_MODULE_FIRMWARE(api) \
81 IWL9260_FW_PRE __stringify(api) ".ucode"
82
83 static const struct iwl_base_params iwl9000_base_params = {
84 .eeprom_size = OTP_LOW_IMAGE_SIZE_32K,
85 .num_of_queues = 31,
86 .max_tfd_queue_size = 256,
87 .shadow_ram_support = true,
88 .led_compensation = 57,
89 .wd_timeout = IWL_LONG_WD_TIMEOUT,
90 .max_event_log_size = 512,
91 .shadow_reg_enable = true,
92 .pcie_l1_allowed = true,
93 };
94
95 static const struct iwl_ht_params iwl9000_ht_params = {
96 .stbc = true,
97 .ldpc = true,
98 .ht40_bands = BIT(NL80211_BAND_2GHZ) | BIT(NL80211_BAND_5GHZ),
99 };
100
101 static const struct iwl_tt_params iwl9000_tt_params = {
102 .ct_kill_entry = 115,
103 .ct_kill_exit = 93,
104 .ct_kill_duration = 5,
105 .dynamic_smps_entry = 111,
106 .dynamic_smps_exit = 107,
107 .tx_protection_entry = 112,
108 .tx_protection_exit = 105,
109 .tx_backoff = {
110 {.temperature = 110, .backoff = 200},
111 {.temperature = 111, .backoff = 600},
112 {.temperature = 112, .backoff = 1200},
113 {.temperature = 113, .backoff = 2000},
114 {.temperature = 114, .backoff = 4000},
115 },
116 .support_ct_kill = true,
117 .support_dynamic_smps = true,
118 .support_tx_protection = true,
119 .support_tx_backoff = true,
120 };
121
122 #define IWL_DEVICE_9000 \
123 .ucode_api_max = IWL9000_UCODE_API_MAX, \
124 .ucode_api_min = IWL9000_UCODE_API_MIN, \
125 .trans.device_family = IWL_DEVICE_FAMILY_9000, \
126 .trans.base_params = &iwl9000_base_params, \
127 .led_mode = IWL_LED_RF_STATE, \
128 .nvm_hw_section_num = 10, \
129 .non_shared_ant = ANT_B, \
130 .dccm_offset = IWL9000_DCCM_OFFSET, \
131 .dccm_len = IWL9000_DCCM_LEN, \
132 .dccm2_offset = IWL9000_DCCM2_OFFSET, \
133 .dccm2_len = IWL9000_DCCM2_LEN, \
134 .smem_offset = IWL9000_SMEM_OFFSET, \
135 .smem_len = IWL9000_SMEM_LEN, \
136 .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM, \
137 .thermal_params = &iwl9000_tt_params, \
138 .apmg_not_supported = true, \
139 .trans.mq_rx_supported = true, \
140 .vht_mu_mimo_supported = true, \
141 .mac_addr_from_csr = true, \
142 .trans.rf_id = true, \
143 .nvm_type = IWL_NVM_EXT, \
144 .dbgc_supported = true, \
145 .min_umac_error_event_table = 0x800000, \
146 .trans.csr = &iwl_csr_v1, \
147 .d3_debug_data_base_addr = 0x401000, \
148 .d3_debug_data_length = 92 * 1024, \
149 .ht_params = &iwl9000_ht_params, \
150 .nvm_ver = IWL9000_NVM_VERSION, \
151 .max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K, \
152 .fw_mon_smem_write_ptr_addr = 0xa0476c, \
153 .fw_mon_smem_write_ptr_msk = 0xfffff, \
154 .fw_mon_smem_cycle_cnt_ptr_addr = 0xa04774, \
155 .fw_mon_smem_cycle_cnt_ptr_msk = 0xfffff
156
157
158 const struct iwl_cfg iwl9160_2ac_cfg = {
159 .name = "Intel(R) Dual Band Wireless AC 9160",
160 .fw_name_pre = IWL9260_FW_PRE,
161 IWL_DEVICE_9000,
162 };
163
164 const struct iwl_cfg iwl9260_2ac_cfg = {
165 .name = "Intel(R) Dual Band Wireless AC 9260",
166 .fw_name_pre = IWL9260_FW_PRE,
167 IWL_DEVICE_9000,
168 };
169
170 const struct iwl_cfg iwl9260_2ac_160_cfg = {
171 .name = "Intel(R) Wireless-AC 9260 160MHz",
172 .fw_name_pre = IWL9260_FW_PRE,
173 IWL_DEVICE_9000,
174 };
175
176 const struct iwl_cfg iwl9260_killer_2ac_cfg = {
177 .name = "Killer (R) Wireless-AC 1550 Wireless Network Adapter (9260NGW)",
178 .fw_name_pre = IWL9260_FW_PRE,
179 IWL_DEVICE_9000,
180 };
181
182 const struct iwl_cfg iwl9270_2ac_cfg = {
183 .name = "Intel(R) Dual Band Wireless AC 9270",
184 .fw_name_pre = IWL9260_FW_PRE,
185 IWL_DEVICE_9000,
186 };
187
188 const struct iwl_cfg iwl9460_2ac_cfg = {
189 .name = "Intel(R) Dual Band Wireless AC 9460",
190 .fw_name_pre = IWL9260_FW_PRE,
191 IWL_DEVICE_9000,
192 };
193
194 const struct iwl_cfg iwl9460_2ac_cfg_soc = {
195 .name = "Intel(R) Dual Band Wireless AC 9460",
196 .fw_name_pre = IWL9000_FW_PRE,
197 IWL_DEVICE_9000,
198 .integrated = true,
199 .soc_latency = 5000,
200 };
201
202 const struct iwl_cfg iwl9461_2ac_cfg_soc = {
203 .name = "Intel(R) Dual Band Wireless AC 9461",
204 .fw_name_pre = IWL9000_FW_PRE,
205 IWL_DEVICE_9000,
206 .integrated = true,
207 .soc_latency = 5000,
208 };
209
210 const struct iwl_cfg iwl9462_2ac_cfg_soc = {
211 .name = "Intel(R) Dual Band Wireless AC 9462",
212 .fw_name_pre = IWL9000_FW_PRE,
213 IWL_DEVICE_9000,
214 .integrated = true,
215 .soc_latency = 5000,
216 };
217
218 const struct iwl_cfg iwl9560_2ac_cfg = {
219 .name = "Intel(R) Dual Band Wireless AC 9560",
220 .fw_name_pre = IWL9260_FW_PRE,
221 IWL_DEVICE_9000,
222 };
223
224 const struct iwl_cfg iwl9560_2ac_160_cfg = {
225 .name = "Intel(R) Wireless-AC 9560 160MHz",
226 .fw_name_pre = IWL9260_FW_PRE,
227 IWL_DEVICE_9000,
228 };
229
230 const struct iwl_cfg iwl9560_2ac_cfg_soc = {
231 .name = "Intel(R) Dual Band Wireless AC 9560",
232 .fw_name_pre = IWL9000_FW_PRE,
233 IWL_DEVICE_9000,
234 .integrated = true,
235 .soc_latency = 5000,
236 };
237
238 const struct iwl_cfg iwl9560_2ac_160_cfg_soc = {
239 .name = "Intel(R) Wireless-AC 9560 160MHz",
240 .fw_name_pre = IWL9000_FW_PRE,
241 IWL_DEVICE_9000,
242 .integrated = true,
243 .soc_latency = 5000,
244 };
245
246 const struct iwl_cfg iwl9560_killer_2ac_cfg_soc = {
247 .name = "Killer (R) Wireless-AC 1550i Wireless Network Adapter (9560NGW)",
248 .fw_name_pre = IWL9000_FW_PRE,
249 IWL_DEVICE_9000,
250 .integrated = true,
251 .soc_latency = 5000,
252 };
253
254 const struct iwl_cfg iwl9560_killer_s_2ac_cfg_soc = {
255 .name = "Killer (R) Wireless-AC 1550s Wireless Network Adapter (9560NGW)",
256 .fw_name_pre = IWL9000_FW_PRE,
257 IWL_DEVICE_9000,
258 .integrated = true,
259 .soc_latency = 5000,
260 };
261
262 const struct iwl_cfg iwl9460_2ac_cfg_shared_clk = {
263 .name = "Intel(R) Dual Band Wireless AC 9460",
264 .fw_name_pre = IWL9000_FW_PRE,
265 IWL_DEVICE_9000,
266 .integrated = true,
267 .soc_latency = 5000,
268 .extra_phy_cfg_flags = FW_PHY_CFG_SHARED_CLK
269 };
270
271 const struct iwl_cfg iwl9461_2ac_cfg_shared_clk = {
272 .name = "Intel(R) Dual Band Wireless AC 9461",
273 .fw_name_pre = IWL9000_FW_PRE,
274 IWL_DEVICE_9000,
275 .integrated = true,
276 .soc_latency = 5000,
277 .extra_phy_cfg_flags = FW_PHY_CFG_SHARED_CLK
278 };
279
280 const struct iwl_cfg iwl9462_2ac_cfg_shared_clk = {
281 .name = "Intel(R) Dual Band Wireless AC 9462",
282 .fw_name_pre = IWL9000_FW_PRE,
283 IWL_DEVICE_9000,
284 .integrated = true,
285 .soc_latency = 5000,
286 .extra_phy_cfg_flags = FW_PHY_CFG_SHARED_CLK
287 };
288
289 const struct iwl_cfg iwl9560_2ac_cfg_shared_clk = {
290 .name = "Intel(R) Dual Band Wireless AC 9560",
291 .fw_name_pre = IWL9000_FW_PRE,
292 IWL_DEVICE_9000,
293 .integrated = true,
294 .soc_latency = 5000,
295 .extra_phy_cfg_flags = FW_PHY_CFG_SHARED_CLK
296 };
297
298 const struct iwl_cfg iwl9560_2ac_160_cfg_shared_clk = {
299 .name = "Intel(R) Wireless-AC 9560 160MHz",
300 .fw_name_pre = IWL9000_FW_PRE,
301 IWL_DEVICE_9000,
302 .integrated = true,
303 .soc_latency = 5000,
304 .extra_phy_cfg_flags = FW_PHY_CFG_SHARED_CLK
305 };
306
307 const struct iwl_cfg iwl9560_killer_2ac_cfg_shared_clk = {
308 .name = "Killer (R) Wireless-AC 1550i Wireless Network Adapter (9560NGW)",
309 .fw_name_pre = IWL9000_FW_PRE,
310 IWL_DEVICE_9000,
311 .integrated = true,
312 .soc_latency = 5000,
313 .extra_phy_cfg_flags = FW_PHY_CFG_SHARED_CLK
314 };
315
316 const struct iwl_cfg iwl9560_killer_s_2ac_cfg_shared_clk = {
317 .name = "Killer (R) Wireless-AC 1550s Wireless Network Adapter (9560NGW)",
318 .fw_name_pre = IWL9000_FW_PRE,
319 IWL_DEVICE_9000,
320 .integrated = true,
321 .soc_latency = 5000,
322 .extra_phy_cfg_flags = FW_PHY_CFG_SHARED_CLK
323 };
324
325 MODULE_FIRMWARE(IWL9000_MODULE_FIRMWARE(IWL9000_UCODE_API_MAX));
326 MODULE_FIRMWARE(IWL9260_MODULE_FIRMWARE(IWL9000_UCODE_API_MAX));