Parcourir la source

qcacmn: Add function declaration to a T2LM API

- To invoke the API wlan_send_tid_to_link_mapping from other
files, change its static definition and add a function
declaration.
- Remove repetitive logging of T2LM params in
wlan_mlo_parse_t2lm_info API.
- HMT STA host needs to send T2LM mapping info to FW only
on one peer instead of both peers in case of WKK.
Thus, add new API under MCC flag to address this issue.
The original changes will remain under else case.

Change-Id: I2495fddca7dc5da253a6d10ab41b70cf7f627156
CRs-Fixed: 3373326
Gururaj Pandurangi il y a 2 ans
Parent
commit
880ee4dd1a
2 fichiers modifiés avec 72 ajouts et 23 suppressions
  1. 18 0
      umac/mlo_mgr/inc/wlan_mlo_t2lm.h
  2. 54 23
      umac/mlo_mgr/src/wlan_mlo_t2lm.c

+ 18 - 0
umac/mlo_mgr/inc/wlan_mlo_t2lm.h

@@ -594,6 +594,17 @@ QDF_STATUS wlan_process_bcn_prbrsp_t2lm_ie(struct wlan_objmgr_vdev *vdev,
 					   struct wlan_t2lm_context *rx_t2lm_ie,
 					   uint64_t tsf);
 
+/**
+ * wlan_send_tid_to_link_mapping() - API to send T2LM info received from beacon,
+ * probe response or action frame to FW.
+ *
+ * @vdev: Pointer to vdev
+ * @t2lm: T2LM info
+ *
+ * Return QDF_STATUS
+ */
+QDF_STATUS wlan_send_tid_to_link_mapping(struct wlan_objmgr_vdev *vdev,
+					 struct wlan_t2lm_info *t2lm);
 #else
 static inline QDF_STATUS wlan_mlo_parse_t2lm_ie(
 	struct wlan_t2lm_onging_negotiation_info *t2lm, uint8_t *ie)
@@ -709,5 +720,12 @@ static inline QDF_STATUS wlan_mlo_dev_t2lm_notify_link_update(
 {
 	return QDF_STATUS_SUCCESS;
 }
+
+static inline
+QDF_STATUS wlan_send_tid_to_link_mapping(struct wlan_objmgr_vdev *vdev,
+					 struct wlan_t2lm_info *t2lm)
+{
+	return QDF_STATUS_SUCCESS;
+}
 #endif /* WLAN_FEATURE_11BE */
 #endif /* _WLAN_MLO_T2LM_H_ */

+ 54 - 23
umac/mlo_mgr/src/wlan_mlo_t2lm.c

@@ -100,8 +100,7 @@ QDF_STATUS wlan_mlo_parse_t2lm_info(uint8_t *ie,
 		ie_ptr += WLAN_T2LM_EXPECTED_DURATION_SIZE * (sizeof(uint8_t));
 	}
 
-	t2lm_debug("direction:%d default_link_mapping:%d mapping_switch_time:%d expected_duration:%d",
-		   t2lm->direction, t2lm->default_link_mapping,
+	t2lm_debug("mapping_switch_time:%d expected_duration:%d",
 		   t2lm->mapping_switch_time, t2lm->expected_duration);
 
 	if (t2lm->default_link_mapping)
@@ -715,34 +714,36 @@ QDF_STATUS wlan_mlo_vdev_tid_to_link_map_event(
 	return QDF_STATUS_SUCCESS;
 }
 
+#ifdef WLAN_FEATURE_11BE_MLO_ADV_FEATURE
 static
-QDF_STATUS wlan_send_tid_to_link_mapping(struct wlan_objmgr_vdev *vdev,
-					 struct wlan_t2lm_info *t2lm)
+QDF_STATUS wlan_send_t2lm_info(struct wlan_objmgr_vdev *vdev,
+			       struct wlan_t2lm_info *t2lm,
+			       struct wlan_lmac_if_mlo_tx_ops *mlo_tx_ops)
 {
-	struct wlan_lmac_if_mlo_tx_ops *mlo_tx_ops;
-	struct wlan_objmgr_vdev *co_mld_vdev;
-	struct wlan_objmgr_psoc *psoc;
-	struct wlan_objmgr_vdev *wlan_vdev_list[WLAN_UMAC_MLO_MAX_VDEVS] = {NULL};
-	uint16_t vdev_count = 0;
-	int i = 0;
 	QDF_STATUS status = QDF_STATUS_E_FAILURE;
 
-	psoc = wlan_vdev_get_psoc(vdev);
-	if (!psoc) {
-		t2lm_err("null psoc");
-		return QDF_STATUS_E_NULL_VALUE;
+	if (!wlan_vdev_mlme_is_mlo_vdev(vdev)) {
+		t2lm_err("vdev is not MLO vdev");
+		return status;
 	}
 
-	mlo_tx_ops = &psoc->soc_cb.tx_ops->mlo_ops;
-	if (!mlo_tx_ops) {
-		t2lm_err("tx_ops is null!");
-		return QDF_STATUS_E_NULL_VALUE;
-	}
+	status = mlo_tx_ops->send_tid_to_link_mapping(vdev, t2lm);
+	if (QDF_IS_STATUS_ERROR(status))
+		t2lm_err("Failed to send T2LM command to FW");
 
-	if (!mlo_tx_ops->send_tid_to_link_mapping) {
-		t2lm_err("send_tid_to_link_mapping is null");
-		return QDF_STATUS_E_NULL_VALUE;
-	}
+	return status;
+}
+#else
+static
+QDF_STATUS wlan_send_t2lm_info(struct wlan_objmgr_vdev *vdev,
+			       struct wlan_t2lm_info *t2lm,
+			       struct wlan_lmac_if_mlo_tx_ops *mlo_tx_ops)
+{
+	struct wlan_objmgr_vdev *co_mld_vdev;
+	struct wlan_objmgr_vdev *wlan_vdev_list[WLAN_UMAC_MLO_MAX_VDEVS];
+	uint16_t vdev_count = 0;
+	int i = 0;
+	QDF_STATUS status = QDF_STATUS_E_FAILURE;
 
 	mlo_get_ml_vdev_list(vdev, &vdev_count, wlan_vdev_list);
 	if (!vdev_count) {
@@ -767,6 +768,36 @@ QDF_STATUS wlan_send_tid_to_link_mapping(struct wlan_objmgr_vdev *vdev,
 
 	return status;
 }
+#endif
+
+QDF_STATUS wlan_send_tid_to_link_mapping(struct wlan_objmgr_vdev *vdev,
+					 struct wlan_t2lm_info *t2lm)
+{
+	struct wlan_lmac_if_mlo_tx_ops *mlo_tx_ops;
+	struct wlan_objmgr_psoc *psoc;
+	QDF_STATUS status = QDF_STATUS_E_FAILURE;
+
+	psoc = wlan_vdev_get_psoc(vdev);
+	if (!psoc) {
+		t2lm_err("null psoc");
+		return QDF_STATUS_E_NULL_VALUE;
+	}
+
+	mlo_tx_ops = &psoc->soc_cb.tx_ops->mlo_ops;
+	if (!mlo_tx_ops) {
+		t2lm_err("tx_ops is null!");
+		return QDF_STATUS_E_NULL_VALUE;
+	}
+
+	if (!mlo_tx_ops->send_tid_to_link_mapping) {
+		t2lm_err("send_tid_to_link_mapping is null");
+		return QDF_STATUS_E_NULL_VALUE;
+	}
+
+	status = wlan_send_t2lm_info(vdev, t2lm, mlo_tx_ops);
+
+	return status;
+}
 
 void wlan_mlo_t2lm_timer_expiry_handler(void *vdev)
 {