Browse Source

qcacmn: Initialize/clear mgmt Rx reorder data structures

Initialize/clear mgmt Rx reorder data structures on init/deinit.

Change-Id: Idf634fded0dadf2e13cea90f4819788b08ed4a12
CRs-Fixed: 3183181
Edayilliam Jayadev 3 years ago
parent
commit
f9969cdc06

+ 123 - 31
umac/cmn_services/mgmt_txrx/core/src/wlan_mgmt_txrx_rx_reo.c

@@ -4495,34 +4495,31 @@ 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)
+/**
+ * mgmt_rx_reo_initialize_snapshot_address() - Initialize management Rx reorder
+ * snapshot addresses for a given pdev
+ * @pdev: pointer to pdev object
+ *
+ * Return: QDF_STATUS
+ */
+static QDF_STATUS
+mgmt_rx_reo_initialize_snapshot_address(struct wlan_objmgr_pdev *pdev)
 {
-	QDF_STATUS status;
 	enum mgmt_rx_reo_shared_snapshot_id snapshot_id;
+	struct mgmt_rx_reo_pdev_info *mgmt_rx_reo_pdev_ctx;
+	QDF_STATUS status;
 
-	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");
+	mgmt_rx_reo_pdev_ctx = wlan_mgmt_rx_reo_get_priv_object(pdev);
+	if (!mgmt_rx_reo_pdev_ctx) {
+		mgmt_rx_reo_err("Mgmt Rx REO priv object 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_info *snapshot_info;
-		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_info =
 			&mgmt_rx_reo_pdev_ctx->host_target_shared_snapshot_info
 			[snapshot_id];
@@ -4540,6 +4537,114 @@ mgmt_rx_reo_pdev_obj_open_notification
 	return QDF_STATUS_SUCCESS;
 }
 
+/**
+ * mgmt_rx_reo_initialize_snapshot_value() - Initialize management Rx reorder
+ * snapshot values for a given pdev
+ * @pdev: pointer to pdev object
+ *
+ * Return: QDF_STATUS
+ */
+static QDF_STATUS
+mgmt_rx_reo_initialize_snapshot_value(struct wlan_objmgr_pdev *pdev)
+{
+	enum mgmt_rx_reo_shared_snapshot_id snapshot_id;
+	struct mgmt_rx_reo_pdev_info *mgmt_rx_reo_pdev_ctx;
+
+	mgmt_rx_reo_pdev_ctx = wlan_mgmt_rx_reo_get_priv_object(pdev);
+	if (!mgmt_rx_reo_pdev_ctx) {
+		mgmt_rx_reo_err("Mgmt Rx REO priv object is null");
+		return QDF_STATUS_E_NULL_VALUE;
+	}
+
+	snapshot_id = 0;
+	while (snapshot_id < MGMT_RX_REO_SHARED_SNAPSHOT_MAX) {
+		wlan_mgmt_rx_reo_initialize_snapshot_params
+			(&mgmt_rx_reo_pdev_ctx->last_valid_shared_snapshot
+			 [snapshot_id]);
+		snapshot_id++;
+	}
+
+	/* Initialize Host snapshot params */
+	wlan_mgmt_rx_reo_initialize_snapshot_params
+				(&mgmt_rx_reo_pdev_ctx->host_snapshot);
+
+	return QDF_STATUS_SUCCESS;
+}
+
+/**
+ * mgmt_rx_reo_initialize_snapshots() - Initialize management Rx reorder
+ * snapshot related data structures for a given pdev
+ * @pdev: pointer to pdev object
+ *
+ * Return: QDF_STATUS
+ */
+static QDF_STATUS
+mgmt_rx_reo_initialize_snapshots(struct wlan_objmgr_pdev *pdev)
+{
+	QDF_STATUS status;
+
+	status = mgmt_rx_reo_initialize_snapshot_value(pdev);
+	if (QDF_IS_STATUS_ERROR(status)) {
+		mgmt_rx_reo_err("Failed to initialize snapshot value");
+		return status;
+	}
+
+	status = mgmt_rx_reo_initialize_snapshot_address(pdev);
+	if (QDF_IS_STATUS_ERROR(status)) {
+		mgmt_rx_reo_err("Failed to initialize snapshot address");
+		return status;
+	}
+
+	return QDF_STATUS_SUCCESS;
+}
+
+/**
+ * mgmt_rx_reo_clear_snapshots() - Clear management Rx reorder snapshot related
+ * data structures for a given pdev
+ * @pdev: pointer to pdev object
+ *
+ * Return: QDF_STATUS
+ */
+static QDF_STATUS
+mgmt_rx_reo_clear_snapshots(struct wlan_objmgr_pdev *pdev)
+{
+	return QDF_STATUS_SUCCESS;
+}
+
+QDF_STATUS
+mgmt_rx_reo_attach(struct wlan_objmgr_pdev *pdev)
+{
+	QDF_STATUS status;
+
+	if (!wlan_mgmt_rx_reo_is_feature_enabled_at_pdev(pdev))
+		return QDF_STATUS_SUCCESS;
+
+	status = mgmt_rx_reo_initialize_snapshots(pdev);
+	if (QDF_IS_STATUS_ERROR(status)) {
+		mgmt_rx_reo_err("Failed to initialize mgmt Rx REO snapshots");
+		return status;
+	}
+
+	return QDF_STATUS_SUCCESS;
+}
+
+QDF_STATUS
+mgmt_rx_reo_detach(struct wlan_objmgr_pdev *pdev)
+{
+	QDF_STATUS status;
+
+	if (!wlan_mgmt_rx_reo_is_feature_enabled_at_pdev(pdev))
+		return QDF_STATUS_SUCCESS;
+
+	status = mgmt_rx_reo_clear_snapshots(pdev);
+	if (QDF_IS_STATUS_ERROR(status)) {
+		mgmt_rx_reo_err("Failed to clear mgmt Rx REO snapshots");
+		return status;
+	}
+
+	return QDF_STATUS_SUCCESS;
+}
+
 QDF_STATUS
 mgmt_rx_reo_pdev_obj_create_notification(
 	struct wlan_objmgr_pdev *pdev,
@@ -4547,7 +4652,6 @@ mgmt_rx_reo_pdev_obj_create_notification(
 {
 	QDF_STATUS status;
 	struct mgmt_rx_reo_pdev_info *mgmt_rx_reo_pdev_ctx = NULL;
-	enum mgmt_rx_reo_shared_snapshot_id snapshot_id;
 
 	if (!pdev) {
 		mgmt_rx_reo_err("pdev is null");
@@ -4573,18 +4677,6 @@ mgmt_rx_reo_pdev_obj_create_notification(
 		goto failure;
 	}
 
-	snapshot_id = 0;
-	while (snapshot_id < MGMT_RX_REO_SHARED_SNAPSHOT_MAX) {
-		wlan_mgmt_rx_reo_initialize_snapshot_params(
-				&mgmt_rx_reo_pdev_ctx->
-				last_valid_shared_snapshot[snapshot_id]);
-		snapshot_id++;
-	}
-
-	/* Initialize Host snapshot params */
-	wlan_mgmt_rx_reo_initialize_snapshot_params(&mgmt_rx_reo_pdev_ctx->
-						    host_snapshot);
-
 	mgmt_txrx_pdev_ctx->mgmt_rx_reo_pdev_ctx = mgmt_rx_reo_pdev_ctx;
 
 	return QDF_STATUS_SUCCESS;

+ 11 - 7
umac/cmn_services/mgmt_txrx/core/src/wlan_mgmt_txrx_rx_reo_i.h

@@ -102,20 +102,24 @@ struct mgmt_rx_reo_pdev_info {
 };
 
 /**
- * mgmt_rx_reo_pdev_obj_open_notification() - pdev open handler for
+ * mgmt_rx_reo_attach() - Initializes the per pdev data structures related to
  * 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_attach(struct wlan_objmgr_pdev *pdev);
+
+/**
+ * mgmt_rx_reo_detach() - Clears the per pdev data structures related to
+ * management rx-reorder module
+ * @pdev: pointer to pdev object
  *
  * 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_detach(struct wlan_objmgr_pdev *pdev);
 
 /**
  * mgmt_rx_reo_pdev_obj_create_notification() - pdev create handler for

+ 44 - 33
umac/cmn_services/mgmt_txrx/dispatcher/inc/wlan_mgmt_txrx_rx_reo_utils_api.h

@@ -224,22 +224,6 @@ wlan_mgmt_rx_reo_deinit(void);
 QDF_STATUS
 wlan_mgmt_rx_reo_validate_mlo_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
- */
-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
@@ -272,6 +256,26 @@ wlan_mgmt_rx_reo_pdev_obj_destroy_notification(
 			struct wlan_objmgr_pdev *pdev,
 			struct mgmt_txrx_priv_pdev_context *mgmt_txrx_pdev_ctx);
 
+/**
+ * wlan_mgmt_rx_reo_attach() - Initializes the per pdev data structures related
+ * to management rx-reorder module
+ * @pdev: pointer to pdev object
+ *
+ * Return: QDF_STATUS
+ */
+QDF_STATUS
+wlan_mgmt_rx_reo_attach(struct wlan_objmgr_pdev *pdev);
+
+/**
+ * wlan_mgmt_rx_reo_detach() - Clears the per pdev data structures related to
+ * management rx-reorder module
+ * @pdev: pointer to pdev object
+ *
+ * Return: QDF_STATUS
+ */
+QDF_STATUS
+wlan_mgmt_rx_reo_detach(struct wlan_objmgr_pdev *pdev);
+
 /**
  * wlan_mgmt_rx_reo_is_feature_enabled_at_psoc() - Check if MGMT Rx REO feature
  * is enabled on a given psoc
@@ -332,37 +336,37 @@ wlan_mgmt_rx_reo_validate_mlo_link_info(struct wlan_objmgr_psoc *psoc)
 }
 
 /**
- * wlan_mgmt_rx_reo_pdev_obj_open_notification() - pdev open handler for
+ * wlan_mgmt_rx_reo_pdev_obj_create_notification() - pdev create 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
+ * This function gets called from object manager when pdev is being created 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)
+wlan_mgmt_rx_reo_pdev_obj_create_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
+ * wlan_mgmt_rx_reo_pdev_obj_destroy_notification() - pdev destroy 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 created and
- * creates management rx-reorder pdev context
+ * This function gets called from object manager when pdev is being destroyed
+ * and destroys management rx-reorder pdev context
  *
  * Return: QDF_STATUS
  */
 static inline QDF_STATUS
-wlan_mgmt_rx_reo_pdev_obj_create_notification(
+wlan_mgmt_rx_reo_pdev_obj_destroy_notification(
 			struct wlan_objmgr_pdev *pdev,
 			struct mgmt_txrx_priv_pdev_context *mgmt_txrx_pdev_ctx)
 {
@@ -370,20 +374,27 @@ wlan_mgmt_rx_reo_pdev_obj_create_notification(
 }
 
 /**
- * wlan_mgmt_rx_reo_pdev_obj_destroy_notification() - pdev destroy handler for
- * management rx-reorder feature
+ * wlan_mgmt_rx_reo_attach() - Initializes the per pdev data structures related
+ * to 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 destroyed
- * and destroys management rx-reorder pdev context
+ * Return: QDF_STATUS
+ */
+static inline QDF_STATUS
+wlan_mgmt_rx_reo_attach(struct wlan_objmgr_pdev *pdev)
+{
+	return QDF_STATUS_SUCCESS;
+}
+
+/**
+ * wlan_mgmt_rx_reo_detach() - Clears the per pdev data structures related to
+ * management rx-reorder module
+ * @pdev: pointer to pdev object
  *
  * Return: QDF_STATUS
  */
 static inline QDF_STATUS
-wlan_mgmt_rx_reo_pdev_obj_destroy_notification(
-			struct wlan_objmgr_pdev *pdev,
-			struct mgmt_txrx_priv_pdev_context *mgmt_txrx_pdev_ctx)
+wlan_mgmt_rx_reo_detach(struct wlan_objmgr_pdev *pdev)
 {
 	return QDF_STATUS_SUCCESS;
 }

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

@@ -171,15 +171,6 @@ wlan_mgmt_rx_reo_validate_mlo_link_info(struct wlan_objmgr_psoc *psoc)
 	return mgmt_rx_reo_validate_mlo_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,
@@ -198,6 +189,22 @@ wlan_mgmt_rx_reo_pdev_obj_destroy_notification(
 							 mgmt_txrx_pdev_ctx);
 }
 
+QDF_STATUS
+wlan_mgmt_rx_reo_attach(struct wlan_objmgr_pdev *pdev)
+{
+	return mgmt_rx_reo_attach(pdev);
+}
+
+qdf_export_symbol(wlan_mgmt_rx_reo_attach);
+
+QDF_STATUS
+wlan_mgmt_rx_reo_detach(struct wlan_objmgr_pdev *pdev)
+{
+	return mgmt_rx_reo_detach(pdev);
+}
+
+qdf_export_symbol(wlan_mgmt_rx_reo_detach);
+
 #ifndef WLAN_MGMT_RX_REO_SIM_SUPPORT
 bool
 wlan_mgmt_rx_reo_is_feature_enabled_at_psoc(struct wlan_objmgr_psoc *psoc)

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

@@ -833,30 +833,6 @@ 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;
 }