diff options
Diffstat (limited to 'drivers/net/wireless/intel/iwlwifi/cfg/22000.c')
| -rw-r--r-- | drivers/net/wireless/intel/iwlwifi/cfg/22000.c | 163 | 
1 files changed, 106 insertions, 57 deletions
| diff --git a/drivers/net/wireless/intel/iwlwifi/cfg/22000.c b/drivers/net/wireless/intel/iwlwifi/cfg/22000.c index d4ba66aecdc9..91ca77c7571c 100644 --- a/drivers/net/wireless/intel/iwlwifi/cfg/22000.c +++ b/drivers/net/wireless/intel/iwlwifi/cfg/22000.c @@ -59,7 +59,7 @@  #define IWL_22000_UCODE_API_MAX	38  /* Lowest firmware API version supported */ -#define IWL_22000_UCODE_API_MIN	24 +#define IWL_22000_UCODE_API_MIN	39  /* NVM versions */  #define IWL_22000_NVM_VERSION		0x0a1d @@ -73,29 +73,48 @@  #define IWL_22000_SMEM_OFFSET		0x400000  #define IWL_22000_SMEM_LEN		0xD0000 -#define IWL_22000_JF_FW_PRE	"iwlwifi-Qu-a0-jf-b0-" -#define IWL_22000_HR_FW_PRE	"iwlwifi-Qu-a0-hr-a0-" -#define IWL_22000_HR_CDB_FW_PRE	"iwlwifi-QuIcp-z0-hrcdb-a0-" -#define IWL_22000_HR_F0_FW_PRE	"iwlwifi-QuQnj-f0-hr-a0-" -#define IWL_22000_JF_B0_FW_PRE	"iwlwifi-QuQnj-a0-jf-b0-" -#define IWL_22000_HR_A0_FW_PRE	"iwlwifi-QuQnj-a0-hr-a0-" +#define IWL_22000_JF_FW_PRE		"iwlwifi-Qu-a0-jf-b0-" +#define IWL_22000_HR_FW_PRE		"iwlwifi-Qu-a0-hr-a0-" +#define IWL_22000_HR_CDB_FW_PRE		"iwlwifi-QuIcp-z0-hrcdb-a0-" +#define IWL_22000_HR_A_F0_FW_PRE	"iwlwifi-QuQnj-f0-hr-a0-" +#define IWL_22000_HR_B_FW_PRE		"iwlwifi-Qu-b0-hr-b0-" +#define IWL_22000_JF_B0_FW_PRE		"iwlwifi-QuQnj-a0-jf-b0-" +#define IWL_22000_HR_A0_FW_PRE		"iwlwifi-QuQnj-a0-hr-a0-" +#define IWL_22000_SU_Z0_FW_PRE		"iwlwifi-su-z0-"  #define IWL_22000_HR_MODULE_FIRMWARE(api) \  	IWL_22000_HR_FW_PRE __stringify(api) ".ucode"  #define IWL_22000_JF_MODULE_FIRMWARE(api) \  	IWL_22000_JF_FW_PRE __stringify(api) ".ucode" -#define IWL_22000_HR_F0_QNJ_MODULE_FIRMWARE(api) \ -	IWL_22000_HR_F0_FW_PRE __stringify(api) ".ucode" +#define IWL_22000_HR_A_F0_QNJ_MODULE_FIRMWARE(api) \ +	IWL_22000_HR_A_F0_FW_PRE __stringify(api) ".ucode" +#define IWL_22000_HR_B_QNJ_MODULE_FIRMWARE(api) \ +	IWL_22000_HR_B_FW_PRE __stringify(api) ".ucode"  #define IWL_22000_JF_B0_QNJ_MODULE_FIRMWARE(api) \  	IWL_22000_JF_B0_FW_PRE __stringify(api) ".ucode"  #define IWL_22000_HR_A0_QNJ_MODULE_FIRMWARE(api) \  	IWL_22000_HR_A0_FW_PRE __stringify(api) ".ucode" +#define IWL_22000_SU_Z0_MODULE_FIRMWARE(api) \ +	IWL_22000_SU_Z0_FW_PRE __stringify(api) ".ucode"  #define NVM_HW_SECTION_NUM_FAMILY_22000		10  static const struct iwl_base_params iwl_22000_base_params = {  	.eeprom_size = OTP_LOW_IMAGE_SIZE_FAMILY_22000,  	.num_of_queues = 512, +	.max_tfd_queue_size = 256, +	.shadow_ram_support = true, +	.led_compensation = 57, +	.wd_timeout = IWL_LONG_WD_TIMEOUT, +	.max_event_log_size = 512, +	.shadow_reg_enable = true, +	.pcie_l1_allowed = true, +}; + +static const struct iwl_base_params iwl_22560_base_params = { +	.eeprom_size = OTP_LOW_IMAGE_SIZE_FAMILY_22000, +	.num_of_queues = 512, +	.max_tfd_queue_size = 65536,  	.shadow_ram_support = true,  	.led_compensation = 57,  	.wd_timeout = IWL_LONG_WD_TIMEOUT, @@ -110,11 +129,9 @@ static const struct iwl_ht_params iwl_22000_ht_params = {  	.ht40_bands = BIT(NL80211_BAND_2GHZ) | BIT(NL80211_BAND_5GHZ),  }; -#define IWL_DEVICE_22000						\ +#define IWL_DEVICE_22000_COMMON						\  	.ucode_api_max = IWL_22000_UCODE_API_MAX,			\  	.ucode_api_min = IWL_22000_UCODE_API_MIN,			\ -	.device_family = IWL_DEVICE_FAMILY_22000,			\ -	.base_params = &iwl_22000_base_params,				\  	.led_mode = IWL_LED_RF_STATE,					\  	.nvm_hw_section_num = NVM_HW_SECTION_NUM_FAMILY_22000,		\  	.non_shared_ant = ANT_A,					\ @@ -129,6 +146,10 @@ static const struct iwl_ht_params iwl_22000_ht_params = {  	.mq_rx_supported = true,					\  	.vht_mu_mimo_supported = true,					\  	.mac_addr_from_csr = true,					\ +	.ht_params = &iwl_22000_ht_params,				\ +	.nvm_ver = IWL_22000_NVM_VERSION,				\ +	.nvm_calib_ver = IWL_22000_TX_POWER_VERSION,			\ +	.max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K,		\  	.use_tfh = true,						\  	.rf_id = true,							\  	.gen2 = true,							\ @@ -136,86 +157,114 @@ static const struct iwl_ht_params iwl_22000_ht_params = {  	.dbgc_supported = true,						\  	.min_umac_error_event_table = 0x400000 +#define IWL_DEVICE_22500						\ +	IWL_DEVICE_22000_COMMON,					\ +	.device_family = IWL_DEVICE_FAMILY_22000,			\ +	.base_params = &iwl_22000_base_params,				\ +	.csr = &iwl_csr_v1 + +#define IWL_DEVICE_22560						\ +	IWL_DEVICE_22000_COMMON,					\ +	.device_family = IWL_DEVICE_FAMILY_22560,			\ +	.base_params = &iwl_22560_base_params,				\ +	.csr = &iwl_csr_v2 +  const struct iwl_cfg iwl22000_2ac_cfg_hr = {  	.name = "Intel(R) Dual Band Wireless AC 22000",  	.fw_name_pre = IWL_22000_HR_FW_PRE, -	IWL_DEVICE_22000, -	.csr = &iwl_csr_v1, -	.ht_params = &iwl_22000_ht_params, -	.nvm_ver = IWL_22000_NVM_VERSION, -	.nvm_calib_ver = IWL_22000_TX_POWER_VERSION, -	.max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K, +	IWL_DEVICE_22500,  };  const struct iwl_cfg iwl22000_2ac_cfg_hr_cdb = {  	.name = "Intel(R) Dual Band Wireless AC 22000",  	.fw_name_pre = IWL_22000_HR_CDB_FW_PRE, -	IWL_DEVICE_22000, -	.csr = &iwl_csr_v1, -	.ht_params = &iwl_22000_ht_params, -	.nvm_ver = IWL_22000_NVM_VERSION, -	.nvm_calib_ver = IWL_22000_TX_POWER_VERSION, -	.max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K, +	IWL_DEVICE_22500,  	.cdb = true,  };  const struct iwl_cfg iwl22000_2ac_cfg_jf = {  	.name = "Intel(R) Dual Band Wireless AC 22000",  	.fw_name_pre = IWL_22000_JF_FW_PRE, -	IWL_DEVICE_22000, -	.csr = &iwl_csr_v1, -	.ht_params = &iwl_22000_ht_params, -	.nvm_ver = IWL_22000_NVM_VERSION, -	.nvm_calib_ver = IWL_22000_TX_POWER_VERSION, -	.max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K, +	IWL_DEVICE_22500,  };  const struct iwl_cfg iwl22000_2ax_cfg_hr = {  	.name = "Intel(R) Dual Band Wireless AX 22000",  	.fw_name_pre = IWL_22000_HR_FW_PRE, -	IWL_DEVICE_22000, -	.csr = &iwl_csr_v1, -	.ht_params = &iwl_22000_ht_params, -	.nvm_ver = IWL_22000_NVM_VERSION, -	.nvm_calib_ver = IWL_22000_TX_POWER_VERSION, -	.max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K, +	IWL_DEVICE_22500, +	/* +	 * This device doesn't support receiving BlockAck with a large bitmap +	 * so we need to restrict the size of transmitted aggregation to the +	 * HT size; mac80211 would otherwise pick the HE max (256) by default. +	 */ +	.max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,  }; -const struct iwl_cfg iwl22000_2ax_cfg_qnj_hr_f0 = { +const struct iwl_cfg iwl22000_2ax_cfg_qnj_hr_a0_f0 = {  	.name = "Intel(R) Dual Band Wireless AX 22000", -	.fw_name_pre = IWL_22000_HR_F0_FW_PRE, -	IWL_DEVICE_22000, -	.csr = &iwl_csr_v1, -	.ht_params = &iwl_22000_ht_params, -	.nvm_ver = IWL_22000_NVM_VERSION, -	.nvm_calib_ver = IWL_22000_TX_POWER_VERSION, -	.max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K, +	.fw_name_pre = IWL_22000_HR_A_F0_FW_PRE, +	IWL_DEVICE_22500, +	/* +	 * This device doesn't support receiving BlockAck with a large bitmap +	 * so we need to restrict the size of transmitted aggregation to the +	 * HT size; mac80211 would otherwise pick the HE max (256) by default. +	 */ +	.max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT, +}; + +const struct iwl_cfg iwl22000_2ax_cfg_qnj_hr_b0 = { +	.name = "Intel(R) Dual Band Wireless AX 22000", +	.fw_name_pre = IWL_22000_HR_B_FW_PRE, +	IWL_DEVICE_22500, +	/* +	 * This device doesn't support receiving BlockAck with a large bitmap +	 * so we need to restrict the size of transmitted aggregation to the +	 * HT size; mac80211 would otherwise pick the HE max (256) by default. +	 */ +	.max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,  };  const struct iwl_cfg iwl22000_2ax_cfg_qnj_jf_b0 = {  	.name = "Intel(R) Dual Band Wireless AX 22000",  	.fw_name_pre = IWL_22000_JF_B0_FW_PRE, -	IWL_DEVICE_22000, -	.csr = &iwl_csr_v1, -	.ht_params = &iwl_22000_ht_params, -	.nvm_ver = IWL_22000_NVM_VERSION, -	.nvm_calib_ver = IWL_22000_TX_POWER_VERSION, -	.max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K, +	IWL_DEVICE_22500, +	/* +	 * This device doesn't support receiving BlockAck with a large bitmap +	 * so we need to restrict the size of transmitted aggregation to the +	 * HT size; mac80211 would otherwise pick the HE max (256) by default. +	 */ +	.max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,  };  const struct iwl_cfg iwl22000_2ax_cfg_qnj_hr_a0 = {  	.name = "Intel(R) Dual Band Wireless AX 22000",  	.fw_name_pre = IWL_22000_HR_A0_FW_PRE, -	IWL_DEVICE_22000, -	.csr = &iwl_csr_v1, -	.ht_params = &iwl_22000_ht_params, -	.nvm_ver = IWL_22000_NVM_VERSION, -	.nvm_calib_ver = IWL_22000_TX_POWER_VERSION, -	.max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K, +	IWL_DEVICE_22500, +	/* +	 * This device doesn't support receiving BlockAck with a large bitmap +	 * so we need to restrict the size of transmitted aggregation to the +	 * HT size; mac80211 would otherwise pick the HE max (256) by default. +	 */ +	.max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT, +}; + +const struct iwl_cfg iwl22560_2ax_cfg_su_cdb = { +	.name = "Intel(R) Dual Band Wireless AX 22560", +	.fw_name_pre = IWL_22000_SU_Z0_FW_PRE, +	IWL_DEVICE_22560, +	.cdb = true, +	/* +	 * This device doesn't support receiving BlockAck with a large bitmap +	 * so we need to restrict the size of transmitted aggregation to the +	 * HT size; mac80211 would otherwise pick the HE max (256) by default. +	 */ +	.max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,  };  MODULE_FIRMWARE(IWL_22000_HR_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));  MODULE_FIRMWARE(IWL_22000_JF_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX)); -MODULE_FIRMWARE(IWL_22000_HR_F0_QNJ_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX)); +MODULE_FIRMWARE(IWL_22000_HR_A_F0_QNJ_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX)); +MODULE_FIRMWARE(IWL_22000_HR_B_QNJ_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));  MODULE_FIRMWARE(IWL_22000_JF_B0_QNJ_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));  MODULE_FIRMWARE(IWL_22000_HR_A0_QNJ_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX)); +MODULE_FIRMWARE(IWL_22000_SU_Z0_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX)); |