1*9428310aSOri Kam /* SPDX-License-Identifier: BSD-3-Clause 2*9428310aSOri Kam * Copyright 2020 Mellanox Technologies, Ltd 3*9428310aSOri Kam */ 4*9428310aSOri Kam 5*9428310aSOri Kam #include <rte_errno.h> 6*9428310aSOri Kam #include <rte_log.h> 7*9428310aSOri Kam 8*9428310aSOri Kam #include <mlx5_glue.h> 9*9428310aSOri Kam #include <mlx5_devx_cmds.h> 10*9428310aSOri Kam #include <mlx5_prm.h> 11*9428310aSOri Kam 12*9428310aSOri Kam #include "mlx5_regex.h" 13*9428310aSOri Kam #include "mlx5_regex_utils.h" 14*9428310aSOri Kam 15*9428310aSOri Kam int 16*9428310aSOri Kam mlx5_devx_regex_register_write(struct ibv_context *ctx, int engine_id, 17*9428310aSOri Kam uint32_t addr, uint32_t data) 18*9428310aSOri Kam { 19*9428310aSOri Kam uint32_t out[MLX5_ST_SZ_DW(set_regexp_register_out)] = {0}; 20*9428310aSOri Kam uint32_t in[MLX5_ST_SZ_DW(set_regexp_register_in)] = {0}; 21*9428310aSOri Kam int ret; 22*9428310aSOri Kam 23*9428310aSOri Kam MLX5_SET(set_regexp_register_in, in, opcode, 24*9428310aSOri Kam MLX5_CMD_SET_REGEX_REGISTERS); 25*9428310aSOri Kam MLX5_SET(set_regexp_register_in, in, engine_id, engine_id); 26*9428310aSOri Kam MLX5_SET(set_regexp_register_in, in, register_address, addr); 27*9428310aSOri Kam MLX5_SET(set_regexp_register_in, in, register_data, data); 28*9428310aSOri Kam 29*9428310aSOri Kam ret = mlx5_glue->devx_general_cmd(ctx, in, sizeof(in), out, 30*9428310aSOri Kam sizeof(out)); 31*9428310aSOri Kam if (ret) { 32*9428310aSOri Kam DRV_LOG(ERR, "Set regexp register failed %d", ret); 33*9428310aSOri Kam rte_errno = errno; 34*9428310aSOri Kam return -errno; 35*9428310aSOri Kam } 36*9428310aSOri Kam return 0; 37*9428310aSOri Kam } 38*9428310aSOri Kam 39*9428310aSOri Kam int 40*9428310aSOri Kam mlx5_devx_regex_register_read(struct ibv_context *ctx, int engine_id, 41*9428310aSOri Kam uint32_t addr, uint32_t *data) 42*9428310aSOri Kam { 43*9428310aSOri Kam uint32_t out[MLX5_ST_SZ_DW(query_regexp_register_out)] = {0}; 44*9428310aSOri Kam uint32_t in[MLX5_ST_SZ_DW(query_regexp_register_in)] = {0}; 45*9428310aSOri Kam int ret; 46*9428310aSOri Kam 47*9428310aSOri Kam MLX5_SET(query_regexp_register_in, in, opcode, 48*9428310aSOri Kam MLX5_CMD_QUERY_REGEX_REGISTERS); 49*9428310aSOri Kam MLX5_SET(query_regexp_register_in, in, engine_id, engine_id); 50*9428310aSOri Kam MLX5_SET(query_regexp_register_in, in, register_address, addr); 51*9428310aSOri Kam 52*9428310aSOri Kam ret = mlx5_glue->devx_general_cmd(ctx, in, sizeof(in), out, 53*9428310aSOri Kam sizeof(out)); 54*9428310aSOri Kam if (ret) { 55*9428310aSOri Kam DRV_LOG(ERR, "Query regexp register failed %d", ret); 56*9428310aSOri Kam rte_errno = errno; 57*9428310aSOri Kam return -errno; 58*9428310aSOri Kam } 59*9428310aSOri Kam *data = MLX5_GET(query_regexp_register_out, out, register_data); 60*9428310aSOri Kam return 0; 61*9428310aSOri Kam } 62