mirror of https://gitee.com/openkylin/linux.git
iwlwifi: introduce device family 22560
Device 22560 have many different hw and sw features than 22000 family, so introduce a new family of devices - 22560. Signed-off-by: Golan Ben Ami <golan.ben.ami@intel.com> Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
This commit is contained in:
parent
c8f1b51e50
commit
5f01df3f58
|
@ -116,10 +116,9 @@ static const struct iwl_ht_params iwl_22000_ht_params = {
|
||||||
.ht40_bands = BIT(NL80211_BAND_2GHZ) | BIT(NL80211_BAND_5GHZ),
|
.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_max = IWL_22000_UCODE_API_MAX, \
|
||||||
.ucode_api_min = IWL_22000_UCODE_API_MIN, \
|
.ucode_api_min = IWL_22000_UCODE_API_MIN, \
|
||||||
.device_family = IWL_DEVICE_FAMILY_22000, \
|
|
||||||
.base_params = &iwl_22000_base_params, \
|
.base_params = &iwl_22000_base_params, \
|
||||||
.led_mode = IWL_LED_RF_STATE, \
|
.led_mode = IWL_LED_RF_STATE, \
|
||||||
.nvm_hw_section_num = NVM_HW_SECTION_NUM_FAMILY_22000, \
|
.nvm_hw_section_num = NVM_HW_SECTION_NUM_FAMILY_22000, \
|
||||||
|
@ -135,6 +134,10 @@ static const struct iwl_ht_params iwl_22000_ht_params = {
|
||||||
.mq_rx_supported = true, \
|
.mq_rx_supported = true, \
|
||||||
.vht_mu_mimo_supported = true, \
|
.vht_mu_mimo_supported = true, \
|
||||||
.mac_addr_from_csr = 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, \
|
.use_tfh = true, \
|
||||||
.rf_id = true, \
|
.rf_id = true, \
|
||||||
.gen2 = true, \
|
.gen2 = true, \
|
||||||
|
@ -142,60 +145,51 @@ static const struct iwl_ht_params iwl_22000_ht_params = {
|
||||||
.dbgc_supported = true, \
|
.dbgc_supported = true, \
|
||||||
.min_umac_error_event_table = 0x400000
|
.min_umac_error_event_table = 0x400000
|
||||||
|
|
||||||
|
#define IWL_DEVICE_22500 \
|
||||||
|
IWL_DEVICE_22000_COMMON, \
|
||||||
|
.device_family = IWL_DEVICE_FAMILY_22000, \
|
||||||
|
.csr = &iwl_csr_v1
|
||||||
|
|
||||||
|
#define IWL_DEVICE_22560 \
|
||||||
|
IWL_DEVICE_22000_COMMON, \
|
||||||
|
.device_family = IWL_DEVICE_FAMILY_22560, \
|
||||||
|
.csr = &iwl_csr_v2
|
||||||
|
|
||||||
const struct iwl_cfg iwl22000_2ac_cfg_hr = {
|
const struct iwl_cfg iwl22000_2ac_cfg_hr = {
|
||||||
.name = "Intel(R) Dual Band Wireless AC 22000",
|
.name = "Intel(R) Dual Band Wireless AC 22000",
|
||||||
.fw_name_pre = IWL_22000_HR_FW_PRE,
|
.fw_name_pre = IWL_22000_HR_FW_PRE,
|
||||||
IWL_DEVICE_22000,
|
IWL_DEVICE_22500,
|
||||||
.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,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const struct iwl_cfg iwl22000_2ac_cfg_hr_cdb = {
|
const struct iwl_cfg iwl22000_2ac_cfg_hr_cdb = {
|
||||||
.name = "Intel(R) Dual Band Wireless AC 22000",
|
.name = "Intel(R) Dual Band Wireless AC 22000",
|
||||||
.fw_name_pre = IWL_22000_HR_CDB_FW_PRE,
|
.fw_name_pre = IWL_22000_HR_CDB_FW_PRE,
|
||||||
IWL_DEVICE_22000,
|
IWL_DEVICE_22500,
|
||||||
.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,
|
|
||||||
.cdb = true,
|
.cdb = true,
|
||||||
};
|
};
|
||||||
|
|
||||||
const struct iwl_cfg iwl22000_2ac_cfg_jf = {
|
const struct iwl_cfg iwl22000_2ac_cfg_jf = {
|
||||||
.name = "Intel(R) Dual Band Wireless AC 22000",
|
.name = "Intel(R) Dual Band Wireless AC 22000",
|
||||||
.fw_name_pre = IWL_22000_JF_FW_PRE,
|
.fw_name_pre = IWL_22000_JF_FW_PRE,
|
||||||
IWL_DEVICE_22000,
|
IWL_DEVICE_22500,
|
||||||
.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,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const struct iwl_cfg iwl22000_2ax_cfg_hr = {
|
const struct iwl_cfg iwl22000_2ax_cfg_hr = {
|
||||||
.name = "Intel(R) Dual Band Wireless AX 22000",
|
.name = "Intel(R) Dual Band Wireless AX 22000",
|
||||||
.fw_name_pre = IWL_22000_HR_FW_PRE,
|
.fw_name_pre = IWL_22000_HR_FW_PRE,
|
||||||
IWL_DEVICE_22000,
|
IWL_DEVICE_22500,
|
||||||
.csr = &iwl_csr_v1,
|
/*
|
||||||
.ht_params = &iwl_22000_ht_params,
|
* This device doesn't support receiving BlockAck with a large bitmap
|
||||||
.nvm_ver = IWL_22000_NVM_VERSION,
|
* so we need to restrict the size of transmitted aggregation to the
|
||||||
.nvm_calib_ver = IWL_22000_TX_POWER_VERSION,
|
* HT size; mac80211 would otherwise pick the HE max (256) by default.
|
||||||
.max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K,
|
*/
|
||||||
|
.max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
|
||||||
};
|
};
|
||||||
|
|
||||||
const struct iwl_cfg iwl22000_2ax_cfg_qnj_hr_a0_f0 = {
|
const struct iwl_cfg iwl22000_2ax_cfg_qnj_hr_a0_f0 = {
|
||||||
.name = "Intel(R) Dual Band Wireless AX 22000",
|
.name = "Intel(R) Dual Band Wireless AX 22000",
|
||||||
.fw_name_pre = IWL_22000_HR_A_F0_FW_PRE,
|
.fw_name_pre = IWL_22000_HR_A_F0_FW_PRE,
|
||||||
IWL_DEVICE_22000,
|
IWL_DEVICE_22500,
|
||||||
.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,
|
|
||||||
/*
|
/*
|
||||||
* This device doesn't support receiving BlockAck with a large bitmap
|
* This device doesn't support receiving BlockAck with a large bitmap
|
||||||
* so we need to restrict the size of transmitted aggregation to the
|
* so we need to restrict the size of transmitted aggregation to the
|
||||||
|
@ -207,45 +201,43 @@ const struct iwl_cfg iwl22000_2ax_cfg_qnj_hr_a0_f0 = {
|
||||||
const struct iwl_cfg iwl22000_2ax_cfg_qnj_hr_b0 = {
|
const struct iwl_cfg iwl22000_2ax_cfg_qnj_hr_b0 = {
|
||||||
.name = "Intel(R) Dual Band Wireless AX 22000",
|
.name = "Intel(R) Dual Band Wireless AX 22000",
|
||||||
.fw_name_pre = IWL_22000_HR_B_FW_PRE,
|
.fw_name_pre = IWL_22000_HR_B_FW_PRE,
|
||||||
IWL_DEVICE_22000,
|
IWL_DEVICE_22500,
|
||||||
.csr = &iwl_csr_v1,
|
/*
|
||||||
.ht_params = &iwl_22000_ht_params,
|
* This device doesn't support receiving BlockAck with a large bitmap
|
||||||
.nvm_ver = IWL_22000_NVM_VERSION,
|
* so we need to restrict the size of transmitted aggregation to the
|
||||||
.nvm_calib_ver = IWL_22000_TX_POWER_VERSION,
|
* HT size; mac80211 would otherwise pick the HE max (256) by default.
|
||||||
.max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K,
|
*/
|
||||||
|
.max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
|
||||||
};
|
};
|
||||||
|
|
||||||
const struct iwl_cfg iwl22000_2ax_cfg_qnj_jf_b0 = {
|
const struct iwl_cfg iwl22000_2ax_cfg_qnj_jf_b0 = {
|
||||||
.name = "Intel(R) Dual Band Wireless AX 22000",
|
.name = "Intel(R) Dual Band Wireless AX 22000",
|
||||||
.fw_name_pre = IWL_22000_JF_B0_FW_PRE,
|
.fw_name_pre = IWL_22000_JF_B0_FW_PRE,
|
||||||
IWL_DEVICE_22000,
|
IWL_DEVICE_22500,
|
||||||
.csr = &iwl_csr_v1,
|
/*
|
||||||
.ht_params = &iwl_22000_ht_params,
|
* This device doesn't support receiving BlockAck with a large bitmap
|
||||||
.nvm_ver = IWL_22000_NVM_VERSION,
|
* so we need to restrict the size of transmitted aggregation to the
|
||||||
.nvm_calib_ver = IWL_22000_TX_POWER_VERSION,
|
* HT size; mac80211 would otherwise pick the HE max (256) by default.
|
||||||
.max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K,
|
*/
|
||||||
|
.max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
|
||||||
};
|
};
|
||||||
|
|
||||||
const struct iwl_cfg iwl22000_2ax_cfg_qnj_hr_a0 = {
|
const struct iwl_cfg iwl22000_2ax_cfg_qnj_hr_a0 = {
|
||||||
.name = "Intel(R) Dual Band Wireless AX 22000",
|
.name = "Intel(R) Dual Band Wireless AX 22000",
|
||||||
.fw_name_pre = IWL_22000_HR_A0_FW_PRE,
|
.fw_name_pre = IWL_22000_HR_A0_FW_PRE,
|
||||||
IWL_DEVICE_22000,
|
IWL_DEVICE_22500,
|
||||||
.csr = &iwl_csr_v1,
|
/*
|
||||||
.ht_params = &iwl_22000_ht_params,
|
* This device doesn't support receiving BlockAck with a large bitmap
|
||||||
.nvm_ver = IWL_22000_NVM_VERSION,
|
* so we need to restrict the size of transmitted aggregation to the
|
||||||
.nvm_calib_ver = IWL_22000_TX_POWER_VERSION,
|
* HT size; mac80211 would otherwise pick the HE max (256) by default.
|
||||||
.max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K,
|
*/
|
||||||
|
.max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
|
||||||
};
|
};
|
||||||
|
|
||||||
const struct iwl_cfg iwl22560_2ax_cfg_su_cdb = {
|
const struct iwl_cfg iwl22560_2ax_cfg_su_cdb = {
|
||||||
.name = "Intel(R) Dual Band Wireless AX 22560",
|
.name = "Intel(R) Dual Band Wireless AX 22560",
|
||||||
.fw_name_pre = IWL_22000_SU_Z0_FW_PRE,
|
.fw_name_pre = IWL_22000_SU_Z0_FW_PRE,
|
||||||
IWL_DEVICE_22000,
|
IWL_DEVICE_22560,
|
||||||
.csr = &iwl_csr_v2,
|
|
||||||
.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,
|
|
||||||
.cdb = true,
|
.cdb = true,
|
||||||
/*
|
/*
|
||||||
* This device doesn't support receiving BlockAck with a large bitmap
|
* This device doesn't support receiving BlockAck with a large bitmap
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved.
|
* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved.
|
||||||
* Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
|
* Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
|
||||||
* Copyright(c) 2016 - 2017 Intel Deutschland GmbH
|
* Copyright(c) 2016 - 2017 Intel Deutschland GmbH
|
||||||
|
* Copyright(c) 2018 Intel Corporation
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of version 2 of the GNU General Public License as
|
* it under the terms of version 2 of the GNU General Public License as
|
||||||
|
@ -30,6 +31,7 @@
|
||||||
* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved.
|
* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved.
|
||||||
* Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
|
* Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
|
||||||
* Copyright(c) 2016 - 2017 Intel Deutschland GmbH
|
* Copyright(c) 2016 - 2017 Intel Deutschland GmbH
|
||||||
|
* Copyright(c) 2018 Intel Corporation
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
@ -143,7 +145,7 @@ void iwl_get_shared_mem_conf(struct iwl_fw_runtime *fwrt)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
pkt = cmd.resp_pkt;
|
pkt = cmd.resp_pkt;
|
||||||
if (fwrt->trans->cfg->device_family == IWL_DEVICE_FAMILY_22000)
|
if (fwrt->trans->cfg->device_family >= IWL_DEVICE_FAMILY_22000)
|
||||||
iwl_parse_shared_mem_22000(fwrt, pkt);
|
iwl_parse_shared_mem_22000(fwrt, pkt);
|
||||||
else
|
else
|
||||||
iwl_parse_shared_mem(fwrt, pkt);
|
iwl_parse_shared_mem(fwrt, pkt);
|
||||||
|
|
|
@ -93,6 +93,7 @@ enum iwl_device_family {
|
||||||
IWL_DEVICE_FAMILY_8000,
|
IWL_DEVICE_FAMILY_8000,
|
||||||
IWL_DEVICE_FAMILY_9000,
|
IWL_DEVICE_FAMILY_9000,
|
||||||
IWL_DEVICE_FAMILY_22000,
|
IWL_DEVICE_FAMILY_22000,
|
||||||
|
IWL_DEVICE_FAMILY_22560,
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -301,7 +301,7 @@ static int iwl_mvm_load_ucode_wait_alive(struct iwl_mvm *mvm,
|
||||||
if (ret) {
|
if (ret) {
|
||||||
struct iwl_trans *trans = mvm->trans;
|
struct iwl_trans *trans = mvm->trans;
|
||||||
|
|
||||||
if (trans->cfg->device_family == IWL_DEVICE_FAMILY_22000)
|
if (trans->cfg->device_family >= IWL_DEVICE_FAMILY_22000)
|
||||||
IWL_ERR(mvm,
|
IWL_ERR(mvm,
|
||||||
"SecBoot CPU1 Status: 0x%x, CPU2 Status: 0x%x\n",
|
"SecBoot CPU1 Status: 0x%x, CPU2 Status: 0x%x\n",
|
||||||
iwl_read_prph(trans, UMAG_SB_CPU_1_STATUS),
|
iwl_read_prph(trans, UMAG_SB_CPU_1_STATUS),
|
||||||
|
@ -1009,7 +1009,7 @@ int iwl_mvm_up(struct iwl_mvm *mvm)
|
||||||
/* Init RSS configuration */
|
/* Init RSS configuration */
|
||||||
/* TODO - remove 22000 disablement when we have RXQ config API */
|
/* TODO - remove 22000 disablement when we have RXQ config API */
|
||||||
if (iwl_mvm_has_new_rx_api(mvm) &&
|
if (iwl_mvm_has_new_rx_api(mvm) &&
|
||||||
mvm->trans->cfg->device_family != IWL_DEVICE_FAMILY_22000) {
|
mvm->trans->cfg->device_family < IWL_DEVICE_FAMILY_22000) {
|
||||||
ret = iwl_send_rss_cfg_cmd(mvm);
|
ret = iwl_send_rss_cfg_cmd(mvm);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
IWL_ERR(mvm, "Failed to configure RSS queues: %d\n",
|
IWL_ERR(mvm, "Failed to configure RSS queues: %d\n",
|
||||||
|
|
|
@ -4559,7 +4559,7 @@ void iwl_mvm_sync_rx_queues_internal(struct iwl_mvm *mvm,
|
||||||
mvm->trans->num_rx_queues);
|
mvm->trans->num_rx_queues);
|
||||||
|
|
||||||
/* TODO - remove this when we have RXQ config API */
|
/* TODO - remove this when we have RXQ config API */
|
||||||
if (mvm->trans->cfg->device_family == IWL_DEVICE_FAMILY_22000) {
|
if (mvm->trans->cfg->device_family >= IWL_DEVICE_FAMILY_22000) {
|
||||||
qmask = BIT(0);
|
qmask = BIT(0);
|
||||||
if (notif->sync)
|
if (notif->sync)
|
||||||
atomic_set(&mvm->queue_sync_counter, 1);
|
atomic_set(&mvm->queue_sync_counter, 1);
|
||||||
|
|
Loading…
Reference in New Issue