First batch of iwlwifi fixes intended for v5.1
* add some new PCI IDs (plus a struct name change they depend on); * fix crypto with new devices, namely 22560 and above; * a bunch of fixes (and a dependency) for the new debugging infra; -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEF3LNfgb2BPWm68smoUecoho8xfoFAlyUvs8ACgkQoUecoho8 xfrTgg//WOmEwMsh8NPQzD+r8iahnZdJj6PYP5AxSacDHhhCBfEhPaxjfdqspcB4 uRzfMBQ5MwhuO7YiRY9dsCY4MGMdEtJ1fRKzulVKAZDs2FVGqhWfDBOgN5Qey11T fgT/+SmwRD9s3Tjv4vw6/MnSQZ/QsEcn/9MU4b/58ZoTlc2Q8RiHgyA+GO3JCyfu kU0KRyXfsv/N2OFkTfDWjPcK9i9ua31dASMuje8BtIxyHPJXcA2fPS92UQE/c4Tj X5p6io9WIz224UUDHy5evjIEleDE/ht307OcPEwEISkZzFEge9jq4QMAopalbY3w 084/P5nfMplqb013gRlzDyVV1r7uhZiektmVtKZBBZlo0dISdfPcUreTcveUAM8O MgfAxYHlFj4xC4etJAM7uu+FQg4TTy1cIhtmVVV7OJtYIK3xvtJhP8bMLQvinwwI f3UT1GnXXn+lwq8TBxGgVxQAmIca3joW7mcD8AskxIHCLu7FDzctEKbtIVTUMD2k a5YQdiTa4hVcuRwHgny6Gwmmp9dq7oxuvLPB/p/z91obge8qhGaAgL7GTaRwSCUQ lsoZE4nPG7S3BeTgwQ2Xh1rWUMFDLruzHWd9wM0Uz5S1bOumepMo7z3zkkUyBwya KC32CLUQaiZN6DXfKXbxKWkH4WrYODXZz/sWfDMiC8nMLoLLEM0= =txST -----END PGP SIGNATURE----- Merge tag 'iwlwifi-for-kalle-2019-03-22' of git://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi-fixes First batch of iwlwifi fixes intended for v5.1 * add some new PCI IDs (plus a struct name change they depend on); * fix crypto with new devices, namely 22560 and above; * a bunch of fixes (and a dependency) for the new debugging infra;
This commit is contained in:
commit
4837696f6b
drivers/net/wireless/intel/iwlwifi
@ -235,8 +235,8 @@ const struct iwl_cfg iwl_ax101_cfg_qu_hr = {
|
||||
.max_tx_agg_size = IEEE80211_MAX_AMPDU_BUF_HT,
|
||||
};
|
||||
|
||||
const struct iwl_cfg iwl22260_2ax_cfg = {
|
||||
.name = "Intel(R) Wireless-AX 22260",
|
||||
const struct iwl_cfg iwl_ax200_cfg_cc = {
|
||||
.name = "Intel(R) Wi-Fi 6 AX200 160MHz",
|
||||
.fw_name_pre = IWL_CC_A_FW_PRE,
|
||||
IWL_DEVICE_22500,
|
||||
/*
|
||||
@ -249,7 +249,7 @@ const struct iwl_cfg iwl22260_2ax_cfg = {
|
||||
};
|
||||
|
||||
const struct iwl_cfg killer1650x_2ax_cfg = {
|
||||
.name = "Killer(R) Wireless-AX 1650x Wireless Network Adapter (200NGW)",
|
||||
.name = "Killer(R) Wi-Fi 6 AX1650x 160MHz Wireless Network Adapter (200NGW)",
|
||||
.fw_name_pre = IWL_CC_A_FW_PRE,
|
||||
IWL_DEVICE_22500,
|
||||
/*
|
||||
@ -262,7 +262,7 @@ const struct iwl_cfg killer1650x_2ax_cfg = {
|
||||
};
|
||||
|
||||
const struct iwl_cfg killer1650w_2ax_cfg = {
|
||||
.name = "Killer(R) Wireless-AX 1650w Wireless Network Adapter (200D2W)",
|
||||
.name = "Killer(R) Wi-Fi 6 AX1650w 160MHz Wireless Network Adapter (200D2W)",
|
||||
.fw_name_pre = IWL_CC_A_FW_PRE,
|
||||
IWL_DEVICE_22500,
|
||||
/*
|
||||
@ -328,7 +328,7 @@ const struct iwl_cfg killer1550s_2ac_cfg_qu_b0_jf_b0 = {
|
||||
};
|
||||
|
||||
const struct iwl_cfg killer1650s_2ax_cfg_qu_b0_hr_b0 = {
|
||||
.name = "Killer(R) Wireless-AX 1650i Wireless Network Adapter (22560NGW)",
|
||||
.name = "Killer(R) Wi-Fi 6 AX1650i 160MHz Wireless Network Adapter (201NGW)",
|
||||
.fw_name_pre = IWL_22000_QU_B_HR_B_FW_PRE,
|
||||
IWL_DEVICE_22500,
|
||||
/*
|
||||
@ -340,7 +340,7 @@ const struct iwl_cfg killer1650s_2ax_cfg_qu_b0_hr_b0 = {
|
||||
};
|
||||
|
||||
const struct iwl_cfg killer1650i_2ax_cfg_qu_b0_hr_b0 = {
|
||||
.name = "Killer(R) Wireless-AX 1650s Wireless Network Adapter (22560D2W)",
|
||||
.name = "Killer(R) Wi-Fi 6 AX1650s 160MHz Wireless Network Adapter (201D2W)",
|
||||
.fw_name_pre = IWL_22000_QU_B_HR_B_FW_PRE,
|
||||
IWL_DEVICE_22500,
|
||||
/*
|
||||
|
@ -1614,6 +1614,7 @@ iwl_dump_ini_mem(struct iwl_fw_runtime *fwrt,
|
||||
if (!range) {
|
||||
IWL_ERR(fwrt, "Failed to fill region header: id=%d, type=%d\n",
|
||||
le32_to_cpu(reg->region_id), type);
|
||||
memset(*data, 0, le32_to_cpu((*data)->len));
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1623,6 +1624,7 @@ iwl_dump_ini_mem(struct iwl_fw_runtime *fwrt,
|
||||
if (range_size < 0) {
|
||||
IWL_ERR(fwrt, "Failed to dump region: id=%d, type=%d\n",
|
||||
le32_to_cpu(reg->region_id), type);
|
||||
memset(*data, 0, le32_to_cpu((*data)->len));
|
||||
return;
|
||||
}
|
||||
range = range + range_size;
|
||||
@ -1807,12 +1809,12 @@ _iwl_fw_error_ini_dump(struct iwl_fw_runtime *fwrt,
|
||||
|
||||
trigger = fwrt->dump.active_trigs[id].trig;
|
||||
|
||||
size = sizeof(*dump_file);
|
||||
size += iwl_fw_ini_get_trigger_len(fwrt, trigger);
|
||||
|
||||
size = iwl_fw_ini_get_trigger_len(fwrt, trigger);
|
||||
if (!size)
|
||||
return NULL;
|
||||
|
||||
size += sizeof(*dump_file);
|
||||
|
||||
dump_file = vzalloc(size);
|
||||
if (!dump_file)
|
||||
return NULL;
|
||||
@ -1942,14 +1944,10 @@ int iwl_fw_dbg_error_collect(struct iwl_fw_runtime *fwrt,
|
||||
iwl_dump_error_desc->len = 0;
|
||||
|
||||
ret = iwl_fw_dbg_collect_desc(fwrt, iwl_dump_error_desc, false, 0);
|
||||
if (ret) {
|
||||
if (ret)
|
||||
kfree(iwl_dump_error_desc);
|
||||
} else {
|
||||
set_bit(STATUS_FW_WAIT_DUMP, &fwrt->trans->status);
|
||||
|
||||
/* trigger nmi to halt the fw */
|
||||
iwl_force_nmi(fwrt->trans);
|
||||
}
|
||||
else
|
||||
iwl_trans_sync_nmi(fwrt->trans);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@ -2489,22 +2487,6 @@ IWL_EXPORT_SYMBOL(iwl_fw_dbg_apply_point);
|
||||
|
||||
void iwl_fwrt_stop_device(struct iwl_fw_runtime *fwrt)
|
||||
{
|
||||
/* if the wait event timeout elapses instead of wake up then
|
||||
* the driver did not receive NMI interrupt and can not assume the FW
|
||||
* is halted
|
||||
*/
|
||||
int ret = wait_event_timeout(fwrt->trans->fw_halt_waitq,
|
||||
!test_bit(STATUS_FW_WAIT_DUMP,
|
||||
&fwrt->trans->status),
|
||||
msecs_to_jiffies(2000));
|
||||
if (!ret) {
|
||||
/* failed to receive NMI interrupt, assuming the FW is stuck */
|
||||
set_bit(STATUS_FW_ERROR, &fwrt->trans->status);
|
||||
|
||||
clear_bit(STATUS_FW_WAIT_DUMP, &fwrt->trans->status);
|
||||
}
|
||||
|
||||
/* Assuming the op mode mutex is held at this point */
|
||||
iwl_fw_dbg_collect_sync(fwrt);
|
||||
|
||||
iwl_trans_stop_device(fwrt->trans);
|
||||
|
@ -76,7 +76,6 @@ void iwl_fw_runtime_init(struct iwl_fw_runtime *fwrt, struct iwl_trans *trans,
|
||||
fwrt->ops_ctx = ops_ctx;
|
||||
INIT_DELAYED_WORK(&fwrt->dump.wk, iwl_fw_error_dump_wk);
|
||||
iwl_fwrt_dbgfs_register(fwrt, dbgfs_dir);
|
||||
init_waitqueue_head(&fwrt->trans->fw_halt_waitq);
|
||||
}
|
||||
IWL_EXPORT_SYMBOL(iwl_fw_runtime_init);
|
||||
|
||||
|
@ -550,7 +550,7 @@ extern const struct iwl_cfg iwl22000_2ac_cfg_hr_cdb;
|
||||
extern const struct iwl_cfg iwl22000_2ac_cfg_jf;
|
||||
extern const struct iwl_cfg iwl_ax101_cfg_qu_hr;
|
||||
extern const struct iwl_cfg iwl22000_2ax_cfg_hr;
|
||||
extern const struct iwl_cfg iwl22260_2ax_cfg;
|
||||
extern const struct iwl_cfg iwl_ax200_cfg_cc;
|
||||
extern const struct iwl_cfg killer1650s_2ax_cfg_qu_b0_hr_b0;
|
||||
extern const struct iwl_cfg killer1650i_2ax_cfg_qu_b0_hr_b0;
|
||||
extern const struct iwl_cfg killer1650x_2ax_cfg;
|
||||
|
@ -338,7 +338,6 @@ enum iwl_d3_status {
|
||||
* are sent
|
||||
* @STATUS_TRANS_IDLE: the trans is idle - general commands are not to be sent
|
||||
* @STATUS_TRANS_DEAD: trans is dead - avoid any read/write operation
|
||||
* @STATUS_FW_WAIT_DUMP: if set, wait until cleared before collecting dump
|
||||
*/
|
||||
enum iwl_trans_status {
|
||||
STATUS_SYNC_HCMD_ACTIVE,
|
||||
@ -351,7 +350,6 @@ enum iwl_trans_status {
|
||||
STATUS_TRANS_GOING_IDLE,
|
||||
STATUS_TRANS_IDLE,
|
||||
STATUS_TRANS_DEAD,
|
||||
STATUS_FW_WAIT_DUMP,
|
||||
};
|
||||
|
||||
static inline int
|
||||
@ -618,6 +616,7 @@ struct iwl_trans_ops {
|
||||
struct iwl_trans_dump_data *(*dump_data)(struct iwl_trans *trans,
|
||||
u32 dump_mask);
|
||||
void (*debugfs_cleanup)(struct iwl_trans *trans);
|
||||
void (*sync_nmi)(struct iwl_trans *trans);
|
||||
};
|
||||
|
||||
/**
|
||||
@ -831,7 +830,6 @@ struct iwl_trans {
|
||||
u32 lmac_error_event_table[2];
|
||||
u32 umac_error_event_table;
|
||||
unsigned int error_event_table_tlv_status;
|
||||
wait_queue_head_t fw_halt_waitq;
|
||||
|
||||
/* pointer to trans specific struct */
|
||||
/*Ensure that this pointer will always be aligned to sizeof pointer */
|
||||
@ -1239,10 +1237,12 @@ static inline void iwl_trans_fw_error(struct iwl_trans *trans)
|
||||
/* prevent double restarts due to the same erroneous FW */
|
||||
if (!test_and_set_bit(STATUS_FW_ERROR, &trans->status))
|
||||
iwl_op_mode_nic_error(trans->op_mode);
|
||||
}
|
||||
|
||||
if (test_and_clear_bit(STATUS_FW_WAIT_DUMP, &trans->status))
|
||||
wake_up(&trans->fw_halt_waitq);
|
||||
|
||||
static inline void iwl_trans_sync_nmi(struct iwl_trans *trans)
|
||||
{
|
||||
if (trans->ops->sync_nmi)
|
||||
trans->ops->sync_nmi(trans);
|
||||
}
|
||||
|
||||
/*****************************************************
|
||||
|
@ -2714,9 +2714,6 @@ static void iwl_mvm_stop_ap_ibss(struct ieee80211_hw *hw,
|
||||
|
||||
iwl_mvm_mac_ctxt_remove(mvm, vif);
|
||||
|
||||
kfree(mvmvif->ap_wep_key);
|
||||
mvmvif->ap_wep_key = NULL;
|
||||
|
||||
mutex_unlock(&mvm->mutex);
|
||||
}
|
||||
|
||||
@ -3183,24 +3180,7 @@ static int iwl_mvm_mac_sta_state(struct ieee80211_hw *hw,
|
||||
ret = iwl_mvm_update_sta(mvm, vif, sta);
|
||||
} else if (old_state == IEEE80211_STA_ASSOC &&
|
||||
new_state == IEEE80211_STA_AUTHORIZED) {
|
||||
/* if wep is used, need to set the key for the station now */
|
||||
if (vif->type == NL80211_IFTYPE_AP && mvmvif->ap_wep_key) {
|
||||
mvm_sta->wep_key =
|
||||
kmemdup(mvmvif->ap_wep_key,
|
||||
sizeof(*mvmvif->ap_wep_key) +
|
||||
mvmvif->ap_wep_key->keylen,
|
||||
GFP_KERNEL);
|
||||
if (!mvm_sta->wep_key) {
|
||||
ret = -ENOMEM;
|
||||
goto out_unlock;
|
||||
}
|
||||
|
||||
ret = iwl_mvm_set_sta_key(mvm, vif, sta,
|
||||
mvm_sta->wep_key,
|
||||
STA_KEY_IDX_INVALID);
|
||||
} else {
|
||||
ret = 0;
|
||||
}
|
||||
ret = 0;
|
||||
|
||||
/* we don't support TDLS during DCM */
|
||||
if (iwl_mvm_phy_ctx_count(mvm) > 1)
|
||||
@ -3242,17 +3222,6 @@ static int iwl_mvm_mac_sta_state(struct ieee80211_hw *hw,
|
||||
NL80211_TDLS_DISABLE_LINK);
|
||||
}
|
||||
|
||||
/* Remove STA key if this is an AP using WEP */
|
||||
if (vif->type == NL80211_IFTYPE_AP && mvmvif->ap_wep_key) {
|
||||
int rm_ret = iwl_mvm_remove_sta_key(mvm, vif, sta,
|
||||
mvm_sta->wep_key);
|
||||
|
||||
if (!ret)
|
||||
ret = rm_ret;
|
||||
kfree(mvm_sta->wep_key);
|
||||
mvm_sta->wep_key = NULL;
|
||||
}
|
||||
|
||||
if (unlikely(ret &&
|
||||
test_bit(IWL_MVM_STATUS_HW_RESTART_REQUESTED,
|
||||
&mvm->status)))
|
||||
@ -3439,20 +3408,12 @@ static int iwl_mvm_mac_set_key(struct ieee80211_hw *hw,
|
||||
break;
|
||||
case WLAN_CIPHER_SUITE_WEP40:
|
||||
case WLAN_CIPHER_SUITE_WEP104:
|
||||
if (vif->type == NL80211_IFTYPE_AP) {
|
||||
struct iwl_mvm_vif *mvmvif =
|
||||
iwl_mvm_vif_from_mac80211(vif);
|
||||
|
||||
mvmvif->ap_wep_key = kmemdup(key,
|
||||
sizeof(*key) + key->keylen,
|
||||
GFP_KERNEL);
|
||||
if (!mvmvif->ap_wep_key)
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
if (vif->type != NL80211_IFTYPE_STATION)
|
||||
return 0;
|
||||
break;
|
||||
if (vif->type == NL80211_IFTYPE_STATION)
|
||||
break;
|
||||
if (iwl_mvm_has_new_tx_api(mvm))
|
||||
return -EOPNOTSUPP;
|
||||
/* support HW crypto on TX */
|
||||
return 0;
|
||||
default:
|
||||
/* currently FW supports only one optional cipher scheme */
|
||||
if (hw->n_cipher_schemes &&
|
||||
@ -3540,12 +3501,17 @@ static int iwl_mvm_mac_set_key(struct ieee80211_hw *hw,
|
||||
ret = iwl_mvm_set_sta_key(mvm, vif, sta, key, key_offset);
|
||||
if (ret) {
|
||||
IWL_WARN(mvm, "set key failed\n");
|
||||
key->hw_key_idx = STA_KEY_IDX_INVALID;
|
||||
/*
|
||||
* can't add key for RX, but we don't need it
|
||||
* in the device for TX so still return 0
|
||||
* in the device for TX so still return 0,
|
||||
* unless we have new TX API where we cannot
|
||||
* put key material into the TX_CMD
|
||||
*/
|
||||
key->hw_key_idx = STA_KEY_IDX_INVALID;
|
||||
ret = 0;
|
||||
if (iwl_mvm_has_new_tx_api(mvm))
|
||||
ret = -EOPNOTSUPP;
|
||||
else
|
||||
ret = 0;
|
||||
}
|
||||
|
||||
break;
|
||||
|
@ -498,7 +498,6 @@ struct iwl_mvm_vif {
|
||||
netdev_features_t features;
|
||||
|
||||
struct iwl_probe_resp_data __rcu *probe_resp_data;
|
||||
struct ieee80211_key_conf *ap_wep_key;
|
||||
};
|
||||
|
||||
static inline struct iwl_mvm_vif *
|
||||
|
@ -8,7 +8,7 @@
|
||||
* Copyright(c) 2012 - 2015 Intel Corporation. All rights reserved.
|
||||
* Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
|
||||
* Copyright(c) 2016 - 2017 Intel Deutschland GmbH
|
||||
* Copyright(c) 2018 Intel Corporation
|
||||
* Copyright(c) 2018 - 2019 Intel Corporation
|
||||
*
|
||||
* 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
|
||||
@ -31,7 +31,7 @@
|
||||
* Copyright(c) 2012 - 2015 Intel Corporation. All rights reserved.
|
||||
* Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
|
||||
* Copyright(c) 2016 - 2017 Intel Deutschland GmbH
|
||||
* Copyright(c) 2018 Intel Corporation
|
||||
* Copyright(c) 2018 - 2019 Intel Corporation
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@ -2333,21 +2333,6 @@ int iwl_mvm_add_mcast_sta(struct iwl_mvm *mvm, struct ieee80211_vif *vif)
|
||||
iwl_mvm_enable_txq(mvm, NULL, mvmvif->cab_queue, 0, &cfg,
|
||||
timeout);
|
||||
|
||||
if (mvmvif->ap_wep_key) {
|
||||
u8 key_offset = iwl_mvm_set_fw_key_idx(mvm);
|
||||
|
||||
__set_bit(key_offset, mvm->fw_key_table);
|
||||
|
||||
if (key_offset == STA_KEY_IDX_INVALID)
|
||||
return -ENOSPC;
|
||||
|
||||
ret = iwl_mvm_send_sta_key(mvm, mvmvif->mcast_sta.sta_id,
|
||||
mvmvif->ap_wep_key, true, 0, NULL, 0,
|
||||
key_offset, 0);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -2419,28 +2404,6 @@ int iwl_mvm_rm_mcast_sta(struct iwl_mvm *mvm, struct ieee80211_vif *vif)
|
||||
|
||||
iwl_mvm_disable_txq(mvm, NULL, mvmvif->cab_queue, 0, 0);
|
||||
|
||||
if (mvmvif->ap_wep_key) {
|
||||
int i;
|
||||
|
||||
if (!__test_and_clear_bit(mvmvif->ap_wep_key->hw_key_idx,
|
||||
mvm->fw_key_table)) {
|
||||
IWL_ERR(mvm, "offset %d not used in fw key table.\n",
|
||||
mvmvif->ap_wep_key->hw_key_idx);
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
/* track which key was deleted last */
|
||||
for (i = 0; i < STA_KEY_MAX_NUM; i++) {
|
||||
if (mvm->fw_key_deleted[i] < U8_MAX)
|
||||
mvm->fw_key_deleted[i]++;
|
||||
}
|
||||
mvm->fw_key_deleted[mvmvif->ap_wep_key->hw_key_idx] = 0;
|
||||
ret = __iwl_mvm_remove_sta_key(mvm, mvmvif->mcast_sta.sta_id,
|
||||
mvmvif->ap_wep_key, true);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = iwl_mvm_rm_sta_common(mvm, mvmvif->mcast_sta.sta_id);
|
||||
if (ret)
|
||||
IWL_WARN(mvm, "Failed sending remove station\n");
|
||||
|
@ -8,7 +8,7 @@
|
||||
* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved.
|
||||
* Copyright(c) 2013 - 2014 Intel Mobile Communications GmbH
|
||||
* Copyright(c) 2015 - 2016 Intel Deutschland GmbH
|
||||
* Copyright(c) 2018 Intel Corporation
|
||||
* Copyright(c) 2018 - 2019 Intel Corporation
|
||||
*
|
||||
* 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
|
||||
@ -31,7 +31,7 @@
|
||||
* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved.
|
||||
* Copyright(c) 2013 - 2014 Intel Mobile Communications GmbH
|
||||
* Copyright(c) 2015 - 2016 Intel Deutschland GmbH
|
||||
* Copyright(c) 2018 Intel Corporation
|
||||
* Copyright(c) 2018 - 2019 Intel Corporation
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@ -394,7 +394,6 @@ struct iwl_mvm_rxq_dup_data {
|
||||
* the BA window. To be used for UAPSD only.
|
||||
* @ptk_pn: per-queue PTK PN data structures
|
||||
* @dup_data: per queue duplicate packet detection data
|
||||
* @wep_key: used in AP mode. Is a duplicate of the WEP key.
|
||||
* @deferred_traffic_tid_map: indication bitmap of deferred traffic per-TID
|
||||
* @tx_ant: the index of the antenna to use for data tx to this station. Only
|
||||
* used during connection establishment (e.g. for the 4 way handshake
|
||||
@ -426,8 +425,6 @@ struct iwl_mvm_sta {
|
||||
struct iwl_mvm_key_pn __rcu *ptk_pn[4];
|
||||
struct iwl_mvm_rxq_dup_data *dup_data;
|
||||
|
||||
struct ieee80211_key_conf *wep_key;
|
||||
|
||||
u8 reserved_queue;
|
||||
|
||||
/* Temporary, until the new TLC will control the Tx protection */
|
||||
|
@ -953,14 +953,15 @@ static const struct pci_device_id iwl_hw_card_ids[] = {
|
||||
{IWL_PCI_DEVICE(0xA0F0, 0x1652, killer1650i_2ax_cfg_qu_b0_hr_b0)},
|
||||
{IWL_PCI_DEVICE(0xA0F0, 0x4070, iwl_ax101_cfg_qu_hr)},
|
||||
|
||||
{IWL_PCI_DEVICE(0x2723, 0x0080, iwl22260_2ax_cfg)},
|
||||
{IWL_PCI_DEVICE(0x2723, 0x0084, iwl22260_2ax_cfg)},
|
||||
{IWL_PCI_DEVICE(0x2723, 0x0088, iwl22260_2ax_cfg)},
|
||||
{IWL_PCI_DEVICE(0x2723, 0x008C, iwl22260_2ax_cfg)},
|
||||
{IWL_PCI_DEVICE(0x2723, 0x0080, iwl_ax200_cfg_cc)},
|
||||
{IWL_PCI_DEVICE(0x2723, 0x0084, iwl_ax200_cfg_cc)},
|
||||
{IWL_PCI_DEVICE(0x2723, 0x0088, iwl_ax200_cfg_cc)},
|
||||
{IWL_PCI_DEVICE(0x2723, 0x008C, iwl_ax200_cfg_cc)},
|
||||
{IWL_PCI_DEVICE(0x2723, 0x1653, killer1650w_2ax_cfg)},
|
||||
{IWL_PCI_DEVICE(0x2723, 0x1654, killer1650x_2ax_cfg)},
|
||||
{IWL_PCI_DEVICE(0x2723, 0x4080, iwl22260_2ax_cfg)},
|
||||
{IWL_PCI_DEVICE(0x2723, 0x4088, iwl22260_2ax_cfg)},
|
||||
{IWL_PCI_DEVICE(0x2723, 0x2080, iwl_ax200_cfg_cc)},
|
||||
{IWL_PCI_DEVICE(0x2723, 0x4080, iwl_ax200_cfg_cc)},
|
||||
{IWL_PCI_DEVICE(0x2723, 0x4088, iwl_ax200_cfg_cc)},
|
||||
|
||||
{IWL_PCI_DEVICE(0x1a56, 0x1653, killer1650w_2ax_cfg)},
|
||||
{IWL_PCI_DEVICE(0x1a56, 0x1654, killer1650x_2ax_cfg)},
|
||||
|
@ -1043,7 +1043,7 @@ static inline bool iwl_pcie_dbg_on(struct iwl_trans *trans)
|
||||
|
||||
void iwl_trans_pcie_rf_kill(struct iwl_trans *trans, bool state);
|
||||
void iwl_trans_pcie_dump_regs(struct iwl_trans *trans);
|
||||
void iwl_trans_sync_nmi(struct iwl_trans *trans);
|
||||
void iwl_trans_pcie_sync_nmi(struct iwl_trans *trans);
|
||||
|
||||
#ifdef CONFIG_IWLWIFI_DEBUGFS
|
||||
int iwl_trans_pcie_dbgfs_register(struct iwl_trans *trans);
|
||||
|
@ -3318,7 +3318,8 @@ static void iwl_trans_pcie_resume(struct iwl_trans *trans)
|
||||
.unref = iwl_trans_pcie_unref, \
|
||||
.dump_data = iwl_trans_pcie_dump_data, \
|
||||
.d3_suspend = iwl_trans_pcie_d3_suspend, \
|
||||
.d3_resume = iwl_trans_pcie_d3_resume
|
||||
.d3_resume = iwl_trans_pcie_d3_resume, \
|
||||
.sync_nmi = iwl_trans_pcie_sync_nmi
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
#define IWL_TRANS_PM_OPS \
|
||||
@ -3560,7 +3561,7 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev,
|
||||
}
|
||||
} else if (CSR_HW_RF_ID_TYPE_CHIP_ID(trans->hw_rf_id) ==
|
||||
CSR_HW_RF_ID_TYPE_CHIP_ID(CSR_HW_RF_ID_TYPE_HR) &&
|
||||
(trans->cfg != &iwl22260_2ax_cfg ||
|
||||
(trans->cfg != &iwl_ax200_cfg_cc ||
|
||||
trans->hw_rev == CSR_HW_REV_TYPE_QNJ_B0)) {
|
||||
u32 hw_status;
|
||||
|
||||
@ -3637,7 +3638,7 @@ out_no_pci:
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
|
||||
void iwl_trans_sync_nmi(struct iwl_trans *trans)
|
||||
void iwl_trans_pcie_sync_nmi(struct iwl_trans *trans)
|
||||
{
|
||||
unsigned long timeout = jiffies + IWL_TRANS_NMI_TIMEOUT;
|
||||
|
||||
|
@ -965,7 +965,7 @@ static int iwl_pcie_gen2_send_hcmd_sync(struct iwl_trans *trans,
|
||||
cmd_str);
|
||||
ret = -ETIMEDOUT;
|
||||
|
||||
iwl_trans_sync_nmi(trans);
|
||||
iwl_trans_pcie_sync_nmi(trans);
|
||||
goto cancel;
|
||||
}
|
||||
|
||||
|
@ -1960,7 +1960,7 @@ static int iwl_pcie_send_hcmd_sync(struct iwl_trans *trans,
|
||||
iwl_get_cmd_string(trans, cmd->id));
|
||||
ret = -ETIMEDOUT;
|
||||
|
||||
iwl_trans_sync_nmi(trans);
|
||||
iwl_trans_pcie_sync_nmi(trans);
|
||||
goto cancel;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user