Forráskód Böngészése

qcacmn: Get all the vdev's of mld

Get all the vdev of a ml device

Change-Id: Ie25304c00eed69b479bac552c8923144bf4cd41f
CRs-Fixed: 3250832
Veerendranath Jakkam 2 éve
szülő
commit
2e5ddc9546

+ 18 - 0
umac/mlo_mgr/inc/wlan_mlo_mgr_sta.h

@@ -481,6 +481,17 @@ bool mlo_is_sta_csa_param_handled(struct wlan_objmgr_vdev *vdev,
  * Return: none
  */
 void mlo_internal_disconnect_links(struct wlan_objmgr_vdev *vdev);
+
+/**
+ * mlo_sta_get_vdev_list() - get mlo vdev list
+ * @vdev: vdev pointer
+ * @vdev_count: vdev count
+ * @wlan_vdev_list: vdev list
+ *
+ * Return: None
+ */
+void mlo_sta_get_vdev_list(struct wlan_objmgr_vdev *vdev, uint16_t *vdev_count,
+			   struct wlan_objmgr_vdev **wlan_vdev_list);
 #else
 static inline
 QDF_STATUS mlo_connect(struct wlan_objmgr_vdev *vdev,
@@ -607,5 +618,12 @@ mlo_is_sta_csa_param_handled(struct wlan_objmgr_vdev *vdev,
 static inline void mlo_internal_disconnect_links(struct wlan_objmgr_vdev *vdev)
 {
 }
+
+static inline
+void mlo_sta_get_vdev_list(struct wlan_objmgr_vdev *vdev,
+			   uint16_t *vdev_count,
+			   struct wlan_objmgr_vdev **wlan_vdev_list)
+{
+}
 #endif
 #endif

+ 34 - 0
umac/mlo_mgr/src/wlan_mlo_mgr_sta.c

@@ -1768,4 +1768,38 @@ void mlo_internal_disconnect_links(struct wlan_objmgr_vdev *vdev)
 
 	mlo_dev_lock_release(mlo_dev_ctx);
 }
+
+void mlo_sta_get_vdev_list(struct wlan_objmgr_vdev *vdev, uint16_t *vdev_count,
+			   struct wlan_objmgr_vdev **wlan_vdev_list)
+{
+	struct wlan_mlo_dev_context *dev_ctx;
+	int i;
+	QDF_STATUS status;
+
+	*vdev_count = 0;
+
+	if (!vdev || !vdev->mlo_dev_ctx) {
+		mlo_err("Invalid input");
+		return;
+	}
+
+	dev_ctx = vdev->mlo_dev_ctx;
+
+	mlo_dev_lock_acquire(dev_ctx);
+	*vdev_count = 0;
+	for (i = 0; i < QDF_ARRAY_SIZE(dev_ctx->wlan_vdev_list); i++) {
+		if (dev_ctx->wlan_vdev_list[i]) {
+			status =
+			wlan_objmgr_vdev_try_get_ref(dev_ctx->wlan_vdev_list[i],
+						     WLAN_MLO_MGR_ID);
+			if (QDF_IS_STATUS_ERROR(status))
+				break;
+			wlan_vdev_list[*vdev_count] =
+				dev_ctx->wlan_vdev_list[i];
+			(*vdev_count) += 1;
+		}
+	}
+	mlo_dev_lock_release(dev_ctx);
+}
+
 #endif