@@ -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;
+}
+
@@ -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_ */
@@ -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;