Merge ~vicamo/ubuntu/+source/backport-iwlwifi-dkms/+git/backport-iwlwifi-dkms:for-focal/new-upstream-release-8286 into ~canonical-hwe-team/ubuntu/+source/backport-iwlwifi-dkms/+git/backport-iwlwifi-dkms:ubuntu/focal

Proposed by You-Sheng Yang
Status: Merged
Merged at revision: 6cf1a2d7a8c6869a17ece6e89309644202e68ef9
Proposed branch: ~vicamo/ubuntu/+source/backport-iwlwifi-dkms/+git/backport-iwlwifi-dkms:for-focal/new-upstream-release-8286
Merge into: ~canonical-hwe-team/ubuntu/+source/backport-iwlwifi-dkms/+git/backport-iwlwifi-dkms:ubuntu/focal
Diff against target: 17546 lines (+6404/-3899)
142 files modified
.gitignore (+3/-0)
Kconfig.local (+6/-0)
MAINTAINERS (+1/-0)
Makefile.build (+7/-0)
backport-include/linux/mm.h (+8/-1)
backport-include/linux/module.h (+2/-2)
backport-include/linux/pci.h (+11/-0)
backport-include/linux/skbuff.h (+8/-0)
backport-include/net/genetlink.h (+10/-0)
backport-include/net/netlink.h (+12/-0)
backport-include/net/xfrm.h (+14/-0)
compat/Kconfig (+10/-0)
compat/Makefile (+1/-0)
compat/lib-crypto-arc4.c (+74/-0)
debian/backport-iwlwifi-dkms.modaliases (+242/-684)
debian/changelog (+13/-0)
debian/patches/0006-backport-address-interface-change-in-linux-skbuff.h-.patch (+37/-74)
debian/patches/series (+0/-2)
debian/tests/control (+1/-7)
debian/tests/dkms-autopkgtest (+32/-5)
dev/null (+0/-51)
drivers/net/wireless/intel/iwlwifi/Kconfig (+1/-1)
drivers/net/wireless/intel/iwlwifi/Kconfig.noupstream (+13/-0)
drivers/net/wireless/intel/iwlwifi/Makefile (+8/-4)
drivers/net/wireless/intel/iwlwifi/cfg/22000.c (+137/-302)
drivers/net/wireless/intel/iwlwifi/cfg/7000.c (+1/-2)
drivers/net/wireless/intel/iwlwifi/cfg/8000.c (+1/-2)
drivers/net/wireless/intel/iwlwifi/cfg/9000.c (+40/-155)
drivers/net/wireless/intel/iwlwifi/fw/acpi.c (+297/-4)
drivers/net/wireless/intel/iwlwifi/fw/acpi.h (+84/-0)
drivers/net/wireless/intel/iwlwifi/fw/api/commands.h (+7/-0)
drivers/net/wireless/intel/iwlwifi/fw/api/d3.h (+38/-1)
drivers/net/wireless/intel/iwlwifi/fw/api/location.h (+145/-5)
drivers/net/wireless/intel/iwlwifi/fw/api/scan.h (+166/-65)
drivers/net/wireless/intel/iwlwifi/fw/api/soc.h (+14/-10)
drivers/net/wireless/intel/iwlwifi/fw/api/sta.h (+4/-6)
drivers/net/wireless/intel/iwlwifi/fw/api/time-event.h (+3/-1)
drivers/net/wireless/intel/iwlwifi/fw/api/tx.h (+8/-5)
drivers/net/wireless/intel/iwlwifi/fw/dbg.c (+113/-52)
drivers/net/wireless/intel/iwlwifi/fw/dbg.h (+0/-11)
drivers/net/wireless/intel/iwlwifi/fw/debugfs.c (+2/-29)
drivers/net/wireless/intel/iwlwifi/fw/img.c (+100/-0)
drivers/net/wireless/intel/iwlwifi/fw/img.h (+3/-18)
drivers/net/wireless/intel/iwlwifi/fw/runtime.h (+20/-21)
drivers/net/wireless/intel/iwlwifi/iwl-config.h (+89/-104)
drivers/net/wireless/intel/iwlwifi/iwl-context-info.h (+10/-10)
drivers/net/wireless/intel/iwlwifi/iwl-csr.h (+28/-4)
drivers/net/wireless/intel/iwlwifi/iwl-dbg-cfg.c (+35/-0)
drivers/net/wireless/intel/iwlwifi/iwl-dbg-cfg.h (+12/-1)
drivers/net/wireless/intel/iwlwifi/iwl-dbg-tlv.c (+35/-47)
drivers/net/wireless/intel/iwlwifi/iwl-dbg-tlv.h (+0/-1)
drivers/net/wireless/intel/iwlwifi/iwl-devtrace-data.h (+5/-3)
drivers/net/wireless/intel/iwlwifi/iwl-drv.c (+31/-9)
drivers/net/wireless/intel/iwlwifi/iwl-fh.h (+2/-5)
drivers/net/wireless/intel/iwlwifi/iwl-io.c (+3/-34)
drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c (+68/-17)
drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.h (+3/-3)
drivers/net/wireless/intel/iwlwifi/iwl-prph.h (+8/-7)
drivers/net/wireless/intel/iwlwifi/iwl-tm-infc.h (+4/-2)
drivers/net/wireless/intel/iwlwifi/iwl-trans.c (+5/-5)
drivers/net/wireless/intel/iwlwifi/iwl-trans.h (+68/-10)
drivers/net/wireless/intel/iwlwifi/mvm/constants.h (+11/-0)
drivers/net/wireless/intel/iwlwifi/mvm/d3.c (+29/-11)
drivers/net/wireless/intel/iwlwifi/mvm/debugfs.c (+9/-4)
drivers/net/wireless/intel/iwlwifi/mvm/ftm-initiator.c (+321/-50)
drivers/net/wireless/intel/iwlwifi/mvm/ftm-responder.c (+75/-20)
drivers/net/wireless/intel/iwlwifi/mvm/fw.c (+104/-341)
drivers/net/wireless/intel/iwlwifi/mvm/led.c (+3/-0)
drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c (+172/-24)
drivers/net/wireless/intel/iwlwifi/mvm/mvm.h (+21/-32)
drivers/net/wireless/intel/iwlwifi/mvm/nvm.c (+2/-2)
drivers/net/wireless/intel/iwlwifi/mvm/ops.c (+11/-32)
drivers/net/wireless/intel/iwlwifi/mvm/power.c (+12/-17)
drivers/net/wireless/intel/iwlwifi/mvm/rs-fw.c (+6/-3)
drivers/net/wireless/intel/iwlwifi/mvm/rs.c (+5/-2)
drivers/net/wireless/intel/iwlwifi/mvm/rx.c (+2/-1)
drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c (+3/-3)
drivers/net/wireless/intel/iwlwifi/mvm/scan.c (+437/-111)
drivers/net/wireless/intel/iwlwifi/mvm/sf.c (+5/-3)
drivers/net/wireless/intel/iwlwifi/mvm/sta.c (+85/-60)
drivers/net/wireless/intel/iwlwifi/mvm/time-event.c (+19/-1)
drivers/net/wireless/intel/iwlwifi/mvm/tt.c (+30/-22)
drivers/net/wireless/intel/iwlwifi/mvm/tx.c (+10/-15)
drivers/net/wireless/intel/iwlwifi/mvm/utils.c (+3/-3)
drivers/net/wireless/intel/iwlwifi/mvm/vendor-cmd.c (+44/-10)
drivers/net/wireless/intel/iwlwifi/pcie/ctxt-info-gen3.c (+26/-12)
drivers/net/wireless/intel/iwlwifi/pcie/ctxt-info.c (+63/-8)
drivers/net/wireless/intel/iwlwifi/pcie/drv.c (+494/-539)
drivers/net/wireless/intel/iwlwifi/pcie/internal.h (+36/-27)
drivers/net/wireless/intel/iwlwifi/pcie/rx.c (+100/-69)
drivers/net/wireless/intel/iwlwifi/pcie/trans-gen2.c (+4/-5)
drivers/net/wireless/intel/iwlwifi/pcie/trans.c (+206/-109)
drivers/net/wireless/intel/iwlwifi/pcie/tx-gen2.c (+205/-65)
drivers/net/wireless/intel/iwlwifi/pcie/tx.c (+61/-37)
drivers/net/wireless/intel/iwlwifi/xvt/rx.c (+1/-1)
drivers/net/wireless/intel/iwlwifi/xvt/user-infc.c (+38/-18)
drivers/net/wireless/intel/iwlwifi/xvt/xvt.c (+118/-3)
drivers/net/wireless/intel/iwlwifi/xvt/xvt.h (+8/-1)
drivers/net/wireless/mac80211_hwsim.c (+122/-25)
include/crypto/arc4.h (+10/-0)
include/crypto/backport-arc4.h (+23/-0)
include/linux/ieee80211.h (+112/-1)
include/net/cfg80211.h (+70/-3)
include/net/fq.h (+8/-0)
include/net/fq_impl.h (+9/-1)
include/net/mac80211.h (+11/-2)
include/uapi/linux/nl80211.h (+40/-0)
local-symbols (+3/-0)
net/mac80211/Kconfig (+1/-1)
net/mac80211/agg-rx.c (+3/-2)
net/mac80211/agg-tx.c (+10/-2)
net/mac80211/cfg.c (+7/-4)
net/mac80211/debugfs.c (+0/-116)
net/mac80211/he.c (+47/-0)
net/mac80211/ibss.c (+8/-0)
net/mac80211/ieee80211_i.h (+13/-16)
net/mac80211/iface.c (+3/-1)
net/mac80211/key.h (+1/-0)
net/mac80211/main.c (+10/-16)
net/mac80211/mlme.c (+201/-78)
net/mac80211/rx.c (+10/-1)
net/mac80211/scan.c (+4/-0)
net/mac80211/status.c (+2/-0)
net/mac80211/tkip.c (+4/-4)
net/mac80211/tkip.h (+2/-2)
net/mac80211/util.c (+50/-25)
net/mac80211/vht.c (+55/-3)
net/mac80211/wep.c (+11/-42)
net/mac80211/wep.h (+3/-4)
net/mac80211/wpa.c (+2/-2)
net/wireless/Kconfig (+2/-0)
net/wireless/chan.c (+15/-7)
net/wireless/core.c (+37/-1)
net/wireless/core.h (+3/-0)
net/wireless/lib80211_crypt_tkip.c (+17/-31)
net/wireless/lib80211_crypt_wep.c (+13/-38)
net/wireless/nl80211.c (+107/-10)
net/wireless/pmsr.c (+32/-0)
net/wireless/reg.c (+2/-0)
net/wireless/scan.c (+434/-17)
scripts/make (+4/-0)
versions (+1/-1)
Reviewer Review Type Date Requested Status
You-Sheng Yang Approve
Review via email: mp+377020@code.launchpad.net

Commit message

backport-iwlwifi-dkms (8286-0ubuntu1) focal; urgency=low

  * New release
    - upstream version 8286 commit 26271a73a63d24.

  * debian/patches:
    - Update 0006-backport-address-interface-change-in-linux-skbuff.h-.patch
    - Drop 0003-backport-apply-__copy-to-init_module-cleanup_module.patch
    - Drop 0007-backport-don-t-include-linux-pci-aspm.h-on-kernel-v5..patch
  * Update debian/backport-iwlwifi-dkms.modaliases

 -- You-Sheng Yang <email address hidden> Wed, 18 Dec 2019 19:43:25 +0800

To post a comment you must log in.
Revision history for this message
You-Sheng Yang (vicamo) wrote :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/.gitignore b/.gitignore
2index 0718a18..6a16fa2 100644
3--- a/.gitignore
4+++ b/.gitignore
5@@ -11,6 +11,7 @@ Kconfig.versions
6 *.cmd
7 *.tmp
8 *.ver
9+*.mod
10 modules.order
11 backport-include/backport/autoconf.h
12 modules
13@@ -25,3 +26,5 @@ __pycache__
14 # cscope files
15 cscope.*
16 ncscope.*
17+# gcc profile objects
18+*.gcno
19diff --git a/Kconfig.local b/Kconfig.local
20index c195c4e..2ea5613 100644
21--- a/Kconfig.local
22+++ b/Kconfig.local
23@@ -79,6 +79,12 @@ config BACKPORTED_BPAUTO_ASN1_DECODER
24 config BACKPORTED_BPAUTO_PKCS7
25 tristate
26 default BPAUTO_PKCS7
27+config BACKPORTED_BPAUTO_CRYPTO_LIB_ARC4
28+ tristate
29+ default BPAUTO_CRYPTO_LIB_ARC4
30+config BACKPORTED_BPAUTO_BUILD_CRYPTO_LIB_ARC4
31+ tristate
32+ default BPAUTO_BUILD_CRYPTO_LIB_ARC4
33 config BACKPORTED_CFG80211
34 tristate
35 default CFG80211
36diff --git a/MAINTAINERS b/MAINTAINERS
37index 677ef41..d3b9b4a 100644
38--- a/MAINTAINERS
39+++ b/MAINTAINERS
40@@ -4251,6 +4251,7 @@ F: crypto/
41 F: drivers/crypto/
42 F: include/crypto/
43 F: include/linux/crypto*
44+F: lib/crypto/
45
46 CRYPTOGRAPHIC RANDOM NUMBER GENERATOR
47 M: Neil Horman <nhorman@tuxdriver.com>
48diff --git a/Makefile.build b/Makefile.build
49index a848b37..9c272b2 100644
50--- a/Makefile.build
51+++ b/Makefile.build
52@@ -1,4 +1,11 @@
53+# detect if make supports --eval
54+_EVAL := $(shell make --eval "test:" -f /dev/null test >/dev/null 2>&1 && echo YES || echo NO)
55+ifeq ($(_EVAL),YES)
56+MAKE=$(BACKPORT_DIR)/scripts/make
57+else
58 -include .config
59+endif
60+
61 export
62
63 .PHONY: modules
64diff --git a/backport-include/linux/mm.h b/backport-include/linux/mm.h
65index 0806f4d..5253e1d 100644
66--- a/backport-include/linux/mm.h
67+++ b/backport-include/linux/mm.h
68@@ -103,6 +103,13 @@ static inline void *kvzalloc(size_t size, gfp_t flags)
69 {
70 return kvmalloc(size, flags | __GFP_ZERO);
71 }
72-#endif
73+#endif /* < 4.12 */
74+
75+#if LINUX_VERSION_IS_LESS(4,18,0)
76+static inline void *kvcalloc(size_t n, size_t size, gfp_t flags)
77+{
78+ return kvmalloc_array(n, size, flags | __GFP_ZERO);
79+}
80+#endif /* < 4.18 */
81
82 #endif /* __BACKPORT_MM_H */
83diff --git a/backport-include/linux/module.h b/backport-include/linux/module.h
84index 1a2c82f..675d8d7 100644
85--- a/backport-include/linux/module.h
86+++ b/backport-include/linux/module.h
87@@ -33,7 +33,7 @@ extern void backport_dependency_symbol(void);
88 backport_dependency_symbol(); \
89 return initfn(); \
90 } \
91- int init_module(void) __attribute__((alias("__init_backport")));\
92+ int init_module(void) __attribute__((cold,alias("__init_backport")));\
93 BACKPORT_MOD_VERSIONS
94
95 /*
96@@ -58,7 +58,7 @@ extern void backport_dependency_symbol(void);
97 exitfn(); \
98 rcu_barrier(); \
99 } \
100- void cleanup_module(void) __attribute__((alias("__exit_compat")));
101+ void cleanup_module(void) __attribute__((cold,alias("__exit_compat")));
102 #endif
103
104 #if LINUX_VERSION_IS_LESS(3,3,0)
105diff --git a/backport-include/linux/pci.h b/backport-include/linux/pci.h
106index 341660b..a0f79fa 100644
107--- a/backport-include/linux/pci.h
108+++ b/backport-include/linux/pci.h
109@@ -3,6 +3,17 @@
110 #include_next <linux/pci.h>
111 #include <linux/version.h>
112
113+#if LINUX_VERSION_IS_LESS(5,4,0)
114+#include <linux/pci-aspm.h>
115+#endif
116+
117+#ifndef CONFIG_PCI
118+struct msix_entry {
119+ u32 vector;
120+ u16 entry;
121+};
122+#endif
123+
124 #ifndef module_pci_driver
125 /**
126 * module_pci_driver() - Helper macro for registering a PCI driver
127diff --git a/backport-include/linux/skbuff.h b/backport-include/linux/skbuff.h
128index c60cbcc..f633ae3 100644
129--- a/backport-include/linux/skbuff.h
130+++ b/backport-include/linux/skbuff.h
131@@ -391,4 +391,12 @@ static inline struct sk_buff *__skb_peek(const struct sk_buff_head *list_)
132 }
133 #endif
134
135+#if LINUX_VERSION_IS_LESS(5,4,0)
136+#define nf_reset_ct LINUX_BACKPORT(nf_reset_ct)
137+static inline void nf_reset_ct(struct sk_buff *skb)
138+{
139+ nf_reset(skb);
140+}
141+#endif
142+
143 #endif /* __BACKPORT_SKBUFF_H */
144diff --git a/backport-include/net/genetlink.h b/backport-include/net/genetlink.h
145index f270ffa..e6b78e0 100644
146--- a/backport-include/net/genetlink.h
147+++ b/backport-include/net/genetlink.h
148@@ -35,6 +35,16 @@ static inline struct netlink_ext_ack *genl_info_extack(struct genl_info *info)
149 #endif
150 }
151
152+/* this is for patches we apply */
153+static inline struct netlink_ext_ack *genl_callback_extack(struct netlink_callback *cb)
154+{
155+#if LINUX_VERSION_IS_GEQ(4,20,0)
156+ return cb->extack;
157+#else
158+ return NULL;
159+#endif
160+}
161+
162 /* this gets put in place of info->userhdr, since we use that above */
163 static inline void *genl_info_userhdr(struct genl_info *info)
164 {
165diff --git a/backport-include/net/netlink.h b/backport-include/net/netlink.h
166index 996a4d3..9a5c270 100644
167--- a/backport-include/net/netlink.h
168+++ b/backport-include/net/netlink.h
169@@ -266,6 +266,18 @@ nla_validate_nested_deprecated(const struct nlattr *start, int maxtype,
170 }
171 #endif /* < 5.2 */
172
173+#if LINUX_VERSION_IS_LESS(5,3,0)
174+#define nl80211_validate_nested LINUX_BACKPORT(nl80211_validate_nested)
175+static inline int
176+nl80211_validate_nested(const struct nlattr *start, int maxtype,
177+ const struct nla_policy *policy,
178+ struct netlink_ext_ack *extack)
179+{
180+ return __nla_validate_nested(start, maxtype, policy,
181+ NL_VALIDATE_STRICT, extack);
182+}
183+#endif /* < 5.3 */
184+
185 #if LINUX_VERSION_IS_LESS(5,1,0)
186 #undef NLA_POLICY_NESTED
187 #undef NLA_POLICY_NESTED_ARRAY
188diff --git a/backport-include/net/xfrm.h b/backport-include/net/xfrm.h
189new file mode 100644
190index 0000000..7e55984
191--- /dev/null
192+++ b/backport-include/net/xfrm.h
193@@ -0,0 +1,14 @@
194+#ifndef __BACKPORT_NET_XFRM_H
195+#define __BACKPORT_NET_XFRM_H
196+#include_next <net/xfrm.h>
197+#include <linux/version.h>
198+
199+#if LINUX_VERSION_IS_LESS(5,4,0)
200+#define skb_ext_reset LINUX_BACKPORT(skb_ext_reset)
201+static inline void skb_ext_reset(struct sk_buff *skb)
202+{
203+ secpath_reset(skb);
204+}
205+#endif
206+
207+#endif /* __BACKPORT_NET_XFRM_H */
208diff --git a/compat/Kconfig b/compat/Kconfig
209index 297041b..b097fac 100644
210--- a/compat/Kconfig
211+++ b/compat/Kconfig
212@@ -170,3 +170,13 @@ config BPAUTO_ASN1_DECODER
213 config BPAUTO_PKCS7
214 bool
215 #h-file crypto/pkcs7.h
216+
217+config BPAUTO_CRYPTO_LIB_ARC4
218+ bool
219+
220+config BPAUTO_BUILD_CRYPTO_LIB_ARC4
221+ bool
222+ default y if BPAUTO_CRYPTO_LIB_ARC4
223+ depends on !(CRYPTO_LIB_ARC4=y || CRYPTO_LIB_ARC4=m)
224+ #h-file crypto/arc4.h
225+ #c-file lib/crypto/arc4.c
226diff --git a/compat/Makefile b/compat/Makefile
227index 5456858..972459f 100644
228--- a/compat/Makefile
229+++ b/compat/Makefile
230@@ -75,3 +75,4 @@ compat-$(CPTCFG_BPAUTO_RHASHTABLE) += lib-rhashtable.o
231 compat-$(CPTCFG_BPAUTO_PUBLIC_KEY) +=
232 compat-$(CPTCFG_BPAUTO_BUCKET_LOCKS) += lib-bucket_locks.o
233 compat-$(CPTCFG_BPAUTO_PKCS7) +=
234+compat-$(CPTCFG_BPAUTO_BUILD_CRYPTO_LIB_ARC4) += lib-crypto-arc4.o
235diff --git a/compat/lib-crypto-arc4.c b/compat/lib-crypto-arc4.c
236new file mode 100644
237index 0000000..c2020f1
238--- /dev/null
239+++ b/compat/lib-crypto-arc4.c
240@@ -0,0 +1,74 @@
241+// SPDX-License-Identifier: GPL-2.0-or-later
242+/*
243+ * Cryptographic API
244+ *
245+ * ARC4 Cipher Algorithm
246+ *
247+ * Jon Oberheide <jon@oberheide.org>
248+ */
249+
250+#include <crypto/arc4.h>
251+#include <linux/module.h>
252+
253+int arc4_setkey(struct arc4_ctx *ctx, const u8 *in_key, unsigned int key_len)
254+{
255+ int i, j = 0, k = 0;
256+
257+ ctx->x = 1;
258+ ctx->y = 0;
259+
260+ for (i = 0; i < 256; i++)
261+ ctx->S[i] = i;
262+
263+ for (i = 0; i < 256; i++) {
264+ u32 a = ctx->S[i];
265+
266+ j = (j + in_key[k] + a) & 0xff;
267+ ctx->S[i] = ctx->S[j];
268+ ctx->S[j] = a;
269+ if (++k >= key_len)
270+ k = 0;
271+ }
272+
273+ return 0;
274+}
275+EXPORT_SYMBOL(arc4_setkey);
276+
277+void arc4_crypt(struct arc4_ctx *ctx, u8 *out, const u8 *in, unsigned int len)
278+{
279+ u32 *const S = ctx->S;
280+ u32 x, y, a, b;
281+ u32 ty, ta, tb;
282+
283+ if (len == 0)
284+ return;
285+
286+ x = ctx->x;
287+ y = ctx->y;
288+
289+ a = S[x];
290+ y = (y + a) & 0xff;
291+ b = S[y];
292+
293+ do {
294+ S[y] = a;
295+ a = (a + b) & 0xff;
296+ S[x] = b;
297+ x = (x + 1) & 0xff;
298+ ta = S[x];
299+ ty = (y + ta) & 0xff;
300+ tb = S[ty];
301+ *out++ = *in++ ^ S[a];
302+ if (--len == 0)
303+ break;
304+ y = ty;
305+ a = ta;
306+ b = tb;
307+ } while (true);
308+
309+ ctx->x = x;
310+ ctx->y = y;
311+}
312+EXPORT_SYMBOL(arc4_crypt);
313+
314+MODULE_LICENSE("GPL");
315diff --git a/debian/backport-iwlwifi-dkms.modaliases b/debian/backport-iwlwifi-dkms.modaliases
316index 28dbb46..3f4e9d7 100644
317--- a/debian/backport-iwlwifi-dkms.modaliases
318+++ b/debian/backport-iwlwifi-dkms.modaliases
319@@ -1,701 +1,259 @@
320 alias net-pf-16-proto-16-family-nl80211 cfg80211
321-alias pci:v00008086d00007AF0sv*sd00000A10bc*sc*i* iwlwifi
322-alias pci:v00008086d00007AF0sv*sd00000510bc*sc*i* iwlwifi
323-alias pci:v00008086d00007AF0sv*sd00000310bc*sc*i* iwlwifi
324-alias pci:v00008086d00007AF0sv*sd00000090bc*sc*i* iwlwifi
325-alias pci:v00008086d00007A70sv*sd00000A10bc*sc*i* iwlwifi
326-alias pci:v00008086d00007A70sv*sd00000510bc*sc*i* iwlwifi
327-alias pci:v00008086d00007A70sv*sd00000310bc*sc*i* iwlwifi
328-alias pci:v00008086d00007A70sv*sd00000090bc*sc*i* iwlwifi
329-alias pci:v00008086d00002725sv*sd000000B0bc*sc*i* iwlwifi
330-alias pci:v00008086d00002725sv*sd00000A10bc*sc*i* iwlwifi
331-alias pci:v00008086d00002725sv*sd00000510bc*sc*i* iwlwifi
332-alias pci:v00008086d00002725sv*sd00000310bc*sc*i* iwlwifi
333-alias pci:v00008086d00002725sv*sd00000020bc*sc*i* iwlwifi
334-alias pci:v00008086d00002725sv*sd00000090bc*sc*i* iwlwifi
335-alias pci:v00008086d00002723sv*sd00004088bc*sc*i* iwlwifi
336-alias pci:v00008086d00002725sv*sd00000000bc*sc*i* iwlwifi
337-alias pci:v00008086d00002723sv*sd00004080bc*sc*i* iwlwifi
338-alias pci:v00008086d00002723sv*sd00002080bc*sc*i* iwlwifi
339-alias pci:v00008086d00002723sv*sd00001654bc*sc*i* iwlwifi
340-alias pci:v00008086d00002723sv*sd00001653bc*sc*i* iwlwifi
341-alias pci:v00008086d00002723sv*sd0000008Cbc*sc*i* iwlwifi
342-alias pci:v00008086d00002723sv*sd00000088bc*sc*i* iwlwifi
343-alias pci:v00008086d00002723sv*sd00000084bc*sc*i* iwlwifi
344-alias pci:v00008086d00002723sv*sd00000080bc*sc*i* iwlwifi
345-alias pci:v00008086d00002723sv*sd00000000bc*sc*i* iwlwifi
346-alias pci:v00008086d0000A0F0sv*sd00004244bc*sc*i* iwlwifi
347-alias pci:v00008086d0000A0F0sv*sd00004070bc*sc*i* iwlwifi
348-alias pci:v00008086d0000A0F0sv*sd00002074bc*sc*i* iwlwifi
349-alias pci:v00008086d0000A0F0sv*sd00001652bc*sc*i* iwlwifi
350-alias pci:v00008086d0000A0F0sv*sd00001651bc*sc*i* iwlwifi
351-alias pci:v00008086d0000A0F0sv*sd00000A10bc*sc*i* iwlwifi
352-alias pci:v00008086d0000A0F0sv*sd00000244bc*sc*i* iwlwifi
353-alias pci:v00008086d0000A0F0sv*sd0000007Cbc*sc*i* iwlwifi
354-alias pci:v00008086d0000A0F0sv*sd00000078bc*sc*i* iwlwifi
355-alias pci:v00008086d0000A0F0sv*sd00000074bc*sc*i* iwlwifi
356-alias pci:v00008086d0000A0F0sv*sd00000070bc*sc*i* iwlwifi
357-alias pci:v00008086d0000A0F0sv*sd00000044bc*sc*i* iwlwifi
358-alias pci:v00008086d000043F0sv*sd00004244bc*sc*i* iwlwifi
359-alias pci:v00008086d000043F0sv*sd00004070bc*sc*i* iwlwifi
360-alias pci:v00008086d000043F0sv*sd00002074bc*sc*i* iwlwifi
361-alias pci:v00008086d000043F0sv*sd00001652bc*sc*i* iwlwifi
362-alias pci:v00008086d000043F0sv*sd00001651bc*sc*i* iwlwifi
363-alias pci:v00008086d000043F0sv*sd00000244bc*sc*i* iwlwifi
364-alias pci:v00008086d000043F0sv*sd0000007Cbc*sc*i* iwlwifi
365-alias pci:v00008086d000043F0sv*sd00000078bc*sc*i* iwlwifi
366-alias pci:v00008086d000043F0sv*sd00000074bc*sc*i* iwlwifi
367-alias pci:v00008086d000043F0sv*sd00000070bc*sc*i* iwlwifi
368-alias pci:v00008086d000043F0sv*sd00000044bc*sc*i* iwlwifi
369-alias pci:v00008086d000034F0sv*sd00004244bc*sc*i* iwlwifi
370-alias pci:v00008086d000034F0sv*sd00004070bc*sc*i* iwlwifi
371-alias pci:v00008086d000034F0sv*sd00002074bc*sc*i* iwlwifi
372-alias pci:v00008086d000034F0sv*sd00001652bc*sc*i* iwlwifi
373-alias pci:v00008086d000034F0sv*sd00001651bc*sc*i* iwlwifi
374-alias pci:v00008086d000034F0sv*sd00000310bc*sc*i* iwlwifi
375-alias pci:v00008086d000034F0sv*sd00000244bc*sc*i* iwlwifi
376-alias pci:v00008086d000034F0sv*sd0000007Cbc*sc*i* iwlwifi
377-alias pci:v00008086d000034F0sv*sd00000078bc*sc*i* iwlwifi
378-alias pci:v00008086d000034F0sv*sd00000074bc*sc*i* iwlwifi
379-alias pci:v00008086d000034F0sv*sd00000070bc*sc*i* iwlwifi
380-alias pci:v00008086d000034F0sv*sd00000044bc*sc*i* iwlwifi
381-alias pci:v00008086d00002720sv*sd00004244bc*sc*i* iwlwifi
382-alias pci:v00008086d00002720sv*sd00004070bc*sc*i* iwlwifi
383-alias pci:v00008086d00002720sv*sd00002074bc*sc*i* iwlwifi
384-alias pci:v00008086d00002720sv*sd00001652bc*sc*i* iwlwifi
385-alias pci:v00008086d00002720sv*sd00001651bc*sc*i* iwlwifi
386-alias pci:v00008086d00002720sv*sd00001080bc*sc*i* iwlwifi
387-alias pci:v00008086d00002720sv*sd00000A10bc*sc*i* iwlwifi
388-alias pci:v00008086d00002720sv*sd00000310bc*sc*i* iwlwifi
389-alias pci:v00008086d00002720sv*sd00000244bc*sc*i* iwlwifi
390-alias pci:v00008086d00002720sv*sd00000090bc*sc*i* iwlwifi
391-alias pci:v00008086d00002720sv*sd0000007Cbc*sc*i* iwlwifi
392-alias pci:v00008086d00002720sv*sd00000078bc*sc*i* iwlwifi
393-alias pci:v00008086d00002720sv*sd00000074bc*sc*i* iwlwifi
394-alias pci:v00008086d00002720sv*sd00000070bc*sc*i* iwlwifi
395-alias pci:v00008086d00002720sv*sd00000044bc*sc*i* iwlwifi
396-alias pci:v00008086d00002720sv*sd00000040bc*sc*i* iwlwifi
397-alias pci:v00008086d00002720sv*sd00000000bc*sc*i* iwlwifi
398-alias pci:v00008086d000006F0sv*sd00004244bc*sc*i* iwlwifi
399-alias pci:v00008086d000006F0sv*sd00004070bc*sc*i* iwlwifi
400-alias pci:v00008086d000006F0sv*sd00002074bc*sc*i* iwlwifi
401-alias pci:v00008086d000006F0sv*sd00001652bc*sc*i* iwlwifi
402-alias pci:v00008086d000006F0sv*sd00001651bc*sc*i* iwlwifi
403-alias pci:v00008086d000006F0sv*sd00000310bc*sc*i* iwlwifi
404-alias pci:v00008086d000006F0sv*sd00000244bc*sc*i* iwlwifi
405-alias pci:v00008086d000006F0sv*sd0000007Cbc*sc*i* iwlwifi
406-alias pci:v00008086d000006F0sv*sd00000078bc*sc*i* iwlwifi
407-alias pci:v00008086d000006F0sv*sd00000074bc*sc*i* iwlwifi
408-alias pci:v00008086d000006F0sv*sd00000070bc*sc*i* iwlwifi
409-alias pci:v00008086d000002F0sv*sd00004244bc*sc*i* iwlwifi
410-alias pci:v00008086d000002F0sv*sd00004070bc*sc*i* iwlwifi
411-alias pci:v00008086d000002F0sv*sd00002074bc*sc*i* iwlwifi
412-alias pci:v00008086d000002F0sv*sd00001652bc*sc*i* iwlwifi
413-alias pci:v00008086d000002F0sv*sd00001651bc*sc*i* iwlwifi
414-alias pci:v00008086d000002F0sv*sd00000310bc*sc*i* iwlwifi
415-alias pci:v00008086d000002F0sv*sd00000244bc*sc*i* iwlwifi
416-alias pci:v00008086d000002F0sv*sd0000007Cbc*sc*i* iwlwifi
417-alias pci:v00008086d000002F0sv*sd00000078bc*sc*i* iwlwifi
418-alias pci:v00008086d000002F0sv*sd00000074bc*sc*i* iwlwifi
419-alias pci:v00008086d000002F0sv*sd00000070bc*sc*i* iwlwifi
420-alias pci:v00008086d00000000sv*sd00000000bc*sc*i* iwlwifi
421-alias pci:v00008086d00002526sv*sd00000000bc*sc*i* iwlwifi
422-alias pci:v00008086d00002720sv*sd00000030bc*sc*i* iwlwifi
423-alias pci:v00008086d0000A370sv*sd000042A4bc*sc*i* iwlwifi
424-alias pci:v00008086d0000A370sv*sd00004234bc*sc*i* iwlwifi
425-alias pci:v00008086d0000A370sv*sd000040A4bc*sc*i* iwlwifi
426-alias pci:v00008086d0000A370sv*sd00004034bc*sc*i* iwlwifi
427-alias pci:v00008086d0000A370sv*sd00004030bc*sc*i* iwlwifi
428-alias pci:v00008086d0000A370sv*sd00002034bc*sc*i* iwlwifi
429-alias pci:v00008086d0000A370sv*sd00002030bc*sc*i* iwlwifi
430-alias pci:v00008086d0000A370sv*sd00001552bc*sc*i* iwlwifi
431-alias pci:v00008086d0000A370sv*sd00001551bc*sc*i* iwlwifi
432-alias pci:v00008086d0000A370sv*sd00001210bc*sc*i* iwlwifi
433-alias pci:v00008086d0000A370sv*sd00001030bc*sc*i* iwlwifi
434-alias pci:v00008086d0000A370sv*sd00001010bc*sc*i* iwlwifi
435-alias pci:v00008086d0000A370sv*sd000002A4bc*sc*i* iwlwifi
436-alias pci:v00008086d0000A370sv*sd000002A0bc*sc*i* iwlwifi
437-alias pci:v00008086d0000A370sv*sd00000264bc*sc*i* iwlwifi
438-alias pci:v00008086d0000A370sv*sd00000260bc*sc*i* iwlwifi
439-alias pci:v00008086d0000A370sv*sd0000023Cbc*sc*i* iwlwifi
440-alias pci:v00008086d0000A370sv*sd00000238bc*sc*i* iwlwifi
441-alias pci:v00008086d0000A370sv*sd00000234bc*sc*i* iwlwifi
442-alias pci:v00008086d0000A370sv*sd00000230bc*sc*i* iwlwifi
443-alias pci:v00008086d0000A370sv*sd000000A4bc*sc*i* iwlwifi
444-alias pci:v00008086d0000A370sv*sd000000A0bc*sc*i* iwlwifi
445-alias pci:v00008086d0000A370sv*sd00000064bc*sc*i* iwlwifi
446-alias pci:v00008086d0000A370sv*sd00000060bc*sc*i* iwlwifi
447-alias pci:v00008086d0000A370sv*sd0000003Cbc*sc*i* iwlwifi
448-alias pci:v00008086d0000A370sv*sd00000038bc*sc*i* iwlwifi
449-alias pci:v00008086d0000A370sv*sd00000034bc*sc*i* iwlwifi
450-alias pci:v00008086d0000A370sv*sd00000030bc*sc*i* iwlwifi
451-alias pci:v00008086d0000A0F0sv*sd000042A4bc*sc*i* iwlwifi
452-alias pci:v00008086d0000A0F0sv*sd00004234bc*sc*i* iwlwifi
453-alias pci:v00008086d0000A0F0sv*sd000040A4bc*sc*i* iwlwifi
454-alias pci:v00008086d0000A0F0sv*sd00004034bc*sc*i* iwlwifi
455-alias pci:v00008086d0000A0F0sv*sd00004030bc*sc*i* iwlwifi
456-alias pci:v00008086d0000A0F0sv*sd00002034bc*sc*i* iwlwifi
457-alias pci:v00008086d0000A0F0sv*sd00002030bc*sc*i* iwlwifi
458-alias pci:v00008086d0000A0F0sv*sd00001552bc*sc*i* iwlwifi
459-alias pci:v00008086d0000A0F0sv*sd00001551bc*sc*i* iwlwifi
460-alias pci:v00008086d0000A0F0sv*sd00001210bc*sc*i* iwlwifi
461-alias pci:v00008086d0000A0F0sv*sd00001030bc*sc*i* iwlwifi
462-alias pci:v00008086d0000A0F0sv*sd00001010bc*sc*i* iwlwifi
463-alias pci:v00008086d0000A0F0sv*sd000002A4bc*sc*i* iwlwifi
464-alias pci:v00008086d0000A0F0sv*sd000002A0bc*sc*i* iwlwifi
465-alias pci:v00008086d0000A0F0sv*sd00000264bc*sc*i* iwlwifi
466-alias pci:v00008086d0000A0F0sv*sd00000260bc*sc*i* iwlwifi
467-alias pci:v00008086d0000A0F0sv*sd00000244bc*sc*i* iwlwifi
468-alias pci:v00008086d0000A0F0sv*sd0000023Cbc*sc*i* iwlwifi
469-alias pci:v00008086d0000A0F0sv*sd00000238bc*sc*i* iwlwifi
470-alias pci:v00008086d0000A0F0sv*sd00000234bc*sc*i* iwlwifi
471-alias pci:v00008086d0000A0F0sv*sd00000230bc*sc*i* iwlwifi
472-alias pci:v00008086d0000A0F0sv*sd000000A4bc*sc*i* iwlwifi
473-alias pci:v00008086d0000A0F0sv*sd000000A0bc*sc*i* iwlwifi
474-alias pci:v00008086d0000A0F0sv*sd00000064bc*sc*i* iwlwifi
475-alias pci:v00008086d0000A0F0sv*sd00000060bc*sc*i* iwlwifi
476-alias pci:v00008086d0000A0F0sv*sd00000044bc*sc*i* iwlwifi
477-alias pci:v00008086d0000A0F0sv*sd0000003Cbc*sc*i* iwlwifi
478-alias pci:v00008086d0000A0F0sv*sd00000038bc*sc*i* iwlwifi
479-alias pci:v00008086d0000A0F0sv*sd00000034bc*sc*i* iwlwifi
480-alias pci:v00008086d0000A0F0sv*sd00000030bc*sc*i* iwlwifi
481-alias pci:v00008086d00009DF0sv*sd000042A4bc*sc*i* iwlwifi
482-alias pci:v00008086d00009DF0sv*sd00004234bc*sc*i* iwlwifi
483-alias pci:v00008086d00009DF0sv*sd000040A4bc*sc*i* iwlwifi
484-alias pci:v00008086d00009DF0sv*sd00004034bc*sc*i* iwlwifi
485-alias pci:v00008086d00009DF0sv*sd00004030bc*sc*i* iwlwifi
486-alias pci:v00008086d00009DF0sv*sd00002A10bc*sc*i* iwlwifi
487-alias pci:v00008086d00009DF0sv*sd00002034bc*sc*i* iwlwifi
488-alias pci:v00008086d00009DF0sv*sd00002030bc*sc*i* iwlwifi
489-alias pci:v00008086d00009DF0sv*sd00002010bc*sc*i* iwlwifi
490-alias pci:v00008086d00009DF0sv*sd00001552bc*sc*i* iwlwifi
491-alias pci:v00008086d00009DF0sv*sd00001551bc*sc*i* iwlwifi
492-alias pci:v00008086d00009DF0sv*sd00001210bc*sc*i* iwlwifi
493-alias pci:v00008086d00009DF0sv*sd00001030bc*sc*i* iwlwifi
494-alias pci:v00008086d00009DF0sv*sd00001010bc*sc*i* iwlwifi
495-alias pci:v00008086d00009DF0sv*sd00000A10bc*sc*i* iwlwifi
496-alias pci:v00008086d00009DF0sv*sd00000710bc*sc*i* iwlwifi
497-alias pci:v00008086d00009DF0sv*sd00000610bc*sc*i* iwlwifi
498-alias pci:v00008086d00009DF0sv*sd00000510bc*sc*i* iwlwifi
499-alias pci:v00008086d00009DF0sv*sd00000410bc*sc*i* iwlwifi
500-alias pci:v00008086d00009DF0sv*sd00000310bc*sc*i* iwlwifi
501-alias pci:v00008086d00009DF0sv*sd000002A4bc*sc*i* iwlwifi
502-alias pci:v00008086d00009DF0sv*sd000002A0bc*sc*i* iwlwifi
503-alias pci:v00008086d00009DF0sv*sd00000264bc*sc*i* iwlwifi
504-alias pci:v00008086d00009DF0sv*sd00000260bc*sc*i* iwlwifi
505-alias pci:v00008086d00009DF0sv*sd0000023Cbc*sc*i* iwlwifi
506-alias pci:v00008086d00009DF0sv*sd00000238bc*sc*i* iwlwifi
507-alias pci:v00008086d00009DF0sv*sd00000234bc*sc*i* iwlwifi
508-alias pci:v00008086d00009DF0sv*sd00000230bc*sc*i* iwlwifi
509-alias pci:v00008086d00009DF0sv*sd00000210bc*sc*i* iwlwifi
510-alias pci:v00008086d00009DF0sv*sd000000A4bc*sc*i* iwlwifi
511-alias pci:v00008086d00009DF0sv*sd000000A0bc*sc*i* iwlwifi
512-alias pci:v00008086d00009DF0sv*sd00000064bc*sc*i* iwlwifi
513-alias pci:v00008086d00009DF0sv*sd00000060bc*sc*i* iwlwifi
514-alias pci:v00008086d00009DF0sv*sd0000003Cbc*sc*i* iwlwifi
515-alias pci:v00008086d00009DF0sv*sd00000038bc*sc*i* iwlwifi
516-alias pci:v00008086d00009DF0sv*sd00000034bc*sc*i* iwlwifi
517-alias pci:v00008086d00009DF0sv*sd00000030bc*sc*i* iwlwifi
518-alias pci:v00008086d00009DF0sv*sd00000010bc*sc*i* iwlwifi
519-alias pci:v00008086d00009DF0sv*sd00000000bc*sc*i* iwlwifi
520-alias pci:v00008086d000043F0sv*sd000042A4bc*sc*i* iwlwifi
521-alias pci:v00008086d000043F0sv*sd00004234bc*sc*i* iwlwifi
522-alias pci:v00008086d000043F0sv*sd000040A4bc*sc*i* iwlwifi
523-alias pci:v00008086d000043F0sv*sd00004034bc*sc*i* iwlwifi
524-alias pci:v00008086d000043F0sv*sd00004030bc*sc*i* iwlwifi
525-alias pci:v00008086d000043F0sv*sd00002034bc*sc*i* iwlwifi
526-alias pci:v00008086d000043F0sv*sd00002030bc*sc*i* iwlwifi
527-alias pci:v00008086d000043F0sv*sd00001552bc*sc*i* iwlwifi
528-alias pci:v00008086d000043F0sv*sd00001551bc*sc*i* iwlwifi
529-alias pci:v00008086d000043F0sv*sd00001210bc*sc*i* iwlwifi
530-alias pci:v00008086d000043F0sv*sd00001030bc*sc*i* iwlwifi
531-alias pci:v00008086d000043F0sv*sd00001010bc*sc*i* iwlwifi
532-alias pci:v00008086d000043F0sv*sd000002A4bc*sc*i* iwlwifi
533-alias pci:v00008086d000043F0sv*sd000002A0bc*sc*i* iwlwifi
534-alias pci:v00008086d000043F0sv*sd00000264bc*sc*i* iwlwifi
535-alias pci:v00008086d000043F0sv*sd00000260bc*sc*i* iwlwifi
536-alias pci:v00008086d000043F0sv*sd00000244bc*sc*i* iwlwifi
537-alias pci:v00008086d000043F0sv*sd0000023Cbc*sc*i* iwlwifi
538-alias pci:v00008086d000043F0sv*sd00000238bc*sc*i* iwlwifi
539-alias pci:v00008086d000043F0sv*sd00000234bc*sc*i* iwlwifi
540-alias pci:v00008086d000043F0sv*sd00000230bc*sc*i* iwlwifi
541-alias pci:v00008086d000043F0sv*sd000000A4bc*sc*i* iwlwifi
542-alias pci:v00008086d000043F0sv*sd000000A0bc*sc*i* iwlwifi
543-alias pci:v00008086d000043F0sv*sd00000064bc*sc*i* iwlwifi
544-alias pci:v00008086d000043F0sv*sd00000060bc*sc*i* iwlwifi
545-alias pci:v00008086d000043F0sv*sd00000044bc*sc*i* iwlwifi
546-alias pci:v00008086d000043F0sv*sd0000003Cbc*sc*i* iwlwifi
547-alias pci:v00008086d000043F0sv*sd00000038bc*sc*i* iwlwifi
548-alias pci:v00008086d000043F0sv*sd00000034bc*sc*i* iwlwifi
549-alias pci:v00008086d000043F0sv*sd00000030bc*sc*i* iwlwifi
550-alias pci:v00008086d00003DF0sv*sd000042A4bc*sc*i* iwlwifi
551-alias pci:v00008086d00003DF0sv*sd00004234bc*sc*i* iwlwifi
552-alias pci:v00008086d00003DF0sv*sd000040A4bc*sc*i* iwlwifi
553-alias pci:v00008086d00003DF0sv*sd00004034bc*sc*i* iwlwifi
554-alias pci:v00008086d00003DF0sv*sd00004030bc*sc*i* iwlwifi
555-alias pci:v00008086d00003DF0sv*sd00002034bc*sc*i* iwlwifi
556-alias pci:v00008086d00003DF0sv*sd00002030bc*sc*i* iwlwifi
557-alias pci:v00008086d00003DF0sv*sd00001552bc*sc*i* iwlwifi
558-alias pci:v00008086d00003DF0sv*sd00001551bc*sc*i* iwlwifi
559-alias pci:v00008086d00003DF0sv*sd00001210bc*sc*i* iwlwifi
560-alias pci:v00008086d00003DF0sv*sd00001030bc*sc*i* iwlwifi
561-alias pci:v00008086d00003DF0sv*sd00001010bc*sc*i* iwlwifi
562-alias pci:v00008086d00003DF0sv*sd000002A4bc*sc*i* iwlwifi
563-alias pci:v00008086d00003DF0sv*sd000002A0bc*sc*i* iwlwifi
564-alias pci:v00008086d00003DF0sv*sd00000264bc*sc*i* iwlwifi
565-alias pci:v00008086d00003DF0sv*sd00000260bc*sc*i* iwlwifi
566-alias pci:v00008086d00003DF0sv*sd0000023Cbc*sc*i* iwlwifi
567-alias pci:v00008086d00003DF0sv*sd00000238bc*sc*i* iwlwifi
568-alias pci:v00008086d00003DF0sv*sd00000234bc*sc*i* iwlwifi
569-alias pci:v00008086d00003DF0sv*sd00000230bc*sc*i* iwlwifi
570-alias pci:v00008086d00003DF0sv*sd000000A4bc*sc*i* iwlwifi
571-alias pci:v00008086d00003DF0sv*sd000000A0bc*sc*i* iwlwifi
572-alias pci:v00008086d00003DF0sv*sd00000064bc*sc*i* iwlwifi
573-alias pci:v00008086d00003DF0sv*sd00000060bc*sc*i* iwlwifi
574-alias pci:v00008086d00003DF0sv*sd0000003Cbc*sc*i* iwlwifi
575-alias pci:v00008086d00003DF0sv*sd00000038bc*sc*i* iwlwifi
576-alias pci:v00008086d00003DF0sv*sd00000034bc*sc*i* iwlwifi
577-alias pci:v00008086d00003DF0sv*sd00000030bc*sc*i* iwlwifi
578-alias pci:v00008086d000034F0sv*sd000042A4bc*sc*i* iwlwifi
579-alias pci:v00008086d000034F0sv*sd00004234bc*sc*i* iwlwifi
580-alias pci:v00008086d000034F0sv*sd000040A4bc*sc*i* iwlwifi
581-alias pci:v00008086d000034F0sv*sd00004034bc*sc*i* iwlwifi
582-alias pci:v00008086d000034F0sv*sd00004030bc*sc*i* iwlwifi
583-alias pci:v00008086d000034F0sv*sd00002034bc*sc*i* iwlwifi
584-alias pci:v00008086d000034F0sv*sd00002030bc*sc*i* iwlwifi
585-alias pci:v00008086d000034F0sv*sd00001552bc*sc*i* iwlwifi
586-alias pci:v00008086d000034F0sv*sd00001551bc*sc*i* iwlwifi
587-alias pci:v00008086d000034F0sv*sd000002A4bc*sc*i* iwlwifi
588-alias pci:v00008086d000034F0sv*sd000002A0bc*sc*i* iwlwifi
589-alias pci:v00008086d000034F0sv*sd00000264bc*sc*i* iwlwifi
590-alias pci:v00008086d000034F0sv*sd00000260bc*sc*i* iwlwifi
591-alias pci:v00008086d000034F0sv*sd00000244bc*sc*i* iwlwifi
592-alias pci:v00008086d000034F0sv*sd0000023Cbc*sc*i* iwlwifi
593-alias pci:v00008086d000034F0sv*sd00000238bc*sc*i* iwlwifi
594-alias pci:v00008086d000034F0sv*sd00000234bc*sc*i* iwlwifi
595-alias pci:v00008086d000034F0sv*sd00000230bc*sc*i* iwlwifi
596-alias pci:v00008086d000034F0sv*sd000000A4bc*sc*i* iwlwifi
597-alias pci:v00008086d000034F0sv*sd000000A0bc*sc*i* iwlwifi
598-alias pci:v00008086d000034F0sv*sd00000064bc*sc*i* iwlwifi
599-alias pci:v00008086d000034F0sv*sd00000060bc*sc*i* iwlwifi
600-alias pci:v00008086d000034F0sv*sd00000044bc*sc*i* iwlwifi
601-alias pci:v00008086d000034F0sv*sd0000003Cbc*sc*i* iwlwifi
602-alias pci:v00008086d000034F0sv*sd00000038bc*sc*i* iwlwifi
603-alias pci:v00008086d000034F0sv*sd00000034bc*sc*i* iwlwifi
604-alias pci:v00008086d000034F0sv*sd00000030bc*sc*i* iwlwifi
605-alias pci:v00008086d000031DCsv*sd000042A4bc*sc*i* iwlwifi
606-alias pci:v00008086d000031DCsv*sd00004234bc*sc*i* iwlwifi
607-alias pci:v00008086d000031DCsv*sd000040A4bc*sc*i* iwlwifi
608-alias pci:v00008086d000031DCsv*sd00004034bc*sc*i* iwlwifi
609-alias pci:v00008086d000031DCsv*sd00004030bc*sc*i* iwlwifi
610-alias pci:v00008086d000031DCsv*sd00002034bc*sc*i* iwlwifi
611-alias pci:v00008086d000031DCsv*sd00002030bc*sc*i* iwlwifi
612-alias pci:v00008086d000031DCsv*sd00001552bc*sc*i* iwlwifi
613-alias pci:v00008086d000031DCsv*sd00001551bc*sc*i* iwlwifi
614-alias pci:v00008086d000031DCsv*sd00001210bc*sc*i* iwlwifi
615-alias pci:v00008086d000031DCsv*sd00001030bc*sc*i* iwlwifi
616-alias pci:v00008086d000031DCsv*sd00001010bc*sc*i* iwlwifi
617-alias pci:v00008086d000031DCsv*sd000002A4bc*sc*i* iwlwifi
618-alias pci:v00008086d000031DCsv*sd000002A0bc*sc*i* iwlwifi
619-alias pci:v00008086d000031DCsv*sd00000264bc*sc*i* iwlwifi
620-alias pci:v00008086d000031DCsv*sd00000260bc*sc*i* iwlwifi
621-alias pci:v00008086d000031DCsv*sd0000023Cbc*sc*i* iwlwifi
622-alias pci:v00008086d000031DCsv*sd00000238bc*sc*i* iwlwifi
623-alias pci:v00008086d000031DCsv*sd00000234bc*sc*i* iwlwifi
624-alias pci:v00008086d000031DCsv*sd00000230bc*sc*i* iwlwifi
625-alias pci:v00008086d000031DCsv*sd000000A4bc*sc*i* iwlwifi
626-alias pci:v00008086d000031DCsv*sd000000A0bc*sc*i* iwlwifi
627-alias pci:v00008086d000031DCsv*sd00000064bc*sc*i* iwlwifi
628-alias pci:v00008086d000031DCsv*sd00000060bc*sc*i* iwlwifi
629-alias pci:v00008086d000031DCsv*sd0000003Cbc*sc*i* iwlwifi
630-alias pci:v00008086d000031DCsv*sd00000038bc*sc*i* iwlwifi
631-alias pci:v00008086d000031DCsv*sd00000034bc*sc*i* iwlwifi
632-alias pci:v00008086d000031DCsv*sd00000030bc*sc*i* iwlwifi
633-alias pci:v00008086d000030DCsv*sd000042A4bc*sc*i* iwlwifi
634-alias pci:v00008086d000030DCsv*sd00004234bc*sc*i* iwlwifi
635-alias pci:v00008086d000030DCsv*sd000040A4bc*sc*i* iwlwifi
636-alias pci:v00008086d000030DCsv*sd00004034bc*sc*i* iwlwifi
637-alias pci:v00008086d000030DCsv*sd00004030bc*sc*i* iwlwifi
638-alias pci:v00008086d000030DCsv*sd00002034bc*sc*i* iwlwifi
639-alias pci:v00008086d000030DCsv*sd00002030bc*sc*i* iwlwifi
640-alias pci:v00008086d000030DCsv*sd00001552bc*sc*i* iwlwifi
641-alias pci:v00008086d000030DCsv*sd00001551bc*sc*i* iwlwifi
642-alias pci:v00008086d000030DCsv*sd00001210bc*sc*i* iwlwifi
643-alias pci:v00008086d000030DCsv*sd00001030bc*sc*i* iwlwifi
644-alias pci:v00008086d000030DCsv*sd00001010bc*sc*i* iwlwifi
645-alias pci:v00008086d000030DCsv*sd000002A4bc*sc*i* iwlwifi
646-alias pci:v00008086d000030DCsv*sd000002A0bc*sc*i* iwlwifi
647-alias pci:v00008086d000030DCsv*sd00000264bc*sc*i* iwlwifi
648-alias pci:v00008086d000030DCsv*sd00000260bc*sc*i* iwlwifi
649-alias pci:v00008086d000030DCsv*sd0000023Cbc*sc*i* iwlwifi
650-alias pci:v00008086d000030DCsv*sd00000238bc*sc*i* iwlwifi
651-alias pci:v00008086d000030DCsv*sd00000234bc*sc*i* iwlwifi
652-alias pci:v00008086d000030DCsv*sd00000230bc*sc*i* iwlwifi
653-alias pci:v00008086d000030DCsv*sd000000A4bc*sc*i* iwlwifi
654-alias pci:v00008086d000030DCsv*sd000000A0bc*sc*i* iwlwifi
655-alias pci:v00008086d000030DCsv*sd00000064bc*sc*i* iwlwifi
656-alias pci:v00008086d000030DCsv*sd00000060bc*sc*i* iwlwifi
657-alias pci:v00008086d000030DCsv*sd0000003Cbc*sc*i* iwlwifi
658-alias pci:v00008086d000030DCsv*sd00000038bc*sc*i* iwlwifi
659-alias pci:v00008086d000030DCsv*sd00000034bc*sc*i* iwlwifi
660-alias pci:v00008086d000030DCsv*sd00000030bc*sc*i* iwlwifi
661-alias pci:v00008086d00002720sv*sd000042A4bc*sc*i* iwlwifi
662-alias pci:v00008086d00002720sv*sd00004234bc*sc*i* iwlwifi
663-alias pci:v00008086d00002720sv*sd000040A4bc*sc*i* iwlwifi
664-alias pci:v00008086d00002720sv*sd00004034bc*sc*i* iwlwifi
665-alias pci:v00008086d00002720sv*sd00004030bc*sc*i* iwlwifi
666-alias pci:v00008086d00002720sv*sd00002034bc*sc*i* iwlwifi
667-alias pci:v00008086d00002720sv*sd00002030bc*sc*i* iwlwifi
668-alias pci:v00008086d00002720sv*sd00001552bc*sc*i* iwlwifi
669-alias pci:v00008086d00002720sv*sd00001551bc*sc*i* iwlwifi
670-alias pci:v00008086d00002720sv*sd00001210bc*sc*i* iwlwifi
671-alias pci:v00008086d00002720sv*sd00001030bc*sc*i* iwlwifi
672-alias pci:v00008086d00002720sv*sd00001010bc*sc*i* iwlwifi
673-alias pci:v00008086d00002720sv*sd000002A4bc*sc*i* iwlwifi
674-alias pci:v00008086d00002720sv*sd000002A0bc*sc*i* iwlwifi
675-alias pci:v00008086d00002720sv*sd00000264bc*sc*i* iwlwifi
676-alias pci:v00008086d00002720sv*sd00000260bc*sc*i* iwlwifi
677-alias pci:v00008086d00002720sv*sd00000244bc*sc*i* iwlwifi
678-alias pci:v00008086d00002720sv*sd0000023Cbc*sc*i* iwlwifi
679-alias pci:v00008086d00002720sv*sd00000238bc*sc*i* iwlwifi
680-alias pci:v00008086d00002720sv*sd00000234bc*sc*i* iwlwifi
681-alias pci:v00008086d00002720sv*sd00000230bc*sc*i* iwlwifi
682-alias pci:v00008086d00002720sv*sd000000A4bc*sc*i* iwlwifi
683-alias pci:v00008086d00002720sv*sd000000A0bc*sc*i* iwlwifi
684-alias pci:v00008086d00002720sv*sd00000064bc*sc*i* iwlwifi
685-alias pci:v00008086d00002720sv*sd00000060bc*sc*i* iwlwifi
686-alias pci:v00008086d00002720sv*sd00000044bc*sc*i* iwlwifi
687-alias pci:v00008086d00002720sv*sd0000003Cbc*sc*i* iwlwifi
688-alias pci:v00008086d00002720sv*sd00000038bc*sc*i* iwlwifi
689-alias pci:v00008086d00002720sv*sd00000034bc*sc*i* iwlwifi
690-alias pci:v00008086d0000271Csv*sd00000214bc*sc*i* iwlwifi
691-alias pci:v00008086d0000271Bsv*sd00000214bc*sc*i* iwlwifi
692-alias pci:v00008086d0000271Bsv*sd00000210bc*sc*i* iwlwifi
693-alias pci:v00008086d0000271Bsv*sd00000014bc*sc*i* iwlwifi
694-alias pci:v00008086d0000271Bsv*sd00000010bc*sc*i* iwlwifi
695-alias pci:v00008086d00002526sv*sd0000E014bc*sc*i* iwlwifi
696-alias pci:v00008086d00002526sv*sd0000E010bc*sc*i* iwlwifi
697-alias pci:v00008086d00002526sv*sd0000A014bc*sc*i* iwlwifi
698-alias pci:v00008086d00002526sv*sd00008010bc*sc*i* iwlwifi
699-alias pci:v00008086d00002526sv*sd00008014bc*sc*i* iwlwifi
700-alias pci:v00008086d00002526sv*sd00006014bc*sc*i* iwlwifi
701-alias pci:v00008086d00002526sv*sd00006010bc*sc*i* iwlwifi
702-alias pci:v00008086d00002526sv*sd000042A4bc*sc*i* iwlwifi
703-alias pci:v00008086d00002526sv*sd00004234bc*sc*i* iwlwifi
704-alias pci:v00008086d00002526sv*sd000040A4bc*sc*i* iwlwifi
705-alias pci:v00008086d00002526sv*sd00004034bc*sc*i* iwlwifi
706-alias pci:v00008086d00002526sv*sd00004030bc*sc*i* iwlwifi
707-alias pci:v00008086d00002526sv*sd0000401Cbc*sc*i* iwlwifi
708-alias pci:v00008086d00002526sv*sd00004018bc*sc*i* iwlwifi
709-alias pci:v00008086d00002526sv*sd00004010bc*sc*i* iwlwifi
710-alias pci:v00008086d00002526sv*sd00002034bc*sc*i* iwlwifi
711-alias pci:v00008086d00002526sv*sd00002030bc*sc*i* iwlwifi
712-alias pci:v00008086d00002526sv*sd00001610bc*sc*i* iwlwifi
713-alias pci:v00008086d00002526sv*sd00001552bc*sc*i* iwlwifi
714-alias pci:v00008086d00002526sv*sd00001551bc*sc*i* iwlwifi
715-alias pci:v00008086d00002526sv*sd00001550bc*sc*i* iwlwifi
716-alias pci:v00008086d00002526sv*sd00001420bc*sc*i* iwlwifi
717-alias pci:v00008086d00002526sv*sd00001410bc*sc*i* iwlwifi
718-alias pci:v00008086d00002526sv*sd00001210bc*sc*i* iwlwifi
719-alias pci:v00008086d00002526sv*sd00001030bc*sc*i* iwlwifi
720-alias pci:v00008086d00002526sv*sd00001010bc*sc*i* iwlwifi
721-alias pci:v00008086d00002526sv*sd000002A4bc*sc*i* iwlwifi
722-alias pci:v00008086d00002526sv*sd000002A0bc*sc*i* iwlwifi
723-alias pci:v00008086d00002526sv*sd00000264bc*sc*i* iwlwifi
724-alias pci:v00008086d00002526sv*sd00000260bc*sc*i* iwlwifi
725-alias pci:v00008086d00002526sv*sd0000023Cbc*sc*i* iwlwifi
726-alias pci:v00008086d00002526sv*sd00000238bc*sc*i* iwlwifi
727-alias pci:v00008086d00002526sv*sd00000234bc*sc*i* iwlwifi
728-alias pci:v00008086d00002526sv*sd00000230bc*sc*i* iwlwifi
729-alias pci:v00008086d00002526sv*sd00000214bc*sc*i* iwlwifi
730-alias pci:v00008086d00002526sv*sd00000210bc*sc*i* iwlwifi
731-alias pci:v00008086d00002526sv*sd000000A4bc*sc*i* iwlwifi
732-alias pci:v00008086d00002526sv*sd000000A0bc*sc*i* iwlwifi
733-alias pci:v00008086d00002526sv*sd00000064bc*sc*i* iwlwifi
734-alias pci:v00008086d00002526sv*sd00000060bc*sc*i* iwlwifi
735-alias pci:v00008086d00002526sv*sd0000003Cbc*sc*i* iwlwifi
736-alias pci:v00008086d00002526sv*sd00000038bc*sc*i* iwlwifi
737-alias pci:v00008086d00002526sv*sd00000034bc*sc*i* iwlwifi
738-alias pci:v00008086d00002526sv*sd00000030bc*sc*i* iwlwifi
739-alias pci:v00008086d00002526sv*sd0000001Cbc*sc*i* iwlwifi
740-alias pci:v00008086d00002526sv*sd00000018bc*sc*i* iwlwifi
741-alias pci:v00008086d00002526sv*sd00000014bc*sc*i* iwlwifi
742-alias pci:v00008086d00002526sv*sd00000010bc*sc*i* iwlwifi
743-alias pci:v00008086d000006F0sv*sd000042A4bc*sc*i* iwlwifi
744-alias pci:v00008086d000006F0sv*sd00004234bc*sc*i* iwlwifi
745-alias pci:v00008086d000006F0sv*sd000040A4bc*sc*i* iwlwifi
746-alias pci:v00008086d000006F0sv*sd00004034bc*sc*i* iwlwifi
747-alias pci:v00008086d000006F0sv*sd00004030bc*sc*i* iwlwifi
748-alias pci:v00008086d000006F0sv*sd00002034bc*sc*i* iwlwifi
749-alias pci:v00008086d000006F0sv*sd00002030bc*sc*i* iwlwifi
750-alias pci:v00008086d000006F0sv*sd00001552bc*sc*i* iwlwifi
751-alias pci:v00008086d000006F0sv*sd00001551bc*sc*i* iwlwifi
752-alias pci:v00008086d000006F0sv*sd000002A4bc*sc*i* iwlwifi
753-alias pci:v00008086d000006F0sv*sd000002A0bc*sc*i* iwlwifi
754-alias pci:v00008086d000006F0sv*sd00000264bc*sc*i* iwlwifi
755-alias pci:v00008086d000006F0sv*sd00000260bc*sc*i* iwlwifi
756-alias pci:v00008086d000006F0sv*sd0000023Cbc*sc*i* iwlwifi
757-alias pci:v00008086d000006F0sv*sd00000238bc*sc*i* iwlwifi
758-alias pci:v00008086d000006F0sv*sd00000234bc*sc*i* iwlwifi
759-alias pci:v00008086d000006F0sv*sd00000230bc*sc*i* iwlwifi
760-alias pci:v00008086d000006F0sv*sd000000A4bc*sc*i* iwlwifi
761-alias pci:v00008086d000006F0sv*sd000000A0bc*sc*i* iwlwifi
762-alias pci:v00008086d000006F0sv*sd00000064bc*sc*i* iwlwifi
763-alias pci:v00008086d000006F0sv*sd00000060bc*sc*i* iwlwifi
764-alias pci:v00008086d000006F0sv*sd0000003Cbc*sc*i* iwlwifi
765-alias pci:v00008086d000006F0sv*sd00000038bc*sc*i* iwlwifi
766-alias pci:v00008086d000006F0sv*sd00000034bc*sc*i* iwlwifi
767-alias pci:v00008086d000006F0sv*sd00000030bc*sc*i* iwlwifi
768-alias pci:v00008086d000002F0sv*sd000042A4bc*sc*i* iwlwifi
769-alias pci:v00008086d000002F0sv*sd00004234bc*sc*i* iwlwifi
770-alias pci:v00008086d000002F0sv*sd000040A4bc*sc*i* iwlwifi
771-alias pci:v00008086d000002F0sv*sd00004034bc*sc*i* iwlwifi
772-alias pci:v00008086d000002F0sv*sd00004030bc*sc*i* iwlwifi
773-alias pci:v00008086d000002F0sv*sd00002034bc*sc*i* iwlwifi
774-alias pci:v00008086d000002F0sv*sd00002030bc*sc*i* iwlwifi
775-alias pci:v00008086d000002F0sv*sd00001552bc*sc*i* iwlwifi
776-alias pci:v00008086d000002F0sv*sd00001551bc*sc*i* iwlwifi
777-alias pci:v00008086d000002F0sv*sd000002A4bc*sc*i* iwlwifi
778-alias pci:v00008086d000002F0sv*sd000002A0bc*sc*i* iwlwifi
779-alias pci:v00008086d000002F0sv*sd00000264bc*sc*i* iwlwifi
780-alias pci:v00008086d000002F0sv*sd00000260bc*sc*i* iwlwifi
781-alias pci:v00008086d000002F0sv*sd0000023Cbc*sc*i* iwlwifi
782-alias pci:v00008086d000002F0sv*sd00000238bc*sc*i* iwlwifi
783-alias pci:v00008086d000002F0sv*sd00000234bc*sc*i* iwlwifi
784-alias pci:v00008086d000002F0sv*sd00000230bc*sc*i* iwlwifi
785-alias pci:v00008086d000002F0sv*sd000000A4bc*sc*i* iwlwifi
786-alias pci:v00008086d000002F0sv*sd000000A0bc*sc*i* iwlwifi
787-alias pci:v00008086d000002F0sv*sd00000064bc*sc*i* iwlwifi
788-alias pci:v00008086d000002F0sv*sd00000060bc*sc*i* iwlwifi
789-alias pci:v00008086d000002F0sv*sd0000003Cbc*sc*i* iwlwifi
790-alias pci:v00008086d000002F0sv*sd00000038bc*sc*i* iwlwifi
791-alias pci:v00008086d000002F0sv*sd00000034bc*sc*i* iwlwifi
792-alias pci:v00008086d000002F0sv*sd00000030bc*sc*i* iwlwifi
793-alias pci:v00008086d000024FDsv*sd00009074bc*sc*i* iwlwifi
794-alias pci:v00008086d000024FDsv*sd00000014bc*sc*i* iwlwifi
795-alias pci:v00008086d000024FDsv*sd00000012bc*sc*i* iwlwifi
796-alias pci:v00008086d000024FDsv*sd00001012bc*sc*i* iwlwifi
797-alias pci:v00008086d000024FDsv*sd00003E01bc*sc*i* iwlwifi
798-alias pci:v00008086d000024FDsv*sd00003E02bc*sc*i* iwlwifi
799-alias pci:v00008086d000024FDsv*sd00001014bc*sc*i* iwlwifi
800-alias pci:v00008086d000024FDsv*sd00000850bc*sc*i* iwlwifi
801-alias pci:v00008086d000024FDsv*sd00000950bc*sc*i* iwlwifi
802-alias pci:v00008086d000024FDsv*sd00000930bc*sc*i* iwlwifi
803-alias pci:v00008086d000024FDsv*sd00000910bc*sc*i* iwlwifi
804-alias pci:v00008086d000024FDsv*sd00008130bc*sc*i* iwlwifi
805-alias pci:v00008086d000024FDsv*sd00009110bc*sc*i* iwlwifi
806-alias pci:v00008086d000024FDsv*sd00000810bc*sc*i* iwlwifi
807-alias pci:v00008086d000024FDsv*sd00008010bc*sc*i* iwlwifi
808-alias pci:v00008086d000024FDsv*sd00008050bc*sc*i* iwlwifi
809-alias pci:v00008086d000024FDsv*sd00008110bc*sc*i* iwlwifi
810-alias pci:v00008086d000024FDsv*sd00009010bc*sc*i* iwlwifi
811-alias pci:v00008086d000024FDsv*sd00000150bc*sc*i* iwlwifi
812-alias pci:v00008086d000024FDsv*sd00000050bc*sc*i* iwlwifi
813-alias pci:v00008086d000024FDsv*sd000010D0bc*sc*i* iwlwifi
814-alias pci:v00008086d000024FDsv*sd00001010bc*sc*i* iwlwifi
815-alias pci:v00008086d000024FDsv*sd00000130bc*sc*i* iwlwifi
816-alias pci:v00008086d000024FDsv*sd00001130bc*sc*i* iwlwifi
817-alias pci:v00008086d000024FDsv*sd00001110bc*sc*i* iwlwifi
818-alias pci:v00008086d000024FDsv*sd00000110bc*sc*i* iwlwifi
819-alias pci:v00008086d000024FDsv*sd00000010bc*sc*i* iwlwifi
820-alias pci:v00008086d000024F3sv*sd00004010bc*sc*i* iwlwifi
821+alias pci:v00008086d000002F0sv*sd*bc*sc*i* iwlwifi
822+alias pci:v00008086d000006F0sv*sd*bc*sc*i* iwlwifi
823+alias pci:v00008086d000008B1sv*sd00004020bc*sc*i* iwlwifi
824+alias pci:v00008086d000008B1sv*sd0000402Abc*sc*i* iwlwifi
825+alias pci:v00008086d000008B1sv*sd00004060bc*sc*i* iwlwifi
826+alias pci:v00008086d000008B1sv*sd00004062bc*sc*i* iwlwifi
827+alias pci:v00008086d000008B1sv*sd0000406Abc*sc*i* iwlwifi
828+alias pci:v00008086d000008B1sv*sd00004070bc*sc*i* iwlwifi
829+alias pci:v00008086d000008B1sv*sd00004072bc*sc*i* iwlwifi
830+alias pci:v00008086d000008B1sv*sd00004160bc*sc*i* iwlwifi
831+alias pci:v00008086d000008B1sv*sd00004162bc*sc*i* iwlwifi
832+alias pci:v00008086d000008B1sv*sd00004170bc*sc*i* iwlwifi
833+alias pci:v00008086d000008B1sv*sd00004420bc*sc*i* iwlwifi
834+alias pci:v00008086d000008B1sv*sd00004460bc*sc*i* iwlwifi
835+alias pci:v00008086d000008B1sv*sd00004462bc*sc*i* iwlwifi
836+alias pci:v00008086d000008B1sv*sd0000446Abc*sc*i* iwlwifi
837+alias pci:v00008086d000008B1sv*sd00004470bc*sc*i* iwlwifi
838+alias pci:v00008086d000008B1sv*sd00004472bc*sc*i* iwlwifi
839+alias pci:v00008086d000008B1sv*sd00004560bc*sc*i* iwlwifi
840+alias pci:v00008086d000008B1sv*sd00004570bc*sc*i* iwlwifi
841+alias pci:v00008086d000008B1sv*sd0000486Ebc*sc*i* iwlwifi
842+alias pci:v00008086d000008B1sv*sd00004870bc*sc*i* iwlwifi
843+alias pci:v00008086d000008B1sv*sd00004A6Cbc*sc*i* iwlwifi
844+alias pci:v00008086d000008B1sv*sd00004A6Ebc*sc*i* iwlwifi
845+alias pci:v00008086d000008B1sv*sd00004A70bc*sc*i* iwlwifi
846+alias pci:v00008086d000008B1sv*sd00004C60bc*sc*i* iwlwifi
847+alias pci:v00008086d000008B1sv*sd00004C70bc*sc*i* iwlwifi
848+alias pci:v00008086d000008B1sv*sd00005070bc*sc*i* iwlwifi
849+alias pci:v00008086d000008B1sv*sd00005072bc*sc*i* iwlwifi
850+alias pci:v00008086d000008B1sv*sd00005170bc*sc*i* iwlwifi
851+alias pci:v00008086d000008B1sv*sd00005770bc*sc*i* iwlwifi
852+alias pci:v00008086d000008B1sv*sd0000C020bc*sc*i* iwlwifi
853+alias pci:v00008086d000008B1sv*sd0000C02Abc*sc*i* iwlwifi
854+alias pci:v00008086d000008B1sv*sd0000C060bc*sc*i* iwlwifi
855+alias pci:v00008086d000008B1sv*sd0000C062bc*sc*i* iwlwifi
856+alias pci:v00008086d000008B1sv*sd0000C06Abc*sc*i* iwlwifi
857+alias pci:v00008086d000008B1sv*sd0000C070bc*sc*i* iwlwifi
858+alias pci:v00008086d000008B1sv*sd0000C072bc*sc*i* iwlwifi
859+alias pci:v00008086d000008B1sv*sd0000C160bc*sc*i* iwlwifi
860+alias pci:v00008086d000008B1sv*sd0000C162bc*sc*i* iwlwifi
861+alias pci:v00008086d000008B1sv*sd0000C170bc*sc*i* iwlwifi
862+alias pci:v00008086d000008B1sv*sd0000C360bc*sc*i* iwlwifi
863+alias pci:v00008086d000008B1sv*sd0000C420bc*sc*i* iwlwifi
864+alias pci:v00008086d000008B1sv*sd0000C460bc*sc*i* iwlwifi
865+alias pci:v00008086d000008B1sv*sd0000C462bc*sc*i* iwlwifi
866+alias pci:v00008086d000008B1sv*sd0000C470bc*sc*i* iwlwifi
867+alias pci:v00008086d000008B1sv*sd0000C472bc*sc*i* iwlwifi
868+alias pci:v00008086d000008B1sv*sd0000C560bc*sc*i* iwlwifi
869+alias pci:v00008086d000008B1sv*sd0000C570bc*sc*i* iwlwifi
870+alias pci:v00008086d000008B1sv*sd0000C760bc*sc*i* iwlwifi
871+alias pci:v00008086d000008B1sv*sd0000C770bc*sc*i* iwlwifi
872+alias pci:v00008086d000008B1sv*sd0000CC60bc*sc*i* iwlwifi
873+alias pci:v00008086d000008B1sv*sd0000CC70bc*sc*i* iwlwifi
874+alias pci:v00008086d000008B2sv*sd00004220bc*sc*i* iwlwifi
875+alias pci:v00008086d000008B2sv*sd00004260bc*sc*i* iwlwifi
876+alias pci:v00008086d000008B2sv*sd00004262bc*sc*i* iwlwifi
877+alias pci:v00008086d000008B2sv*sd0000426Abc*sc*i* iwlwifi
878+alias pci:v00008086d000008B2sv*sd00004270bc*sc*i* iwlwifi
879+alias pci:v00008086d000008B2sv*sd00004272bc*sc*i* iwlwifi
880+alias pci:v00008086d000008B2sv*sd00004360bc*sc*i* iwlwifi
881+alias pci:v00008086d000008B2sv*sd00004370bc*sc*i* iwlwifi
882+alias pci:v00008086d000008B2sv*sd0000C220bc*sc*i* iwlwifi
883+alias pci:v00008086d000008B2sv*sd0000C260bc*sc*i* iwlwifi
884+alias pci:v00008086d000008B2sv*sd0000C262bc*sc*i* iwlwifi
885+alias pci:v00008086d000008B2sv*sd0000C26Abc*sc*i* iwlwifi
886+alias pci:v00008086d000008B2sv*sd0000C270bc*sc*i* iwlwifi
887+alias pci:v00008086d000008B2sv*sd0000C272bc*sc*i* iwlwifi
888+alias pci:v00008086d000008B2sv*sd0000C370bc*sc*i* iwlwifi
889+alias pci:v00008086d000008B3sv*sd00000060bc*sc*i* iwlwifi
890+alias pci:v00008086d000008B3sv*sd00000062bc*sc*i* iwlwifi
891+alias pci:v00008086d000008B3sv*sd00000070bc*sc*i* iwlwifi
892+alias pci:v00008086d000008B3sv*sd00000072bc*sc*i* iwlwifi
893+alias pci:v00008086d000008B3sv*sd00000170bc*sc*i* iwlwifi
894+alias pci:v00008086d000008B3sv*sd00000172bc*sc*i* iwlwifi
895+alias pci:v00008086d000008B3sv*sd00000470bc*sc*i* iwlwifi
896+alias pci:v00008086d000008B3sv*sd00000472bc*sc*i* iwlwifi
897+alias pci:v00008086d000008B3sv*sd00001070bc*sc*i* iwlwifi
898+alias pci:v00008086d000008B3sv*sd00001170bc*sc*i* iwlwifi
899+alias pci:v00008086d000008B3sv*sd00008060bc*sc*i* iwlwifi
900+alias pci:v00008086d000008B3sv*sd00008062bc*sc*i* iwlwifi
901+alias pci:v00008086d000008B3sv*sd00008070bc*sc*i* iwlwifi
902+alias pci:v00008086d000008B3sv*sd00008072bc*sc*i* iwlwifi
903+alias pci:v00008086d000008B3sv*sd00008170bc*sc*i* iwlwifi
904+alias pci:v00008086d000008B3sv*sd00008172bc*sc*i* iwlwifi
905+alias pci:v00008086d000008B3sv*sd00008470bc*sc*i* iwlwifi
906+alias pci:v00008086d000008B3sv*sd00008570bc*sc*i* iwlwifi
907+alias pci:v00008086d000008B4sv*sd00000270bc*sc*i* iwlwifi
908+alias pci:v00008086d000008B4sv*sd00000272bc*sc*i* iwlwifi
909+alias pci:v00008086d000008B4sv*sd00000370bc*sc*i* iwlwifi
910+alias pci:v00008086d000008B4sv*sd00008270bc*sc*i* iwlwifi
911+alias pci:v00008086d000008B4sv*sd00008272bc*sc*i* iwlwifi
912+alias pci:v00008086d000008B4sv*sd00008370bc*sc*i* iwlwifi
913+alias pci:v00008086d0000095Asv*sd00001010bc*sc*i* iwlwifi
914+alias pci:v00008086d0000095Asv*sd00005000bc*sc*i* iwlwifi
915+alias pci:v00008086d0000095Asv*sd00005002bc*sc*i* iwlwifi
916+alias pci:v00008086d0000095Asv*sd0000500Abc*sc*i* iwlwifi
917+alias pci:v00008086d0000095Asv*sd00005010bc*sc*i* iwlwifi
918+alias pci:v00008086d0000095Asv*sd00005012bc*sc*i* iwlwifi
919+alias pci:v00008086d0000095Asv*sd00005020bc*sc*i* iwlwifi
920+alias pci:v00008086d0000095Asv*sd0000502Abc*sc*i* iwlwifi
921+alias pci:v00008086d0000095Asv*sd00005090bc*sc*i* iwlwifi
922+alias pci:v00008086d0000095Asv*sd00005100bc*sc*i* iwlwifi
923+alias pci:v00008086d0000095Asv*sd00005102bc*sc*i* iwlwifi
924+alias pci:v00008086d0000095Asv*sd00005110bc*sc*i* iwlwifi
925+alias pci:v00008086d0000095Asv*sd00005190bc*sc*i* iwlwifi
926+alias pci:v00008086d0000095Asv*sd00005400bc*sc*i* iwlwifi
927+alias pci:v00008086d0000095Asv*sd00005410bc*sc*i* iwlwifi
928+alias pci:v00008086d0000095Asv*sd00005412bc*sc*i* iwlwifi
929+alias pci:v00008086d0000095Asv*sd00005420bc*sc*i* iwlwifi
930+alias pci:v00008086d0000095Asv*sd00005490bc*sc*i* iwlwifi
931+alias pci:v00008086d0000095Asv*sd00005510bc*sc*i* iwlwifi
932+alias pci:v00008086d0000095Asv*sd00005590bc*sc*i* iwlwifi
933+alias pci:v00008086d0000095Asv*sd00005C10bc*sc*i* iwlwifi
934+alias pci:v00008086d0000095Asv*sd00005F10bc*sc*i* iwlwifi
935+alias pci:v00008086d0000095Asv*sd00009000bc*sc*i* iwlwifi
936+alias pci:v00008086d0000095Asv*sd0000900Abc*sc*i* iwlwifi
937+alias pci:v00008086d0000095Asv*sd00009010bc*sc*i* iwlwifi
938+alias pci:v00008086d0000095Asv*sd00009012bc*sc*i* iwlwifi
939+alias pci:v00008086d0000095Asv*sd00009110bc*sc*i* iwlwifi
940+alias pci:v00008086d0000095Asv*sd00009112bc*sc*i* iwlwifi
941+alias pci:v00008086d0000095Asv*sd00009400bc*sc*i* iwlwifi
942+alias pci:v00008086d0000095Asv*sd00009410bc*sc*i* iwlwifi
943+alias pci:v00008086d0000095Asv*sd00009510bc*sc*i* iwlwifi
944+alias pci:v00008086d0000095Asv*sd00009E10bc*sc*i* iwlwifi
945+alias pci:v00008086d0000095Bsv*sd00005200bc*sc*i* iwlwifi
946+alias pci:v00008086d0000095Bsv*sd00005202bc*sc*i* iwlwifi
947+alias pci:v00008086d0000095Bsv*sd0000520Abc*sc*i* iwlwifi
948+alias pci:v00008086d0000095Bsv*sd00005210bc*sc*i* iwlwifi
949+alias pci:v00008086d0000095Bsv*sd00005212bc*sc*i* iwlwifi
950+alias pci:v00008086d0000095Bsv*sd00005290bc*sc*i* iwlwifi
951+alias pci:v00008086d0000095Bsv*sd00005302bc*sc*i* iwlwifi
952+alias pci:v00008086d0000095Bsv*sd00005310bc*sc*i* iwlwifi
953+alias pci:v00008086d0000095Bsv*sd00009200bc*sc*i* iwlwifi
954+alias pci:v00008086d0000095Bsv*sd00009210bc*sc*i* iwlwifi
955+alias pci:v00008086d0000095Bsv*sd00009310bc*sc*i* iwlwifi
956 alias pci:v00008086d000024F3sv*sd00000000bc*sc*i* iwlwifi
957-alias pci:v00008086d000024F3sv*sd00000930bc*sc*i* iwlwifi
958-alias pci:v00008086d000024F3sv*sd00000950bc*sc*i* iwlwifi
959+alias pci:v00008086d000024F3sv*sd00000004bc*sc*i* iwlwifi
960+alias pci:v00008086d000024F3sv*sd00000010bc*sc*i* iwlwifi
961+alias pci:v00008086d000024F3sv*sd00000012bc*sc*i* iwlwifi
962+alias pci:v00008086d000024F3sv*sd00000044bc*sc*i* iwlwifi
963+alias pci:v00008086d000024F3sv*sd00000050bc*sc*i* iwlwifi
964+alias pci:v00008086d000024F3sv*sd00000110bc*sc*i* iwlwifi
965+alias pci:v00008086d000024F3sv*sd00000130bc*sc*i* iwlwifi
966+alias pci:v00008086d000024F3sv*sd00000132bc*sc*i* iwlwifi
967+alias pci:v00008086d000024F3sv*sd00000150bc*sc*i* iwlwifi
968+alias pci:v00008086d000024F3sv*sd000001F0bc*sc*i* iwlwifi
969+alias pci:v00008086d000024F3sv*sd00000250bc*sc*i* iwlwifi
970+alias pci:v00008086d000024F3sv*sd00000810bc*sc*i* iwlwifi
971 alias pci:v00008086d000024F3sv*sd00000850bc*sc*i* iwlwifi
972 alias pci:v00008086d000024F3sv*sd00000910bc*sc*i* iwlwifi
973-alias pci:v00008086d000024F3sv*sd00000810bc*sc*i* iwlwifi
974-alias pci:v00008086d000024F6sv*sd00000030bc*sc*i* iwlwifi
975-alias pci:v00008086d000024F5sv*sd00000010bc*sc*i* iwlwifi
976-alias pci:v00008086d000024F3sv*sd00000044bc*sc*i* iwlwifi
977-alias pci:v00008086d000024F3sv*sd00000004bc*sc*i* iwlwifi
978-alias pci:v00008086d000024F3sv*sd00009150bc*sc*i* iwlwifi
979-alias pci:v00008086d000024F3sv*sd00009050bc*sc*i* iwlwifi
980-alias pci:v00008086d000024F3sv*sd00008150bc*sc*i* iwlwifi
981+alias pci:v00008086d000024F3sv*sd00000930bc*sc*i* iwlwifi
982+alias pci:v00008086d000024F3sv*sd00000950bc*sc*i* iwlwifi
983+alias pci:v00008086d000024F3sv*sd00001010bc*sc*i* iwlwifi
984+alias pci:v00008086d000024F3sv*sd00001012bc*sc*i* iwlwifi
985+alias pci:v00008086d000024F3sv*sd00001050bc*sc*i* iwlwifi
986+alias pci:v00008086d000024F3sv*sd000010B0bc*sc*i* iwlwifi
987+alias pci:v00008086d000024F3sv*sd00001110bc*sc*i* iwlwifi
988+alias pci:v00008086d000024F3sv*sd00001130bc*sc*i* iwlwifi
989+alias pci:v00008086d000024F3sv*sd00001132bc*sc*i* iwlwifi
990+alias pci:v00008086d000024F3sv*sd00001150bc*sc*i* iwlwifi
991+alias pci:v00008086d000024F3sv*sd00004010bc*sc*i* iwlwifi
992+alias pci:v00008086d000024F3sv*sd00008010bc*sc*i* iwlwifi
993 alias pci:v00008086d000024F3sv*sd00008050bc*sc*i* iwlwifi
994-alias pci:v00008086d000024F3sv*sd00009132bc*sc*i* iwlwifi
995-alias pci:v00008086d000024F3sv*sd00008132bc*sc*i* iwlwifi
996-alias pci:v00008086d000024F3sv*sd00009130bc*sc*i* iwlwifi
997+alias pci:v00008086d000024F3sv*sd00008110bc*sc*i* iwlwifi
998 alias pci:v00008086d000024F3sv*sd00008130bc*sc*i* iwlwifi
999-alias pci:v00008086d000024F4sv*sd0000D030bc*sc*i* iwlwifi
1000-alias pci:v00008086d000024F4sv*sd0000C030bc*sc*i* iwlwifi
1001-alias pci:v00008086d000024F4sv*sd00009030bc*sc*i* iwlwifi
1002-alias pci:v00008086d000024F4sv*sd00008030bc*sc*i* iwlwifi
1003-alias pci:v00008086d000024F3sv*sd00009110bc*sc*i* iwlwifi
1004+alias pci:v00008086d000024F3sv*sd00008132bc*sc*i* iwlwifi
1005+alias pci:v00008086d000024F3sv*sd00008150bc*sc*i* iwlwifi
1006 alias pci:v00008086d000024F3sv*sd00009010bc*sc*i* iwlwifi
1007-alias pci:v00008086d000024F3sv*sd00008110bc*sc*i* iwlwifi
1008-alias pci:v00008086d000024F3sv*sd00008010bc*sc*i* iwlwifi
1009+alias pci:v00008086d000024F3sv*sd00009050bc*sc*i* iwlwifi
1010+alias pci:v00008086d000024F3sv*sd00009110bc*sc*i* iwlwifi
1011+alias pci:v00008086d000024F3sv*sd00009130bc*sc*i* iwlwifi
1012+alias pci:v00008086d000024F3sv*sd00009132bc*sc*i* iwlwifi
1013+alias pci:v00008086d000024F3sv*sd00009150bc*sc*i* iwlwifi
1014 alias pci:v00008086d000024F3sv*sd0000B0B0bc*sc*i* iwlwifi
1015-alias pci:v00008086d000024F3sv*sd0000D0B0bc*sc*i* iwlwifi
1016-alias pci:v00008086d000024F3sv*sd0000D050bc*sc*i* iwlwifi
1017+alias pci:v00008086d000024F3sv*sd0000C010bc*sc*i* iwlwifi
1018 alias pci:v00008086d000024F3sv*sd0000C050bc*sc*i* iwlwifi
1019-alias pci:v00008086d000024F3sv*sd0000D010bc*sc*i* iwlwifi
1020 alias pci:v00008086d000024F3sv*sd0000C110bc*sc*i* iwlwifi
1021-alias pci:v00008086d000024F3sv*sd0000C010bc*sc*i* iwlwifi
1022-alias pci:v00008086d000024F4sv*sd00001030bc*sc*i* iwlwifi
1023+alias pci:v00008086d000024F3sv*sd0000D010bc*sc*i* iwlwifi
1024+alias pci:v00008086d000024F3sv*sd0000D050bc*sc*i* iwlwifi
1025+alias pci:v00008086d000024F3sv*sd0000D0B0bc*sc*i* iwlwifi
1026 alias pci:v00008086d000024F4sv*sd00000030bc*sc*i* iwlwifi
1027-alias pci:v00008086d000024F3sv*sd00001150bc*sc*i* iwlwifi
1028-alias pci:v00008086d000024F3sv*sd00000150bc*sc*i* iwlwifi
1029-alias pci:v00008086d000024F3sv*sd00001050bc*sc*i* iwlwifi
1030-alias pci:v00008086d000024F3sv*sd00000250bc*sc*i* iwlwifi
1031-alias pci:v00008086d000024F3sv*sd00000050bc*sc*i* iwlwifi
1032-alias pci:v00008086d000024F3sv*sd00001110bc*sc*i* iwlwifi
1033-alias pci:v00008086d000024F3sv*sd00001012bc*sc*i* iwlwifi
1034-alias pci:v00008086d000024F3sv*sd00000012bc*sc*i* iwlwifi
1035-alias pci:v00008086d000024F3sv*sd000001F0bc*sc*i* iwlwifi
1036-alias pci:v00008086d000024F3sv*sd00000110bc*sc*i* iwlwifi
1037-alias pci:v00008086d000024F3sv*sd00001132bc*sc*i* iwlwifi
1038-alias pci:v00008086d000024F3sv*sd00000132bc*sc*i* iwlwifi
1039-alias pci:v00008086d000024F3sv*sd00001130bc*sc*i* iwlwifi
1040-alias pci:v00008086d000024F3sv*sd00000130bc*sc*i* iwlwifi
1041-alias pci:v00008086d000024F3sv*sd000010B0bc*sc*i* iwlwifi
1042-alias pci:v00008086d000024F3sv*sd00001010bc*sc*i* iwlwifi
1043-alias pci:v00008086d000024F3sv*sd00000010bc*sc*i* iwlwifi
1044-alias pci:v00008086d0000095Asv*sd00009E10bc*sc*i* iwlwifi
1045-alias pci:v00008086d0000095Asv*sd00009400bc*sc*i* iwlwifi
1046-alias pci:v00008086d0000095Asv*sd00009000bc*sc*i* iwlwifi
1047-alias pci:v00008086d0000095Bsv*sd0000520Abc*sc*i* iwlwifi
1048-alias pci:v00008086d0000095Bsv*sd00005212bc*sc*i* iwlwifi
1049-alias pci:v00008086d0000095Asv*sd00005F10bc*sc*i* iwlwifi
1050-alias pci:v00008086d0000095Asv*sd00005490bc*sc*i* iwlwifi
1051-alias pci:v00008086d0000095Bsv*sd00005290bc*sc*i* iwlwifi
1052-alias pci:v00008086d0000095Asv*sd00005590bc*sc*i* iwlwifi
1053-alias pci:v00008086d0000095Asv*sd00005190bc*sc*i* iwlwifi
1054-alias pci:v00008086d0000095Asv*sd00005090bc*sc*i* iwlwifi
1055-alias pci:v00008086d0000095Asv*sd00005420bc*sc*i* iwlwifi
1056-alias pci:v00008086d0000095Asv*sd0000502Abc*sc*i* iwlwifi
1057-alias pci:v00008086d0000095Asv*sd00005020bc*sc*i* iwlwifi
1058-alias pci:v00008086d0000095Asv*sd00009410bc*sc*i* iwlwifi
1059-alias pci:v00008086d0000095Bsv*sd00009310bc*sc*i* iwlwifi
1060-alias pci:v00008086d0000095Asv*sd00009510bc*sc*i* iwlwifi
1061-alias pci:v00008086d0000095Bsv*sd00009200bc*sc*i* iwlwifi
1062-alias pci:v00008086d0000095Bsv*sd00009210bc*sc*i* iwlwifi
1063-alias pci:v00008086d0000095Asv*sd00009112bc*sc*i* iwlwifi
1064-alias pci:v00008086d0000095Asv*sd00009110bc*sc*i* iwlwifi
1065-alias pci:v00008086d0000095Asv*sd0000900Abc*sc*i* iwlwifi
1066-alias pci:v00008086d0000095Asv*sd00009012bc*sc*i* iwlwifi
1067-alias pci:v00008086d0000095Asv*sd00009010bc*sc*i* iwlwifi
1068-alias pci:v00008086d0000095Bsv*sd00005202bc*sc*i* iwlwifi
1069-alias pci:v00008086d0000095Asv*sd00005102bc*sc*i* iwlwifi
1070-alias pci:v00008086d0000095Asv*sd00005002bc*sc*i* iwlwifi
1071-alias pci:v00008086d0000095Bsv*sd00005200bc*sc*i* iwlwifi
1072-alias pci:v00008086d0000095Asv*sd0000500Abc*sc*i* iwlwifi
1073-alias pci:v00008086d0000095Asv*sd00005000bc*sc*i* iwlwifi
1074-alias pci:v00008086d0000095Asv*sd00001010bc*sc*i* iwlwifi
1075-alias pci:v00008086d0000095Asv*sd00005400bc*sc*i* iwlwifi
1076-alias pci:v00008086d0000095Asv*sd00005510bc*sc*i* iwlwifi
1077-alias pci:v00008086d0000095Asv*sd00005410bc*sc*i* iwlwifi
1078-alias pci:v00008086d0000095Asv*sd00005412bc*sc*i* iwlwifi
1079-alias pci:v00008086d0000095Asv*sd00005012bc*sc*i* iwlwifi
1080-alias pci:v00008086d0000095Asv*sd00005C10bc*sc*i* iwlwifi
1081-alias pci:v00008086d0000095Bsv*sd00005210bc*sc*i* iwlwifi
1082-alias pci:v00008086d0000095Bsv*sd00005302bc*sc*i* iwlwifi
1083-alias pci:v00008086d0000095Bsv*sd00005310bc*sc*i* iwlwifi
1084-alias pci:v00008086d0000095Asv*sd00005100bc*sc*i* iwlwifi
1085-alias pci:v00008086d0000095Asv*sd00005110bc*sc*i* iwlwifi
1086-alias pci:v00008086d0000095Asv*sd00005010bc*sc*i* iwlwifi
1087+alias pci:v00008086d000024F4sv*sd00001030bc*sc*i* iwlwifi
1088+alias pci:v00008086d000024F4sv*sd00008030bc*sc*i* iwlwifi
1089+alias pci:v00008086d000024F4sv*sd00009030bc*sc*i* iwlwifi
1090+alias pci:v00008086d000024F4sv*sd0000C030bc*sc*i* iwlwifi
1091+alias pci:v00008086d000024F4sv*sd0000D030bc*sc*i* iwlwifi
1092+alias pci:v00008086d000024F5sv*sd00000010bc*sc*i* iwlwifi
1093+alias pci:v00008086d000024F6sv*sd00000030bc*sc*i* iwlwifi
1094 alias pci:v00008086d000024FBsv*sd00000000bc*sc*i* iwlwifi
1095-alias pci:v00008086d000024FBsv*sd00002150bc*sc*i* iwlwifi
1096+alias pci:v00008086d000024FBsv*sd00002010bc*sc*i* iwlwifi
1097 alias pci:v00008086d000024FBsv*sd00002050bc*sc*i* iwlwifi
1098 alias pci:v00008086d000024FBsv*sd00002110bc*sc*i* iwlwifi
1099-alias pci:v00008086d000024FBsv*sd00002010bc*sc*i* iwlwifi
1100-alias pci:v00008086d00003165sv*sd00008110bc*sc*i* iwlwifi
1101-alias pci:v00008086d00003165sv*sd00008010bc*sc*i* iwlwifi
1102-alias pci:v00008086d00003166sv*sd00004210bc*sc*i* iwlwifi
1103-alias pci:v00008086d00003166sv*sd00004310bc*sc*i* iwlwifi
1104+alias pci:v00008086d000024FBsv*sd00002150bc*sc*i* iwlwifi
1105+alias pci:v00008086d000024FDsv*sd00000010bc*sc*i* iwlwifi
1106+alias pci:v00008086d000024FDsv*sd00000012bc*sc*i* iwlwifi
1107+alias pci:v00008086d000024FDsv*sd00000014bc*sc*i* iwlwifi
1108+alias pci:v00008086d000024FDsv*sd00000050bc*sc*i* iwlwifi
1109+alias pci:v00008086d000024FDsv*sd00000110bc*sc*i* iwlwifi
1110+alias pci:v00008086d000024FDsv*sd00000130bc*sc*i* iwlwifi
1111+alias pci:v00008086d000024FDsv*sd00000150bc*sc*i* iwlwifi
1112+alias pci:v00008086d000024FDsv*sd00000810bc*sc*i* iwlwifi
1113+alias pci:v00008086d000024FDsv*sd00000850bc*sc*i* iwlwifi
1114+alias pci:v00008086d000024FDsv*sd00000910bc*sc*i* iwlwifi
1115+alias pci:v00008086d000024FDsv*sd00000930bc*sc*i* iwlwifi
1116+alias pci:v00008086d000024FDsv*sd00000950bc*sc*i* iwlwifi
1117+alias pci:v00008086d000024FDsv*sd00001010bc*sc*i* iwlwifi
1118+alias pci:v00008086d000024FDsv*sd00001012bc*sc*i* iwlwifi
1119+alias pci:v00008086d000024FDsv*sd00001014bc*sc*i* iwlwifi
1120+alias pci:v00008086d000024FDsv*sd000010D0bc*sc*i* iwlwifi
1121+alias pci:v00008086d000024FDsv*sd00001110bc*sc*i* iwlwifi
1122+alias pci:v00008086d000024FDsv*sd00001130bc*sc*i* iwlwifi
1123+alias pci:v00008086d000024FDsv*sd00003E01bc*sc*i* iwlwifi
1124+alias pci:v00008086d000024FDsv*sd00003E02bc*sc*i* iwlwifi
1125+alias pci:v00008086d000024FDsv*sd00008010bc*sc*i* iwlwifi
1126+alias pci:v00008086d000024FDsv*sd00008050bc*sc*i* iwlwifi
1127+alias pci:v00008086d000024FDsv*sd00008110bc*sc*i* iwlwifi
1128+alias pci:v00008086d000024FDsv*sd00008130bc*sc*i* iwlwifi
1129+alias pci:v00008086d000024FDsv*sd00009010bc*sc*i* iwlwifi
1130+alias pci:v00008086d000024FDsv*sd00009074bc*sc*i* iwlwifi
1131+alias pci:v00008086d000024FDsv*sd00009110bc*sc*i* iwlwifi
1132+alias pci:v00008086d00002526sv*sd*bc*sc*i* iwlwifi
1133+alias pci:v00008086d0000271Bsv*sd*bc*sc*i* iwlwifi
1134+alias pci:v00008086d0000271Csv*sd*bc*sc*i* iwlwifi
1135+alias pci:v00008086d00002720sv*sd*bc*sc*i* iwlwifi
1136+alias pci:v00008086d00002723sv*sd*bc*sc*i* iwlwifi
1137+alias pci:v00008086d00002725sv*sd00000000bc*sc*i* iwlwifi
1138+alias pci:v00008086d00002725sv*sd00000020bc*sc*i* iwlwifi
1139+alias pci:v00008086d00002725sv*sd00000090bc*sc*i* iwlwifi
1140+alias pci:v00008086d00002725sv*sd000000B0bc*sc*i* iwlwifi
1141+alias pci:v00008086d00002725sv*sd00000310bc*sc*i* iwlwifi
1142+alias pci:v00008086d00002725sv*sd00000510bc*sc*i* iwlwifi
1143+alias pci:v00008086d00002725sv*sd00000A10bc*sc*i* iwlwifi
1144+alias pci:v00008086d000030DCsv*sd*bc*sc*i* iwlwifi
1145+alias pci:v00008086d00003165sv*sd00004010bc*sc*i* iwlwifi
1146+alias pci:v00008086d00003165sv*sd00004012bc*sc*i* iwlwifi
1147 alias pci:v00008086d00003165sv*sd00004110bc*sc*i* iwlwifi
1148-alias pci:v00008086d00003165sv*sd00004510bc*sc*i* iwlwifi
1149 alias pci:v00008086d00003165sv*sd00004410bc*sc*i* iwlwifi
1150+alias pci:v00008086d00003165sv*sd00004510bc*sc*i* iwlwifi
1151+alias pci:v00008086d00003165sv*sd00008010bc*sc*i* iwlwifi
1152+alias pci:v00008086d00003165sv*sd00008110bc*sc*i* iwlwifi
1153+alias pci:v00008086d00003166sv*sd00004210bc*sc*i* iwlwifi
1154 alias pci:v00008086d00003166sv*sd00004212bc*sc*i* iwlwifi
1155-alias pci:v00008086d00003165sv*sd00004012bc*sc*i* iwlwifi
1156-alias pci:v00008086d00003165sv*sd00004010bc*sc*i* iwlwifi
1157-alias pci:v00008086d000008B3sv*sd00001170bc*sc*i* iwlwifi
1158-alias pci:v00008086d000008B3sv*sd00001070bc*sc*i* iwlwifi
1159-alias pci:v00008086d000008B3sv*sd00008570bc*sc*i* iwlwifi
1160-alias pci:v00008086d000008B3sv*sd00008470bc*sc*i* iwlwifi
1161-alias pci:v00008086d000008B4sv*sd00008272bc*sc*i* iwlwifi
1162-alias pci:v00008086d000008B4sv*sd00008370bc*sc*i* iwlwifi
1163-alias pci:v00008086d000008B4sv*sd00008270bc*sc*i* iwlwifi
1164-alias pci:v00008086d000008B3sv*sd00008062bc*sc*i* iwlwifi
1165-alias pci:v00008086d000008B3sv*sd00008060bc*sc*i* iwlwifi
1166-alias pci:v00008086d000008B3sv*sd00008172bc*sc*i* iwlwifi
1167-alias pci:v00008086d000008B3sv*sd00008170bc*sc*i* iwlwifi
1168-alias pci:v00008086d000008B3sv*sd00008072bc*sc*i* iwlwifi
1169-alias pci:v00008086d000008B3sv*sd00008070bc*sc*i* iwlwifi
1170-alias pci:v00008086d000008B4sv*sd00000370bc*sc*i* iwlwifi
1171-alias pci:v00008086d000008B3sv*sd00000472bc*sc*i* iwlwifi
1172-alias pci:v00008086d000008B3sv*sd00000470bc*sc*i* iwlwifi
1173-alias pci:v00008086d000008B4sv*sd00000272bc*sc*i* iwlwifi
1174-alias pci:v00008086d000008B4sv*sd00000270bc*sc*i* iwlwifi
1175-alias pci:v00008086d000008B3sv*sd00000062bc*sc*i* iwlwifi
1176-alias pci:v00008086d000008B3sv*sd00000060bc*sc*i* iwlwifi
1177-alias pci:v00008086d000008B3sv*sd00000172bc*sc*i* iwlwifi
1178-alias pci:v00008086d000008B3sv*sd00000170bc*sc*i* iwlwifi
1179-alias pci:v00008086d000008B3sv*sd00000072bc*sc*i* iwlwifi
1180-alias pci:v00008086d000008B3sv*sd00000070bc*sc*i* iwlwifi
1181-alias pci:v00008086d000008B1sv*sd0000C420bc*sc*i* iwlwifi
1182-alias pci:v00008086d000008B2sv*sd0000C220bc*sc*i* iwlwifi
1183-alias pci:v00008086d000008B1sv*sd0000C02Abc*sc*i* iwlwifi
1184-alias pci:v00008086d000008B1sv*sd0000C020bc*sc*i* iwlwifi
1185-alias pci:v00008086d000008B1sv*sd0000C360bc*sc*i* iwlwifi
1186-alias pci:v00008086d000008B2sv*sd0000C370bc*sc*i* iwlwifi
1187-alias pci:v00008086d000008B1sv*sd0000C560bc*sc*i* iwlwifi
1188-alias pci:v00008086d000008B1sv*sd0000C570bc*sc*i* iwlwifi
1189-alias pci:v00008086d000008B1sv*sd0000C462bc*sc*i* iwlwifi
1190-alias pci:v00008086d000008B1sv*sd0000C460bc*sc*i* iwlwifi
1191-alias pci:v00008086d000008B1sv*sd0000C472bc*sc*i* iwlwifi
1192-alias pci:v00008086d000008B1sv*sd0000C470bc*sc*i* iwlwifi
1193-alias pci:v00008086d000008B2sv*sd0000C262bc*sc*i* iwlwifi
1194-alias pci:v00008086d000008B2sv*sd0000C26Abc*sc*i* iwlwifi
1195-alias pci:v00008086d000008B2sv*sd0000C260bc*sc*i* iwlwifi
1196-alias pci:v00008086d000008B2sv*sd0000C272bc*sc*i* iwlwifi
1197-alias pci:v00008086d000008B1sv*sd0000CC60bc*sc*i* iwlwifi
1198-alias pci:v00008086d000008B1sv*sd0000CC70bc*sc*i* iwlwifi
1199-alias pci:v00008086d000008B2sv*sd0000C270bc*sc*i* iwlwifi
1200-alias pci:v00008086d000008B1sv*sd0000C760bc*sc*i* iwlwifi
1201-alias pci:v00008086d000008B1sv*sd0000C770bc*sc*i* iwlwifi
1202-alias pci:v00008086d000008B1sv*sd0000C162bc*sc*i* iwlwifi
1203-alias pci:v00008086d000008B1sv*sd0000C062bc*sc*i* iwlwifi
1204-alias pci:v00008086d000008B1sv*sd0000C160bc*sc*i* iwlwifi
1205-alias pci:v00008086d000008B1sv*sd0000C06Abc*sc*i* iwlwifi
1206-alias pci:v00008086d000008B1sv*sd0000C060bc*sc*i* iwlwifi
1207-alias pci:v00008086d000008B1sv*sd0000C170bc*sc*i* iwlwifi
1208-alias pci:v00008086d000008B1sv*sd0000C072bc*sc*i* iwlwifi
1209-alias pci:v00008086d000008B1sv*sd0000C070bc*sc*i* iwlwifi
1210-alias pci:v00008086d000008B1sv*sd00004420bc*sc*i* iwlwifi
1211-alias pci:v00008086d000008B2sv*sd00004220bc*sc*i* iwlwifi
1212-alias pci:v00008086d000008B1sv*sd0000402Abc*sc*i* iwlwifi
1213-alias pci:v00008086d000008B1sv*sd00004020bc*sc*i* iwlwifi
1214-alias pci:v00008086d000008B1sv*sd00005770bc*sc*i* iwlwifi
1215-alias pci:v00008086d000008B1sv*sd00005170bc*sc*i* iwlwifi
1216-alias pci:v00008086d000008B1sv*sd00005072bc*sc*i* iwlwifi
1217-alias pci:v00008086d000008B1sv*sd00005070bc*sc*i* iwlwifi
1218-alias pci:v00008086d000008B2sv*sd00004360bc*sc*i* iwlwifi
1219-alias pci:v00008086d000008B2sv*sd00004370bc*sc*i* iwlwifi
1220-alias pci:v00008086d000008B1sv*sd00004560bc*sc*i* iwlwifi
1221-alias pci:v00008086d000008B1sv*sd00004570bc*sc*i* iwlwifi
1222-alias pci:v00008086d000008B1sv*sd00004A6Cbc*sc*i* iwlwifi
1223-alias pci:v00008086d000008B1sv*sd00004A6Ebc*sc*i* iwlwifi
1224-alias pci:v00008086d000008B1sv*sd00004A70bc*sc*i* iwlwifi
1225-alias pci:v00008086d000008B1sv*sd0000486Ebc*sc*i* iwlwifi
1226-alias pci:v00008086d000008B1sv*sd00004870bc*sc*i* iwlwifi
1227-alias pci:v00008086d000008B1sv*sd00004462bc*sc*i* iwlwifi
1228-alias pci:v00008086d000008B1sv*sd0000446Abc*sc*i* iwlwifi
1229-alias pci:v00008086d000008B1sv*sd00004460bc*sc*i* iwlwifi
1230-alias pci:v00008086d000008B1sv*sd00004472bc*sc*i* iwlwifi
1231-alias pci:v00008086d000008B1sv*sd00004470bc*sc*i* iwlwifi
1232-alias pci:v00008086d000008B2sv*sd00004262bc*sc*i* iwlwifi
1233-alias pci:v00008086d000008B2sv*sd0000426Abc*sc*i* iwlwifi
1234-alias pci:v00008086d000008B2sv*sd00004260bc*sc*i* iwlwifi
1235-alias pci:v00008086d000008B2sv*sd00004272bc*sc*i* iwlwifi
1236-alias pci:v00008086d000008B2sv*sd00004270bc*sc*i* iwlwifi
1237-alias pci:v00008086d000008B1sv*sd00004162bc*sc*i* iwlwifi
1238-alias pci:v00008086d000008B1sv*sd00004062bc*sc*i* iwlwifi
1239-alias pci:v00008086d000008B1sv*sd00004160bc*sc*i* iwlwifi
1240-alias pci:v00008086d000008B1sv*sd0000406Abc*sc*i* iwlwifi
1241-alias pci:v00008086d000008B1sv*sd00004060bc*sc*i* iwlwifi
1242-alias pci:v00008086d000008B1sv*sd00004C70bc*sc*i* iwlwifi
1243-alias pci:v00008086d000008B1sv*sd00004C60bc*sc*i* iwlwifi
1244-alias pci:v00008086d000008B1sv*sd00004170bc*sc*i* iwlwifi
1245-alias pci:v00008086d000008B1sv*sd00004072bc*sc*i* iwlwifi
1246-alias pci:v00008086d000008B1sv*sd00004070bc*sc*i* iwlwifi
1247+alias pci:v00008086d00003166sv*sd00004310bc*sc*i* iwlwifi
1248+alias pci:v00008086d000031DCsv*sd*bc*sc*i* iwlwifi
1249+alias pci:v00008086d000034F0sv*sd*bc*sc*i* iwlwifi
1250+alias pci:v00008086d00003DF0sv*sd*bc*sc*i* iwlwifi
1251+alias pci:v00008086d000043F0sv*sd*bc*sc*i* iwlwifi
1252+alias pci:v00008086d00007A70sv*sd00000090bc*sc*i* iwlwifi
1253+alias pci:v00008086d00007A70sv*sd00000310bc*sc*i* iwlwifi
1254+alias pci:v00008086d00007A70sv*sd00000510bc*sc*i* iwlwifi
1255+alias pci:v00008086d00007A70sv*sd00000A10bc*sc*i* iwlwifi
1256+alias pci:v00008086d00007AF0sv*sd00000090bc*sc*i* iwlwifi
1257+alias pci:v00008086d00007AF0sv*sd00000310bc*sc*i* iwlwifi
1258+alias pci:v00008086d00007AF0sv*sd00000510bc*sc*i* iwlwifi
1259+alias pci:v00008086d00007AF0sv*sd00000A10bc*sc*i* iwlwifi
1260+alias pci:v00008086d00009DF0sv*sd*bc*sc*i* iwlwifi
1261+alias pci:v00008086d0000A0F0sv*sd*bc*sc*i* iwlwifi
1262+alias pci:v00008086d0000A370sv*sd*bc*sc*i* iwlwifi
1263diff --git a/debian/changelog b/debian/changelog
1264index d4fd01b..e6f67b1 100644
1265--- a/debian/changelog
1266+++ b/debian/changelog
1267@@ -1,3 +1,16 @@
1268+backport-iwlwifi-dkms (8286-0ubuntu1) focal; urgency=low
1269+
1270+ * New release
1271+ - upstream version 8286 commit 26271a73a63d24.
1272+
1273+ * debian/patches:
1274+ - Update 0006-backport-address-interface-change-in-linux-skbuff.h-.patch
1275+ - Drop 0003-backport-apply-__copy-to-init_module-cleanup_module.patch
1276+ - Drop 0007-backport-don-t-include-linux-pci-aspm.h-on-kernel-v5..patch
1277+ * Update debian/backport-iwlwifi-dkms.modaliases
1278+
1279+ -- You-Sheng Yang <vicamo@gmail.com> Wed, 18 Dec 2019 19:43:25 +0800
1280+
1281 backport-iwlwifi-dkms (8042-0ubuntu3) focal; urgency=medium
1282
1283 * debian/patches/0007-backport-don-t-include-linux-pci-aspm.h-on-kernel-v5..patch
1284diff --git a/debian/patches/0003-backport-apply-__copy-to-init_module-cleanup_module.patch b/debian/patches/0003-backport-apply-__copy-to-init_module-cleanup_module.patch
1285deleted file mode 100644
1286index d7c145c..0000000
1287--- a/debian/patches/0003-backport-apply-__copy-to-init_module-cleanup_module.patch
1288+++ /dev/null
1289@@ -1,44 +0,0 @@
1290-From: You-Sheng Yang <vicamo@gmail.com>
1291-Date: Mon, 15 Jul 2019 18:56:31 +0800
1292-Subject: backport: apply __copy to init_module/cleanup_module
1293-
1294----
1295- backport-include/linux/compiler.h | 4 ++++
1296- backport-include/linux/module.h | 4 ++--
1297- 2 files changed, 6 insertions(+), 2 deletions(-)
1298-
1299-diff --git a/backport-include/linux/compiler.h b/backport-include/linux/compiler.h
1300-index 53c069d..adc5a24 100644
1301---- a/backport-include/linux/compiler.h
1302-+++ b/backport-include/linux/compiler.h
1303-@@ -92,4 +92,8 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s
1304- #define OPTIMIZER_HIDE_VAR(var) barrier()
1305- #endif
1306-
1307-+#ifndef __copy
1308-+#define __copy(x)
1309-+#endif
1310-+
1311- #endif /* __BACKPORT_LINUX_COMPILER_H */
1312-diff --git a/backport-include/linux/module.h b/backport-include/linux/module.h
1313-index 1a2c82f..877491e 100644
1314---- a/backport-include/linux/module.h
1315-+++ b/backport-include/linux/module.h
1316-@@ -33,7 +33,7 @@ extern void backport_dependency_symbol(void);
1317- backport_dependency_symbol(); \
1318- return initfn(); \
1319- } \
1320-- int init_module(void) __attribute__((alias("__init_backport")));\
1321-+ int init_module(void) __copy(__init_backport) __attribute__((alias("__init_backport")));\
1322- BACKPORT_MOD_VERSIONS
1323-
1324- /*
1325-@@ -58,7 +58,7 @@ extern void backport_dependency_symbol(void);
1326- exitfn(); \
1327- rcu_barrier(); \
1328- } \
1329-- void cleanup_module(void) __attribute__((alias("__exit_compat")));
1330-+ void cleanup_module(void) __copy(__exit_compat) __attribute__((alias("__exit_compat")));
1331- #endif
1332-
1333- #if LINUX_VERSION_IS_LESS(3,3,0)
1334diff --git a/debian/patches/0006-backport-address-interface-change-in-linux-skbuff.h-.patch b/debian/patches/0006-backport-address-interface-change-in-linux-skbuff.h-.patch
1335index 6151f1e..6ce71cd 100644
1336--- a/debian/patches/0006-backport-address-interface-change-in-linux-skbuff.h-.patch
1337+++ b/debian/patches/0006-backport-address-interface-change-in-linux-skbuff.h-.patch
1338@@ -1,6 +1,6 @@
1339-From 0ed9684f769f127c466599292fd750b07a9b36de Mon Sep 17 00:00:00 2001
1340+From 436871ec96c59dd238d7a603b1e140e90a232b88 Mon Sep 17 00:00:00 2001
1341 From: You-Sheng Yang <vicamo.yang@canonical.com>
1342-Date: Tue, 10 Dec 2019 17:35:29 +0800
1343+Date: Wed, 18 Dec 2019 22:28:08 +0800
1344 Subject: [PATCH] backport: address interface change in linux/skbuff.h since
1345 5.3.10
1346
1347@@ -17,87 +17,50 @@ compatibility to previous releases.
1348 Closes: vicamo/backport-iwlwifi-dkms#7
1349 Signed-off-by: You-Sheng Yang <vicamo.yang@canonical.com>
1350 ---
1351- include/net/fq.h | 15 +++++++++++++++
1352- include/net/fq_impl.h | 30 ++++++++++++++++++++++++++++++
1353- 2 files changed, 45 insertions(+)
1354+ include/net/fq.h | 9 ++++++++-
1355+ include/net/fq_impl.h | 9 ++++++++-
1356+ 2 files changed, 16 insertions(+), 2 deletions(-)
1357
1358 diff --git a/include/net/fq.h b/include/net/fq.h
1359-index d126b5d20..e0de891d6 100644
1360+index f142ee96b..ec04ae9bc 100644
1361 --- a/include/net/fq.h
1362 +++ b/include/net/fq.h
1363-@@ -69,7 +69,22 @@ struct fq {
1364- struct list_head backlogs;
1365- spinlock_t lock;
1366- u32 flows_cnt;
1367-+#if LINUX_VERSION_IS_GEQ(5,3,10) || \
1368-+ LINUX_VERSION_IN_RANGE(4,19,83,5,0,0) || \
1369-+ LINUX_VERSION_IN_RANGE(4,14,153,4,15,0) || \
1370-+ LINUX_VERSION_IN_RANGE(4,9,200,4,10,0) || \
1371-+ LINUX_VERSION_IN_RANGE(4,4,200,4,5,0) || \
1372-+ (UTS_UBUNTU_RELEASE_ABI && \
1373-+ (((LINUX_VERSION_CODE == KERNEL_VERSION(5,0,21)) && \
1374-+ (((UTS_UBUNTU_RELEASE_ABI >= 38) && (UTS_UBUNTU_RELEASE_ABI < 1000)) || \
1375-+ (UTS_UBUNTU_RELEASE_ABI >= 1032))) || \
1376-+ ((LINUX_VERSION_CODE == KERNEL_VERSION(4,15,18)) && \
1377-+ (((UTS_UBUNTU_RELEASE_ABI >= 73) && (UTS_UBUNTU_RELEASE_ABI < 1000)) || \
1378-+ (UTS_UBUNTU_RELEASE_ABI >= 1066)))))
1379-+ siphash_key_t perturbation;
1380-+#else
1381+@@ -73,7 +73,14 @@ struct fq {
1382+ LINUX_VERSION_IN_RANGE(4,19,83, 4,20,0) || \
1383+ LINUX_VERSION_IN_RANGE(4,14,153, 4,15,0) || \
1384+ LINUX_VERSION_IN_RANGE(4,9,200, 4,10,0) || \
1385+- LINUX_VERSION_IN_RANGE(4,4,200, 4,5,0)
1386++ LINUX_VERSION_IN_RANGE(4,4,200, 4,5,0) || \
1387++ (UTS_UBUNTU_RELEASE_ABI && \
1388++ (((LINUX_VERSION_CODE == KERNEL_VERSION(5,0,21)) && \
1389++ (((UTS_UBUNTU_RELEASE_ABI >= 38) && (UTS_UBUNTU_RELEASE_ABI < 1000)) || \
1390++ (UTS_UBUNTU_RELEASE_ABI >= 1032))) || \
1391++ ((LINUX_VERSION_CODE == KERNEL_VERSION(4,15,18)) && \
1392++ (((UTS_UBUNTU_RELEASE_ABI >= 73) && (UTS_UBUNTU_RELEASE_ABI < 1000)) || \
1393++ (UTS_UBUNTU_RELEASE_ABI >= 1066)))))
1394+ siphash_key_t perturbation;
1395+ #else
1396 u32 perturbation;
1397-+#endif
1398- u32 limit;
1399- u32 memory_limit;
1400- u32 memory_usage;
1401 diff --git a/include/net/fq_impl.h b/include/net/fq_impl.h
1402-index be40a4b32..57effd687 100644
1403+index 86d5c56b2..20a1d271b 100644
1404 --- a/include/net/fq_impl.h
1405 +++ b/include/net/fq_impl.h
1406-@@ -108,7 +108,22 @@ begin:
1407-
1408- static u32 fq_flow_idx(struct fq *fq, struct sk_buff *skb)
1409- {
1410-+#if LINUX_VERSION_IS_GEQ(5,3,10) || \
1411-+ LINUX_VERSION_IN_RANGE(4,19,83,5,0,0) || \
1412-+ LINUX_VERSION_IN_RANGE(4,14,153,4,15,0) || \
1413-+ LINUX_VERSION_IN_RANGE(4,9,200,4,10,0) || \
1414-+ LINUX_VERSION_IN_RANGE(4,4,200,4,5,0) || \
1415-+ (UTS_UBUNTU_RELEASE_ABI && \
1416-+ (((LINUX_VERSION_CODE == KERNEL_VERSION(5,0,21)) && \
1417-+ (((UTS_UBUNTU_RELEASE_ABI >= 38) && (UTS_UBUNTU_RELEASE_ABI < 1000)) || \
1418-+ (UTS_UBUNTU_RELEASE_ABI >= 1032))) || \
1419-+ ((LINUX_VERSION_CODE == KERNEL_VERSION(4,15,18)) && \
1420-+ (((UTS_UBUNTU_RELEASE_ABI >= 73) && (UTS_UBUNTU_RELEASE_ABI < 1000)) || \
1421-+ (UTS_UBUNTU_RELEASE_ABI >= 1066)))))
1422-+ u32 hash = skb_get_hash_perturb(skb, &fq->perturbation);
1423-+#else
1424+@@ -112,7 +112,14 @@ static u32 fq_flow_idx(struct fq *fq, struct sk_buff *skb)
1425+ LINUX_VERSION_IN_RANGE(4,19,83, 4,20,0) || \
1426+ LINUX_VERSION_IN_RANGE(4,14,153, 4,15,0) || \
1427+ LINUX_VERSION_IN_RANGE(4,9,200, 4,10,0) || \
1428+- LINUX_VERSION_IN_RANGE(4,4,200, 4,5,0)
1429++ LINUX_VERSION_IN_RANGE(4,4,200, 4,5,0) || \
1430++ (UTS_UBUNTU_RELEASE_ABI && \
1431++ (((LINUX_VERSION_CODE == KERNEL_VERSION(5,0,21)) && \
1432++ (((UTS_UBUNTU_RELEASE_ABI >= 38) && (UTS_UBUNTU_RELEASE_ABI < 1000)) || \
1433++ (UTS_UBUNTU_RELEASE_ABI >= 1032))) || \
1434++ ((LINUX_VERSION_CODE == KERNEL_VERSION(4,15,18)) && \
1435++ (((UTS_UBUNTU_RELEASE_ABI >= 73) && (UTS_UBUNTU_RELEASE_ABI < 1000)) || \
1436++ (UTS_UBUNTU_RELEASE_ABI >= 1066)))))
1437+ u32 hash = skb_get_hash_perturb(skb, &fq->perturbation);
1438+ #else
1439 u32 hash = skb_get_hash_perturb(skb, fq->perturbation);
1440-+#endif
1441-
1442- return reciprocal_scale(hash, fq->flows_cnt);
1443- }
1444-@@ -308,7 +323,22 @@ static int fq_init(struct fq *fq, int flows_cnt)
1445- INIT_LIST_HEAD(&fq->backlogs);
1446- spin_lock_init(&fq->lock);
1447- fq->flows_cnt = max_t(u32, flows_cnt, 1);
1448-+#if LINUX_VERSION_IS_GEQ(5,3,10) || \
1449-+ LINUX_VERSION_IN_RANGE(4,19,83,5,0,0) || \
1450-+ LINUX_VERSION_IN_RANGE(4,14,153,4,15,0) || \
1451-+ LINUX_VERSION_IN_RANGE(4,9,200,4,10,0) || \
1452-+ LINUX_VERSION_IN_RANGE(4,4,200,4,5,0) || \
1453-+ (UTS_UBUNTU_RELEASE_ABI && \
1454-+ (((LINUX_VERSION_CODE == KERNEL_VERSION(5,0,21)) && \
1455-+ (((UTS_UBUNTU_RELEASE_ABI >= 38) && (UTS_UBUNTU_RELEASE_ABI < 1000)) || \
1456-+ (UTS_UBUNTU_RELEASE_ABI >= 1032))) || \
1457-+ ((LINUX_VERSION_CODE == KERNEL_VERSION(4,15,18)) && \
1458-+ (((UTS_UBUNTU_RELEASE_ABI >= 73) && (UTS_UBUNTU_RELEASE_ABI < 1000)) || \
1459-+ (UTS_UBUNTU_RELEASE_ABI >= 1066)))))
1460-+ get_random_bytes(&fq->perturbation, sizeof(fq->perturbation));
1461-+#else
1462- fq->perturbation = prandom_u32();
1463-+#endif
1464- fq->quantum = 300;
1465- fq->limit = 8192;
1466- fq->memory_limit = 16 << 20; /* 16 MBytes */
1467 --
1468 2.24.0
1469
1470diff --git a/debian/patches/0007-backport-don-t-include-linux-pci-aspm.h-on-kernel-v5..patch b/debian/patches/0007-backport-don-t-include-linux-pci-aspm.h-on-kernel-v5..patch
1471deleted file mode 100644
1472index ac6959a..0000000
1473--- a/debian/patches/0007-backport-don-t-include-linux-pci-aspm.h-on-kernel-v5..patch
1474+++ /dev/null
1475@@ -1,32 +0,0 @@
1476-From 7295f5fb6cc8394104a8ec39de1217048ed7a6e6 Mon Sep 17 00:00:00 2001
1477-From: You-Sheng Yang <vicamo.yang@canonical.com>
1478-Date: Fri, 13 Dec 2019 08:54:42 +0000
1479-Subject: [PATCH] backport: don't include linux/pci-aspm.h on kernel >= v5.4-rc1
1480-
1481-linux/pci-aspm.h has been merged into linux/pci.h in commit 7ce2e76a0420
1482-("PCI: Move ASPM declarations to linux/pci.h"), and mainline iwlwifi
1483-removed such inclusion in commit 2b2654b8922a ("iwlwifi: Remove
1484-unnecessary include of <linux/pci-aspm.h>").
1485-
1486-Signed-off-by: You-Sheng Yang <vicamo.yang@canonical.com>
1487----
1488- drivers/net/wireless/intel/iwlwifi/pcie/trans.c | 2 ++
1489- 1 file changed, 2 insertions(+)
1490-
1491-diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/trans.c b/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
1492-index 495ff9418..0fa34a93a 100644
1493---- a/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
1494-+++ b/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
1495-@@ -62,7 +62,9 @@
1496- *
1497- *****************************************************************************/
1498- #include <linux/pci.h>
1499-+#if LINUX_VERSION_IS_LESS(5,4,0)
1500- #include <linux/pci-aspm.h>
1501-+#endif
1502- #include <linux/interrupt.h>
1503- #include <linux/debugfs.h>
1504- #include <linux/sched.h>
1505---
1506-2.24.0
1507-
1508diff --git a/debian/patches/series b/debian/patches/series
1509index 9c971ba..f4462c8 100644
1510--- a/debian/patches/series
1511+++ b/debian/patches/series
1512@@ -1,6 +1,4 @@
1513 0001-keep-zconf-in-make-clean.patch
1514 0002-fix-format-overflow-compile-error-in-kconf-confdata..patch
1515-0003-backport-apply-__copy-to-init_module-cleanup_module.patch
1516 0005-Makefile.kernel-pass-fno-stack-clash-protection-and-.patch
1517 0006-backport-address-interface-change-in-linux-skbuff.h-.patch
1518-0007-backport-don-t-include-linux-pci-aspm.h-on-kernel-v5..patch
1519diff --git a/debian/tests/check-modaliases b/debian/tests/check-modaliases
1520deleted file mode 100755
1521index 351f5c0..0000000
1522--- a/debian/tests/check-modaliases
1523+++ /dev/null
1524@@ -1,51 +0,0 @@
1525-#!/bin/sh
1526-# Generate and check module aliases.
1527-# Author: You-Sheng Yang <vicamo.yang@canonical.com>
1528-# Copyright: (C) 2019 Canonical Ltd.
1529-
1530-set -eu
1531-
1532-run_pkg() {
1533- pkg="$1"
1534-
1535- echo "I: Testing binary package $pkg"
1536-
1537- if ! dkms_conf=$(dpkg -L $pkg | grep 'dkms.conf$'); then
1538- echo "I: Package $pkg has no dkms.conf, skipping"
1539- return
1540- fi
1541-
1542- modaliases=$(dpkg-query --show -f '${Modaliases}' $pkg)
1543- if test -z "$modaliases"; then
1544- echo "I: Package $pkg has no modaliases, skipping"
1545- return
1546- fi
1547-
1548- expected=$(mktemp --suffix=.expected)
1549- echo "$modaliases" | \
1550- sed -e 's/\([^(]\+\)(\([^)]\+\))\(, \)\?/\1 \2\n/g' | \
1551- sed -e '/,/bx' -e 's/\([^ ]\+\) \([^ ]\+\)/alias \2 \1/' -e 'bend' -e ':x' -e 's/\([^ ]\+\) \([^ ]\+\), \(.*\)/alias \2 \1\n\1 \3/' -e 'P;D' -e ':end' | \
1552- grep -v '^$' | sort > $expected
1553-
1554- name=$(bash -c ". $dkms_conf; echo \$PACKAGE_NAME" 2>/dev/null)
1555- version=$(bash -c ". $dkms_conf; echo \$PACKAGE_VERSION" 2>/dev/null)
1556- for build in $(find /var/lib/dkms/$name/$version -mindepth 3 -maxdepth 3 -type d -name module); do
1557- tmpfile=$(mktemp --suffix=.generated)
1558- for module in $(find $build -type f -name \*.ko | sort); do
1559- /sbin/modinfo ${module} | perl -nae "print \"alias \$1 $(basename --suffix=.ko ${module})\\n\" if /^alias:\\s+(.*)\$/";
1560- done | sort > $tmpfile;
1561- diff -Nu "$expected" "$tmpfile";
1562- rm -f $tmpfile
1563- done
1564-
1565- rm -f $expected
1566-}
1567-
1568-for pkg in $(awk '/^Package:/ { print $2 }' debian/control); do
1569- # package might be arch: restriction or udeb etc.
1570- if ! apt-cache show $pkg >/dev/null 2>&1; then
1571- echo "I: Skipping unavailable package $pkg"
1572- continue
1573- fi
1574- run_pkg $pkg
1575-done
1576diff --git a/debian/tests/control b/debian/tests/control
1577index 1dd23c0..a88cf5e 100644
1578--- a/debian/tests/control
1579+++ b/debian/tests/control
1580@@ -3,11 +3,5 @@ Restrictions:
1581 needs-root,
1582 allow-stderr,
1583 Depends:
1584- backport-iwlwifi-dkms,
1585- linux-headers-686-pae | linux-headers-amd64 | linux-headers-generic | linux-headers,
1586-
1587-Tests: check-modaliases
1588-Depends:
1589- backport-iwlwifi-dkms,
1590- kmod,
1591+ gcc,
1592 linux-headers-686-pae | linux-headers-amd64 | linux-headers-generic | linux-headers,
1593diff --git a/debian/tests/dkms-autopkgtest b/debian/tests/dkms-autopkgtest
1594index c6b702b..f766e18 100755
1595--- a/debian/tests/dkms-autopkgtest
1596+++ b/debian/tests/dkms-autopkgtest
1597@@ -10,11 +10,11 @@ run_pkg() {
1598 echo "I: Installing binary package $pkg"
1599 export DEBIAN_FRONTEND=noninteractive
1600 RC=0
1601- apt-get install -yq $pkg </dev/null || RC=$?
1602+ (set +e; apt-get install -yq $pkg </dev/null) || RC=$?
1603
1604 # collect build logs as artifacts
1605 if [ -d /var/lib/dkms ]; then
1606- (cd /var/lib/dkms; find -name "make.log" -print0 | xargs -0 tar c) > "$ADT_ARTIFACTS/$pkg-make-logs.tar"
1607+ (cd /var/lib/dkms; find -name "make.log" -print0 | xargs -0 tar c) > "$AUTOPKGTEST_ARTIFACTS/$pkg-make-logs.tar"
1608 fi
1609
1610 if [ "$RC" -ne 0 ]; then
1611@@ -29,6 +29,7 @@ run_pkg() {
1612 return
1613 fi
1614 dkms_pkg=$(bash -c ". $dkms_conf; echo \$PACKAGE_NAME" 2>/dev/null)
1615+ dkms_version=$(bash -c ". $dkms_conf; echo \$PACKAGE_VERSION" 2>/dev/null)
1616
1617 echo "I: Testing if $dkms_pkg modules are correctly installed"
1618 dkmsstatus="$(dkms status $dkms_pkg)"
1619@@ -43,6 +44,32 @@ run_pkg() {
1620 exit 1
1621 fi
1622
1623+ modaliases=$(dpkg-query --show -f '${Modaliases}' $pkg)
1624+ if test -n "$modaliases"; then
1625+ echo "I: Checking modaliases in debian/control ..."
1626+
1627+ modaliases_dpkg=$AUTOPKGTEST_ARTIFACTS/$pkg.modaliases.dpkg
1628+ echo "$modaliases" | \
1629+ sed -e 's/\([^(]\+\)(\([^)]\+\))\(, \)\?/\1 \2\n/g' | \
1630+ sed -e '/,/bx' -e 's/\([^ ]\+\) \([^ ]\+\)/alias \2 \1/' \
1631+ -e 'bend' -e ':x' -e 's/\([^ ]\+\) \([^ ]\+\), \(.*\)/alias \2 \1\n\1 \3/' -e 'P;D' -e ':end' | \
1632+ grep -v '^$' | \
1633+ sort > "$modaliases_dpkg"
1634+
1635+ diff -Nu debian/$pkg.modaliases "$modaliases_dpkg";
1636+ fi
1637+
1638+ modaliases_modinfo=$AUTOPKGTEST_ARTIFACTS/$pkg.modaliases.modinfo
1639+ for build in $(find /var/lib/dkms/$dkms_pkg/$dkms_version -mindepth 3 -maxdepth 3 -type d -name module); do
1640+ echo "I: Checking modaliases for $build ..."
1641+
1642+ for module in $(find $build -type f -name \*.ko | sort); do
1643+ /sbin/modinfo ${module} | perl -nae "print \"alias \$1 $(basename --suffix=.ko ${module})\\n\" if /^alias:\\s+(.*)\$/";
1644+ done | sort > "$modaliases_modinfo";
1645+
1646+ diff -Nu debian/$pkg.modaliases "$modaliases_modinfo";
1647+ done
1648+
1649 # skip modprobing for now; this fails too often (needs particular
1650 # hardware/firmware/etc)
1651 # for mod in $(awk -F '"' '/^BUILT_MODULE_NAME/ {print $2}' $dkms_conf); do
1652@@ -56,9 +83,6 @@ run_pkg() {
1653 # done
1654 }
1655
1656-# Try and remove dkms to spot packages which miss a dkms dependency
1657-dpkg --remove dkms || true
1658-
1659 for pkg in $(awk '/^Package:/ { print $2 }' debian/control); do
1660 # package might be arch: restriction or udeb etc.
1661 if ! apt-cache show $pkg >/dev/null 2>&1; then
1662@@ -67,3 +91,6 @@ for pkg in $(awk '/^Package:/ { print $2 }' debian/control); do
1663 fi
1664 run_pkg $pkg
1665 done
1666+
1667+# Try and remove dkms to spot packages which miss a dkms dependency
1668+dpkg --remove dkms || true
1669diff --git a/drivers/net/wireless/intel/iwlwifi/Kconfig b/drivers/net/wireless/intel/iwlwifi/Kconfig
1670index 102a67a..ebf51fe 100644
1671--- a/drivers/net/wireless/intel/iwlwifi/Kconfig
1672+++ b/drivers/net/wireless/intel/iwlwifi/Kconfig
1673@@ -2,7 +2,7 @@
1674 config IWLWIFI
1675 tristate "Intel Wireless WiFi Next Gen AGN - Wireless-N/Advanced-N/Ultimate-N (iwlwifi) "
1676 depends on m
1677- depends on PCI && HAS_IOMEM && CFG80211
1678+ depends on ((PCI && HAS_IOMEM) || VIRTIO) && CFG80211
1679 depends on FW_LOADER
1680 ---help---
1681 Select to build the driver supporting the:
1682diff --git a/drivers/net/wireless/intel/iwlwifi/Kconfig.noupstream b/drivers/net/wireless/intel/iwlwifi/Kconfig.noupstream
1683index 434c115..5413dbf 100644
1684--- a/drivers/net/wireless/intel/iwlwifi/Kconfig.noupstream
1685+++ b/drivers/net/wireless/intel/iwlwifi/Kconfig.noupstream
1686@@ -74,6 +74,19 @@ config IWLMVM_VENDOR_CMDS
1687 This option mostly exists for non-upstream tagging, so best
1688 leave it set to Y.
1689
1690+config IWLMVM_VENDOR_TCM_EVENTS
1691+ bool "enable TCM vendor events"
1692+ depends on IWLMVM_VENDOR_CMDS
1693+ default y
1694+ help
1695+ This option enables vendor TCM events to userspace that can
1696+ be used to adjust certain parameters depending on the
1697+ traffic conditions. These events can become rather noisy
1698+ with standard wpa_supplicant, since it prints out 3 debug
1699+ messages every time the event is received (as an unknown
1700+ event). When used with standard wpa_supplicant, it is
1701+ recommended to disable this option.
1702+
1703 config IWLMVM_TDLS_PEER_CACHE
1704 bool "enable TDLS peer caching and traffic monitoring"
1705 depends on IWLMVM_VENDOR_CMDS
1706diff --git a/drivers/net/wireless/intel/iwlwifi/Makefile b/drivers/net/wireless/intel/iwlwifi/Makefile
1707index 5d56d23..d92641c 100644
1708--- a/drivers/net/wireless/intel/iwlwifi/Makefile
1709+++ b/drivers/net/wireless/intel/iwlwifi/Makefile
1710@@ -9,22 +9,26 @@ iwlwifi-objs += iwl-phy-db.o iwl-nvm-parse.o
1711 iwlwifi-objs += iwl-dbg-tlv.o
1712 iwlwifi-objs += iwl-trans.o
1713
1714-iwlwifi-objs += fw/notif-wait.o
1715-iwlwifi-$(CPTCFG_IWLMVM) += fw/paging.o fw/smem.o fw/init.o fw/dbg.o
1716+iwlwifi-objs += fw/img.o fw/notif-wait.o
1717+iwlwifi-objs += fw/dbg.o
1718+iwlwifi-$(CPTCFG_IWLMVM) += fw/paging.o fw/smem.o fw/init.o
1719 iwlwifi-$(CPTCFG_IWLXVT) += fw/init.o
1720 iwlwifi-$(CPTCFG_IWLWIFI_DEBUGFS) += fw/debugfs.o
1721
1722 iwlwifi-$(CONFIG_ACPI) += fw/acpi.o
1723
1724 # Bus
1725-iwlwifi-objs += pcie/drv.o pcie/rx.o pcie/tx.o pcie/trans.o
1726-iwlwifi-objs += pcie/ctxt-info.o pcie/ctxt-info-gen3.o pcie/trans-gen2.o pcie/tx-gen2.o
1727+iwlwifi-$(CONFIG_PCI) += pcie/drv.o pcie/rx.o pcie/tx.o pcie/trans.o
1728+iwlwifi-$(CONFIG_PCI) += pcie/ctxt-info.o pcie/ctxt-info-gen3.o pcie/trans-gen2.o pcie/tx-gen2.o
1729+
1730 iwlwifi-$(CPTCFG_IWLMVM) += cfg/7000.o cfg/8000.o
1731 iwlwifi-$(CPTCFG_IWLMVM) += cfg/9000.o cfg/22000.o
1732
1733 iwlwifi-$(CPTCFG_IWLWIFI_SUPPORT_DEBUG_OVERRIDES) += iwl-dbg-cfg.o
1734
1735+
1736 iwlwifi-objs += $(iwlwifi-m)
1737+iwlwifi-objs += $(iwlwifi-y)
1738
1739 iwlwifi-$(CPTCFG_IWLWIFI_DEVICE_TRACING) += iwl-devtrace.o
1740 iwlwifi-$(CPTCFG_IWLWIFI_DEVICE_TESTMODE) += iwl-tm-gnl.o iwl-dnt-cfg.o iwl-dnt-dispatch.o
1741diff --git a/drivers/net/wireless/intel/iwlwifi/cfg/22000.c b/drivers/net/wireless/intel/iwlwifi/cfg/22000.c
1742index 74e0429..3790c0e 100644
1743--- a/drivers/net/wireless/intel/iwlwifi/cfg/22000.c
1744+++ b/drivers/net/wireless/intel/iwlwifi/cfg/22000.c
1745@@ -57,7 +57,7 @@
1746 #include "iwl-prph.h"
1747
1748 /* Highest firmware API version supported */
1749-#define IWL_22000_UCODE_API_MAX 52
1750+#define IWL_22000_UCODE_API_MAX 54
1751
1752 /* Lowest firmware API version supported */
1753 #define IWL_22000_UCODE_API_MIN 39
1754@@ -76,10 +76,8 @@
1755 #define IWL_22000_JF_FW_PRE "iwlwifi-Qu-a0-jf-b0-"
1756 #define IWL_22000_HR_FW_PRE "iwlwifi-Qu-a0-hr-a0-"
1757 #define IWL_22000_HR_CDB_FW_PRE "iwlwifi-QuIcp-z0-hrcdb-a0-"
1758-#define IWL_22000_HR_A_F0_FW_PRE "iwlwifi-QuQnj-f0-hr-a0-"
1759 #define IWL_22000_QU_B_HR_B_FW_PRE "iwlwifi-Qu-b0-hr-b0-"
1760 #define IWL_22000_HR_B_FW_PRE "iwlwifi-QuQnj-b0-hr-b0-"
1761-#define IWL_22000_HR_A0_FW_PRE "iwlwifi-QuQnj-a0-hr-a0-"
1762 #define IWL_QU_C_HR_B_FW_PRE "iwlwifi-Qu-c0-hr-b0-"
1763 #define IWL_QU_B_JF_B_FW_PRE "iwlwifi-Qu-b0-jf-b0-"
1764 #define IWL_QU_C_JF_B_FW_PRE "iwlwifi-Qu-c0-jf-b0-"
1765@@ -93,19 +91,16 @@
1766 #define IWL_22000_SO_A_GF_A_FW_PRE "iwlwifi-so-a0-gf-a0-"
1767 #define IWL_22000_TY_A_GF_A_FW_PRE "iwlwifi-ty-a0-gf-a0-"
1768 #define IWL_22000_SO_A_GF4_A_FW_PRE "iwlwifi-so-a0-gf4-a0-"
1769+#define IWL_22000_SOSNJ_A_GF4_A_FW_PRE "iwlwifi-SoSnj-a0-gf4-a0-"
1770
1771 #define IWL_22000_HR_MODULE_FIRMWARE(api) \
1772 IWL_22000_HR_FW_PRE __stringify(api) ".ucode"
1773 #define IWL_22000_JF_MODULE_FIRMWARE(api) \
1774 IWL_22000_JF_FW_PRE __stringify(api) ".ucode"
1775-#define IWL_22000_HR_A_F0_QNJ_MODULE_FIRMWARE(api) \
1776- IWL_22000_HR_A_F0_FW_PRE __stringify(api) ".ucode"
1777 #define IWL_22000_QU_B_HR_B_MODULE_FIRMWARE(api) \
1778 IWL_22000_QU_B_HR_B_FW_PRE __stringify(api) ".ucode"
1779 #define IWL_22000_HR_B_QNJ_MODULE_FIRMWARE(api) \
1780 IWL_22000_HR_B_FW_PRE __stringify(api) ".ucode"
1781-#define IWL_22000_HR_A0_QNJ_MODULE_FIRMWARE(api) \
1782- IWL_22000_HR_A0_FW_PRE __stringify(api) ".ucode"
1783 #define IWL_QUZ_A_HR_B_MODULE_FIRMWARE(api) \
1784 IWL_QUZ_A_HR_B_FW_PRE __stringify(api) ".ucode"
1785 #define IWL_QUZ_A_JF_B_MODULE_FIRMWARE(api) \
1786@@ -139,7 +134,7 @@ static const struct iwl_base_params iwl_22000_base_params = {
1787 .pcie_l1_allowed = true,
1788 };
1789
1790-static const struct iwl_base_params iwl_22560_base_params = {
1791+static const struct iwl_base_params iwl_ax210_base_params = {
1792 .eeprom_size = OTP_LOW_IMAGE_SIZE_32K,
1793 .num_of_queues = 512,
1794 .max_tfd_queue_size = 65536,
1795@@ -200,7 +195,6 @@ static const struct iwl_ht_params iwl_22000_ht_params = {
1796 IWL_DEVICE_22000_COMMON, \
1797 .trans.device_family = IWL_DEVICE_FAMILY_22000, \
1798 .trans.base_params = &iwl_22000_base_params, \
1799- .trans.csr = &iwl_csr_v1, \
1800 .gp2_reg_addr = 0xa02c68, \
1801 .mon_dram_regs = { \
1802 .write_ptr = { \
1803@@ -213,28 +207,11 @@ static const struct iwl_ht_params iwl_22000_ht_params = {
1804 }, \
1805 }
1806
1807-#define IWL_DEVICE_22560 \
1808- IWL_DEVICE_22000_COMMON, \
1809- .trans.device_family = IWL_DEVICE_FAMILY_22560, \
1810- .trans.base_params = &iwl_22560_base_params, \
1811- .trans.csr = &iwl_csr_v2, \
1812- .mon_dram_regs = { \
1813- .write_ptr = { \
1814- .addr = MON_BUFF_WRPTR_VER2, \
1815- .mask = 0xffffffff, \
1816- }, \
1817- .cycle_cnt = { \
1818- .addr = MON_BUFF_CYCLE_CNT_VER2, \
1819- .mask = 0xffffffff, \
1820- }, \
1821- }
1822-
1823 #define IWL_DEVICE_AX210 \
1824 IWL_DEVICE_22000_COMMON, \
1825 .trans.umac_prph_offset = 0x300000, \
1826 .trans.device_family = IWL_DEVICE_FAMILY_AX210, \
1827- .trans.base_params = &iwl_22560_base_params, \
1828- .trans.csr = &iwl_csr_v1, \
1829+ .trans.base_params = &iwl_ax210_base_params, \
1830 .min_txq_size = 128, \
1831 .gp2_reg_addr = 0xd02c68, \
1832 .min_256_ba_txq_size = 512, \
1833@@ -253,65 +230,68 @@ static const struct iwl_ht_params iwl_22000_ht_params = {
1834 }, \
1835 }
1836
1837-const struct iwl_cfg iwl22000_2ac_cfg_hr = {
1838- .name = "Intel(R) Dual Band Wireless AC 22000",
1839- .fw_name_pre = IWL_22000_HR_FW_PRE,
1840- IWL_DEVICE_22500,
1841+const struct iwl_cfg_trans_params iwl_qu_trans_cfg = {
1842+ .mq_rx_supported = true,
1843+ .use_tfh = true,
1844+ .rf_id = true,
1845+ .gen2 = true,
1846+ .device_family = IWL_DEVICE_FAMILY_22000,
1847+ .base_params = &iwl_22000_base_params,
1848+ .integrated = true,
1849+ .xtal_latency = 5000,
1850 };
1851
1852-const struct iwl_cfg iwl22000_2ac_cfg_hr_cdb = {
1853- .name = "Intel(R) Dual Band Wireless AC 22000",
1854- .fw_name_pre = IWL_22000_HR_CDB_FW_PRE,
1855- IWL_DEVICE_22500,
1856- .cdb = true,
1857+const struct iwl_cfg_trans_params iwl_qnj_trans_cfg = {
1858+ .mq_rx_supported = true,
1859+ .use_tfh = true,
1860+ .rf_id = true,
1861+ .gen2 = true,
1862+ .device_family = IWL_DEVICE_FAMILY_22000,
1863+ .base_params = &iwl_22000_base_params,
1864 };
1865
1866-const struct iwl_cfg iwl22000_2ac_cfg_jf = {
1867- .name = "Intel(R) Dual Band Wireless AC 22000",
1868- .fw_name_pre = IWL_22000_JF_FW_PRE,
1869- IWL_DEVICE_22500,
1870+const struct iwl_cfg_trans_params iwl_qu_long_latency_trans_cfg = {
1871+ .mq_rx_supported = true,
1872+ .use_tfh = true,
1873+ .rf_id = true,
1874+ .gen2 = true,
1875+ .device_family = IWL_DEVICE_FAMILY_22000,
1876+ .base_params = &iwl_22000_base_params,
1877+ .integrated = true,
1878+ .xtal_latency = 12000,
1879+ .low_latency_xtal = true,
1880 };
1881
1882-const struct iwl_cfg iwl_ax101_cfg_qu_hr = {
1883- .name = "Intel(R) Wi-Fi 6 AX101",
1884- .fw_name_pre = IWL_22000_QU_B_HR_B_FW_PRE,
1885- IWL_DEVICE_22500,
1886- /*
1887- * This device doesn't support receiving BlockAck with a large bitmap
1888- * so we need to restrict the size of transmitted aggregation to the
1889- * HT size; mac80211 would otherwise pick the HE max (256) by default.
1890- */
1891- .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
1892- .tx_with_siso_diversity = true,
1893-};
1894+/*
1895+ * If the device doesn't support HE, no need to have that many buffers.
1896+ * 22000 devices can split multiple frames into a single RB, so fewer are
1897+ * needed; AX210 cannot (but use smaller RBs by default) - these sizes
1898+ * were picked according to 8 MSDUs inside 256 A-MSDUs in an A-MPDU, with
1899+ * additional overhead to account for processing time.
1900+ */
1901+#define IWL_NUM_RBDS_NON_HE 512
1902+#define IWL_NUM_RBDS_22000_HE 2048
1903+#define IWL_NUM_RBDS_AX210_HE 4096
1904
1905-const struct iwl_cfg iwl_ax201_cfg_qu_hr = {
1906- .name = "Intel(R) Wi-Fi 6 AX201 160MHz",
1907- .fw_name_pre = IWL_22000_QU_B_HR_B_FW_PRE,
1908+/*
1909+ * All JF radio modules are part of the 9000 series, but the MAC part
1910+ * looks more like 22000. That's why this device is here, but called
1911+ * 9560 nevertheless.
1912+ */
1913+const struct iwl_cfg iwl9560_qu_b0_jf_b0_cfg = {
1914+ .fw_name_pre = IWL_QU_B_JF_B_FW_PRE,
1915 IWL_DEVICE_22500,
1916- /*
1917- * This device doesn't support receiving BlockAck with a large bitmap
1918- * so we need to restrict the size of transmitted aggregation to the
1919- * HT size; mac80211 would otherwise pick the HE max (256) by default.
1920- */
1921- .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
1922+ .num_rbds = IWL_NUM_RBDS_NON_HE,
1923 };
1924
1925-const struct iwl_cfg iwl_ax101_cfg_qu_c0_hr_b0 = {
1926- .name = "Intel(R) Wi-Fi 6 AX101",
1927- .fw_name_pre = IWL_QU_C_HR_B_FW_PRE,
1928+const struct iwl_cfg iwl9560_qu_c0_jf_b0_cfg = {
1929+ .fw_name_pre = IWL_QU_C_JF_B_FW_PRE,
1930 IWL_DEVICE_22500,
1931- /*
1932- * This device doesn't support receiving BlockAck with a large bitmap
1933- * so we need to restrict the size of transmitted aggregation to the
1934- * HT size; mac80211 would otherwise pick the HE max (256) by default.
1935- */
1936- .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
1937+ .num_rbds = IWL_NUM_RBDS_NON_HE,
1938 };
1939
1940-const struct iwl_cfg iwl_ax201_cfg_qu_c0_hr_b0 = {
1941- .name = "Intel(R) Wi-Fi 6 AX201 160MHz",
1942- .fw_name_pre = IWL_QU_C_HR_B_FW_PRE,
1943+const struct iwl_cfg iwl9560_quz_a0_jf_b0_cfg = {
1944+ .fw_name_pre = IWL_QUZ_A_JF_B_FW_PRE,
1945 IWL_DEVICE_22500,
1946 /*
1947 * This device doesn't support receiving BlockAck with a large bitmap
1948@@ -319,11 +299,11 @@ const struct iwl_cfg iwl_ax201_cfg_qu_c0_hr_b0 = {
1949 * HT size; mac80211 would otherwise pick the HE max (256) by default.
1950 */
1951 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
1952+ .num_rbds = IWL_NUM_RBDS_NON_HE,
1953 };
1954
1955-const struct iwl_cfg iwl_ax101_cfg_quz_hr = {
1956- .name = "Intel(R) Wi-Fi 6 AX101",
1957- .fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE,
1958+const struct iwl_cfg iwl9560_qnj_b0_jf_b0_cfg = {
1959+ .fw_name_pre = IWL_QNJ_B_JF_B_FW_PRE,
1960 IWL_DEVICE_22500,
1961 /*
1962 * This device doesn't support receiving BlockAck with a large bitmap
1963@@ -331,60 +311,29 @@ const struct iwl_cfg iwl_ax101_cfg_quz_hr = {
1964 * HT size; mac80211 would otherwise pick the HE max (256) by default.
1965 */
1966 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
1967+ .num_rbds = IWL_NUM_RBDS_NON_HE,
1968 };
1969
1970-const struct iwl_cfg iwl_ax201_cfg_quz_hr = {
1971- .name = "Intel(R) Wi-Fi 6 AX201 160MHz",
1972- .fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE,
1973- IWL_DEVICE_22500,
1974- /*
1975- * This device doesn't support receiving BlockAck with a large bitmap
1976- * so we need to restrict the size of transmitted aggregation to the
1977- * HT size; mac80211 would otherwise pick the HE max (256) by default.
1978- */
1979- .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
1980+const struct iwl_cfg_trans_params iwl_ax200_trans_cfg = {
1981+ .device_family = IWL_DEVICE_FAMILY_22000,
1982+ .base_params = &iwl_22000_base_params,
1983+ .mq_rx_supported = true,
1984+ .use_tfh = true,
1985+ .rf_id = true,
1986+ .gen2 = true,
1987+ .bisr_workaround = 1,
1988 };
1989
1990-const struct iwl_cfg iwl_ax1650s_cfg_quz_hr = {
1991- .name = "Killer(R) Wi-Fi 6 AX1650s 160MHz Wireless Network Adapter (201D2W)",
1992- .fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE,
1993- IWL_DEVICE_22500,
1994- /*
1995- * This device doesn't support receiving BlockAck with a large bitmap
1996- * so we need to restrict the size of transmitted aggregation to the
1997- * HT size; mac80211 would otherwise pick the HE max (256) by default.
1998- */
1999- .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
2000-};
2001+const char iwl_ax200_name[] = "Intel(R) Wi-Fi 6 AX200 160MHz";
2002
2003-const struct iwl_cfg iwl_ax1650i_cfg_quz_hr = {
2004- .name = "Killer(R) Wi-Fi 6 AX1650i 160MHz Wireless Network Adapter (201NGW)",
2005- .fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE,
2006- IWL_DEVICE_22500,
2007- /*
2008- * This device doesn't support receiving BlockAck with a large bitmap
2009- * so we need to restrict the size of transmitted aggregation to the
2010- * HT size; mac80211 would otherwise pick the HE max (256) by default.
2011- */
2012- .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
2013-};
2014+const char iwl_ax200_killer_1650w_name[] =
2015+ "Killer(R) Wi-Fi 6 AX1650w 160MHz Wireless Network Adapter (200D2W)";
2016+const char iwl_ax200_killer_1650x_name[] =
2017+ "Killer(R) Wi-Fi 6 AX1650x 160MHz Wireless Network Adapter (200NGW)";
2018
2019-const struct iwl_cfg iwl_ax200_cfg_cc = {
2020- .name = "Intel(R) Wi-Fi 6 AX200 160MHz",
2021- .fw_name_pre = IWL_CC_A_FW_PRE,
2022- IWL_DEVICE_22500,
2023- /*
2024- * This device doesn't support receiving BlockAck with a large bitmap
2025- * so we need to restrict the size of transmitted aggregation to the
2026- * HT size; mac80211 would otherwise pick the HE max (256) by default.
2027- */
2028- .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
2029- .trans.bisr_workaround = 1,
2030-};
2031-
2032-const struct iwl_cfg killer1650x_2ax_cfg = {
2033- .name = "Killer(R) Wi-Fi 6 AX1650x 160MHz Wireless Network Adapter (200NGW)",
2034- .fw_name_pre = IWL_CC_A_FW_PRE,
2035+const struct iwl_cfg iwl_ax101_cfg_qu_hr = {
2036+ .name = "Intel(R) Wi-Fi 6 AX101",
2037+ .fw_name_pre = IWL_22000_QU_B_HR_B_FW_PRE,
2038 IWL_DEVICE_22500,
2039 /*
2040 * This device doesn't support receiving BlockAck with a large bitmap
2041@@ -392,12 +341,13 @@ const struct iwl_cfg killer1650x_2ax_cfg = {
2042 * HT size; mac80211 would otherwise pick the HE max (256) by default.
2043 */
2044 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
2045- .trans.bisr_workaround = 1,
2046+ .tx_with_siso_diversity = true,
2047+ .num_rbds = IWL_NUM_RBDS_22000_HE,
2048 };
2049
2050-const struct iwl_cfg killer1650w_2ax_cfg = {
2051- .name = "Killer(R) Wi-Fi 6 AX1650w 160MHz Wireless Network Adapter (200D2W)",
2052- .fw_name_pre = IWL_CC_A_FW_PRE,
2053+const struct iwl_cfg iwl_ax201_cfg_qu_hr = {
2054+ .name = "Intel(R) Wi-Fi 6 AX201 160MHz",
2055+ .fw_name_pre = IWL_22000_QU_B_HR_B_FW_PRE,
2056 IWL_DEVICE_22500,
2057 /*
2058 * This device doesn't support receiving BlockAck with a large bitmap
2059@@ -405,65 +355,12 @@ const struct iwl_cfg killer1650w_2ax_cfg = {
2060 * HT size; mac80211 would otherwise pick the HE max (256) by default.
2061 */
2062 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
2063- .trans.bisr_workaround = 1,
2064+ .num_rbds = IWL_NUM_RBDS_22000_HE,
2065 };
2066
2067-/*
2068- * All JF radio modules are part of the 9000 series, but the MAC part
2069- * looks more like 22000. That's why this device is here, but called
2070- * 9560 nevertheless.
2071- */
2072-const struct iwl_cfg iwl9461_2ac_cfg_qu_b0_jf_b0 = {
2073- .name = "Intel(R) Wireless-AC 9461",
2074- .fw_name_pre = IWL_QU_B_JF_B_FW_PRE,
2075- IWL_DEVICE_22500,
2076-};
2077-
2078-const struct iwl_cfg iwl9462_2ac_cfg_qu_b0_jf_b0 = {
2079- .name = "Intel(R) Wireless-AC 9462",
2080- .fw_name_pre = IWL_QU_B_JF_B_FW_PRE,
2081- IWL_DEVICE_22500,
2082-};
2083-
2084-const struct iwl_cfg iwl9560_2ac_cfg_qu_b0_jf_b0 = {
2085- .name = "Intel(R) Wireless-AC 9560",
2086- .fw_name_pre = IWL_QU_B_JF_B_FW_PRE,
2087- IWL_DEVICE_22500,
2088-};
2089-
2090-const struct iwl_cfg iwl9560_2ac_160_cfg_qu_b0_jf_b0 = {
2091- .name = "Intel(R) Wireless-AC 9560 160MHz",
2092- .fw_name_pre = IWL_QU_B_JF_B_FW_PRE,
2093- IWL_DEVICE_22500,
2094-};
2095-
2096-const struct iwl_cfg iwl9461_2ac_cfg_qu_c0_jf_b0 = {
2097- .name = "Intel(R) Wireless-AC 9461",
2098- .fw_name_pre = IWL_QU_C_JF_B_FW_PRE,
2099- IWL_DEVICE_22500,
2100-};
2101-
2102-const struct iwl_cfg iwl9462_2ac_cfg_qu_c0_jf_b0 = {
2103- .name = "Intel(R) Wireless-AC 9462",
2104- .fw_name_pre = IWL_QU_C_JF_B_FW_PRE,
2105- IWL_DEVICE_22500,
2106-};
2107-
2108-const struct iwl_cfg iwl9560_2ac_cfg_qu_c0_jf_b0 = {
2109- .name = "Intel(R) Wireless-AC 9560",
2110- .fw_name_pre = IWL_QU_C_JF_B_FW_PRE,
2111- IWL_DEVICE_22500,
2112-};
2113-
2114-const struct iwl_cfg iwl9560_2ac_160_cfg_qu_c0_jf_b0 = {
2115- .name = "Intel(R) Wireless-AC 9560 160MHz",
2116- .fw_name_pre = IWL_QU_C_JF_B_FW_PRE,
2117- IWL_DEVICE_22500,
2118-};
2119-
2120-const struct iwl_cfg iwl9560_2ac_cfg_qnj_jf_b0 = {
2121- .name = "Intel(R) Wireless-AC 9560 160MHz",
2122- .fw_name_pre = IWL_QNJ_B_JF_B_FW_PRE,
2123+const struct iwl_cfg iwl_ax101_cfg_qu_c0_hr_b0 = {
2124+ .name = "Intel(R) Wi-Fi 6 AX101",
2125+ .fw_name_pre = IWL_QU_C_HR_B_FW_PRE,
2126 IWL_DEVICE_22500,
2127 /*
2128 * This device doesn't support receiving BlockAck with a large bitmap
2129@@ -471,11 +368,12 @@ const struct iwl_cfg iwl9560_2ac_cfg_qnj_jf_b0 = {
2130 * HT size; mac80211 would otherwise pick the HE max (256) by default.
2131 */
2132 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
2133+ .num_rbds = IWL_NUM_RBDS_22000_HE,
2134 };
2135
2136-const struct iwl_cfg iwl9560_2ac_cfg_quz_a0_jf_b0_soc = {
2137- .name = "Intel(R) Wireless-AC 9560 160MHz",
2138- .fw_name_pre = IWL_QUZ_A_JF_B_FW_PRE,
2139+const struct iwl_cfg iwl_ax201_cfg_qu_c0_hr_b0 = {
2140+ .name = "Intel(R) Wi-Fi 6 AX201 160MHz",
2141+ .fw_name_pre = IWL_QU_C_HR_B_FW_PRE,
2142 IWL_DEVICE_22500,
2143 /*
2144 * This device doesn't support receiving BlockAck with a large bitmap
2145@@ -483,13 +381,12 @@ const struct iwl_cfg iwl9560_2ac_cfg_quz_a0_jf_b0_soc = {
2146 * HT size; mac80211 would otherwise pick the HE max (256) by default.
2147 */
2148 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
2149- .integrated = true,
2150- .soc_latency = 5000,
2151+ .num_rbds = IWL_NUM_RBDS_22000_HE,
2152 };
2153
2154-const struct iwl_cfg iwl9560_2ac_160_cfg_quz_a0_jf_b0_soc = {
2155- .name = "Intel(R) Wireless-AC 9560 160MHz",
2156- .fw_name_pre = IWL_QUZ_A_JF_B_FW_PRE,
2157+const struct iwl_cfg iwl_ax101_cfg_quz_hr = {
2158+ .name = "Intel(R) Wi-Fi 6 AX101",
2159+ .fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE,
2160 IWL_DEVICE_22500,
2161 /*
2162 * This device doesn't support receiving BlockAck with a large bitmap
2163@@ -497,55 +394,50 @@ const struct iwl_cfg iwl9560_2ac_160_cfg_quz_a0_jf_b0_soc = {
2164 * HT size; mac80211 would otherwise pick the HE max (256) by default.
2165 */
2166 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
2167- .integrated = true,
2168- .soc_latency = 5000,
2169+ .num_rbds = IWL_NUM_RBDS_22000_HE,
2170 };
2171
2172-const struct iwl_cfg iwl9461_2ac_cfg_quz_a0_jf_b0_soc = {
2173- .name = "Intel(R) Dual Band Wireless AC 9461",
2174- .fw_name_pre = IWL_QUZ_A_JF_B_FW_PRE,
2175+const struct iwl_cfg iwl_ax201_cfg_quz_hr = {
2176+ .name = "Intel(R) Wi-Fi 6 AX201 160MHz",
2177+ .fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE,
2178 IWL_DEVICE_22500,
2179 /*
2180- * This device doesn't support receiving BlockAck with a large bitmap
2181- * so we need to restrict the size of transmitted aggregation to the
2182- * HT size; mac80211 would otherwise pick the HE max (256) by default.
2183- */
2184+ * This device doesn't support receiving BlockAck with a large bitmap
2185+ * so we need to restrict the size of transmitted aggregation to the
2186+ * HT size; mac80211 would otherwise pick the HE max (256) by default.
2187+ */
2188 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
2189- .integrated = true,
2190- .soc_latency = 5000,
2191+ .num_rbds = IWL_NUM_RBDS_22000_HE,
2192 };
2193
2194-const struct iwl_cfg iwl9462_2ac_cfg_quz_a0_jf_b0_soc = {
2195- .name = "Intel(R) Dual Band Wireless AC 9462",
2196- .fw_name_pre = IWL_QUZ_A_JF_B_FW_PRE,
2197+const struct iwl_cfg iwl_ax1650s_cfg_quz_hr = {
2198+ .name = "Killer(R) Wi-Fi 6 AX1650s 160MHz Wireless Network Adapter (201D2W)",
2199+ .fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE,
2200 IWL_DEVICE_22500,
2201 /*
2202- * This device doesn't support receiving BlockAck with a large bitmap
2203- * so we need to restrict the size of transmitted aggregation to the
2204- * HT size; mac80211 would otherwise pick the HE max (256) by default.
2205- */
2206+ * This device doesn't support receiving BlockAck with a large bitmap
2207+ * so we need to restrict the size of transmitted aggregation to the
2208+ * HT size; mac80211 would otherwise pick the HE max (256) by default.
2209+ */
2210 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
2211- .integrated = true,
2212- .soc_latency = 5000,
2213+ .num_rbds = IWL_NUM_RBDS_22000_HE,
2214 };
2215
2216-const struct iwl_cfg iwl9560_killer_s_2ac_cfg_quz_a0_jf_b0_soc = {
2217- .name = "Killer (R) Wireless-AC 1550s Wireless Network Adapter (9560NGW)",
2218- .fw_name_pre = IWL_QUZ_A_JF_B_FW_PRE,
2219+const struct iwl_cfg iwl_ax1650i_cfg_quz_hr = {
2220+ .name = "Killer(R) Wi-Fi 6 AX1650i 160MHz Wireless Network Adapter (201NGW)",
2221+ .fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE,
2222 IWL_DEVICE_22500,
2223 /*
2224- * This device doesn't support receiving BlockAck with a large bitmap
2225- * so we need to restrict the size of transmitted aggregation to the
2226- * HT size; mac80211 would otherwise pick the HE max (256) by default.
2227- */
2228+ * This device doesn't support receiving BlockAck with a large bitmap
2229+ * so we need to restrict the size of transmitted aggregation to the
2230+ * HT size; mac80211 would otherwise pick the HE max (256) by default.
2231+ */
2232 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
2233- .integrated = true,
2234- .soc_latency = 5000,
2235+ .num_rbds = IWL_NUM_RBDS_22000_HE,
2236 };
2237
2238-const struct iwl_cfg iwl9560_killer_i_2ac_cfg_quz_a0_jf_b0_soc = {
2239- .name = "Killer (R) Wireless-AC 1550i Wireless Network Adapter (9560NGW)",
2240- .fw_name_pre = IWL_QUZ_A_JF_B_FW_PRE,
2241+const struct iwl_cfg iwl_ax200_cfg_cc = {
2242+ .fw_name_pre = IWL_CC_A_FW_PRE,
2243 IWL_DEVICE_22500,
2244 /*
2245 * This device doesn't support receiving BlockAck with a large bitmap
2246@@ -553,20 +445,7 @@ const struct iwl_cfg iwl9560_killer_i_2ac_cfg_quz_a0_jf_b0_soc = {
2247 * HT size; mac80211 would otherwise pick the HE max (256) by default.
2248 */
2249 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
2250- .integrated = true,
2251- .soc_latency = 5000,
2252-};
2253-
2254-const struct iwl_cfg killer1550i_2ac_cfg_qu_b0_jf_b0 = {
2255- .name = "Killer (R) Wireless-AC 1550i Wireless Network Adapter (9560NGW)",
2256- .fw_name_pre = IWL_QU_B_JF_B_FW_PRE,
2257- IWL_DEVICE_22500,
2258-};
2259-
2260-const struct iwl_cfg killer1550s_2ac_cfg_qu_b0_jf_b0 = {
2261- .name = "Killer (R) Wireless-AC 1550s Wireless Network Adapter (9560NGW)",
2262- .fw_name_pre = IWL_QU_B_JF_B_FW_PRE,
2263- IWL_DEVICE_22500,
2264+ .num_rbds = IWL_NUM_RBDS_22000_HE,
2265 };
2266
2267 const struct iwl_cfg killer1650s_2ax_cfg_qu_b0_hr_b0 = {
2268@@ -579,6 +458,7 @@ const struct iwl_cfg killer1650s_2ax_cfg_qu_b0_hr_b0 = {
2269 * HT size; mac80211 would otherwise pick the HE max (256) by default.
2270 */
2271 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
2272+ .num_rbds = IWL_NUM_RBDS_22000_HE,
2273 };
2274
2275 const struct iwl_cfg killer1650i_2ax_cfg_qu_b0_hr_b0 = {
2276@@ -591,6 +471,7 @@ const struct iwl_cfg killer1650i_2ax_cfg_qu_b0_hr_b0 = {
2277 * HT size; mac80211 would otherwise pick the HE max (256) by default.
2278 */
2279 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
2280+ .num_rbds = IWL_NUM_RBDS_22000_HE,
2281 };
2282
2283 const struct iwl_cfg killer1650s_2ax_cfg_qu_c0_hr_b0 = {
2284@@ -603,6 +484,7 @@ const struct iwl_cfg killer1650s_2ax_cfg_qu_c0_hr_b0 = {
2285 * HT size; mac80211 would otherwise pick the HE max (256) by default.
2286 */
2287 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
2288+ .num_rbds = IWL_NUM_RBDS_22000_HE,
2289 };
2290
2291 const struct iwl_cfg killer1650i_2ax_cfg_qu_c0_hr_b0 = {
2292@@ -615,42 +497,7 @@ const struct iwl_cfg killer1650i_2ax_cfg_qu_c0_hr_b0 = {
2293 * HT size; mac80211 would otherwise pick the HE max (256) by default.
2294 */
2295 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
2296-};
2297-
2298-const struct iwl_cfg iwl22000_2ax_cfg_jf = {
2299- .name = "Intel(R) Dual Band Wireless AX 22000",
2300- .fw_name_pre = IWL_QU_B_JF_B_FW_PRE,
2301- IWL_DEVICE_22500,
2302- /*
2303- * This device doesn't support receiving BlockAck with a large bitmap
2304- * so we need to restrict the size of transmitted aggregation to the
2305- * HT size; mac80211 would otherwise pick the HE max (256) by default.
2306- */
2307- .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
2308-};
2309-
2310-const struct iwl_cfg iwl22000_2ax_cfg_qnj_hr_a0_f0 = {
2311- .name = "Intel(R) Dual Band Wireless AX 22000",
2312- .fw_name_pre = IWL_22000_HR_A_F0_FW_PRE,
2313- IWL_DEVICE_22500,
2314- /*
2315- * This device doesn't support receiving BlockAck with a large bitmap
2316- * so we need to restrict the size of transmitted aggregation to the
2317- * HT size; mac80211 would otherwise pick the HE max (256) by default.
2318- */
2319- .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
2320-};
2321-
2322-const struct iwl_cfg iwl22000_2ax_cfg_qnj_hr_b0_f0 = {
2323- .name = "Intel(R) Dual Band Wireless AX 22000",
2324- .fw_name_pre = IWL_22000_QU_B_HR_B_FW_PRE,
2325- IWL_DEVICE_22500,
2326- /*
2327- * This device doesn't support receiving BlockAck with a large bitmap
2328- * so we need to restrict the size of transmitted aggregation to the
2329- * HT size; mac80211 would otherwise pick the HE max (256) by default.
2330- */
2331- .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
2332+ .num_rbds = IWL_NUM_RBDS_22000_HE,
2333 };
2334
2335 const struct iwl_cfg iwl22000_2ax_cfg_qnj_hr_b0 = {
2336@@ -663,43 +510,21 @@ const struct iwl_cfg iwl22000_2ax_cfg_qnj_hr_b0 = {
2337 * HT size; mac80211 would otherwise pick the HE max (256) by default.
2338 */
2339 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
2340-};
2341-
2342-const struct iwl_cfg iwl22000_2ax_cfg_qnj_hr_a0 = {
2343- .name = "Intel(R) Dual Band Wireless AX 22000",
2344- .fw_name_pre = IWL_22000_HR_A0_FW_PRE,
2345- IWL_DEVICE_22500,
2346- /*
2347- * This device doesn't support receiving BlockAck with a large bitmap
2348- * so we need to restrict the size of transmitted aggregation to the
2349- * HT size; mac80211 would otherwise pick the HE max (256) by default.
2350- */
2351- .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
2352-};
2353-
2354-const struct iwl_cfg iwl_ax201_cfg_qnj_b0_gftc_a0 = {
2355- .name = "Intel(R) Wi-fi 6 AX201 GF TC",
2356- .fw_name_pre = IWL_QNJ_B_GFTC_A_FW_PRE,
2357- IWL_DEVICE_22500,
2358- /*
2359- * This device doesn't support receiving BlockAck with a large bitmap
2360- * so we need to restrict the size of transmitted aggregation to the
2361- * HT size; mac80211 would otherwise pick the HE max (256) by default.
2362- */
2363- .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
2364- .uhb_supported = true
2365+ .num_rbds = IWL_NUM_RBDS_22000_HE,
2366 };
2367
2368 const struct iwl_cfg iwlax210_2ax_cfg_so_jf_a0 = {
2369 .name = "Intel(R) Wireless-AC 9560 160MHz",
2370 .fw_name_pre = IWL_22000_SO_A_JF_B_FW_PRE,
2371 IWL_DEVICE_AX210,
2372+ .num_rbds = IWL_NUM_RBDS_NON_HE,
2373 };
2374
2375 const struct iwl_cfg iwlax210_2ax_cfg_so_hr_a0 = {
2376 .name = "Intel(R) Wi-Fi 7 AX210 160MHz",
2377 .fw_name_pre = IWL_22000_SO_A_HR_B_FW_PRE,
2378 IWL_DEVICE_AX210,
2379+ .num_rbds = IWL_NUM_RBDS_AX210_HE,
2380 };
2381
2382 const struct iwl_cfg iwlax211_2ax_cfg_so_gf_a0 = {
2383@@ -707,6 +532,7 @@ const struct iwl_cfg iwlax211_2ax_cfg_so_gf_a0 = {
2384 .fw_name_pre = IWL_22000_SO_A_GF_A_FW_PRE,
2385 .uhb_supported = true,
2386 IWL_DEVICE_AX210,
2387+ .num_rbds = IWL_NUM_RBDS_AX210_HE,
2388 };
2389
2390 const struct iwl_cfg iwlax210_2ax_cfg_ty_gf_a0 = {
2391@@ -714,19 +540,28 @@ const struct iwl_cfg iwlax210_2ax_cfg_ty_gf_a0 = {
2392 .fw_name_pre = IWL_22000_TY_A_GF_A_FW_PRE,
2393 .uhb_supported = true,
2394 IWL_DEVICE_AX210,
2395+ .num_rbds = IWL_NUM_RBDS_AX210_HE,
2396 };
2397
2398 const struct iwl_cfg iwlax411_2ax_cfg_so_gf4_a0 = {
2399 .name = "Intel(R) Wi-Fi 7 AX411 160MHz",
2400 .fw_name_pre = IWL_22000_SO_A_GF4_A_FW_PRE,
2401+ .uhb_supported = true,
2402+ IWL_DEVICE_AX210,
2403+ .num_rbds = IWL_NUM_RBDS_AX210_HE,
2404+};
2405+
2406+const struct iwl_cfg iwlax411_2ax_cfg_sosnj_gf4_a0 = {
2407+ .name = "Intel(R) Wi-Fi 7 AX411 160MHz",
2408+ .fw_name_pre = IWL_22000_SOSNJ_A_GF4_A_FW_PRE,
2409+ .uhb_supported = true,
2410 IWL_DEVICE_AX210,
2411+ .num_rbds = IWL_NUM_RBDS_AX210_HE,
2412 };
2413
2414 MODULE_FIRMWARE(IWL_22000_HR_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
2415 MODULE_FIRMWARE(IWL_22000_JF_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
2416-MODULE_FIRMWARE(IWL_22000_HR_A_F0_QNJ_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
2417 MODULE_FIRMWARE(IWL_22000_HR_B_QNJ_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
2418-MODULE_FIRMWARE(IWL_22000_HR_A0_QNJ_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
2419 MODULE_FIRMWARE(IWL_QU_C_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
2420 MODULE_FIRMWARE(IWL_QU_B_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
2421 MODULE_FIRMWARE(IWL_QUZ_A_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
2422diff --git a/drivers/net/wireless/intel/iwlwifi/cfg/7000.c b/drivers/net/wireless/intel/iwlwifi/cfg/7000.c
2423index deb520a..b72993e 100644
2424--- a/drivers/net/wireless/intel/iwlwifi/cfg/7000.c
2425+++ b/drivers/net/wireless/intel/iwlwifi/cfg/7000.c
2426@@ -154,8 +154,7 @@ static const struct iwl_ht_params iwl7000_ht_params = {
2427 .nvm_hw_section_num = 0, \
2428 .non_shared_ant = ANT_A, \
2429 .max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K, \
2430- .dccm_offset = IWL7000_DCCM_OFFSET, \
2431- .trans.csr = &iwl_csr_v1
2432+ .dccm_offset = IWL7000_DCCM_OFFSET
2433
2434 #define IWL_DEVICE_7000 \
2435 IWL_DEVICE_7000_COMMON, \
2436diff --git a/drivers/net/wireless/intel/iwlwifi/cfg/8000.c b/drivers/net/wireless/intel/iwlwifi/cfg/8000.c
2437index b3cc477..280d84f 100644
2438--- a/drivers/net/wireless/intel/iwlwifi/cfg/8000.c
2439+++ b/drivers/net/wireless/intel/iwlwifi/cfg/8000.c
2440@@ -151,8 +151,7 @@ static const struct iwl_tt_params iwl8000_tt_params = {
2441 .apmg_not_supported = true, \
2442 .nvm_type = IWL_NVM_EXT, \
2443 .dbgc_supported = true, \
2444- .min_umac_error_event_table = 0x800000, \
2445- .trans.csr = &iwl_csr_v1
2446+ .min_umac_error_event_table = 0x800000
2447
2448 #define IWL_DEVICE_8000 \
2449 IWL_DEVICE_8000_COMMON, \
2450diff --git a/drivers/net/wireless/intel/iwlwifi/cfg/9000.c b/drivers/net/wireless/intel/iwlwifi/cfg/9000.c
2451index e9155b9..f84b8e5 100644
2452--- a/drivers/net/wireless/intel/iwlwifi/cfg/9000.c
2453+++ b/drivers/net/wireless/intel/iwlwifi/cfg/9000.c
2454@@ -123,8 +123,6 @@ static const struct iwl_tt_params iwl9000_tt_params = {
2455 #define IWL_DEVICE_9000 \
2456 .ucode_api_max = IWL9000_UCODE_API_MAX, \
2457 .ucode_api_min = IWL9000_UCODE_API_MIN, \
2458- .trans.device_family = IWL_DEVICE_FAMILY_9000, \
2459- .trans.base_params = &iwl9000_base_params, \
2460 .led_mode = IWL_LED_RF_STATE, \
2461 .nvm_hw_section_num = 10, \
2462 .non_shared_ant = ANT_B, \
2463@@ -137,14 +135,12 @@ static const struct iwl_tt_params iwl9000_tt_params = {
2464 .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM, \
2465 .thermal_params = &iwl9000_tt_params, \
2466 .apmg_not_supported = true, \
2467- .trans.mq_rx_supported = true, \
2468+ .num_rbds = 512, \
2469 .vht_mu_mimo_supported = true, \
2470 .mac_addr_from_csr = true, \
2471- .trans.rf_id = true, \
2472 .nvm_type = IWL_NVM_EXT, \
2473 .dbgc_supported = true, \
2474 .min_umac_error_event_table = 0x800000, \
2475- .trans.csr = &iwl_csr_v1, \
2476 .d3_debug_data_base_addr = 0x401000, \
2477 .d3_debug_data_length = 92 * 1024, \
2478 .ht_params = &iwl9000_ht_params, \
2479@@ -171,172 +167,61 @@ static const struct iwl_tt_params iwl9000_tt_params = {
2480 }, \
2481 }
2482
2483-
2484-const struct iwl_cfg iwl9160_2ac_cfg = {
2485- .name = "Intel(R) Dual Band Wireless AC 9160",
2486- .fw_name_pre = IWL9260_FW_PRE,
2487- IWL_DEVICE_9000,
2488-};
2489-
2490-const struct iwl_cfg iwl9260_2ac_cfg = {
2491- .name = "Intel(R) Dual Band Wireless AC 9260",
2492- .fw_name_pre = IWL9260_FW_PRE,
2493- IWL_DEVICE_9000,
2494-};
2495-
2496-const struct iwl_cfg iwl9260_2ac_160_cfg = {
2497- .name = "Intel(R) Wireless-AC 9260 160MHz",
2498- .fw_name_pre = IWL9260_FW_PRE,
2499- IWL_DEVICE_9000,
2500-};
2501-
2502-const struct iwl_cfg iwl9260_killer_2ac_cfg = {
2503- .name = "Killer (R) Wireless-AC 1550 Wireless Network Adapter (9260NGW)",
2504- .fw_name_pre = IWL9260_FW_PRE,
2505- IWL_DEVICE_9000,
2506-};
2507-
2508-const struct iwl_cfg iwl9270_2ac_cfg = {
2509- .name = "Intel(R) Dual Band Wireless AC 9270",
2510- .fw_name_pre = IWL9260_FW_PRE,
2511- IWL_DEVICE_9000,
2512-};
2513-
2514-const struct iwl_cfg iwl9460_2ac_cfg = {
2515- .name = "Intel(R) Dual Band Wireless AC 9460",
2516- .fw_name_pre = IWL9260_FW_PRE,
2517- IWL_DEVICE_9000,
2518+const struct iwl_cfg_trans_params iwl9000_trans_cfg = {
2519+ .device_family = IWL_DEVICE_FAMILY_9000,
2520+ .base_params = &iwl9000_base_params,
2521+ .mq_rx_supported = true,
2522+ .rf_id = true,
2523 };
2524
2525-const struct iwl_cfg iwl9460_2ac_cfg_soc = {
2526- .name = "Intel(R) Dual Band Wireless AC 9460",
2527- .fw_name_pre = IWL9000_FW_PRE,
2528- IWL_DEVICE_9000,
2529- .integrated = true,
2530- .soc_latency = 5000,
2531-};
2532-
2533-const struct iwl_cfg iwl9461_2ac_cfg_soc = {
2534- .name = "Intel(R) Dual Band Wireless AC 9461",
2535- .fw_name_pre = IWL9000_FW_PRE,
2536- IWL_DEVICE_9000,
2537+const struct iwl_cfg_trans_params iwl9560_trans_cfg = {
2538+ .device_family = IWL_DEVICE_FAMILY_9000,
2539+ .base_params = &iwl9000_base_params,
2540+ .mq_rx_supported = true,
2541+ .rf_id = true,
2542 .integrated = true,
2543- .soc_latency = 5000,
2544+ .xtal_latency = 5000,
2545 };
2546
2547-const struct iwl_cfg iwl9462_2ac_cfg_soc = {
2548- .name = "Intel(R) Dual Band Wireless AC 9462",
2549- .fw_name_pre = IWL9000_FW_PRE,
2550- IWL_DEVICE_9000,
2551+const struct iwl_cfg_trans_params iwl9560_shared_clk_trans_cfg = {
2552+ .device_family = IWL_DEVICE_FAMILY_9000,
2553+ .base_params = &iwl9000_base_params,
2554+ .mq_rx_supported = true,
2555+ .rf_id = true,
2556 .integrated = true,
2557- .soc_latency = 5000,
2558+ .xtal_latency = 5000,
2559+ .extra_phy_cfg_flags = FW_PHY_CFG_SHARED_CLK
2560 };
2561
2562-const struct iwl_cfg iwl9560_2ac_cfg = {
2563- .name = "Intel(R) Dual Band Wireless AC 9560",
2564- .fw_name_pre = IWL9260_FW_PRE,
2565- IWL_DEVICE_9000,
2566-};
2567+const char iwl9162_name[] = "Intel(R) Wireless-AC 9162";
2568+const char iwl9260_name[] = "Intel(R) Wireless-AC 9260";
2569+const char iwl9260_1_name[] = "Intel(R) Wireless-AC 9260-1";
2570+const char iwl9270_name[] = "Intel(R) Wireless-AC 9270";
2571+const char iwl9461_name[] = "Intel(R) Wireless-AC 9461";
2572+const char iwl9462_name[] = "Intel(R) Wireless-AC 9462";
2573+const char iwl9560_name[] = "Intel(R) Wireless-AC 9560";
2574+const char iwl9162_160_name[] = "Intel(R) Wireless-AC 9162 160MHz";
2575+const char iwl9260_160_name[] = "Intel(R) Wireless-AC 9260 160MHz";
2576+const char iwl9270_160_name[] = "Intel(R) Wireless-AC 9270 160MHz";
2577+const char iwl9461_160_name[] = "Intel(R) Wireless-AC 9461 160MHz";
2578+const char iwl9462_160_name[] = "Intel(R) Wireless-AC 9462 160MHz";
2579+const char iwl9560_160_name[] = "Intel(R) Wireless-AC 9560 160MHz";
2580+
2581+const char iwl9260_killer_1550_name[] =
2582+ "Killer (R) Wireless-AC 1550 Wireless Network Adapter (9260NGW)";
2583+const char iwl9560_killer_1550i_name[] =
2584+ "Killer (R) Wireless-AC 1550i Wireless Network Adapter (9560NGW)";
2585+const char iwl9560_killer_1550s_name[] =
2586+ "Killer (R) Wireless-AC 1550s Wireless Network Adapter (9560NGW)";
2587
2588-const struct iwl_cfg iwl9560_2ac_160_cfg = {
2589- .name = "Intel(R) Wireless-AC 9560 160MHz",
2590+const struct iwl_cfg iwl9260_2ac_cfg = {
2591 .fw_name_pre = IWL9260_FW_PRE,
2592 IWL_DEVICE_9000,
2593 };
2594
2595 const struct iwl_cfg iwl9560_2ac_cfg_soc = {
2596- .name = "Intel(R) Dual Band Wireless AC 9560",
2597- .fw_name_pre = IWL9000_FW_PRE,
2598- IWL_DEVICE_9000,
2599- .integrated = true,
2600- .soc_latency = 5000,
2601-};
2602-
2603-const struct iwl_cfg iwl9560_2ac_160_cfg_soc = {
2604- .name = "Intel(R) Wireless-AC 9560 160MHz",
2605- .fw_name_pre = IWL9000_FW_PRE,
2606- IWL_DEVICE_9000,
2607- .integrated = true,
2608- .soc_latency = 5000,
2609-};
2610-
2611-const struct iwl_cfg iwl9560_killer_2ac_cfg_soc = {
2612- .name = "Killer (R) Wireless-AC 1550i Wireless Network Adapter (9560NGW)",
2613 .fw_name_pre = IWL9000_FW_PRE,
2614 IWL_DEVICE_9000,
2615- .integrated = true,
2616- .soc_latency = 5000,
2617-};
2618-
2619-const struct iwl_cfg iwl9560_killer_s_2ac_cfg_soc = {
2620- .name = "Killer (R) Wireless-AC 1550s Wireless Network Adapter (9560NGW)",
2621- .fw_name_pre = IWL9000_FW_PRE,
2622- IWL_DEVICE_9000,
2623- .integrated = true,
2624- .soc_latency = 5000,
2625-};
2626-
2627-const struct iwl_cfg iwl9460_2ac_cfg_shared_clk = {
2628- .name = "Intel(R) Dual Band Wireless AC 9460",
2629- .fw_name_pre = IWL9000_FW_PRE,
2630- IWL_DEVICE_9000,
2631- .integrated = true,
2632- .soc_latency = 5000,
2633- .extra_phy_cfg_flags = FW_PHY_CFG_SHARED_CLK
2634-};
2635-
2636-const struct iwl_cfg iwl9461_2ac_cfg_shared_clk = {
2637- .name = "Intel(R) Dual Band Wireless AC 9461",
2638- .fw_name_pre = IWL9000_FW_PRE,
2639- IWL_DEVICE_9000,
2640- .integrated = true,
2641- .soc_latency = 5000,
2642- .extra_phy_cfg_flags = FW_PHY_CFG_SHARED_CLK
2643-};
2644-
2645-const struct iwl_cfg iwl9462_2ac_cfg_shared_clk = {
2646- .name = "Intel(R) Dual Band Wireless AC 9462",
2647- .fw_name_pre = IWL9000_FW_PRE,
2648- IWL_DEVICE_9000,
2649- .integrated = true,
2650- .soc_latency = 5000,
2651- .extra_phy_cfg_flags = FW_PHY_CFG_SHARED_CLK
2652-};
2653-
2654-const struct iwl_cfg iwl9560_2ac_cfg_shared_clk = {
2655- .name = "Intel(R) Dual Band Wireless AC 9560",
2656- .fw_name_pre = IWL9000_FW_PRE,
2657- IWL_DEVICE_9000,
2658- .integrated = true,
2659- .soc_latency = 5000,
2660- .extra_phy_cfg_flags = FW_PHY_CFG_SHARED_CLK
2661-};
2662-
2663-const struct iwl_cfg iwl9560_2ac_160_cfg_shared_clk = {
2664- .name = "Intel(R) Wireless-AC 9560 160MHz",
2665- .fw_name_pre = IWL9000_FW_PRE,
2666- IWL_DEVICE_9000,
2667- .integrated = true,
2668- .soc_latency = 5000,
2669- .extra_phy_cfg_flags = FW_PHY_CFG_SHARED_CLK
2670-};
2671-
2672-const struct iwl_cfg iwl9560_killer_2ac_cfg_shared_clk = {
2673- .name = "Killer (R) Wireless-AC 1550i Wireless Network Adapter (9560NGW)",
2674- .fw_name_pre = IWL9000_FW_PRE,
2675- IWL_DEVICE_9000,
2676- .integrated = true,
2677- .soc_latency = 5000,
2678- .extra_phy_cfg_flags = FW_PHY_CFG_SHARED_CLK
2679-};
2680-
2681-const struct iwl_cfg iwl9560_killer_s_2ac_cfg_shared_clk = {
2682- .name = "Killer (R) Wireless-AC 1550s Wireless Network Adapter (9560NGW)",
2683- .fw_name_pre = IWL9000_FW_PRE,
2684- IWL_DEVICE_9000,
2685- .integrated = true,
2686- .soc_latency = 5000,
2687- .extra_phy_cfg_flags = FW_PHY_CFG_SHARED_CLK
2688 };
2689
2690 MODULE_FIRMWARE(IWL9000_MODULE_FIRMWARE(IWL9000_UCODE_API_MAX));
2691diff --git a/drivers/net/wireless/intel/iwlwifi/fw/acpi.c b/drivers/net/wireless/intel/iwlwifi/fw/acpi.c
2692index 7573af2..bdc382a 100644
2693--- a/drivers/net/wireless/intel/iwlwifi/fw/acpi.c
2694+++ b/drivers/net/wireless/intel/iwlwifi/fw/acpi.c
2695@@ -61,6 +61,7 @@
2696 #include "iwl-drv.h"
2697 #include "iwl-debug.h"
2698 #include "acpi.h"
2699+#include "fw/runtime.h"
2700
2701 void *iwl_acpi_get_object(struct device *dev, acpi_string method)
2702 {
2703@@ -162,12 +163,13 @@ int iwl_acpi_get_mcc(struct device *dev, char *mcc)
2704
2705 wifi_pkg = iwl_acpi_get_wifi_pkg(dev, data, ACPI_WRDD_WIFI_DATA_SIZE,
2706 &tbl_rev);
2707- if (IS_ERR(wifi_pkg) || tbl_rev != 0) {
2708+ if (IS_ERR(wifi_pkg)) {
2709 ret = PTR_ERR(wifi_pkg);
2710 goto out_free;
2711 }
2712
2713- if (wifi_pkg->package.elements[1].type != ACPI_TYPE_INTEGER) {
2714+ if (wifi_pkg->package.elements[1].type != ACPI_TYPE_INTEGER ||
2715+ tbl_rev != 0) {
2716 ret = -EINVAL;
2717 goto out_free;
2718 }
2719@@ -224,12 +226,13 @@ int iwl_acpi_get_eckv(struct device *dev, u32 *extl_clk)
2720
2721 wifi_pkg = iwl_acpi_get_wifi_pkg(dev, data, ACPI_ECKV_WIFI_DATA_SIZE,
2722 &tbl_rev);
2723- if (IS_ERR(wifi_pkg) || tbl_rev != 0) {
2724+ if (IS_ERR(wifi_pkg)) {
2725 ret = PTR_ERR(wifi_pkg);
2726 goto out_free;
2727 }
2728
2729- if (wifi_pkg->package.elements[1].type != ACPI_TYPE_INTEGER) {
2730+ if (wifi_pkg->package.elements[1].type != ACPI_TYPE_INTEGER ||
2731+ tbl_rev != 0) {
2732 ret = -EINVAL;
2733 goto out_free;
2734 }
2735@@ -243,3 +246,293 @@ out_free:
2736 return ret;
2737 }
2738 IWL_EXPORT_SYMBOL(iwl_acpi_get_eckv);
2739+
2740+int iwl_sar_set_profile(union acpi_object *table,
2741+ struct iwl_sar_profile *profile,
2742+ bool enabled)
2743+{
2744+ int i;
2745+
2746+ profile->enabled = enabled;
2747+
2748+ for (i = 0; i < ACPI_SAR_TABLE_SIZE; i++) {
2749+ if (table[i].type != ACPI_TYPE_INTEGER ||
2750+ table[i].integer.value > U8_MAX)
2751+ return -EINVAL;
2752+
2753+ profile->table[i] = table[i].integer.value;
2754+ }
2755+
2756+ return 0;
2757+}
2758+IWL_EXPORT_SYMBOL(iwl_sar_set_profile);
2759+
2760+int iwl_sar_select_profile(struct iwl_fw_runtime *fwrt,
2761+ __le16 per_chain_restriction[][IWL_NUM_SUB_BANDS],
2762+ int prof_a, int prof_b)
2763+{
2764+ int i, j, idx;
2765+ int profs[ACPI_SAR_NUM_CHAIN_LIMITS] = { prof_a, prof_b };
2766+
2767+ BUILD_BUG_ON(ACPI_SAR_NUM_CHAIN_LIMITS < 2);
2768+ BUILD_BUG_ON(ACPI_SAR_NUM_CHAIN_LIMITS * ACPI_SAR_NUM_SUB_BANDS !=
2769+ ACPI_SAR_TABLE_SIZE);
2770+
2771+ for (i = 0; i < ACPI_SAR_NUM_CHAIN_LIMITS; i++) {
2772+ struct iwl_sar_profile *prof;
2773+
2774+ /* don't allow SAR to be disabled (profile 0 means disable) */
2775+ if (profs[i] == 0)
2776+ return -EPERM;
2777+
2778+ /* we are off by one, so allow up to ACPI_SAR_PROFILE_NUM */
2779+ if (profs[i] > ACPI_SAR_PROFILE_NUM)
2780+ return -EINVAL;
2781+
2782+ /* profiles go from 1 to 4, so decrement to access the array */
2783+ prof = &fwrt->sar_profiles[profs[i] - 1];
2784+
2785+ /* if the profile is disabled, do nothing */
2786+ if (!prof->enabled) {
2787+ IWL_DEBUG_RADIO(fwrt, "SAR profile %d is disabled.\n",
2788+ profs[i]);
2789+ /* if one of the profiles is disabled, we fail all */
2790+ return -ENOENT;
2791+ }
2792+ IWL_DEBUG_INFO(fwrt,
2793+ "SAR EWRD: chain %d profile index %d\n",
2794+ i, profs[i]);
2795+ IWL_DEBUG_RADIO(fwrt, " Chain[%d]:\n", i);
2796+ for (j = 0; j < ACPI_SAR_NUM_SUB_BANDS; j++) {
2797+ idx = (i * ACPI_SAR_NUM_SUB_BANDS) + j;
2798+ per_chain_restriction[i][j] =
2799+ cpu_to_le16(prof->table[idx]);
2800+ IWL_DEBUG_RADIO(fwrt, " Band[%d] = %d * .125dBm\n",
2801+ j, prof->table[idx]);
2802+ }
2803+ }
2804+
2805+#ifdef CPTCFG_IWLMVM_VENDOR_CMDS
2806+ fwrt->sar_chain_a_profile = prof_a;
2807+ fwrt->sar_chain_b_profile = prof_b;
2808+#endif
2809+ return 0;
2810+}
2811+IWL_EXPORT_SYMBOL(iwl_sar_select_profile);
2812+
2813+int iwl_sar_get_wrds_table(struct iwl_fw_runtime *fwrt)
2814+{
2815+ union acpi_object *wifi_pkg, *table, *data;
2816+ bool enabled;
2817+ int ret, tbl_rev;
2818+
2819+ data = iwl_acpi_get_object(fwrt->dev, ACPI_WRDS_METHOD);
2820+ if (IS_ERR(data))
2821+ return PTR_ERR(data);
2822+
2823+ wifi_pkg = iwl_acpi_get_wifi_pkg(fwrt->dev, data,
2824+ ACPI_WRDS_WIFI_DATA_SIZE, &tbl_rev);
2825+ if (IS_ERR(wifi_pkg) || tbl_rev != 0) {
2826+ ret = PTR_ERR(wifi_pkg);
2827+ goto out_free;
2828+ }
2829+
2830+ if (wifi_pkg->package.elements[1].type != ACPI_TYPE_INTEGER) {
2831+ ret = -EINVAL;
2832+ goto out_free;
2833+ }
2834+
2835+ enabled = !!(wifi_pkg->package.elements[1].integer.value);
2836+
2837+ /* position of the actual table */
2838+ table = &wifi_pkg->package.elements[2];
2839+
2840+ /* The profile from WRDS is officially profile 1, but goes
2841+ * into sar_profiles[0] (because we don't have a profile 0).
2842+ */
2843+ ret = iwl_sar_set_profile(table, &fwrt->sar_profiles[0], enabled);
2844+out_free:
2845+ kfree(data);
2846+ return ret;
2847+}
2848+IWL_EXPORT_SYMBOL(iwl_sar_get_wrds_table);
2849+
2850+int iwl_sar_get_ewrd_table(struct iwl_fw_runtime *fwrt)
2851+{
2852+ union acpi_object *wifi_pkg, *data;
2853+ bool enabled;
2854+ int i, n_profiles, tbl_rev;
2855+ int ret = 0;
2856+
2857+ data = iwl_acpi_get_object(fwrt->dev, ACPI_EWRD_METHOD);
2858+ if (IS_ERR(data))
2859+ return PTR_ERR(data);
2860+
2861+ wifi_pkg = iwl_acpi_get_wifi_pkg(fwrt->dev, data,
2862+ ACPI_EWRD_WIFI_DATA_SIZE, &tbl_rev);
2863+ if (IS_ERR(wifi_pkg) || tbl_rev != 0) {
2864+ ret = PTR_ERR(wifi_pkg);
2865+ goto out_free;
2866+ }
2867+
2868+ if (wifi_pkg->package.elements[1].type != ACPI_TYPE_INTEGER ||
2869+ wifi_pkg->package.elements[2].type != ACPI_TYPE_INTEGER) {
2870+ ret = -EINVAL;
2871+ goto out_free;
2872+ }
2873+
2874+ enabled = !!(wifi_pkg->package.elements[1].integer.value);
2875+ n_profiles = wifi_pkg->package.elements[2].integer.value;
2876+
2877+ /*
2878+ * Check the validity of n_profiles. The EWRD profiles start
2879+ * from index 1, so the maximum value allowed here is
2880+ * ACPI_SAR_PROFILES_NUM - 1.
2881+ */
2882+ if (n_profiles <= 0 || n_profiles >= ACPI_SAR_PROFILE_NUM) {
2883+ ret = -EINVAL;
2884+ goto out_free;
2885+ }
2886+
2887+ for (i = 0; i < n_profiles; i++) {
2888+ /* the tables start at element 3 */
2889+ int pos = 3;
2890+
2891+ /* The EWRD profiles officially go from 2 to 4, but we
2892+ * save them in sar_profiles[1-3] (because we don't
2893+ * have profile 0). So in the array we start from 1.
2894+ */
2895+ ret = iwl_sar_set_profile(&wifi_pkg->package.elements[pos],
2896+ &fwrt->sar_profiles[i + 1],
2897+ enabled);
2898+ if (ret < 0)
2899+ break;
2900+
2901+ /* go to the next table */
2902+ pos += ACPI_SAR_TABLE_SIZE;
2903+ }
2904+
2905+out_free:
2906+ kfree(data);
2907+ return ret;
2908+}
2909+IWL_EXPORT_SYMBOL(iwl_sar_get_ewrd_table);
2910+
2911+int iwl_sar_get_wgds_table(struct iwl_fw_runtime *fwrt)
2912+{
2913+ union acpi_object *wifi_pkg, *data;
2914+ int i, j, ret, tbl_rev;
2915+ int idx = 1;
2916+
2917+ data = iwl_acpi_get_object(fwrt->dev, ACPI_WGDS_METHOD);
2918+ if (IS_ERR(data))
2919+ return PTR_ERR(data);
2920+
2921+ wifi_pkg = iwl_acpi_get_wifi_pkg(fwrt->dev, data,
2922+ ACPI_WGDS_WIFI_DATA_SIZE, &tbl_rev);
2923+ if (IS_ERR(wifi_pkg) || tbl_rev > 1) {
2924+ ret = PTR_ERR(wifi_pkg);
2925+ goto out_free;
2926+ }
2927+
2928+ fwrt->geo_rev = tbl_rev;
2929+ for (i = 0; i < ACPI_NUM_GEO_PROFILES; i++) {
2930+ for (j = 0; j < ACPI_GEO_TABLE_SIZE; j++) {
2931+ union acpi_object *entry;
2932+
2933+ entry = &wifi_pkg->package.elements[idx++];
2934+ if (entry->type != ACPI_TYPE_INTEGER ||
2935+ entry->integer.value > U8_MAX) {
2936+ ret = -EINVAL;
2937+ goto out_free;
2938+ }
2939+
2940+ fwrt->geo_profiles[i].values[j] = entry->integer.value;
2941+ }
2942+ }
2943+ ret = 0;
2944+out_free:
2945+ kfree(data);
2946+ return ret;
2947+}
2948+IWL_EXPORT_SYMBOL(iwl_sar_get_wgds_table);
2949+
2950+bool iwl_sar_geo_support(struct iwl_fw_runtime *fwrt)
2951+{
2952+ /*
2953+ * The GEO_TX_POWER_LIMIT command is not supported on earlier
2954+ * firmware versions. Unfortunately, we don't have a TLV API
2955+ * flag to rely on, so rely on the major version which is in
2956+ * the first byte of ucode_ver. This was implemented
2957+ * initially on version 38 and then backported to 17. It was
2958+ * also backported to 29, but only for 7265D devices. The
2959+ * intention was to have it in 36 as well, but not all 8000
2960+ * family got this feature enabled. The 8000 family is the
2961+ * only one using version 36, so skip this version entirely.
2962+ */
2963+ return IWL_UCODE_SERIAL(fwrt->fw->ucode_ver) >= 38 ||
2964+ IWL_UCODE_SERIAL(fwrt->fw->ucode_ver) == 17 ||
2965+ (IWL_UCODE_SERIAL(fwrt->fw->ucode_ver) == 29 &&
2966+ ((fwrt->trans->hw_rev & CSR_HW_REV_TYPE_MSK) ==
2967+ CSR_HW_REV_TYPE_7265D));
2968+}
2969+IWL_EXPORT_SYMBOL(iwl_sar_geo_support);
2970+
2971+int iwl_validate_sar_geo_profile(struct iwl_fw_runtime *fwrt,
2972+ struct iwl_host_cmd *cmd)
2973+{
2974+ struct iwl_geo_tx_power_profiles_resp *resp;
2975+ int ret;
2976+
2977+ resp = (void *)cmd->resp_pkt->data;
2978+ ret = le32_to_cpu(resp->profile_idx);
2979+ if (WARN_ON(ret > ACPI_NUM_GEO_PROFILES)) {
2980+ ret = -EIO;
2981+ IWL_WARN(fwrt, "Invalid geographic profile idx (%d)\n", ret);
2982+ }
2983+
2984+ return ret;
2985+}
2986+IWL_EXPORT_SYMBOL(iwl_validate_sar_geo_profile);
2987+
2988+void iwl_sar_geo_init(struct iwl_fw_runtime *fwrt,
2989+ struct iwl_per_chain_offset_group *table)
2990+{
2991+ int ret, i, j;
2992+
2993+ if (!iwl_sar_geo_support(fwrt))
2994+ return;
2995+
2996+ ret = iwl_sar_get_wgds_table(fwrt);
2997+ if (ret < 0) {
2998+ IWL_DEBUG_RADIO(fwrt,
2999+ "Geo SAR BIOS table invalid or unavailable. (%d)\n",
3000+ ret);
3001+ /* we don't fail if the table is not available */
3002+ return;
3003+ }
3004+
3005+ BUILD_BUG_ON(ACPI_NUM_GEO_PROFILES * ACPI_WGDS_NUM_BANDS *
3006+ ACPI_WGDS_TABLE_SIZE + 1 != ACPI_WGDS_WIFI_DATA_SIZE);
3007+
3008+ BUILD_BUG_ON(ACPI_NUM_GEO_PROFILES > IWL_NUM_GEO_PROFILES);
3009+
3010+ for (i = 0; i < ACPI_NUM_GEO_PROFILES; i++) {
3011+ struct iwl_per_chain_offset *chain =
3012+ (struct iwl_per_chain_offset *)&table[i];
3013+
3014+ for (j = 0; j < ACPI_WGDS_NUM_BANDS; j++) {
3015+ u8 *value;
3016+
3017+ value = &fwrt->geo_profiles[i].values[j *
3018+ ACPI_GEO_PER_CHAIN_SIZE];
3019+ chain[j].max_tx_power = cpu_to_le16(value[0]);
3020+ chain[j].chain_a = value[1];
3021+ chain[j].chain_b = value[2];
3022+ IWL_DEBUG_RADIO(fwrt,
3023+ "SAR geographic profile[%d] Band[%d]: chain A = %d chain B = %d max_tx_power = %d\n",
3024+ i, j, value[1], value[2], value[0]);
3025+ }
3026+ }
3027+}
3028+IWL_EXPORT_SYMBOL(iwl_sar_geo_init);
3029diff --git a/drivers/net/wireless/intel/iwlwifi/fw/acpi.h b/drivers/net/wireless/intel/iwlwifi/fw/acpi.h
3030index 6cb2d1f..4a6e826 100644
3031--- a/drivers/net/wireless/intel/iwlwifi/fw/acpi.h
3032+++ b/drivers/net/wireless/intel/iwlwifi/fw/acpi.h
3033@@ -61,6 +61,12 @@
3034 #define __iwl_fw_acpi__
3035
3036 #include <linux/acpi.h>
3037+#include "fw/api/commands.h"
3038+#include "fw/api/power.h"
3039+#include "fw/api/phy.h"
3040+#include "fw/img.h"
3041+#include "iwl-trans.h"
3042+
3043
3044 #define ACPI_WRDS_METHOD "WRDS"
3045 #define ACPI_EWRD_METHOD "EWRD"
3046@@ -104,9 +110,21 @@
3047 #define ACPI_PPAG_MIN_HB -16
3048 #define ACPI_PPAG_MAX_HB 40
3049
3050+struct iwl_sar_profile {
3051+ bool enabled;
3052+ u8 table[ACPI_SAR_TABLE_SIZE];
3053+};
3054+
3055+struct iwl_geo_profile {
3056+ u8 values[ACPI_GEO_TABLE_SIZE];
3057+};
3058+
3059 #ifdef CONFIG_ACPI
3060
3061+struct iwl_fw_runtime;
3062+
3063 void *iwl_acpi_get_object(struct device *dev, acpi_string method);
3064+
3065 union acpi_object *iwl_acpi_get_wifi_pkg(struct device *dev,
3066 union acpi_object *data,
3067 int data_size, int *tbl_rev);
3068@@ -134,6 +152,27 @@ u64 iwl_acpi_get_pwr_limit(struct device *dev);
3069 */
3070 int iwl_acpi_get_eckv(struct device *dev, u32 *extl_clk);
3071
3072+int iwl_sar_set_profile(union acpi_object *table,
3073+ struct iwl_sar_profile *profile,
3074+ bool enabled);
3075+
3076+int iwl_sar_select_profile(struct iwl_fw_runtime *fwrt,
3077+ __le16 per_chain_restriction[][IWL_NUM_SUB_BANDS],
3078+ int prof_a, int prof_b);
3079+
3080+int iwl_sar_get_wrds_table(struct iwl_fw_runtime *fwrt);
3081+
3082+int iwl_sar_get_ewrd_table(struct iwl_fw_runtime *fwrt);
3083+
3084+int iwl_sar_get_wgds_table(struct iwl_fw_runtime *fwrt);
3085+
3086+bool iwl_sar_geo_support(struct iwl_fw_runtime *fwrt);
3087+
3088+int iwl_validate_sar_geo_profile(struct iwl_fw_runtime *fwrt,
3089+ struct iwl_host_cmd *cmd);
3090+
3091+void iwl_sar_geo_init(struct iwl_fw_runtime *fwrt,
3092+ struct iwl_per_chain_offset_group *table);
3093 #else /* CONFIG_ACPI */
3094
3095 static inline void *iwl_acpi_get_object(struct device *dev, acpi_string method)
3096@@ -164,5 +203,50 @@ static inline int iwl_acpi_get_eckv(struct device *dev, u32 *extl_clk)
3097 return -ENOENT;
3098 }
3099
3100+static inline int iwl_sar_set_profile(union acpi_object *table,
3101+ struct iwl_sar_profile *profile,
3102+ bool enabled)
3103+{
3104+ return -ENOENT;
3105+}
3106+
3107+static inline int iwl_sar_select_profile(struct iwl_fw_runtime *fwrt,
3108+ __le16 per_chain_restriction[][IWL_NUM_SUB_BANDS],
3109+ int prof_a, int prof_b)
3110+{
3111+ return -ENOENT;
3112+}
3113+
3114+static inline int iwl_sar_get_wrds_table(struct iwl_fw_runtime *fwrt)
3115+{
3116+ return -ENOENT;
3117+}
3118+
3119+static inline int iwl_sar_get_ewrd_table(struct iwl_fw_runtime *fwrt)
3120+{
3121+ return -ENOENT;
3122+}
3123+
3124+static inline int iwl_sar_get_wgds_table(struct iwl_fw_runtime *fwrt)
3125+{
3126+ return -ENOENT;
3127+}
3128+
3129+static inline bool iwl_sar_geo_support(struct iwl_fw_runtime *fwrt)
3130+{
3131+ return false;
3132+}
3133+
3134+static inline int iwl_validate_sar_geo_profile(struct iwl_fw_runtime *fwrt,
3135+ struct iwl_host_cmd *cmd)
3136+{
3137+ return -ENOENT;
3138+}
3139+
3140+static inline void iwl_sar_geo_init(struct iwl_fw_runtime *fwrt,
3141+ struct iwl_per_chain_offset_group *table)
3142+{
3143+}
3144+
3145 #endif /* CONFIG_ACPI */
3146 #endif /* __iwl_fw_acpi__ */
3147diff --git a/drivers/net/wireless/intel/iwlwifi/fw/api/commands.h b/drivers/net/wireless/intel/iwlwifi/fw/api/commands.h
3148index 689ab0f..5c1b2e9 100644
3149--- a/drivers/net/wireless/intel/iwlwifi/fw/api/commands.h
3150+++ b/drivers/net/wireless/intel/iwlwifi/fw/api/commands.h
3151@@ -681,6 +681,13 @@ enum iwl_system_subcmd_ids {
3152 */
3153 enum iwl_xvt_subcmd_ids {
3154 /**
3155+ * @RUN_TIME_CALIB_DONE_NOTIF : Notification about
3156+ * runtime calib finished
3157+ * Handled by user space component
3158+ */
3159+ RUN_TIME_CALIB_DONE_NOTIF = 0xFE,
3160+
3161+ /**
3162 * @IQ_CALIB_CONFIG_NOTIF : Notification about IQ calibration finished
3163 * Handled by user space component
3164 */
3165diff --git a/drivers/net/wireless/intel/iwlwifi/fw/api/d3.h b/drivers/net/wireless/intel/iwlwifi/fw/api/d3.h
3166index 3643b6b..c4562e1 100644
3167--- a/drivers/net/wireless/intel/iwlwifi/fw/api/d3.h
3168+++ b/drivers/net/wireless/intel/iwlwifi/fw/api/d3.h
3169@@ -618,7 +618,7 @@ struct iwl_wowlan_status_v6 {
3170 * @wake_packet_bufsize: wakeup packet buffer size
3171 * @wake_packet: wakeup packet
3172 */
3173-struct iwl_wowlan_status {
3174+struct iwl_wowlan_status_v7 {
3175 struct iwl_wowlan_gtk_status gtk[WOWLAN_GTK_KEYS_NUM];
3176 struct iwl_wowlan_igtk_status igtk[WOWLAN_IGTK_KEYS_NUM];
3177 __le64 replay_ctr;
3178@@ -634,6 +634,43 @@ struct iwl_wowlan_status {
3179 u8 wake_packet[]; /* can be truncated from _length to _bufsize */
3180 } __packed; /* WOWLAN_STATUSES_API_S_VER_7 */
3181
3182+/**
3183+ * struct iwl_wowlan_status - WoWLAN status
3184+ * @gtk: GTK data
3185+ * @igtk: IGTK data
3186+ * @replay_ctr: GTK rekey replay counter
3187+ * @pattern_number: number of the matched pattern
3188+ * @non_qos_seq_ctr: non-QoS sequence counter to use next
3189+ * @qos_seq_ctr: QoS sequence counters to use next
3190+ * @wakeup_reasons: wakeup reasons, see &enum iwl_wowlan_wakeup_reason
3191+ * @num_of_gtk_rekeys: number of GTK rekeys
3192+ * @transmitted_ndps: number of transmitted neighbor discovery packets
3193+ * @received_beacons: number of received beacons
3194+ * @wake_packet_length: wakeup packet length
3195+ * @wake_packet_bufsize: wakeup packet buffer size
3196+ * @tid_tear_down: bit mask of tids whose BA sessions were closed
3197+ * in suspend state
3198+ * @reserved: unused
3199+ * @wake_packet: wakeup packet
3200+ */
3201+struct iwl_wowlan_status {
3202+ struct iwl_wowlan_gtk_status gtk[WOWLAN_GTK_KEYS_NUM];
3203+ struct iwl_wowlan_igtk_status igtk[WOWLAN_IGTK_KEYS_NUM];
3204+ __le64 replay_ctr;
3205+ __le16 pattern_number;
3206+ __le16 non_qos_seq_ctr;
3207+ __le16 qos_seq_ctr[8];
3208+ __le32 wakeup_reasons;
3209+ __le32 num_of_gtk_rekeys;
3210+ __le32 transmitted_ndps;
3211+ __le32 received_beacons;
3212+ __le32 wake_packet_length;
3213+ __le32 wake_packet_bufsize;
3214+ u8 tid_tear_down;
3215+ u8 reserved[3];
3216+ u8 wake_packet[]; /* can be truncated from _length to _bufsize */
3217+} __packed; /* WOWLAN_STATUSES_API_S_VER_9 */
3218+
3219 static inline u8 iwlmvm_wowlan_gtk_idx(struct iwl_wowlan_gtk_status *gtk)
3220 {
3221 return gtk->key_flags & IWL_WOWLAN_GTK_IDX_MASK;
3222diff --git a/drivers/net/wireless/intel/iwlwifi/fw/api/location.h b/drivers/net/wireless/intel/iwlwifi/fw/api/location.h
3223index 7a0fe5a..0214e55 100644
3224--- a/drivers/net/wireless/intel/iwlwifi/fw/api/location.h
3225+++ b/drivers/net/wireless/intel/iwlwifi/fw/api/location.h
3226@@ -240,7 +240,7 @@ enum iwl_tof_responder_cfg_flags {
3227 };
3228
3229 /**
3230- * struct iwl_tof_responder_config_cmd - ToF AP mode (for debug)
3231+ * struct iwl_tof_responder_config_cmd_v6 - ToF AP mode (for debug)
3232 * @cmd_valid_fields: &iwl_tof_responder_cmd_valid_field
3233 * @responder_cfg_flags: &iwl_tof_responder_cfg_flags
3234 * @bandwidth: current AP Bandwidth: &enum iwl_tof_bandwidth
3235@@ -258,7 +258,7 @@ enum iwl_tof_responder_cfg_flags {
3236 * @bssid: Current AP BSSID
3237 * @reserved2: reserved
3238 */
3239-struct iwl_tof_responder_config_cmd {
3240+struct iwl_tof_responder_config_cmd_v6 {
3241 __le32 cmd_valid_fields;
3242 __le32 responder_cfg_flags;
3243 u8 bandwidth;
3244@@ -274,6 +274,42 @@ struct iwl_tof_responder_config_cmd {
3245 __le16 reserved2;
3246 } __packed; /* TOF_RESPONDER_CONFIG_CMD_API_S_VER_6 */
3247
3248+/**
3249+ * struct iwl_tof_responder_config_cmd - ToF AP mode (for debug)
3250+ * @cmd_valid_fields: &iwl_tof_responder_cmd_valid_field
3251+ * @responder_cfg_flags: &iwl_tof_responder_cfg_flags
3252+ * @format_bw: bits 0 - 3: &enum iwl_location_frame_format.
3253+ * bits 4 - 7: &enum iwl_location_bw.
3254+ * @rate: current AP rate
3255+ * @channel_num: current AP Channel
3256+ * @ctrl_ch_position: coding of the control channel position relative to
3257+ * the center frequency, see iwl_mvm_get_ctrl_pos()
3258+ * @sta_id: index of the AP STA when in AP mode
3259+ * @reserved1: reserved
3260+ * @toa_offset: Artificial addition [pSec] for the ToA - to be used for debug
3261+ * purposes, simulating station movement by adding various values
3262+ * to this field
3263+ * @common_calib: XVT: common calibration value
3264+ * @specific_calib: XVT: specific calibration value
3265+ * @bssid: Current AP BSSID
3266+ * @reserved2: reserved
3267+ */
3268+struct iwl_tof_responder_config_cmd {
3269+ __le32 cmd_valid_fields;
3270+ __le32 responder_cfg_flags;
3271+ u8 format_bw;
3272+ u8 rate;
3273+ u8 channel_num;
3274+ u8 ctrl_ch_position;
3275+ u8 sta_id;
3276+ u8 reserved1;
3277+ __le16 toa_offset;
3278+ __le16 common_calib;
3279+ __le16 specific_calib;
3280+ u8 bssid[ETH_ALEN];
3281+ __le16 reserved2;
3282+} __packed; /* TOF_RESPONDER_CONFIG_CMD_API_S_VER_6 */
3283+
3284 #define IWL_LCI_CIVIC_IE_MAX_SIZE 400
3285
3286 /**
3287@@ -391,6 +427,9 @@ struct iwl_tof_range_req_ap_entry_v2 {
3288 * Default algo type is ML.
3289 * @IWL_INITIATOR_AP_FLAGS_MCSI_REPORT: Send the MCSI for each FTM frame to the
3290 * driver.
3291+ * @IWL_INITIATOR_AP_FLAGS_NON_TB: Use non trigger based flow
3292+ * @IWL_INITIATOR_AP_FLAGS_TB: Use trigger based flow
3293+ * @IWL_INITIATOR_AP_FLAGS_SECURED: request secured measurement
3294 */
3295 enum iwl_initiator_ap_flags {
3296 IWL_INITIATOR_AP_FLAGS_ASAP = BIT(1),
3297@@ -400,10 +439,13 @@ enum iwl_initiator_ap_flags {
3298 IWL_INITIATOR_AP_FLAGS_ALGO_LR = BIT(5),
3299 IWL_INITIATOR_AP_FLAGS_ALGO_FFT = BIT(6),
3300 IWL_INITIATOR_AP_FLAGS_MCSI_REPORT = BIT(8),
3301+ IWL_INITIATOR_AP_FLAGS_NON_TB = BIT(9),
3302+ IWL_INITIATOR_AP_FLAGS_TB = BIT(10),
3303+ IWL_INITIATOR_AP_FLAGS_SECURED = BIT(11),
3304 };
3305
3306 /**
3307- * struct iwl_tof_range_req_ap_entry - AP configuration parameters
3308+ * struct iwl_tof_range_req_ap_entry_v3 - AP configuration parameters
3309 * @initiator_ap_flags: see &enum iwl_initiator_ap_flags.
3310 * @channel_num: AP Channel number
3311 * @bandwidth: AP bandwidth. One of iwl_tof_bandwidth.
3312@@ -420,7 +462,7 @@ enum iwl_initiator_ap_flags {
3313 * @reserved: For alignment and future use
3314 * @tsf_delta: not in use
3315 */
3316-struct iwl_tof_range_req_ap_entry {
3317+struct iwl_tof_range_req_ap_entry_v3 {
3318 __le32 initiator_ap_flags;
3319 u8 channel_num;
3320 u8 bandwidth;
3321@@ -435,6 +477,72 @@ struct iwl_tof_range_req_ap_entry {
3322 } __packed; /* LOCATION_RANGE_REQ_AP_ENTRY_CMD_API_S_VER_3 */
3323
3324 /**
3325+ * enum iwl_location_frame_format - location frame formats
3326+ * @IWL_LOCATION_FRAME_FORMAT_LEGACY: legacy
3327+ * @IWL_LOCATION_FRAME_FORMAT_HT: HT
3328+ * @IWL_LOCATION_FRAME_FORMAT_VHT: VHT
3329+ * @IWL_LOCATION_FRAME_FORMAT_HE: HE
3330+ */
3331+enum iwl_location_frame_format {
3332+ IWL_LOCATION_FRAME_FORMAT_LEGACY,
3333+ IWL_LOCATION_FRAME_FORMAT_HT,
3334+ IWL_LOCATION_FRAME_FORMAT_VHT,
3335+ IWL_LOCATION_FRAME_FORMAT_HE,
3336+};
3337+
3338+/**
3339+ * enum iwl_location_bw - location bandwidth selection
3340+ * @IWL_LOCATION_BW_20MHZ: 20MHz
3341+ * @IWL_LOCATION_BW_40MHZ: 40MHz
3342+ * @IWL_LOCATION_BW_80MHZ: 80MHz
3343+ */
3344+enum iwl_location_bw {
3345+ IWL_LOCATION_BW_20MHZ,
3346+ IWL_LOCATION_BW_40MHZ,
3347+ IWL_LOCATION_BW_80MHZ,
3348+};
3349+
3350+#define HLTK_11AZ_LEN 32
3351+#define TK_11AZ_LEN 32
3352+
3353+#define LOCATION_BW_POS 4
3354+
3355+/**
3356+ * struct iwl_tof_range_req_ap_entry - AP configuration parameters
3357+ * @initiator_ap_flags: see &enum iwl_initiator_ap_flags.
3358+ * @channel_num: AP Channel number
3359+ * @format_bw: bits 0 - 3: &enum iwl_location_frame_format.
3360+ * bits 4 - 7: &enum iwl_location_bw.
3361+ * @ctrl_ch_position: Coding of the control channel position relative to the
3362+ * center frequency, see iwl_mvm_get_ctrl_pos().
3363+ * @ftmr_max_retries: Max number of retries to send the FTMR in case of no
3364+ * reply from the AP.
3365+ * @bssid: AP's BSSID
3366+ * @burst_period: Recommended value to be sent to the AP. Measurement
3367+ * periodicity In units of 100ms. ignored if num_of_bursts_exp = 0
3368+ * @samples_per_burst: the number of FTMs pairs in single Burst (1-31);
3369+ * @num_of_bursts: Recommended value to be sent to the AP. 2s Exponent of
3370+ * the number of measurement iterations (min 2^0 = 1, max 2^14)
3371+ * @reserved: For alignment and future use
3372+ * @hltk: HLTK to be used for secured 11az measurement
3373+ * @tk: TK to be used for secured 11az measurement
3374+ */
3375+struct iwl_tof_range_req_ap_entry {
3376+ __le32 initiator_ap_flags;
3377+ u8 channel_num;
3378+ u8 format_bw;
3379+ u8 ctrl_ch_position;
3380+ u8 ftmr_max_retries;
3381+ u8 bssid[ETH_ALEN];
3382+ __le16 burst_period;
3383+ u8 samples_per_burst;
3384+ u8 num_of_bursts;
3385+ __le16 reserved;
3386+ u8 hltk[HLTK_11AZ_LEN];
3387+ u8 tk[TK_11AZ_LEN];
3388+} __packed; /* LOCATION_RANGE_REQ_AP_ENTRY_CMD_API_S_VER_4 */
3389+
3390+/**
3391 * enum iwl_tof_response_mode
3392 * @IWL_MVM_TOF_RESPONSE_ASAP: report each AP measurement separately as soon as
3393 * possible (not supported for this release)
3394@@ -536,6 +644,38 @@ struct iwl_tof_range_req_cmd_v5 {
3395 /* LOCATION_RANGE_REQ_CMD_API_S_VER_5 */
3396
3397 /**
3398+ * struct iwl_tof_range_req_cmd_v7 - start measurement cmd
3399+ * @initiator_flags: see flags @ iwl_tof_initiator_flags
3400+ * @request_id: A Token incremented per request. The same Token will be
3401+ * sent back in the range response
3402+ * @num_of_ap: Number of APs to measure (error if > IWL_MVM_TOF_MAX_APS)
3403+ * @range_req_bssid: ranging request BSSID
3404+ * @macaddr_mask: Bits set to 0 shall be copied from the MAC address template.
3405+ * Bits set to 1 shall be randomized by the UMAC
3406+ * @macaddr_template: MAC address template to use for non-randomized bits
3407+ * @req_timeout_ms: Requested timeout of the response in units of milliseconds.
3408+ * This is the session time for completing the measurement.
3409+ * @tsf_mac_id: report the measurement start time for each ap in terms of the
3410+ * TSF of this mac id. 0xff to disable TSF reporting.
3411+ * @common_calib: The common calib value to inject to this measurement calc
3412+ * @specific_calib: The specific calib value to inject to this measurement calc
3413+ * @ap: per-AP request data, see &struct iwl_tof_range_req_ap_entry_v2.
3414+ */
3415+struct iwl_tof_range_req_cmd_v7 {
3416+ __le32 initiator_flags;
3417+ u8 request_id;
3418+ u8 num_of_ap;
3419+ u8 range_req_bssid[ETH_ALEN];
3420+ u8 macaddr_mask[ETH_ALEN];
3421+ u8 macaddr_template[ETH_ALEN];
3422+ __le32 req_timeout_ms;
3423+ __le32 tsf_mac_id;
3424+ __le16 common_calib;
3425+ __le16 specific_calib;
3426+ struct iwl_tof_range_req_ap_entry_v3 ap[IWL_MVM_TOF_MAX_APS];
3427+} __packed; /* LOCATION_RANGE_REQ_CMD_API_S_VER_7 */
3428+
3429+/**
3430 * struct iwl_tof_range_req_cmd - start measurement cmd
3431 * @initiator_flags: see flags @ iwl_tof_initiator_flags
3432 * @request_id: A Token incremented per request. The same Token will be
3433@@ -565,7 +705,7 @@ struct iwl_tof_range_req_cmd {
3434 __le16 common_calib;
3435 __le16 specific_calib;
3436 struct iwl_tof_range_req_ap_entry ap[IWL_MVM_TOF_MAX_APS];
3437-} __packed; /* LOCATION_RANGE_REQ_CMD_API_S_VER_7 */
3438+} __packed; /* LOCATION_RANGE_REQ_CMD_API_S_VER_8 */
3439
3440 /*
3441 * enum iwl_tof_range_request_status - status of the sent request
3442diff --git a/drivers/net/wireless/intel/iwlwifi/fw/api/scan.h b/drivers/net/wireless/intel/iwlwifi/fw/api/scan.h
3443index 08148bc..48c3d68 100644
3444--- a/drivers/net/wireless/intel/iwlwifi/fw/api/scan.h
3445+++ b/drivers/net/wireless/intel/iwlwifi/fw/api/scan.h
3446@@ -95,6 +95,7 @@ struct iwl_ssid_ie {
3447 #define IWL_SCAN_MAX_BLACKLIST_LEN 64
3448 #define IWL_SCAN_SHORT_BLACKLIST_LEN 16
3449 #define IWL_SCAN_MAX_PROFILES 11
3450+#define IWL_SCAN_MAX_PROFILES_V2 8
3451 #define SCAN_OFFLOAD_PROBE_REQ_SIZE 512
3452 #define SCAN_NUM_BAND_PROBE_DATA_V_1 2
3453 #define SCAN_NUM_BAND_PROBE_DATA_V_2 3
3454@@ -161,8 +162,7 @@ struct iwl_scan_offload_profile {
3455 } __packed;
3456
3457 /**
3458- * struct iwl_scan_offload_profile_cfg - SCAN_OFFLOAD_PROFILES_CFG_API_S_VER_1
3459- * @profiles: profiles to search for match
3460+ * struct iwl_scan_offload_profile_cfg_data
3461 * @blacklist_len: length of blacklist
3462 * @num_profiles: num of profiles in the list
3463 * @match_notify: clients waiting for match found notification
3464@@ -171,8 +171,7 @@ struct iwl_scan_offload_profile {
3465 * @any_beacon_notify: clients waiting for match notification without match
3466 * @reserved: reserved
3467 */
3468-struct iwl_scan_offload_profile_cfg {
3469- struct iwl_scan_offload_profile profiles[IWL_SCAN_MAX_PROFILES];
3470+struct iwl_scan_offload_profile_cfg_data {
3471 u8 blacklist_len;
3472 u8 num_profiles;
3473 u8 match_notify;
3474@@ -183,6 +182,26 @@ struct iwl_scan_offload_profile_cfg {
3475 } __packed;
3476
3477 /**
3478+ * struct iwl_scan_offload_profile_cfg
3479+ * @profiles: profiles to search for match
3480+ * @data: the rest of the data for profile_cfg
3481+ */
3482+struct iwl_scan_offload_profile_cfg_v1 {
3483+ struct iwl_scan_offload_profile profiles[IWL_SCAN_MAX_PROFILES];
3484+ struct iwl_scan_offload_profile_cfg_data data;
3485+} __packed; /* SCAN_OFFLOAD_PROFILES_CFG_API_S_VER_1-2*/
3486+
3487+/**
3488+ * struct iwl_scan_offload_profile_cfg
3489+ * @profiles: profiles to search for match
3490+ * @data: the rest of the data for profile_cfg
3491+ */
3492+struct iwl_scan_offload_profile_cfg {
3493+ struct iwl_scan_offload_profile profiles[IWL_SCAN_MAX_PROFILES_V2];
3494+ struct iwl_scan_offload_profile_cfg_data data;
3495+} __packed; /* SCAN_OFFLOAD_PROFILES_CFG_API_S_VER_3*/
3496+
3497+/**
3498 * struct iwl_scan_schedule_lmac - schedule of scan offload
3499 * @delay: delay between iterations, in seconds.
3500 * @iterations: num of scan iterations
3501@@ -645,7 +664,10 @@ enum iwl_umac_scan_general_flags2 {
3502 };
3503
3504 /**
3505- * enum iwl_umac_scan_general_flags_v22 - UMAC scan general flags ver 2
3506+ * enum iwl_umac_scan_general_flags_v2 - UMAC scan general flags version 2
3507+ *
3508+ * The FW flags were reordered and hence the driver introduce version 2
3509+ *
3510 * @IWL_UMAC_SCAN_GEN_FLAGS_V2_PERIODIC: periodic or scheduled
3511 * @IWL_UMAC_SCAN_GEN_FLAGS_V2_PASS_ALL: pass all probe responses and beacons
3512 * during scan iterations
3513@@ -662,6 +684,9 @@ enum iwl_umac_scan_general_flags2 {
3514 * @IWL_UMAC_SCAN_GEN_FLAGS_V2_MULTI_SSID: matching on multiple SSIDs
3515 * @IWL_UMAC_SCAN_GEN_FLAGS_V2_FORCE_PASSIVE: all the channels scanned
3516 * as passive
3517+ * @IWL_UMAC_SCAN_GEN_FLAGS_V2_TRIGGER_UHB_SCAN: at the end of 2.4GHz and
3518+ * 5.2Ghz bands scan, trigger scan on 6GHz band to discover
3519+ * the reported collocated APs
3520 */
3521 enum iwl_umac_scan_general_flags_v2 {
3522 IWL_UMAC_SCAN_GEN_FLAGS_V2_PERIODIC = BIT(0),
3523@@ -676,6 +701,7 @@ enum iwl_umac_scan_general_flags_v2 {
3524 IWL_UMAC_SCAN_GEN_FLAGS_V2_NTF_START = BIT(9),
3525 IWL_UMAC_SCAN_GEN_FLAGS_V2_MULTI_SSID = BIT(10),
3526 IWL_UMAC_SCAN_GEN_FLAGS_V2_FORCE_PASSIVE = BIT(11),
3527+ IWL_UMAC_SCAN_GEN_FLAGS_V2_TRIGGER_UHB_SCAN = BIT(12),
3528 };
3529
3530 /**
3531@@ -696,13 +722,16 @@ struct iwl_scan_channel_cfg_umac {
3532 u8 channel_num;
3533 u8 iter_count;
3534 __le16 iter_interval;
3535- } v1; /* SCAN_CHANNEL_CFG_S_VER1 */
3536+ } v1; /* SCAN_CHANNEL_CONFIG_API_S_VER_1 */
3537 struct {
3538 u8 channel_num;
3539 u8 band;
3540 u8 iter_count;
3541 u8 iter_interval;
3542- } v2; /* SCAN_CHANNEL_CFG_S_VER2 */
3543+ } v2; /* SCAN_CHANNEL_CONFIG_API_S_VER_2
3544+ * SCAN_CHANNEL_CONFIG_API_S_VER_3
3545+ * SCAN_CHANNEL_CONFIG_API_S_VER_4
3546+ */
3547 };
3548 } __packed;
3549
3550@@ -872,7 +901,7 @@ struct iwl_scan_req_umac {
3551 #define IWL_SCAN_REQ_UMAC_SIZE_V1 36
3552
3553 /**
3554- * struct iwl_scan_probe_params
3555+ * struct iwl_scan_probe_params_v3
3556 * @preq: scan probe request params
3557 * @ssid_num: number of valid SSIDs in direct scan array
3558 * @short_ssid_num: number of valid short SSIDs in short ssid array
3559@@ -881,8 +910,8 @@ struct iwl_scan_req_umac {
3560 * @direct_scan: list of ssids
3561 * @short_ssid: array of short ssids
3562 * @bssid_array: array of bssids
3563-*/
3564-struct iwl_scan_probe_params {
3565+ */
3566+struct iwl_scan_probe_params_v3 {
3567 struct iwl_scan_probe_req preq;
3568 u8 ssid_num;
3569 u8 short_ssid_num;
3570@@ -891,49 +920,95 @@ struct iwl_scan_probe_params {
3571 struct iwl_ssid_ie direct_scan[PROBE_OPTION_MAX];
3572 __le32 short_ssid[SCAN_SHORT_SSID_MAX_SIZE];
3573 u8 bssid_array[ETH_ALEN][SCAN_BSSID_MAX_SIZE];
3574-} __packed;
3575+} __packed; /* SCAN_PROBE_PARAMS_API_S_VER_3 */
3576+
3577+/**
3578+ * struct iwl_scan_probe_params_v4
3579+ * @preq: scan probe request params
3580+ * @short_ssid_num: number of valid short SSIDs in short ssid array
3581+ * @bssid_num: number of valid bssid in bssids array
3582+ * @reserved: reserved
3583+ * @direct_scan: list of ssids
3584+ * @short_ssid: array of short ssids
3585+ * @bssid_array: array of bssids
3586+ */
3587+struct iwl_scan_probe_params_v4 {
3588+ struct iwl_scan_probe_req preq;
3589+ u8 short_ssid_num;
3590+ u8 bssid_num;
3591+ __le16 reserved;
3592+ struct iwl_ssid_ie direct_scan[PROBE_OPTION_MAX];
3593+ __le32 short_ssid[SCAN_SHORT_SSID_MAX_SIZE];
3594+ u8 bssid_array[ETH_ALEN][SCAN_BSSID_MAX_SIZE];
3595+} __packed; /* SCAN_PROBE_PARAMS_API_S_VER_4 */
3596
3597 #define SCAN_MAX_NUM_CHANS_V3 67
3598
3599 /**
3600- * struct iwl_scan_channel_params
3601+ * struct iwl_scan_channel_params_v4
3602 * @flags: channel flags &enum iwl_scan_channel_flags
3603 * @count: num of channels in scan request
3604+ * @num_of_aps_override: override the number of APs the FW uses to calculate
3605+ * dwell time when adaptive dwell is used
3606 * @reserved: for future use and alignment
3607 * @channel_config: array of explicit channel configurations
3608 * for 2.4Ghz and 5.2Ghz bands
3609+ * @adwell_ch_override_bitmap: when using adaptive dwell, override the number
3610+ * of APs value with &num_of_aps_override for the channel.
3611+ * To cast channel to index, use &iwl_mvm_scan_ch_and_band_to_idx
3612 */
3613-struct iwl_scan_channel_params {
3614+struct iwl_scan_channel_params_v4 {
3615 u8 flags;
3616 u8 count;
3617- __le16 reserved;
3618+ u8 num_of_aps_override;
3619+ u8 reserved;
3620 struct iwl_scan_channel_cfg_umac channel_config[SCAN_MAX_NUM_CHANS_V3];
3621-} __packed;
3622+ u8 adwell_ch_override_bitmap[16];
3623+} __packed; /* SCAN_CHANNEL_PARAMS_API_S_VER_4 also
3624+ SCAN_CHANNEL_PARAMS_API_S_VER_5 */
3625
3626- /**
3627- * struct iwl_scan_general_params
3628- * @flags: &enum iwl_umac_scan_flags
3629- * @reserved: reserved for future
3630- * @scan_start_mac_id: report the scan start TSF time according to this mac TSF
3631- * @active_dwell: dwell time for active scan per LMAC
3632- * @adwell_default_2g: adaptive dwell default number of APs
3633- * for 2.4GHz channel
3634- * @ddwell_default_5g: adaptive dwell default number of APs
3635- * for 5GHz channels
3636- * @adwell_default_social_chn: adaptive dwell default number of
3637- * APs per social channel
3638- * @reserved1: reserved for future
3639- * @adwell_max_budget: the maximal number of TUs that adaptive dwell
3640- * can add to the total scan time
3641- * @max_out_of_time: max out of serving channel time, per LMAC
3642- * @suspend_time: max suspend time, per LMAC
3643- * @scan_priority: priority of the request
3644- * @passive_dwell: continues dwell time for passive channel
3645- * (without adaptive dwell)
3646- * @num_of_fragments: number of fragments needed for full fragmented
3647- * scan coverage.
3648- * */
3649-struct iwl_scan_general_params {
3650+/**
3651+ * struct iwl_scan_channel_params_v6
3652+ * @flags: channel flags &enum iwl_scan_channel_flags
3653+ * @count: num of channels in scan request
3654+ * @n_aps_override: override the number of APs the FW uses to calculate dwell
3655+ * time when adaptive dwell is used.
3656+ * Channel k will use n_aps_override[i] when BIT(20 + i) is set in
3657+ * channel_config[k].flags
3658+ * @channel_config: array of explicit channel configurations
3659+ * for 2.4Ghz and 5.2Ghz bands
3660+ */
3661+struct iwl_scan_channel_params_v6 {
3662+ u8 flags;
3663+ u8 count;
3664+ u8 n_aps_override[2];
3665+ struct iwl_scan_channel_cfg_umac channel_config[SCAN_MAX_NUM_CHANS_V3];
3666+} __packed; /* SCAN_CHANNEL_PARAMS_API_S_VER_6 */
3667+
3668+/**
3669+ * struct iwl_scan_general_params_v10
3670+ * @flags: &enum iwl_umac_scan_flags
3671+ * @reserved: reserved for future
3672+ * @scan_start_mac_id: report the scan start TSF time according to this mac TSF
3673+ * @active_dwell: dwell time for active scan per LMAC
3674+ * @adwell_default_2g: adaptive dwell default number of APs
3675+ * for 2.4GHz channel
3676+ * @adwell_default_5g: adaptive dwell default number of APs
3677+ * for 5GHz channels
3678+ * @adwell_default_social_chn: adaptive dwell default number of
3679+ * APs per social channel
3680+ * @reserved1: reserved for future
3681+ * @adwell_max_budget: the maximal number of TUs that adaptive dwell
3682+ * can add to the total scan time
3683+ * @max_out_of_time: max out of serving channel time, per LMAC
3684+ * @suspend_time: max suspend time, per LMAC
3685+ * @scan_priority: priority of the request
3686+ * @passive_dwell: continues dwell time for passive channel
3687+ * (without adaptive dwell)
3688+ * @num_of_fragments: number of fragments needed for full fragmented
3689+ * scan coverage.
3690+ */
3691+struct iwl_scan_general_params_v10 {
3692 __le16 flags;
3693 u8 reserved;
3694 u8 scan_start_mac_id;
3695@@ -948,45 +1023,71 @@ struct iwl_scan_general_params {
3696 __le32 scan_priority;
3697 u8 passive_dwell[SCAN_TWO_LMACS];
3698 u8 num_of_fragments[SCAN_TWO_LMACS];
3699-} __packed;
3700+} __packed; /* SCAN_GENERAL_PARAMS_API_S_VER_10 */
3701
3702 /**
3703- * struct iwl_scan_periodic_parms
3704- * @schedule: can scheduling parameter
3705- * @delay: initial delay of the periodic scan in seconds
3706- * @reserved: reserved for future
3707- * */
3708-struct iwl_scan_periodic_parms {
3709+ * struct iwl_scan_periodic_parms_v1
3710+ * @schedule: can scheduling parameter
3711+ * @delay: initial delay of the periodic scan in seconds
3712+ * @reserved: reserved for future
3713+ */
3714+struct iwl_scan_periodic_parms_v1 {
3715 struct iwl_scan_umac_schedule schedule[IWL_MAX_SCHED_SCAN_PLANS];
3716 __le16 delay;
3717 __le16 reserved;
3718-} __packed;
3719+} __packed; /* SCAN_PERIODIC_PARAMS_API_S_VER_1 */
3720
3721 /**
3722- * struct iwl_scan_req_params
3723- * @general_params: &struct iwl_scan_general_params
3724- * @channel_params: &struct iwl_scan_channel_params
3725- * @periodic_params: &struct iwl_scan_periodic_parms
3726- * @probe_params: &struct iwl_scan_probe_params
3727- * */
3728-struct iwl_scan_req_params {
3729- struct iwl_scan_general_params general_params;
3730- struct iwl_scan_channel_params channel_params;
3731- struct iwl_scan_periodic_parms periodic_params;
3732- struct iwl_scan_probe_params probe_params;
3733-} __packed;
3734+ * struct iwl_scan_req_params_v12
3735+ * @general_params: &struct iwl_scan_general_params_v10
3736+ * @channel_params: &struct iwl_scan_channel_params_v4
3737+ * @periodic_params: &struct iwl_scan_periodic_parms_v1
3738+ * @probe_params: &struct iwl_scan_probe_params_v3
3739+ */
3740+struct iwl_scan_req_params_v12 {
3741+ struct iwl_scan_general_params_v10 general_params;
3742+ struct iwl_scan_channel_params_v4 channel_params;
3743+ struct iwl_scan_periodic_parms_v1 periodic_params;
3744+ struct iwl_scan_probe_params_v3 probe_params;
3745+} __packed; /* SCAN_REQUEST_PARAMS_API_S_VER_12 */
3746
3747 /**
3748- * struct iwl_scan_req_umac_v2
3749+ * struct iwl_scan_req_params_v14
3750+ * @general_params: &struct iwl_scan_general_params_v10
3751+ * @channel_params: &struct iwl_scan_channel_params_v6
3752+ * @periodic_params: &struct iwl_scan_periodic_parms_v1
3753+ * @probe_params: &struct iwl_scan_probe_params_v4
3754+ */
3755+struct iwl_scan_req_params_v14 {
3756+ struct iwl_scan_general_params_v10 general_params;
3757+ struct iwl_scan_channel_params_v6 channel_params;
3758+ struct iwl_scan_periodic_parms_v1 periodic_params;
3759+ struct iwl_scan_probe_params_v4 probe_params;
3760+} __packed; /* SCAN_REQUEST_PARAMS_API_S_VER_14 */
3761+
3762+/**
3763+ * struct iwl_scan_req_umac_v12
3764 * @uid: scan id, &enum iwl_umac_scan_uid_offsets
3765 * @ooc_priority: out of channel priority - &enum iwl_scan_priority
3766 * @scan_params: scan parameters
3767 */
3768-struct iwl_scan_umac_req_v2 {
3769+struct iwl_scan_req_umac_v12 {
3770 __le32 uid;
3771 __le32 ooc_priority;
3772- struct iwl_scan_req_params scan_params;
3773-} __packed;
3774+ struct iwl_scan_req_params_v12 scan_params;
3775+} __packed; /* SCAN_REQUEST_CMD_UMAC_API_S_VER_12 */
3776+
3777+/**
3778+ * struct iwl_scan_req_umac_v14
3779+ * @uid: scan id, &enum iwl_umac_scan_uid_offsets
3780+ * @ooc_priority: out of channel priority - &enum iwl_scan_priority
3781+ * @scan_params: scan parameters
3782+ */
3783+struct iwl_scan_req_umac_v14 {
3784+ __le32 uid;
3785+ __le32 ooc_priority;
3786+ struct iwl_scan_req_params_v14 scan_params;
3787+} __packed; /* SCAN_REQUEST_CMD_UMAC_API_S_VER_14 */
3788
3789 /**
3790 * struct iwl_umac_scan_abort
3791@@ -1062,7 +1163,7 @@ struct iwl_scan_offload_profiles_query_v1 {
3792 u8 resume_while_scanning;
3793 u8 self_recovery;
3794 __le16 reserved;
3795- struct iwl_scan_offload_profile_match_v1 matches[IWL_SCAN_MAX_PROFILES];
3796+ struct iwl_scan_offload_profile_match_v1 matches[0];
3797 } __packed; /* SCAN_OFFLOAD_PROFILES_QUERY_RSP_S_VER_2 */
3798
3799 /**
3800@@ -1106,7 +1207,7 @@ struct iwl_scan_offload_profiles_query {
3801 u8 resume_while_scanning;
3802 u8 self_recovery;
3803 __le16 reserved;
3804- struct iwl_scan_offload_profile_match matches[IWL_SCAN_MAX_PROFILES];
3805+ struct iwl_scan_offload_profile_match matches[0];
3806 } __packed; /* SCAN_OFFLOAD_PROFILES_QUERY_RSP_S_VER_3 */
3807
3808 /**
3809diff --git a/drivers/net/wireless/intel/iwlwifi/fw/api/soc.h b/drivers/net/wireless/intel/iwlwifi/fw/api/soc.h
3810index 5d1fb98..aadca78 100644
3811--- a/drivers/net/wireless/intel/iwlwifi/fw/api/soc.h
3812+++ b/drivers/net/wireless/intel/iwlwifi/fw/api/soc.h
3813@@ -8,6 +8,7 @@
3814 * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved.
3815 * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
3816 * Copyright(c) 2016 - 2017 Intel Deutschland GmbH
3817+ * Copyright(c) 2019 Intel Deutschland GmbH
3818 *
3819 * This program is free software; you can redistribute it and/or modify
3820 * it under the terms of version 2 of the GNU General Public License as
3821@@ -30,6 +31,7 @@
3822 * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved.
3823 * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
3824 * Copyright(c) 2016 - 2017 Intel Deutschland GmbH
3825+ * Copyright(c) 2019 Intel Deutschland GmbH
3826 * All rights reserved.
3827 *
3828 * Redistribution and use in source and binary forms, with or without
3829@@ -63,21 +65,23 @@
3830 #ifndef __iwl_fw_api_soc_h__
3831 #define __iwl_fw_api_soc_h__
3832
3833-/* type of devices for defining SOC latency */
3834-enum iwl_soc_device_types {
3835- SOC_CONFIG_CMD_INTEGRATED = 0x0,
3836- SOC_CONFIG_CMD_DISCRETE = 0x1,
3837-};
3838+#define SOC_CONFIG_CMD_FLAGS_DISCRETE BIT(0)
3839+#define SOC_CONFIG_CMD_FLAGS_LOW_LATENCY BIT(1)
3840
3841 /**
3842 * struct iwl_soc_configuration_cmd - Set device stabilization latency
3843 *
3844- * @device_type: the device type as defined in &enum iwl_soc_device_types
3845- * @soc_latency: time for SOC to ensure stable power & XTAL
3846+ * @flags: soc settings flags. In VER_1, we can only set the DISCRETE
3847+ * flag, because the FW treats the whole value as an integer. In
3848+ * VER_2, we can set the bits independently.
3849+ * @latency: time for SOC to ensure stable power & XTAL
3850 */
3851 struct iwl_soc_configuration_cmd {
3852- __le32 device_type;
3853- __le32 soc_latency;
3854-} __packed; /* SOC_CONFIGURATION_CMD_S_VER_1 */
3855+ __le32 flags;
3856+ __le32 latency;
3857+} __packed; /*
3858+ * SOC_CONFIGURATION_CMD_S_VER_1 (see description above)
3859+ * SOC_CONFIGURATION_CMD_S_VER_2
3860+ */
3861
3862 #endif /* __iwl_fw_api_soc_h__ */
3863diff --git a/drivers/net/wireless/intel/iwlwifi/fw/api/sta.h b/drivers/net/wireless/intel/iwlwifi/fw/api/sta.h
3864index 450227f..970e9e5 100644
3865--- a/drivers/net/wireless/intel/iwlwifi/fw/api/sta.h
3866+++ b/drivers/net/wireless/intel/iwlwifi/fw/api/sta.h
3867@@ -8,7 +8,7 @@
3868 * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved.
3869 * Copyright(c) 2013 - 2014 Intel Mobile Communications GmbH
3870 * Copyright(c) 2016 - 2017 Intel Deutschland GmbH
3871- * Copyright(c) 2018 Intel Corporation
3872+ * Copyright(c) 2018 - 2019 Intel Corporation
3873 *
3874 * This program is free software; you can redistribute it and/or modify
3875 * it under the terms of version 2 of the GNU General Public License as
3876@@ -31,7 +31,7 @@
3877 * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved.
3878 * Copyright(c) 2013 - 2014 Intel Mobile Communications GmbH
3879 * Copyright(c) 2016 - 2017 Intel Deutschland GmbH
3880- * Copyright(c) 2018 Intel Corporation
3881+ * Copyright(c) 2018 - 2019 Intel Corporation
3882 * All rights reserved.
3883 *
3884 * Redistribution and use in source and binary forms, with or without
3885@@ -288,8 +288,7 @@ struct iwl_mvm_keyinfo {
3886 * @addr: station's MAC address
3887 * @reserved2: reserved
3888 * @sta_id: index of station in uCode's station table
3889- * @modify_mask: STA_MODIFY_*, selects which parameters to modify vs. leave
3890- * alone. 1 - modify, 0 - don't change.
3891+ * @modify_mask: from &enum iwl_sta_modify_flag, selects what to change
3892 * @reserved3: reserved
3893 * @station_flags: look at &enum iwl_sta_flags
3894 * @station_flags_msk: what of %station_flags have changed,
3895@@ -369,8 +368,7 @@ enum iwl_sta_type {
3896 * @addr: station's MAC address
3897 * @reserved2: reserved
3898 * @sta_id: index of station in uCode's station table
3899- * @modify_mask: STA_MODIFY_*, selects which parameters to modify vs. leave
3900- * alone. 1 - modify, 0 - don't change.
3901+ * @modify_mask: from &enum iwl_sta_modify_flag, selects what to change
3902 * @reserved3: reserved
3903 * @station_flags: look at &enum iwl_sta_flags
3904 * @station_flags_msk: what of %station_flags have changed,
3905diff --git a/drivers/net/wireless/intel/iwlwifi/fw/api/time-event.h b/drivers/net/wireless/intel/iwlwifi/fw/api/time-event.h
3906index 416e817..a731f28 100644
3907--- a/drivers/net/wireless/intel/iwlwifi/fw/api/time-event.h
3908+++ b/drivers/net/wireless/intel/iwlwifi/fw/api/time-event.h
3909@@ -459,6 +459,7 @@ struct iwl_mvm_session_prot_cmd {
3910 * @mac_id: the mac id for which the session protection started / ended
3911 * @status: 1 means success, 0 means failure
3912 * @start: 1 means the session protection started, 0 means it ended
3913+ * @conf_id: the configuration id of the session that started / eneded
3914 *
3915 * Note that any session protection will always get two notifications: start
3916 * and end even the firmware could not schedule it.
3917@@ -467,6 +468,7 @@ struct iwl_mvm_session_prot_notif {
3918 __le32 mac_id;
3919 __le32 status;
3920 __le32 start;
3921-} __packed; /* SESSION_PROTECTION_NOTIFICATION_API_S_VER_1 */
3922+ __le32 conf_id;
3923+} __packed; /* SESSION_PROTECTION_NOTIFICATION_API_S_VER_2 */
3924
3925 #endif /* __iwl_fw_api_time_event_h__ */
3926diff --git a/drivers/net/wireless/intel/iwlwifi/fw/api/tx.h b/drivers/net/wireless/intel/iwlwifi/fw/api/tx.h
3927index 8511e73..f1d1fe9 100644
3928--- a/drivers/net/wireless/intel/iwlwifi/fw/api/tx.h
3929+++ b/drivers/net/wireless/intel/iwlwifi/fw/api/tx.h
3930@@ -7,7 +7,7 @@
3931 *
3932 * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved.
3933 * Copyright(c) 2016 - 2017 Intel Deutschland GmbH
3934- * Copyright(c) 2018 Intel Corporation
3935+ * Copyright(c) 2018 - 2019 Intel Corporation
3936 *
3937 * This program is free software; you can redistribute it and/or modify
3938 * it under the terms of version 2 of the GNU General Public License as
3939@@ -29,7 +29,7 @@
3940 *
3941 * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved.
3942 * Copyright(c) 2016 - 2017 Intel Deutschland GmbH
3943- * Copyright(c) 2018 Intel Corporation
3944+ * Copyright(c) 2018 - 2019 Intel Corporation
3945 * All rights reserved.
3946 *
3947 * Redistribution and use in source and binary forms, with or without
3948@@ -323,7 +323,7 @@ struct iwl_tx_cmd_gen2 {
3949 } __packed; /* TX_CMD_API_S_VER_7 */
3950
3951 /**
3952- * struct iwl_tx_cmd_gen3 - TX command struct to FW for 22560 devices
3953+ * struct iwl_tx_cmd_gen3 - TX command struct to FW for AX210+ devices
3954 * ( TX_CMD = 0x1c )
3955 * @len: in bytes of the payload, see below for details
3956 * @flags: combination of &enum iwl_tx_cmd_flags
3957@@ -813,6 +813,7 @@ enum iwl_mac_beacon_flags {
3958 IWL_MAC_BEACON_ANT_A = BIT(9),
3959 IWL_MAC_BEACON_ANT_B = BIT(10),
3960 IWL_MAC_BEACON_ANT_C = BIT(11),
3961+ IWL_MAC_BEACON_FILS = BIT(12),
3962 };
3963
3964 /**
3965@@ -820,6 +821,7 @@ enum iwl_mac_beacon_flags {
3966 * @byte_cnt: byte count of the beacon frame.
3967 * @flags: least significant byte for rate code. The most significant byte
3968 * is &enum iwl_mac_beacon_flags.
3969+ * @short_ssid: Short SSID
3970 * @reserved: reserved
3971 * @template_id: currently equal to the mac context id of the coresponding mac.
3972 * @tim_idx: the offset of the tim IE in the beacon
3973@@ -831,14 +833,15 @@ enum iwl_mac_beacon_flags {
3974 struct iwl_mac_beacon_cmd {
3975 __le16 byte_cnt;
3976 __le16 flags;
3977- __le64 reserved;
3978+ __le32 short_ssid;
3979+ __le32 reserved;
3980 __le32 template_id;
3981 __le32 tim_idx;
3982 __le32 tim_size;
3983 __le32 ecsa_offset;
3984 __le32 csa_offset;
3985 struct ieee80211_hdr frame[0];
3986-} __packed; /* BEACON_TEMPLATE_CMD_API_S_VER_9 */
3987+} __packed; /* BEACON_TEMPLATE_CMD_API_S_VER_10 */
3988
3989 struct iwl_beacon_notif {
3990 struct iwl_mvm_tx_resp beacon_notify_hdr;
3991diff --git a/drivers/net/wireless/intel/iwlwifi/fw/dbg.c b/drivers/net/wireless/intel/iwlwifi/fw/dbg.c
3992index 440fca2..2e5d9d8 100644
3993--- a/drivers/net/wireless/intel/iwlwifi/fw/dbg.c
3994+++ b/drivers/net/wireless/intel/iwlwifi/fw/dbg.c
3995@@ -646,6 +646,7 @@ static struct scatterlist *alloc_sgtable(int size)
3996 if (new_page)
3997 __free_page(new_page);
3998 }
3999+ kfree(table);
4000 return NULL;
4001 }
4002 alloc_size = min_t(int, size, PAGE_SIZE);
4003@@ -817,7 +818,8 @@ static void iwl_dump_paging(struct iwl_fw_runtime *fwrt,
4004
4005 static struct iwl_fw_error_dump_file *
4006 iwl_fw_error_dump_file(struct iwl_fw_runtime *fwrt,
4007- struct iwl_fw_dump_ptrs *fw_error_dump)
4008+ struct iwl_fw_dump_ptrs *fw_error_dump,
4009+ struct iwl_fwrt_dump_data *data)
4010 {
4011 struct iwl_fw_error_dump_file *dump_file;
4012 struct iwl_fw_error_dump_data *dump_data;
4013@@ -899,15 +901,15 @@ iwl_fw_error_dump_file(struct iwl_fw_runtime *fwrt,
4014 }
4015
4016 /* If we only want a monitor dump, reset the file length */
4017- if (fwrt->dump.monitor_only) {
4018+ if (data->monitor_only) {
4019 file_len = sizeof(*dump_file) + sizeof(*dump_data) * 2 +
4020 sizeof(*dump_info) + sizeof(*dump_smem_cfg);
4021 }
4022
4023 if (iwl_fw_dbg_type_on(fwrt, IWL_FW_ERROR_DUMP_ERROR_INFO) &&
4024- fwrt->dump.desc)
4025+ data->desc)
4026 file_len += sizeof(*dump_data) + sizeof(*dump_trig) +
4027- fwrt->dump.desc->len;
4028+ data->desc->len;
4029
4030 dump_file = vzalloc(file_len);
4031 if (!dump_file)
4032@@ -928,7 +930,7 @@ iwl_fw_error_dump_file(struct iwl_fw_runtime *fwrt,
4033 cpu_to_le32(CSR_HW_REV_STEP(fwrt->trans->hw_rev));
4034 memcpy(dump_info->fw_human_readable, fwrt->fw->human_readable,
4035 sizeof(dump_info->fw_human_readable));
4036- strncpy(dump_info->dev_human_readable, fwrt->trans->cfg->name,
4037+ strncpy(dump_info->dev_human_readable, fwrt->trans->name,
4038 sizeof(dump_info->dev_human_readable) - 1);
4039 strncpy(dump_info->bus_human_readable, fwrt->dev->bus->name,
4040 sizeof(dump_info->bus_human_readable) - 1);
4041@@ -983,19 +985,19 @@ iwl_fw_error_dump_file(struct iwl_fw_runtime *fwrt,
4042 iwl_read_radio_regs(fwrt, &dump_data);
4043
4044 if (iwl_fw_dbg_type_on(fwrt, IWL_FW_ERROR_DUMP_ERROR_INFO) &&
4045- fwrt->dump.desc) {
4046+ data->desc) {
4047 dump_data->type = cpu_to_le32(IWL_FW_ERROR_DUMP_ERROR_INFO);
4048 dump_data->len = cpu_to_le32(sizeof(*dump_trig) +
4049- fwrt->dump.desc->len);
4050+ data->desc->len);
4051 dump_trig = (void *)dump_data->data;
4052- memcpy(dump_trig, &fwrt->dump.desc->trig_desc,
4053- sizeof(*dump_trig) + fwrt->dump.desc->len);
4054+ memcpy(dump_trig, &data->desc->trig_desc,
4055+ sizeof(*dump_trig) + data->desc->len);
4056
4057 dump_data = iwl_fw_error_next_data(dump_data);
4058 }
4059
4060 /* In case we only want monitor dump, skip to dump trasport data */
4061- if (fwrt->dump.monitor_only)
4062+ if (data->monitor_only)
4063 goto out;
4064
4065 if (iwl_fw_dbg_type_on(fwrt, IWL_FW_ERROR_DUMP_MEM)) {
4066@@ -1107,6 +1109,38 @@ static int iwl_dump_ini_csr_iter(struct iwl_fw_runtime *fwrt,
4067 return sizeof(*range) + le32_to_cpu(range->range_data_size);
4068 }
4069
4070+static int iwl_dump_ini_config_iter(struct iwl_fw_runtime *fwrt,
4071+ struct iwl_dump_ini_region_data *reg_data,
4072+ void *range_ptr, int idx)
4073+{
4074+ struct iwl_trans *trans = fwrt->trans;
4075+ struct iwl_fw_ini_region_tlv *reg = (void *)reg_data->reg_tlv->data;
4076+ struct iwl_fw_ini_error_dump_range *range = range_ptr;
4077+ __le32 *val = range->data;
4078+ u32 addr = le32_to_cpu(reg->addrs[idx]) +
4079+ le32_to_cpu(reg->dev_addr.offset);
4080+ int i;
4081+
4082+ /* we shouldn't get here if the trans doesn't have read_config32 */
4083+ if (WARN_ON_ONCE(!trans->ops->read_config32))
4084+ return -EOPNOTSUPP;
4085+
4086+ range->internal_base_addr = cpu_to_le32(addr);
4087+ range->range_data_size = reg->dev_addr.size;
4088+ for (i = 0; i < le32_to_cpu(reg->dev_addr.size); i += 4) {
4089+ int ret;
4090+ u32 tmp;
4091+
4092+ ret = trans->ops->read_config32(trans, addr + i, &tmp);
4093+ if (ret < 0)
4094+ return ret;
4095+
4096+ *val++ = cpu_to_le32(tmp);
4097+ }
4098+
4099+ return sizeof(*range) + le32_to_cpu(range->range_data_size);
4100+}
4101+
4102 static int iwl_dump_ini_dev_mem_iter(struct iwl_fw_runtime *fwrt,
4103 struct iwl_dump_ini_region_data *reg_data,
4104 void *range_ptr, int idx)
4105@@ -1229,13 +1263,15 @@ static bool iwl_ini_txf_iter(struct iwl_fw_runtime *fwrt,
4106 iter->lmac = 0;
4107 }
4108
4109- if (!iter->internal_txf)
4110+ if (!iter->internal_txf) {
4111 for (iter->fifo++; iter->fifo < txf_num; iter->fifo++) {
4112 iter->fifo_size =
4113 cfg->lmac[iter->lmac].txfifo_size[iter->fifo];
4114 if (iter->fifo_size && (lmac_bitmap & BIT(iter->fifo)))
4115 return true;
4116 }
4117+ iter->fifo--;
4118+ }
4119
4120 iter->internal_txf = 1;
4121
4122@@ -1702,13 +1738,7 @@ iwl_dump_ini_mon_smem_get_size(struct iwl_fw_runtime *fwrt,
4123 struct iwl_dump_ini_region_data *reg_data)
4124 {
4125 struct iwl_fw_ini_region_tlv *reg = (void *)reg_data->reg_tlv->data;
4126- struct iwl_fw_ini_allocation_tlv *fw_mon_cfg;
4127- u32 alloc_id = le32_to_cpu(reg->internal_buffer.alloc_id), size;
4128-
4129- fw_mon_cfg = &fwrt->trans->dbg.fw_mon_cfg[alloc_id];
4130- if (le32_to_cpu(fw_mon_cfg->buf_location) !=
4131- IWL_FW_INI_LOCATION_SRAM_PATH)
4132- return 0;
4133+ u32 size;
4134
4135 size = le32_to_cpu(reg->internal_buffer.size);
4136 if (!size)
4137@@ -2049,7 +2079,12 @@ static const struct iwl_dump_ini_mem_ops iwl_dump_ini_region_ops[] = {
4138 .fill_range = iwl_dump_ini_csr_iter,
4139 },
4140 [IWL_FW_INI_REGION_DRAM_IMR] = {},
4141- [IWL_FW_INI_REGION_PCI_IOSF_CONFIG] = {},
4142+ [IWL_FW_INI_REGION_PCI_IOSF_CONFIG] = {
4143+ .get_num_of_ranges = iwl_dump_ini_mem_ranges,
4144+ .get_size = iwl_dump_ini_mem_get_size,
4145+ .fill_mem_hdr = iwl_dump_ini_mem_fill_header,
4146+ .fill_range = iwl_dump_ini_config_iter,
4147+ },
4148 };
4149
4150 static u32 iwl_dump_ini_trigger(struct iwl_fw_runtime *fwrt,
4151@@ -2142,7 +2177,21 @@ static u32 iwl_dump_ini_file_gen(struct iwl_fw_runtime *fwrt,
4152 return le32_to_cpu(hdr->file_len);
4153 }
4154
4155-static void iwl_fw_error_dump(struct iwl_fw_runtime *fwrt)
4156+static inline void iwl_fw_free_dump_desc(struct iwl_fw_runtime *fwrt,
4157+ const struct iwl_fw_dump_desc **desc)
4158+{
4159+ if (desc && *desc != &iwl_dump_desc_assert)
4160+ kfree(*desc);
4161+
4162+ *desc = NULL;
4163+ fwrt->dump.lmac_err_id[0] = 0;
4164+ if (fwrt->smem_cfg.num_lmacs > 1)
4165+ fwrt->dump.lmac_err_id[1] = 0;
4166+ fwrt->dump.umac_err_id = 0;
4167+}
4168+
4169+static void iwl_fw_error_dump(struct iwl_fw_runtime *fwrt,
4170+ struct iwl_fwrt_dump_data *dump_data)
4171 {
4172 struct iwl_fw_dump_ptrs fw_error_dump = {};
4173 struct iwl_fw_error_dump_file *dump_file;
4174@@ -2150,11 +2199,11 @@ static void iwl_fw_error_dump(struct iwl_fw_runtime *fwrt)
4175 u32 file_len;
4176 u32 dump_mask = fwrt->fw->dbg.dump_mask;
4177
4178- dump_file = iwl_fw_error_dump_file(fwrt, &fw_error_dump);
4179+ dump_file = iwl_fw_error_dump_file(fwrt, &fw_error_dump, dump_data);
4180 if (!dump_file)
4181- goto out;
4182+ return;
4183
4184- if (fwrt->dump.monitor_only)
4185+ if (dump_data->monitor_only)
4186 dump_mask &= IWL_FW_ERROR_DUMP_FW_MONITOR;
4187
4188 fw_error_dump.trans_ptr = iwl_trans_dump_data(fwrt->trans, dump_mask);
4189@@ -2183,9 +2232,6 @@ static void iwl_fw_error_dump(struct iwl_fw_runtime *fwrt)
4190 }
4191 vfree(fw_error_dump.fwrt_ptr);
4192 vfree(fw_error_dump.trans_ptr);
4193-
4194-out:
4195- iwl_fw_free_dump_desc(fwrt);
4196 }
4197
4198 static void iwl_dump_ini_list_free(struct list_head *list)
4199@@ -2214,7 +2260,7 @@ static void iwl_fw_error_ini_dump(struct iwl_fw_runtime *fwrt,
4200 u32 file_len = iwl_dump_ini_file_gen(fwrt, dump_data, &dump_list);
4201
4202 if (!file_len)
4203- goto out;
4204+ return;
4205
4206 sg_dump_data = alloc_sgtable(file_len);
4207 if (sg_dump_data) {
4208@@ -2231,9 +2277,6 @@ static void iwl_fw_error_ini_dump(struct iwl_fw_runtime *fwrt,
4209 GFP_KERNEL);
4210 }
4211 iwl_dump_ini_list_free(&dump_list);
4212-
4213-out:
4214- iwl_fw_error_dump_data_free(dump_data);
4215 }
4216
4217 const struct iwl_fw_dump_desc iwl_dump_desc_assert = {
4218@@ -2248,27 +2291,40 @@ int iwl_fw_dbg_collect_desc(struct iwl_fw_runtime *fwrt,
4219 bool monitor_only,
4220 unsigned int delay)
4221 {
4222+ struct iwl_fwrt_wk_data *wk_data;
4223+ unsigned long idx;
4224+
4225 if (iwl_trans_dbg_ini_valid(fwrt->trans)) {
4226- iwl_fw_free_dump_desc(fwrt);
4227+ iwl_fw_free_dump_desc(fwrt, &desc);
4228 return 0;
4229 }
4230
4231- /* use wks[0] since dump flow prior to ini does not need to support
4232- * consecutive triggers collection
4233+ /*
4234+ * Check there is an available worker.
4235+ * ffz return value is undefined if no zero exists,
4236+ * so check against ~0UL first.
4237 */
4238- if (test_and_set_bit(fwrt->dump.wks[0].idx, &fwrt->dump.active_wks))
4239+ if (fwrt->dump.active_wks == ~0UL)
4240+ return -EBUSY;
4241+
4242+ idx = ffz(fwrt->dump.active_wks);
4243+
4244+ if (idx >= IWL_FW_RUNTIME_DUMP_WK_NUM ||
4245+ test_and_set_bit(fwrt->dump.wks[idx].idx, &fwrt->dump.active_wks))
4246 return -EBUSY;
4247
4248- if (WARN_ON(fwrt->dump.desc))
4249- iwl_fw_free_dump_desc(fwrt);
4250+ wk_data = &fwrt->dump.wks[idx];
4251+
4252+ if (WARN_ON(wk_data->dump_data.desc))
4253+ iwl_fw_free_dump_desc(fwrt, &wk_data->dump_data.desc);
4254+
4255+ wk_data->dump_data.desc = desc;
4256+ wk_data->dump_data.monitor_only = monitor_only;
4257
4258 IWL_WARN(fwrt, "Collecting data: trigger %d fired.\n",
4259 le32_to_cpu(desc->trig_desc.type));
4260
4261- fwrt->dump.desc = desc;
4262- fwrt->dump.monitor_only = monitor_only;
4263-
4264- schedule_delayed_work(&fwrt->dump.wks[0].wk, usecs_to_jiffies(delay));
4265+ schedule_delayed_work(&wk_data->wk, usecs_to_jiffies(delay));
4266
4267 return 0;
4268 }
4269@@ -2350,9 +2406,6 @@ int iwl_fw_dbg_ini_collect(struct iwl_fw_runtime *fwrt,
4270 u32 occur, delay;
4271 unsigned long idx;
4272
4273- if (test_bit(STATUS_GEN_ACTIVE_TRIGS, &fwrt->status))
4274- return -EBUSY;
4275-
4276 if (!iwl_fw_ini_trigger_on(fwrt, trig)) {
4277 IWL_WARN(fwrt, "WRT: Trigger %d is not active, aborting dump\n",
4278 tp_id);
4279@@ -2447,7 +2500,8 @@ int iwl_fw_start_dbg_conf(struct iwl_fw_runtime *fwrt, u8 conf_id)
4280 IWL_WARN(fwrt, "FW already configured (%d) - re-configuring\n",
4281 fwrt->dump.conf);
4282
4283-#ifdef CPTCFG_IWLWIFI_SUPPORT_DEBUG_OVERRIDES
4284+#if IS_ENABLED(CPTCFG_IWLWIFI_SUPPORT_DEBUG_OVERRIDES) && \
4285+ (IS_ENABLED(CPTCFG_IWLMVM) || IS_ENABLED(CPTCFG_IWLFMAC))
4286 /* start default config marker cmd for syncing logs */
4287 if (fwrt->trans->dbg_cfg.enable_timestamp_marker_cmd)
4288 iwl_fw_trigger_timestamp(fwrt, 1);
4289@@ -2482,13 +2536,14 @@ IWL_EXPORT_SYMBOL(iwl_fw_start_dbg_conf);
4290 static void iwl_fw_dbg_collect_sync(struct iwl_fw_runtime *fwrt, u8 wk_idx)
4291 {
4292 struct iwl_fw_dbg_params params = {0};
4293+ struct iwl_fwrt_dump_data *dump_data =
4294+ &fwrt->dump.wks[wk_idx].dump_data;
4295
4296 if (!test_bit(wk_idx, &fwrt->dump.active_wks))
4297 return;
4298
4299 if (!test_bit(STATUS_DEVICE_ENABLED, &fwrt->trans->status)) {
4300 IWL_ERR(fwrt, "Device is not enabled - cannot dump error\n");
4301- iwl_fw_free_dump_desc(fwrt);
4302 goto out;
4303 }
4304
4305@@ -2497,6 +2552,12 @@ static void iwl_fw_dbg_collect_sync(struct iwl_fw_runtime *fwrt, u8 wk_idx)
4306 IWL_ERR(fwrt, "Skip fw error dump since bus is dead\n");
4307 goto out;
4308 }
4309+#ifdef CPTCFG_IWLWIFI_SUPPORT_DEBUG_OVERRIDES
4310+ if (fwrt->trans->dbg_cfg.disable_wrt_dump) {
4311+ IWL_DEBUG_FW_INFO(fwrt, "WRT: Data collection disabled\n");
4312+ goto out;
4313+ }
4314+#endif
4315
4316 if (iwl_fw_dbg_stop_restart_recording(fwrt, &params, true)) {
4317 IWL_ERR(fwrt, "Failed to stop DBGC recording, aborting dump\n");
4318@@ -2507,12 +2568,17 @@ static void iwl_fw_dbg_collect_sync(struct iwl_fw_runtime *fwrt, u8 wk_idx)
4319 if (iwl_trans_dbg_ini_valid(fwrt->trans))
4320 iwl_fw_error_ini_dump(fwrt, &fwrt->dump.wks[wk_idx].dump_data);
4321 else
4322- iwl_fw_error_dump(fwrt);
4323+ iwl_fw_error_dump(fwrt, &fwrt->dump.wks[wk_idx].dump_data);
4324 IWL_DEBUG_FW_INFO(fwrt, "WRT: Data collection done\n");
4325
4326 iwl_fw_dbg_stop_restart_recording(fwrt, &params, false);
4327
4328 out:
4329+ if (iwl_trans_dbg_ini_valid(fwrt->trans))
4330+ iwl_fw_error_dump_data_free(dump_data);
4331+ else
4332+ iwl_fw_free_dump_desc(fwrt, &dump_data->desc);
4333+
4334 clear_bit(wk_idx, &fwrt->dump.active_wks);
4335 }
4336
4337@@ -2672,12 +2738,7 @@ int iwl_fw_dbg_stop_restart_recording(struct iwl_fw_runtime *fwrt,
4338 {
4339 int ret = 0;
4340
4341- /* if the FW crashed or not debug monitor cfg was given, there is
4342- * no point in changing the recording state
4343- */
4344- if (test_bit(STATUS_FW_ERROR, &fwrt->trans->status) ||
4345- (!fwrt->trans->dbg.dest_tlv &&
4346- fwrt->trans->dbg.ini_dest == IWL_FW_INI_LOCATION_INVALID))
4347+ if (test_bit(STATUS_FW_ERROR, &fwrt->trans->status))
4348 return 0;
4349
4350 if (fw_has_capa(&fwrt->fw->ucode_capa,
4351diff --git a/drivers/net/wireless/intel/iwlwifi/fw/dbg.h b/drivers/net/wireless/intel/iwlwifi/fw/dbg.h
4352index 27bf376..ac2bd4f 100644
4353--- a/drivers/net/wireless/intel/iwlwifi/fw/dbg.h
4354+++ b/drivers/net/wireless/intel/iwlwifi/fw/dbg.h
4355@@ -98,17 +98,6 @@ struct iwl_fw_dbg_params {
4356
4357 extern const struct iwl_fw_dump_desc iwl_dump_desc_assert;
4358
4359-static inline void iwl_fw_free_dump_desc(struct iwl_fw_runtime *fwrt)
4360-{
4361- if (fwrt->dump.desc != &iwl_dump_desc_assert)
4362- kfree(fwrt->dump.desc);
4363- fwrt->dump.desc = NULL;
4364- fwrt->dump.lmac_err_id[0] = 0;
4365- if (fwrt->smem_cfg.num_lmacs > 1)
4366- fwrt->dump.lmac_err_id[1] = 0;
4367- fwrt->dump.umac_err_id = 0;
4368-}
4369-
4370 int iwl_fw_dbg_collect_desc(struct iwl_fw_runtime *fwrt,
4371 const struct iwl_fw_dump_desc *desc,
4372 bool monitor_only, unsigned int delay);
4373diff --git a/drivers/net/wireless/intel/iwlwifi/fw/debugfs.c b/drivers/net/wireless/intel/iwlwifi/fw/debugfs.c
4374index 5fe9820..fb28d5e 100644
4375--- a/drivers/net/wireless/intel/iwlwifi/fw/debugfs.c
4376+++ b/drivers/net/wireless/intel/iwlwifi/fw/debugfs.c
4377@@ -320,33 +320,6 @@ out:
4378
4379 FWRT_DEBUGFS_WRITE_FILE_OPS(send_hcmd, 512);
4380
4381-static ssize_t iwl_dbgfs_fw_dbg_domain_write(struct iwl_fw_runtime *fwrt,
4382- char *buf, size_t count)
4383-{
4384- u32 new_domain;
4385- long val;
4386- int ret;
4387-
4388- if (!iwl_trans_fw_running(fwrt->trans))
4389- return -EIO;
4390-
4391- ret = kstrtol(buf, 0, &val);
4392- if (ret)
4393- return ret;
4394-
4395- new_domain = (u32)val;
4396- if (new_domain != fwrt->trans->dbg.domains_bitmap) {
4397- ret = iwl_dbg_tlv_gen_active_trigs(fwrt, new_domain);
4398- if (ret)
4399- return ret;
4400-
4401- iwl_dbg_tlv_time_point(fwrt, IWL_FW_INI_TIME_POINT_PERIODIC,
4402- NULL);
4403- }
4404-
4405- return count;
4406-}
4407-
4408 static ssize_t iwl_dbgfs_fw_dbg_domain_read(struct iwl_fw_runtime *fwrt,
4409 size_t size, char *buf)
4410 {
4411@@ -354,7 +327,7 @@ static ssize_t iwl_dbgfs_fw_dbg_domain_read(struct iwl_fw_runtime *fwrt,
4412 fwrt->trans->dbg.domains_bitmap);
4413 }
4414
4415-FWRT_DEBUGFS_READ_WRITE_FILE_OPS(fw_dbg_domain, 20);
4416+FWRT_DEBUGFS_READ_FILE_OPS(fw_dbg_domain, 20);
4417
4418 void iwl_fwrt_dbgfs_register(struct iwl_fw_runtime *fwrt,
4419 struct dentry *dbgfs_dir)
4420@@ -362,5 +335,5 @@ void iwl_fwrt_dbgfs_register(struct iwl_fw_runtime *fwrt,
4421 INIT_DELAYED_WORK(&fwrt->timestamp.wk, iwl_fw_timestamp_marker_wk);
4422 FWRT_DEBUGFS_ADD_FILE(timestamp_marker, dbgfs_dir, 0200);
4423 FWRT_DEBUGFS_ADD_FILE(send_hcmd, dbgfs_dir, 0200);
4424- FWRT_DEBUGFS_ADD_FILE(fw_dbg_domain, dbgfs_dir, 0600);
4425+ FWRT_DEBUGFS_ADD_FILE(fw_dbg_domain, dbgfs_dir, 0400);
4426 }
4427diff --git a/drivers/net/wireless/intel/iwlwifi/fw/img.c b/drivers/net/wireless/intel/iwlwifi/fw/img.c
4428new file mode 100644
4429index 0000000..dec95d0
4430--- /dev/null
4431+++ b/drivers/net/wireless/intel/iwlwifi/fw/img.c
4432@@ -0,0 +1,100 @@
4433+// SPDX-License-Identifier: GPL-2.0
4434+/******************************************************************************
4435+ *
4436+ * This file is provided under a dual BSD/GPLv2 license. When using or
4437+ * redistributing this file, you may do so under either license.
4438+ *
4439+ * GPL LICENSE SUMMARY
4440+ *
4441+ * Copyright(c) 2019 Intel Corporation
4442+ *
4443+ * This program is free software; you can redistribute it and/or modify
4444+ * it under the terms of version 2 of the GNU General Public License as
4445+ * published by the Free Software Foundation.
4446+ *
4447+ * This program is distributed in the hope that it will be useful, but
4448+ * WITHOUT ANY WARRANTY; without even the implied warranty of
4449+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
4450+ * General Public License for more details.
4451+ *
4452+ * The full GNU General Public License is included in this distribution
4453+ * in the file called COPYING.
4454+ *
4455+ * Contact Information:
4456+ * Intel Linux Wireless <linuxwifi@intel.com>
4457+ * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
4458+ *
4459+ * BSD LICENSE
4460+ *
4461+ * Copyright(c) 2019 Intel Corporation
4462+ * All rights reserved.
4463+ *
4464+ * Redistribution and use in source and binary forms, with or without
4465+ * modification, are permitted provided that the following conditions
4466+ * are met:
4467+ *
4468+ * * Redistributions of source code must retain the above copyright
4469+ * notice, this list of conditions and the following disclaimer.
4470+ * * Redistributions in binary form must reproduce the above copyright
4471+ * notice, this list of conditions and the following disclaimer in
4472+ * the documentation and/or other materials provided with the
4473+ * distribution.
4474+ * * Neither the name Intel Corporation nor the names of its
4475+ * contributors may be used to endorse or promote products derived
4476+ * from this software without specific prior written permission.
4477+ *
4478+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
4479+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
4480+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
4481+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
4482+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
4483+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
4484+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
4485+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
4486+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
4487+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
4488+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
4489+ *****************************************************************************/
4490+
4491+#include "img.h"
4492+
4493+u8 iwl_fw_lookup_cmd_ver(const struct iwl_fw *fw, u8 grp, u8 cmd)
4494+{
4495+ const struct iwl_fw_cmd_version *entry;
4496+ unsigned int i;
4497+
4498+ if (!fw->ucode_capa.cmd_versions ||
4499+ !fw->ucode_capa.n_cmd_versions)
4500+ return IWL_FW_CMD_VER_UNKNOWN;
4501+
4502+ entry = fw->ucode_capa.cmd_versions;
4503+ for (i = 0; i < fw->ucode_capa.n_cmd_versions; i++, entry++) {
4504+ if (entry->group == grp && entry->cmd == cmd)
4505+ return entry->cmd_ver;
4506+ }
4507+
4508+ return IWL_FW_CMD_VER_UNKNOWN;
4509+}
4510+EXPORT_SYMBOL_GPL(iwl_fw_lookup_cmd_ver);
4511+
4512+u8 iwl_fw_lookup_notif_ver(const struct iwl_fw *fw, u8 grp, u8 cmd, u8 def)
4513+{
4514+ const struct iwl_fw_cmd_version *entry;
4515+ unsigned int i;
4516+
4517+ if (!fw->ucode_capa.cmd_versions ||
4518+ !fw->ucode_capa.n_cmd_versions)
4519+ return def;
4520+
4521+ entry = fw->ucode_capa.cmd_versions;
4522+ for (i = 0; i < fw->ucode_capa.n_cmd_versions; i++, entry++) {
4523+ if (entry->group == grp && entry->cmd == cmd) {
4524+ if (entry->notif_ver == IWL_FW_CMD_VER_UNKNOWN)
4525+ return def;
4526+ return entry->notif_ver;
4527+ }
4528+ }
4529+
4530+ return def;
4531+}
4532+EXPORT_SYMBOL_GPL(iwl_fw_lookup_notif_ver);
4533diff --git a/drivers/net/wireless/intel/iwlwifi/fw/img.h b/drivers/net/wireless/intel/iwlwifi/fw/img.h
4534index 994880a..a8630bf 100644
4535--- a/drivers/net/wireless/intel/iwlwifi/fw/img.h
4536+++ b/drivers/net/wireless/intel/iwlwifi/fw/img.h
4537@@ -251,7 +251,7 @@ struct iwl_fw_dbg {
4538 struct iwl_fw {
4539 u32 ucode_ver;
4540
4541- char fw_version[ETHTOOL_FWVERS_LEN];
4542+ char fw_version[64];
4543
4544 /* ucode images */
4545 struct fw_img img[IWL_UCODE_TYPE_MAX];
4546@@ -313,22 +313,7 @@ iwl_get_ucode_image(const struct iwl_fw *fw, enum iwl_ucode_type ucode_type)
4547 return &fw->img[ucode_type];
4548 }
4549
4550-static inline u8 iwl_mvm_lookup_cmd_ver(const struct iwl_fw *fw, u8 grp, u8 cmd)
4551-{
4552- const struct iwl_fw_cmd_version *entry;
4553- unsigned int i;
4554-
4555- if (!fw->ucode_capa.cmd_versions ||
4556- !fw->ucode_capa.n_cmd_versions)
4557- return IWL_FW_CMD_VER_UNKNOWN;
4558-
4559- entry = fw->ucode_capa.cmd_versions;
4560- for (i = 0; i < fw->ucode_capa.n_cmd_versions; i++, entry++) {
4561- if (entry->group == grp && entry->cmd == cmd)
4562- return entry->cmd_ver;
4563- }
4564-
4565- return IWL_FW_CMD_VER_UNKNOWN;
4566-}
4567+u8 iwl_fw_lookup_cmd_ver(const struct iwl_fw *fw, u8 grp, u8 cmd);
4568
4569+u8 iwl_fw_lookup_notif_ver(const struct iwl_fw *fw, u8 grp, u8 cmd, u8 def);
4570 #endif /* __iwl_fw_img_h__ */
4571diff --git a/drivers/net/wireless/intel/iwlwifi/fw/runtime.h b/drivers/net/wireless/intel/iwlwifi/fw/runtime.h
4572index 069c16e..20c6d86 100644
4573--- a/drivers/net/wireless/intel/iwlwifi/fw/runtime.h
4574+++ b/drivers/net/wireless/intel/iwlwifi/fw/runtime.h
4575@@ -65,13 +65,9 @@
4576 #include "img.h"
4577 #include "fw/api/debug.h"
4578 #include "fw/api/paging.h"
4579+#include "fw/api/power.h"
4580 #include "iwl-eeprom-parse.h"
4581-
4582-#ifndef CPTCFG_IWLWIFI_SUPPORT_DEBUG_OVERRIDES
4583-#define IWL_FW_DBG_DOMAIN IWL_FW_INI_DOMAIN_ALWAYS_ON
4584-#else
4585-#define IWL_FW_DBG_DOMAIN (fwrt->trans->dbg_cfg.FW_DBG_DOMAIN)
4586-#endif
4587+#include "fw/acpi.h"
4588
4589 struct iwl_fw_runtime_ops {
4590 int (*dump_start)(void *ctx);
4591@@ -101,8 +97,16 @@ struct iwl_fwrt_shared_mem_cfg {
4592 * @fw_pkt: packet received from FW
4593 */
4594 struct iwl_fwrt_dump_data {
4595- struct iwl_fw_ini_trigger_tlv *trig;
4596- struct iwl_rx_packet *fw_pkt;
4597+ union {
4598+ struct {
4599+ struct iwl_fw_ini_trigger_tlv *trig;
4600+ struct iwl_rx_packet *fw_pkt;
4601+ };
4602+ struct {
4603+ const struct iwl_fw_dump_desc *desc;
4604+ bool monitor_only;
4605+ };
4606+ };
4607 };
4608
4609 /**
4610@@ -131,14 +135,6 @@ struct iwl_txf_iter_data {
4611 };
4612
4613 /**
4614- * enum iwl_fw_runtime_status - fw runtime status flags
4615- * @STATUS_GEN_ACTIVE_TRIGS: generating active trigger list
4616- */
4617-enum iwl_fw_runtime_status {
4618- STATUS_GEN_ACTIVE_TRIGS,
4619-};
4620-
4621-/**
4622 * struct iwl_fw_runtime - runtime data for firmware
4623 * @fw: firmware image
4624 * @cfg: NIC configuration
4625@@ -151,7 +147,6 @@ enum iwl_fw_runtime_status {
4626 * @smem_cfg: saved firmware SMEM configuration
4627 * @cur_fw_img: current firmware image, must be maintained by
4628 * the driver by calling &iwl_fw_set_current_image()
4629- * @status: &enum iwl_fw_runtime_status
4630 * @dump: debug dump data
4631 */
4632 struct iwl_fw_runtime {
4633@@ -172,12 +167,8 @@ struct iwl_fw_runtime {
4634 /* memory configuration */
4635 struct iwl_fwrt_shared_mem_cfg smem_cfg;
4636
4637- unsigned long status;
4638-
4639 /* debug */
4640 struct {
4641- const struct iwl_fw_dump_desc *desc;
4642- bool monitor_only;
4643 struct iwl_fwrt_wk_data wks[IWL_FW_RUNTIME_DUMP_WK_NUM];
4644 unsigned long active_wks;
4645
4646@@ -208,6 +199,14 @@ struct iwl_fw_runtime {
4647 } timestamp;
4648 bool tpc_enabled;
4649 #endif /* CPTCFG_IWLWIFI_DEBUGFS */
4650+#ifdef CONFIG_ACPI
4651+ struct iwl_sar_profile sar_profiles[ACPI_SAR_PROFILE_NUM];
4652+ u8 sar_chain_a_profile;
4653+ u8 sar_chain_b_profile;
4654+ struct iwl_geo_profile geo_profiles[ACPI_NUM_GEO_PROFILES];
4655+ u32 geo_rev;
4656+ struct iwl_ppag_table_cmd ppag_table;
4657+#endif
4658 };
4659
4660 void iwl_fw_runtime_init(struct iwl_fw_runtime *fwrt, struct iwl_trans *trans,
4661diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-config.h b/drivers/net/wireless/intel/iwlwifi/iwl-config.h
4662index 2afe682..e3d6277 100644
4663--- a/drivers/net/wireless/intel/iwlwifi/iwl-config.h
4664+++ b/drivers/net/wireless/intel/iwlwifi/iwl-config.h
4665@@ -88,7 +88,6 @@ enum iwl_device_family {
4666 IWL_DEVICE_FAMILY_8000,
4667 IWL_DEVICE_FAMILY_9000,
4668 IWL_DEVICE_FAMILY_22000,
4669- IWL_DEVICE_FAMILY_22560,
4670 IWL_DEVICE_FAMILY_AX210,
4671 };
4672
4673@@ -286,76 +285,38 @@ struct iwl_pwr_tx_backoff {
4674 };
4675
4676 /**
4677- * struct iwl_csr_params
4678- *
4679- * @flag_sw_reset: reset the device
4680- * @flag_mac_clock_ready:
4681- * Indicates MAC (ucode processor, etc.) is powered up and can run.
4682- * Internal resources are accessible.
4683- * NOTE: This does not indicate that the processor is actually running.
4684- * NOTE: This does not indicate that device has completed
4685- * init or post-power-down restore of internal SRAM memory.
4686- * Use CSR_UCODE_DRV_GP1_BIT_MAC_SLEEP as indication that
4687- * SRAM is restored and uCode is in normal operation mode.
4688- * This note is relevant only for pre 5xxx devices.
4689- * NOTE: After device reset, this bit remains "0" until host sets
4690- * INIT_DONE
4691- * @flag_init_done: Host sets this to put device into fully operational
4692- * D0 power mode. Host resets this after SW_RESET to put device into
4693- * low power mode.
4694- * @flag_mac_access_req: Host sets this to request and maintain MAC wakeup,
4695- * to allow host access to device-internal resources. Host must wait for
4696- * mac_clock_ready (and !GOING_TO_SLEEP) before accessing non-CSR device
4697- * registers.
4698- * @flag_val_mac_access_en: mac access is enabled
4699- * @flag_master_dis: disable master
4700- * @flag_stop_master: stop master
4701- * @addr_sw_reset: address for resetting the device
4702- * @mac_addr0_otp: first part of MAC address from OTP
4703- * @mac_addr1_otp: second part of MAC address from OTP
4704- * @mac_addr0_strap: first part of MAC address from strap
4705- * @mac_addr1_strap: second part of MAC address from strap
4706- */
4707-struct iwl_csr_params {
4708- u8 flag_sw_reset;
4709- u8 flag_mac_clock_ready;
4710- u8 flag_init_done;
4711- u8 flag_mac_access_req;
4712- u8 flag_val_mac_access_en;
4713- u8 flag_master_dis;
4714- u8 flag_stop_master;
4715- u8 addr_sw_reset;
4716- u32 mac_addr0_otp;
4717- u32 mac_addr1_otp;
4718- u32 mac_addr0_strap;
4719- u32 mac_addr1_strap;
4720-};
4721-
4722-/**
4723 * struct iwl_cfg_trans - information needed to start the trans
4724 *
4725- * These values cannot be changed when multiple configs are used for a
4726- * single PCI ID, because they are needed before the HW REV or RFID
4727- * can be read.
4728+ * These values are specific to the device ID and do not change when
4729+ * multiple configs are used for a single device ID. They values are
4730+ * used, among other things, to boot the NIC so that the HW REV or
4731+ * RFID can be read before deciding the remaining parameters to use.
4732 *
4733 * @base_params: pointer to basic parameters
4734 * @csr: csr flags and addresses that are different across devices
4735 * @device_family: the device family
4736 * @umac_prph_offset: offset to add to UMAC periphery address
4737+ * @xtal_latency: power up latency to get the xtal stabilized
4738+ * @extra_phy_cfg_flags: extra configuration flags to pass to the PHY
4739 * @rf_id: need to read rf_id to determine the firmware image
4740 * @use_tfh: use TFH
4741 * @gen2: 22000 and on transport operation
4742 * @mq_rx_supported: multi-queue rx support
4743+ * @integrated: discrete or integrated
4744+ * @low_latency_xtal: use the low latency xtal if supported
4745 */
4746 struct iwl_cfg_trans_params {
4747 const struct iwl_base_params *base_params;
4748- const struct iwl_csr_params *csr;
4749 enum iwl_device_family device_family;
4750 u32 umac_prph_offset;
4751+ u32 xtal_latency;
4752+ u32 extra_phy_cfg_flags;
4753 u32 rf_id:1,
4754 use_tfh:1,
4755 gen2:1,
4756 mq_rx_supported:1,
4757+ integrated:1,
4758+ low_latency_xtal:1,
4759 bisr_workaround:1;
4760 };
4761
4762@@ -410,7 +371,6 @@ struct iwl_fw_mon_regs {
4763 * @mac_addr_from_csr: read HW address from CSR registers
4764 * @features: hw features, any combination of feature_whitelist
4765 * @pwr_tx_backoffs: translation table between power limits and backoffs
4766- * @max_rx_agg_size: max RX aggregation size of the ADDBA request/response
4767 * @max_tx_agg_size: max TX aggregation size of the ADDBA request/response
4768 * @max_ht_ampdu_factor: the exponent of the max length of A-MPDU that the
4769 * station can receive in HT
4770@@ -423,7 +383,6 @@ struct iwl_fw_mon_regs {
4771 * @smem_offset: offset from which the SMEM begins
4772 * @smem_len: the length of SMEM
4773 * @vht_mu_mimo_supported: VHT MU-MIMO support
4774- * @integrated: discrete or integrated
4775 * @cdb: CDB support
4776 * @nvm_type: see &enum iwl_nvm_type
4777 * @d3_debug_data_base_addr: base address where D3 debug data is stored
4778@@ -433,6 +392,8 @@ struct iwl_fw_mon_regs {
4779 * @uhb_supported: ultra high band channels supported
4780 * @min_256_ba_txq_size: minimum number of slots required in a TX queue which
4781 * supports 256 BA aggregation
4782+ * @num_rbds: number of receive buffer descriptors to use
4783+ * (only used for multi-queue capable devices)
4784 *
4785 * We enable the driver to be backward compatible wrt. hardware features.
4786 * API differences in uCode shouldn't be handled here but through TLVs
4787@@ -460,7 +421,6 @@ struct iwl_cfg {
4788 u32 dccm2_len;
4789 u32 smem_offset;
4790 u32 smem_len;
4791- u32 soc_latency;
4792 u16 nvm_ver;
4793 u16 nvm_calib_ver;
4794 u32 rx_with_siso_diversity:1,
4795@@ -474,7 +434,6 @@ struct iwl_cfg {
4796 disable_dummy_notification:1,
4797 apmg_not_supported:1,
4798 vht_mu_mimo_supported:1,
4799- integrated:1,
4800 cdb:1,
4801 dbgc_supported:1,
4802 uhb_supported:1;
4803@@ -482,14 +441,13 @@ struct iwl_cfg {
4804 u8 valid_rx_ant;
4805 u8 non_shared_ant;
4806 u8 nvm_hw_section_num;
4807- u8 max_rx_agg_size;
4808 u8 max_tx_agg_size;
4809 u8 max_ht_ampdu_exponent;
4810 u8 max_vht_ampdu_exponent;
4811 u8 ucode_api_max;
4812 u8 ucode_api_min;
4813+ u16 num_rbds;
4814 u32 min_umac_error_event_table;
4815- u32 extra_phy_cfg_flags;
4816 u32 d3_debug_data_base_addr;
4817 u32 d3_debug_data_length;
4818 u32 min_txq_size;
4819@@ -499,12 +457,79 @@ struct iwl_cfg {
4820 const struct iwl_fw_mon_regs mon_smem_regs;
4821 };
4822
4823-extern const struct iwl_csr_params iwl_csr_v1;
4824-extern const struct iwl_csr_params iwl_csr_v2;
4825+#define IWL_CFG_ANY (~0)
4826+
4827+#define IWL_CFG_MAC_TYPE_PU 0x31
4828+#define IWL_CFG_MAC_TYPE_PNJ 0x32
4829+#define IWL_CFG_MAC_TYPE_TH 0x32
4830+#define IWL_CFG_MAC_TYPE_QU 0x33
4831+#define IWL_CFG_MAC_TYPE_QUZ 0x35
4832+#define IWL_CFG_MAC_TYPE_QNJ 0x36
4833+
4834+#define IWL_CFG_RF_TYPE_TH 0x105
4835+#define IWL_CFG_RF_TYPE_TH1 0x108
4836+#define IWL_CFG_RF_TYPE_JF2 0x105
4837+#define IWL_CFG_RF_TYPE_JF1 0x108
4838+
4839+#define IWL_CFG_RF_ID_TH 0x1
4840+#define IWL_CFG_RF_ID_TH1 0x1
4841+#define IWL_CFG_RF_ID_JF 0x3
4842+#define IWL_CFG_RF_ID_JF1 0x6
4843+#define IWL_CFG_RF_ID_JF1_DIV 0xA
4844+
4845+#define IWL_CFG_NO_160 0x0
4846+#define IWL_CFG_160 0x1
4847+
4848+#define IWL_CFG_CORES_BT 0x0
4849+#define IWL_CFG_CORES_BT_GNSS 0x5
4850+
4851+#define IWL_SUBDEVICE_RF_ID(subdevice) ((u16)((subdevice) & 0x00F0) >> 4)
4852+#define IWL_SUBDEVICE_NO_160(subdevice) ((u16)((subdevice) & 0x0100) >> 9)
4853+#define IWL_SUBDEVICE_CORES(subdevice) ((u16)((subdevice) & 0x1C00) >> 10)
4854+
4855+struct iwl_dev_info {
4856+ u16 device;
4857+ u16 subdevice;
4858+ u16 mac_type;
4859+ u16 rf_type;
4860+ u8 mac_step;
4861+ u8 rf_id;
4862+ u8 no_160;
4863+ u8 cores;
4864+ const struct iwl_cfg *cfg;
4865+ const char *name;
4866+};
4867
4868 /*
4869 * This list declares the config structures for all devices.
4870 */
4871+extern const struct iwl_cfg_trans_params iwl9000_trans_cfg;
4872+extern const struct iwl_cfg_trans_params iwl9560_trans_cfg;
4873+extern const struct iwl_cfg_trans_params iwl9560_shared_clk_trans_cfg;
4874+extern const struct iwl_cfg_trans_params iwl_qu_trans_cfg;
4875+extern const struct iwl_cfg_trans_params iwl_qnj_trans_cfg;
4876+extern const struct iwl_cfg_trans_params iwl_qu_long_latency_trans_cfg;
4877+extern const struct iwl_cfg_trans_params iwl_ax200_trans_cfg;
4878+extern const char iwl9162_name[];
4879+extern const char iwl9260_name[];
4880+extern const char iwl9260_1_name[];
4881+extern const char iwl9270_name[];
4882+extern const char iwl9461_name[];
4883+extern const char iwl9462_name[];
4884+extern const char iwl9560_name[];
4885+extern const char iwl9162_160_name[];
4886+extern const char iwl9260_160_name[];
4887+extern const char iwl9270_160_name[];
4888+extern const char iwl9461_160_name[];
4889+extern const char iwl9462_160_name[];
4890+extern const char iwl9560_160_name[];
4891+extern const char iwl9260_killer_1550_name[];
4892+extern const char iwl9560_killer_1550i_name[];
4893+extern const char iwl9560_killer_1550s_name[];
4894+extern const char iwl_ax200_name[];
4895+extern const char iwl_ax200_killer_1650w_name[];
4896+extern const char iwl_ax200_killer_1650x_name[];
4897+
4898 #if IS_ENABLED(CPTCFG_IWLMVM)
4899 extern const struct iwl_cfg iwl7260_2ac_cfg;
4900 extern const struct iwl_cfg iwl7260_2ac_cfg_high_temp;
4901@@ -528,41 +553,15 @@ extern const struct iwl_cfg iwl8275_2ac_cfg;
4902 extern const struct iwl_cfg iwl4165_2ac_cfg;
4903 #endif /* IS_ENABLED(CPTCFG_IWLMVM) */
4904 #if IS_ENABLED(CPTCFG_IWLMVM) || IS_ENABLED(CPTCFG_IWLFMAC)
4905-extern const struct iwl_cfg iwl9160_2ac_cfg;
4906 extern const struct iwl_cfg iwl9260_2ac_cfg;
4907-extern const struct iwl_cfg iwl9260_2ac_160_cfg;
4908-extern const struct iwl_cfg iwl9260_killer_2ac_cfg;
4909-extern const struct iwl_cfg iwl9270_2ac_cfg;
4910-extern const struct iwl_cfg iwl9460_2ac_cfg;
4911-extern const struct iwl_cfg iwl9560_2ac_cfg;
4912-extern const struct iwl_cfg iwl9560_2ac_cfg_quz_a0_jf_b0_soc;
4913-extern const struct iwl_cfg iwl9560_2ac_160_cfg;
4914-extern const struct iwl_cfg iwl9560_2ac_160_cfg_quz_a0_jf_b0_soc;
4915-extern const struct iwl_cfg iwl9460_2ac_cfg_soc;
4916-extern const struct iwl_cfg iwl9461_2ac_cfg_soc;
4917-extern const struct iwl_cfg iwl9461_2ac_cfg_quz_a0_jf_b0_soc;
4918-extern const struct iwl_cfg iwl9462_2ac_cfg_soc;
4919-extern const struct iwl_cfg iwl9462_2ac_cfg_quz_a0_jf_b0_soc;
4920+extern const struct iwl_cfg iwl9560_qu_b0_jf_b0_cfg;
4921+extern const struct iwl_cfg iwl9560_qu_c0_jf_b0_cfg;
4922+extern const struct iwl_cfg iwl9560_quz_a0_jf_b0_cfg;
4923+extern const struct iwl_cfg iwl9560_qnj_b0_jf_b0_cfg;
4924 extern const struct iwl_cfg iwl9560_2ac_cfg_soc;
4925-extern const struct iwl_cfg iwl9560_2ac_160_cfg_soc;
4926-extern const struct iwl_cfg iwl9560_killer_2ac_cfg_soc;
4927-extern const struct iwl_cfg iwl9560_killer_s_2ac_cfg_soc;
4928-extern const struct iwl_cfg iwl9560_killer_i_2ac_cfg_quz_a0_jf_b0_soc;
4929-extern const struct iwl_cfg iwl9560_killer_s_2ac_cfg_quz_a0_jf_b0_soc;
4930-extern const struct iwl_cfg iwl9460_2ac_cfg_shared_clk;
4931-extern const struct iwl_cfg iwl9461_2ac_cfg_shared_clk;
4932-extern const struct iwl_cfg iwl9462_2ac_cfg_shared_clk;
4933-extern const struct iwl_cfg iwl9560_2ac_cfg_shared_clk;
4934-extern const struct iwl_cfg iwl9560_2ac_160_cfg_shared_clk;
4935-extern const struct iwl_cfg iwl9560_killer_2ac_cfg_shared_clk;
4936-extern const struct iwl_cfg iwl9560_killer_s_2ac_cfg_shared_clk;
4937-extern const struct iwl_cfg iwl22000_2ac_cfg_hr;
4938-extern const struct iwl_cfg iwl22000_2ac_cfg_hr_cdb;
4939-extern const struct iwl_cfg iwl22000_2ac_cfg_jf;
4940 extern const struct iwl_cfg iwl_ax101_cfg_qu_hr;
4941 extern const struct iwl_cfg iwl_ax101_cfg_qu_c0_hr_b0;
4942 extern const struct iwl_cfg iwl_ax101_cfg_quz_hr;
4943-extern const struct iwl_cfg iwl22000_2ax_cfg_hr;
4944 extern const struct iwl_cfg iwl_ax200_cfg_cc;
4945 extern const struct iwl_cfg iwl_ax201_cfg_qu_hr;
4946 extern const struct iwl_cfg iwl_ax201_cfg_qu_hr;
4947@@ -576,28 +575,14 @@ extern const struct iwl_cfg killer1650s_2ax_cfg_qu_c0_hr_b0;
4948 extern const struct iwl_cfg killer1650i_2ax_cfg_qu_c0_hr_b0;
4949 extern const struct iwl_cfg killer1650x_2ax_cfg;
4950 extern const struct iwl_cfg killer1650w_2ax_cfg;
4951-extern const struct iwl_cfg iwl9461_2ac_cfg_qu_b0_jf_b0;
4952-extern const struct iwl_cfg iwl9462_2ac_cfg_qu_b0_jf_b0;
4953-extern const struct iwl_cfg iwl9560_2ac_cfg_qu_b0_jf_b0;
4954-extern const struct iwl_cfg iwl9560_2ac_160_cfg_qu_b0_jf_b0;
4955-extern const struct iwl_cfg iwl9461_2ac_cfg_qu_c0_jf_b0;
4956-extern const struct iwl_cfg iwl9462_2ac_cfg_qu_c0_jf_b0;
4957-extern const struct iwl_cfg iwl9560_2ac_cfg_qu_c0_jf_b0;
4958-extern const struct iwl_cfg iwl9560_2ac_160_cfg_qu_c0_jf_b0;
4959-extern const struct iwl_cfg killer1550i_2ac_cfg_qu_b0_jf_b0;
4960-extern const struct iwl_cfg killer1550s_2ac_cfg_qu_b0_jf_b0;
4961-extern const struct iwl_cfg iwl22000_2ax_cfg_jf;
4962-extern const struct iwl_cfg iwl22000_2ax_cfg_qnj_hr_a0_f0;
4963 extern const struct iwl_cfg iwl22000_2ax_cfg_qnj_hr_b0_f0;
4964 extern const struct iwl_cfg iwl22000_2ax_cfg_qnj_hr_b0;
4965-extern const struct iwl_cfg iwl9560_2ac_cfg_qnj_jf_b0;
4966-extern const struct iwl_cfg iwl22000_2ax_cfg_qnj_hr_a0;
4967 extern const struct iwl_cfg iwlax210_2ax_cfg_so_jf_a0;
4968 extern const struct iwl_cfg iwlax210_2ax_cfg_so_hr_a0;
4969 extern const struct iwl_cfg iwlax211_2ax_cfg_so_gf_a0;
4970 extern const struct iwl_cfg iwlax210_2ax_cfg_ty_gf_a0;
4971 extern const struct iwl_cfg iwlax411_2ax_cfg_so_gf4_a0;
4972-extern const struct iwl_cfg iwl_ax201_cfg_qnj_b0_gftc_a0;
4973+extern const struct iwl_cfg iwlax411_2ax_cfg_sosnj_gf4_a0;
4974 #endif /* CPTCFG_IWLMVM || CPTCFG_IWLFMAC */
4975
4976 #endif /* __IWL_CONFIG_H__ */
4977diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-context-info.h b/drivers/net/wireless/intel/iwlwifi/iwl-context-info.h
4978index 5ed07e3..eeaa8cb 100644
4979--- a/drivers/net/wireless/intel/iwlwifi/iwl-context-info.h
4980+++ b/drivers/net/wireless/intel/iwlwifi/iwl-context-info.h
4981@@ -6,7 +6,7 @@
4982 * GPL LICENSE SUMMARY
4983 *
4984 * Copyright(c) 2017 Intel Deutschland GmbH
4985- * Copyright(c) 2018 Intel Corporation
4986+ * Copyright(c) 2018 - 2019 Intel Corporation
4987 *
4988 * This program is free software; you can redistribute it and/or modify
4989 * it under the terms of version 2 of the GNU General Public License as
4990@@ -20,7 +20,7 @@
4991 * BSD LICENSE
4992 *
4993 * Copyright(c) 2017 Intel Deutschland GmbH
4994- * Copyright(c) 2018 Intel Corporation
4995+ * Copyright(c) 2018 - 2019 Intel Corporation
4996 * All rights reserved.
4997 *
4998 * Redistribution and use in source and binary forms, with or without
4999@@ -64,12 +64,12 @@
5000 * the init done for driver command that configures several system modes
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches