summaryrefslogtreecommitdiff
path: root/drivers/net/wireless/intel/iwlwifi/mld/link.c
diff options
context:
space:
mode:
authorEmmanuel Grumbach <emmanuel.grumbach@intel.com>2025-07-11 18:34:23 +0300
committerMiri Korenblit <miriam.rachel.korenblit@intel.com>2025-07-14 19:36:13 +0300
commit3735526d3e1c852dd9a3c05d82896a456819adc9 (patch)
tree5c57da09229fa1c7533358cb6cfc752fb4566563 /drivers/net/wireless/intel/iwlwifi/mld/link.c
parent8bec2ec156903e12a8b45a57ae9bca409ead5646 (diff)
wifi: iwlwifi: mld: support iwl_omi_send_status_notif version 2
The firmware provides the station id, use it since it makes our lives easier. No need to assume we have a single BSS vif, and look up the station id to whom the OMI was sent. Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com> Link: https://patch.msgid.link/20250711183056.7d2cd878855f.I8625ebb2c4e1fb484aafd16a07549f2eeb506e08@changeid
Diffstat (limited to 'drivers/net/wireless/intel/iwlwifi/mld/link.c')
-rw-r--r--drivers/net/wireless/intel/iwlwifi/mld/link.c30
1 files changed, 29 insertions, 1 deletions
diff --git a/drivers/net/wireless/intel/iwlwifi/mld/link.c b/drivers/net/wireless/intel/iwlwifi/mld/link.c
index ff237f78a468..c48cc3909637 100644
--- a/drivers/net/wireless/intel/iwlwifi/mld/link.c
+++ b/drivers/net/wireless/intel/iwlwifi/mld/link.c
@@ -649,11 +649,39 @@ void iwl_mld_omi_ap_changed_bw(struct iwl_mld *mld,
void iwl_mld_handle_omi_status_notif(struct iwl_mld *mld,
struct iwl_rx_packet *pkt)
{
+ int ver = iwl_fw_lookup_notif_ver(mld->fw, DATA_PATH_GROUP,
+ OMI_SEND_STATUS_NOTIF, 1);
struct ieee80211_link_sta *link_sta;
struct iwl_mld_link *mld_link;
struct ieee80211_vif *vif;
- vif = iwl_mld_get_omi_bw_reduction_pointers(mld, &link_sta, &mld_link);
+ if (ver == 2) {
+ const struct iwl_omi_send_status_notif *notif =
+ (const void *)pkt->data;
+ u32 sta_id = le32_to_cpu(notif->sta_id);
+ struct iwl_mld_vif *mld_vif;
+
+ if (IWL_FW_CHECK(mld, sta_id >= mld->fw->ucode_capa.num_stations,
+ "Invalid station %d\n", sta_id))
+ return;
+
+ link_sta = wiphy_dereference(mld->wiphy,
+ mld->fw_id_to_link_sta[sta_id]);
+ if (IWL_FW_CHECK(mld, !link_sta, "Station does not exist\n"))
+ return;
+
+ vif = iwl_mld_sta_from_mac80211(link_sta->sta)->vif;
+ mld_vif = iwl_mld_vif_from_mac80211(vif);
+
+ mld_link = iwl_mld_link_dereference_check(mld_vif,
+ link_sta->link_id);
+ if (WARN(!mld_link, "Link %d does not exist\n",
+ link_sta->link_id))
+ return;
+ } else {
+ vif = iwl_mld_get_omi_bw_reduction_pointers(mld, &link_sta,
+ &mld_link);
+ }
if (IWL_FW_CHECK(mld, !vif, "unexpected OMI notification\n"))
return;