Просмотр исходного кода

qcacmn: Add pdev open handler for mgmt Rx REO

Add pdev open handler for management Rx reorder module.
This handler stores all the snapshot addresses to the pdev
private object of mgmt Rx REO module.

CRs-Fixed: 3111704
Change-Id: Iaf12b4edb568b2a32ff901ad5d0f0717b190906b
Edayilliam Jayadev 3 лет назад
Родитель
Сommit
4fb043fdff

+ 44 - 14
umac/cmn_services/mgmt_txrx/core/src/wlan_mgmt_txrx_rx_reo.c

@@ -4291,13 +4291,56 @@ wlan_mgmt_rx_reo_initialize_snapshot_params(
 	snapshot_params->global_timestamp = 0;
 }
 
+QDF_STATUS
+mgmt_rx_reo_pdev_obj_open_notification
+	(struct wlan_objmgr_pdev *pdev,
+	 struct mgmt_txrx_priv_pdev_context *mgmt_txrx_pdev_ctx)
+{
+	QDF_STATUS status;
+	enum mgmt_rx_reo_shared_snapshot_id snapshot_id;
+
+	if (!pdev) {
+		mgmt_rx_reo_err("pdev is null");
+		return QDF_STATUS_E_NULL_VALUE;
+	}
+
+	if (!mgmt_txrx_pdev_ctx) {
+		mgmt_rx_reo_err("Management txrx pdev context is null");
+		return QDF_STATUS_E_NULL_VALUE;
+	}
+
+	if (!wlan_mgmt_rx_reo_is_feature_enabled_at_pdev(pdev))
+		return QDF_STATUS_SUCCESS;
+
+	snapshot_id = 0;
+	while (snapshot_id < MGMT_RX_REO_SHARED_SNAPSHOT_MAX) {
+		struct mgmt_rx_reo_snapshot **snapshot_address;
+		struct mgmt_rx_reo_pdev_info *mgmt_rx_reo_pdev_ctx;
+
+		mgmt_rx_reo_pdev_ctx =
+				mgmt_txrx_pdev_ctx->mgmt_rx_reo_pdev_ctx;
+		snapshot_address =
+			&mgmt_rx_reo_pdev_ctx->host_target_shared_snapshot[snapshot_id];
+		status = wlan_mgmt_rx_reo_get_snapshot_address
+					(pdev, snapshot_id, snapshot_address);
+		if (QDF_IS_STATUS_ERROR(status)) {
+			mgmt_rx_reo_err("Get snapshot address failed, id = %u",
+					snapshot_id);
+			return status;
+		}
+
+		snapshot_id++;
+	}
+
+	return QDF_STATUS_SUCCESS;
+}
+
 QDF_STATUS
 mgmt_rx_reo_pdev_obj_create_notification(
 	struct wlan_objmgr_pdev *pdev,
 	struct mgmt_txrx_priv_pdev_context *mgmt_txrx_pdev_ctx)
 {
 	QDF_STATUS status;
-	QDF_STATUS temp_status;
 	struct mgmt_rx_reo_pdev_info *mgmt_rx_reo_pdev_ctx = NULL;
 	enum mgmt_rx_reo_shared_snapshot_id snapshot_id;
 
@@ -4327,19 +4370,6 @@ mgmt_rx_reo_pdev_obj_create_notification(
 
 	snapshot_id = 0;
 	while (snapshot_id < MGMT_RX_REO_SHARED_SNAPSHOT_MAX) {
-		struct mgmt_rx_reo_snapshot **snapshot_address;
-
-		snapshot_address = &mgmt_rx_reo_pdev_ctx->
-				host_target_shared_snapshot[snapshot_id];
-		temp_status = wlan_mgmt_rx_reo_get_snapshot_address(
-				pdev, snapshot_id, snapshot_address);
-		if (QDF_IS_STATUS_ERROR(temp_status)) {
-			mgmt_rx_reo_err("Get snapshot address failed, id = %u",
-					snapshot_id);
-			status = temp_status;
-			goto failure;
-		}
-
 		wlan_mgmt_rx_reo_initialize_snapshot_params(
 				&mgmt_rx_reo_pdev_ctx->
 				last_valid_shared_snapshot[snapshot_id]);

+ 16 - 0
umac/cmn_services/mgmt_txrx/core/src/wlan_mgmt_txrx_rx_reo_i.h

@@ -94,6 +94,22 @@ struct mgmt_rx_reo_pdev_info {
 	struct mgmt_rx_reo_filter filter;
 };
 
+/**
+ * mgmt_rx_reo_pdev_obj_open_notification() - pdev open handler for
+ * management rx-reorder module
+ * @pdev: pointer to pdev object
+ * @mgmt_txrx_pdev_ctx: pdev private object of mgmt txrx module
+ *
+ * This function gets called from object manager when pdev is being opened and
+ * creates management rx-reorder pdev context
+ *
+ * Return: QDF_STATUS
+ */
+QDF_STATUS
+mgmt_rx_reo_pdev_obj_open_notification
+		(struct wlan_objmgr_pdev *pdev,
+		 struct mgmt_txrx_priv_pdev_context *mgmt_txrx_pdev_ctx);
+
 /**
  * mgmt_rx_reo_pdev_obj_create_notification() - pdev create handler for
  * management rx-reorder module

+ 58 - 0
umac/cmn_services/mgmt_txrx/dispatcher/inc/wlan_mgmt_txrx_rx_reo_utils_api.h

@@ -224,6 +224,21 @@ wlan_mgmt_rx_reo_deinit(void);
 QDF_STATUS
 wlan_mgmt_rx_reo_validate_mlo_hw_link_info(struct wlan_objmgr_psoc *psoc);
 
+/**
+ * wlan_mgmt_rx_reo_pdev_obj_open_notification() - pdev open handler for
+ * management rx-reorder module
+ * @pdev: pointer to pdev object
+ * @mgmt_txrx_pdev_ctx: pdev private object of mgmt txrx module
+ *
+ * This function gets called from object manager when pdev is being opened and
+ * creates management rx-reorder pdev context
+ *
+ * Return: QDF_STATUS
+ */
+wlan_mgmt_rx_reo_pdev_obj_open_notification
+		(struct wlan_objmgr_pdev *pdev,
+		 struct mgmt_txrx_priv_pdev_context *mgmt_txrx_pdev_ctx);
+
 /**
  * wlan_mgmt_rx_reo_pdev_obj_create_notification() - pdev create handler for
  * management rx-reorder module
@@ -284,6 +299,30 @@ wlan_mgmt_rx_reo_is_feature_enabled_at_pdev(struct wlan_objmgr_pdev *pdev);
  */
 bool
 wlan_mgmt_rx_reo_is_simulation_in_progress(void);
+
+/**
+ * wlan_mgmt_rx_reo_print_ingress_frame_debug_info() - Helper API to print
+ * stats related to incoming management frames
+ *
+ * This API prints stats related to management frames entering management
+ * Rx reorder module.
+ *
+ * Return: QDF_STATUS
+ */
+QDF_STATUS
+wlan_mgmt_rx_reo_print_ingress_frame_debug_info(void);
+
+/**
+ * wlan_mgmt_rx_reo_print_egress_frame_debug_info() - Helper API to print
+ * stats related to outgoing management frames
+ *
+ * This API prints stats related to management frames exiting management
+ * Rx reorder module.
+ *
+ * Return: QDF_STATUS
+ */
+QDF_STATUS
+wlan_mgmt_rx_reo_print_egress_frame_debug_info(void);
 #else
 static inline QDF_STATUS
 wlan_mgmt_rx_reo_validate_mlo_hw_link_info(struct wlan_objmgr_psoc *psoc)
@@ -291,6 +330,25 @@ wlan_mgmt_rx_reo_validate_mlo_hw_link_info(struct wlan_objmgr_psoc *psoc)
 	return QDF_STATUS_SUCCESS;
 }
 
+/**
+ * wlan_mgmt_rx_reo_pdev_obj_open_notification() - pdev open handler for
+ * management rx-reorder feature
+ * @pdev: pointer to pdev object
+ * @mgmt_txrx_pdev_ctx: pdev private object of mgmt txrx module
+ *
+ * This function gets called from object manager when pdev is being opened and
+ * creates management rx-reorder pdev context
+ *
+ * Return: QDF_STATUS
+ */
+static inline QDF_STATUS
+wlan_mgmt_rx_reo_pdev_obj_open_notification
+			(struct wlan_objmgr_pdev *pdev,
+			 struct mgmt_txrx_priv_pdev_context *mgmt_txrx_pdev_ctx)
+{
+	return QDF_STATUS_SUCCESS;
+}
+
 /**
  * wlan_mgmt_rx_reo_pdev_obj_create_notification() - pdev create handler for
  * management rx-reorder feature

+ 9 - 0
umac/cmn_services/mgmt_txrx/dispatcher/src/wlan_mgmt_txrx_rx_reo_utils_api.c

@@ -162,6 +162,15 @@ wlan_mgmt_rx_reo_validate_mlo_hw_link_info(struct wlan_objmgr_psoc *psoc)
 	return mgmt_rx_reo_validate_mlo_hw_link_info(psoc);
 }
 
+QDF_STATUS
+wlan_mgmt_rx_reo_pdev_obj_open_notification
+			(struct wlan_objmgr_pdev *pdev,
+			 struct mgmt_txrx_priv_pdev_context *mgmt_txrx_pdev_ctx)
+{
+	return mgmt_rx_reo_pdev_obj_open_notification(pdev,
+						      mgmt_txrx_pdev_ctx);
+}
+
 QDF_STATUS
 wlan_mgmt_rx_reo_pdev_obj_create_notification(
 			struct wlan_objmgr_pdev *pdev,

+ 25 - 0
umac/cmn_services/mgmt_txrx/dispatcher/src/wlan_mgmt_txrx_utils_api.c

@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
  *
  * Permission to use, copy, modify, and/or distribute this software for
  * any purpose with or without fee is hereby granted, provided that the
@@ -832,6 +833,30 @@ QDF_STATUS wlan_mgmt_txrx_psoc_disable(struct wlan_objmgr_psoc *psoc)
 
 QDF_STATUS wlan_mgmt_txrx_pdev_open(struct wlan_objmgr_pdev *pdev)
 {
+	QDF_STATUS status;
+	struct mgmt_txrx_priv_pdev_context *mgmt_txrx_pdev_ctx;
+
+	if (!pdev) {
+		mgmt_txrx_err("pdev context is NULL");
+		return QDF_STATUS_E_INVAL;
+	}
+
+	mgmt_txrx_pdev_ctx = (struct mgmt_txrx_priv_pdev_context *)
+		wlan_objmgr_pdev_get_comp_private_obj(pdev,
+						      WLAN_UMAC_COMP_MGMT_TXRX);
+
+	if (!mgmt_txrx_pdev_ctx) {
+		mgmt_txrx_err("mgmt txrx context is NULL");
+		return QDF_STATUS_E_NULL_VALUE;
+	}
+
+	status = wlan_mgmt_rx_reo_pdev_obj_open_notification
+					(pdev, mgmt_txrx_pdev_ctx);
+	if (QDF_IS_STATUS_ERROR(status)) {
+		mgmt_txrx_err("Failed to execute pdev open for mgmt Rx REO");
+		return status;
+	}
+
 	return QDF_STATUS_SUCCESS;
 }