Commit 3f302269 authored by Emmanuel Grumbach's avatar Emmanuel Grumbach Committed by Johannes Berg

wifi: iwlwifi: mvm: update the FW apis for LINK and MAC commands

The firmware added new fields to be able to pass the link_id as the AP
knows it and the esr_transition_timeout.
For now, pass only the link_id since we don't have access to the
esr_transition_timeout yet.
Signed-off-by: default avatarEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: default avatarGregory Greenman <gregory.greenman@intel.com>
Link: https://lore.kernel.org/r/20230524203151.bf80ce717458.Icd4174911227c00cd12783fe1f517ae8097809b9@changeidSigned-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent cec74584
...@@ -211,17 +211,30 @@ struct iwl_mac_low_latency_cmd { ...@@ -211,17 +211,30 @@ struct iwl_mac_low_latency_cmd {
* struct iwl_mac_client_data - configuration data for client MAC context * struct iwl_mac_client_data - configuration data for client MAC context
* *
* @is_assoc: 1 for associated state, 0 otherwise * @is_assoc: 1 for associated state, 0 otherwise
* @esr_transition_timeout: the timeout required by the AP for the
* eSR transition.
* Available only from version 2 of the command.
* This values comes from the EMLSR transition delay in the EML
* Capabilities subfield.
* @reserved: alignment
* @assoc_id: unique ID assigned by the AP during association * @assoc_id: unique ID assigned by the AP during association
* @reserved1: alignment
* @data_policy: see &enum iwl_mac_data_policy * @data_policy: see &enum iwl_mac_data_policy
* @reserved2: alignment
* @ctwin: client traffic window in TU (period after TBTT when GO is present). * @ctwin: client traffic window in TU (period after TBTT when GO is present).
* 0 indicates that there is no CT window. * 0 indicates that there is no CT window.
*/ */
struct iwl_mac_client_data { struct iwl_mac_client_data {
__le32 is_assoc; u8 is_assoc;
__le32 assoc_id; u8 esr_transition_timeout;
__le32 data_policy; __le16 reserved;
__le16 assoc_id;
__le16 reserved1;
__le16 data_policy;
__le16 reserved2;
__le32 ctwin; __le32 ctwin;
} __packed; /* MAC_CONTEXT_CONFIG_CLIENT_DATA_API_S_VER_1 */ } __packed; /* MAC_CONTEXT_CONFIG_CLIENT_DATA_API_S_VER_2 */
/** /**
* struct iwl_mac_p2p_dev_data - configuration data for P2P device MAC context * struct iwl_mac_p2p_dev_data - configuration data for P2P device MAC context
...@@ -292,12 +305,12 @@ struct iwl_mac_config_cmd { ...@@ -292,12 +305,12 @@ struct iwl_mac_config_cmd {
__le16 he_ap_support; __le16 he_ap_support;
__le32 eht_support; __le32 eht_support;
__le32 nic_not_ack_enabled; __le32 nic_not_ack_enabled;
/* MAC_CONTEXT_CONFIG_SPECIFIC_DATA_API_U_VER_1 */ /* MAC_CONTEXT_CONFIG_SPECIFIC_DATA_API_U_VER_2 */
union { union {
struct iwl_mac_client_data client; struct iwl_mac_client_data client;
struct iwl_mac_p2p_dev_data p2p_dev; struct iwl_mac_p2p_dev_data p2p_dev;
}; };
} __packed; /* MAC_CONTEXT_CONFIG_CMD_API_S_VER_1 */ } __packed; /* MAC_CONTEXT_CONFIG_CMD_API_S_VER_2 */
/** /**
* enum iwl_link_ctx_modify_flags - indicate to the fw what fields are being * enum iwl_link_ctx_modify_flags - indicate to the fw what fields are being
...@@ -430,6 +443,7 @@ enum iwl_link_ctx_flags { ...@@ -430,6 +443,7 @@ enum iwl_link_ctx_flags {
* @reserved_for_ref_bssid_addr: reserved * @reserved_for_ref_bssid_addr: reserved
* @bssid_index: index of the associated VAP * @bssid_index: index of the associated VAP
* @bss_color: 11ax AP ID that is used in the HE SIG-A to mark inter BSS frame * @bss_color: 11ax AP ID that is used in the HE SIG-A to mark inter BSS frame
* @spec_link_id: link_id as the AP knows it
* @reserved: alignment * @reserved: alignment
* @ibss_bssid_addr: bssid for ibss * @ibss_bssid_addr: bssid for ibss
* @reserved_for_ibss_bssid_addr: reserved * @reserved_for_ibss_bssid_addr: reserved
...@@ -469,7 +483,8 @@ struct iwl_link_config_cmd { ...@@ -469,7 +483,8 @@ struct iwl_link_config_cmd {
__le16 reserved_for_ref_bssid_addr; __le16 reserved_for_ref_bssid_addr;
u8 bssid_index; u8 bssid_index;
u8 bss_color; u8 bss_color;
u8 reserved[2]; u8 spec_link_id;
u8 reserved;
u8 ibss_bssid_addr[6]; u8 ibss_bssid_addr[6];
__le16 reserved_for_ibss_bssid_addr; __le16 reserved_for_ibss_bssid_addr;
__le32 reserved1[8]; __le32 reserved1[8];
......
...@@ -76,6 +76,7 @@ int iwl_mvm_add_link(struct iwl_mvm *mvm, struct ieee80211_vif *vif, ...@@ -76,6 +76,7 @@ int iwl_mvm_add_link(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
cmd.link_id = cpu_to_le32(link_info->fw_link_id); cmd.link_id = cpu_to_le32(link_info->fw_link_id);
cmd.mac_id = cpu_to_le32(mvmvif->id); cmd.mac_id = cpu_to_le32(mvmvif->id);
cmd.spec_link_id = link_conf->link_id;
/* P2P-Device already has a valid PHY context during add */ /* P2P-Device already has a valid PHY context during add */
phyctxt = link_info->phy_ctxt; phyctxt = link_info->phy_ctxt;
if (phyctxt) if (phyctxt)
......
...@@ -629,17 +629,17 @@ __le32 iwl_mvm_mac_ctxt_cmd_p2p_sta_get_oppps_ctwin(struct iwl_mvm *mvm, ...@@ -629,17 +629,17 @@ __le32 iwl_mvm_mac_ctxt_cmd_p2p_sta_get_oppps_ctwin(struct iwl_mvm *mvm,
IEEE80211_P2P_OPPPS_CTWINDOW_MASK); IEEE80211_P2P_OPPPS_CTWINDOW_MASK);
} }
__le32 iwl_mvm_mac_ctxt_cmd_sta_get_twt_policy(struct iwl_mvm *mvm, u32 iwl_mvm_mac_ctxt_cmd_sta_get_twt_policy(struct iwl_mvm *mvm,
struct ieee80211_vif *vif) struct ieee80211_vif *vif)
{ {
__le32 twt_policy = cpu_to_le32(0); u32 twt_policy = 0;
if (vif->bss_conf.twt_requester && IWL_MVM_USE_TWT) if (vif->bss_conf.twt_requester && IWL_MVM_USE_TWT)
twt_policy |= cpu_to_le32(TWT_SUPPORTED); twt_policy |= TWT_SUPPORTED;
if (vif->bss_conf.twt_protected) if (vif->bss_conf.twt_protected)
twt_policy |= cpu_to_le32(PROTECTED_TWT_SUPPORTED); twt_policy |= PROTECTED_TWT_SUPPORTED;
if (vif->bss_conf.twt_broadcast) if (vif->bss_conf.twt_broadcast)
twt_policy |= cpu_to_le32(BROADCAST_TWT_SUPPORTED); twt_policy |= BROADCAST_TWT_SUPPORTED;
return twt_policy; return twt_policy;
} }
...@@ -711,7 +711,7 @@ static int iwl_mvm_mac_ctxt_cmd_sta(struct iwl_mvm *mvm, ...@@ -711,7 +711,7 @@ static int iwl_mvm_mac_ctxt_cmd_sta(struct iwl_mvm *mvm,
if (vif->bss_conf.he_support && !iwlwifi_mod_params.disable_11ax) { if (vif->bss_conf.he_support && !iwlwifi_mod_params.disable_11ax) {
cmd.filter_flags |= cpu_to_le32(MAC_FILTER_IN_11AX); cmd.filter_flags |= cpu_to_le32(MAC_FILTER_IN_11AX);
ctxt_sta->data_policy |= ctxt_sta->data_policy |=
iwl_mvm_mac_ctxt_cmd_sta_get_twt_policy(mvm, vif); cpu_to_le32(iwl_mvm_mac_ctxt_cmd_sta_get_twt_policy(mvm, vif));
} }
......
...@@ -115,16 +115,16 @@ static int iwl_mvm_mld_mac_ctxt_cmd_sta(struct iwl_mvm *mvm, ...@@ -115,16 +115,16 @@ static int iwl_mvm_mld_mac_ctxt_cmd_sta(struct iwl_mvm *mvm,
if (vif->cfg.assoc && !force_assoc_off) { if (vif->cfg.assoc && !force_assoc_off) {
struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif); struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif);
cmd.client.is_assoc = cpu_to_le32(1); cmd.client.is_assoc = 1;
if (!mvmvif->authorized && if (!mvmvif->authorized &&
fw_has_capa(&mvm->fw->ucode_capa, fw_has_capa(&mvm->fw->ucode_capa,
IWL_UCODE_TLV_CAPA_COEX_HIGH_PRIO)) IWL_UCODE_TLV_CAPA_COEX_HIGH_PRIO))
cmd.client.data_policy |= cmd.client.data_policy |=
cpu_to_le32(COEX_HIGH_PRIORITY_ENABLE); cpu_to_le16(COEX_HIGH_PRIORITY_ENABLE);
} else { } else {
cmd.client.is_assoc = cpu_to_le32(0); cmd.client.is_assoc = 0;
/* Allow beacons to pass through as long as we are not /* Allow beacons to pass through as long as we are not
* associated, or we do not have dtim period information. * associated, or we do not have dtim period information.
...@@ -132,14 +132,14 @@ static int iwl_mvm_mld_mac_ctxt_cmd_sta(struct iwl_mvm *mvm, ...@@ -132,14 +132,14 @@ static int iwl_mvm_mld_mac_ctxt_cmd_sta(struct iwl_mvm *mvm,
cmd.filter_flags |= cpu_to_le32(MAC_CFG_FILTER_ACCEPT_BEACON); cmd.filter_flags |= cpu_to_le32(MAC_CFG_FILTER_ACCEPT_BEACON);
} }
cmd.client.assoc_id = cpu_to_le32(vif->cfg.aid); cmd.client.assoc_id = cpu_to_le16(vif->cfg.aid);
if (vif->probe_req_reg && vif->cfg.assoc && vif->p2p) if (vif->probe_req_reg && vif->cfg.assoc && vif->p2p)
cmd.filter_flags |= cpu_to_le32(MAC_CFG_FILTER_ACCEPT_PROBE_REQ); cmd.filter_flags |= cpu_to_le32(MAC_CFG_FILTER_ACCEPT_PROBE_REQ);
if (vif->bss_conf.he_support && !iwlwifi_mod_params.disable_11ax) if (vif->bss_conf.he_support && !iwlwifi_mod_params.disable_11ax)
cmd.client.data_policy |= cmd.client.data_policy |=
iwl_mvm_mac_ctxt_cmd_sta_get_twt_policy(mvm, vif); cpu_to_le16(iwl_mvm_mac_ctxt_cmd_sta_get_twt_policy(mvm, vif));
return iwl_mvm_mld_mac_ctxt_send_cmd(mvm, &cmd); return iwl_mvm_mld_mac_ctxt_send_cmd(mvm, &cmd);
} }
......
...@@ -1789,8 +1789,8 @@ void iwl_mvm_mac_ctxt_cmd_ap_set_filter_flags(struct iwl_mvm *mvm, ...@@ -1789,8 +1789,8 @@ void iwl_mvm_mac_ctxt_cmd_ap_set_filter_flags(struct iwl_mvm *mvm,
int iwl_mvm_get_mac_type(struct ieee80211_vif *vif); int iwl_mvm_get_mac_type(struct ieee80211_vif *vif);
__le32 iwl_mvm_mac_ctxt_cmd_p2p_sta_get_oppps_ctwin(struct iwl_mvm *mvm, __le32 iwl_mvm_mac_ctxt_cmd_p2p_sta_get_oppps_ctwin(struct iwl_mvm *mvm,
struct ieee80211_vif *vif); struct ieee80211_vif *vif);
__le32 iwl_mvm_mac_ctxt_cmd_sta_get_twt_policy(struct iwl_mvm *mvm, u32 iwl_mvm_mac_ctxt_cmd_sta_get_twt_policy(struct iwl_mvm *mvm,
struct ieee80211_vif *vif); struct ieee80211_vif *vif);
int iwl_mvm_mld_mac_ctxt_add(struct iwl_mvm *mvm, struct ieee80211_vif *vif); int iwl_mvm_mld_mac_ctxt_add(struct iwl_mvm *mvm, struct ieee80211_vif *vif);
int iwl_mvm_mld_mac_ctxt_changed(struct iwl_mvm *mvm, struct ieee80211_vif *vif, int iwl_mvm_mld_mac_ctxt_changed(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
bool force_assoc_off); bool force_assoc_off);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment