Răsfoiți Sursa

qcacmn: Add host fixes for 11be eMLSR mode

Add following fixes for STA to support and operate in
eMLSR mode
1) Update and send eMLSR cap flag to FW even in vdev start
request on both links.
2) Copy EML caps to wmi peer assoc mlo params to send it
to FW.

Change-Id: Ic17b9b82809659d7a4392c09eceecae7c53b2049
CRs-Fixed: 3237737
Gururaj Pandurangi 3 ani în urmă
părinte
comite
a57b8d20e4

+ 6 - 0
umac/mlme/vdev_mgr/core/src/vdev_mgr_ops.c

@@ -325,6 +325,12 @@ vdev_mgr_start_param_update_mlo(struct vdev_mlme_obj *mlme_obj,
 	    !wlan_vdev_mlme_is_mlo_link_vdev(vdev))
 		param->mlo_flags.mlo_assoc_link = 1;
 
+	if ((wlan_vdev_mlme_get_opmode(vdev) == QDF_STA_MODE) &&
+	    wlan_vdev_mlme_cap_get(vdev, WLAN_VDEV_C_EMLSR_CAP)) {
+		param->mlo_flags.emlsr_support  = 1;
+		mlme_debug("eMLSR support=%d", param->mlo_flags.emlsr_support);
+	}
+
 	if (wlan_vdev_mlme_get_opmode(vdev) == QDF_SAP_MODE) {
 		vdev_mgr_start_param_update_mlo_mcast(vdev, param);
 		vdev_mgr_start_param_update_mlo_partner(vdev, param);

+ 3 - 1
umac/mlme/vdev_mgr/dispatcher/inc/wlan_vdev_mgr_tgt_if_tx_defs.h

@@ -566,12 +566,14 @@ struct vdev_scan_nac_rssi_params {
  * @mlo_assoc_link: indicate is the link used to initialize
  *                  the association of mlo connection
  * @mlo_mcast_vdev: MLO cast vdev
+ * @emlsr_support: indicate non AP MLD STA supports eMLSR mode
  */
 struct mlo_vdev_start_flags {
 	uint32_t mlo_enabled:1,
 		 mlo_assoc_link:1,
 		 mlo_mcast_vdev:1,
-		 rsvd:29;
+		 emlsr_support:1,
+		 rsvd:28;
 };
 
 /**

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

@@ -543,6 +543,16 @@ struct wlan_mlo_peer_t2lm_policy {
 };
 #endif /* WLAN_FEATURE_11BE */
 
+/**
+ * struct wlan_mlo_peer_eml_caps - peer EML capabilities
+ * @emlsr_support: eMLSR Support
+ * @transition_timeout: Transition Timeout
+ */
+struct wlan_mlo_peer_eml_caps {
+	bool emlsr_support;
+	uint16_t transition_timeout;
+};
+
 /*
  * struct wlan_mlo_peer_context - MLO peer context
  *
@@ -593,6 +603,7 @@ struct wlan_mlo_peer_context {
 #ifdef WLAN_FEATURE_11BE
 	struct wlan_mlo_peer_t2lm_policy t2lm_policy;
 #endif
+	struct wlan_mlo_peer_eml_caps eml_caps;
 };
 
 /*

+ 9 - 0
wmi/src/wmi_unified_11be_tlv.c

@@ -101,6 +101,8 @@ uint8_t *vdev_start_add_mlo_params(uint8_t *buf_ptr,
 				  req->mlo_flags.mlo_enabled);
 	WMI_MLO_FLAGS_SET_ASSOC_LINK(mlo_params->mlo_flags.mlo_flags,
 				     req->mlo_flags.mlo_assoc_link);
+	WMI_MLO_FLAGS_SET_EMLSR_SUPPORT(mlo_params->mlo_flags.emlsr_support,
+					req->mlo_flags.emlsr_support);
 
 	vdev_start_add_mlo_mcast_params(&mlo_params->mlo_flags.mlo_flags,
 					req);
@@ -243,6 +245,9 @@ uint8_t *peer_assoc_add_mlo_params(uint8_t *buf_ptr,
 					   req->mlo_params.mlo_logical_link_index_valid);
 	WMI_MLO_FLAGS_SET_PEER_ID_VALID(mlo_params->mlo_flags.mlo_flags,
 					req->mlo_params.mlo_peer_id_valid);
+	WMI_MLO_FLAGS_SET_EMLSR_SUPPORT(mlo_params->mlo_flags.emlsr_support,
+					req->mlo_params.emlsr_support);
+
 	mlo_params->mlo_flags.mlo_force_link_inactive =
 			req->mlo_params.mlo_force_link_inactive;
 
@@ -251,6 +256,10 @@ uint8_t *peer_assoc_add_mlo_params(uint8_t *buf_ptr,
 	mlo_params->logical_link_index = req->mlo_params.logical_link_index;
 	mlo_params->mld_peer_id = req->mlo_params.ml_peer_id;
 
+	mlo_params->ieee_link_id = req->mlo_params.ieee_link_id;
+	mlo_params->emlsr_trans_timeout_us =
+			req->mlo_params.emlsr_trans_timeout;
+
 	return buf_ptr + sizeof(wmi_peer_assoc_mlo_params);
 }