aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2017-11-23 13:06:42 -0500
committerDavid S. Miller <davem@davemloft.net>2017-11-23 13:06:42 -0500
commitd6efab626c886acd070d9aabe39bc61e8c5a75f7 (patch)
treedf049e076c463aa23e6f0b548518b25620075713
parent003cd77027f13cdcd745e4429c7d1370eb57e09f (diff)
parented59b7d53c95548d83d4e7e1bc5edafcdcad09c9 (diff)
Merge tag 'wireless-drivers-for-davem-2017-11-22' of git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/wireless-drivers
Kalle Valo says: ==================== wireless-drivers fixes for 4.15 First set of fixes for 4.15. Most important here is the iwlwifi fix for scan command firmware interface change. ath10k * fix CCMP-256, GCMP and GCMP-256 in raw mode, it was never working wcn36xx * fix device tree node search iwlwifi * fix a regression with firmware API change of scan cmd (introduced in firmware version 34) * add a bunch of PCI IDs and fix configuration structs for A000 devices * fix the exported firmware name strings for 9000 and A000 devices ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/wireless/ath/ath10k/htt_rx.c51
-rw-r--r--drivers/net/wireless/ath/wcn36xx/main.c2
-rw-r--r--drivers/net/wireless/intel/iwlwifi/cfg/9000.c73
-rw-r--r--drivers/net/wireless/intel/iwlwifi/cfg/a000.c10
-rw-r--r--drivers/net/wireless/intel/iwlwifi/fw/api/scan.h59
-rw-r--r--drivers/net/wireless/intel/iwlwifi/fw/file.h1
-rw-r--r--drivers/net/wireless/intel/iwlwifi/iwl-config.h5
-rw-r--r--drivers/net/wireless/intel/iwlwifi/mvm/mvm.h6
-rw-r--r--drivers/net/wireless/intel/iwlwifi/mvm/scan.c86
-rw-r--r--drivers/net/wireless/intel/iwlwifi/pcie/drv.c132
10 files changed, 335 insertions, 90 deletions
diff --git a/drivers/net/wireless/ath/ath10k/htt_rx.c b/drivers/net/wireless/ath/ath10k/htt_rx.c
index e31438541ee1..7d295ee71534 100644
--- a/drivers/net/wireless/ath/ath10k/htt_rx.c
+++ b/drivers/net/wireless/ath/ath10k/htt_rx.c
@@ -566,18 +566,16 @@ static int ath10k_htt_rx_crypto_param_len(struct ath10k *ar,
566 566
567#define MICHAEL_MIC_LEN 8 567#define MICHAEL_MIC_LEN 8
568 568
569static int ath10k_htt_rx_crypto_tail_len(struct ath10k *ar, 569static int ath10k_htt_rx_crypto_mic_len(struct ath10k *ar,
570 enum htt_rx_mpdu_encrypt_type type) 570 enum htt_rx_mpdu_encrypt_type type)
571{ 571{
572 switch (type) { 572 switch (type) {
573 case HTT_RX_MPDU_ENCRYPT_NONE: 573 case HTT_RX_MPDU_ENCRYPT_NONE:
574 return 0;
575 case HTT_RX_MPDU_ENCRYPT_WEP40: 574 case HTT_RX_MPDU_ENCRYPT_WEP40:
576 case HTT_RX_MPDU_ENCRYPT_WEP104: 575 case HTT_RX_MPDU_ENCRYPT_WEP104:
577 return IEEE80211_WEP_ICV_LEN;
578 case HTT_RX_MPDU_ENCRYPT_TKIP_WITHOUT_MIC: 576 case HTT_RX_MPDU_ENCRYPT_TKIP_WITHOUT_MIC:
579 case HTT_RX_MPDU_ENCRYPT_TKIP_WPA: 577 case HTT_RX_MPDU_ENCRYPT_TKIP_WPA:
580 return IEEE80211_TKIP_ICV_LEN; 578 return 0;
581 case HTT_RX_MPDU_ENCRYPT_AES_CCM_WPA2: 579 case HTT_RX_MPDU_ENCRYPT_AES_CCM_WPA2:
582 return IEEE80211_CCMP_MIC_LEN; 580 return IEEE80211_CCMP_MIC_LEN;
583 case HTT_RX_MPDU_ENCRYPT_AES_CCM256_WPA2: 581 case HTT_RX_MPDU_ENCRYPT_AES_CCM256_WPA2:
@@ -594,6 +592,31 @@ static int ath10k_htt_rx_crypto_tail_len(struct ath10k *ar,
594 return 0; 592 return 0;
595} 593}
596 594
595static int ath10k_htt_rx_crypto_icv_len(struct ath10k *ar,
596 enum htt_rx_mpdu_encrypt_type type)
597{
598 switch (type) {
599 case HTT_RX_MPDU_ENCRYPT_NONE:
600 case HTT_RX_MPDU_ENCRYPT_AES_CCM_WPA2:
601 case HTT_RX_MPDU_ENCRYPT_AES_CCM256_WPA2:
602 case HTT_RX_MPDU_ENCRYPT_AES_GCMP_WPA2:
603 case HTT_RX_MPDU_ENCRYPT_AES_GCMP256_WPA2:
604 return 0;
605 case HTT_RX_MPDU_ENCRYPT_WEP40:
606 case HTT_RX_MPDU_ENCRYPT_WEP104:
607 return IEEE80211_WEP_ICV_LEN;
608 case HTT_RX_MPDU_ENCRYPT_TKIP_WITHOUT_MIC:
609 case HTT_RX_MPDU_ENCRYPT_TKIP_WPA:
610 return IEEE80211_TKIP_ICV_LEN;
611 case HTT_RX_MPDU_ENCRYPT_WEP128:
612 case HTT_RX_MPDU_ENCRYPT_WAPI:
613 break;
614 }
615
616 ath10k_warn(ar, "unsupported encryption type %d\n", type);
617 return 0;
618}
619
597struct amsdu_subframe_hdr { 620struct amsdu_subframe_hdr {
598 u8 dst[ETH_ALEN]; 621 u8 dst[ETH_ALEN];
599 u8 src[ETH_ALEN]; 622 u8 src[ETH_ALEN];
@@ -1063,25 +1086,27 @@ static void ath10k_htt_rx_h_undecap_raw(struct ath10k *ar,
1063 /* Tail */ 1086 /* Tail */
1064 if (status->flag & RX_FLAG_IV_STRIPPED) { 1087 if (status->flag & RX_FLAG_IV_STRIPPED) {
1065 skb_trim(msdu, msdu->len - 1088 skb_trim(msdu, msdu->len -
1066 ath10k_htt_rx_crypto_tail_len(ar, enctype)); 1089 ath10k_htt_rx_crypto_mic_len(ar, enctype));
1090
1091 skb_trim(msdu, msdu->len -
1092 ath10k_htt_rx_crypto_icv_len(ar, enctype));
1067 } else { 1093 } else {
1068 /* MIC */ 1094 /* MIC */
1069 if ((status->flag & RX_FLAG_MIC_STRIPPED) && 1095 if (status->flag & RX_FLAG_MIC_STRIPPED)
1070 enctype == HTT_RX_MPDU_ENCRYPT_AES_CCM_WPA2) 1096 skb_trim(msdu, msdu->len -
1071 skb_trim(msdu, msdu->len - 8); 1097 ath10k_htt_rx_crypto_mic_len(ar, enctype));
1072 1098
1073 /* ICV */ 1099 /* ICV */
1074 if (status->flag & RX_FLAG_ICV_STRIPPED && 1100 if (status->flag & RX_FLAG_ICV_STRIPPED)
1075 enctype != HTT_RX_MPDU_ENCRYPT_AES_CCM_WPA2)
1076 skb_trim(msdu, msdu->len - 1101 skb_trim(msdu, msdu->len -
1077 ath10k_htt_rx_crypto_tail_len(ar, enctype)); 1102 ath10k_htt_rx_crypto_icv_len(ar, enctype));
1078 } 1103 }
1079 1104
1080 /* MMIC */ 1105 /* MMIC */
1081 if ((status->flag & RX_FLAG_MMIC_STRIPPED) && 1106 if ((status->flag & RX_FLAG_MMIC_STRIPPED) &&
1082 !ieee80211_has_morefrags(hdr->frame_control) && 1107 !ieee80211_has_morefrags(hdr->frame_control) &&
1083 enctype == HTT_RX_MPDU_ENCRYPT_TKIP_WPA) 1108 enctype == HTT_RX_MPDU_ENCRYPT_TKIP_WPA)
1084 skb_trim(msdu, msdu->len - 8); 1109 skb_trim(msdu, msdu->len - MICHAEL_MIC_LEN);
1085 1110
1086 /* Head */ 1111 /* Head */
1087 if (status->flag & RX_FLAG_IV_STRIPPED) { 1112 if (status->flag & RX_FLAG_IV_STRIPPED) {
diff --git a/drivers/net/wireless/ath/wcn36xx/main.c b/drivers/net/wireless/ath/wcn36xx/main.c
index 71812a2dd513..f7d228b5ba93 100644
--- a/drivers/net/wireless/ath/wcn36xx/main.c
+++ b/drivers/net/wireless/ath/wcn36xx/main.c
@@ -1233,7 +1233,7 @@ static int wcn36xx_platform_get_resources(struct wcn36xx *wcn,
1233 } 1233 }
1234 1234
1235 /* External RF module */ 1235 /* External RF module */
1236 iris_node = of_find_node_by_name(mmio_node, "iris"); 1236 iris_node = of_get_child_by_name(mmio_node, "iris");
1237 if (iris_node) { 1237 if (iris_node) {
1238 if (of_device_is_compatible(iris_node, "qcom,wcn3620")) 1238 if (of_device_is_compatible(iris_node, "qcom,wcn3620"))
1239 wcn->rf_id = RF_IRIS_WCN3620; 1239 wcn->rf_id = RF_IRIS_WCN3620;
diff --git a/drivers/net/wireless/intel/iwlwifi/cfg/9000.c b/drivers/net/wireless/intel/iwlwifi/cfg/9000.c
index af7c4f36b66f..e7e75b458005 100644
--- a/drivers/net/wireless/intel/iwlwifi/cfg/9000.c
+++ b/drivers/net/wireless/intel/iwlwifi/cfg/9000.c
@@ -72,18 +72,21 @@
72#define IWL9000_SMEM_OFFSET 0x400000 72#define IWL9000_SMEM_OFFSET 0x400000
73#define IWL9000_SMEM_LEN 0x68000 73#define IWL9000_SMEM_LEN 0x68000
74 74
75#define IWL9000_FW_PRE "iwlwifi-9000-pu-a0-jf-a0-" 75#define IWL9000A_FW_PRE "iwlwifi-9000-pu-a0-jf-a0-"
76#define IWL9000B_FW_PRE "iwlwifi-9000-pu-b0-jf-b0-"
76#define IWL9000RFB_FW_PRE "iwlwifi-9000-pu-a0-jf-b0-" 77#define IWL9000RFB_FW_PRE "iwlwifi-9000-pu-a0-jf-b0-"
77#define IWL9260A_FW_PRE "iwlwifi-9260-th-a0-jf-a0-" 78#define IWL9260A_FW_PRE "iwlwifi-9260-th-a0-jf-a0-"
78#define IWL9260B_FW_PRE "iwlwifi-9260-th-b0-jf-b0-" 79#define IWL9260B_FW_PRE "iwlwifi-9260-th-b0-jf-b0-"
79#define IWL9000_MODULE_FIRMWARE(api) \ 80#define IWL9000A_MODULE_FIRMWARE(api) \
80 IWL9000_FW_PRE "-" __stringify(api) ".ucode" 81 IWL9000A_FW_PRE __stringify(api) ".ucode"
82#define IWL9000B_MODULE_FIRMWARE(api) \
83 IWL9000B_FW_PRE __stringify(api) ".ucode"
81#define IWL9000RFB_MODULE_FIRMWARE(api) \ 84#define IWL9000RFB_MODULE_FIRMWARE(api) \
82 IWL9000RFB_FW_PRE "-" __stringify(api) ".ucode" 85 IWL9000RFB_FW_PRE __stringify(api) ".ucode"
83#define IWL9260A_MODULE_FIRMWARE(api) \ 86#define IWL9260A_MODULE_FIRMWARE(api) \
84 IWL9260A_FW_PRE "-" __stringify(api) ".ucode" 87 IWL9260A_FW_PRE __stringify(api) ".ucode"
85#define IWL9260B_MODULE_FIRMWARE(api) \ 88#define IWL9260B_MODULE_FIRMWARE(api) \
86 IWL9260B_FW_PRE "-" __stringify(api) ".ucode" 89 IWL9260B_FW_PRE __stringify(api) ".ucode"
87 90
88#define NVM_HW_SECTION_NUM_FAMILY_9000 10 91#define NVM_HW_SECTION_NUM_FAMILY_9000 10
89 92
@@ -194,7 +197,48 @@ const struct iwl_cfg iwl9460_2ac_cfg = {
194 .nvm_ver = IWL9000_NVM_VERSION, 197 .nvm_ver = IWL9000_NVM_VERSION,
195 .nvm_calib_ver = IWL9000_TX_POWER_VERSION, 198 .nvm_calib_ver = IWL9000_TX_POWER_VERSION,
196 .max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K, 199 .max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K,
200};
201
202const struct iwl_cfg iwl9460_2ac_cfg_soc = {
203 .name = "Intel(R) Dual Band Wireless AC 9460",
204 .fw_name_pre = IWL9000A_FW_PRE,
205 .fw_name_pre_b_or_c_step = IWL9000B_FW_PRE,
206 .fw_name_pre_rf_next_step = IWL9000RFB_FW_PRE,
207 IWL_DEVICE_9000,
208 .ht_params = &iwl9000_ht_params,
209 .nvm_ver = IWL9000_NVM_VERSION,
210 .nvm_calib_ver = IWL9000_TX_POWER_VERSION,
211 .max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K,
197 .integrated = true, 212 .integrated = true,
213 .soc_latency = 5000,
214};
215
216const struct iwl_cfg iwl9461_2ac_cfg_soc = {
217 .name = "Intel(R) Dual Band Wireless AC 9461",
218 .fw_name_pre = IWL9000A_FW_PRE,
219 .fw_name_pre_b_or_c_step = IWL9000B_FW_PRE,
220 .fw_name_pre_rf_next_step = IWL9000RFB_FW_PRE,
221 IWL_DEVICE_9000,
222 .ht_params = &iwl9000_ht_params,
223 .nvm_ver = IWL9000_NVM_VERSION,
224 .nvm_calib_ver = IWL9000_TX_POWER_VERSION,
225 .max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K,
226 .integrated = true,
227 .soc_latency = 5000,
228};
229
230const struct iwl_cfg iwl9462_2ac_cfg_soc = {
231 .name = "Intel(R) Dual Band Wireless AC 9462",
232 .fw_name_pre = IWL9000A_FW_PRE,
233 .fw_name_pre_b_or_c_step = IWL9000B_FW_PRE,
234 .fw_name_pre_rf_next_step = IWL9000RFB_FW_PRE,
235 IWL_DEVICE_9000,
236 .ht_params = &iwl9000_ht_params,
237 .nvm_ver = IWL9000_NVM_VERSION,
238 .nvm_calib_ver = IWL9000_TX_POWER_VERSION,
239 .max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K,
240 .integrated = true,
241 .soc_latency = 5000,
198}; 242};
199 243
200const struct iwl_cfg iwl9560_2ac_cfg = { 244const struct iwl_cfg iwl9560_2ac_cfg = {
@@ -206,10 +250,23 @@ const struct iwl_cfg iwl9560_2ac_cfg = {
206 .nvm_ver = IWL9000_NVM_VERSION, 250 .nvm_ver = IWL9000_NVM_VERSION,
207 .nvm_calib_ver = IWL9000_TX_POWER_VERSION, 251 .nvm_calib_ver = IWL9000_TX_POWER_VERSION,
208 .max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K, 252 .max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K,
209 .integrated = true,
210}; 253};
211 254
212MODULE_FIRMWARE(IWL9000_MODULE_FIRMWARE(IWL9000_UCODE_API_MAX)); 255const struct iwl_cfg iwl9560_2ac_cfg_soc = {
256 .name = "Intel(R) Dual Band Wireless AC 9560",
257 .fw_name_pre = IWL9000A_FW_PRE,
258 .fw_name_pre_b_or_c_step = IWL9000B_FW_PRE,
259 .fw_name_pre_rf_next_step = IWL9000RFB_FW_PRE,
260 IWL_DEVICE_9000,
261 .ht_params = &iwl9000_ht_params,
262 .nvm_ver = IWL9000_NVM_VERSION,
263 .nvm_calib_ver = IWL9000_TX_POWER_VERSION,
264 .max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K,
265 .integrated = true,
266 .soc_latency = 5000,
267};
268MODULE_FIRMWARE(IWL9000A_MODULE_FIRMWARE(IWL9000_UCODE_API_MAX));
269MODULE_FIRMWARE(IWL9000B_MODULE_FIRMWARE(IWL9000_UCODE_API_MAX));
213MODULE_FIRMWARE(IWL9000RFB_MODULE_FIRMWARE(IWL9000_UCODE_API_MAX)); 270MODULE_FIRMWARE(IWL9000RFB_MODULE_FIRMWARE(IWL9000_UCODE_API_MAX));
214MODULE_FIRMWARE(IWL9260A_MODULE_FIRMWARE(IWL9000_UCODE_API_MAX)); 271MODULE_FIRMWARE(IWL9260A_MODULE_FIRMWARE(IWL9000_UCODE_API_MAX));
215MODULE_FIRMWARE(IWL9260B_MODULE_FIRMWARE(IWL9000_UCODE_API_MAX)); 272MODULE_FIRMWARE(IWL9260B_MODULE_FIRMWARE(IWL9000_UCODE_API_MAX));
diff --git a/drivers/net/wireless/intel/iwlwifi/cfg/a000.c b/drivers/net/wireless/intel/iwlwifi/cfg/a000.c
index ea8206515171..705f83b02e13 100644
--- a/drivers/net/wireless/intel/iwlwifi/cfg/a000.c
+++ b/drivers/net/wireless/intel/iwlwifi/cfg/a000.c
@@ -80,15 +80,15 @@
80#define IWL_A000_HR_A0_FW_PRE "iwlwifi-QuQnj-a0-hr-a0-" 80#define IWL_A000_HR_A0_FW_PRE "iwlwifi-QuQnj-a0-hr-a0-"
81 81
82#define IWL_A000_HR_MODULE_FIRMWARE(api) \ 82#define IWL_A000_HR_MODULE_FIRMWARE(api) \
83 IWL_A000_HR_FW_PRE "-" __stringify(api) ".ucode" 83 IWL_A000_HR_FW_PRE __stringify(api) ".ucode"
84#define IWL_A000_JF_MODULE_FIRMWARE(api) \ 84#define IWL_A000_JF_MODULE_FIRMWARE(api) \
85 IWL_A000_JF_FW_PRE "-" __stringify(api) ".ucode" 85 IWL_A000_JF_FW_PRE __stringify(api) ".ucode"
86#define IWL_A000_HR_F0_QNJ_MODULE_FIRMWARE(api) \ 86#define IWL_A000_HR_F0_QNJ_MODULE_FIRMWARE(api) \
87 IWL_A000_HR_F0_FW_PRE "-" __stringify(api) ".ucode" 87 IWL_A000_HR_F0_FW_PRE __stringify(api) ".ucode"
88#define IWL_A000_JF_B0_QNJ_MODULE_FIRMWARE(api) \ 88#define IWL_A000_JF_B0_QNJ_MODULE_FIRMWARE(api) \
89 IWL_A000_JF_B0_FW_PRE "-" __stringify(api) ".ucode" 89 IWL_A000_JF_B0_FW_PRE __stringify(api) ".ucode"
90#define IWL_A000_HR_A0_QNJ_MODULE_FIRMWARE(api) \ 90#define IWL_A000_HR_A0_QNJ_MODULE_FIRMWARE(api) \
91 IWL_A000_HR_A0_FW_PRE "-" __stringify(api) ".ucode" 91 IWL_A000_HR_A0_FW_PRE __stringify(api) ".ucode"
92 92
93#define NVM_HW_SECTION_NUM_FAMILY_A000 10 93#define NVM_HW_SECTION_NUM_FAMILY_A000 10
94 94
diff --git a/drivers/net/wireless/intel/iwlwifi/fw/api/scan.h b/drivers/net/wireless/intel/iwlwifi/fw/api/scan.h
index 5a40092febfb..3bfc657f6b42 100644
--- a/drivers/net/wireless/intel/iwlwifi/fw/api/scan.h
+++ b/drivers/net/wireless/intel/iwlwifi/fw/api/scan.h
@@ -531,6 +531,8 @@ struct iwl_scan_config_v1 {
531} __packed; /* SCAN_CONFIG_DB_CMD_API_S */ 531} __packed; /* SCAN_CONFIG_DB_CMD_API_S */
532 532
533#define SCAN_TWO_LMACS 2 533#define SCAN_TWO_LMACS 2
534#define SCAN_LB_LMAC_IDX 0
535#define SCAN_HB_LMAC_IDX 1
534 536
535struct iwl_scan_config { 537struct iwl_scan_config {
536 __le32 flags; 538 __le32 flags;
@@ -578,6 +580,7 @@ enum iwl_umac_scan_general_flags {
578 IWL_UMAC_SCAN_GEN_FLAGS_MATCH = BIT(9), 580 IWL_UMAC_SCAN_GEN_FLAGS_MATCH = BIT(9),
579 IWL_UMAC_SCAN_GEN_FLAGS_EXTENDED_DWELL = BIT(10), 581 IWL_UMAC_SCAN_GEN_FLAGS_EXTENDED_DWELL = BIT(10),
580 IWL_UMAC_SCAN_GEN_FLAGS_LMAC2_FRAGMENTED = BIT(11), 582 IWL_UMAC_SCAN_GEN_FLAGS_LMAC2_FRAGMENTED = BIT(11),
583 IWL_UMAC_SCAN_GEN_FLAGS_ADAPTIVE_DWELL = BIT(13),
581}; 584};
582 585
583/** 586/**
@@ -631,12 +634,17 @@ struct iwl_scan_req_umac_tail {
631 * @uid: scan id, &enum iwl_umac_scan_uid_offsets 634 * @uid: scan id, &enum iwl_umac_scan_uid_offsets
632 * @ooc_priority: out of channel priority - &enum iwl_scan_priority 635 * @ooc_priority: out of channel priority - &enum iwl_scan_priority
633 * @general_flags: &enum iwl_umac_scan_general_flags 636 * @general_flags: &enum iwl_umac_scan_general_flags
634 * @reserved2: for future use and alignment
635 * @scan_start_mac_id: report the scan start TSF time according to this mac TSF 637 * @scan_start_mac_id: report the scan start TSF time according to this mac TSF
636 * @extended_dwell: dwell time for channels 1, 6 and 11 638 * @extended_dwell: dwell time for channels 1, 6 and 11
637 * @active_dwell: dwell time for active scan 639 * @active_dwell: dwell time for active scan
638 * @passive_dwell: dwell time for passive scan 640 * @passive_dwell: dwell time for passive scan
639 * @fragmented_dwell: dwell time for fragmented passive scan 641 * @fragmented_dwell: dwell time for fragmented passive scan
642 * @adwell_default_n_aps: for adaptive dwell the default number of APs
643 * per channel
644 * @adwell_default_n_aps_social: for adaptive dwell the default
645 * number of APs per social (1,6,11) channel
646 * @adwell_max_budget: for adaptive dwell the maximal budget of TU to be added
647 * to total scan time
640 * @max_out_time: max out of serving channel time, per LMAC - for CDB there 648 * @max_out_time: max out of serving channel time, per LMAC - for CDB there
641 * are 2 LMACs 649 * are 2 LMACs
642 * @suspend_time: max suspend time, per LMAC - for CDB there are 2 LMACs 650 * @suspend_time: max suspend time, per LMAC - for CDB there are 2 LMACs
@@ -644,6 +652,8 @@ struct iwl_scan_req_umac_tail {
644 * @channel_flags: &enum iwl_scan_channel_flags 652 * @channel_flags: &enum iwl_scan_channel_flags
645 * @n_channels: num of channels in scan request 653 * @n_channels: num of channels in scan request
646 * @reserved: for future use and alignment 654 * @reserved: for future use and alignment
655 * @reserved2: for future use and alignment
656 * @reserved3: for future use and alignment
647 * @data: &struct iwl_scan_channel_cfg_umac and 657 * @data: &struct iwl_scan_channel_cfg_umac and
648 * &struct iwl_scan_req_umac_tail 658 * &struct iwl_scan_req_umac_tail
649 */ 659 */
@@ -651,41 +661,64 @@ struct iwl_scan_req_umac {
651 __le32 flags; 661 __le32 flags;
652 __le32 uid; 662 __le32 uid;
653 __le32 ooc_priority; 663 __le32 ooc_priority;
654 /* SCAN_GENERAL_PARAMS_API_S_VER_4 */
655 __le16 general_flags; 664 __le16 general_flags;
656 u8 reserved2; 665 u8 reserved;
657 u8 scan_start_mac_id; 666 u8 scan_start_mac_id;
658 u8 extended_dwell;
659 u8 active_dwell;
660 u8 passive_dwell;
661 u8 fragmented_dwell;
662 union { 667 union {
663 struct { 668 struct {
669 u8 extended_dwell;
670 u8 active_dwell;
671 u8 passive_dwell;
672 u8 fragmented_dwell;
664 __le32 max_out_time; 673 __le32 max_out_time;
665 __le32 suspend_time; 674 __le32 suspend_time;
666 __le32 scan_priority; 675 __le32 scan_priority;
667 /* SCAN_CHANNEL_PARAMS_API_S_VER_4 */ 676 /* SCAN_CHANNEL_PARAMS_API_S_VER_1 */
668 u8 channel_flags; 677 u8 channel_flags;
669 u8 n_channels; 678 u8 n_channels;
670 __le16 reserved; 679 __le16 reserved2;
671 u8 data[]; 680 u8 data[];
672 } v1; /* SCAN_REQUEST_CMD_UMAC_API_S_VER_1 */ 681 } v1; /* SCAN_REQUEST_CMD_UMAC_API_S_VER_1 */
673 struct { 682 struct {
683 u8 extended_dwell;
684 u8 active_dwell;
685 u8 passive_dwell;
686 u8 fragmented_dwell;
674 __le32 max_out_time[SCAN_TWO_LMACS]; 687 __le32 max_out_time[SCAN_TWO_LMACS];
675 __le32 suspend_time[SCAN_TWO_LMACS]; 688 __le32 suspend_time[SCAN_TWO_LMACS];
676 __le32 scan_priority; 689 __le32 scan_priority;
677 /* SCAN_CHANNEL_PARAMS_API_S_VER_4 */ 690 /* SCAN_CHANNEL_PARAMS_API_S_VER_1 */
678 u8 channel_flags; 691 u8 channel_flags;
679 u8 n_channels; 692 u8 n_channels;
680 __le16 reserved; 693 __le16 reserved2;
681 u8 data[]; 694 u8 data[];
682 } v6; /* SCAN_REQUEST_CMD_UMAC_API_S_VER_6 */ 695 } v6; /* SCAN_REQUEST_CMD_UMAC_API_S_VER_6 */
696 struct {
697 u8 active_dwell;
698 u8 passive_dwell;
699 u8 fragmented_dwell;
700 u8 adwell_default_n_aps;
701 u8 adwell_default_n_aps_social;
702 u8 reserved3;
703 __le16 adwell_max_budget;
704 __le32 max_out_time[SCAN_TWO_LMACS];
705 __le32 suspend_time[SCAN_TWO_LMACS];
706 __le32 scan_priority;
707 /* SCAN_CHANNEL_PARAMS_API_S_VER_1 */
708 u8 channel_flags;
709 u8 n_channels;
710 __le16 reserved2;
711 u8 data[];
712 } v7; /* SCAN_REQUEST_CMD_UMAC_API_S_VER_7 */
683 }; 713 };
684} __packed; 714} __packed;
685 715
686#define IWL_SCAN_REQ_UMAC_SIZE sizeof(struct iwl_scan_req_umac) 716#define IWL_SCAN_REQ_UMAC_SIZE_V7 sizeof(struct iwl_scan_req_umac)
717#define IWL_SCAN_REQ_UMAC_SIZE_V6 (sizeof(struct iwl_scan_req_umac) - \
718 2 * sizeof(u8) - sizeof(__le16))
687#define IWL_SCAN_REQ_UMAC_SIZE_V1 (sizeof(struct iwl_scan_req_umac) - \ 719#define IWL_SCAN_REQ_UMAC_SIZE_V1 (sizeof(struct iwl_scan_req_umac) - \
688 2 * sizeof(__le32)) 720 2 * sizeof(__le32) - 2 * sizeof(u8) - \
721 sizeof(__le16))
689 722
690/** 723/**
691 * struct iwl_umac_scan_abort 724 * struct iwl_umac_scan_abort
diff --git a/drivers/net/wireless/intel/iwlwifi/fw/file.h b/drivers/net/wireless/intel/iwlwifi/fw/file.h
index 740d97093d1c..37a5c5b4eda6 100644
--- a/drivers/net/wireless/intel/iwlwifi/fw/file.h
+++ b/drivers/net/wireless/intel/iwlwifi/fw/file.h
@@ -264,6 +264,7 @@ enum iwl_ucode_tlv_api {
264 IWL_UCODE_TLV_API_STA_TYPE = (__force iwl_ucode_tlv_api_t)30, 264 IWL_UCODE_TLV_API_STA_TYPE = (__force iwl_ucode_tlv_api_t)30,
265 IWL_UCODE_TLV_API_NAN2_VER2 = (__force iwl_ucode_tlv_api_t)31, 265 IWL_UCODE_TLV_API_NAN2_VER2 = (__force iwl_ucode_tlv_api_t)31,
266 /* API Set 1 */ 266 /* API Set 1 */
267 IWL_UCODE_TLV_API_ADAPTIVE_DWELL = (__force iwl_ucode_tlv_api_t)32,
267 IWL_UCODE_TLV_API_NEW_BEACON_TEMPLATE = (__force iwl_ucode_tlv_api_t)34, 268 IWL_UCODE_TLV_API_NEW_BEACON_TEMPLATE = (__force iwl_ucode_tlv_api_t)34,
268 IWL_UCODE_TLV_API_NEW_RX_STATS = (__force iwl_ucode_tlv_api_t)35, 269 IWL_UCODE_TLV_API_NEW_RX_STATS = (__force iwl_ucode_tlv_api_t)35,
269 IWL_UCODE_TLV_API_COEX_ATS_EXTERNAL = (__force iwl_ucode_tlv_api_t)37, 270 IWL_UCODE_TLV_API_COEX_ATS_EXTERNAL = (__force iwl_ucode_tlv_api_t)37,
diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-config.h b/drivers/net/wireless/intel/iwlwifi/iwl-config.h
index d1263a554420..e21e46cf6f9a 100644
--- a/drivers/net/wireless/intel/iwlwifi/iwl-config.h
+++ b/drivers/net/wireless/intel/iwlwifi/iwl-config.h
@@ -366,6 +366,7 @@ struct iwl_cfg {
366 u32 dccm2_len; 366 u32 dccm2_len;
367 u32 smem_offset; 367 u32 smem_offset;
368 u32 smem_len; 368 u32 smem_len;
369 u32 soc_latency;
369 u16 nvm_ver; 370 u16 nvm_ver;
370 u16 nvm_calib_ver; 371 u16 nvm_calib_ver;
371 u16 rx_with_siso_diversity:1, 372 u16 rx_with_siso_diversity:1,
@@ -472,6 +473,10 @@ extern const struct iwl_cfg iwl9260_2ac_cfg;
472extern const struct iwl_cfg iwl9270_2ac_cfg; 473extern const struct iwl_cfg iwl9270_2ac_cfg;
473extern const struct iwl_cfg iwl9460_2ac_cfg; 474extern const struct iwl_cfg iwl9460_2ac_cfg;
474extern const struct iwl_cfg iwl9560_2ac_cfg; 475extern const struct iwl_cfg iwl9560_2ac_cfg;
476extern const struct iwl_cfg iwl9460_2ac_cfg_soc;
477extern const struct iwl_cfg iwl9461_2ac_cfg_soc;
478extern const struct iwl_cfg iwl9462_2ac_cfg_soc;
479extern const struct iwl_cfg iwl9560_2ac_cfg_soc;
475extern const struct iwl_cfg iwla000_2ac_cfg_hr; 480extern const struct iwl_cfg iwla000_2ac_cfg_hr;
476extern const struct iwl_cfg iwla000_2ac_cfg_hr_cdb; 481extern const struct iwl_cfg iwla000_2ac_cfg_hr_cdb;
477extern const struct iwl_cfg iwla000_2ac_cfg_jf; 482extern const struct iwl_cfg iwla000_2ac_cfg_jf;
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h b/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h
index 0e18c5066f04..4575595ab022 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h
@@ -1142,6 +1142,12 @@ static inline bool iwl_mvm_is_d0i3_supported(struct iwl_mvm *mvm)
1142 IWL_UCODE_TLV_CAPA_D0I3_SUPPORT); 1142 IWL_UCODE_TLV_CAPA_D0I3_SUPPORT);
1143} 1143}
1144 1144
1145static inline bool iwl_mvm_is_adaptive_dwell_supported(struct iwl_mvm *mvm)
1146{
1147 return fw_has_api(&mvm->fw->ucode_capa,
1148 IWL_UCODE_TLV_API_ADAPTIVE_DWELL);
1149}
1150
1145static inline bool iwl_mvm_enter_d0i3_on_suspend(struct iwl_mvm *mvm) 1151static inline bool iwl_mvm_enter_d0i3_on_suspend(struct iwl_mvm *mvm)
1146{ 1152{
1147 /* For now we only use this mode to differentiate between 1153 /* For now we only use this mode to differentiate between
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/scan.c b/drivers/net/wireless/intel/iwlwifi/mvm/scan.c
index 774122fed454..e4fd476e9ccb 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/scan.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/scan.c
@@ -130,6 +130,19 @@ struct iwl_mvm_scan_params {
130 u32 measurement_dwell; 130 u32 measurement_dwell;
131}; 131};
132 132
133static inline void *iwl_mvm_get_scan_req_umac_data(struct iwl_mvm *mvm)
134{
135 struct iwl_scan_req_umac *cmd = mvm->scan_cmd;
136
137 if (iwl_mvm_is_adaptive_dwell_supported(mvm))
138 return (void *)&cmd->v7.data;
139
140 if (iwl_mvm_has_new_tx_api(mvm))
141 return (void *)&cmd->v6.data;
142
143 return (void *)&cmd->v1.data;
144}
145
133static u8 iwl_mvm_scan_rx_ant(struct iwl_mvm *mvm) 146static u8 iwl_mvm_scan_rx_ant(struct iwl_mvm *mvm)
134{ 147{
135 if (mvm->scan_rx_ant != ANT_NONE) 148 if (mvm->scan_rx_ant != ANT_NONE)
@@ -1075,25 +1088,57 @@ static void iwl_mvm_scan_umac_dwell(struct iwl_mvm *mvm,
1075{ 1088{
1076 struct iwl_mvm_scan_timing_params *timing = &scan_timing[params->type]; 1089 struct iwl_mvm_scan_timing_params *timing = &scan_timing[params->type];
1077 1090
1091 if (iwl_mvm_is_regular_scan(params))
1092 cmd->ooc_priority = cpu_to_le32(IWL_SCAN_PRIORITY_EXT_6);
1093 else
1094 cmd->ooc_priority = cpu_to_le32(IWL_SCAN_PRIORITY_EXT_2);
1095
1096 if (iwl_mvm_is_adaptive_dwell_supported(mvm)) {
1097 if (params->measurement_dwell) {
1098 cmd->v7.active_dwell = params->measurement_dwell;
1099 cmd->v7.passive_dwell = params->measurement_dwell;
1100 } else {
1101 cmd->v7.active_dwell = IWL_SCAN_DWELL_ACTIVE;
1102 cmd->v7.passive_dwell = IWL_SCAN_DWELL_PASSIVE;
1103 }
1104 cmd->v7.fragmented_dwell = IWL_SCAN_DWELL_FRAGMENTED;
1105
1106 cmd->v7.scan_priority = cpu_to_le32(IWL_SCAN_PRIORITY_EXT_6);
1107 cmd->v7.max_out_time[SCAN_LB_LMAC_IDX] =
1108 cpu_to_le32(timing->max_out_time);
1109 cmd->v7.suspend_time[SCAN_LB_LMAC_IDX] =
1110 cpu_to_le32(timing->suspend_time);
1111 if (iwl_mvm_is_cdb_supported(mvm)) {
1112 cmd->v7.max_out_time[SCAN_HB_LMAC_IDX] =
1113 cpu_to_le32(timing->max_out_time);
1114 cmd->v7.suspend_time[SCAN_HB_LMAC_IDX] =
1115 cpu_to_le32(timing->suspend_time);
1116 }
1117
1118 return;
1119 }
1120
1078 if (params->measurement_dwell) { 1121 if (params->measurement_dwell) {
1079 cmd->active_dwell = params->measurement_dwell; 1122 cmd->v1.active_dwell = params->measurement_dwell;
1080 cmd->passive_dwell = params->measurement_dwell; 1123 cmd->v1.passive_dwell = params->measurement_dwell;
1081 cmd->extended_dwell = params->measurement_dwell; 1124 cmd->v1.extended_dwell = params->measurement_dwell;
1082 } else { 1125 } else {
1083 cmd->active_dwell = IWL_SCAN_DWELL_ACTIVE; 1126 cmd->v1.active_dwell = IWL_SCAN_DWELL_ACTIVE;
1084 cmd->passive_dwell = IWL_SCAN_DWELL_PASSIVE; 1127 cmd->v1.passive_dwell = IWL_SCAN_DWELL_PASSIVE;
1085 cmd->extended_dwell = IWL_SCAN_DWELL_EXTENDED; 1128 cmd->v1.extended_dwell = IWL_SCAN_DWELL_EXTENDED;
1086 } 1129 }
1087 cmd->fragmented_dwell = IWL_SCAN_DWELL_FRAGMENTED; 1130 cmd->v1.fragmented_dwell = IWL_SCAN_DWELL_FRAGMENTED;
1088 1131
1089 if (iwl_mvm_has_new_tx_api(mvm)) { 1132 if (iwl_mvm_has_new_tx_api(mvm)) {
1090 cmd->v6.scan_priority = cpu_to_le32(IWL_SCAN_PRIORITY_EXT_6); 1133 cmd->v6.scan_priority = cpu_to_le32(IWL_SCAN_PRIORITY_EXT_6);
1091 cmd->v6.max_out_time[0] = cpu_to_le32(timing->max_out_time); 1134 cmd->v6.max_out_time[SCAN_LB_LMAC_IDX] =
1092 cmd->v6.suspend_time[0] = cpu_to_le32(timing->suspend_time); 1135 cpu_to_le32(timing->max_out_time);
1136 cmd->v6.suspend_time[SCAN_LB_LMAC_IDX] =
1137 cpu_to_le32(timing->suspend_time);
1093 if (iwl_mvm_is_cdb_supported(mvm)) { 1138 if (iwl_mvm_is_cdb_supported(mvm)) {
1094 cmd->v6.max_out_time[1] = 1139 cmd->v6.max_out_time[SCAN_HB_LMAC_IDX] =
1095 cpu_to_le32(timing->max_out_time); 1140 cpu_to_le32(timing->max_out_time);
1096 cmd->v6.suspend_time[1] = 1141 cmd->v6.suspend_time[SCAN_HB_LMAC_IDX] =
1097 cpu_to_le32(timing->suspend_time); 1142 cpu_to_le32(timing->suspend_time);
1098 } 1143 }
1099 } else { 1144 } else {
@@ -1102,11 +1147,6 @@ static void iwl_mvm_scan_umac_dwell(struct iwl_mvm *mvm,
1102 cmd->v1.scan_priority = 1147 cmd->v1.scan_priority =
1103 cpu_to_le32(IWL_SCAN_PRIORITY_EXT_6); 1148 cpu_to_le32(IWL_SCAN_PRIORITY_EXT_6);
1104 } 1149 }
1105
1106 if (iwl_mvm_is_regular_scan(params))
1107 cmd->ooc_priority = cpu_to_le32(IWL_SCAN_PRIORITY_EXT_6);
1108 else
1109 cmd->ooc_priority = cpu_to_le32(IWL_SCAN_PRIORITY_EXT_2);
1110} 1150}
1111 1151
1112static void 1152static void
@@ -1178,8 +1218,7 @@ static int iwl_mvm_scan_umac(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
1178 int type) 1218 int type)
1179{ 1219{
1180 struct iwl_scan_req_umac *cmd = mvm->scan_cmd; 1220 struct iwl_scan_req_umac *cmd = mvm->scan_cmd;
1181 void *cmd_data = iwl_mvm_has_new_tx_api(mvm) ? 1221 void *cmd_data = iwl_mvm_get_scan_req_umac_data(mvm);
1182 (void *)&cmd->v6.data : (void *)&cmd->v1.data;
1183 struct iwl_scan_req_umac_tail *sec_part = cmd_data + 1222 struct iwl_scan_req_umac_tail *sec_part = cmd_data +
1184 sizeof(struct iwl_scan_channel_cfg_umac) * 1223 sizeof(struct iwl_scan_channel_cfg_umac) *
1185 mvm->fw->ucode_capa.n_scan_channels; 1224 mvm->fw->ucode_capa.n_scan_channels;
@@ -1216,7 +1255,10 @@ static int iwl_mvm_scan_umac(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
1216 IWL_SCAN_CHANNEL_FLAG_EBS_ACCURATE | 1255 IWL_SCAN_CHANNEL_FLAG_EBS_ACCURATE |
1217 IWL_SCAN_CHANNEL_FLAG_CACHE_ADD; 1256 IWL_SCAN_CHANNEL_FLAG_CACHE_ADD;
1218 1257
1219 if (iwl_mvm_has_new_tx_api(mvm)) { 1258 if (iwl_mvm_is_adaptive_dwell_supported(mvm)) {
1259 cmd->v7.channel_flags = channel_flags;
1260 cmd->v7.n_channels = params->n_channels;
1261 } else if (iwl_mvm_has_new_tx_api(mvm)) {
1220 cmd->v6.channel_flags = channel_flags; 1262 cmd->v6.channel_flags = channel_flags;
1221 cmd->v6.n_channels = params->n_channels; 1263 cmd->v6.n_channels = params->n_channels;
1222 } else { 1264 } else {
@@ -1661,8 +1703,10 @@ int iwl_mvm_scan_size(struct iwl_mvm *mvm)
1661{ 1703{
1662 int base_size = IWL_SCAN_REQ_UMAC_SIZE_V1; 1704 int base_size = IWL_SCAN_REQ_UMAC_SIZE_V1;
1663 1705
1664 if (iwl_mvm_has_new_tx_api(mvm)) 1706 if (iwl_mvm_is_adaptive_dwell_supported(mvm))
1665 base_size = IWL_SCAN_REQ_UMAC_SIZE; 1707 base_size = IWL_SCAN_REQ_UMAC_SIZE_V7;
1708 else if (iwl_mvm_has_new_tx_api(mvm))
1709 base_size = IWL_SCAN_REQ_UMAC_SIZE_V6;
1666 1710
1667 if (fw_has_capa(&mvm->fw->ucode_capa, IWL_UCODE_TLV_CAPA_UMAC_SCAN)) 1711 if (fw_has_capa(&mvm->fw->ucode_capa, IWL_UCODE_TLV_CAPA_UMAC_SCAN))
1668 return base_size + 1712 return base_size +
diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/drv.c b/drivers/net/wireless/intel/iwlwifi/pcie/drv.c
index 4a21c12276d7..f21fe59faccf 100644
--- a/drivers/net/wireless/intel/iwlwifi/pcie/drv.c
+++ b/drivers/net/wireless/intel/iwlwifi/pcie/drv.c
@@ -535,47 +535,121 @@ static const struct pci_device_id iwl_hw_card_ids[] = {
535 {IWL_PCI_DEVICE(0x2526, 0x0238, iwl9560_2ac_cfg)}, 535 {IWL_PCI_DEVICE(0x2526, 0x0238, iwl9560_2ac_cfg)},
536 {IWL_PCI_DEVICE(0x2526, 0x023C, iwl9560_2ac_cfg)}, 536 {IWL_PCI_DEVICE(0x2526, 0x023C, iwl9560_2ac_cfg)},
537 {IWL_PCI_DEVICE(0x2526, 0x0260, iwl9460_2ac_cfg)}, 537 {IWL_PCI_DEVICE(0x2526, 0x0260, iwl9460_2ac_cfg)},
538 {IWL_PCI_DEVICE(0x2526, 0x0264, iwl9461_2ac_cfg_soc)},
538 {IWL_PCI_DEVICE(0x2526, 0x02A0, iwl9460_2ac_cfg)}, 539 {IWL_PCI_DEVICE(0x2526, 0x02A0, iwl9460_2ac_cfg)},
539 {IWL_PCI_DEVICE(0x2526, 0x02A4, iwl9460_2ac_cfg)}, 540 {IWL_PCI_DEVICE(0x2526, 0x02A4, iwl9460_2ac_cfg)},
541 {IWL_PCI_DEVICE(0x2526, 0x1010, iwl9260_2ac_cfg)},
540 {IWL_PCI_DEVICE(0x2526, 0x1030, iwl9560_2ac_cfg)}, 542 {IWL_PCI_DEVICE(0x2526, 0x1030, iwl9560_2ac_cfg)},
543 {IWL_PCI_DEVICE(0x2526, 0x1210, iwl9260_2ac_cfg)},
541 {IWL_PCI_DEVICE(0x2526, 0x1410, iwl9270_2ac_cfg)}, 544 {IWL_PCI_DEVICE(0x2526, 0x1410, iwl9270_2ac_cfg)},
542 {IWL_PCI_DEVICE(0x2526, 0x1420, iwl9460_2ac_cfg)}, 545 {IWL_PCI_DEVICE(0x2526, 0x1420, iwl9460_2ac_cfg_soc)},
543 {IWL_PCI_DEVICE(0x2526, 0x1610, iwl9270_2ac_cfg)}, 546 {IWL_PCI_DEVICE(0x2526, 0x1610, iwl9270_2ac_cfg)},
544 {IWL_PCI_DEVICE(0x2526, 0x4010, iwl9260_2ac_cfg)}, 547 {IWL_PCI_DEVICE(0x2526, 0x4010, iwl9260_2ac_cfg)},
545 {IWL_PCI_DEVICE(0x2526, 0x4030, iwl9560_2ac_cfg)}, 548 {IWL_PCI_DEVICE(0x2526, 0x4030, iwl9560_2ac_cfg)},
546 {IWL_PCI_DEVICE(0x2526, 0x40A4, iwl9460_2ac_cfg)}, 549 {IWL_PCI_DEVICE(0x2526, 0x40A4, iwl9460_2ac_cfg)},
547 {IWL_PCI_DEVICE(0x2526, 0xA014, iwl9260_2ac_cfg)}, 550 {IWL_PCI_DEVICE(0x2526, 0xA014, iwl9260_2ac_cfg)},
551 {IWL_PCI_DEVICE(0x2526, 0x42A4, iwl9462_2ac_cfg_soc)},
548 {IWL_PCI_DEVICE(0x271B, 0x0010, iwl9160_2ac_cfg)}, 552 {IWL_PCI_DEVICE(0x271B, 0x0010, iwl9160_2ac_cfg)},
549 {IWL_PCI_DEVICE(0x271B, 0x0014, iwl9160_2ac_cfg)}, 553 {IWL_PCI_DEVICE(0x271B, 0x0014, iwl9160_2ac_cfg)},
550 {IWL_PCI_DEVICE(0x271B, 0x0210, iwl9160_2ac_cfg)}, 554 {IWL_PCI_DEVICE(0x271B, 0x0210, iwl9160_2ac_cfg)},
551 {IWL_PCI_DEVICE(0x30DC, 0x0060, iwl9460_2ac_cfg)}, 555 {IWL_PCI_DEVICE(0x271B, 0x0214, iwl9260_2ac_cfg)},
552 {IWL_PCI_DEVICE(0x31DC, 0x0030, iwl9560_2ac_cfg)}, 556 {IWL_PCI_DEVICE(0x2720, 0x0034, iwl9560_2ac_cfg)},
553 {IWL_PCI_DEVICE(0x31DC, 0x0034, iwl9560_2ac_cfg)}, 557 {IWL_PCI_DEVICE(0x2720, 0x0038, iwl9560_2ac_cfg)},
554 {IWL_PCI_DEVICE(0x31DC, 0x0038, iwl9560_2ac_cfg)}, 558 {IWL_PCI_DEVICE(0x2720, 0x003C, iwl9560_2ac_cfg)},
555 {IWL_PCI_DEVICE(0x31DC, 0x003C, iwl9560_2ac_cfg)}, 559 {IWL_PCI_DEVICE(0x2720, 0x0060, iwl9461_2ac_cfg_soc)},
556 {IWL_PCI_DEVICE(0x31DC, 0x0060, iwl9460_2ac_cfg)}, 560 {IWL_PCI_DEVICE(0x2720, 0x0064, iwl9461_2ac_cfg_soc)},
557 {IWL_PCI_DEVICE(0x9DF0, 0x0000, iwl9460_2ac_cfg)}, 561 {IWL_PCI_DEVICE(0x2720, 0x00A0, iwl9462_2ac_cfg_soc)},
558 {IWL_PCI_DEVICE(0x9DF0, 0x0010, iwl9460_2ac_cfg)}, 562 {IWL_PCI_DEVICE(0x2720, 0x00A4, iwl9462_2ac_cfg_soc)},
559 {IWL_PCI_DEVICE(0x9DF0, 0x0030, iwl9560_2ac_cfg)}, 563 {IWL_PCI_DEVICE(0x2720, 0x0230, iwl9560_2ac_cfg)},
560 {IWL_PCI_DEVICE(0x9DF0, 0x0034, iwl9560_2ac_cfg)}, 564 {IWL_PCI_DEVICE(0x2720, 0x0234, iwl9560_2ac_cfg)},
561 {IWL_PCI_DEVICE(0x9DF0, 0x0038, iwl9560_2ac_cfg)}, 565 {IWL_PCI_DEVICE(0x2720, 0x0238, iwl9560_2ac_cfg)},
562 {IWL_PCI_DEVICE(0x9DF0, 0x003C, iwl9560_2ac_cfg)}, 566 {IWL_PCI_DEVICE(0x2720, 0x023C, iwl9560_2ac_cfg)},
563 {IWL_PCI_DEVICE(0x9DF0, 0x0060, iwl9460_2ac_cfg)}, 567 {IWL_PCI_DEVICE(0x2720, 0x0260, iwl9461_2ac_cfg_soc)},
564 {IWL_PCI_DEVICE(0x9DF0, 0x0210, iwl9460_2ac_cfg)}, 568 {IWL_PCI_DEVICE(0x2720, 0x0264, iwl9461_2ac_cfg_soc)},
565 {IWL_PCI_DEVICE(0x9DF0, 0x0310, iwl9460_2ac_cfg)}, 569 {IWL_PCI_DEVICE(0x2720, 0x02A0, iwl9462_2ac_cfg_soc)},
566 {IWL_PCI_DEVICE(0x9DF0, 0x0410, iwl9460_2ac_cfg)}, 570 {IWL_PCI_DEVICE(0x2720, 0x02A4, iwl9462_2ac_cfg_soc)},
567 {IWL_PCI_DEVICE(0x9DF0, 0x0510, iwl9460_2ac_cfg)}, 571 {IWL_PCI_DEVICE(0x2720, 0x4030, iwl9560_2ac_cfg)},
568 {IWL_PCI_DEVICE(0x9DF0, 0x0610, iwl9460_2ac_cfg)}, 572 {IWL_PCI_DEVICE(0x2720, 0x40A4, iwl9462_2ac_cfg_soc)},
569 {IWL_PCI_DEVICE(0x9DF0, 0x0710, iwl9460_2ac_cfg)}, 573 {IWL_PCI_DEVICE(0x30DC, 0x0060, iwl9460_2ac_cfg_soc)},
570 {IWL_PCI_DEVICE(0x9DF0, 0x0A10, iwl9460_2ac_cfg)}, 574 {IWL_PCI_DEVICE(0x30DC, 0x0064, iwl9461_2ac_cfg_soc)},
571 {IWL_PCI_DEVICE(0x9DF0, 0x2010, iwl9460_2ac_cfg)}, 575 {IWL_PCI_DEVICE(0x30DC, 0x00A0, iwl9462_2ac_cfg_soc)},
572 {IWL_PCI_DEVICE(0x9DF0, 0x2A10, iwl9460_2ac_cfg)}, 576 {IWL_PCI_DEVICE(0x30DC, 0x00A4, iwl9462_2ac_cfg_soc)},
573 {IWL_PCI_DEVICE(0xA370, 0x0030, iwl9560_2ac_cfg)}, 577 {IWL_PCI_DEVICE(0x30DC, 0x0260, iwl9461_2ac_cfg_soc)},
574 {IWL_PCI_DEVICE(0xA370, 0x0034, iwl9560_2ac_cfg)}, 578 {IWL_PCI_DEVICE(0x30DC, 0x0264, iwl9461_2ac_cfg_soc)},
575 {IWL_PCI_DEVICE(0xA370, 0x0038, iwl9560_2ac_cfg)}, 579 {IWL_PCI_DEVICE(0x30DC, 0x02A0, iwl9462_2ac_cfg_soc)},
576 {IWL_PCI_DEVICE(0xA370, 0x003C, iwl9560_2ac_cfg)}, 580 {IWL_PCI_DEVICE(0x30DC, 0x02A4, iwl9462_2ac_cfg_soc)},
577 {IWL_PCI_DEVICE(0xA370, 0x0060, iwl9460_2ac_cfg)}, 581 {IWL_PCI_DEVICE(0x31DC, 0x0030, iwl9560_2ac_cfg_soc)},
578 {IWL_PCI_DEVICE(0xA370, 0x1030, iwl9560_2ac_cfg)}, 582 {IWL_PCI_DEVICE(0x31DC, 0x0034, iwl9560_2ac_cfg_soc)},
583 {IWL_PCI_DEVICE(0x31DC, 0x0038, iwl9560_2ac_cfg_soc)},
584 {IWL_PCI_DEVICE(0x31DC, 0x003C, iwl9560_2ac_cfg_soc)},
585 {IWL_PCI_DEVICE(0x31DC, 0x0060, iwl9460_2ac_cfg_soc)},
586 {IWL_PCI_DEVICE(0x31DC, 0x0064, iwl9461_2ac_cfg_soc)},
587 {IWL_PCI_DEVICE(0x31DC, 0x00A0, iwl9462_2ac_cfg_soc)},
588 {IWL_PCI_DEVICE(0x31DC, 0x00A4, iwl9462_2ac_cfg_soc)},
589 {IWL_PCI_DEVICE(0x31DC, 0x0230, iwl9560_2ac_cfg_soc)},
590 {IWL_PCI_DEVICE(0x31DC, 0x0234, iwl9560_2ac_cfg_soc)},
591 {IWL_PCI_DEVICE(0x31DC, 0x0238, iwl9560_2ac_cfg_soc)},
592 {IWL_PCI_DEVICE(0x31DC, 0x023C, iwl9560_2ac_cfg_soc)},
593 {IWL_PCI_DEVICE(0x31DC, 0x0260, iwl9461_2ac_cfg_soc)},
594 {IWL_PCI_DEVICE(0x31DC, 0x0264, iwl9461_2ac_cfg_soc)},
595 {IWL_PCI_DEVICE(0x31DC, 0x02A0, iwl9462_2ac_cfg_soc)},
596 {IWL_PCI_DEVICE(0x31DC, 0x02A4, iwl9462_2ac_cfg_soc)},
597 {IWL_PCI_DEVICE(0x31DC, 0x4030, iwl9560_2ac_cfg_soc)},
598 {IWL_PCI_DEVICE(0x31DC, 0x4034, iwl9560_2ac_cfg_soc)},
599 {IWL_PCI_DEVICE(0x31DC, 0x40A4, iwl9462_2ac_cfg_soc)},
600 {IWL_PCI_DEVICE(0x34F0, 0x0030, iwl9560_2ac_cfg_soc)},
601 {IWL_PCI_DEVICE(0x34F0, 0x0034, iwl9560_2ac_cfg_soc)},
602 {IWL_PCI_DEVICE(0x34F0, 0x02A4, iwl9462_2ac_cfg_soc)},
603 {IWL_PCI_DEVICE(0x9DF0, 0x0000, iwl9460_2ac_cfg_soc)},
604 {IWL_PCI_DEVICE(0x9DF0, 0x0010, iwl9460_2ac_cfg_soc)},
605 {IWL_PCI_DEVICE(0x9DF0, 0x0030, iwl9560_2ac_cfg_soc)},
606 {IWL_PCI_DEVICE(0x9DF0, 0x0034, iwl9560_2ac_cfg_soc)},
607 {IWL_PCI_DEVICE(0x9DF0, 0x0038, iwl9560_2ac_cfg_soc)},
608 {IWL_PCI_DEVICE(0x9DF0, 0x003C, iwl9560_2ac_cfg_soc)},
609 {IWL_PCI_DEVICE(0x9DF0, 0x0060, iwl9460_2ac_cfg_soc)},
610 {IWL_PCI_DEVICE(0x9DF0, 0x0064, iwl9461_2ac_cfg_soc)},
611 {IWL_PCI_DEVICE(0x9DF0, 0x00A0, iwl9462_2ac_cfg_soc)},
612 {IWL_PCI_DEVICE(0x9DF0, 0x00A4, iwl9462_2ac_cfg_soc)},
613 {IWL_PCI_DEVICE(0x9DF0, 0x0210, iwl9460_2ac_cfg_soc)},
614 {IWL_PCI_DEVICE(0x9DF0, 0x0230, iwl9560_2ac_cfg_soc)},
615 {IWL_PCI_DEVICE(0x9DF0, 0x0234, iwl9560_2ac_cfg_soc)},
616 {IWL_PCI_DEVICE(0x9DF0, 0x0238, iwl9560_2ac_cfg_soc)},
617 {IWL_PCI_DEVICE(0x9DF0, 0x023C, iwl9560_2ac_cfg_soc)},
618 {IWL_PCI_DEVICE(0x9DF0, 0x0260, iwl9461_2ac_cfg_soc)},
619 {IWL_PCI_DEVICE(0x9DF0, 0x0264, iwl9461_2ac_cfg_soc)},
620 {IWL_PCI_DEVICE(0x9DF0, 0x02A0, iwl9462_2ac_cfg_soc)},
621 {IWL_PCI_DEVICE(0x9DF0, 0x02A4, iwl9462_2ac_cfg_soc)},
622 {IWL_PCI_DEVICE(0x9DF0, 0x0310, iwl9460_2ac_cfg_soc)},
623 {IWL_PCI_DEVICE(0x9DF0, 0x0410, iwl9460_2ac_cfg_soc)},
624 {IWL_PCI_DEVICE(0x9DF0, 0x0510, iwl9460_2ac_cfg_soc)},
625 {IWL_PCI_DEVICE(0x9DF0, 0x0610, iwl9460_2ac_cfg_soc)},
626 {IWL_PCI_DEVICE(0x9DF0, 0x0710, iwl9460_2ac_cfg_soc)},
627 {IWL_PCI_DEVICE(0x9DF0, 0x0A10, iwl9460_2ac_cfg_soc)},
628 {IWL_PCI_DEVICE(0x9DF0, 0x2010, iwl9460_2ac_cfg_soc)},
629 {IWL_PCI_DEVICE(0x9DF0, 0x2A10, iwl9460_2ac_cfg_soc)},
630 {IWL_PCI_DEVICE(0x9DF0, 0x4030, iwl9560_2ac_cfg_soc)},
631 {IWL_PCI_DEVICE(0x9DF0, 0x4034, iwl9560_2ac_cfg_soc)},
632 {IWL_PCI_DEVICE(0x9DF0, 0x40A4, iwl9462_2ac_cfg_soc)},
633 {IWL_PCI_DEVICE(0xA370, 0x0030, iwl9560_2ac_cfg_soc)},
634 {IWL_PCI_DEVICE(0xA370, 0x0034, iwl9560_2ac_cfg_soc)},
635 {IWL_PCI_DEVICE(0xA370, 0x0038, iwl9560_2ac_cfg_soc)},
636 {IWL_PCI_DEVICE(0xA370, 0x003C, iwl9560_2ac_cfg_soc)},
637 {IWL_PCI_DEVICE(0xA370, 0x0060, iwl9460_2ac_cfg_soc)},
638 {IWL_PCI_DEVICE(0xA370, 0x0064, iwl9461_2ac_cfg_soc)},
639 {IWL_PCI_DEVICE(0xA370, 0x00A0, iwl9462_2ac_cfg_soc)},
640 {IWL_PCI_DEVICE(0xA370, 0x00A4, iwl9462_2ac_cfg_soc)},
641 {IWL_PCI_DEVICE(0xA370, 0x0230, iwl9560_2ac_cfg_soc)},
642 {IWL_PCI_DEVICE(0xA370, 0x0234, iwl9560_2ac_cfg_soc)},
643 {IWL_PCI_DEVICE(0xA370, 0x0238, iwl9560_2ac_cfg_soc)},
644 {IWL_PCI_DEVICE(0xA370, 0x023C, iwl9560_2ac_cfg_soc)},
645 {IWL_PCI_DEVICE(0xA370, 0x0260, iwl9461_2ac_cfg_soc)},
646 {IWL_PCI_DEVICE(0xA370, 0x0264, iwl9461_2ac_cfg_soc)},
647 {IWL_PCI_DEVICE(0xA370, 0x02A0, iwl9462_2ac_cfg_soc)},
648 {IWL_PCI_DEVICE(0xA370, 0x02A4, iwl9462_2ac_cfg_soc)},
649 {IWL_PCI_DEVICE(0xA370, 0x1030, iwl9560_2ac_cfg_soc)},
650 {IWL_PCI_DEVICE(0xA370, 0x4030, iwl9560_2ac_cfg_soc)},
651 {IWL_PCI_DEVICE(0xA370, 0x4034, iwl9560_2ac_cfg_soc)},
652 {IWL_PCI_DEVICE(0xA370, 0x40A4, iwl9462_2ac_cfg_soc)},
579 653
580/* a000 Series */ 654/* a000 Series */
581 {IWL_PCI_DEVICE(0x2720, 0x0A10, iwla000_2ac_cfg_hr_cdb)}, 655 {IWL_PCI_DEVICE(0x2720, 0x0A10, iwla000_2ac_cfg_hr_cdb)},