Jelajahi Sumber

qcacmn: Add bridge sta link id

Store linkid used by vdev in bridge sta ctx

CRs-Fixed: 3562149
Change-Id: Ib6550b65abfaae71c7f021640fa3f93bc1ad967c
Uraj Sasan 2 tahun lalu
induk
melakukan
329a080940

+ 2 - 0
umac/mlo_mgr/inc/wlan_mlo_mgr_public_structs.h

@@ -632,11 +632,13 @@ struct wlan_mlo_dev_context {
 /**
  * struct wlan_mlo_bridge_sta - MLO bridge sta context
  * @bridge_umac_id: umac id for bridge
+ * @bridge_link_id: link id used by bridge vdev
  * @is_force_central_primary: Flag to tell if bridge should be primary umac
  * @bridge_vap_exists: If there is bridge vap
  */
 struct wlan_mlo_bridge_sta {
 	uint8_t bridge_umac_id;
+	uint8_t bridge_link_id;
 	bool is_force_central_primary;
 	bool bridge_vap_exists;
 };

+ 6 - 0
umac/mlo_mgr/src/wlan_mlo_mgr_primary_umac.c

@@ -591,6 +591,7 @@ QDF_STATUS mlo_check_topology(struct wlan_objmgr_pdev *pdev,
 	uint8_t bridge_umac;
 	uint8_t adjacent = -1;
 	uint8_t max_soc;
+	uint8_t link_id;
 	bool is_mlo_vdev;
 
 	if (!ml_dev)
@@ -641,11 +642,13 @@ QDF_STATUS mlo_check_topology(struct wlan_objmgr_pdev *pdev,
 		/* Check if the primary umac and assoc links are same for 3 link sta*/
 		if (idx == WLAN_UMAC_MLO_MAX_PSOC_TOPOLOGY) {
 			bridge_umac = mlo_get_central_umac_id(psoc_ids);
+
 			tmp_vdev = mlo_get_link_vdev_from_psoc_id(ml_dev, bridge_umac);
 
 			if (!tmp_vdev)
 				return QDF_STATUS_E_FAILURE;
 
+			link_id = tmp_vdev->vdev_mlme.mlo_link_id;
 			if (bridge_umac != -1) {
 				if (wlan_vdev_get_psoc_id(vdev) != bridge_umac) {
 					mlo_err("Central LINK %d Force central as primary umac!! ",
@@ -653,6 +656,7 @@ QDF_STATUS mlo_check_topology(struct wlan_objmgr_pdev *pdev,
 					tmp_vdev->vdev_objmgr.mlo_central_vdev = true;
 					ml_dev->bridge_sta_ctx->is_force_central_primary = true;
 					ml_dev->bridge_sta_ctx->bridge_umac_id = bridge_umac;
+					ml_dev->bridge_sta_ctx->bridge_link_id = link_id;
 					wlan_objmgr_vdev_release_ref(tmp_vdev, WLAN_MLO_MGR_ID);
 					return QDF_STATUS_SUCCESS;
 				}
@@ -669,6 +673,7 @@ QDF_STATUS mlo_check_topology(struct wlan_objmgr_pdev *pdev,
 			if (!tmp_vdev)
 				return QDF_STATUS_E_FAILURE;
 
+			link_id = tmp_vdev->vdev_mlme.mlo_link_id;
 			if (bridge_umac != -1) {
 				if (wlan_vdev_get_psoc_id(vdev) != bridge_umac) {
 					is_mlo_vdev = wlan_vdev_mlme_is_mlo_vdev(tmp_vdev);
@@ -682,6 +687,7 @@ QDF_STATUS mlo_check_topology(struct wlan_objmgr_pdev *pdev,
 						ml_dev->bridge_sta_ctx->is_force_central_primary = true;
 						ml_dev->bridge_sta_ctx->bridge_umac_id = bridge_umac;
 						ml_dev->bridge_sta_ctx->bridge_vap_exists = true;
+						ml_dev->bridge_sta_ctx->bridge_link_id = link_id;
 					}
 				}
 			}

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

@@ -35,6 +35,7 @@
 #include <wlan_objmgr_peer_obj.h>
 #include <wlan_scan_api.h>
 #include <wlan_mlo_mgr_peer.h>
+#include <qdf_module.h>
 
 #ifdef WLAN_FEATURE_11BE_MLO
 static QDF_STATUS mlo_disconnect_req(struct wlan_objmgr_vdev *vdev,
@@ -1596,6 +1597,7 @@ bool mlo_is_mld_sta(struct wlan_objmgr_vdev *vdev)
 	return false;
 }
 
+qdf_export_symbol(mlo_is_mld_sta);
 #ifndef WLAN_FEATURE_11BE_MLO_ADV_FEATURE
 struct wlan_objmgr_vdev *
 mlo_get_ml_vdev_by_mac(struct wlan_objmgr_vdev *vdev,