1 /* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */
2 /*
3  * Copyright (c) 2013-2020, Mellanox Technologies inc. All rights reserved.
4  */
5 
6 #ifndef _MLX5_IB_COUNTERS_H
7 #define _MLX5_IB_COUNTERS_H
8 
9 #include "mlx5_ib.h"
10 
11 struct mlx5_rdma_counter {
12 	struct rdma_counter rdma_counter;
13 
14 	struct mlx5_fc *fc[MLX5_IB_OPCOUNTER_MAX];
15 	struct xarray qpn_opfc_xa;
16 };
17 
18 static inline struct mlx5_rdma_counter *
to_mcounter(struct rdma_counter * counter)19 to_mcounter(struct rdma_counter *counter)
20 {
21 	return container_of(counter, struct mlx5_rdma_counter, rdma_counter);
22 }
23 
24 int mlx5_ib_counters_init(struct mlx5_ib_dev *dev);
25 void mlx5_ib_counters_cleanup(struct mlx5_ib_dev *dev);
26 void mlx5_ib_counters_clear_description(struct ib_counters *counters);
27 int mlx5_ib_flow_counters_set_data(struct ib_counters *ibcounters,
28 				   struct mlx5_ib_create_flow *ucmd);
29 u16 mlx5_ib_get_counters_id(struct mlx5_ib_dev *dev, u32 port_num);
30 bool mlx5r_is_opfc_shared_and_in_use(struct mlx5_ib_op_fc *opfcs, u32 type,
31 				     struct mlx5_ib_op_fc **opfc);
32 #endif /* _MLX5_IB_COUNTERS_H */
33