Commit 94a2712f authored by Rameshkumar Sundaram's avatar Rameshkumar Sundaram Committed by Jeff Johnson
Browse files

wifi: ath12k: modify ath12k_get_arvif_iter() for MLO



Currently ath12k_get_arvif_iter() takes input ahvif's deflink to check if it
matches with given radio (ar) but in case MLO there could be multiple links
affiliated with ahvif, hence iterate through the links of the ahvif and find
the right arvif that belongs to the given radio.

Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0.1-00029-QCAHKSWPL_SILICONZ-1
Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0.c5-00481-QCAHMTSWPL_V1.0_V2.0_SILICONZ-3

Signed-off-by: default avatarRameshkumar Sundaram <quic_ramess@quicinc.com>
Signed-off-by: default avatarKalle Valo <quic_kvalo@quicinc.com>
Link: https://patch.msgid.link/20241015171416.518022-7-kvalo@kernel.org


Signed-off-by: default avatarJeff Johnson <quic_jjohnson@quicinc.com>
parent abaadb93
Loading
Loading
Loading
Loading
+15 −4
Original line number Diff line number Diff line
@@ -547,11 +547,22 @@ static void ath12k_get_arvif_iter(void *data, u8 *mac,
{
	struct ath12k_vif_iter *arvif_iter = data;
	struct ath12k_vif *ahvif = ath12k_vif_to_ahvif(vif);
	struct ath12k_link_vif *arvif = &ahvif->deflink;
	unsigned long links_map = ahvif->links_map;
	struct ath12k_link_vif *arvif;
	u8 link_id;

	for_each_set_bit(link_id, &links_map, IEEE80211_MLD_MAX_NUM_LINKS) {
		arvif = rcu_dereference(ahvif->link[link_id]);

		if (WARN_ON(!arvif))
			continue;

		if (arvif->vdev_id == arvif_iter->vdev_id &&
	    arvif->ar == arvif_iter->ar)
		    arvif->ar == arvif_iter->ar) {
			arvif_iter->arvif = arvif;
			break;
		}
	}
}

struct ath12k_link_vif *ath12k_mac_get_arvif(struct ath12k *ar, u32 vdev_id)