mirror of
https://github.com/torvalds/linux.git
synced 2026-06-04 12:35:52 +02:00
iwlwifi: support ver 6 of WOWLAN_CONFIGURATION and ver 10 of WOWLAN_GET_STATUSES
These two version updates deprecate the need to set/get the nonqos sequence counter during suspend/resume flow respectively; NICs supporting this version maintain this counter internally and don't lose it during the suspend/resume flow. Note that this means that for such NICs the NON_QOS_TX_COUNTER_CMD is no longer ever sent. Signed-off-by: Naftali Goldstein <naftali.goldstein@intel.com> Signed-off-by: Luca Coelho <luciano.coelho@intel.com> Link: https://lore.kernel.org/r/iwlwifi.20210618105614.dd25dd667798.I8db9adcdbb133304b58cf417f8698611138c83b4@changeid Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
This commit is contained in:
parent
b1c6cec04b
commit
5b16565a7f
|
|
@ -339,9 +339,10 @@ enum iwl_wowlan_flags {
|
|||
};
|
||||
|
||||
/**
|
||||
* struct iwl_wowlan_config_cmd - WoWLAN configuration
|
||||
* struct iwl_wowlan_config_cmd - WoWLAN configuration (versions 5 and 6)
|
||||
* @wakeup_filter: filter from &enum iwl_wowlan_wakeup_filters
|
||||
* @non_qos_seq: non-QoS sequence counter to use next
|
||||
* @non_qos_seq: non-QoS sequence counter to use next.
|
||||
* Reserved if the struct has version >= 6.
|
||||
* @qos_seq: QoS sequence counters to use next
|
||||
* @wowlan_ba_teardown_tids: bitmap of BA sessions to tear down
|
||||
* @is_11n_connection: indicates HT connection
|
||||
|
|
@ -604,12 +605,13 @@ struct iwl_wowlan_status_v7 {
|
|||
} __packed; /* WOWLAN_STATUSES_API_S_VER_7 */
|
||||
|
||||
/**
|
||||
* struct iwl_wowlan_status_v9 - WoWLAN status (version 9)
|
||||
* struct iwl_wowlan_status_v9 - WoWLAN status (versions 9 and 10)
|
||||
* @gtk: GTK data
|
||||
* @igtk: IGTK data
|
||||
* @replay_ctr: GTK rekey replay counter
|
||||
* @pattern_number: number of the matched pattern
|
||||
* @non_qos_seq_ctr: non-QoS sequence counter to use next
|
||||
* @non_qos_seq_ctr: non-QoS sequence counter to use next.
|
||||
* Reserved if the struct has version >= 10.
|
||||
* @qos_seq_ctr: QoS sequence counters to use next
|
||||
* @wakeup_reasons: wakeup reasons, see &enum iwl_wowlan_wakeup_reason
|
||||
* @num_of_gtk_rekeys: number of GTK rekeys
|
||||
|
|
@ -638,7 +640,7 @@ struct iwl_wowlan_status_v9 {
|
|||
u8 tid_tear_down;
|
||||
u8 reserved[3];
|
||||
u8 wake_packet[]; /* can be truncated from _length to _bufsize */
|
||||
} __packed; /* WOWLAN_STATUSES_API_S_VER_9 */
|
||||
} __packed; /* WOWLAN_STATUSES_RSP_API_S_VER_9 */
|
||||
|
||||
/**
|
||||
* struct iwl_wowlan_status - WoWLAN status
|
||||
|
|
|
|||
|
|
@ -636,7 +636,6 @@ iwl_mvm_get_wowlan_config(struct iwl_mvm *mvm,
|
|||
struct ieee80211_vif *vif, struct iwl_mvm_vif *mvmvif,
|
||||
struct ieee80211_sta *ap_sta)
|
||||
{
|
||||
int ret;
|
||||
struct iwl_mvm_sta *mvm_ap_sta = iwl_mvm_sta_from_mac80211(ap_sta);
|
||||
|
||||
/* TODO: wowlan_config_cmd->wowlan_ba_teardown_tids */
|
||||
|
|
@ -646,12 +645,16 @@ iwl_mvm_get_wowlan_config(struct iwl_mvm *mvm,
|
|||
wowlan_config_cmd->flags = ENABLE_L3_FILTERING |
|
||||
ENABLE_NBNS_FILTERING | ENABLE_DHCP_FILTERING;
|
||||
|
||||
/* Query the last used seqno and set it */
|
||||
ret = iwl_mvm_get_last_nonqos_seq(mvm, vif);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
if (iwl_fw_lookup_cmd_ver(mvm->fw, LONG_GROUP,
|
||||
WOWLAN_CONFIGURATION, 0) < 6) {
|
||||
/* Query the last used seqno and set it */
|
||||
int ret = iwl_mvm_get_last_nonqos_seq(mvm, vif);
|
||||
|
||||
wowlan_config_cmd->non_qos_seq = cpu_to_le16(ret);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
wowlan_config_cmd->non_qos_seq = cpu_to_le16(ret);
|
||||
}
|
||||
|
||||
iwl_mvm_set_wowlan_qos_seq(mvm_ap_sta, wowlan_config_cmd);
|
||||
|
||||
|
|
@ -1534,9 +1537,12 @@ static bool iwl_mvm_setup_connection_keep(struct iwl_mvm *mvm,
|
|||
}
|
||||
|
||||
out:
|
||||
mvmvif->seqno_valid = true;
|
||||
/* +0x10 because the set API expects next-to-use, not last-used */
|
||||
mvmvif->seqno = le16_to_cpu(status->non_qos_seq_ctr) + 0x10;
|
||||
if (iwl_fw_lookup_notif_ver(mvm->fw, LONG_GROUP,
|
||||
WOWLAN_GET_STATUSES, 0) < 10) {
|
||||
mvmvif->seqno_valid = true;
|
||||
/* +0x10 because the set API expects next-to-use, not last-used */
|
||||
mvmvif->seqno = le16_to_cpu(status->non_qos_seq_ctr) + 0x10;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
@ -1654,7 +1660,7 @@ struct iwl_wowlan_status *iwl_mvm_send_wowlan_get_status(struct iwl_mvm *mvm)
|
|||
|
||||
status->gtk[0] = v7->gtk[0];
|
||||
status->igtk[0] = v7->igtk[0];
|
||||
} else if (notif_ver == 9) {
|
||||
} else if (notif_ver == 9 || notif_ver == 10) {
|
||||
struct iwl_wowlan_status_v9 *v9 = (void *)cmd.resp_pkt->data;
|
||||
|
||||
status = iwl_mvm_parse_wowlan_status_common_v9(mvm,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user