wifi: iwlwifi: support link id in SESSION_PROTECTION_NOTIF
FW is introducing an API change in which link ID will be used for session protection notif. Add support for it. Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com> Signed-off-by: Gregory Greenman <gregory.greenman@intel.com> Link: https://lore.kernel.org/r/20231017115047.4c59b149086e.I74fe93a6337f4ec9d1bd6f791d315411ac5b40da@changeid Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
1350658373
commit
085d33c530
@ -461,7 +461,8 @@ struct iwl_mvm_session_prot_cmd {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* struct iwl_mvm_session_prot_notif - session protection started / ended
|
* struct iwl_mvm_session_prot_notif - session protection started / ended
|
||||||
* @mac_id: the mac id for which the session protection started / ended
|
* @mac_link_id: the mac id (or link id, for notif ver > 2) for which the
|
||||||
|
* session protection started / ended
|
||||||
* @status: 1 means success, 0 means failure
|
* @status: 1 means success, 0 means failure
|
||||||
* @start: 1 means the session protection started, 0 means it ended
|
* @start: 1 means the session protection started, 0 means it ended
|
||||||
* @conf_id: see &enum iwl_mvm_session_prot_conf_id
|
* @conf_id: see &enum iwl_mvm_session_prot_conf_id
|
||||||
@ -470,10 +471,13 @@ struct iwl_mvm_session_prot_cmd {
|
|||||||
* and end even the firmware could not schedule it.
|
* and end even the firmware could not schedule it.
|
||||||
*/
|
*/
|
||||||
struct iwl_mvm_session_prot_notif {
|
struct iwl_mvm_session_prot_notif {
|
||||||
__le32 mac_id;
|
__le32 mac_link_id;
|
||||||
__le32 status;
|
__le32 status;
|
||||||
__le32 start;
|
__le32 start;
|
||||||
__le32 conf_id;
|
__le32 conf_id;
|
||||||
} __packed; /* SESSION_PROTECTION_NOTIFICATION_API_S_VER_2 */
|
} __packed;
|
||||||
|
/* SESSION_PROTECTION_NOTIFICATION_API_S_VER_2 and
|
||||||
|
* SESSION_PROTECTION_NOTIFICATION_API_S_VER_3
|
||||||
|
*/
|
||||||
|
|
||||||
#endif /* __iwl_fw_api_time_event_h__ */
|
#endif /* __iwl_fw_api_time_event_h__ */
|
||||||
|
@ -898,18 +898,41 @@ void iwl_mvm_rx_session_protect_notif(struct iwl_mvm *mvm,
|
|||||||
{
|
{
|
||||||
struct iwl_rx_packet *pkt = rxb_addr(rxb);
|
struct iwl_rx_packet *pkt = rxb_addr(rxb);
|
||||||
struct iwl_mvm_session_prot_notif *notif = (void *)pkt->data;
|
struct iwl_mvm_session_prot_notif *notif = (void *)pkt->data;
|
||||||
|
unsigned int ver =
|
||||||
|
iwl_fw_lookup_cmd_ver(mvm->fw,
|
||||||
|
WIDE_ID(MAC_CONF_GROUP,
|
||||||
|
SESSION_PROTECTION_CMD), 2);
|
||||||
|
int id = le32_to_cpu(notif->mac_link_id);
|
||||||
struct ieee80211_vif *vif;
|
struct ieee80211_vif *vif;
|
||||||
struct iwl_mvm_vif *mvmvif;
|
struct iwl_mvm_vif *mvmvif;
|
||||||
|
unsigned int notif_link_id;
|
||||||
|
|
||||||
rcu_read_lock();
|
rcu_read_lock();
|
||||||
vif = iwl_mvm_rcu_dereference_vif_id(mvm, le32_to_cpu(notif->mac_id),
|
|
||||||
true);
|
if (ver <= 2) {
|
||||||
|
vif = iwl_mvm_rcu_dereference_vif_id(mvm, id, true);
|
||||||
|
} else {
|
||||||
|
struct ieee80211_bss_conf *link_conf =
|
||||||
|
iwl_mvm_rcu_fw_link_id_to_link_conf(mvm, id, true);
|
||||||
|
|
||||||
|
if (!link_conf)
|
||||||
|
goto out_unlock;
|
||||||
|
|
||||||
|
notif_link_id = link_conf->link_id;
|
||||||
|
vif = link_conf->vif;
|
||||||
|
}
|
||||||
|
|
||||||
if (!vif)
|
if (!vif)
|
||||||
goto out_unlock;
|
goto out_unlock;
|
||||||
|
|
||||||
mvmvif = iwl_mvm_vif_from_mac80211(vif);
|
mvmvif = iwl_mvm_vif_from_mac80211(vif);
|
||||||
|
|
||||||
|
if (WARN(ver > 2 && mvmvif->time_event_data.link_id >= 0 &&
|
||||||
|
mvmvif->time_event_data.link_id != notif_link_id,
|
||||||
|
"SESION_PROTECTION_NOTIF was received for link %u, while the current time event is on link %u\n",
|
||||||
|
notif_link_id, mvmvif->time_event_data.link_id))
|
||||||
|
goto out_unlock;
|
||||||
|
|
||||||
/* The vif is not a P2P_DEVICE, maintain its time_event_data */
|
/* The vif is not a P2P_DEVICE, maintain its time_event_data */
|
||||||
if (vif->type != NL80211_IFTYPE_P2P_DEVICE) {
|
if (vif->type != NL80211_IFTYPE_P2P_DEVICE) {
|
||||||
struct iwl_mvm_time_event_data *te_data =
|
struct iwl_mvm_time_event_data *te_data =
|
||||||
|
Loading…
x
Reference in New Issue
Block a user