Эх сурвалжийг харах

qcacmn: update the bridge vap in partner list

update the bridge vap in partner list

Change-Id: I232314d4a91768bc5bbade3285ab925dd834d03f
CRs-Fixed: 3550189
Sai Rupesh Chevuru 2 жил өмнө
parent
commit
2876ec5043

+ 25 - 1
umac/mlme/vdev_mgr/dispatcher/src/wlan_vdev_mgr_tgt_if_tx_api.c

@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2019-2021 The Linux Foundation. All rights reserved.
- * Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
  *
  * Permission to use, copy, modify, and/or distribute this software for
  * any purpose with or without fee is hereby granted, provided that the
@@ -55,12 +55,35 @@ wlan_vdev_mgr_fill_mlo_params(struct cdp_vdev_info *vdev_info,
 {
 	vdev_info->mld_mac_addr = param->mlo_mac;
 }
+
+#ifdef WLAN_MLO_MULTI_CHIP
+static inline void
+wlan_vdev_mgr_fill_mlo_bridge_vap_params(struct cdp_vdev_info *vdev_info,
+					 struct wlan_objmgr_vdev *vdev)
+{
+	vdev_info->is_bridge_vap = vdev->vdev_objmgr.mlo_bridge_vdev;
+}
+#else
+
+static inline void
+wlan_vdev_mgr_fill_mlo_bridge_vap_params(struct cdp_vdev_info *vdev_info,
+					 struct wlan_objmgr_vdev *vdev)
+{
+}
+#endif
+
 #else
 static inline void
 wlan_vdev_mgr_fill_mlo_params(struct cdp_vdev_info *vdev_info,
 			      struct vdev_create_params *param)
 {
 }
+
+static inline void
+wlan_vdev_mgr_fill_mlo_bridge_vap_params(struct cdp_vdev_info *vdev_info,
+					 struct wlan_objmgr_vdev *vdev)
+{
+}
 #endif
 
 QDF_STATUS tgt_vdev_mgr_create_send(
@@ -108,6 +131,7 @@ QDF_STATUS tgt_vdev_mgr_create_send(
 	vdev_info.op_mode = wlan_util_vdev_get_cdp_txrx_opmode(vdev);
 	vdev_info.subtype = wlan_util_vdev_get_cdp_txrx_subtype(vdev);
 	vdev_info.qdf_opmode = wlan_vdev_mlme_get_opmode(vdev);
+	wlan_vdev_mgr_fill_mlo_bridge_vap_params(&vdev_info, vdev);
 	wlan_vdev_mgr_fill_mlo_params(&vdev_info, param);
 	pdev = wlan_vdev_get_pdev(vdev);
 

+ 18 - 0
umac/mlo_mgr/src/wlan_mlo_mgr_ap.c

@@ -71,6 +71,24 @@ bool mlo_ap_vdev_attach(struct wlan_objmgr_vdev *vdev,
 			 wlan_vdev_get_id(vdev));
 	}
 
+	/* reset the vdev id list */
+	for (i = 0; i < WLAN_UMAC_MLO_MAX_VDEVS; i++)
+		pr_vdev_ids[i] = CDP_INVALID_VDEV_ID;
+
+	/* update the bridge vaps in partner list*/
+	for (i = 0; i < WLAN_UMAC_MLO_MAX_BRIDGE_VDEVS; i++) {
+		if (dev_ctx->wlan_bridge_vdev_list[i])
+			pr_vdev_ids[i] = wlan_vdev_get_id(
+					dev_ctx->wlan_bridge_vdev_list[i]);
+	}
+
+	if (cdp_update_mlo_ptnr_list(
+				wlan_psoc_get_dp_handle(psoc),
+				pr_vdev_ids, WLAN_UMAC_MLO_MAX_VDEVS,
+				wlan_vdev_get_id(vdev)) != QDF_STATUS_SUCCESS) {
+		mlo_debug("Failed to add vdev to partner vdev list, vdev id:%d",
+			  wlan_vdev_get_id(vdev));
+	}
 	return true;
 }
 #else