ソースを参照

qcacmn: Add new wrapper API to send peer-level T2LM

Add a new wrapper API to send peer-level negotiated
tid-to-link mapping to FW as the existing API to send
the mapping received from the beacon/probe response
uses ML dev context whereas the new API uses ML peer
context.

Change-Id: Ifada5600e9524585c69847f332ed0280fd316813
CRs-Fixed: 3423127
Gururaj Pandurangi 2 年 前
コミット
1958f62e8a
2 ファイル変更57 行追加0 行削除
  1. 21 0
      umac/mlo_mgr/inc/wlan_mlo_t2lm.h
  2. 36 0
      umac/mlo_mgr/src/wlan_mlo_t2lm.c

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

@@ -720,6 +720,20 @@ QDF_STATUS wlan_send_tid_to_link_mapping(struct wlan_objmgr_vdev *vdev,
  */
 QDF_STATUS wlan_get_t2lm_mapping_status(struct wlan_objmgr_vdev *vdev,
 					struct wlan_t2lm_info *t2lm);
+
+/**
+ * wlan_send_peer_level_tid_to_link_mapping() - API to send peer level T2LM info
+ * negotiated using action frames to FW.
+ *
+ * @vdev: Pointer to vdev
+ * @peer: pointer to peer
+ *
+ * Return QDF_STATUS
+ */
+QDF_STATUS
+wlan_send_peer_level_tid_to_link_mapping(struct wlan_objmgr_vdev *vdev,
+					 struct wlan_objmgr_peer *peer);
+
 #else
 static inline QDF_STATUS wlan_mlo_parse_t2lm_ie(
 	struct wlan_t2lm_onging_negotiation_info *t2lm, uint8_t *ie)
@@ -842,5 +856,12 @@ QDF_STATUS wlan_send_tid_to_link_mapping(struct wlan_objmgr_vdev *vdev,
 {
 	return QDF_STATUS_SUCCESS;
 }
+
+static inline QDF_STATUS
+wlan_send_peer_level_tid_to_link_mapping(struct wlan_objmgr_vdev *vdev,
+					 struct wlan_objmgr_peer *peer)
+{
+	return QDF_STATUS_SUCCESS;
+}
 #endif /* WLAN_FEATURE_11BE */
 #endif /* _WLAN_MLO_T2LM_H_ */

+ 36 - 0
umac/mlo_mgr/src/wlan_mlo_t2lm.c

@@ -926,6 +926,42 @@ peer_release:
 	return status;
 }
 
+QDF_STATUS
+wlan_send_peer_level_tid_to_link_mapping(struct wlan_objmgr_vdev *vdev,
+					 struct wlan_objmgr_peer *peer)
+{
+	uint8_t dir, idx = 0;
+	struct wlan_mlo_peer_context *ml_peer;
+	struct wlan_t2lm_info *t2lm_info;
+	QDF_STATUS status = QDF_STATUS_E_NULL_VALUE;
+
+	if (!peer) {
+		t2lm_err("peer is null");
+		return status;
+	}
+
+	ml_peer = peer->mlo_peer_ctx;
+	if (!ml_peer) {
+		t2lm_err("ml peer is null");
+		return status;
+	}
+
+	for (dir = 0; dir < WLAN_T2LM_MAX_DIRECTION; dir++) {
+		t2lm_info = &ml_peer->t2lm_policy.t2lm_negotiated_info.t2lm_info[dir];
+		if (t2lm_info && t2lm_info->direction !=
+		    WLAN_T2LM_INVALID_DIRECTION) {
+			t2lm_debug("send peer-level mapping to FW for dir: %d", dir);
+			status = wlan_send_tid_to_link_mapping(vdev, t2lm_info);
+			idx++;
+		}
+	}
+
+	if (!idx)
+		t2lm_debug("No peer-level mapping present");
+
+	return status;
+}
+
 void wlan_mlo_t2lm_timer_expiry_handler(void *vdev)
 {
 	struct wlan_objmgr_vdev *vdev_ctx = (struct wlan_objmgr_vdev *)vdev;