2026-01-29 22:25:33 +08:00

178 lines
3.5 KiB
C

/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright(c) 2024 Huawei Technologies Co., Ltd */
#ifndef ROCE_DFX_H
#define ROCE_DFX_H
#include <linux/types.h>
#include "hinic3_rdma.h"
#include "roce_sysfs.h"
#include "roce.h"
#include "roce_verbs_cmd.h"
#include "rdma_context_format.h"
#ifdef ROCE_PKT_CAP_EN
#include "roce_dfx_cap.h"
#endif
#define MR_KEY_2_INDEX_SHIFT 8
#define ROCE_IO_DFX_CFG_VADDR_ID 0
#define ROCE_IO_DFX_CFG_PADDR_ID 1
#define ROCE_IO_DFX_CFG_ADDR_NUM 2
struct roce3_mpt_query_outbuf {
struct roce_mpt_context mpt_entry;
};
#define roce3_dfx_print pr_info
struct roce3_dfx_query_inbuf {
u32 cmd_type;
/*lint -e658*/
union {
u32 qpn;
u32 cqn;
u32 srqn;
u32 mpt_key;
u32 gid_index;
struct {
u32 qpn;
u32 cqn;
} query_pi_ci;
};
/*lint +e658*/
};
struct roce3_dfx_pi_ci {
u32 qpc_sq_pi_on_chip;
u32 qpc_sq_pi;
u32 qpc_sq_load_pi;
u32 qpc_rq_pi_on_chip;
u32 qpc_rq_load_pi;
u32 qpc_rq_pi;
u32 qpc_rc_pi;
u32 qpc_sq_ci;
u32 qpc_sq_wqe_prefetch_ci;
u32 qpc_sq_mtt_prefetch_wqe_ci;
u32 qpc_sqa_ci;
u32 qpc_sqa_wqe_prefetch_ci;
u32 qpc_rq_ci;
u32 qpc_rq_wqe_prefetch_ci;
u32 qpc_rq_mtt_prefetch_wqe_ci;
u32 qpc_rq_base_ci;
u32 qpc_rc_ci;
u32 qpc_rc_prefetch_ci;
u32 cq_ci_on_chip;
u32 cq_ci;
u32 cq_load_ci;
u64 cq_ci_record_gpa_at_hop_num;
u32 cq_last_solicited_pi;
u32 cq_pi;
u32 cq_last_notified_pi;
};
struct roce3_dfx_qp_count {
u32 qp_alloced;
u32 qp_deleted;
u32 qp_alive;
};
union roce3_dfx_query_outbuf {
struct roce_qp_context qp_ctx;
struct roce_cq_context cq_ctx;
struct roce_srq_context srq_ctx;
struct roce_mpt_context mpt;
struct rdma_gid_entry gid_entry;
struct roce3_dfx_pi_ci pi_ci;
struct roce3_dfx_qp_count qp_count;
u32 algo_type;
};
enum roce3_bw_ctrl_cmd_e {
ROCE_BW_CTRL_DIS,
ROCE_BW_CTRL_EN,
ROCE_BW_CTRL_RESET
};
struct rdma_gid_query_outbuf {
struct rdma_gid_entry gid_entry;
};
struct roce3_bw_ctrl_inbuf {
u32 cmd_type;
struct {
u32 cir;
u32 pir;
u32 cnp;
} ctrl_param;
};
struct roce3_bw_ctrl_param {
u8 color_type;
u16 ptype;
u8 hw_wred_mode;
u32 cir;
u32 pir;
u32 cbs;
u32 xbs;
u32 cnp;
u32 enable;
};
struct roce3_bw_ctrl_outbuf {
struct roce3_bw_ctrl_param bw_ctrl_param;
};
enum roce3_dfx_io_cmd_type {
ROCE_IO_CTRL_DIS,
ROCE_IO_CTRL_EN
};
struct roce3_dfx_io_alarm {
enum roce3_dfx_io_cmd_type en_flag;
u16 pf_id;
u16 rsvd;
u16 io_latency_thd;
u16 exec_time;
u32 exp_qpn;
void *rcd_uaddr;
struct timespec64 start;
struct mutex io_alarm_mutex;
};
struct roce3_dfx_io_inbuf {
u32 cmd_type;
struct roce3_dfx_io_alarm io_alarm;
};
struct roce3_dfx_io_outbuf {
struct roce3_dfx_io_alarm io_alarm;
};
int roce3_get_drv_version(struct roce3_device *rdev, const void *buf_in, u32 in_size,
void *buf_out, u32 *out_size);
int roce3_adm_dfx_query(struct roce3_device *rdev, const void *buf_in, u32 in_size,
void *buf_out, u32 *out_size);
int roce3_adm_dfx_bw_ctrl(struct roce3_device *rdev, const void *buf_in, u32 in_size,
void *buf_out, u32 *out_size);
void roce3_dfx_clean_up(struct roce3_device *rdev);
void *global_roce3_io_alarm_va_get(void);
void global_roce3_io_alarm_va_set(u64 va);
void global_roce3_io_alarm_pa_set(dma_addr_t pa);
dma_addr_t global_roce3_io_alarm_pa_get(void);
int roce3_dfx_cmd_query_qp(struct roce3_device *rdev, u32 qpn, struct roce_qp_context *qp_ctx);
int roce3_dfx_cmd_query_cq(struct roce3_device *rdev, u32 cqn, struct roce_cq_context *cq_ctx);
int roce3_dfx_cmd_query_srq(struct roce3_device *rdev, u32 srqn, struct roce_srq_context *srq_ctx);
#endif // __ROCE_DFX_H__