2019-07-02 13:02:31 +03:00
/* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */
/*
* Copyright ( c ) 2019 Mellanox Technologies . All rights reserved .
*/
# ifndef _RDMA_COUNTER_H_
# define _RDMA_COUNTER_H_
2019-07-02 13:02:34 +03:00
# include <linux/mutex.h>
2019-07-02 13:02:35 +03:00
# include <linux/pid_namespace.h>
2019-07-02 13:02:34 +03:00
2019-07-02 13:02:31 +03:00
# include <rdma/restrack.h>
2019-07-02 13:02:34 +03:00
# include <rdma/rdma_netlink.h>
2019-07-09 15:44:47 +03:00
struct ib_device ;
2019-07-02 13:02:35 +03:00
struct ib_qp ;
2019-07-02 13:02:34 +03:00
struct auto_mode_param {
int qp_type ;
} ;
struct rdma_counter_mode {
enum rdma_nl_counter_mode mode ;
enum rdma_nl_counter_mask mask ;
struct auto_mode_param param ;
} ;
struct rdma_port_counter {
struct rdma_counter_mode mode ;
2019-07-02 13:02:42 +03:00
struct rdma_hw_stats * hstats ;
2019-07-02 13:02:43 +03:00
unsigned int num_counters ;
2019-07-02 13:02:34 +03:00
struct mutex lock ;
} ;
2019-07-02 13:02:31 +03:00
struct rdma_counter {
struct rdma_restrack_entry res ;
struct ib_device * device ;
uint32_t id ;
2019-07-02 13:02:35 +03:00
struct kref kref ;
struct rdma_counter_mode mode ;
struct mutex lock ;
2019-07-02 13:02:40 +03:00
struct rdma_hw_stats * stats ;
2021-03-01 10:04:20 +03:00
u32 port ;
2019-07-02 13:02:31 +03:00
} ;
2019-07-02 13:02:34 +03:00
void rdma_counter_init ( struct ib_device * dev ) ;
void rdma_counter_release ( struct ib_device * dev ) ;
2021-03-01 10:04:20 +03:00
int rdma_counter_set_auto_mode ( struct ib_device * dev , u32 port ,
2020-12-30 16:02:40 +03:00
enum rdma_nl_counter_mask mask ,
struct netlink_ext_ack * extack ) ;
2021-03-01 10:04:20 +03:00
int rdma_counter_bind_qp_auto ( struct ib_qp * qp , u32 port ) ;
2019-07-02 13:02:35 +03:00
int rdma_counter_unbind_qp ( struct ib_qp * qp , bool force ) ;
2019-07-02 13:02:34 +03:00
2019-07-02 13:02:40 +03:00
int rdma_counter_query_stats ( struct rdma_counter * counter ) ;
2021-03-01 10:04:20 +03:00
u64 rdma_counter_get_hwstat_value ( struct ib_device * dev , u32 port , u32 index ) ;
int rdma_counter_bind_qpn ( struct ib_device * dev , u32 port ,
2019-07-02 13:02:43 +03:00
u32 qp_num , u32 counter_id ) ;
2021-03-01 10:04:20 +03:00
int rdma_counter_bind_qpn_alloc ( struct ib_device * dev , u32 port ,
2019-07-02 13:02:43 +03:00
u32 qp_num , u32 * counter_id ) ;
2021-03-01 10:04:20 +03:00
int rdma_counter_unbind_qpn ( struct ib_device * dev , u32 port ,
2019-07-02 13:02:43 +03:00
u32 qp_num , u32 counter_id ) ;
2021-03-01 10:04:20 +03:00
int rdma_counter_get_mode ( struct ib_device * dev , u32 port ,
2019-07-02 13:02:44 +03:00
enum rdma_nl_counter_mode * mode ,
enum rdma_nl_counter_mask * mask ) ;
2019-07-02 13:02:40 +03:00
2021-10-08 15:24:32 +03:00
int rdma_counter_modify ( struct ib_device * dev , u32 port ,
unsigned int index , bool enable ) ;
2019-07-02 13:02:31 +03:00
# endif /* _RDMA_COUNTER_H_ */