From fe80b0e53d362c0ac2a14fca79d5d61497017129 Mon Sep 17 00:00:00 2001 From: Johannes Berg Date: Fri, 9 May 2025 13:44:46 +0300 Subject: [PATCH 01/16] wifi: iwlwifi: cfg: clean up Sc/Dr/Br configs For now, the WH and PE radios require the same config as FM, so just add a #define for those instead of copying the data. Since this is true, Sc/Dr/Br all used the same configs for all RF types, but that's confusing, so now use the defined WH/PE names for the correct combinations. We can also now enable the unit test that ensures we have no duplicate RF configs. Signed-off-by: Johannes Berg Link: https://patch.msgid.link/20250509104454.2582160-8-miriam.rachel.korenblit@intel.com Signed-off-by: Miri Korenblit --- drivers/net/wireless/intel/iwlwifi/cfg/dr.c | 22 ------------ drivers/net/wireless/intel/iwlwifi/cfg/sc.c | 24 ------------- .../net/wireless/intel/iwlwifi/iwl-config.h | 8 ++--- drivers/net/wireless/intel/iwlwifi/pcie/drv.c | 35 ++++++++++--------- .../wireless/intel/iwlwifi/tests/devinfo.c | 8 ----- 5 files changed, 22 insertions(+), 75 deletions(-) diff --git a/drivers/net/wireless/intel/iwlwifi/cfg/dr.c b/drivers/net/wireless/intel/iwlwifi/cfg/dr.c index 91da09423158..ecf36a8a1135 100644 --- a/drivers/net/wireless/intel/iwlwifi/cfg/dr.c +++ b/drivers/net/wireless/intel/iwlwifi/cfg/dr.c @@ -14,9 +14,6 @@ /* Lowest firmware API version supported */ #define IWL_DR_UCODE_API_MIN 97 -/* NVM versions */ -#define IWL_DR_NVM_VERSION 0x0a1d - /* Memory offsets and lengths */ #define IWL_DR_SMEM_OFFSET 0x400000 #define IWL_DR_SMEM_LEN 0xD0000 @@ -86,21 +83,6 @@ static const struct iwl_family_base_params iwl_dr_base = { .ucode_api_min = IWL_DR_UCODE_API_MIN, }; -#define IWL_DEVICE_DR \ - .led_mode = IWL_LED_RF_STATE, \ - .non_shared_ant = ANT_B, \ - .vht_mu_mimo_supported = true, \ - .nvm_ver = IWL_DR_NVM_VERSION, \ - .nvm_type = IWL_NVM_EXT, \ - .uhb_supported = true, \ - .num_rbds = IWL_NUM_RBDS_EHT, \ - .ht_params = { \ - .stbc = true, \ - .ldpc = true, \ - .ht40_bands = BIT(NL80211_BAND_2GHZ) | \ - BIT(NL80211_BAND_5GHZ), \ - } - const struct iwl_mac_cfg iwl_dr_mac_cfg = { .device_family = IWL_DEVICE_FAMILY_DR, .base = &iwl_dr_base, @@ -115,10 +97,6 @@ const struct iwl_mac_cfg iwl_dr_mac_cfg = { const char iwl_dr_name[] = "Intel(R) TBD Dr device"; -const struct iwl_cfg iwl_cfg_dr = { - IWL_DEVICE_DR, -}; - const struct iwl_mac_cfg iwl_br_mac_cfg = { .device_family = IWL_DEVICE_FAMILY_DR, .base = &iwl_dr_base, diff --git a/drivers/net/wireless/intel/iwlwifi/cfg/sc.c b/drivers/net/wireless/intel/iwlwifi/cfg/sc.c index 6db25355df42..5ccb8fff01f4 100644 --- a/drivers/net/wireless/intel/iwlwifi/cfg/sc.c +++ b/drivers/net/wireless/intel/iwlwifi/cfg/sc.c @@ -93,21 +93,6 @@ static const struct iwl_family_base_params iwl_sc_base = { .ucode_api_min = IWL_SC_UCODE_API_MIN, }; -#define IWL_DEVICE_SC \ - .led_mode = IWL_LED_RF_STATE, \ - .non_shared_ant = ANT_B, \ - .vht_mu_mimo_supported = true, \ - .nvm_ver = IWL_SC_NVM_VERSION, \ - .nvm_type = IWL_NVM_EXT, \ - .uhb_supported = true, \ - .num_rbds = IWL_NUM_RBDS_EHT, \ - .ht_params = { \ - .stbc = true, \ - .ldpc = true, \ - .ht40_bands = BIT(NL80211_BAND_2GHZ) | \ - BIT(NL80211_BAND_5GHZ), \ - } - const struct iwl_mac_cfg iwl_sc_mac_cfg = { .device_family = IWL_DEVICE_FAMILY_SC, .base = &iwl_sc_base, @@ -123,15 +108,6 @@ const struct iwl_mac_cfg iwl_sc_mac_cfg = { const char iwl_sp_name[] = "Intel(R) Wi-Fi 7 BE213 160MHz"; const char iwl_pe_name[] = "Intel(R) Wi-Fi 8 BN201"; -const struct iwl_cfg iwl_cfg_sc = { - IWL_DEVICE_SC, -}; - -const struct iwl_cfg iwl_cfg_sc_160mhz = { - IWL_DEVICE_SC, - .bw_limit = 160, -}; - IWL_FW_AND_PNVM(IWL_SC_A_FM_B_FW_PRE, IWL_SC_UCODE_API_MAX); IWL_FW_AND_PNVM(IWL_SC_A_FM_C_FW_PRE, IWL_SC_UCODE_API_MAX); MODULE_FIRMWARE(IWL_SC_A_HR_A_FW_MODULE_FIRMWARE(IWL_SC_UCODE_API_MAX)); diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-config.h b/drivers/net/wireless/intel/iwlwifi/iwl-config.h index 541cd5427d6b..ecf9e7f8e00f 100644 --- a/drivers/net/wireless/intel/iwlwifi/iwl-config.h +++ b/drivers/net/wireless/intel/iwlwifi/iwl-config.h @@ -696,10 +696,10 @@ extern const struct iwl_cfg iwl_rf_gf; #if IS_ENABLED(CONFIG_IWLMLD) extern const struct iwl_cfg iwl_rf_fm; extern const struct iwl_cfg iwl_rf_fm_160mhz; - -extern const struct iwl_cfg iwl_cfg_sc; -extern const struct iwl_cfg iwl_cfg_sc_160mhz; -extern const struct iwl_cfg iwl_cfg_dr; +#define iwl_rf_wh iwl_rf_fm +#define iwl_rf_wh_160mhz iwl_rf_fm_160mhz +#define iwl_rf_pe iwl_rf_fm +#define iwl_rf_pe_160mhz iwl_rf_fm_160mhz #endif /* CONFIG_IWLMLD */ #endif /* __IWL_CONFIG_H__ */ diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/drv.c b/drivers/net/wireless/intel/iwlwifi/pcie/drv.c index 1aa3508ed2ef..0d26fd0168a5 100644 --- a/drivers/net/wireless/intel/iwlwifi/pcie/drv.c +++ b/drivers/net/wireless/intel/iwlwifi/pcie/drv.c @@ -1474,33 +1474,34 @@ VISIBLE_IF_IWLWIFI_KUNIT const struct iwl_dev_info iwl_dev_info_table[] = { BW_LIMITED, NO_CDB), /* Sc */ - IWL_DEV_INFO(iwl_cfg_sc, iwl_ax211_name, MAC_TYPE(SC), RF_TYPE(GF)), - IWL_DEV_INFO(iwl_cfg_sc, iwl_fm_name, MAC_TYPE(SC), RF_TYPE(FM)), - IWL_DEV_INFO(iwl_cfg_sc, iwl_wh_name, MAC_TYPE(SC), RF_TYPE(WH), + IWL_DEV_INFO(iwl_rf_gf, iwl_ax211_name, MAC_TYPE(SC), RF_TYPE(GF)), + IWL_DEV_INFO(iwl_rf_fm, iwl_fm_name, MAC_TYPE(SC), RF_TYPE(FM)), + IWL_DEV_INFO(iwl_rf_wh, iwl_wh_name, MAC_TYPE(SC), RF_TYPE(WH), BW_NOT_LIMITED), - IWL_DEV_INFO(iwl_cfg_sc_160mhz, iwl_sp_name, MAC_TYPE(SC), RF_TYPE(WH), + IWL_DEV_INFO(iwl_rf_wh_160mhz, iwl_sp_name, MAC_TYPE(SC), RF_TYPE(WH), BW_LIMITED), - IWL_DEV_INFO(iwl_cfg_sc, iwl_pe_name, MAC_TYPE(SC), RF_TYPE(PE)), - IWL_DEV_INFO(iwl_cfg_sc, iwl_ax211_name, MAC_TYPE(SC2), RF_TYPE(GF)), - IWL_DEV_INFO(iwl_cfg_sc, iwl_fm_name, MAC_TYPE(SC2), RF_TYPE(FM)), - IWL_DEV_INFO(iwl_cfg_sc, iwl_wh_name, MAC_TYPE(SC2), RF_TYPE(WH), + IWL_DEV_INFO(iwl_rf_pe, iwl_pe_name, MAC_TYPE(SC), RF_TYPE(PE)), + IWL_DEV_INFO(iwl_rf_gf, iwl_ax211_name, MAC_TYPE(SC2), RF_TYPE(GF)), + IWL_DEV_INFO(iwl_rf_fm, iwl_fm_name, MAC_TYPE(SC2), RF_TYPE(FM)), + IWL_DEV_INFO(iwl_rf_wh, iwl_wh_name, MAC_TYPE(SC2), RF_TYPE(WH), BW_NOT_LIMITED), - IWL_DEV_INFO(iwl_cfg_sc_160mhz, iwl_sp_name, MAC_TYPE(SC2), RF_TYPE(WH), + IWL_DEV_INFO(iwl_rf_wh_160mhz, iwl_sp_name, MAC_TYPE(SC2), RF_TYPE(WH), BW_LIMITED), - IWL_DEV_INFO(iwl_cfg_sc, iwl_pe_name, MAC_TYPE(SC2), RF_TYPE(PE)), - IWL_DEV_INFO(iwl_cfg_sc, iwl_ax211_name, MAC_TYPE(SC2F), RF_TYPE(GF)), - IWL_DEV_INFO(iwl_cfg_sc, iwl_fm_name, MAC_TYPE(SC2F), RF_TYPE(FM)), - IWL_DEV_INFO(iwl_cfg_sc, iwl_wh_name, MAC_TYPE(SC2F), RF_TYPE(WH), + IWL_DEV_INFO(iwl_rf_pe, iwl_pe_name, MAC_TYPE(SC2), RF_TYPE(PE)), + IWL_DEV_INFO(iwl_rf_gf, iwl_ax211_name, MAC_TYPE(SC2F), RF_TYPE(GF)), + IWL_DEV_INFO(iwl_rf_fm, iwl_fm_name, MAC_TYPE(SC2F), RF_TYPE(FM)), + IWL_DEV_INFO(iwl_rf_wh, iwl_wh_name, MAC_TYPE(SC2F), RF_TYPE(WH), BW_NOT_LIMITED), - IWL_DEV_INFO(iwl_cfg_sc_160mhz, iwl_sp_name, MAC_TYPE(SC2F), RF_TYPE(WH), + IWL_DEV_INFO(iwl_rf_wh_160mhz, iwl_sp_name, MAC_TYPE(SC2F), RF_TYPE(WH), BW_LIMITED), - IWL_DEV_INFO(iwl_cfg_sc, iwl_pe_name, MAC_TYPE(SC2F), RF_TYPE(PE)), + IWL_DEV_INFO(iwl_rf_pe, iwl_pe_name, MAC_TYPE(SC2F), RF_TYPE(PE)), /* Dr */ - IWL_DEV_INFO(iwl_cfg_dr, iwl_dr_name, MAC_TYPE(DR)), + IWL_DEV_INFO(iwl_rf_pe, iwl_dr_name, MAC_TYPE(DR), RF_TYPE(PE)), + IWL_DEV_INFO(iwl_rf_wh, iwl_dr_name, MAC_TYPE(DR), RF_TYPE(WH)), /* Br */ - IWL_DEV_INFO(iwl_cfg_dr, iwl_br_name, MAC_TYPE(BR)), + IWL_DEV_INFO(iwl_rf_pe, iwl_br_name, MAC_TYPE(BR), RF_TYPE(PE)), #endif /* CONFIG_IWLMLD */ }; EXPORT_SYMBOL_IF_IWLWIFI_KUNIT(iwl_dev_info_table); diff --git a/drivers/net/wireless/intel/iwlwifi/tests/devinfo.c b/drivers/net/wireless/intel/iwlwifi/tests/devinfo.c index c86495abf29b..0e6a74abd5e2 100644 --- a/drivers/net/wireless/intel/iwlwifi/tests/devinfo.c +++ b/drivers/net/wireless/intel/iwlwifi/tests/devinfo.c @@ -69,14 +69,6 @@ static void devinfo_no_cfg_dups(struct kunit *test) if (cfg_i == cfg_j) continue; - /* - * allow different MAC type to have the same config - * for better maintenance / file split - */ - if (iwl_dev_info_table[i].mac_type != - iwl_dev_info_table[j].mac_type) - continue; - KUNIT_EXPECT_NE_MSG(test, memcmp(cfg_i, cfg_j, sizeof(*cfg_i)), 0, "identical configs: %ps and %ps\n", -- 2.51.0 From 589ceda64c73c2587b53de046fa163c23bb096d6 Mon Sep 17 00:00:00 2001 From: Johannes Berg Date: Fri, 9 May 2025 13:44:47 +0300 Subject: [PATCH 02/16] wifi: iwlwifi: rename iwl_cfg to iwl_rf_cfg With all the cleanups now, we can rename the structure to better indicate the functionality. For older devices this isn't quite accurate, of course, but it's better to have a name that reflects future use for maintenance. Add some kernel-doc while at it. Signed-off-by: Johannes Berg Link: https://patch.msgid.link/20250509104454.2582160-9-miriam.rachel.korenblit@intel.com Signed-off-by: Miri Korenblit --- drivers/net/wireless/intel/iwlwifi/cfg/1000.c | 8 +- drivers/net/wireless/intel/iwlwifi/cfg/2000.c | 8 +- drivers/net/wireless/intel/iwlwifi/cfg/5000.c | 12 +- drivers/net/wireless/intel/iwlwifi/cfg/6000.c | 28 ++--- drivers/net/wireless/intel/iwlwifi/cfg/7000.c | 14 +-- drivers/net/wireless/intel/iwlwifi/cfg/8000.c | 4 +- .../net/wireless/intel/iwlwifi/cfg/rf-fm.c | 4 +- .../net/wireless/intel/iwlwifi/cfg/rf-gf.c | 2 +- .../net/wireless/intel/iwlwifi/cfg/rf-hr.c | 6 +- .../net/wireless/intel/iwlwifi/cfg/rf-jf.c | 4 +- drivers/net/wireless/intel/iwlwifi/dvm/agn.h | 4 +- drivers/net/wireless/intel/iwlwifi/dvm/dev.h | 3 +- .../net/wireless/intel/iwlwifi/dvm/eeprom.c | 8 +- drivers/net/wireless/intel/iwlwifi/dvm/main.c | 2 +- .../net/wireless/intel/iwlwifi/iwl-config.h | 104 +++++++++--------- drivers/net/wireless/intel/iwlwifi/iwl-drv.c | 4 +- drivers/net/wireless/intel/iwlwifi/iwl-drv.h | 4 +- .../wireless/intel/iwlwifi/iwl-nvm-parse.c | 30 ++--- .../wireless/intel/iwlwifi/iwl-nvm-parse.h | 4 +- .../wireless/intel/iwlwifi/iwl-nvm-utils.c | 2 +- .../net/wireless/intel/iwlwifi/iwl-op-mode.h | 4 +- .../net/wireless/intel/iwlwifi/iwl-trans.h | 2 +- drivers/net/wireless/intel/iwlwifi/mld/mld.c | 4 +- drivers/net/wireless/intel/iwlwifi/mld/mld.h | 4 +- .../wireless/intel/iwlwifi/mld/tests/utils.c | 2 +- drivers/net/wireless/intel/iwlwifi/mvm/mvm.h | 2 +- drivers/net/wireless/intel/iwlwifi/mvm/ops.c | 2 +- .../wireless/intel/iwlwifi/tests/devinfo.c | 4 +- 28 files changed, 141 insertions(+), 138 deletions(-) diff --git a/drivers/net/wireless/intel/iwlwifi/cfg/1000.c b/drivers/net/wireless/intel/iwlwifi/cfg/1000.c index f40fea33e69b..c029e595e7c2 100644 --- a/drivers/net/wireless/intel/iwlwifi/cfg/1000.c +++ b/drivers/net/wireless/intel/iwlwifi/cfg/1000.c @@ -70,7 +70,7 @@ const struct iwl_mac_cfg iwl1000_mac_cfg = { .eeprom_params = &iwl1000_eeprom_params, \ .led_mode = IWL_LED_BLINK -const struct iwl_cfg iwl1000_bgn_cfg = { +const struct iwl_rf_cfg iwl1000_bgn_cfg = { IWL_DEVICE_1000, .ht_params = { .ht_greenfield_support = true, @@ -81,7 +81,7 @@ const struct iwl_cfg iwl1000_bgn_cfg = { const char iwl1000_bgn_name[] = "Intel(R) Centrino(R) Wireless-N 1000 BGN"; -const struct iwl_cfg iwl1000_bg_cfg = { +const struct iwl_rf_cfg iwl1000_bg_cfg = { IWL_DEVICE_1000, }; @@ -99,7 +99,7 @@ const char iwl1000_bg_name[] = "Intel(R) Centrino(R) Wireless-N 1000 BG"; .led_mode = IWL_LED_RF_STATE, \ .rx_with_siso_diversity = true -const struct iwl_cfg iwl100_bgn_cfg = { +const struct iwl_rf_cfg iwl100_bgn_cfg = { IWL_DEVICE_100, .ht_params = { .ht_greenfield_support = true, @@ -110,7 +110,7 @@ const struct iwl_cfg iwl100_bgn_cfg = { const char iwl100_bgn_name[] = "Intel(R) Centrino(R) Wireless-N 100 BGN"; -const struct iwl_cfg iwl100_bg_cfg = { +const struct iwl_rf_cfg iwl100_bg_cfg = { IWL_DEVICE_100, }; diff --git a/drivers/net/wireless/intel/iwlwifi/cfg/2000.c b/drivers/net/wireless/intel/iwlwifi/cfg/2000.c index 33f04c9d05d6..47554a5f406e 100644 --- a/drivers/net/wireless/intel/iwlwifi/cfg/2000.c +++ b/drivers/net/wireless/intel/iwlwifi/cfg/2000.c @@ -97,7 +97,7 @@ const struct iwl_mac_cfg iwl2000_mac_cfg = { .led_mode = IWL_LED_RF_STATE -const struct iwl_cfg iwl2000_2bgn_cfg = { +const struct iwl_rf_cfg iwl2000_2bgn_cfg = { IWL_DEVICE_2000, .ht_params = { .ht_greenfield_support = true, @@ -125,7 +125,7 @@ const struct iwl_mac_cfg iwl2030_mac_cfg = { .eeprom_params = &iwl20x0_eeprom_params, \ .led_mode = IWL_LED_RF_STATE -const struct iwl_cfg iwl2030_2bgn_cfg = { +const struct iwl_rf_cfg iwl2030_2bgn_cfg = { IWL_DEVICE_2030, .ht_params = { .ht_greenfield_support = true, @@ -153,7 +153,7 @@ const struct iwl_mac_cfg iwl105_mac_cfg = { .led_mode = IWL_LED_RF_STATE, \ .rx_with_siso_diversity = true -const struct iwl_cfg iwl105_bgn_cfg = { +const struct iwl_rf_cfg iwl105_bgn_cfg = { IWL_DEVICE_105, .ht_params = { .ht_greenfield_support = true, @@ -182,7 +182,7 @@ const struct iwl_mac_cfg iwl135_mac_cfg = { .led_mode = IWL_LED_RF_STATE, \ .rx_with_siso_diversity = true -const struct iwl_cfg iwl135_bgn_cfg = { +const struct iwl_rf_cfg iwl135_bgn_cfg = { IWL_DEVICE_135, .ht_params = { .ht_greenfield_support = true, diff --git a/drivers/net/wireless/intel/iwlwifi/cfg/5000.c b/drivers/net/wireless/intel/iwlwifi/cfg/5000.c index 79ba0524086a..aaae3b1f5433 100644 --- a/drivers/net/wireless/intel/iwlwifi/cfg/5000.c +++ b/drivers/net/wireless/intel/iwlwifi/cfg/5000.c @@ -69,7 +69,7 @@ const struct iwl_mac_cfg iwl5000_mac_cfg = { .eeprom_params = &iwl5000_eeprom_params, \ .led_mode = IWL_LED_BLINK -const struct iwl_cfg iwl5300_agn_cfg = { +const struct iwl_rf_cfg iwl5300_agn_cfg = { IWL_DEVICE_5000, /* at least EEPROM 0x11A has wrong info */ .valid_tx_ant = ANT_ABC, /* .cfg overwrite */ @@ -82,7 +82,7 @@ const struct iwl_cfg iwl5300_agn_cfg = { const char iwl5300_agn_name[] = "Intel(R) Ultimate N WiFi Link 5300 AGN"; -const struct iwl_cfg iwl5100_n_cfg = { +const struct iwl_rf_cfg iwl5100_n_cfg = { IWL_DEVICE_5000, .valid_tx_ant = ANT_B, /* .cfg overwrite */ .valid_rx_ant = ANT_AB, /* .cfg overwrite */ @@ -94,7 +94,7 @@ const struct iwl_cfg iwl5100_n_cfg = { const char iwl5100_bgn_name[] = "Intel(R) WiFi Link 5100 BGN"; -const struct iwl_cfg iwl5100_abg_cfg = { +const struct iwl_rf_cfg iwl5100_abg_cfg = { IWL_DEVICE_5000, .valid_tx_ant = ANT_B, /* .cfg overwrite */ .valid_rx_ant = ANT_AB, /* .cfg overwrite */ @@ -103,7 +103,7 @@ const struct iwl_cfg iwl5100_abg_cfg = { const char iwl5100_abg_name[] = "Intel(R) WiFi Link 5100 ABG"; const char iwl5100_agn_name[] = "Intel(R) WiFi Link 5100 AGN"; -const struct iwl_cfg iwl5350_agn_cfg = { +const struct iwl_rf_cfg iwl5350_agn_cfg = { .fw_name_pre = IWL5000_FW_PRE, .ucode_api_max = IWL5000_UCODE_API_MAX, .ucode_api_min = IWL5000_UCODE_API_MIN, @@ -139,7 +139,7 @@ const struct iwl_mac_cfg iwl5150_mac_cfg = { .led_mode = IWL_LED_BLINK, \ .internal_wimax_coex = true -const struct iwl_cfg iwl5150_agn_cfg = { +const struct iwl_rf_cfg iwl5150_agn_cfg = { IWL_DEVICE_5150, .ht_params = { .ht_greenfield_support = true, @@ -149,7 +149,7 @@ const struct iwl_cfg iwl5150_agn_cfg = { const char iwl5150_agn_name[] = "Intel(R) WiMAX/WiFi Link 5150 AGN"; -const struct iwl_cfg iwl5150_abg_cfg = { +const struct iwl_rf_cfg iwl5150_abg_cfg = { IWL_DEVICE_5150, }; diff --git a/drivers/net/wireless/intel/iwlwifi/cfg/6000.c b/drivers/net/wireless/intel/iwlwifi/cfg/6000.c index 94f042760359..ab13394896e0 100644 --- a/drivers/net/wireless/intel/iwlwifi/cfg/6000.c +++ b/drivers/net/wireless/intel/iwlwifi/cfg/6000.c @@ -117,7 +117,7 @@ const struct iwl_mac_cfg iwl6005_mac_cfg = { .eeprom_params = &iwl6000_eeprom_params, \ .led_mode = IWL_LED_RF_STATE -const struct iwl_cfg iwl6005_n_cfg = { +const struct iwl_rf_cfg iwl6005_n_cfg = { IWL_DEVICE_6005, .ht_params = { .ht_greenfield_support = true, @@ -132,7 +132,7 @@ const char iwl6005_2agn_d_name[] = "Intel(R) Centrino(R) Advanced-N 6205D AGN"; const char iwl6005_2agn_mow1_name[] = "Intel(R) Centrino(R) Advanced-N 6206 AGN"; const char iwl6005_2agn_mow2_name[] = "Intel(R) Centrino(R) Advanced-N 6207 AGN"; -const struct iwl_cfg iwl6005_non_n_cfg = { +const struct iwl_rf_cfg iwl6005_non_n_cfg = { IWL_DEVICE_6005, }; @@ -155,7 +155,7 @@ const struct iwl_mac_cfg iwl6030_mac_cfg = { .eeprom_params = &iwl6000_eeprom_params, \ .led_mode = IWL_LED_RF_STATE -const struct iwl_cfg iwl6030_n_cfg = { +const struct iwl_rf_cfg iwl6030_n_cfg = { IWL_DEVICE_6030, .ht_params = { .ht_greenfield_support = true, @@ -169,7 +169,7 @@ const char iwl6030_2bgn_name[] = "Intel(R) Centrino(R) Advanced-N 6230 BGN"; const char iwl1030_bgn_name[] = "Intel(R) Centrino(R) Wireless-N 1030 BGN"; const char iwl1030_bg_name[] = "Intel(R) Centrino(R) Wireless-N 1030 BG"; -const struct iwl_cfg iwl6030_non_n_cfg = { +const struct iwl_rf_cfg iwl6030_non_n_cfg = { IWL_DEVICE_6030, }; @@ -187,7 +187,7 @@ const char iwl6030_2bg_name[] = "Intel(R) Centrino(R) Advanced-N 6230 BG"; .eeprom_params = &iwl6000_eeprom_params, \ .led_mode = IWL_LED_RF_STATE -const struct iwl_cfg iwl6035_2agn_cfg = { +const struct iwl_rf_cfg iwl6035_2agn_cfg = { IWL_DEVICE_6035, .ht_params = { .ht_greenfield_support = true, @@ -199,7 +199,7 @@ const struct iwl_cfg iwl6035_2agn_cfg = { const char iwl6035_2agn_name[] = "Intel(R) Centrino(R) Advanced-N 6235 AGN"; const char iwl6035_2agn_sff_name[] = "Intel(R) Centrino(R) Ultimate-N 6235 AGN"; -const struct iwl_cfg iwl130_bgn_cfg = { +const struct iwl_rf_cfg iwl130_bgn_cfg = { IWL_DEVICE_6030, .ht_params = { .ht_greenfield_support = true, @@ -211,7 +211,7 @@ const struct iwl_cfg iwl130_bgn_cfg = { const char iwl130_bgn_name[] = "Intel(R) Centrino(R) Wireless-N 130 BGN"; -const struct iwl_cfg iwl130_bg_cfg = { +const struct iwl_rf_cfg iwl130_bg_cfg = { IWL_DEVICE_6030, .rx_with_siso_diversity = true, }; @@ -239,7 +239,7 @@ const struct iwl_mac_cfg iwl6000i_mac_cfg = { .eeprom_params = &iwl6000_eeprom_params, \ .led_mode = IWL_LED_BLINK -const struct iwl_cfg iwl6000i_2agn_cfg = { +const struct iwl_rf_cfg iwl6000i_2agn_cfg = { IWL_DEVICE_6000i, .ht_params = { .ht_greenfield_support = true, @@ -250,7 +250,7 @@ const struct iwl_cfg iwl6000i_2agn_cfg = { const char iwl6000i_2agn_name[] = "Intel(R) Centrino(R) Advanced-N 6200 AGN"; -const struct iwl_cfg iwl6000i_non_n_cfg = { +const struct iwl_rf_cfg iwl6000i_non_n_cfg = { IWL_DEVICE_6000i, }; @@ -276,7 +276,7 @@ const struct iwl_mac_cfg iwl6050_mac_cfg = { .led_mode = IWL_LED_BLINK, \ .internal_wimax_coex = true -const struct iwl_cfg iwl6050_2agn_cfg = { +const struct iwl_rf_cfg iwl6050_2agn_cfg = { IWL_DEVICE_6050, .ht_params = { .ht_greenfield_support = true, @@ -287,7 +287,7 @@ const struct iwl_cfg iwl6050_2agn_cfg = { const char iwl6050_2agn_name[] = "Intel(R) Centrino(R) Advanced-N + WiMAX 6250 AGN"; -const struct iwl_cfg iwl6050_2abg_cfg = { +const struct iwl_rf_cfg iwl6050_2abg_cfg = { IWL_DEVICE_6050, }; @@ -310,7 +310,7 @@ const struct iwl_mac_cfg iwl6150_mac_cfg = { .led_mode = IWL_LED_BLINK, \ .internal_wimax_coex = true -const struct iwl_cfg iwl6150_bgn_cfg = { +const struct iwl_rf_cfg iwl6150_bgn_cfg = { IWL_DEVICE_6150, .ht_params = { .ht_greenfield_support = true, @@ -321,7 +321,7 @@ const struct iwl_cfg iwl6150_bgn_cfg = { const char iwl6150_bgn_name[] = "Intel(R) Centrino(R) Wireless-N + WiMAX 6150 BGN"; -const struct iwl_cfg iwl6150_bg_cfg = { +const struct iwl_rf_cfg iwl6150_bg_cfg = { IWL_DEVICE_6150, }; @@ -332,7 +332,7 @@ const struct iwl_mac_cfg iwl6000_mac_cfg = { .base = &iwl6000_base, }; -const struct iwl_cfg iwl6000_3agn_cfg = { +const struct iwl_rf_cfg iwl6000_3agn_cfg = { .fw_name_pre = IWL6000_FW_PRE, .ucode_api_max = IWL6000_UCODE_API_MAX, .ucode_api_min = IWL6000_UCODE_API_MIN, diff --git a/drivers/net/wireless/intel/iwlwifi/cfg/7000.c b/drivers/net/wireless/intel/iwlwifi/cfg/7000.c index 4b50a02b1cc5..b6068dfcbd76 100644 --- a/drivers/net/wireless/intel/iwlwifi/cfg/7000.c +++ b/drivers/net/wireless/intel/iwlwifi/cfg/7000.c @@ -130,7 +130,7 @@ const char iwl7265d_2ac_name[] = "Intel(R) Dual Band Wireless AC 7265"; const char iwl7265d_2n_name[] = "Intel(R) Dual Band Wireless N 7265"; const char iwl7265d_n_name[] = "Intel(R) Wireless N 7265"; -const struct iwl_cfg iwl7260_cfg = { +const struct iwl_rf_cfg iwl7260_cfg = { .fw_name_pre = IWL7260_FW_PRE, IWL_DEVICE_7000, .ht_params = { @@ -143,7 +143,7 @@ const struct iwl_cfg iwl7260_cfg = { .dccm_len = IWL7260_DCCM_LEN, }; -const struct iwl_cfg iwl7260_high_temp_cfg = { +const struct iwl_rf_cfg iwl7260_high_temp_cfg = { .fw_name_pre = IWL7260_FW_PRE, IWL_DEVICE_7000, .ht_params = { @@ -157,7 +157,7 @@ const struct iwl_cfg iwl7260_high_temp_cfg = { .thermal_params = &iwl7000_high_temp_tt_params, }; -const struct iwl_cfg iwl3160_cfg = { +const struct iwl_rf_cfg iwl3160_cfg = { .fw_name_pre = IWL3160_FW_PRE, IWL_DEVICE_7000, .ht_params = { @@ -180,7 +180,7 @@ static const struct iwl_pwr_tx_backoff iwl7265_pwr_tx_backoffs[] = { {0}, }; -const struct iwl_cfg iwl3165_2ac_cfg = { +const struct iwl_rf_cfg iwl3165_2ac_cfg = { .fw_name_pre = IWL7265D_FW_PRE, IWL_DEVICE_7005D, .ht_params = { @@ -192,7 +192,7 @@ const struct iwl_cfg iwl3165_2ac_cfg = { .dccm_len = IWL7265_DCCM_LEN, }; -const struct iwl_cfg iwl3168_2ac_cfg = { +const struct iwl_rf_cfg iwl3168_2ac_cfg = { .fw_name_pre = IWL3168_FW_PRE, IWL_DEVICE_3008, .ht_params = { @@ -205,7 +205,7 @@ const struct iwl_cfg iwl3168_2ac_cfg = { .nvm_type = IWL_NVM_SDP, }; -const struct iwl_cfg iwl7265_cfg = { +const struct iwl_rf_cfg iwl7265_cfg = { .fw_name_pre = IWL7265_FW_PRE, IWL_DEVICE_7005, .ht_params = { @@ -218,7 +218,7 @@ const struct iwl_cfg iwl7265_cfg = { .dccm_len = IWL7265_DCCM_LEN, }; -const struct iwl_cfg iwl7265d_cfg = { +const struct iwl_rf_cfg iwl7265d_cfg = { .fw_name_pre = IWL7265D_FW_PRE, IWL_DEVICE_7005D, .ht_params = { diff --git a/drivers/net/wireless/intel/iwlwifi/cfg/8000.c b/drivers/net/wireless/intel/iwlwifi/cfg/8000.c index 03a09920f258..7e2be10ff3ae 100644 --- a/drivers/net/wireless/intel/iwlwifi/cfg/8000.c +++ b/drivers/net/wireless/intel/iwlwifi/cfg/8000.c @@ -105,7 +105,7 @@ const char iwl8265_2ac_name[] = "Intel(R) Dual Band Wireless AC 8265"; const char iwl8275_2ac_name[] = "Intel(R) Dual Band Wireless AC 8275"; const char iwl4165_2ac_name[] = "Intel(R) Dual Band Wireless AC 4165"; -const struct iwl_cfg iwl8260_cfg = { +const struct iwl_rf_cfg iwl8260_cfg = { .fw_name_pre = IWL8000_FW_PRE, IWL_DEVICE_8260, .ht_params = { @@ -116,7 +116,7 @@ const struct iwl_cfg iwl8260_cfg = { .nvm_ver = IWL8000_NVM_VERSION, }; -const struct iwl_cfg iwl8265_cfg = { +const struct iwl_rf_cfg iwl8265_cfg = { .fw_name_pre = IWL8265_FW_PRE, IWL_DEVICE_8265, .ht_params = { diff --git a/drivers/net/wireless/intel/iwlwifi/cfg/rf-fm.c b/drivers/net/wireless/intel/iwlwifi/cfg/rf-fm.c index 670360af3d6e..dfd075bb0865 100644 --- a/drivers/net/wireless/intel/iwlwifi/cfg/rf-fm.c +++ b/drivers/net/wireless/intel/iwlwifi/cfg/rf-fm.c @@ -23,11 +23,11 @@ .nvm_ver = IWL_FM_NVM_VERSION, \ .nvm_type = IWL_NVM_EXT -const struct iwl_cfg iwl_rf_fm = { +const struct iwl_rf_cfg iwl_rf_fm = { IWL_DEVICE_FM, }; -const struct iwl_cfg iwl_rf_fm_160mhz = { +const struct iwl_rf_cfg iwl_rf_fm_160mhz = { IWL_DEVICE_FM, .bw_limit = 160, }; diff --git a/drivers/net/wireless/intel/iwlwifi/cfg/rf-gf.c b/drivers/net/wireless/intel/iwlwifi/cfg/rf-gf.c index 36bf7aee7120..a90dba322094 100644 --- a/drivers/net/wireless/intel/iwlwifi/cfg/rf-gf.c +++ b/drivers/net/wireless/intel/iwlwifi/cfg/rf-gf.c @@ -8,7 +8,7 @@ /* NVM versions */ #define IWL_GF_NVM_VERSION 0x0a1d -const struct iwl_cfg iwl_rf_gf = { +const struct iwl_rf_cfg iwl_rf_gf = { .uhb_supported = true, .led_mode = IWL_LED_RF_STATE, .non_shared_ant = ANT_B, diff --git a/drivers/net/wireless/intel/iwlwifi/cfg/rf-hr.c b/drivers/net/wireless/intel/iwlwifi/cfg/rf-hr.c index d01f823ce272..7d444ee0a187 100644 --- a/drivers/net/wireless/intel/iwlwifi/cfg/rf-hr.c +++ b/drivers/net/wireless/intel/iwlwifi/cfg/rf-hr.c @@ -22,16 +22,16 @@ .nvm_ver = IWL_HR_NVM_VERSION, \ .nvm_type = IWL_NVM_EXT -const struct iwl_cfg iwl_rf_hr1 = { +const struct iwl_rf_cfg iwl_rf_hr1 = { IWL_DEVICE_HR, .tx_with_siso_diversity = true, }; -const struct iwl_cfg iwl_rf_hr = { +const struct iwl_rf_cfg iwl_rf_hr = { IWL_DEVICE_HR, }; -const struct iwl_cfg iwl_rf_hr_80mhz = { +const struct iwl_rf_cfg iwl_rf_hr_80mhz = { IWL_DEVICE_HR, .bw_limit = 80, }; diff --git a/drivers/net/wireless/intel/iwlwifi/cfg/rf-jf.c b/drivers/net/wireless/intel/iwlwifi/cfg/rf-jf.c index 3f50f9df5145..60f5fcfb1f46 100644 --- a/drivers/net/wireless/intel/iwlwifi/cfg/rf-jf.c +++ b/drivers/net/wireless/intel/iwlwifi/cfg/rf-jf.c @@ -58,11 +58,11 @@ static const struct iwl_tt_params iwl_jf_tt_params = { .nvm_ver = IWL_JF_NVM_VERSION, \ .nvm_type = IWL_NVM_EXT -const struct iwl_cfg iwl_rf_jf = { +const struct iwl_rf_cfg iwl_rf_jf = { IWL_DEVICE_JF, }; -const struct iwl_cfg iwl_rf_jf_80mhz = { +const struct iwl_rf_cfg iwl_rf_jf_80mhz = { IWL_DEVICE_JF, .bw_limit = 80, }; diff --git a/drivers/net/wireless/intel/iwlwifi/dvm/agn.h b/drivers/net/wireless/intel/iwlwifi/dvm/agn.h index a13add556a7b..1ebc7effcc2a 100644 --- a/drivers/net/wireless/intel/iwlwifi/dvm/agn.h +++ b/drivers/net/wireless/intel/iwlwifi/dvm/agn.h @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */ /* - * Copyright (C) 2005-2014, 2021, 2024 Intel Corporation + * Copyright (C) 2005-2014, 2021, 2024-2025 Intel Corporation */ #ifndef __iwl_agn_h__ #define __iwl_agn_h__ @@ -399,7 +399,7 @@ static inline void iwl_dvm_set_pmi(struct iwl_priv *priv, bool state) * later with iwl_free_nvm_data(). */ struct iwl_nvm_data * -iwl_parse_eeprom_data(struct iwl_trans *trans, const struct iwl_cfg *cfg, +iwl_parse_eeprom_data(struct iwl_trans *trans, const struct iwl_rf_cfg *cfg, const u8 *eeprom, size_t eeprom_size); int iwl_read_eeprom(struct iwl_trans *trans, u8 **eeprom, size_t *eeprom_size); diff --git a/drivers/net/wireless/intel/iwlwifi/dvm/dev.h b/drivers/net/wireless/intel/iwlwifi/dvm/dev.h index 4ac8b862ad41..25b24820466d 100644 --- a/drivers/net/wireless/intel/iwlwifi/dvm/dev.h +++ b/drivers/net/wireless/intel/iwlwifi/dvm/dev.h @@ -2,6 +2,7 @@ /****************************************************************************** * * Copyright(c) 2003 - 2014, 2020, 2023 Intel Corporation. All rights reserved. + * Copyright (C) 2025 Intel Corporation *****************************************************************************/ /* * Please use this file (dev.h) for driver implementation definitions. @@ -627,7 +628,7 @@ struct iwl_priv { struct iwl_trans *trans; struct device *dev; /* for debug prints only */ - const struct iwl_cfg *cfg; + const struct iwl_rf_cfg *cfg; const struct iwl_fw *fw; const struct iwl_dvm_cfg *lib; unsigned long status; diff --git a/drivers/net/wireless/intel/iwlwifi/dvm/eeprom.c b/drivers/net/wireless/intel/iwlwifi/dvm/eeprom.c index 998f3053b3b0..2423125e5284 100644 --- a/drivers/net/wireless/intel/iwlwifi/dvm/eeprom.c +++ b/drivers/net/wireless/intel/iwlwifi/dvm/eeprom.c @@ -413,7 +413,7 @@ static void iwl_eeprom_enhanced_txpower(struct device *dev, } } -static void iwl_init_band_reference(const struct iwl_cfg *cfg, +static void iwl_init_band_reference(const struct iwl_rf_cfg *cfg, const u8 *eeprom, size_t eeprom_size, int eeprom_band, int *eeprom_ch_count, const struct iwl_eeprom_channel **ch_info, @@ -507,7 +507,7 @@ static void iwl_mod_ht40_chan_info(struct device *dev, #define CHECK_AND_PRINT_I(x) \ ((eeprom_ch_info[ch_idx].flags & EEPROM_CHANNEL_##x) ? # x " " : "") -static int iwl_init_channel_map(struct device *dev, const struct iwl_cfg *cfg, +static int iwl_init_channel_map(struct device *dev, const struct iwl_rf_cfg *cfg, struct iwl_nvm_data *data, const u8 *eeprom, size_t eeprom_size) { @@ -1024,7 +1024,7 @@ int iwl_read_eeprom(struct iwl_trans *trans, u8 **eeprom, size_t *eeprom_size) return ret; } -static void iwl_init_sbands(struct iwl_trans *trans, const struct iwl_cfg *cfg, +static void iwl_init_sbands(struct iwl_trans *trans, const struct iwl_rf_cfg *cfg, struct iwl_nvm_data *data, const u8 *eeprom, size_t eeprom_size) { @@ -1059,7 +1059,7 @@ static void iwl_init_sbands(struct iwl_trans *trans, const struct iwl_cfg *cfg, /* EEPROM data functions */ struct iwl_nvm_data * -iwl_parse_eeprom_data(struct iwl_trans *trans, const struct iwl_cfg *cfg, +iwl_parse_eeprom_data(struct iwl_trans *trans, const struct iwl_rf_cfg *cfg, const u8 *eeprom, size_t eeprom_size) { struct iwl_nvm_data *data; diff --git a/drivers/net/wireless/intel/iwlwifi/dvm/main.c b/drivers/net/wireless/intel/iwlwifi/dvm/main.c index 68656706ce34..1d619384c629 100644 --- a/drivers/net/wireless/intel/iwlwifi/dvm/main.c +++ b/drivers/net/wireless/intel/iwlwifi/dvm/main.c @@ -1226,7 +1226,7 @@ static int iwl_nvm_check_version(struct iwl_nvm_data *data, } static struct iwl_op_mode *iwl_op_mode_dvm_start(struct iwl_trans *trans, - const struct iwl_cfg *cfg, + const struct iwl_rf_cfg *cfg, const struct iwl_fw *fw, struct dentry *dbgfs_dir) { diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-config.h b/drivers/net/wireless/intel/iwlwifi/iwl-config.h index ecf9e7f8e00f..031c68fbf8b1 100644 --- a/drivers/net/wireless/intel/iwlwifi/iwl-config.h +++ b/drivers/net/wireless/intel/iwlwifi/iwl-config.h @@ -353,7 +353,7 @@ struct iwl_mac_cfg { #define IWL_NUM_RBDS_EHT (512 * 8) /** - * struct iwl_cfg + * struct iwl_rf_cfg * @fw_name_pre: Firmware filename prefix. The api version and extension * (.ucode) will be added to filename before loading from disk. The * filename is constructed as -.ucode. @@ -369,6 +369,9 @@ struct iwl_mac_cfg { * @nvm_calib_ver: NVM calibration version * @bw_limit: bandwidth limit for this device, if non-zero * @ht_params: point to ht parameters + * @eeprom_params: EEPROM parameters (old devices) + * @thermal_params: Thermal throttling parameters + * @lp_xtal_workaround: low-power crystal workaround needed * @led_mode: 0=blinking, 1=On(RF On)/Off(RF Off) * @rx_with_siso_diversity: 1x1 device with rx antenna diversity * @tx_with_siso_diversity: 1x1 device with tx antenna diversity @@ -390,7 +393,7 @@ struct iwl_mac_cfg { * API differences in uCode shouldn't be handled here but through TLVs * and/or the uCode API version instead. */ -struct iwl_cfg { +struct iwl_rf_cfg { /* params specific to an individual device within a device family */ const char *fw_name_pre; /* params likely to change within a device family */ @@ -487,7 +490,7 @@ struct iwl_dev_info { u8 cores; u8 cdb; u8 jacket; - const struct iwl_cfg *cfg; + const struct iwl_rf_cfg *cfg; const char *name; }; @@ -643,59 +646,58 @@ extern const char iwl_mtp_name[]; extern const char iwl_dr_name[]; extern const char iwl_br_name[]; #if IS_ENABLED(CONFIG_IWLDVM) -extern const struct iwl_cfg iwl5300_agn_cfg; -extern const struct iwl_cfg iwl5350_agn_cfg; -extern const struct iwl_cfg iwl5100_n_cfg; -extern const struct iwl_cfg iwl5100_abg_cfg; -extern const struct iwl_cfg iwl5150_agn_cfg; -extern const struct iwl_cfg iwl5150_abg_cfg; -extern const struct iwl_cfg iwl6005_non_n_cfg; -extern const struct iwl_cfg iwl6005_n_cfg; -extern const struct iwl_cfg iwl6030_n_cfg; -extern const struct iwl_cfg iwl6030_non_n_cfg; -extern const struct iwl_cfg iwl6000i_2agn_cfg; -extern const struct iwl_cfg iwl6000i_non_n_cfg; -extern const struct iwl_cfg iwl6000i_non_n_cfg; -extern const struct iwl_cfg iwl6000_3agn_cfg; -extern const struct iwl_cfg iwl6050_2agn_cfg; -extern const struct iwl_cfg iwl6050_2abg_cfg; -extern const struct iwl_cfg iwl6150_bgn_cfg; -extern const struct iwl_cfg iwl6150_bg_cfg; -extern const struct iwl_cfg iwl1000_bgn_cfg; -extern const struct iwl_cfg iwl1000_bg_cfg; -extern const struct iwl_cfg iwl100_bgn_cfg; -extern const struct iwl_cfg iwl100_bg_cfg; -extern const struct iwl_cfg iwl130_bgn_cfg; -extern const struct iwl_cfg iwl130_bg_cfg; -extern const struct iwl_cfg iwl2000_2bgn_cfg; -extern const struct iwl_cfg iwl2030_2bgn_cfg; -extern const struct iwl_cfg iwl6035_2agn_cfg; -extern const struct iwl_cfg iwl105_bgn_cfg; -extern const struct iwl_cfg iwl135_bgn_cfg; +extern const struct iwl_rf_cfg iwl5300_agn_cfg; +extern const struct iwl_rf_cfg iwl5350_agn_cfg; +extern const struct iwl_rf_cfg iwl5100_n_cfg; +extern const struct iwl_rf_cfg iwl5100_abg_cfg; +extern const struct iwl_rf_cfg iwl5150_agn_cfg; +extern const struct iwl_rf_cfg iwl5150_abg_cfg; +extern const struct iwl_rf_cfg iwl6005_non_n_cfg; +extern const struct iwl_rf_cfg iwl6005_n_cfg; +extern const struct iwl_rf_cfg iwl6030_n_cfg; +extern const struct iwl_rf_cfg iwl6030_non_n_cfg; +extern const struct iwl_rf_cfg iwl6000i_2agn_cfg; +extern const struct iwl_rf_cfg iwl6000i_non_n_cfg; +extern const struct iwl_rf_cfg iwl6000i_non_n_cfg; +extern const struct iwl_rf_cfg iwl6000_3agn_cfg; +extern const struct iwl_rf_cfg iwl6050_2agn_cfg; +extern const struct iwl_rf_cfg iwl6050_2abg_cfg; +extern const struct iwl_rf_cfg iwl6150_bgn_cfg; +extern const struct iwl_rf_cfg iwl6150_bg_cfg; +extern const struct iwl_rf_cfg iwl1000_bgn_cfg; +extern const struct iwl_rf_cfg iwl1000_bg_cfg; +extern const struct iwl_rf_cfg iwl100_bgn_cfg; +extern const struct iwl_rf_cfg iwl100_bg_cfg; +extern const struct iwl_rf_cfg iwl130_bgn_cfg; +extern const struct iwl_rf_cfg iwl130_bg_cfg; +extern const struct iwl_rf_cfg iwl2000_2bgn_cfg; +extern const struct iwl_rf_cfg iwl2030_2bgn_cfg; +extern const struct iwl_rf_cfg iwl6035_2agn_cfg; +extern const struct iwl_rf_cfg iwl105_bgn_cfg; +extern const struct iwl_rf_cfg iwl135_bgn_cfg; #endif /* CONFIG_IWLDVM */ #if IS_ENABLED(CONFIG_IWLMVM) - -extern const struct iwl_cfg iwl7260_cfg; -extern const struct iwl_cfg iwl7260_high_temp_cfg; -extern const struct iwl_cfg iwl3160_cfg; -extern const struct iwl_cfg iwl3165_2ac_cfg; -extern const struct iwl_cfg iwl3168_2ac_cfg; -extern const struct iwl_cfg iwl7265_cfg; -extern const struct iwl_cfg iwl7265d_cfg; -extern const struct iwl_cfg iwl8260_cfg; -extern const struct iwl_cfg iwl8265_cfg; -extern const struct iwl_cfg iwl_rf_jf; -extern const struct iwl_cfg iwl_rf_jf_80mhz; -extern const struct iwl_cfg iwl_rf_hr1; -extern const struct iwl_cfg iwl_rf_hr; -extern const struct iwl_cfg iwl_rf_hr_80mhz; - -extern const struct iwl_cfg iwl_rf_gf; +extern const struct iwl_rf_cfg iwl7260_cfg; +extern const struct iwl_rf_cfg iwl7260_high_temp_cfg; +extern const struct iwl_rf_cfg iwl3160_cfg; +extern const struct iwl_rf_cfg iwl3165_2ac_cfg; +extern const struct iwl_rf_cfg iwl3168_2ac_cfg; +extern const struct iwl_rf_cfg iwl7265_cfg; +extern const struct iwl_rf_cfg iwl7265d_cfg; +extern const struct iwl_rf_cfg iwl8260_cfg; +extern const struct iwl_rf_cfg iwl8265_cfg; +extern const struct iwl_rf_cfg iwl_rf_jf; +extern const struct iwl_rf_cfg iwl_rf_jf_80mhz; +extern const struct iwl_rf_cfg iwl_rf_hr1; +extern const struct iwl_rf_cfg iwl_rf_hr; +extern const struct iwl_rf_cfg iwl_rf_hr_80mhz; + +extern const struct iwl_rf_cfg iwl_rf_gf; #endif /* CONFIG_IWLMVM */ #if IS_ENABLED(CONFIG_IWLMLD) -extern const struct iwl_cfg iwl_rf_fm; -extern const struct iwl_cfg iwl_rf_fm_160mhz; +extern const struct iwl_rf_cfg iwl_rf_fm; +extern const struct iwl_rf_cfg iwl_rf_fm_160mhz; #define iwl_rf_wh iwl_rf_fm #define iwl_rf_wh_160mhz iwl_rf_fm_160mhz #define iwl_rf_pe iwl_rf_fm diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-drv.c b/drivers/net/wireless/intel/iwlwifi/iwl-drv.c index 8734c7913b2f..9504a0cb8b13 100644 --- a/drivers/net/wireless/intel/iwlwifi/iwl-drv.c +++ b/drivers/net/wireless/intel/iwlwifi/iwl-drv.c @@ -296,7 +296,7 @@ static void iwl_get_ucode_api_versions(struct iwl_trans *trans, unsigned int *api_max) { const struct iwl_family_base_params *base = trans->mac_cfg->base; - const struct iwl_cfg *cfg = trans->cfg; + const struct iwl_rf_cfg *cfg = trans->cfg; if (!base->ucode_api_max) { *api_min = cfg->ucode_api_min; @@ -1456,7 +1456,7 @@ static int iwl_alloc_ucode(struct iwl_drv *drv, static int validate_sec_sizes(struct iwl_drv *drv, struct iwl_firmware_pieces *pieces, - const struct iwl_cfg *cfg) + const struct iwl_rf_cfg *cfg) { IWL_DEBUG_INFO(drv, "f/w package hdr runtime inst size = %zd\n", get_sec_size(pieces, IWL_UCODE_REGULAR, diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-drv.h b/drivers/net/wireless/intel/iwlwifi/iwl-drv.h index 854957bdf79d..595300a14639 100644 --- a/drivers/net/wireless/intel/iwlwifi/iwl-drv.h +++ b/drivers/net/wireless/intel/iwlwifi/iwl-drv.h @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */ /* - * Copyright (C) 2005-2014, 2020-2021, 2023 Intel Corporation + * Copyright (C) 2005-2014, 2020-2021, 2023, 2025 Intel Corporation * Copyright (C) 2013-2014 Intel Mobile Communications GmbH */ #ifndef __iwl_drv_h__ @@ -53,7 +53,7 @@ struct iwl_drv; struct iwl_trans; -struct iwl_cfg; +struct iwl_rf_cfg; /** * iwl_drv_start - start the drv * diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c b/drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c index cf9e2e2ac9d1..0592f0f59d1c 100644 --- a/drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c +++ b/drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c @@ -336,7 +336,7 @@ static inline void iwl_nvm_print_channel_flags(struct device *dev, u32 level, } static u32 iwl_get_channel_flags(u8 ch_num, int ch_idx, enum nl80211_band band, - u32 nvm_flags, const struct iwl_cfg *cfg) + u32 nvm_flags, const struct iwl_rf_cfg *cfg) { u32 flags = IEEE80211_CHAN_NO_HT40; @@ -403,7 +403,7 @@ static int iwl_init_channel_map(struct iwl_trans *trans, const void * const nvm_ch_flags, u32 sbands_flags, bool v4) { - const struct iwl_cfg *cfg = trans->cfg; + const struct iwl_rf_cfg *cfg = trans->cfg; struct device *dev = trans->dev; int ch_idx; int n_channels = 0; @@ -504,7 +504,7 @@ static void iwl_init_vht_hw_capab(struct iwl_trans *trans, struct ieee80211_sta_vht_cap *vht_cap, u8 tx_chains, u8 rx_chains) { - const struct iwl_cfg *cfg = trans->cfg; + const struct iwl_rf_cfg *cfg = trans->cfg; int num_rx_ants = num_of_ant(rx_chains); int num_tx_ants = num_of_ant(tx_chains); @@ -1251,7 +1251,7 @@ static void iwl_init_sbands(struct iwl_trans *trans, n_used, n_channels); } -static int iwl_get_sku(const struct iwl_cfg *cfg, const __le16 *nvm_sw, +static int iwl_get_sku(const struct iwl_rf_cfg *cfg, const __le16 *nvm_sw, const __le16 *phy_sku) { if (cfg->nvm_type != IWL_NVM_EXT) @@ -1260,7 +1260,7 @@ static int iwl_get_sku(const struct iwl_cfg *cfg, const __le16 *nvm_sw, return le32_to_cpup((const __le32 *)(phy_sku + SKU_FAMILY_8000)); } -static int iwl_get_nvm_version(const struct iwl_cfg *cfg, const __le16 *nvm_sw) +static int iwl_get_nvm_version(const struct iwl_rf_cfg *cfg, const __le16 *nvm_sw) { if (cfg->nvm_type != IWL_NVM_EXT) return le16_to_cpup(nvm_sw + NVM_VERSION); @@ -1269,7 +1269,7 @@ static int iwl_get_nvm_version(const struct iwl_cfg *cfg, const __le16 *nvm_sw) NVM_VERSION_EXT_NVM)); } -static int iwl_get_radio_cfg(const struct iwl_cfg *cfg, const __le16 *nvm_sw, +static int iwl_get_radio_cfg(const struct iwl_rf_cfg *cfg, const __le16 *nvm_sw, const __le16 *phy_sku) { if (cfg->nvm_type != IWL_NVM_EXT) @@ -1279,7 +1279,7 @@ static int iwl_get_radio_cfg(const struct iwl_cfg *cfg, const __le16 *nvm_sw, } -static int iwl_get_n_hw_addrs(const struct iwl_cfg *cfg, const __le16 *nvm_sw) +static int iwl_get_n_hw_addrs(const struct iwl_rf_cfg *cfg, const __le16 *nvm_sw) { int n_hw_addr; @@ -1291,7 +1291,7 @@ static int iwl_get_n_hw_addrs(const struct iwl_cfg *cfg, const __le16 *nvm_sw) return n_hw_addr & N_HW_ADDR_MASK; } -static void iwl_set_radio_cfg(const struct iwl_cfg *cfg, +static void iwl_set_radio_cfg(const struct iwl_rf_cfg *cfg, struct iwl_nvm_data *data, u32 radio_cfg) { @@ -1350,7 +1350,7 @@ static void iwl_set_hw_address_from_csr(struct iwl_trans *trans, } static void iwl_set_hw_address_family_8000(struct iwl_trans *trans, - const struct iwl_cfg *cfg, + const struct iwl_rf_cfg *cfg, struct iwl_nvm_data *data, const __le16 *mac_override, const __be16 *nvm_hw) @@ -1399,7 +1399,7 @@ static void iwl_set_hw_address_family_8000(struct iwl_trans *trans, } static int iwl_set_hw_address(struct iwl_trans *trans, - const struct iwl_cfg *cfg, + const struct iwl_rf_cfg *cfg, struct iwl_nvm_data *data, const __be16 *nvm_hw, const __le16 *mac_override) { @@ -1434,7 +1434,7 @@ static int iwl_set_hw_address(struct iwl_trans *trans, } static bool -iwl_nvm_no_wide_in_5ghz(struct iwl_trans *trans, const struct iwl_cfg *cfg, +iwl_nvm_no_wide_in_5ghz(struct iwl_trans *trans, const struct iwl_rf_cfg *cfg, const __be16 *nvm_hw) { /* @@ -1466,7 +1466,7 @@ iwl_nvm_no_wide_in_5ghz(struct iwl_trans *trans, const struct iwl_cfg *cfg, } struct iwl_nvm_data * -iwl_parse_mei_nvm_data(struct iwl_trans *trans, const struct iwl_cfg *cfg, +iwl_parse_mei_nvm_data(struct iwl_trans *trans, const struct iwl_rf_cfg *cfg, const struct iwl_mei_nvm *mei_nvm, const struct iwl_fw *fw, u8 tx_ant, u8 rx_ant) { @@ -1530,7 +1530,7 @@ iwl_parse_mei_nvm_data(struct iwl_trans *trans, const struct iwl_cfg *cfg, IWL_EXPORT_SYMBOL(iwl_parse_mei_nvm_data); struct iwl_nvm_data * -iwl_parse_nvm_data(struct iwl_trans *trans, const struct iwl_cfg *cfg, +iwl_parse_nvm_data(struct iwl_trans *trans, const struct iwl_rf_cfg *cfg, const struct iwl_fw *fw, const __be16 *nvm_hw, const __le16 *nvm_sw, const __le16 *nvm_calib, const __le16 *regulatory, @@ -1630,7 +1630,7 @@ IWL_EXPORT_SYMBOL(iwl_parse_nvm_data); static u32 iwl_nvm_get_regdom_bw_flags(const u16 *nvm_chan, int ch_idx, u16 nvm_flags, struct iwl_reg_capa reg_capa, - const struct iwl_cfg *cfg) + const struct iwl_rf_cfg *cfg) { u32 flags = NL80211_RRF_NO_HT40; @@ -1749,7 +1749,7 @@ iwl_parse_nvm_mcc_info(struct iwl_trans *trans, int num_of_ch, __le32 *channels, u16 fw_mcc, u16 geo_info, u32 cap, u8 resp_ver) { - const struct iwl_cfg *cfg = trans->cfg; + const struct iwl_rf_cfg *cfg = trans->cfg; struct device *dev = trans->dev; int ch_idx; u16 ch_flags; diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.h b/drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.h index 17d22a68f074..9ce9fa4e78fd 100644 --- a/drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.h +++ b/drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.h @@ -30,7 +30,7 @@ enum iwl_nvm_sbands_flags { * later with iwl_free_nvm_data(). */ struct iwl_nvm_data * -iwl_parse_nvm_data(struct iwl_trans *trans, const struct iwl_cfg *cfg, +iwl_parse_nvm_data(struct iwl_trans *trans, const struct iwl_rf_cfg *cfg, const struct iwl_fw *fw, const __be16 *nvm_hw, const __le16 *nvm_sw, const __le16 *nvm_calib, const __le16 *regulatory, @@ -95,7 +95,7 @@ struct iwl_nvm_data *iwl_get_nvm(struct iwl_trans *trans, * iwl_parse_mei_nvm_data - parse the mei_nvm_data and get an iwl_nvm_data */ struct iwl_nvm_data * -iwl_parse_mei_nvm_data(struct iwl_trans *trans, const struct iwl_cfg *cfg, +iwl_parse_mei_nvm_data(struct iwl_trans *trans, const struct iwl_rf_cfg *cfg, const struct iwl_mei_nvm *mei_nvm, const struct iwl_fw *fw, u8 set_tx_ant, u8 set_rx_ant); diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-nvm-utils.c b/drivers/net/wireless/intel/iwlwifi/iwl-nvm-utils.c index 4f8a63a4c296..ec312c90ff85 100644 --- a/drivers/net/wireless/intel/iwlwifi/iwl-nvm-utils.c +++ b/drivers/net/wireless/intel/iwlwifi/iwl-nvm-utils.c @@ -42,7 +42,7 @@ void iwl_init_ht_hw_capab(struct iwl_trans *trans, enum nl80211_band band, u8 tx_chains, u8 rx_chains) { - const struct iwl_cfg *cfg = trans->cfg; + const struct iwl_rf_cfg *cfg = trans->cfg; int max_bit_rate = 0; tx_chains = hweight8(tx_chains); diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-op-mode.h b/drivers/net/wireless/intel/iwlwifi/iwl-op-mode.h index b5d39026fa2f..5dc299296d6d 100644 --- a/drivers/net/wireless/intel/iwlwifi/iwl-op-mode.h +++ b/drivers/net/wireless/intel/iwlwifi/iwl-op-mode.h @@ -17,7 +17,7 @@ struct sk_buff; struct iwl_device_cmd; struct iwl_rx_cmd_buffer; struct iwl_fw; -struct iwl_cfg; +struct iwl_rf_cfg; /** * DOC: Operational mode - what is it ? @@ -150,7 +150,7 @@ struct iwl_fw_error_dump_mode { */ struct iwl_op_mode_ops { struct iwl_op_mode *(*start)(struct iwl_trans *trans, - const struct iwl_cfg *cfg, + const struct iwl_rf_cfg *cfg, const struct iwl_fw *fw, struct dentry *dbgfs_dir); void (*stop)(struct iwl_op_mode *op_mode); diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-trans.h b/drivers/net/wireless/intel/iwlwifi/iwl-trans.h index 894436a65351..d76caf5bf4c9 100644 --- a/drivers/net/wireless/intel/iwlwifi/iwl-trans.h +++ b/drivers/net/wireless/intel/iwlwifi/iwl-trans.h @@ -892,7 +892,7 @@ struct iwl_trans { bool csme_own; struct iwl_op_mode *op_mode; const struct iwl_mac_cfg *mac_cfg; - const struct iwl_cfg *cfg; + const struct iwl_rf_cfg *cfg; struct iwl_drv *drv; struct iwl_trans_config conf; enum iwl_trans_state state; diff --git a/drivers/net/wireless/intel/iwlwifi/mld/mld.c b/drivers/net/wireless/intel/iwlwifi/mld/mld.c index 3e3af7d23b52..8cdd960c5245 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/mld.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/mld.c @@ -62,7 +62,7 @@ static void iwl_mld_hw_set_regulatory(struct iwl_mld *mld) VISIBLE_IF_IWLWIFI_KUNIT void iwl_construct_mld(struct iwl_mld *mld, struct iwl_trans *trans, - const struct iwl_cfg *cfg, const struct iwl_fw *fw, + const struct iwl_rf_cfg *cfg, const struct iwl_fw *fw, struct ieee80211_hw *hw, struct dentry *dbgfs_dir) { mld->dev = trans->dev; @@ -370,7 +370,7 @@ iwl_mld_configure_trans(struct iwl_op_mode *op_mode) #define NUM_FW_LOAD_RETRIES 3 static struct iwl_op_mode * -iwl_op_mode_mld_start(struct iwl_trans *trans, const struct iwl_cfg *cfg, +iwl_op_mode_mld_start(struct iwl_trans *trans, const struct iwl_rf_cfg *cfg, const struct iwl_fw *fw, struct dentry *dbgfs_dir) { struct ieee80211_hw *hw; diff --git a/drivers/net/wireless/intel/iwlwifi/mld/mld.h b/drivers/net/wireless/intel/iwlwifi/mld/mld.h index 671f3a709322..3eab1774cb89 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/mld.h +++ b/drivers/net/wireless/intel/iwlwifi/mld/mld.h @@ -218,7 +218,7 @@ struct iwl_mld { /* And here fields that survive a fw restart */ struct device *dev; struct iwl_trans *trans; - const struct iwl_cfg *cfg; + const struct iwl_rf_cfg *cfg; const struct iwl_fw *fw; struct ieee80211_hw *hw; struct wiphy *wiphy; @@ -491,7 +491,7 @@ iwl_mld_is_dup(struct iwl_mld *mld, struct ieee80211_sta *sta, struct ieee80211_rx_status *rx_status, int queue); void iwl_construct_mld(struct iwl_mld *mld, struct iwl_trans *trans, - const struct iwl_cfg *cfg, const struct iwl_fw *fw, + const struct iwl_rf_cfg *cfg, const struct iwl_fw *fw, struct ieee80211_hw *hw, struct dentry *dbgfs_dir); #endif diff --git a/drivers/net/wireless/intel/iwlwifi/mld/tests/utils.c b/drivers/net/wireless/intel/iwlwifi/mld/tests/utils.c index 0a9a5677fa85..26cf27be762d 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/tests/utils.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/tests/utils.c @@ -24,7 +24,7 @@ int iwlmld_kunit_test_init(struct kunit *test) { struct iwl_mld *mld; struct iwl_trans *trans; - const struct iwl_cfg *cfg; + const struct iwl_rf_cfg *cfg; struct iwl_fw *fw; struct ieee80211_hw *hw; diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h b/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h index b752bc4feb40..6df5158836db 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h +++ b/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h @@ -1003,7 +1003,7 @@ struct iwl_mvm { struct iwl_trans *trans; const struct iwl_fw *fw; - const struct iwl_cfg *cfg; + const struct iwl_rf_cfg *cfg; struct iwl_phy_db *phy_db; struct ieee80211_hw *hw; diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/ops.c b/drivers/net/wireless/intel/iwlwifi/mvm/ops.c index 5b9c37fb0c0d..a2dc5c3b0596 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/ops.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/ops.c @@ -1278,7 +1278,7 @@ static void iwl_mvm_trig_link_selection(struct wiphy *wiphy, } static struct iwl_op_mode * -iwl_op_mode_mvm_start(struct iwl_trans *trans, const struct iwl_cfg *cfg, +iwl_op_mode_mvm_start(struct iwl_trans *trans, const struct iwl_rf_cfg *cfg, const struct iwl_fw *fw, struct dentry *dbgfs_dir) { struct ieee80211_hw *hw; diff --git a/drivers/net/wireless/intel/iwlwifi/tests/devinfo.c b/drivers/net/wireless/intel/iwlwifi/tests/devinfo.c index 0e6a74abd5e2..115642c75d10 100644 --- a/drivers/net/wireless/intel/iwlwifi/tests/devinfo.c +++ b/drivers/net/wireless/intel/iwlwifi/tests/devinfo.c @@ -61,10 +61,10 @@ static void devinfo_names(struct kunit *test) static void devinfo_no_cfg_dups(struct kunit *test) { for (int i = 0; i < iwl_dev_info_table_size; i++) { - const struct iwl_cfg *cfg_i = iwl_dev_info_table[i].cfg; + const struct iwl_rf_cfg *cfg_i = iwl_dev_info_table[i].cfg; for (int j = 0; j < i; j++) { - const struct iwl_cfg *cfg_j = iwl_dev_info_table[j].cfg; + const struct iwl_rf_cfg *cfg_j = iwl_dev_info_table[j].cfg; if (cfg_i == cfg_j) continue; -- 2.51.0 From 6f47182ccda522c692e7f3618efe91fd2975d6bd Mon Sep 17 00:00:00 2001 From: Pagadala Yesu Anjaneyulu Date: Fri, 9 May 2025 13:44:48 +0300 Subject: [PATCH 03/16] wifi: iwlwifi: mld: Correct comments for cleanup functions Update comments to accurately reflect the purpose of the iwl_mld_cleanup_link and iwl_cleanup_mld functions. Signed-off-by: Pagadala Yesu Anjaneyulu Reviewed-by: Somashekhar Puttagangaiah Link: https://patch.msgid.link/20250509104454.2582160-10-miriam.rachel.korenblit@intel.com Signed-off-by: Miri Korenblit --- drivers/net/wireless/intel/iwlwifi/mld/link.h | 2 +- drivers/net/wireless/intel/iwlwifi/mld/mld.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/net/wireless/intel/iwlwifi/mld/link.h b/drivers/net/wireless/intel/iwlwifi/mld/link.h index 40492f0974e2..86ca5b9286f8 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/link.h +++ b/drivers/net/wireless/intel/iwlwifi/mld/link.h @@ -91,7 +91,7 @@ struct iwl_mld_link { struct iwl_probe_resp_data __rcu *probe_resp_data; }; -/* Cleanup function for struct iwl_mld_phy, will be called in restart */ +/* Cleanup function for struct iwl_mld_link, will be called in restart */ static inline void iwl_mld_cleanup_link(struct iwl_mld *mld, struct iwl_mld_link *link) { diff --git a/drivers/net/wireless/intel/iwlwifi/mld/mld.h b/drivers/net/wireless/intel/iwlwifi/mld/mld.h index 3eab1774cb89..1a2c44f44eff 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/mld.h +++ b/drivers/net/wireless/intel/iwlwifi/mld/mld.h @@ -295,7 +295,7 @@ struct iwl_mld { memset((void *)&(_ptr)->zeroed_on_hw_restart, 0, \ sizeof((_ptr)->zeroed_on_hw_restart)) -/* Cleanup function for struct iwl_mld_vif, will be called in restart */ +/* Cleanup function for struct iwl_mld, will be called in restart */ static inline void iwl_cleanup_mld(struct iwl_mld *mld) { -- 2.51.0 From db8c12f7c35a583380cc149e0903bb153dcfc852 Mon Sep 17 00:00:00 2001 From: Pagadala Yesu Anjaneyulu Date: Fri, 9 May 2025 13:44:49 +0300 Subject: [PATCH 04/16] wifi: iwlwifi: mld: Fix ROC activity cleanup in iwl_mld_vif The roc_activity member in the iwl_mld_vif structure was previously set to zero during cleanup as was present in struct_group, which incorrectly indicated ROC_ACTIVITY_HOTSPOT. To fix this issue, remove roc_activity member from struct_group. Notify mac80211 of ROC expiration during vif cleanup to maintain synchronization between the driver and mac80211. While on it, update it's type to enum iwl_roc_activity. Signed-off-by: Pagadala Yesu Anjaneyulu Link: https://patch.msgid.link/20250509104454.2582160-11-miriam.rachel.korenblit@intel.com Signed-off-by: Miri Korenblit --- drivers/net/wireless/intel/iwlwifi/mld/iface.c | 3 +++ drivers/net/wireless/intel/iwlwifi/mld/iface.h | 7 ++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/drivers/net/wireless/intel/iwlwifi/mld/iface.c b/drivers/net/wireless/intel/iwlwifi/mld/iface.c index c083ba416d40..fdb7a3b3107d 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/iface.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/iface.c @@ -25,6 +25,9 @@ void iwl_mld_cleanup_vif(void *data, u8 *mac, struct ieee80211_vif *vif) /* EMLSR is turned back on during recovery */ vif->driver_flags &= ~IEEE80211_VIF_EML_ACTIVE; + if (mld_vif->roc_activity != ROC_NUM_ACTIVITIES) + ieee80211_remain_on_channel_expired(mld->hw); + mld_vif->roc_activity = ROC_NUM_ACTIVITIES; for_each_mld_vif_valid_link(mld_vif, link) { diff --git a/drivers/net/wireless/intel/iwlwifi/mld/iface.h b/drivers/net/wireless/intel/iwlwifi/mld/iface.h index 1ae522431f3f..3437f0c422cf 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/iface.h +++ b/drivers/net/wireless/intel/iwlwifi/mld/iface.h @@ -10,6 +10,7 @@ #include "link.h" #include "session-protect.h" #include "d3.h" +#include "fw/api/time-event.h" enum iwl_mld_cca_40mhz_wa_status { CCA_40_MHZ_WA_NONE, @@ -125,8 +126,6 @@ struct iwl_mld_emlsr { * Only valid for STA. (FIXME: needs to be per link) * @num_associated_stas: number of associated STAs. Relevant only for AP mode. * @ap_ibss_active: whether the AP/IBSS was started - * @roc_activity: the id of the roc_activity running. Relevant for p2p device - * only. Set to %ROC_NUM_ACTIVITIES when not in use. * @cca_40mhz_workaround: When we are connected in 2.4 GHz and 40 MHz, and the * environment is too loaded, we work around this by reconnecting to the * same AP with 20 MHz. This manages the status of the workaround. @@ -142,6 +141,8 @@ struct iwl_mld_emlsr { * @use_ps_poll: use ps_poll frames * @disable_bf: disable beacon filter * @dbgfs_slink: debugfs symlink for this interface + * @roc_activity: the id of the roc_activity running. Relevant for p2p device + * only. Set to %ROC_NUM_ACTIVITIES when not in use. */ struct iwl_mld_vif { /* Add here fields that need clean up on restart */ @@ -153,7 +154,6 @@ struct iwl_mld_vif { struct ieee80211_key_conf __rcu *bigtks[2]; u8 num_associated_stas; bool ap_ibss_active; - u32 roc_activity; enum iwl_mld_cca_40mhz_wa_status cca_40mhz_workaround; #ifdef CONFIG_IWLWIFI_DEBUGFS bool beacon_inject_active; @@ -176,6 +176,7 @@ struct iwl_mld_vif { bool disable_bf; struct dentry *dbgfs_slink; #endif + enum iwl_roc_activity roc_activity; }; static inline struct iwl_mld_vif * -- 2.51.0 From 35a29b14c82bc3ff00a7093c2d0080bc456b07ee Mon Sep 17 00:00:00 2001 From: Pagadala Yesu Anjaneyulu Date: Fri, 9 May 2025 13:44:50 +0300 Subject: [PATCH 05/16] wifi: iwlwifi: mld: move aux_sta member from iwl_mld_link to iwl_mld_vif This change reflects the correct ownership of aux_sta, as it is not a property of the link but rather of the virtual interface. Updated the initialization, cleanup and access logic for the aux_sta member to align with its new location within iwl_mld_vif. Signed-off-by: Pagadala Yesu Anjaneyulu Reviewed-by: Somashekhar Puttagangaiah Link: https://patch.msgid.link/20250509104454.2582160-12-miriam.rachel.korenblit@intel.com Signed-off-by: Miri Korenblit --- drivers/net/wireless/intel/iwlwifi/mld/iface.c | 4 ++++ drivers/net/wireless/intel/iwlwifi/mld/iface.h | 2 ++ drivers/net/wireless/intel/iwlwifi/mld/link.c | 1 - drivers/net/wireless/intel/iwlwifi/mld/link.h | 4 ---- drivers/net/wireless/intel/iwlwifi/mld/roc.c | 9 +++------ drivers/net/wireless/intel/iwlwifi/mld/sta.c | 10 +++------- drivers/net/wireless/intel/iwlwifi/mld/sta.h | 3 +-- drivers/net/wireless/intel/iwlwifi/mld/tx.c | 2 +- 8 files changed, 14 insertions(+), 21 deletions(-) diff --git a/drivers/net/wireless/intel/iwlwifi/mld/iface.c b/drivers/net/wireless/intel/iwlwifi/mld/iface.c index fdb7a3b3107d..3aacca5ed6a3 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/iface.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/iface.c @@ -22,6 +22,9 @@ void iwl_mld_cleanup_vif(void *data, u8 *mac, struct ieee80211_vif *vif) struct iwl_mld *mld = mld_vif->mld; struct iwl_mld_link *link; + if (mld_vif->aux_sta.sta_id != IWL_INVALID_STA) + iwl_mld_free_internal_sta(mld, &mld_vif->aux_sta); + /* EMLSR is turned back on during recovery */ vif->driver_flags &= ~IEEE80211_VIF_EML_ACTIVE; @@ -408,6 +411,7 @@ iwl_mld_init_vif(struct iwl_mld *mld, struct ieee80211_vif *vif) wiphy_delayed_work_init(&mld_vif->emlsr.tmp_non_bss_done_wk, iwl_mld_emlsr_tmp_non_bss_done_wk); } + iwl_mld_init_internal_sta(&mld_vif->aux_sta); return 0; } diff --git a/drivers/net/wireless/intel/iwlwifi/mld/iface.h b/drivers/net/wireless/intel/iwlwifi/mld/iface.h index 3437f0c422cf..15b437110351 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/iface.h +++ b/drivers/net/wireless/intel/iwlwifi/mld/iface.h @@ -143,6 +143,7 @@ struct iwl_mld_emlsr { * @dbgfs_slink: debugfs symlink for this interface * @roc_activity: the id of the roc_activity running. Relevant for p2p device * only. Set to %ROC_NUM_ACTIVITIES when not in use. + * @aux_sta: station used for remain on channel. Used in P2P device. */ struct iwl_mld_vif { /* Add here fields that need clean up on restart */ @@ -177,6 +178,7 @@ struct iwl_mld_vif { struct dentry *dbgfs_slink; #endif enum iwl_roc_activity roc_activity; + struct iwl_mld_int_sta aux_sta; }; static inline struct iwl_mld_vif * diff --git a/drivers/net/wireless/intel/iwlwifi/mld/link.c b/drivers/net/wireless/intel/iwlwifi/mld/link.c index 80f7290ef8b2..d0f56189ad3f 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/link.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/link.c @@ -782,7 +782,6 @@ iwl_mld_init_link(struct iwl_mld *mld, struct ieee80211_bss_conf *link, iwl_mld_init_internal_sta(&mld_link->bcast_sta); iwl_mld_init_internal_sta(&mld_link->mcast_sta); - iwl_mld_init_internal_sta(&mld_link->aux_sta); iwl_mld_init_internal_sta(&mld_link->mon_sta); if (!mld->fw_status.in_hw_restart) diff --git a/drivers/net/wireless/intel/iwlwifi/mld/link.h b/drivers/net/wireless/intel/iwlwifi/mld/link.h index 86ca5b9286f8..39f04aae5579 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/link.h +++ b/drivers/net/wireless/intel/iwlwifi/mld/link.h @@ -39,7 +39,6 @@ struct iwl_probe_resp_data { * @vif: the vif this link belongs to * @bcast_sta: station used for broadcast packets. Used in AP, GO and IBSS. * @mcast_sta: station used for multicast packets. Used in AP, GO and IBSS. - * @aux_sta: station used for remain on channel. Used in P2P device. * @mon_sta: station used for TX injection in monitor interface. * @link_id: over the air link ID * @ap_early_keys: The firmware cannot install keys before bcast/mcast STAs, @@ -73,7 +72,6 @@ struct iwl_mld_link { struct ieee80211_vif *vif; struct iwl_mld_int_sta bcast_sta; struct iwl_mld_int_sta mcast_sta; - struct iwl_mld_int_sta aux_sta; struct iwl_mld_int_sta mon_sta; u8 link_id; @@ -107,8 +105,6 @@ iwl_mld_cleanup_link(struct iwl_mld *mld, struct iwl_mld_link *link) iwl_mld_free_internal_sta(mld, &link->bcast_sta); if (link->mcast_sta.sta_id != IWL_INVALID_STA) iwl_mld_free_internal_sta(mld, &link->mcast_sta); - if (link->aux_sta.sta_id != IWL_INVALID_STA) - iwl_mld_free_internal_sta(mld, &link->aux_sta); if (link->mon_sta.sta_id != IWL_INVALID_STA) iwl_mld_free_internal_sta(mld, &link->mon_sta); } diff --git a/drivers/net/wireless/intel/iwlwifi/mld/roc.c b/drivers/net/wireless/intel/iwlwifi/mld/roc.c index b87faca23ceb..ac52cc06e4d6 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/roc.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/roc.c @@ -37,7 +37,7 @@ int iwl_mld_start_roc(struct ieee80211_hw *hw, struct ieee80211_vif *vif, { struct iwl_mld *mld = IWL_MAC80211_GET_MLD(hw); struct iwl_mld_vif *mld_vif = iwl_mld_vif_from_mac80211(vif); - struct iwl_mld_int_sta *aux_sta; + struct iwl_mld_int_sta *aux_sta = &mld_vif->aux_sta; struct iwl_roc_req cmd = { .action = cpu_to_le32(FW_CTXT_ACTION_ADD), }; @@ -79,9 +79,6 @@ int iwl_mld_start_roc(struct ieee80211_hw *hw, struct ieee80211_vif *vif, if (WARN_ON(mld_vif->roc_activity != ROC_NUM_ACTIVITIES)) return -EBUSY; - /* No MLO on P2P device */ - aux_sta = &mld_vif->deflink.aux_sta; - ret = iwl_mld_add_aux_sta(mld, aux_sta); if (ret) return ret; @@ -136,9 +133,9 @@ static void iwl_mld_destroy_roc(struct iwl_mld *mld, * we can flush the Tx on the queues */ - iwl_mld_flush_link_sta_txqs(mld, mld_vif->deflink.aux_sta.sta_id); + iwl_mld_flush_link_sta_txqs(mld, mld_vif->aux_sta.sta_id); - iwl_mld_remove_aux_sta(mld, vif, &vif->bss_conf); + iwl_mld_remove_aux_sta(mld, vif); } int iwl_mld_cancel_roc(struct ieee80211_hw *hw, diff --git a/drivers/net/wireless/intel/iwlwifi/mld/sta.c b/drivers/net/wireless/intel/iwlwifi/mld/sta.c index 317388ad2170..bc5313f44fde 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/sta.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/sta.c @@ -1160,19 +1160,15 @@ void iwl_mld_remove_mcast_sta(struct iwl_mld *mld, } void iwl_mld_remove_aux_sta(struct iwl_mld *mld, - struct ieee80211_vif *vif, - struct ieee80211_bss_conf *link) + struct ieee80211_vif *vif) { - struct iwl_mld_link *mld_link = iwl_mld_link_from_mac80211(link); - - if (WARN_ON(!mld_link)) - return; + struct iwl_mld_vif *mld_vif = iwl_mld_vif_from_mac80211(vif); /* TODO: Hotspot 2.0 */ if (WARN_ON(vif->type != NL80211_IFTYPE_P2P_DEVICE)) return; - iwl_mld_remove_internal_sta(mld, &mld_link->aux_sta, false, + iwl_mld_remove_internal_sta(mld, &mld_vif->aux_sta, false, IWL_MAX_TID_COUNT); } diff --git a/drivers/net/wireless/intel/iwlwifi/mld/sta.h b/drivers/net/wireless/intel/iwlwifi/mld/sta.h index c45d815d0c73..1897b121aae2 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/sta.h +++ b/drivers/net/wireless/intel/iwlwifi/mld/sta.h @@ -260,8 +260,7 @@ void iwl_mld_remove_mcast_sta(struct iwl_mld *mld, struct ieee80211_bss_conf *link); void iwl_mld_remove_aux_sta(struct iwl_mld *mld, - struct ieee80211_vif *vif, - struct ieee80211_bss_conf *link); + struct ieee80211_vif *vif); void iwl_mld_remove_mon_sta(struct iwl_mld *mld, struct ieee80211_vif *vif, diff --git a/drivers/net/wireless/intel/iwlwifi/mld/tx.c b/drivers/net/wireless/intel/iwlwifi/mld/tx.c index e478afbc61f4..96ea6320c084 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/tx.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/tx.c @@ -645,7 +645,7 @@ iwl_mld_get_tx_queue_id(struct iwl_mld *mld, struct ieee80211_txq *txq, WARN_ON(!ieee80211_is_mgmt(fc)); - return mld_vif->deflink.aux_sta.queue_id; + return mld_vif->aux_sta.queue_id; case NL80211_IFTYPE_MONITOR: mld_vif = iwl_mld_vif_from_mac80211(info->control.vif); return mld_vif->deflink.mon_sta.queue_id; -- 2.51.0 From 2903fe335e255965e576642dde9e674483617d1b Mon Sep 17 00:00:00 2001 From: Pagadala Yesu Anjaneyulu Date: Fri, 9 May 2025 13:44:51 +0300 Subject: [PATCH 06/16] wifi: iwlwifi: mld: Block EMLSR only when ready to enter ROC If one of the stages in starting a ROC failed, the ROC will not start nor end so EMLSR will stay blocked forever. Block EMLSR once all ROC conditions are validated and clear EMLSR blocked reasons in mld_vif cleanup. Signed-off-by: Pagadala Yesu Anjaneyulu Link: https://patch.msgid.link/20250509104454.2582160-13-miriam.rachel.korenblit@intel.com Signed-off-by: Miri Korenblit --- drivers/net/wireless/intel/iwlwifi/mld/iface.c | 2 ++ drivers/net/wireless/intel/iwlwifi/mld/roc.c | 14 +++++++------- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/drivers/net/wireless/intel/iwlwifi/mld/iface.c b/drivers/net/wireless/intel/iwlwifi/mld/iface.c index 3aacca5ed6a3..235b55e0fe59 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/iface.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/iface.c @@ -22,6 +22,8 @@ void iwl_mld_cleanup_vif(void *data, u8 *mac, struct ieee80211_vif *vif) struct iwl_mld *mld = mld_vif->mld; struct iwl_mld_link *link; + mld_vif->emlsr.blocked_reasons &= ~IWL_MLD_EMLSR_BLOCKED_ROC; + if (mld_vif->aux_sta.sta_id != IWL_INVALID_STA) iwl_mld_free_internal_sta(mld, &mld_vif->aux_sta); diff --git a/drivers/net/wireless/intel/iwlwifi/mld/roc.c b/drivers/net/wireless/intel/iwlwifi/mld/roc.c index ac52cc06e4d6..cfd010c1ca80 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/roc.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/roc.c @@ -49,13 +49,6 @@ int iwl_mld_start_roc(struct ieee80211_hw *hw, struct ieee80211_vif *vif, lockdep_assert_wiphy(mld->wiphy); - ieee80211_iterate_active_interfaces_mtx(mld->hw, - IEEE80211_IFACE_ITER_NORMAL, - iwl_mld_vif_iter_emlsr_block_roc, - &ret); - if (ret) - return ret; - /* TODO: task=Hotspot 2.0 */ if (vif->type != NL80211_IFTYPE_P2P_DEVICE) { IWL_ERR(mld, "NOT SUPPORTED: ROC on vif->type %d\n", @@ -79,6 +72,13 @@ int iwl_mld_start_roc(struct ieee80211_hw *hw, struct ieee80211_vif *vif, if (WARN_ON(mld_vif->roc_activity != ROC_NUM_ACTIVITIES)) return -EBUSY; + ieee80211_iterate_active_interfaces_mtx(mld->hw, + IEEE80211_IFACE_ITER_NORMAL, + iwl_mld_vif_iter_emlsr_block_roc, + &ret); + if (ret) + return ret; + ret = iwl_mld_add_aux_sta(mld, aux_sta); if (ret) return ret; -- 2.51.0 From 305e4e6b862c7995617ee98b7aaf07ea3b074009 Mon Sep 17 00:00:00 2001 From: Pagadala Yesu Anjaneyulu Date: Fri, 9 May 2025 13:44:52 +0300 Subject: [PATCH 07/16] wifi: iwlwifi: mld: add support for ROC on BSS add support for remain on channel on BSS vif for iwlmld. Signed-off-by: Pagadala Yesu Anjaneyulu Link: https://patch.msgid.link/20250509104454.2582160-14-miriam.rachel.korenblit@intel.com Signed-off-by: Miri Korenblit --- .../net/wireless/intel/iwlwifi/mld/iface.h | 4 +- drivers/net/wireless/intel/iwlwifi/mld/mld.h | 2 + drivers/net/wireless/intel/iwlwifi/mld/roc.c | 53 ++++++++++++------- drivers/net/wireless/intel/iwlwifi/mld/sta.c | 4 +- drivers/net/wireless/intel/iwlwifi/mld/tx.c | 22 +++++++- 5 files changed, 60 insertions(+), 25 deletions(-) diff --git a/drivers/net/wireless/intel/iwlwifi/mld/iface.h b/drivers/net/wireless/intel/iwlwifi/mld/iface.h index 15b437110351..49e2ce65557d 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/iface.h +++ b/drivers/net/wireless/intel/iwlwifi/mld/iface.h @@ -141,8 +141,8 @@ struct iwl_mld_emlsr { * @use_ps_poll: use ps_poll frames * @disable_bf: disable beacon filter * @dbgfs_slink: debugfs symlink for this interface - * @roc_activity: the id of the roc_activity running. Relevant for p2p device - * only. Set to %ROC_NUM_ACTIVITIES when not in use. + * @roc_activity: the id of the roc_activity running. Relevant for STA and + * p2p device only. Set to %ROC_NUM_ACTIVITIES when not in use. * @aux_sta: station used for remain on channel. Used in P2P device. */ struct iwl_mld_vif { diff --git a/drivers/net/wireless/intel/iwlwifi/mld/mld.h b/drivers/net/wireless/intel/iwlwifi/mld/mld.h index 1a2c44f44eff..74fcaad85a32 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/mld.h +++ b/drivers/net/wireless/intel/iwlwifi/mld/mld.h @@ -127,6 +127,7 @@ * cleanup using iwl_mld_free_internal_sta * @netdetect: indicates the FW is in suspend mode with netdetect configured * @p2p_device_vif: points to the p2p device vif if exists + * @bss_roc_vif: points to the BSS vif that has an active ROC. * @dev: pointer to device struct. For printing purposes * @trans: pointer to the transport layer * @cfg: pointer to the device configuration @@ -212,6 +213,7 @@ struct iwl_mld { bool netdetect; #endif /* CONFIG_PM_SLEEP */ struct ieee80211_vif *p2p_device_vif; + struct ieee80211_vif *bss_roc_vif; struct iwl_bt_coex_profile_notif last_bt_notif; ); struct ieee80211_link_sta __rcu *fw_id_to_link_sta[IWL_STATION_COUNT_MAX]; diff --git a/drivers/net/wireless/intel/iwlwifi/mld/roc.c b/drivers/net/wireless/intel/iwlwifi/mld/roc.c index cfd010c1ca80..944d70901de5 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/roc.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/roc.c @@ -49,29 +49,36 @@ int iwl_mld_start_roc(struct ieee80211_hw *hw, struct ieee80211_vif *vif, lockdep_assert_wiphy(mld->wiphy); - /* TODO: task=Hotspot 2.0 */ - if (vif->type != NL80211_IFTYPE_P2P_DEVICE) { + if (vif->type != NL80211_IFTYPE_P2P_DEVICE && + vif->type != NL80211_IFTYPE_STATION) { IWL_ERR(mld, "NOT SUPPORTED: ROC on vif->type %d\n", vif->type); return -EOPNOTSUPP; } - switch (type) { - case IEEE80211_ROC_TYPE_NORMAL: - activity = ROC_ACTIVITY_P2P_DISC; - break; - case IEEE80211_ROC_TYPE_MGMT_TX: - activity = ROC_ACTIVITY_P2P_NEG; - break; - default: - WARN_ONCE(1, "Got an invalid P2P ROC type\n"); - return -EINVAL; + if (vif->type == NL80211_IFTYPE_P2P_DEVICE) { + switch (type) { + case IEEE80211_ROC_TYPE_NORMAL: + activity = ROC_ACTIVITY_P2P_DISC; + break; + case IEEE80211_ROC_TYPE_MGMT_TX: + activity = ROC_ACTIVITY_P2P_NEG; + break; + default: + WARN_ONCE(1, "Got an invalid P2P ROC type\n"); + return -EINVAL; + } + } else { + activity = ROC_ACTIVITY_HOTSPOT; } if (WARN_ON(mld_vif->roc_activity != ROC_NUM_ACTIVITIES)) return -EBUSY; + if (vif->type == NL80211_IFTYPE_STATION && mld->bss_roc_vif) + return -EBUSY; + ieee80211_iterate_active_interfaces_mtx(mld->hw, IEEE80211_IFACE_ITER_NORMAL, iwl_mld_vif_iter_emlsr_block_roc, @@ -88,9 +95,6 @@ int iwl_mld_start_roc(struct ieee80211_hw *hw, struct ieee80211_vif *vif, cmd.channel_info.channel = cpu_to_le32(channel->hw_value); cmd.channel_info.band = iwl_mld_nl80211_band_to_fw(channel->band); cmd.channel_info.width = IWL_PHY_CHANNEL_MODE20; - /* TODO: task=Hotspot 2.0, revisit those parameters when we add an ROC - * on the BSS vif - */ cmd.max_delay = cpu_to_le32(AUX_ROC_MAX_DELAY); cmd.duration = cpu_to_le32(MSEC_TO_TU(duration)); @@ -102,8 +106,12 @@ int iwl_mld_start_roc(struct ieee80211_hw *hw, struct ieee80211_vif *vif, IWL_ERR(mld, "Couldn't send the ROC_CMD\n"); return ret; } + mld_vif->roc_activity = activity; + if (vif->type == NL80211_IFTYPE_STATION) + mld->bss_roc_vif = vif; + return 0; } @@ -122,6 +130,9 @@ static void iwl_mld_destroy_roc(struct iwl_mld *mld, { mld_vif->roc_activity = ROC_NUM_ACTIVITIES; + if (vif->type == NL80211_IFTYPE_STATION) + mld->bss_roc_vif = NULL; + ieee80211_iterate_active_interfaces_mtx(mld->hw, IEEE80211_IFACE_ITER_NORMAL, iwl_mld_vif_iter_emlsr_unblock_roc, @@ -153,8 +164,8 @@ int iwl_mld_cancel_roc(struct ieee80211_hw *hw, lockdep_assert_wiphy(mld->wiphy); - /* TODO: task=Hotspot 2.0 */ - if (WARN_ON(vif->type != NL80211_IFTYPE_P2P_DEVICE)) + if (WARN_ON(vif->type != NL80211_IFTYPE_P2P_DEVICE && + vif->type != NL80211_IFTYPE_STATION)) return -EOPNOTSUPP; /* No roc activity running it's probably already done */ @@ -189,9 +200,13 @@ void iwl_mld_handle_roc_notif(struct iwl_mld *mld, { const struct iwl_roc_notif *notif = (void *)pkt->data; u32 activity = le32_to_cpu(notif->activity); - /* TODO: task=Hotspot 2.0 - roc can run on BSS */ - struct ieee80211_vif *vif = mld->p2p_device_vif; struct iwl_mld_vif *mld_vif; + struct ieee80211_vif *vif; + + if (activity == ROC_ACTIVITY_HOTSPOT) + vif = mld->bss_roc_vif; + else + vif = mld->p2p_device_vif; if (WARN_ON(!vif)) return; diff --git a/drivers/net/wireless/intel/iwlwifi/mld/sta.c b/drivers/net/wireless/intel/iwlwifi/mld/sta.c index bc5313f44fde..8fb51209b4a6 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/sta.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/sta.c @@ -1164,8 +1164,8 @@ void iwl_mld_remove_aux_sta(struct iwl_mld *mld, { struct iwl_mld_vif *mld_vif = iwl_mld_vif_from_mac80211(vif); - /* TODO: Hotspot 2.0 */ - if (WARN_ON(vif->type != NL80211_IFTYPE_P2P_DEVICE)) + if (WARN_ON(vif->type != NL80211_IFTYPE_P2P_DEVICE && + vif->type != NL80211_IFTYPE_STATION)) return; iwl_mld_remove_internal_sta(mld, &mld_vif->aux_sta, false, diff --git a/drivers/net/wireless/intel/iwlwifi/mld/tx.c b/drivers/net/wireless/intel/iwlwifi/mld/tx.c index 96ea6320c084..4d4d3308a90d 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/tx.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/tx.c @@ -638,8 +638,11 @@ iwl_mld_get_tx_queue_id(struct iwl_mld *mld, struct ieee80211_txq *txq, case NL80211_IFTYPE_P2P_DEVICE: mld_vif = iwl_mld_vif_from_mac80211(info->control.vif); - if (mld_vif->roc_activity == ROC_NUM_ACTIVITIES) { - IWL_DEBUG_DROP(mld, "Drop tx outside ROC\n"); + if (mld_vif->roc_activity != ROC_ACTIVITY_P2P_DISC && + mld_vif->roc_activity != ROC_ACTIVITY_P2P_NEG) { + IWL_DEBUG_DROP(mld, + "Drop tx outside ROC with activity %d\n", + mld_vif->roc_activity); return IWL_MLD_INVALID_DROP_TX; } @@ -649,6 +652,21 @@ iwl_mld_get_tx_queue_id(struct iwl_mld *mld, struct ieee80211_txq *txq, case NL80211_IFTYPE_MONITOR: mld_vif = iwl_mld_vif_from_mac80211(info->control.vif); return mld_vif->deflink.mon_sta.queue_id; + case NL80211_IFTYPE_STATION: + mld_vif = iwl_mld_vif_from_mac80211(info->control.vif); + + if (!(info->flags & IEEE80211_TX_CTL_TX_OFFCHAN)) { + IWL_DEBUG_DROP(mld, "Drop tx not off-channel\n"); + return IWL_MLD_INVALID_DROP_TX; + } + + if (mld_vif->roc_activity != ROC_ACTIVITY_HOTSPOT) { + IWL_DEBUG_DROP(mld, "Drop tx outside ROC\n"); + return IWL_MLD_INVALID_DROP_TX; + } + + WARN_ON(!ieee80211_is_mgmt(fc)); + return mld_vif->aux_sta.queue_id; default: WARN_ONCE(1, "Unsupported vif type\n"); break; -- 2.51.0 From a10bcb99e5653841cff2f57b2cf065c1da77fb25 Mon Sep 17 00:00:00 2001 From: Johannes Berg Date: Fri, 9 May 2025 13:44:53 +0300 Subject: [PATCH 08/16] wifi: iwlwifi: mvm/mld: allow puncturing use in 5 GHz It was decided this was supported after all, so remove the restriction. Signed-off-by: Johannes Berg Link: https://patch.msgid.link/20250509104454.2582160-15-miriam.rachel.korenblit@intel.com Signed-off-by: Miri Korenblit --- drivers/net/wireless/intel/iwlwifi/mld/mac80211.c | 1 - drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c | 2 -- 2 files changed, 3 deletions(-) diff --git a/drivers/net/wireless/intel/iwlwifi/mld/mac80211.c b/drivers/net/wireless/intel/iwlwifi/mld/mac80211.c index 8677dbd2b4b6..92ea8f896478 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/mac80211.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/mac80211.c @@ -243,7 +243,6 @@ static void iwl_mac_hw_set_flags(struct iwl_mld *mld) ieee80211_hw_set(hw, TX_AMPDU_SETUP_IN_HW); ieee80211_hw_set(hw, HAS_RATE_CONTROL); ieee80211_hw_set(hw, SUPPORTS_REORDERING_BUFFER); - ieee80211_hw_set(hw, DISALLOW_PUNCTURING_5GHZ); ieee80211_hw_set(hw, SINGLE_SCAN_ON_ALL_BANDS); ieee80211_hw_set(hw, SUPPORTS_AMSDU_IN_AMPDU); ieee80211_hw_set(hw, TDLS_WIDER_BW); diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c index 37a24f561770..0f056a6641bd 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c @@ -731,8 +731,6 @@ int iwl_mvm_mac_setup_register(struct iwl_mvm *mvm) mvm->rts_threshold = IEEE80211_MAX_RTS_THRESHOLD; - ieee80211_hw_set(hw, DISALLOW_PUNCTURING_5GHZ); - #ifdef CONFIG_PM_SLEEP if ((unified || mvm->fw->img[IWL_UCODE_WOWLAN].num_sec) && device_can_wakeup(mvm->trans->dev)) { -- 2.51.0 From 015b5fee8fdfbb77aed3dab2aee51aa47496c66c Mon Sep 17 00:00:00 2001 From: Johannes Berg Date: Sat, 10 May 2025 21:48:13 +0300 Subject: [PATCH 09/16] wifi: iwlwifi: dbg: fix dump trigger split check Evidently, I confused the fields here, apply_policy should be checked for IWL_FW_INI_APPLY_POLICY_SPLIT_DUMP_RESET. Fix that. Signed-off-by: Johannes Berg Reviewed-by: Eilon Rinat Signed-off-by: Miri Korenblit Link: https://patch.msgid.link/20250510214621.c802d5cc1312.I0cf5d74f91349499ab35eef0ebdc604961e492ef@changeid --- drivers/net/wireless/intel/iwlwifi/fw/dbg.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/wireless/intel/iwlwifi/fw/dbg.c b/drivers/net/wireless/intel/iwlwifi/fw/dbg.c index 6ba0bcbcd56b..ea739ebe7cb0 100644 --- a/drivers/net/wireless/intel/iwlwifi/fw/dbg.c +++ b/drivers/net/wireless/intel/iwlwifi/fw/dbg.c @@ -2724,7 +2724,7 @@ static u32 iwl_dump_ini_trigger(struct iwl_fw_runtime *fwrt, BUILD_BUG_ON((sizeof(trigger->regions_mask) * BITS_PER_BYTE) < ARRAY_SIZE(fwrt->trans->dbg.active_regions)); - if (trigger->time_point & + if (trigger->apply_policy & cpu_to_le32(IWL_FW_INI_APPLY_POLICY_SPLIT_DUMP_RESET)) { size += iwl_dump_ini_dump_regions(fwrt, dump_data, list, tp_id, regions_mask, &imr_reg_data, -- 2.51.0 From 6ed7430bdd00fda5ddc796ab447931c47b2a4e83 Mon Sep 17 00:00:00 2001 From: Somashekhar Puttagangaiah Date: Sat, 10 May 2025 21:48:14 +0300 Subject: [PATCH 10/16] wifi: iwlwifi: mld: add debug log instead of warning During link selection if the links does not meet the valid grade criteria then add debug log instead of warning. Signed-off-by: Somashekhar Puttagangaiah Signed-off-by: Miri Korenblit Link: https://patch.msgid.link/20250510214621.2593268ca988.I9786126cd1078caec8587b166a7f8735300c951d@changeid --- drivers/net/wireless/intel/iwlwifi/mld/mlo.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/net/wireless/intel/iwlwifi/mld/mlo.c b/drivers/net/wireless/intel/iwlwifi/mld/mlo.c index 93d0547798c6..71edfb1cf68e 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/mlo.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/mlo.c @@ -974,8 +974,11 @@ static void _iwl_mld_select_links(struct iwl_mld *mld, n_data = iwl_mld_set_link_sel_data(mld, vif, data, usable_links, &best_idx); - if (WARN(!n_data, "Couldn't find a valid grade for any link!\n")) + if (!n_data) { + IWL_DEBUG_EHT(mld, + "Couldn't find a valid grade for any link!\n"); return; + } /* Default to selecting the single best link */ best_link = &data[best_idx]; -- 2.51.0 From 11c7ebe30a1208d5dc59e59ed699dd50dd412aef Mon Sep 17 00:00:00 2001 From: Johannes Berg Date: Sat, 10 May 2025 21:48:15 +0300 Subject: [PATCH 11/16] wifi: iwlwifi: cfg: remove some unused names There are a couple of old names that don't actually get used. Remove them. Signed-off-by: Johannes Berg Signed-off-by: Miri Korenblit Link: https://patch.msgid.link/20250510214621.1ed5fc197ba0.I52d7bb49db24523ad93ad83a89c8e846d9a43241@changeid --- drivers/net/wireless/intel/iwlwifi/cfg/7000.c | 3 --- drivers/net/wireless/intel/iwlwifi/iwl-config.h | 3 --- 2 files changed, 6 deletions(-) diff --git a/drivers/net/wireless/intel/iwlwifi/cfg/7000.c b/drivers/net/wireless/intel/iwlwifi/cfg/7000.c index b6068dfcbd76..74b8ca55fba2 100644 --- a/drivers/net/wireless/intel/iwlwifi/cfg/7000.c +++ b/drivers/net/wireless/intel/iwlwifi/cfg/7000.c @@ -126,9 +126,6 @@ const char iwl3168_2ac_name[] = "Intel(R) Dual Band Wireless AC 3168"; const char iwl7265_2ac_name[] = "Intel(R) Dual Band Wireless AC 7265"; const char iwl7265_2n_name[] = "Intel(R) Dual Band Wireless N 7265"; const char iwl7265_n_name[] = "Intel(R) Wireless N 7265"; -const char iwl7265d_2ac_name[] = "Intel(R) Dual Band Wireless AC 7265"; -const char iwl7265d_2n_name[] = "Intel(R) Dual Band Wireless N 7265"; -const char iwl7265d_n_name[] = "Intel(R) Wireless N 7265"; const struct iwl_rf_cfg iwl7260_cfg = { .fw_name_pre = IWL7260_FW_PRE, diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-config.h b/drivers/net/wireless/intel/iwlwifi/iwl-config.h index 031c68fbf8b1..719986ccf316 100644 --- a/drivers/net/wireless/intel/iwlwifi/iwl-config.h +++ b/drivers/net/wireless/intel/iwlwifi/iwl-config.h @@ -593,9 +593,6 @@ extern const char iwl3168_2ac_name[]; extern const char iwl7265_2ac_name[]; extern const char iwl7265_2n_name[]; extern const char iwl7265_n_name[]; -extern const char iwl7265d_2ac_name[]; -extern const char iwl7265d_2n_name[]; -extern const char iwl7265d_n_name[]; extern const char iwl8260_2n_name[]; extern const char iwl8260_2ac_name[]; extern const char iwl8265_2ac_name[]; -- 2.51.0 From b1c3640d3ed06d787143c9b55cd3b683e2845ead Mon Sep 17 00:00:00 2001 From: Johannes Berg Date: Sat, 10 May 2025 21:48:16 +0300 Subject: [PATCH 12/16] wifi: iwlwifi: cfg: fix some device names Officially, the device names have dashes ("Wireless-N"), so add them. Signed-off-by: Johannes Berg Signed-off-by: Miri Korenblit Link: https://patch.msgid.link/20250510214621.4f7bbd57680f.Ida19b5e696723db5839c13341d6ca7085e8c2568@changeid --- drivers/net/wireless/intel/iwlwifi/cfg/7000.c | 10 +++++----- drivers/net/wireless/intel/iwlwifi/cfg/8000.c | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/drivers/net/wireless/intel/iwlwifi/cfg/7000.c b/drivers/net/wireless/intel/iwlwifi/cfg/7000.c index 74b8ca55fba2..f987ad3192c1 100644 --- a/drivers/net/wireless/intel/iwlwifi/cfg/7000.c +++ b/drivers/net/wireless/intel/iwlwifi/cfg/7000.c @@ -121,11 +121,11 @@ const char iwl7260_n_name[] = "Intel(R) Wireless N 7260"; const char iwl3160_2ac_name[] = "Intel(R) Dual Band Wireless AC 3160"; const char iwl3160_2n_name[] = "Intel(R) Dual Band Wireless N 3160"; const char iwl3160_n_name[] = "Intel(R) Wireless N 3160"; -const char iwl3165_2ac_name[] = "Intel(R) Dual Band Wireless AC 3165"; -const char iwl3168_2ac_name[] = "Intel(R) Dual Band Wireless AC 3168"; -const char iwl7265_2ac_name[] = "Intel(R) Dual Band Wireless AC 7265"; -const char iwl7265_2n_name[] = "Intel(R) Dual Band Wireless N 7265"; -const char iwl7265_n_name[] = "Intel(R) Wireless N 7265"; +const char iwl3165_2ac_name[] = "Intel(R) Dual Band Wireless-AC 3165"; +const char iwl3168_2ac_name[] = "Intel(R) Dual Band Wireless-AC 3168"; +const char iwl7265_2ac_name[] = "Intel(R) Dual Band Wireless-AC 7265"; +const char iwl7265_2n_name[] = "Intel(R) Dual Band Wireless-N 7265"; +const char iwl7265_n_name[] = "Intel(R) Wireless-N 7265"; const struct iwl_rf_cfg iwl7260_cfg = { .fw_name_pre = IWL7260_FW_PRE, diff --git a/drivers/net/wireless/intel/iwlwifi/cfg/8000.c b/drivers/net/wireless/intel/iwlwifi/cfg/8000.c index 7e2be10ff3ae..6bfc8e38296b 100644 --- a/drivers/net/wireless/intel/iwlwifi/cfg/8000.c +++ b/drivers/net/wireless/intel/iwlwifi/cfg/8000.c @@ -99,11 +99,11 @@ const struct iwl_mac_cfg iwl8000_mac_cfg = { .ucode_api_max = IWL8265_UCODE_API_MAX, \ .ucode_api_min = IWL8265_UCODE_API_MIN \ -const char iwl8260_2n_name[] = "Intel(R) Dual Band Wireless N 8260"; -const char iwl8260_2ac_name[] = "Intel(R) Dual Band Wireless AC 8260"; -const char iwl8265_2ac_name[] = "Intel(R) Dual Band Wireless AC 8265"; -const char iwl8275_2ac_name[] = "Intel(R) Dual Band Wireless AC 8275"; -const char iwl4165_2ac_name[] = "Intel(R) Dual Band Wireless AC 4165"; +const char iwl8260_2n_name[] = "Intel(R) Dual Band Wireless-N 8260"; +const char iwl8260_2ac_name[] = "Intel(R) Dual Band Wireless-AC 8260"; +const char iwl8265_2ac_name[] = "Intel(R) Dual Band Wireless-AC 8265"; +const char iwl8275_2ac_name[] = "Intel(R) Dual Band Wireless-AC 8275"; +const char iwl4165_2ac_name[] = "Intel(R) Dual Band Wireless-AC 4165"; const struct iwl_rf_cfg iwl8260_cfg = { .fw_name_pre = IWL8000_FW_PRE, -- 2.51.0 From 0d3e538131e018c77d6361ba25cf72cd58dfd75f Mon Sep 17 00:00:00 2001 From: Johannes Berg Date: Sat, 10 May 2025 21:48:17 +0300 Subject: [PATCH 13/16] wifi: iwlwifi: cfg: fix Ma device configs These should be according to their RF type, not just use GF unconditionally. Fix that. Signed-off-by: Johannes Berg Signed-off-by: Miri Korenblit Link: https://patch.msgid.link/20250510214621.4dd365eb76cd.I91f368df691a3ce6c545d9cdc44676e7883efa16@changeid --- drivers/net/wireless/intel/iwlwifi/pcie/drv.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/drv.c b/drivers/net/wireless/intel/iwlwifi/pcie/drv.c index 0d26fd0168a5..51c9a871d1da 100644 --- a/drivers/net/wireless/intel/iwlwifi/pcie/drv.c +++ b/drivers/net/wireless/intel/iwlwifi/pcie/drv.c @@ -1379,11 +1379,9 @@ VISIBLE_IF_IWLWIFI_KUNIT const struct iwl_dev_info iwl_dev_info_table[] = { MAC_STEP(B), RF_TYPE(HR2), BW_NOT_LIMITED, NO_CDB), /* Ma */ - IWL_DEV_INFO(iwl_rf_gf, iwl_ax201_name, MAC_TYPE(MA), RF_TYPE(HR2), + IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, MAC_TYPE(MA), RF_TYPE(HR2), NO_CDB), IWL_DEV_INFO(iwl_rf_gf, iwl_ax211_name, MAC_TYPE(MA), RF_TYPE(GF)), - IWL_DEV_INFO(iwl_rf_gf, iwl_ax231_name, MAC_TYPE(MA), RF_TYPE(FM), - NO_CDB), /* So with Hr */ IWL_DEV_INFO(iwl_rf_hr_80mhz, iwl_ax203_name, MAC_TYPE(SO), @@ -1450,6 +1448,8 @@ VISIBLE_IF_IWLWIFI_KUNIT const struct iwl_dev_info iwl_dev_info_table[] = { #endif /* CONFIG_IWLMVM */ #if IS_ENABLED(CONFIG_IWLMLD) + IWL_DEV_INFO(iwl_rf_fm, iwl_ax231_name, MAC_TYPE(MA), RF_TYPE(FM), + NO_CDB), /* Bz */ IWL_DEV_INFO(iwl_rf_fm, iwl_ax201_name, MAC_TYPE(BZ), RF_TYPE(HR2)), -- 2.51.0 From 30e6a08a7c4706c7006610fc458d0c4b6ba2ba9b Mon Sep 17 00:00:00 2001 From: Johannes Berg Date: Sat, 10 May 2025 21:48:18 +0300 Subject: [PATCH 14/16] wifi: iwlwifi: cfg: fix and unify Killer/JF configs All of these should be 160 MHz, and they can be recognised by just the subdevice ID. Unify all the Killer/JF entries. Signed-off-by: Johannes Berg Signed-off-by: Miri Korenblit Link: https://patch.msgid.link/20250510214621.a93788f159ec.I114f09a0f61849ac3b75d12d7def35be842e5b7c@changeid --- drivers/net/wireless/intel/iwlwifi/cfg/9000.c | 6 +- drivers/net/wireless/intel/iwlwifi/pcie/drv.c | 58 ++----------------- 2 files changed, 7 insertions(+), 57 deletions(-) diff --git a/drivers/net/wireless/intel/iwlwifi/cfg/9000.c b/drivers/net/wireless/intel/iwlwifi/cfg/9000.c index 7bfe497bebb7..816cf72e32e7 100644 --- a/drivers/net/wireless/intel/iwlwifi/cfg/9000.c +++ b/drivers/net/wireless/intel/iwlwifi/cfg/9000.c @@ -115,14 +115,10 @@ const char iwl9462_160_name[] = "Intel(R) Wireless-AC 9462 160MHz"; const char iwl9560_160_name[] = "Intel(R) Wireless-AC 9560 160MHz"; const char iwl9260_killer_1550_name[] = - "Killer (R) Wireless-AC 1550 Wireless Network Adapter (9260NGW) 160MHz"; + "Killer(R) Wireless-AC 1550 Wireless Network Adapter (9260NGW) 160MHz"; const char iwl9560_killer_1550i_name[] = - "Killer (R) Wireless-AC 1550i Wireless Network Adapter (9560NGW)"; -const char iwl9560_killer_1550i_160_name[] = "Killer(R) Wireless-AC 1550i Wireless Network Adapter (9560NGW) 160MHz"; const char iwl9560_killer_1550s_name[] = - "Killer (R) Wireless-AC 1550s Wireless Network Adapter (9560NGW)"; -const char iwl9560_killer_1550s_160_name[] = "Killer(R) Wireless-AC 1550s Wireless Network Adapter (9560D2W) 160MHz"; MODULE_FIRMWARE(IWL9000_MODULE_FIRMWARE(IWL9000_UCODE_API_MAX)); diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/drv.c b/drivers/net/wireless/intel/iwlwifi/pcie/drv.c index 51c9a871d1da..8d4aee2f7ce0 100644 --- a/drivers/net/wireless/intel/iwlwifi/pcie/drv.c +++ b/drivers/net/wireless/intel/iwlwifi/pcie/drv.c @@ -943,33 +943,12 @@ VISIBLE_IF_IWLWIFI_KUNIT const struct iwl_dev_info iwl_dev_info_table[] = { DEVICE(0x24FD), SUBDEV(0x1012)), IWL_DEV_INFO(iwl8265_cfg, iwl8275_2ac_name, DEVICE(0x24FD), SUBDEV(0x0012)), -/* 9000 */ - IWL_DEV_INFO(iwl_rf_jf, iwl9260_killer_1550_name, - DEVICE(0x2526), SUBDEV(0x1550)), - IWL_DEV_INFO(iwl_rf_jf, iwl9560_killer_1550s_name, - DEVICE(0x2526), SUBDEV(0x1551)), - IWL_DEV_INFO(iwl_rf_jf, iwl9560_killer_1550i_name, - DEVICE(0x2526), SUBDEV(0x1552)), - IWL_DEV_INFO(iwl_rf_jf, iwl9560_killer_1550s_name, - DEVICE(0x30DC), SUBDEV(0x1551)), - IWL_DEV_INFO(iwl_rf_jf, iwl9560_killer_1550i_name, - DEVICE(0x30DC), SUBDEV(0x1552)), - IWL_DEV_INFO(iwl_rf_jf, iwl9560_killer_1550s_name, - DEVICE(0x31DC), SUBDEV(0x1551)), - IWL_DEV_INFO(iwl_rf_jf, iwl9560_killer_1550i_name, - DEVICE(0x31DC), SUBDEV(0x1552)), - IWL_DEV_INFO(iwl_rf_jf, iwl9560_killer_1550s_name, - DEVICE(0xA370), SUBDEV(0x1551)), - IWL_DEV_INFO(iwl_rf_jf, iwl9560_killer_1550i_name, - DEVICE(0xA370), SUBDEV(0x1552)), - IWL_DEV_INFO(iwl_rf_jf, iwl9560_killer_1550s_160_name, - DEVICE(0x54F0), SUBDEV(0x1551)), - IWL_DEV_INFO(iwl_rf_jf, iwl9560_killer_1550i_name, - DEVICE(0x54F0), SUBDEV(0x1552)), - IWL_DEV_INFO(iwl_rf_jf, iwl9560_killer_1550s_160_name, - DEVICE(0x51F0), SUBDEV(0x1552)), - IWL_DEV_INFO(iwl_rf_jf, iwl9560_killer_1550i_160_name, - DEVICE(0x51F0), SUBDEV(0x1551)), + +/* Killer CRFs */ + IWL_DEV_INFO(iwl_rf_jf, iwl9260_killer_1550_name, SUBDEV(0x1550)), + IWL_DEV_INFO(iwl_rf_jf, iwl9560_killer_1550s_name, SUBDEV(0x1551)), + IWL_DEV_INFO(iwl_rf_jf, iwl9560_killer_1550i_name, SUBDEV(0x1552)), + IWL_DEV_INFO(iwl_rf_gf, iwl_ax411_killer_1690s_name, DEVICE(0x51F0), SUBDEV(0x1691)), IWL_DEV_INFO(iwl_rf_gf, iwl_ax411_killer_1690i_name, @@ -1192,16 +1171,6 @@ VISIBLE_IF_IWLWIFI_KUNIT const struct iwl_dev_info iwl_dev_info_table[] = { IWL_DEV_INFO(iwl_rf_gf, iwl_ax211_name, DEVICE(0x7AF0), SUBDEV(0x0A10)), - /* So with JF */ - IWL_DEV_INFO(iwl_rf_jf, iwl9560_killer_1550s_160_name, - DEVICE(0x7A70), SUBDEV(0x1551)), - IWL_DEV_INFO(iwl_rf_jf, iwl9560_killer_1550i_160_name, - DEVICE(0x7A70), SUBDEV(0x1552)), - IWL_DEV_INFO(iwl_rf_jf, iwl9560_killer_1550s_160_name, - DEVICE(0x7AF0), SUBDEV(0x1551)), - IWL_DEV_INFO(iwl_rf_jf, iwl9560_killer_1550i_160_name, - DEVICE(0x7AF0), SUBDEV(0x1552)), - /* SO with GF2 */ IWL_DEV_INFO(iwl_rf_gf, iwl_ax211_killer_1675s_name, DEVICE(0x51F0), SUBDEV(0x1671)), @@ -1301,11 +1270,6 @@ VISIBLE_IF_IWLWIFI_KUNIT const struct iwl_dev_info iwl_dev_info_table[] = { RF_TYPE(JF2), RF_ID(JF), BW_LIMITED, CORES(BT), NO_CDB), - IWL_DEV_INFO(iwl_rf_jf_80mhz, iwl9560_killer_1550s_name, - SUBDEV(0x1551), MAC_TYPE(QU), MAC_STEP(B), RF_TYPE(JF2)), - IWL_DEV_INFO(iwl_rf_jf_80mhz, iwl9560_killer_1550i_name, - SUBDEV(0x1552), MAC_TYPE(QU), MAC_STEP(B), RF_TYPE(JF2)), - /* Qu C step */ IWL_DEV_INFO(iwl_rf_jf, iwl9461_160_name, MAC_TYPE(QU), MAC_STEP(C), @@ -1330,11 +1294,6 @@ VISIBLE_IF_IWLWIFI_KUNIT const struct iwl_dev_info iwl_dev_info_table[] = { MAC_STEP(C), RF_TYPE(JF2), RF_ID(JF), BW_LIMITED, CORES(BT), NO_CDB), - IWL_DEV_INFO(iwl_rf_jf, iwl9560_killer_1550s_name, - SUBDEV(0x1551), MAC_TYPE(QU), MAC_STEP(C), RF_TYPE(JF2)), - IWL_DEV_INFO(iwl_rf_jf_80mhz, iwl9560_killer_1550i_name, - SUBDEV(0x1552), MAC_TYPE(QU), MAC_STEP(C), RF_TYPE(JF2)), - /* QuZ */ IWL_DEV_INFO(iwl_rf_jf, iwl9461_160_name, MAC_TYPE(QUZ), RF_TYPE(JF1), RF_ID(JF1), BW_NOT_LIMITED, CORES(BT), NO_CDB), @@ -1350,11 +1309,6 @@ VISIBLE_IF_IWLWIFI_KUNIT const struct iwl_dev_info iwl_dev_info_table[] = { IWL_DEV_INFO(iwl_rf_jf_80mhz, iwl9560_name, MAC_TYPE(QUZ), RF_TYPE(JF2), RF_ID(JF), BW_LIMITED, CORES(BT), NO_CDB), - IWL_DEV_INFO(iwl_rf_jf, iwl9560_killer_1550s_name, - SUBDEV(0x1551), MAC_TYPE(QUZ), RF_TYPE(JF2)), - IWL_DEV_INFO(iwl_rf_jf_80mhz, iwl9560_killer_1550i_name, - SUBDEV(0x1552), MAC_TYPE(QUZ), RF_TYPE(JF2)), - /* Qu with Hr */ /* Qu B step */ IWL_DEV_INFO(iwl_rf_hr1, iwl_ax101_name, MAC_TYPE(QU), -- 2.51.0 From 0efcd6bbabdd02898e4c9a3dd60fd1af204f7276 Mon Sep 17 00:00:00 2001 From: Johannes Berg Date: Sat, 10 May 2025 21:48:19 +0300 Subject: [PATCH 15/16] wifi: iwlwifi: cfg: unify and add some Killer devices Unify a number of Killer devices now that we no longer need to distinguish the MAC type, and add a few more that wouldn't have gotten the right name before. Signed-off-by: Johannes Berg Signed-off-by: Miri Korenblit Link: https://patch.msgid.link/20250510214621.a16b1c2740f8.I147b97ef2c8e99451806ea0e34a9eb5bff37c326@changeid --- .../net/wireless/intel/iwlwifi/cfg/rf-fm.c | 9 ++ .../net/wireless/intel/iwlwifi/iwl-config.h | 4 + drivers/net/wireless/intel/iwlwifi/pcie/drv.c | 122 +++++------------- 3 files changed, 43 insertions(+), 92 deletions(-) diff --git a/drivers/net/wireless/intel/iwlwifi/cfg/rf-fm.c b/drivers/net/wireless/intel/iwlwifi/cfg/rf-fm.c index dfd075bb0865..2d0cad9c5f2c 100644 --- a/drivers/net/wireless/intel/iwlwifi/cfg/rf-fm.c +++ b/drivers/net/wireless/intel/iwlwifi/cfg/rf-fm.c @@ -31,3 +31,12 @@ const struct iwl_rf_cfg iwl_rf_fm_160mhz = { IWL_DEVICE_FM, .bw_limit = 160, }; + +const char iwl_killer_be1750s_name[] = + "Killer(R) Wi-Fi 7 BE1750s 320MHz Wireless Network Adapter (BE201D2W)"; +const char iwl_killer_be1750i_name[] = + "Killer(R) Wi-Fi 7 BE1750i 320MHz Wireless Network Adapter (BE201NGW)"; +const char iwl_killer_be1750w_name[] = + "Killer(TM) Wi-Fi 7 BE1750w 320MHz Wireless Network Adapter (BE200D2W)"; +const char iwl_killer_be1750x_name[] = + "Killer(TM) Wi-Fi 7 BE1750x 320MHz Wireless Network Adapter (BE200NGW)"; diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-config.h b/drivers/net/wireless/intel/iwlwifi/iwl-config.h index 719986ccf316..69cbe138bad2 100644 --- a/drivers/net/wireless/intel/iwlwifi/iwl-config.h +++ b/drivers/net/wireless/intel/iwlwifi/iwl-config.h @@ -642,6 +642,10 @@ extern const char iwl_gl_name[]; extern const char iwl_mtp_name[]; extern const char iwl_dr_name[]; extern const char iwl_br_name[]; +extern const char iwl_killer_be1750s_name[]; +extern const char iwl_killer_be1750i_name[]; +extern const char iwl_killer_be1750w_name[]; +extern const char iwl_killer_be1750x_name[]; #if IS_ENABLED(CONFIG_IWLDVM) extern const struct iwl_rf_cfg iwl5300_agn_cfg; extern const struct iwl_rf_cfg iwl5350_agn_cfg; diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/drv.c b/drivers/net/wireless/intel/iwlwifi/pcie/drv.c index 8d4aee2f7ce0..b41b8aa75739 100644 --- a/drivers/net/wireless/intel/iwlwifi/pcie/drv.c +++ b/drivers/net/wireless/intel/iwlwifi/pcie/drv.c @@ -944,45 +944,37 @@ VISIBLE_IF_IWLWIFI_KUNIT const struct iwl_dev_info iwl_dev_info_table[] = { IWL_DEV_INFO(iwl8265_cfg, iwl8275_2ac_name, DEVICE(0x24FD), SUBDEV(0x0012)), +/* HR RF */ + /* FIXME - should have some RF match */ + IWL_DEV_INFO(iwl_rf_hr, iwl_ax200_name, DEVICE(0x2723)), + /* Killer CRFs */ IWL_DEV_INFO(iwl_rf_jf, iwl9260_killer_1550_name, SUBDEV(0x1550)), IWL_DEV_INFO(iwl_rf_jf, iwl9560_killer_1550s_name, SUBDEV(0x1551)), IWL_DEV_INFO(iwl_rf_jf, iwl9560_killer_1550i_name, SUBDEV(0x1552)), - IWL_DEV_INFO(iwl_rf_gf, iwl_ax411_killer_1690s_name, - DEVICE(0x51F0), SUBDEV(0x1691)), - IWL_DEV_INFO(iwl_rf_gf, iwl_ax411_killer_1690i_name, - DEVICE(0x51F0), SUBDEV(0x1692)), - IWL_DEV_INFO(iwl_rf_gf, iwl_ax411_killer_1690i_name, - DEVICE(0x51F1), SUBDEV(0x1692)), - IWL_DEV_INFO(iwl_rf_gf, iwl_ax411_killer_1690s_name, - DEVICE(0x54F0), SUBDEV(0x1691)), - IWL_DEV_INFO(iwl_rf_gf, iwl_ax411_killer_1690i_name, - DEVICE(0x54F0), SUBDEV(0x1692)), - IWL_DEV_INFO(iwl_rf_gf, iwl_ax411_killer_1690s_name, - DEVICE(0x7A70), SUBDEV(0x1691)), - IWL_DEV_INFO(iwl_rf_gf, iwl_ax411_killer_1690i_name, - DEVICE(0x7A70), SUBDEV(0x1692)), - IWL_DEV_INFO(iwl_rf_gf, iwl_ax411_killer_1690s_name, - DEVICE(0x7AF0), SUBDEV(0x1691)), - IWL_DEV_INFO(iwl_rf_gf, iwl_ax411_killer_1690i_name, - DEVICE(0x7AF0), SUBDEV(0x1692)), + IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_killer_1650s_name, SUBDEV(0x1651)), + IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_killer_1650i_name, SUBDEV(0x1652)), - IWL_DEV_INFO(iwl_rf_jf, iwl9260_1_name, - DEVICE(0x271C), SUBDEV(0x0214)), - IWL_DEV_INFO(iwl_rf_gf, iwl_ax411_killer_1690s_name, - DEVICE(0x7E40), SUBDEV(0x1691)), - IWL_DEV_INFO(iwl_rf_gf, iwl_ax411_killer_1690i_name, - DEVICE(0x7E40), SUBDEV(0x1692)), + IWL_DEV_INFO(iwl_rf_gf, iwl_ax211_killer_1675s_name, SUBDEV(0x1671)), + IWL_DEV_INFO(iwl_rf_gf, iwl_ax211_killer_1675i_name, SUBDEV(0x1672)), + IWL_DEV_INFO(iwl_rf_gf, iwl_ax210_killer_1675w_name, SUBDEV(0x1673)), + IWL_DEV_INFO(iwl_rf_gf, iwl_ax210_killer_1675x_name, SUBDEV(0x1674)), + IWL_DEV_INFO(iwl_rf_gf, iwl_ax411_killer_1690s_name, SUBDEV(0x1691)), + IWL_DEV_INFO(iwl_rf_gf, iwl_ax411_killer_1690i_name, SUBDEV(0x1692)), -/* AX200 */ - IWL_DEV_INFO(iwl_rf_hr, iwl_ax200_name, - DEVICE(0x2723)), +/* Killer discrete */ IWL_DEV_INFO(iwl_rf_hr, iwl_ax200_killer_1650w_name, DEVICE(0x2723), SUBDEV(0x1653)), IWL_DEV_INFO(iwl_rf_hr, iwl_ax200_killer_1650x_name, DEVICE(0x2723), SUBDEV(0x1654)), +/* JF RF */ + IWL_DEV_INFO(iwl_rf_jf, iwl9260_1_name, + DEVICE(0x271C), SUBDEV(0x0214)), + +/* AX200 */ + /* Qu with Hr */ IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, DEVICE(0x43F0), SUBDEV(0x0070)), @@ -992,10 +984,6 @@ VISIBLE_IF_IWLWIFI_KUNIT const struct iwl_dev_info iwl_dev_info_table[] = { DEVICE(0x43F0), SUBDEV(0x0078)), IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, DEVICE(0x43F0), SUBDEV(0x007C)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_killer_1650s_name, - DEVICE(0x43F0), SUBDEV(0x1651)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_killer_1650i_name, - DEVICE(0x43F0), SUBDEV(0x1652)), IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, DEVICE(0x43F0), SUBDEV(0x2074)), IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, @@ -1010,10 +998,6 @@ VISIBLE_IF_IWLWIFI_KUNIT const struct iwl_dev_info iwl_dev_info_table[] = { DEVICE(0xA0F0), SUBDEV(0x007C)), IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, DEVICE(0xA0F0), SUBDEV(0x0A10)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_killer_1650s_name, - DEVICE(0xA0F0), SUBDEV(0x1651)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_killer_1650i_name, - DEVICE(0xA0F0), SUBDEV(0x1652)), IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, DEVICE(0xA0F0), SUBDEV(0x2074)), IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, @@ -1032,10 +1016,6 @@ VISIBLE_IF_IWLWIFI_KUNIT const struct iwl_dev_info iwl_dev_info_table[] = { DEVICE(0x02F0), SUBDEV(0x007C)), IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, DEVICE(0x02F0), SUBDEV(0x0310)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_killer_1650s_name, - DEVICE(0x02F0), SUBDEV(0x1651)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_killer_1650i_name, - DEVICE(0x02F0), SUBDEV(0x1652)), IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, DEVICE(0x02F0), SUBDEV(0x2074)), IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, @@ -1050,10 +1030,6 @@ VISIBLE_IF_IWLWIFI_KUNIT const struct iwl_dev_info iwl_dev_info_table[] = { DEVICE(0x06F0), SUBDEV(0x007C)), IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, DEVICE(0x06F0), SUBDEV(0x0310)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_killer_1650s_name, - DEVICE(0x06F0), SUBDEV(0x1651)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_killer_1650i_name, - DEVICE(0x06F0), SUBDEV(0x1652)), IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, DEVICE(0x06F0), SUBDEV(0x2074)), IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, @@ -1068,10 +1044,6 @@ VISIBLE_IF_IWLWIFI_KUNIT const struct iwl_dev_info iwl_dev_info_table[] = { DEVICE(0x34F0), SUBDEV(0x007C)), IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, DEVICE(0x34F0), SUBDEV(0x0310)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_killer_1650s_name, - DEVICE(0x34F0), SUBDEV(0x1651)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_killer_1650i_name, - DEVICE(0x34F0), SUBDEV(0x1652)), IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, DEVICE(0x34F0), SUBDEV(0x2074)), IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, @@ -1087,10 +1059,6 @@ VISIBLE_IF_IWLWIFI_KUNIT const struct iwl_dev_info iwl_dev_info_table[] = { DEVICE(0x3DF0), SUBDEV(0x007C)), IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, DEVICE(0x3DF0), SUBDEV(0x0310)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_killer_1650s_name, - DEVICE(0x3DF0), SUBDEV(0x1651)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_killer_1650i_name, - DEVICE(0x3DF0), SUBDEV(0x1652)), IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, DEVICE(0x3DF0), SUBDEV(0x2074)), IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, @@ -1106,10 +1074,6 @@ VISIBLE_IF_IWLWIFI_KUNIT const struct iwl_dev_info iwl_dev_info_table[] = { DEVICE(0x4DF0), SUBDEV(0x007C)), IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, DEVICE(0x4DF0), SUBDEV(0x0310)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_killer_1650s_name, - DEVICE(0x4DF0), SUBDEV(0x1651)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_killer_1650i_name, - DEVICE(0x4DF0), SUBDEV(0x1652)), IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, DEVICE(0x4DF0), SUBDEV(0x2074)), IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, @@ -1142,10 +1106,6 @@ VISIBLE_IF_IWLWIFI_KUNIT const struct iwl_dev_info iwl_dev_info_table[] = { DEVICE(0x2725), SUBDEV(0x6020)), IWL_DEV_INFO(iwl_rf_gf, iwl_ax210_name, DEVICE(0x2725), SUBDEV(0x6024)), - IWL_DEV_INFO(iwl_rf_gf, iwl_ax210_killer_1675w_name, - DEVICE(0x2725), SUBDEV(0x1673)), - IWL_DEV_INFO(iwl_rf_gf, iwl_ax210_killer_1675x_name, - DEVICE(0x2725), SUBDEV(0x1674)), IWL_DEV_INFO(iwl_rf_gf, iwl_ax211_name, DEVICE(0x7A70), SUBDEV(0x0090)), IWL_DEV_INFO(iwl_rf_gf, iwl_ax211_name, @@ -1171,37 +1131,7 @@ VISIBLE_IF_IWLWIFI_KUNIT const struct iwl_dev_info iwl_dev_info_table[] = { IWL_DEV_INFO(iwl_rf_gf, iwl_ax211_name, DEVICE(0x7AF0), SUBDEV(0x0A10)), - /* SO with GF2 */ - IWL_DEV_INFO(iwl_rf_gf, iwl_ax211_killer_1675s_name, - DEVICE(0x51F0), SUBDEV(0x1671)), - IWL_DEV_INFO(iwl_rf_gf, iwl_ax211_killer_1675i_name, - DEVICE(0x51F0), SUBDEV(0x1672)), - IWL_DEV_INFO(iwl_rf_gf, iwl_ax211_killer_1675s_name, - DEVICE(0x51F1), SUBDEV(0x1671)), - IWL_DEV_INFO(iwl_rf_gf, iwl_ax211_killer_1675i_name, - DEVICE(0x51F1), SUBDEV(0x1672)), - IWL_DEV_INFO(iwl_rf_gf, iwl_ax211_killer_1675s_name, - DEVICE(0x54F0), SUBDEV(0x1671)), - IWL_DEV_INFO(iwl_rf_gf, iwl_ax211_killer_1675i_name, - DEVICE(0x54F0), SUBDEV(0x1672)), - IWL_DEV_INFO(iwl_rf_gf, iwl_ax211_killer_1675s_name, - DEVICE(0x7A70), SUBDEV(0x1671)), - IWL_DEV_INFO(iwl_rf_gf, iwl_ax211_killer_1675i_name, - DEVICE(0x7A70), SUBDEV(0x1672)), - IWL_DEV_INFO(iwl_rf_gf, iwl_ax211_killer_1675s_name, - DEVICE(0x7AF0), SUBDEV(0x1671)), - IWL_DEV_INFO(iwl_rf_gf, iwl_ax211_killer_1675i_name, - DEVICE(0x7AF0), SUBDEV(0x1672)), - IWL_DEV_INFO(iwl_rf_gf, iwl_ax211_killer_1675s_name, - DEVICE(0x7F70), SUBDEV(0x1671)), - IWL_DEV_INFO(iwl_rf_gf, iwl_ax211_killer_1675i_name, - DEVICE(0x7F70), SUBDEV(0x1672)), - /* MA with GF2 */ - IWL_DEV_INFO(iwl_rf_gf, iwl_ax211_killer_1675s_name, - DEVICE(0x7E40), SUBDEV(0x1671)), - IWL_DEV_INFO(iwl_rf_gf, iwl_ax211_killer_1675i_name, - DEVICE(0x7E40), SUBDEV(0x1672)), IWL_DEV_INFO(iwl_rf_jf, iwl9461_160_name, MAC_TYPE(PU), RF_TYPE(JF1), RF_ID(JF1), @@ -1344,9 +1274,6 @@ VISIBLE_IF_IWLWIFI_KUNIT const struct iwl_dev_info iwl_dev_info_table[] = { RF_TYPE(HR1), BW_LIMITED, NO_CDB), IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, MAC_TYPE(SO), RF_TYPE(HR2), BW_NOT_LIMITED, NO_CDB), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_killer_1650i_name, - DEVICE(0x51f0), SUBDEV(0x1652), - MAC_TYPE(SO), RF_TYPE(HR2)), /* So-F with Hr */ IWL_DEV_INFO(iwl_rf_hr_80mhz, iwl_ax203_name, MAC_TYPE(SOF), @@ -1404,6 +1331,17 @@ VISIBLE_IF_IWLWIFI_KUNIT const struct iwl_dev_info iwl_dev_info_table[] = { #if IS_ENABLED(CONFIG_IWLMLD) IWL_DEV_INFO(iwl_rf_fm, iwl_ax231_name, MAC_TYPE(MA), RF_TYPE(FM), NO_CDB), + +/* Killer CRFs */ + IWL_DEV_INFO(iwl_rf_fm, iwl_killer_be1750s_name, SUBDEV(0x1771)), + IWL_DEV_INFO(iwl_rf_fm, iwl_killer_be1750i_name, SUBDEV(0x1772)), + +/* Killer discrete */ + IWL_DEV_INFO(iwl_rf_fm, iwl_killer_be1750w_name, + DEVICE(0x272B), SUBDEV(0x1773)), + IWL_DEV_INFO(iwl_rf_fm, iwl_killer_be1750x_name, + DEVICE(0x272B), SUBDEV(0x1774)), + /* Bz */ IWL_DEV_INFO(iwl_rf_fm, iwl_ax201_name, MAC_TYPE(BZ), RF_TYPE(HR2)), -- 2.51.0 From daf14c9da14611d075eeb957b3afe3f6631956e4 Mon Sep 17 00:00:00 2001 From: Johannes Berg Date: Sat, 10 May 2025 21:48:20 +0300 Subject: [PATCH 16/16] wifi: iwlwifi: cfg: clean up HR device matching We only need a few entries on top of the Killer ones. Signed-off-by: Johannes Berg Signed-off-by: Miri Korenblit Link: https://patch.msgid.link/20250510214621.fa0cde465de0.I6a3f9ed9a7341e2c58c69af50a9f126992a745f2@changeid --- .../net/wireless/intel/iwlwifi/cfg/22000.c | 5 - drivers/net/wireless/intel/iwlwifi/cfg/bz.c | 1 - .../net/wireless/intel/iwlwifi/cfg/rf-hr.c | 5 + drivers/net/wireless/intel/iwlwifi/pcie/drv.c | 154 +----------------- 4 files changed, 8 insertions(+), 157 deletions(-) diff --git a/drivers/net/wireless/intel/iwlwifi/cfg/22000.c b/drivers/net/wireless/intel/iwlwifi/cfg/22000.c index 5855cf430798..52e0beebf9ce 100644 --- a/drivers/net/wireless/intel/iwlwifi/cfg/22000.c +++ b/drivers/net/wireless/intel/iwlwifi/cfg/22000.c @@ -123,11 +123,6 @@ const struct iwl_mac_cfg iwl_ax200_mac_cfg = { .bisr_workaround = 1, }; -const char iwl_ax101_name[] = "Intel(R) Wi-Fi 6 AX101"; -const char iwl_ax200_name[] = "Intel(R) Wi-Fi 6 AX200 160MHz"; -const char iwl_ax201_name[] = "Intel(R) Wi-Fi 6 AX201 160MHz"; -const char iwl_ax203_name[] = "Intel(R) Wi-Fi 6 AX203"; - const char iwl_ax200_killer_1650w_name[] = "Killer(R) Wi-Fi 6 AX1650w 160MHz Wireless Network Adapter (200D2W)"; const char iwl_ax200_killer_1650x_name[] = diff --git a/drivers/net/wireless/intel/iwlwifi/cfg/bz.c b/drivers/net/wireless/intel/iwlwifi/cfg/bz.c index 8b07289f4921..6184d7ca55f9 100644 --- a/drivers/net/wireless/intel/iwlwifi/cfg/bz.c +++ b/drivers/net/wireless/intel/iwlwifi/cfg/bz.c @@ -33,7 +33,6 @@ #if !IS_ENABLED(CONFIG_IWLMVM) const char iwl_ax211_name[] = "Intel(R) Wi-Fi 6E AX211 160MHz"; -const char iwl_ax201_name[] = "Intel(R) Wi-Fi 6 AX201 160MHz"; #endif static const struct iwl_family_base_params iwl_bz_base = { diff --git a/drivers/net/wireless/intel/iwlwifi/cfg/rf-hr.c b/drivers/net/wireless/intel/iwlwifi/cfg/rf-hr.c index 7d444ee0a187..db02664e3917 100644 --- a/drivers/net/wireless/intel/iwlwifi/cfg/rf-hr.c +++ b/drivers/net/wireless/intel/iwlwifi/cfg/rf-hr.c @@ -35,3 +35,8 @@ const struct iwl_rf_cfg iwl_rf_hr_80mhz = { IWL_DEVICE_HR, .bw_limit = 80, }; + +const char iwl_ax101_name[] = "Intel(R) Wi-Fi 6 AX101"; +const char iwl_ax200_name[] = "Intel(R) Wi-Fi 6 AX200 160MHz"; +const char iwl_ax201_name[] = "Intel(R) Wi-Fi 6 AX201 160MHz"; +const char iwl_ax203_name[] = "Intel(R) Wi-Fi 6 AX203"; diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/drv.c b/drivers/net/wireless/intel/iwlwifi/pcie/drv.c index b41b8aa75739..415523acfa40 100644 --- a/drivers/net/wireless/intel/iwlwifi/pcie/drv.c +++ b/drivers/net/wireless/intel/iwlwifi/pcie/drv.c @@ -945,7 +945,9 @@ VISIBLE_IF_IWLWIFI_KUNIT const struct iwl_dev_info iwl_dev_info_table[] = { DEVICE(0x24FD), SUBDEV(0x0012)), /* HR RF */ - /* FIXME - should have some RF match */ + IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, RF_TYPE(HR2)), + IWL_DEV_INFO(iwl_rf_hr_80mhz, iwl_ax101_name, RF_TYPE(HR1)), + IWL_DEV_INFO(iwl_rf_hr_80mhz, iwl_ax203_name, RF_TYPE(HR2), BW_LIMITED), IWL_DEV_INFO(iwl_rf_hr, iwl_ax200_name, DEVICE(0x2723)), /* Killer CRFs */ @@ -973,114 +975,6 @@ VISIBLE_IF_IWLWIFI_KUNIT const struct iwl_dev_info iwl_dev_info_table[] = { IWL_DEV_INFO(iwl_rf_jf, iwl9260_1_name, DEVICE(0x271C), SUBDEV(0x0214)), -/* AX200 */ - - /* Qu with Hr */ - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, - DEVICE(0x43F0), SUBDEV(0x0070)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, - DEVICE(0x43F0), SUBDEV(0x0074)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, - DEVICE(0x43F0), SUBDEV(0x0078)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, - DEVICE(0x43F0), SUBDEV(0x007C)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, - DEVICE(0x43F0), SUBDEV(0x2074)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, - DEVICE(0x43F0), SUBDEV(0x4070)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, - DEVICE(0xA0F0), SUBDEV(0x0070)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, - DEVICE(0xA0F0), SUBDEV(0x0074)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, - DEVICE(0xA0F0), SUBDEV(0x0078)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, - DEVICE(0xA0F0), SUBDEV(0x007C)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, - DEVICE(0xA0F0), SUBDEV(0x0A10)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, - DEVICE(0xA0F0), SUBDEV(0x2074)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, - DEVICE(0xA0F0), SUBDEV(0x4070)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, - DEVICE(0xA0F0), SUBDEV(0x6074)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, - DEVICE(0x02F0), SUBDEV(0x0070)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, - DEVICE(0x02F0), SUBDEV(0x0074)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, - DEVICE(0x02F0), SUBDEV(0x6074)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, - DEVICE(0x02F0), SUBDEV(0x0078)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, - DEVICE(0x02F0), SUBDEV(0x007C)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, - DEVICE(0x02F0), SUBDEV(0x0310)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, - DEVICE(0x02F0), SUBDEV(0x2074)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, - DEVICE(0x02F0), SUBDEV(0x4070)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, - DEVICE(0x06F0), SUBDEV(0x0070)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, - DEVICE(0x06F0), SUBDEV(0x0074)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, - DEVICE(0x06F0), SUBDEV(0x0078)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, - DEVICE(0x06F0), SUBDEV(0x007C)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, - DEVICE(0x06F0), SUBDEV(0x0310)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, - DEVICE(0x06F0), SUBDEV(0x2074)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, - DEVICE(0x06F0), SUBDEV(0x4070)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, - DEVICE(0x34F0), SUBDEV(0x0070)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, - DEVICE(0x34F0), SUBDEV(0x0074)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, - DEVICE(0x34F0), SUBDEV(0x0078)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, - DEVICE(0x34F0), SUBDEV(0x007C)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, - DEVICE(0x34F0), SUBDEV(0x0310)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, - DEVICE(0x34F0), SUBDEV(0x2074)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, - DEVICE(0x34F0), SUBDEV(0x4070)), - - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, - DEVICE(0x3DF0), SUBDEV(0x0070)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, - DEVICE(0x3DF0), SUBDEV(0x0074)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, - DEVICE(0x3DF0), SUBDEV(0x0078)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, - DEVICE(0x3DF0), SUBDEV(0x007C)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, - DEVICE(0x3DF0), SUBDEV(0x0310)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, - DEVICE(0x3DF0), SUBDEV(0x2074)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, - DEVICE(0x3DF0), SUBDEV(0x4070)), - - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, - DEVICE(0x4DF0), SUBDEV(0x0070)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, - DEVICE(0x4DF0), SUBDEV(0x0074)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, - DEVICE(0x4DF0), SUBDEV(0x0078)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, - DEVICE(0x4DF0), SUBDEV(0x007C)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, - DEVICE(0x4DF0), SUBDEV(0x0310)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, - DEVICE(0x4DF0), SUBDEV(0x2074)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, - DEVICE(0x4DF0), SUBDEV(0x4070)), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, - DEVICE(0x4DF0), SUBDEV(0x6074)), - /* So with HR */ IWL_DEV_INFO(iwl_rf_gf, iwl_ax211_name, DEVICE(0x2725), SUBDEV(0x0090)), @@ -1241,48 +1135,10 @@ VISIBLE_IF_IWLWIFI_KUNIT const struct iwl_dev_info iwl_dev_info_table[] = { /* Qu with Hr */ /* Qu B step */ - IWL_DEV_INFO(iwl_rf_hr1, iwl_ax101_name, MAC_TYPE(QU), - MAC_STEP(B), RF_TYPE(HR1), NO_CDB), - IWL_DEV_INFO(iwl_rf_hr_80mhz, iwl_ax203_name, MAC_TYPE(QU), MAC_STEP(B), - RF_TYPE(HR2), BW_LIMITED, NO_CDB), - - /* Qu C step */ - IWL_DEV_INFO(iwl_rf_hr1, iwl_ax101_name, MAC_TYPE(QU), - MAC_STEP(C), RF_TYPE(HR1), NO_CDB), - IWL_DEV_INFO(iwl_rf_hr_80mhz, iwl_ax203_name, MAC_TYPE(QU), MAC_STEP(C), - RF_TYPE(HR2), BW_LIMITED, NO_CDB), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, MAC_TYPE(QU), MAC_STEP(C), - RF_TYPE(HR2), BW_NOT_LIMITED, NO_CDB), - - /* QuZ */ - IWL_DEV_INFO(iwl_rf_hr1, iwl_ax101_name, MAC_TYPE(QUZ), - RF_TYPE(HR1), NO_CDB), - IWL_DEV_INFO(iwl_rf_hr_80mhz, iwl_ax203_name, MAC_TYPE(QUZ), - MAC_STEP(B), RF_TYPE(HR2), BW_LIMITED, NO_CDB), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, MAC_TYPE(QUZ), - MAC_STEP(B), RF_TYPE(HR2), BW_NOT_LIMITED, NO_CDB), /* Ma */ - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, MAC_TYPE(MA), RF_TYPE(HR2), - NO_CDB), IWL_DEV_INFO(iwl_rf_gf, iwl_ax211_name, MAC_TYPE(MA), RF_TYPE(GF)), -/* So with Hr */ - IWL_DEV_INFO(iwl_rf_hr_80mhz, iwl_ax203_name, MAC_TYPE(SO), - RF_TYPE(HR2), BW_LIMITED, NO_CDB), - IWL_DEV_INFO(iwl_rf_hr_80mhz, iwl_ax101_name, MAC_TYPE(SO), - RF_TYPE(HR1), BW_LIMITED, NO_CDB), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, MAC_TYPE(SO), - RF_TYPE(HR2), BW_NOT_LIMITED, NO_CDB), - -/* So-F with Hr */ - IWL_DEV_INFO(iwl_rf_hr_80mhz, iwl_ax203_name, MAC_TYPE(SOF), - RF_TYPE(HR2), BW_LIMITED, NO_CDB), - IWL_DEV_INFO(iwl_rf_hr_80mhz, iwl_ax101_name, MAC_TYPE(SOF), - RF_TYPE(HR1), BW_LIMITED, NO_CDB), - IWL_DEV_INFO(iwl_rf_hr, iwl_ax201_name, MAC_TYPE(SOF), - RF_TYPE(HR2), BW_NOT_LIMITED, NO_CDB), - /* So-F with Gf */ IWL_DEV_INFO(iwl_rf_gf, iwl_ax211_name, MAC_TYPE(SOF), RF_TYPE(GF), BW_NOT_LIMITED, NO_CDB), @@ -1343,16 +1199,12 @@ VISIBLE_IF_IWLWIFI_KUNIT const struct iwl_dev_info iwl_dev_info_table[] = { DEVICE(0x272B), SUBDEV(0x1774)), /* Bz */ - IWL_DEV_INFO(iwl_rf_fm, iwl_ax201_name, MAC_TYPE(BZ), RF_TYPE(HR2)), - IWL_DEV_INFO(iwl_rf_fm, iwl_ax211_name, MAC_TYPE(BZ), RF_TYPE(GF)), IWL_DEV_INFO(iwl_rf_fm, iwl_fm_name, MAC_TYPE(BZ), RF_TYPE(FM)), IWL_DEV_INFO(iwl_rf_fm, iwl_wh_name, MAC_TYPE(BZ), RF_TYPE(WH)), - IWL_DEV_INFO(iwl_rf_fm, iwl_ax201_name, MAC_TYPE(BZ_W), RF_TYPE(HR2)), - IWL_DEV_INFO(iwl_rf_fm, iwl_ax211_name, MAC_TYPE(BZ_W), RF_TYPE(GF)), IWL_DEV_INFO(iwl_rf_fm, iwl_fm_name, MAC_TYPE(BZ_W), RF_TYPE(FM)), -- 2.51.0