summaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless
diff options
context:
space:
mode:
authorLuca Coelho <luciano.coelho@intel.com>2019-07-08 11:55:34 -0400
committerKalle Valo <kvalo@codeaurora.org>2019-07-15 13:46:00 -0400
commita7d544d63120061f89459585f06ca44d30842a22 (patch)
tree700b153e30950690546fc888b2e454187642bf03 /drivers/net/wireless
parentffcb60a54f245528e1d49f957ca2d20d6079577c (diff)
iwlwifi: pcie: add support for qu c-step devices
Add support for C-step devices. Currently we don't have a nice way of matching the step and choosing the proper configuration, so we need to switch the config structs one by one. Cc: stable@vger.kernel.org Signed-off-by: Luca Coelho <luciano.coelho@intel.com> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Diffstat (limited to 'drivers/net/wireless')
-rw-r--r--drivers/net/wireless/intel/iwlwifi/cfg/22000.c53
-rw-r--r--drivers/net/wireless/intel/iwlwifi/iwl-config.h7
-rw-r--r--drivers/net/wireless/intel/iwlwifi/iwl-csr.h2
-rw-r--r--drivers/net/wireless/intel/iwlwifi/pcie/drv.c21
4 files changed, 83 insertions, 0 deletions
diff --git a/drivers/net/wireless/intel/iwlwifi/cfg/22000.c b/drivers/net/wireless/intel/iwlwifi/cfg/22000.c
index 93526dfaf791..1f500cddb3a7 100644
--- a/drivers/net/wireless/intel/iwlwifi/cfg/22000.c
+++ b/drivers/net/wireless/intel/iwlwifi/cfg/22000.c
@@ -80,7 +80,9 @@
80#define IWL_22000_QU_B_HR_B_FW_PRE "iwlwifi-Qu-b0-hr-b0-" 80#define IWL_22000_QU_B_HR_B_FW_PRE "iwlwifi-Qu-b0-hr-b0-"
81#define IWL_22000_HR_B_FW_PRE "iwlwifi-QuQnj-b0-hr-b0-" 81#define IWL_22000_HR_B_FW_PRE "iwlwifi-QuQnj-b0-hr-b0-"
82#define IWL_22000_HR_A0_FW_PRE "iwlwifi-QuQnj-a0-hr-a0-" 82#define IWL_22000_HR_A0_FW_PRE "iwlwifi-QuQnj-a0-hr-a0-"
83#define IWL_QU_C_HR_B_FW_PRE "iwlwifi-Qu-c0-hr-b0-"
83#define IWL_QU_B_JF_B_FW_PRE "iwlwifi-Qu-b0-jf-b0-" 84#define IWL_QU_B_JF_B_FW_PRE "iwlwifi-Qu-b0-jf-b0-"
85#define IWL_QU_C_JF_B_FW_PRE "iwlwifi-Qu-c0-jf-b0-"
84#define IWL_QUZ_A_HR_B_FW_PRE "iwlwifi-QuZ-a0-hr-b0-" 86#define IWL_QUZ_A_HR_B_FW_PRE "iwlwifi-QuZ-a0-hr-b0-"
85#define IWL_QUZ_A_JF_B_FW_PRE "iwlwifi-QuZ-a0-jf-b0-" 87#define IWL_QUZ_A_JF_B_FW_PRE "iwlwifi-QuZ-a0-jf-b0-"
86#define IWL_QNJ_B_JF_B_FW_PRE "iwlwifi-QuQnj-b0-jf-b0-" 88#define IWL_QNJ_B_JF_B_FW_PRE "iwlwifi-QuQnj-b0-jf-b0-"
@@ -109,6 +111,8 @@
109 IWL_QUZ_A_HR_B_FW_PRE __stringify(api) ".ucode" 111 IWL_QUZ_A_HR_B_FW_PRE __stringify(api) ".ucode"
110#define IWL_QUZ_A_JF_B_MODULE_FIRMWARE(api) \ 112#define IWL_QUZ_A_JF_B_MODULE_FIRMWARE(api) \
111 IWL_QUZ_A_JF_B_FW_PRE __stringify(api) ".ucode" 113 IWL_QUZ_A_JF_B_FW_PRE __stringify(api) ".ucode"
114#define IWL_QU_C_HR_B_MODULE_FIRMWARE(api) \
115 IWL_QU_C_HR_B_FW_PRE __stringify(api) ".ucode"
112#define IWL_QU_B_JF_B_MODULE_FIRMWARE(api) \ 116#define IWL_QU_B_JF_B_MODULE_FIRMWARE(api) \
113 IWL_QU_B_JF_B_FW_PRE __stringify(api) ".ucode" 117 IWL_QU_B_JF_B_FW_PRE __stringify(api) ".ucode"
114#define IWL_QNJ_B_JF_B_MODULE_FIRMWARE(api) \ 118#define IWL_QNJ_B_JF_B_MODULE_FIRMWARE(api) \
@@ -256,6 +260,30 @@ const struct iwl_cfg iwl_ax201_cfg_qu_hr = {
256 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT, 260 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
257}; 261};
258 262
263const struct iwl_cfg iwl_ax101_cfg_qu_c0_hr_b0 = {
264 .name = "Intel(R) Wi-Fi 6 AX101",
265 .fw_name_pre = IWL_QU_C_HR_B_FW_PRE,
266 IWL_DEVICE_22500,
267 /*
268 * This device doesn't support receiving BlockAck with a large bitmap
269 * so we need to restrict the size of transmitted aggregation to the
270 * HT size; mac80211 would otherwise pick the HE max (256) by default.
271 */
272 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
273};
274
275const struct iwl_cfg iwl_ax201_cfg_qu_c0_hr_b0 = {
276 .name = "Intel(R) Wi-Fi 6 AX201 160MHz",
277 .fw_name_pre = IWL_QU_C_HR_B_FW_PRE,
278 IWL_DEVICE_22500,
279 /*
280 * This device doesn't support receiving BlockAck with a large bitmap
281 * so we need to restrict the size of transmitted aggregation to the
282 * HT size; mac80211 would otherwise pick the HE max (256) by default.
283 */
284 .max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
285};
286
259const struct iwl_cfg iwl_ax101_cfg_quz_hr = { 287const struct iwl_cfg iwl_ax101_cfg_quz_hr = {
260 .name = "Intel(R) Wi-Fi 6 AX101", 288 .name = "Intel(R) Wi-Fi 6 AX101",
261 .fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE, 289 .fw_name_pre = IWL_QUZ_A_HR_B_FW_PRE,
@@ -372,6 +400,30 @@ const struct iwl_cfg iwl9560_2ac_160_cfg_qu_b0_jf_b0 = {
372 IWL_DEVICE_22500, 400 IWL_DEVICE_22500,
373}; 401};
374 402
403const struct iwl_cfg iwl9461_2ac_cfg_qu_c0_jf_b0 = {
404 .name = "Intel(R) Wireless-AC 9461",
405 .fw_name_pre = IWL_QU_C_JF_B_FW_PRE,
406 IWL_DEVICE_22500,
407};
408
409const struct iwl_cfg iwl9462_2ac_cfg_qu_c0_jf_b0 = {
410 .name = "Intel(R) Wireless-AC 9462",
411 .fw_name_pre = IWL_QU_C_JF_B_FW_PRE,
412 IWL_DEVICE_22500,
413};
414
415const struct iwl_cfg iwl9560_2ac_cfg_qu_c0_jf_b0 = {
416 .name = "Intel(R) Wireless-AC 9560",
417 .fw_name_pre = IWL_QU_C_JF_B_FW_PRE,
418 IWL_DEVICE_22500,
419};
420
421const struct iwl_cfg iwl9560_2ac_160_cfg_qu_c0_jf_b0 = {
422 .name = "Intel(R) Wireless-AC 9560 160MHz",
423 .fw_name_pre = IWL_QU_C_JF_B_FW_PRE,
424 IWL_DEVICE_22500,
425};
426
375const struct iwl_cfg iwl9560_2ac_cfg_qnj_jf_b0 = { 427const struct iwl_cfg iwl9560_2ac_cfg_qnj_jf_b0 = {
376 .name = "Intel(R) Wireless-AC 9560 160MHz", 428 .name = "Intel(R) Wireless-AC 9560 160MHz",
377 .fw_name_pre = IWL_QNJ_B_JF_B_FW_PRE, 429 .fw_name_pre = IWL_QNJ_B_JF_B_FW_PRE,
@@ -590,6 +642,7 @@ MODULE_FIRMWARE(IWL_22000_HR_A_F0_QNJ_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
590MODULE_FIRMWARE(IWL_22000_HR_B_F0_QNJ_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX)); 642MODULE_FIRMWARE(IWL_22000_HR_B_F0_QNJ_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
591MODULE_FIRMWARE(IWL_22000_HR_B_QNJ_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX)); 643MODULE_FIRMWARE(IWL_22000_HR_B_QNJ_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
592MODULE_FIRMWARE(IWL_22000_HR_A0_QNJ_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX)); 644MODULE_FIRMWARE(IWL_22000_HR_A0_QNJ_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
645MODULE_FIRMWARE(IWL_QU_C_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
593MODULE_FIRMWARE(IWL_QU_B_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX)); 646MODULE_FIRMWARE(IWL_QU_B_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
594MODULE_FIRMWARE(IWL_QUZ_A_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX)); 647MODULE_FIRMWARE(IWL_QUZ_A_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
595MODULE_FIRMWARE(IWL_QUZ_A_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX)); 648MODULE_FIRMWARE(IWL_QUZ_A_JF_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-config.h b/drivers/net/wireless/intel/iwlwifi/iwl-config.h
index bc267bd2c3b0..1c1bf1b281cd 100644
--- a/drivers/net/wireless/intel/iwlwifi/iwl-config.h
+++ b/drivers/net/wireless/intel/iwlwifi/iwl-config.h
@@ -565,10 +565,13 @@ extern const struct iwl_cfg iwl22000_2ac_cfg_hr;
565extern const struct iwl_cfg iwl22000_2ac_cfg_hr_cdb; 565extern const struct iwl_cfg iwl22000_2ac_cfg_hr_cdb;
566extern const struct iwl_cfg iwl22000_2ac_cfg_jf; 566extern const struct iwl_cfg iwl22000_2ac_cfg_jf;
567extern const struct iwl_cfg iwl_ax101_cfg_qu_hr; 567extern const struct iwl_cfg iwl_ax101_cfg_qu_hr;
568extern const struct iwl_cfg iwl_ax101_cfg_qu_c0_hr_b0;
568extern const struct iwl_cfg iwl_ax101_cfg_quz_hr; 569extern const struct iwl_cfg iwl_ax101_cfg_quz_hr;
569extern const struct iwl_cfg iwl22000_2ax_cfg_hr; 570extern const struct iwl_cfg iwl22000_2ax_cfg_hr;
570extern const struct iwl_cfg iwl_ax200_cfg_cc; 571extern const struct iwl_cfg iwl_ax200_cfg_cc;
571extern const struct iwl_cfg iwl_ax201_cfg_qu_hr; 572extern const struct iwl_cfg iwl_ax201_cfg_qu_hr;
573extern const struct iwl_cfg iwl_ax201_cfg_qu_hr;
574extern const struct iwl_cfg iwl_ax201_cfg_qu_c0_hr_b0;
572extern const struct iwl_cfg iwl_ax201_cfg_quz_hr; 575extern const struct iwl_cfg iwl_ax201_cfg_quz_hr;
573extern const struct iwl_cfg iwl_ax1650i_cfg_quz_hr; 576extern const struct iwl_cfg iwl_ax1650i_cfg_quz_hr;
574extern const struct iwl_cfg iwl_ax1650s_cfg_quz_hr; 577extern const struct iwl_cfg iwl_ax1650s_cfg_quz_hr;
@@ -580,6 +583,10 @@ extern const struct iwl_cfg iwl9461_2ac_cfg_qu_b0_jf_b0;
580extern const struct iwl_cfg iwl9462_2ac_cfg_qu_b0_jf_b0; 583extern const struct iwl_cfg iwl9462_2ac_cfg_qu_b0_jf_b0;
581extern const struct iwl_cfg iwl9560_2ac_cfg_qu_b0_jf_b0; 584extern const struct iwl_cfg iwl9560_2ac_cfg_qu_b0_jf_b0;
582extern const struct iwl_cfg iwl9560_2ac_160_cfg_qu_b0_jf_b0; 585extern const struct iwl_cfg iwl9560_2ac_160_cfg_qu_b0_jf_b0;
586extern const struct iwl_cfg iwl9461_2ac_cfg_qu_c0_jf_b0;
587extern const struct iwl_cfg iwl9462_2ac_cfg_qu_c0_jf_b0;
588extern const struct iwl_cfg iwl9560_2ac_cfg_qu_c0_jf_b0;
589extern const struct iwl_cfg iwl9560_2ac_160_cfg_qu_c0_jf_b0;
583extern const struct iwl_cfg killer1550i_2ac_cfg_qu_b0_jf_b0; 590extern const struct iwl_cfg killer1550i_2ac_cfg_qu_b0_jf_b0;
584extern const struct iwl_cfg killer1550s_2ac_cfg_qu_b0_jf_b0; 591extern const struct iwl_cfg killer1550s_2ac_cfg_qu_b0_jf_b0;
585extern const struct iwl_cfg iwl22000_2ax_cfg_jf; 592extern const struct iwl_cfg iwl22000_2ax_cfg_jf;
diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-csr.h b/drivers/net/wireless/intel/iwlwifi/iwl-csr.h
index 93da96a7247c..cb4c5514a556 100644
--- a/drivers/net/wireless/intel/iwlwifi/iwl-csr.h
+++ b/drivers/net/wireless/intel/iwlwifi/iwl-csr.h
@@ -328,6 +328,8 @@ enum {
328#define CSR_HW_REV_TYPE_NONE (0x00001F0) 328#define CSR_HW_REV_TYPE_NONE (0x00001F0)
329#define CSR_HW_REV_TYPE_QNJ (0x0000360) 329#define CSR_HW_REV_TYPE_QNJ (0x0000360)
330#define CSR_HW_REV_TYPE_QNJ_B0 (0x0000364) 330#define CSR_HW_REV_TYPE_QNJ_B0 (0x0000364)
331#define CSR_HW_REV_TYPE_QU_B0 (0x0000334)
332#define CSR_HW_REV_TYPE_QU_C0 (0x0000338)
331#define CSR_HW_REV_TYPE_QUZ (0x0000354) 333#define CSR_HW_REV_TYPE_QUZ (0x0000354)
332#define CSR_HW_REV_TYPE_HR_CDB (0x0000340) 334#define CSR_HW_REV_TYPE_HR_CDB (0x0000340)
333#define CSR_HW_REV_TYPE_SO (0x0000370) 335#define CSR_HW_REV_TYPE_SO (0x0000370)
diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/drv.c b/drivers/net/wireless/intel/iwlwifi/pcie/drv.c
index fe645380bd2f..ea2a03d4bf55 100644
--- a/drivers/net/wireless/intel/iwlwifi/pcie/drv.c
+++ b/drivers/net/wireless/intel/iwlwifi/pcie/drv.c
@@ -1039,6 +1039,27 @@ static int iwl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
1039 } 1039 }
1040 iwl_trans->cfg = cfg; 1040 iwl_trans->cfg = cfg;
1041 } 1041 }
1042
1043 /*
1044 * This is a hack to switch from Qu B0 to Qu C0. We need to
1045 * do this for all cfgs that use Qu B0. All this code is in
1046 * urgent need for a refactor, but for now this is the easiest
1047 * thing to do to support Qu C-step.
1048 */
1049 if (iwl_trans->hw_rev == CSR_HW_REV_TYPE_QU_C0) {
1050 if (iwl_trans->cfg == &iwl_ax101_cfg_qu_hr)
1051 iwl_trans->cfg = &iwl_ax101_cfg_qu_c0_hr_b0;
1052 else if (iwl_trans->cfg == &iwl_ax201_cfg_qu_hr)
1053 iwl_trans->cfg = &iwl_ax201_cfg_qu_c0_hr_b0;
1054 else if (iwl_trans->cfg == &iwl9461_2ac_cfg_qu_b0_jf_b0)
1055 iwl_trans->cfg = &iwl9461_2ac_cfg_qu_c0_jf_b0;
1056 else if (iwl_trans->cfg == &iwl9462_2ac_cfg_qu_b0_jf_b0)
1057 iwl_trans->cfg = &iwl9462_2ac_cfg_qu_c0_jf_b0;
1058 else if (iwl_trans->cfg == &iwl9560_2ac_cfg_qu_b0_jf_b0)
1059 iwl_trans->cfg = &iwl9560_2ac_cfg_qu_c0_jf_b0;
1060 else if (iwl_trans->cfg == &iwl9560_2ac_160_cfg_qu_b0_jf_b0)
1061 iwl_trans->cfg = &iwl9560_2ac_160_cfg_qu_c0_jf_b0;
1062 }
1042#endif 1063#endif
1043 1064
1044 pci_set_drvdata(pdev, iwl_trans); 1065 pci_set_drvdata(pdev, iwl_trans);