regex/mlx5: support rules import
[dpdk.git] / drivers / regex / mlx5 / mlx5_regex_devx.c
index 1ffc008..f66d7aa 100644 (file)
@@ -59,3 +59,69 @@ mlx5_devx_regex_register_read(struct ibv_context *ctx, int engine_id,
        *data = MLX5_GET(query_regexp_register_out, out, register_data);
        return 0;
 }
+
+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;
+}
+
+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;
+}
+
+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;
+}