wifi: iwlwifi: mvm: Correctly report TSF data in scan complete
authorIlan Peer <ilan.peer@intel.com>
Thu, 7 Dec 2023 02:50:07 +0000 (04:50 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Tue, 12 Dec 2023 09:36:59 +0000 (10:36 +0100)
For an MLO connection, the BSSID of the link used during the scanning
should be used (and not the one from the default link).

Signed-off-by: Ilan Peer <ilan.peer@intel.com>
Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
Link: https://msgid.link/20231207044813.1e67dba640c1.I6c4941bfab3a04498370e58b402c64d990c39fbf@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
drivers/net/wireless/intel/iwlwifi/mvm/mvm.h
drivers/net/wireless/intel/iwlwifi/mvm/scan.c

index f2af3e57140906e05f70fc056d9b7d0d726756b9..b04485b7e1f6d09a3c26948c944e43e3c70188a5 100644 (file)
@@ -947,6 +947,7 @@ struct iwl_mvm {
 
        /* the vif that requested the current scan */
        struct iwl_mvm_vif *scan_vif;
+       u8 scan_link_id;
 
        /* rx chain antennas set through debugfs for the scan command */
        u8 scan_rx_ant;
index 79829ced8349bf7e8a8adca9ae61797130ee3dd5..7b6f1cdca067e82ba29acf9f95bcf276cfd44f42 100644 (file)
@@ -2343,12 +2343,15 @@ iwl_mvm_scan_umac_fill_general_p_v12(struct iwl_mvm *mvm,
        if (gen_flags & IWL_UMAC_SCAN_GEN_FLAGS_V2_FRAGMENTED_LMAC2)
                gp->num_of_fragments[SCAN_HB_LMAC_IDX] = IWL_SCAN_NUM_OF_FRAGS;
 
+       mvm->scan_link_id = 0;
+
        if (version < 16) {
                gp->scan_start_mac_or_link_id = scan_vif->id;
        } else {
                struct iwl_mvm_vif_link_info *link_info =
                        scan_vif->link[params->tsf_report_link_id];
 
+               mvm->scan_link_id = params->tsf_report_link_id;
                if (!WARN_ON(!link_info))
                        gp->scan_start_mac_or_link_id = link_info->fw_link_id;
        }
@@ -3165,8 +3168,13 @@ void iwl_mvm_rx_umac_scan_complete_notif(struct iwl_mvm *mvm,
                        .aborted = aborted,
                        .scan_start_tsf = mvm->scan_start,
                };
+               struct iwl_mvm_vif *scan_vif = mvm->scan_vif;
+               struct iwl_mvm_vif_link_info *link_info =
+                       scan_vif->link[mvm->scan_link_id];
+
+               if (!WARN_ON(!link_info))
+                       memcpy(info.tsf_bssid, link_info->bssid, ETH_ALEN);
 
-               memcpy(info.tsf_bssid, mvm->scan_vif->deflink.bssid, ETH_ALEN);
                ieee80211_scan_completed(mvm->hw, &info);
                mvm->scan_vif = NULL;
                cancel_delayed_work(&mvm->scan_timeout_dwork);