diff options
author | Emmanuel Grumbach <emmanuel.grumbach@intel.com> | 2025-07-11 18:34:23 +0300 |
---|---|---|
committer | Miri Korenblit <miriam.rachel.korenblit@intel.com> | 2025-07-14 19:36:13 +0300 |
commit | 3735526d3e1c852dd9a3c05d82896a456819adc9 (patch) | |
tree | 5c57da09229fa1c7533358cb6cfc752fb4566563 /drivers/net/wireless/intel/iwlwifi/mld/link.c | |
parent | 8bec2ec156903e12a8b45a57ae9bca409ead5646 (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.c | 30 |
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; |