瀏覽代碼

qcacld-3.0: Add new API to extract link ID for all MLO modes

Currently, Host populates link IDs per link and sends it to FW
in case of EMLSR mode. Add new API to exclusively extract link
ID per vdev and share with FW via peer assoc command and hence
extend this logic across all MLO modes.

Change-Id: I270f3a54ee806bdcf1a2713f5a569d3a52743954
CRs-Fixed: 3300101
Gururaj Pandurangi 2 年之前
父節點
當前提交
6864e1582c

+ 1 - 0
core/mac/src/pe/lim/lim_assoc_utils.c

@@ -3948,6 +3948,7 @@ QDF_STATUS lim_sta_send_add_bss(struct mac_context *mac, tpSirAssocRsp pAssocRsp
 		}
 	}
 
+	lim_extract_per_link_id(pe_session, pAddBssParams, pAssocRsp);
 	lim_intersect_ap_emlsr_caps(mac, pe_session, pAddBssParams, pAssocRsp);
 	lim_extract_msd_caps(mac, pe_session, pAddBssParams, pAssocRsp);
 

+ 19 - 6
core/mac/src/pe/lim/lim_utils.c

@@ -8963,6 +8963,23 @@ void lim_update_stads_eht_bw_320mhz(struct pe_session *session,
 #endif
 
 #ifdef WLAN_FEATURE_11BE_MLO
+void lim_extract_per_link_id(struct pe_session *session,
+			     struct bss_params *add_bss,
+			     tpSirAssocRsp assoc_rsp)
+{
+	uint8_t vdev_id = wlan_vdev_get_id(session->vdev);
+
+	if (!wlan_vdev_mlme_is_mlo_link_vdev(session->vdev) &&
+	    assoc_rsp->mlo_ie.mlo_ie.link_id_info_present)
+		add_bss->staContext.link_id =
+				assoc_rsp->mlo_ie.mlo_ie.link_id;
+	else
+		add_bss->staContext.link_id =
+				wlan_vdev_get_link_id(session->vdev);
+
+	pe_debug("vdev: %d, link id: %d", vdev_id, add_bss->staContext.link_id);
+}
+
 void lim_intersect_ap_emlsr_caps(struct mac_context *mac_ctx,
 				 struct pe_session *session,
 				 struct bss_params *add_bss,
@@ -8996,14 +9013,10 @@ void lim_intersect_ap_emlsr_caps(struct mac_context *mac_ctx,
 				mlo_peer_ctx->mlpeer_emlcap.emlsr_supp;
 		add_bss->staContext.emlsr_trans_timeout =
 				mlo_peer_ctx->mlpeer_emlcap.trans_timeout;
-		add_bss->staContext.link_id =
-				wlan_vdev_get_link_id(session->vdev);
 	} else {
 		add_bss->staContext.emlsr_support = true;
 		add_bss->staContext.emlsr_trans_timeout =
 			assoc_rsp->mlo_ie.mlo_ie.eml_capabilities_info.transition_timeout;
-		add_bss->staContext.link_id =
-				assoc_rsp->mlo_ie.mlo_ie.link_id;
 
 		mlo_peer_ctx->mlpeer_emlcap.emlsr_supp =
 				add_bss->staContext.emlsr_support;
@@ -9012,8 +9025,8 @@ void lim_intersect_ap_emlsr_caps(struct mac_context *mac_ctx,
 	}
 
 	wlan_objmgr_peer_release_ref(peer, WLAN_LEGACY_MAC_ID);
-	pe_debug("emlsr support: %d, link id: %d, transition timeout:%d",
-		 add_bss->staContext.emlsr_support, add_bss->staContext.link_id,
+	pe_debug("emlsr support: %d, transition timeout:%d",
+		 add_bss->staContext.emlsr_support,
 		 add_bss->staContext.emlsr_trans_timeout);
 }
 

+ 20 - 1
core/mac/src/pe/lim/lim_utils.h

@@ -2254,7 +2254,19 @@ lim_is_session_chwidth_320mhz(struct pe_session *session)
 
 #ifdef WLAN_FEATURE_11BE_MLO
 /**
- * lim_intersect_ap_emlsr_caps() - Intersect AP and self STA EHT capabilities
+ * lim_extract_per_link_id() - Extract Link ID per vdev and share with FW
+ * @session: pointer to PE session
+ * @add_bss: pointer to ADD BSS params
+ * @assoc_rsp: pointer to assoc response
+ *
+ * Return: None
+ */
+void lim_extract_per_link_id(struct pe_session *session,
+			     struct bss_params *add_bss,
+			     tpSirAssocRsp assoc_rsp);
+
+/**
+ * lim_intersect_ap_emlsr_caps() - Intersect AP and self STA EML capabilities
  * @mac_ctx: Global MAC context
  * @session: pointer to PE session
  * @add_bss: pointer to ADD BSS params
@@ -2282,6 +2294,13 @@ void lim_extract_msd_caps(struct mac_context *mac_ctx,
 			  struct bss_params *add_bss,
 			  tpSirAssocRsp assoc_rsp);
 #else
+static inline void
+lim_extract_per_link_id(struct pe_session *session,
+			struct bss_params *add_bss,
+			tpSirAssocRsp assoc_rsp)
+{
+}
+
 static inline void
 lim_intersect_ap_emlsr_caps(struct mac_context *mac_ctx,
 			    struct pe_session *session,

+ 4 - 0
core/wma/inc/wma_if.h

@@ -185,6 +185,10 @@ struct med_sync_delay {
  * @eht_op: EHT operation
  * @mld_mac_addr: mld mac address
  * @is_assoc_peer: is assoc peer or not
+ * @emlsr_support: is EMLSR mode supported or not
+ * @msd_caps_present: is MSD capability present in MLO IE or not
+ * @link_id: per link id
+ * @emlsr_trans_timeout: EMLSR transition timeout value
  *
  * This structure contains parameter required for
  * add sta request of upper layer.

+ 1 - 1
core/wma/src/wma_mgmt.c

@@ -1380,8 +1380,8 @@ static void wma_set_mlo_capability(tp_wma_handle wma,
 			  QDF_MAC_ADDR_REF(peer->mldaddr),
 			  req->mlo_params.mlo_force_link_inactive);
 		req->mlo_params.emlsr_support = params->emlsr_support;
+		req->mlo_params.ieee_link_id = params->link_id;
 		if (req->mlo_params.emlsr_support) {
-			req->mlo_params.ieee_link_id = params->link_id;
 			req->mlo_params.trans_timeout_us =
 					params->emlsr_trans_timeout;
 		}