Переглянути джерело

qcacmn: Set non assoc link as primary netdev

Make provisions to explicitly set non assoc link as primary netdev for an
MLO association.

CRs-Fixed: 3508341
Change-Id: Iaef4eff6ac309f278a18f8ceee2ffb6c4ad604b6
Krunalsinh Padhar 2 роки тому
батько
коміт
7ad8b35c78

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

@@ -205,6 +205,7 @@ struct mlo_state_params {
  * @msgq_ctx: Context switch mgr
  * @mlo_is_force_primary_umac: Force Primary UMAC enable
  * @mlo_forced_primary_umac_id: Force Primary UMAC ID
+ * @force_non_assoc_prim_umac: Force non-assoc link to be primary umac
  *
  * NB: not using kernel-doc format since the kernel-doc script doesn't
  *     handle the qdf_bitmap() macro
@@ -231,6 +232,7 @@ struct mlo_mgr_context {
 	struct ctxt_switch_mgr *msgq_ctx;
 	bool mlo_is_force_primary_umac;
 	uint8_t mlo_forced_primary_umac_id;
+	bool force_non_assoc_prim_umac;
 };
 
 /*

+ 1 - 0
umac/mlo_mgr/src/wlan_mlo_mgr_main.c

@@ -77,6 +77,7 @@ static void mlo_global_ctx_init(void)
 	ml_link_lock_create(mlo_mgr_ctx);
 	ml_aid_lock_create(mlo_mgr_ctx);
 	mlo_mgr_ctx->mlo_is_force_primary_umac = 0;
+	mlo_mgr_ctx->force_non_assoc_prim_umac = 0;
 	mlo_msgq_init();
 }
 

+ 24 - 2
umac/mlo_mgr/src/wlan_mlo_mgr_primary_umac.c

@@ -585,11 +585,33 @@ QDF_STATUS mlo_peer_allocate_primary_umac(
 	 * 1) for single link MLO connection
 	 * 2) if MLD is single chip MLO
 	 */
+	if ((mlo_ctx->force_non_assoc_prim_umac) &&
+	    (ml_peer->max_links >= 1)) {
+		for (i = 0; i < WLAN_UMAC_MLO_MAX_VDEVS; i++) {
+			if (!link_vdevs[i])
+				continue;
+
+			if (wlan_peer_get_vdev(assoc_peer) == link_vdevs[i])
+				continue;
+			psoc_id = wlan_vdev_get_psoc_id(link_vdevs[i]);
+			ml_peer->primary_umac_psoc_id = psoc_id;
+			break;
+		}
+
+		mlo_peer_assign_primary_umac(ml_peer, peer_entry);
+		mlo_info("MLD ID %d ML Peer " QDF_MAC_ADDR_FMT
+			 " primary umac soc %d ", ml_dev->mld_id,
+			 QDF_MAC_ADDR_REF(ml_peer->peer_mld_addr.bytes),
+			 ml_peer->primary_umac_psoc_id);
+
+		return QDF_STATUS_SUCCESS;
+	}
+
 	if ((ml_peer->max_links == 1) ||
 	    (mlo_vdevs_check_single_soc(link_vdevs, ml_peer->max_links))) {
 		mlo_peer_assign_primary_umac(ml_peer, peer_entry);
-		mlo_info("MLD ID %d Assoc peer " QDF_MAC_ADDR_FMT " primary umac soc %d ",
-			 ml_dev->mld_id,
+		mlo_info("MLD ID %d Assoc peer " QDF_MAC_ADDR_FMT
+			 " primary umac soc %d ", ml_dev->mld_id,
 			 QDF_MAC_ADDR_REF(ml_peer->peer_mld_addr.bytes),
 			 ml_peer->primary_umac_psoc_id);