[v2,07/20] common/mlx5: add rxp database set cmd
diff mbox series

Message ID 1594587541-110442-8-git-send-email-orika@mellanox.com
State Superseded
Delegated to: Thomas Monjalon
Headers show
Series
  • add Mellanox RegEx PMD
Related show

Checks

Context Check Description
ci/Intel-compilation fail apply issues
ci/checkpatch success coding style OK

Commit Message

Ori Kam July 12, 2020, 8:58 p.m. UTC
This commit adds the database set command for the RXP engine.

Signed-off-by: Ori Kam <orika@mellanox.com>
Acked-by: Viacheslav Ovsiienko <viacheslavo@mellanox.com>

---
 drivers/common/mlx5/mlx5_devx_cmds.c            | 104 ++++++++++++++++++++++++
 drivers/common/mlx5/mlx5_devx_cmds.h            |   8 +-
 drivers/common/mlx5/rte_common_mlx5_version.map |   3 +
 3 files changed, 114 insertions(+), 1 deletion(-)

Patch
diff mbox series

diff --git a/drivers/common/mlx5/mlx5_devx_cmds.c b/drivers/common/mlx5/mlx5_devx_cmds.c
index 54b20a7..fe781c7 100644
--- a/drivers/common/mlx5/mlx5_devx_cmds.c
+++ b/drivers/common/mlx5/mlx5_devx_cmds.c
@@ -1616,3 +1616,107 @@  struct mlx5_devx_obj *
 					invalid_buffer);
 	return ret;
 }
+
+/**
+ * Issue the RXP stop database command.
+ *
+ * @param[in] ctx
+ *   Context returned from mlx5 open_device() glue function.
+ * @param[in] engine
+ *   The engine to stop.
+ *
+ * @return
+ *   0 on success, a negative errno value otherwise and rte_errno is set.
+ */
+int
+mlx5_devx_regex_database_stop(void *ctx, uint8_t engine)
+{
+	uint32_t out[MLX5_ST_SZ_DW(set_regexp_params_out)] = {0};
+	uint32_t in[MLX5_ST_SZ_DW(set_regexp_params_in)] = {0};
+	int ret;
+
+	MLX5_SET(set_regexp_params_in, in, opcode, MLX5_CMD_SET_REGEX_PARAMS);
+	MLX5_SET(set_regexp_params_in, in, engine_id, engine);
+	MLX5_SET(set_regexp_params_in, in, regexp_params.stop_engine, 1);
+	MLX5_SET(set_regexp_params_in, in, field_select.stop_engine, 1);
+	ret = mlx5_glue->devx_general_cmd(ctx, in, sizeof(in), out,
+					  sizeof(out));
+	if (ret) {
+		DRV_LOG(ERR, "Database stop failed %d", ret);
+		rte_errno = errno;
+		return -errno;
+	}
+	return 0;
+}
+
+/**
+ * Issue the RXP resume database command.
+ *
+ * @param[in] ctx
+ *   Context returned from mlx5 open_device() glue function.
+ * @param[in] engine
+ *   The engine to start.
+ *
+ * @return
+ *   0 on success, a negative errno value otherwise and rte_errno is set.
+ */
+int
+mlx5_devx_regex_database_resume(void *ctx, uint8_t engine)
+{
+	uint32_t out[MLX5_ST_SZ_DW(set_regexp_params_out)] = {0};
+	uint32_t in[MLX5_ST_SZ_DW(set_regexp_params_in)] = {0};
+	int ret;
+
+	MLX5_SET(set_regexp_params_in, in, opcode, MLX5_CMD_SET_REGEX_PARAMS);
+	MLX5_SET(set_regexp_params_in, in, engine_id, engine);
+	MLX5_SET(set_regexp_params_in, in, regexp_params.stop_engine, 0);
+	MLX5_SET(set_regexp_params_in, in, field_select.stop_engine, 1);
+	ret = mlx5_glue->devx_general_cmd(ctx, in, sizeof(in), out,
+					  sizeof(out));
+	if (ret) {
+		DRV_LOG(ERR, "Database start failed %d", ret);
+		rte_errno = errno;
+		return -errno;
+	}
+	return 0;
+}
+
+/**
+ * Issue the RXP program database command.
+ *
+ * @param[in] ctx
+ *   Context returned from mlx5 open_device() glue function.
+ * @param[in] engine
+ *   The engine to program.
+ * @param[in] umem_id
+ *   The umem id to use.
+ * @param[in] umem_offset
+ *   The offset in the umem to start copying from.
+ *
+ * @return
+ *   0 on success, a negative errno value otherwise and rte_errno is set.
+ */
+int
+mlx5_devx_regex_database_program(void *ctx, uint8_t engine, uint32_t umem_id,
+				 uint64_t umem_offset)
+{
+	uint32_t out[MLX5_ST_SZ_DW(set_regexp_params_out)] = {0};
+	uint32_t in[MLX5_ST_SZ_DW(set_regexp_params_in)] = {0};
+	int ret;
+
+	MLX5_SET(set_regexp_params_in, in, opcode, MLX5_CMD_SET_REGEX_PARAMS);
+	MLX5_SET(set_regexp_params_in, in, engine_id, engine);
+	MLX5_SET(set_regexp_params_in, in, regexp_params.db_umem_id, umem_id);
+	MLX5_SET64(set_regexp_params_in, in, regexp_params.db_umem_offset,
+		   umem_offset);
+	MLX5_SET(set_regexp_params_in, in, field_select.db_umem_id, 1);
+	ret = mlx5_glue->devx_general_cmd(ctx, in, sizeof(in), out,
+					  sizeof(out));
+	if (ret) {
+		DRV_LOG(ERR, "Database program failed %d", ret);
+		rte_errno = errno;
+		return -errno;
+	}
+	return 0;
+}
+
diff --git a/drivers/common/mlx5/mlx5_devx_cmds.h b/drivers/common/mlx5/mlx5_devx_cmds.h
index bb14ca5..655e31f 100644
--- a/drivers/common/mlx5/mlx5_devx_cmds.h
+++ b/drivers/common/mlx5/mlx5_devx_cmds.h
@@ -401,5 +401,11 @@  int mlx5_devx_cmd_modify_rqt(struct mlx5_devx_obj *rqt,
 __rte_internal
 int mlx5_devx_cmd_query_virtio_q_counters(struct mlx5_devx_obj *couners_obj,
 				  struct mlx5_devx_virtio_q_couners_attr *attr);
-
+__rte_internal
+int mlx5_devx_regex_database_stop(void *ctx, uint8_t engine);
+__rte_internal
+int mlx5_devx_regex_database_resume(void *ctx, uint8_t engine);
+__rte_internal
+int mlx5_devx_regex_database_program(void *ctx, uint8_t engine,
+				     uint32_t umem_id, uint64_t umem_offset);
 #endif /* RTE_PMD_MLX5_DEVX_CMDS_H_ */
diff --git a/drivers/common/mlx5/rte_common_mlx5_version.map b/drivers/common/mlx5/rte_common_mlx5_version.map
index ae57ebd..6054d39 100644
--- a/drivers/common/mlx5/rte_common_mlx5_version.map
+++ b/drivers/common/mlx5/rte_common_mlx5_version.map
@@ -35,6 +35,9 @@  INTERNAL {
 	mlx5_devx_cmd_query_virtio_q_counters;
 	mlx5_devx_cmd_query_virtq;
 	mlx5_devx_get_out_command_status;
+	mlx5_devx_regex_database_program;
+	mlx5_devx_regex_database_resume;
+	mlx5_devx_regex_database_stop;
 
 	mlx5_get_ifname_sysfs;
 	mlx5_get_dbr;