Browse Source

qcacmn: Add API to get ML vdev list

Add API to get ML vdev list

Change-Id: Ie4a001dc5b1906f2236f54335e3867727fd25e02
Himanshu Batra 3 years ago
parent
commit
dff5855dd9
2 changed files with 48 additions and 0 deletions
  1. 13 0
      umac/mlo_mgr/inc/wlan_mlo_mgr_cmn.h
  2. 35 0
      umac/mlo_mgr/src/wlan_mlo_mgr_cmn.c

+ 13 - 0
umac/mlo_mgr/inc/wlan_mlo_mgr_cmn.h

@@ -219,6 +219,19 @@ void mlo_mlme_peer_assoc_resp(struct wlan_objmgr_peer *peer);
 uint8_t mlo_get_link_vdev_ix(struct wlan_mlo_dev_context *mldev,
 uint8_t mlo_get_link_vdev_ix(struct wlan_mlo_dev_context *mldev,
 			     struct wlan_objmgr_vdev *vdev);
 			     struct wlan_objmgr_vdev *vdev);
 
 
+/**
+ * mlo_get_ml_vdev_list() - get mlo vdev list
+ * @vdev: vdev pointer
+ * @vdev_count: vdev count
+ * @wlan_vdev_list: vdev list
+ *
+ * Caller should release ref of the vdevs in wlan_vdev_list
+ * Return: None
+ */
+void mlo_get_ml_vdev_list(struct wlan_objmgr_vdev *vdev,
+			  uint16_t *vdev_count,
+			  struct wlan_objmgr_vdev **wlan_vdev_list);
+
 #define INVALID_HW_LINK_ID 0xFFFF
 #define INVALID_HW_LINK_ID 0xFFFF
 #ifdef WLAN_MLO_MULTI_CHIP
 #ifdef WLAN_MLO_MULTI_CHIP
 /**
 /**

+ 35 - 0
umac/mlo_mgr/src/wlan_mlo_mgr_cmn.c

@@ -273,4 +273,39 @@ wlan_mlo_get_pdev_by_hw_link_id(uint16_t hw_link_id,
 
 
 	return itr.pdev;
 	return itr.pdev;
 }
 }
+
+void mlo_get_ml_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] &&
+		    wlan_vdev_mlme_is_mlo_vdev(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 /*WLAN_MLO_MULTI_CHIP*/
 #endif /*WLAN_MLO_MULTI_CHIP*/