common/mlx5: create ASO flow meter object with DevX
Add DevX API to create ASO flow meter object. Signed-off-by: Li Zhang <lizh@nvidia.com> Acked-by: Matan Azrad <matan@nvidia.com>
This commit is contained in:
parent
5b9e24ae14
commit
894711d3fe
@ -2173,6 +2173,60 @@ mlx5_devx_cmd_alloc_pd(void *ctx)
|
||||
return ppd;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create general object of type FLOW_METER_ASO using DevX API.
|
||||
*
|
||||
* @param[in] ctx
|
||||
* Context returned from mlx5 open_device() glue function.
|
||||
* @param [in] pd
|
||||
* PD value to associate the FLOW_METER_ASO object with.
|
||||
* @param [in] log_obj_size
|
||||
* log_obj_size define to allocate number of 2 * meters
|
||||
* in one FLOW_METER_ASO object.
|
||||
*
|
||||
* @return
|
||||
* The DevX object created, NULL otherwise and rte_errno is set.
|
||||
*/
|
||||
struct mlx5_devx_obj *
|
||||
mlx5_devx_cmd_create_flow_meter_aso_obj(void *ctx, uint32_t pd,
|
||||
uint32_t log_obj_size)
|
||||
{
|
||||
uint32_t in[MLX5_ST_SZ_DW(create_flow_meter_aso_in)] = {0};
|
||||
uint32_t out[MLX5_ST_SZ_DW(general_obj_out_cmd_hdr)];
|
||||
struct mlx5_devx_obj *flow_meter_aso_obj;
|
||||
void *ptr;
|
||||
|
||||
flow_meter_aso_obj = mlx5_malloc(MLX5_MEM_ZERO,
|
||||
sizeof(*flow_meter_aso_obj),
|
||||
0, SOCKET_ID_ANY);
|
||||
if (!flow_meter_aso_obj) {
|
||||
DRV_LOG(ERR, "Failed to allocate FLOW_METER_ASO object data");
|
||||
rte_errno = ENOMEM;
|
||||
return NULL;
|
||||
}
|
||||
ptr = MLX5_ADDR_OF(create_flow_meter_aso_in, in, hdr);
|
||||
MLX5_SET(general_obj_in_cmd_hdr, ptr, opcode,
|
||||
MLX5_CMD_OP_CREATE_GENERAL_OBJECT);
|
||||
MLX5_SET(general_obj_in_cmd_hdr, ptr, obj_type,
|
||||
MLX5_GENERAL_OBJ_TYPE_FLOW_METER_ASO);
|
||||
MLX5_SET(general_obj_in_cmd_hdr, ptr, log_obj_range,
|
||||
log_obj_size);
|
||||
ptr = MLX5_ADDR_OF(create_flow_meter_aso_in, in, flow_meter_aso);
|
||||
MLX5_SET(flow_meter_aso, ptr, access_pd, pd);
|
||||
flow_meter_aso_obj->obj = mlx5_glue->devx_obj_create(
|
||||
ctx, in, sizeof(in),
|
||||
out, sizeof(out));
|
||||
if (!flow_meter_aso_obj->obj) {
|
||||
rte_errno = errno;
|
||||
DRV_LOG(ERR, "Failed to create FLOW_METER_ASO obj using DevX.");
|
||||
mlx5_free(flow_meter_aso_obj);
|
||||
return NULL;
|
||||
}
|
||||
flow_meter_aso_obj->id = MLX5_GET(general_obj_out_cmd_hdr,
|
||||
out, obj_id);
|
||||
return flow_meter_aso_obj;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create general object of type GENEVE TLV option using DevX API.
|
||||
*
|
||||
|
@ -556,7 +556,6 @@ int mlx5_devx_cmd_query_virtio_q_counters(struct mlx5_devx_obj *couners_obj,
|
||||
__rte_internal
|
||||
struct mlx5_devx_obj *mlx5_devx_cmd_create_flow_hit_aso_obj(void *ctx,
|
||||
uint32_t pd);
|
||||
|
||||
__rte_internal
|
||||
struct mlx5_devx_obj *mlx5_devx_cmd_alloc_pd(void *ctx);
|
||||
|
||||
@ -568,4 +567,21 @@ struct mlx5_devx_obj *mlx5_devx_cmd_queue_counter_alloc(void *ctx);
|
||||
__rte_internal
|
||||
int mlx5_devx_cmd_queue_counter_query(struct mlx5_devx_obj *dcs, int clear,
|
||||
uint32_t *out_of_buffers);
|
||||
/**
|
||||
* Create general object of type FLOW_METER_ASO using DevX API..
|
||||
*
|
||||
* @param[in] ctx
|
||||
* Device context.
|
||||
* @param [in] pd
|
||||
* PD value to associate the FLOW_METER_ASO object with.
|
||||
* @param [in] log_obj_size
|
||||
* log_obj_size define to allocate number of 2 * meters
|
||||
* in one FLOW_METER_ASO object.
|
||||
*
|
||||
* @return
|
||||
* The DevX object created, NULL otherwise and rte_errno is set.
|
||||
*/
|
||||
__rte_internal
|
||||
struct mlx5_devx_obj *mlx5_devx_cmd_create_flow_meter_aso_obj(void *ctx,
|
||||
uint32_t pd, uint32_t log_obj_size);
|
||||
#endif /* RTE_PMD_MLX5_DEVX_CMDS_H_ */
|
||||
|
@ -25,6 +25,7 @@ INTERNAL {
|
||||
mlx5_devx_cmd_create_virtio_q_counters; # WINDOWS_NO_EXPORT
|
||||
mlx5_devx_cmd_create_virtq;
|
||||
mlx5_devx_cmd_create_flow_hit_aso_obj;
|
||||
mlx5_devx_cmd_create_flow_meter_aso_obj;
|
||||
mlx5_devx_cmd_create_geneve_tlv_option;
|
||||
mlx5_devx_cmd_destroy;
|
||||
mlx5_devx_cmd_flow_counter_alloc;
|
||||
|
Loading…
x
Reference in New Issue
Block a user