net/mlx5: Add DCT command interface
Add a missing command interface to work with a DCT. It includes: creating, destroying and get events for. Signed-off-by: Moni Shoua <monis@mellanox.com> Reviewed-by: Yishai Hadas <yishaih@mellanox.com> Signed-off-by: Leon Romanovsky <leon@kernel.org> Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
This commit is contained in:

committed by
Jason Gunthorpe

parent
8fc12d94ee
commit
57cda166bb
@@ -286,6 +286,7 @@ enum {
|
||||
MLX5_EVENT_QUEUE_TYPE_QP = 0,
|
||||
MLX5_EVENT_QUEUE_TYPE_RQ = 1,
|
||||
MLX5_EVENT_QUEUE_TYPE_SQ = 2,
|
||||
MLX5_EVENT_QUEUE_TYPE_DCT = 6,
|
||||
};
|
||||
|
||||
enum mlx5_event {
|
||||
@@ -321,6 +322,8 @@ enum mlx5_event {
|
||||
MLX5_EVENT_TYPE_PAGE_FAULT = 0xc,
|
||||
MLX5_EVENT_TYPE_NIC_VPORT_CHANGE = 0xd,
|
||||
|
||||
MLX5_EVENT_TYPE_DCT_DRAINED = 0x1c,
|
||||
|
||||
MLX5_EVENT_TYPE_FPGA_ERROR = 0x20,
|
||||
};
|
||||
|
||||
@@ -613,6 +616,11 @@ struct mlx5_eqe_pps {
|
||||
u8 rsvd2[12];
|
||||
} __packed;
|
||||
|
||||
struct mlx5_eqe_dct {
|
||||
__be32 reserved[6];
|
||||
__be32 dctn;
|
||||
};
|
||||
|
||||
union ev_data {
|
||||
__be32 raw[7];
|
||||
struct mlx5_eqe_cmd cmd;
|
||||
@@ -628,6 +636,7 @@ union ev_data {
|
||||
struct mlx5_eqe_vport_change vport_change;
|
||||
struct mlx5_eqe_port_module port_module;
|
||||
struct mlx5_eqe_pps pps;
|
||||
struct mlx5_eqe_dct dct;
|
||||
} __packed;
|
||||
|
||||
struct mlx5_eqe {
|
||||
|
@@ -154,6 +154,13 @@ enum mlx5_dcbx_oper_mode {
|
||||
MLX5E_DCBX_PARAM_VER_OPER_AUTO = 0x3,
|
||||
};
|
||||
|
||||
enum mlx5_dct_atomic_mode {
|
||||
MLX5_ATOMIC_MODE_DCT_OFF = 20,
|
||||
MLX5_ATOMIC_MODE_DCT_NONE = 0 << MLX5_ATOMIC_MODE_DCT_OFF,
|
||||
MLX5_ATOMIC_MODE_DCT_IB_COMP = 1 << MLX5_ATOMIC_MODE_DCT_OFF,
|
||||
MLX5_ATOMIC_MODE_DCT_CX = 2 << MLX5_ATOMIC_MODE_DCT_OFF,
|
||||
};
|
||||
|
||||
enum {
|
||||
MLX5_ATOMIC_OPS_CMP_SWAP = 1 << 0,
|
||||
MLX5_ATOMIC_OPS_FETCH_ADD = 1 << 1,
|
||||
@@ -432,6 +439,7 @@ enum mlx5_res_type {
|
||||
MLX5_RES_SRQ = 3,
|
||||
MLX5_RES_XSRQ = 4,
|
||||
MLX5_RES_XRQ = 5,
|
||||
MLX5_RES_DCT = MLX5_EVENT_QUEUE_TYPE_DCT,
|
||||
};
|
||||
|
||||
struct mlx5_core_rsc_common {
|
||||
|
@@ -473,6 +473,11 @@ struct mlx5_core_qp {
|
||||
int pid;
|
||||
};
|
||||
|
||||
struct mlx5_core_dct {
|
||||
struct mlx5_core_qp mqp;
|
||||
struct completion drained;
|
||||
};
|
||||
|
||||
struct mlx5_qp_path {
|
||||
u8 fl_free_ar;
|
||||
u8 rsvd3;
|
||||
@@ -549,6 +554,9 @@ static inline struct mlx5_core_mkey *__mlx5_mr_lookup(struct mlx5_core_dev *dev,
|
||||
return radix_tree_lookup(&dev->priv.mkey_table.tree, key);
|
||||
}
|
||||
|
||||
int mlx5_core_create_dct(struct mlx5_core_dev *dev,
|
||||
struct mlx5_core_dct *qp,
|
||||
u32 *in, int inlen);
|
||||
int mlx5_core_create_qp(struct mlx5_core_dev *dev,
|
||||
struct mlx5_core_qp *qp,
|
||||
u32 *in,
|
||||
@@ -558,8 +566,12 @@ int mlx5_core_qp_modify(struct mlx5_core_dev *dev, u16 opcode,
|
||||
struct mlx5_core_qp *qp);
|
||||
int mlx5_core_destroy_qp(struct mlx5_core_dev *dev,
|
||||
struct mlx5_core_qp *qp);
|
||||
int mlx5_core_destroy_dct(struct mlx5_core_dev *dev,
|
||||
struct mlx5_core_dct *dct);
|
||||
int mlx5_core_qp_query(struct mlx5_core_dev *dev, struct mlx5_core_qp *qp,
|
||||
u32 *out, int outlen);
|
||||
int mlx5_core_dct_query(struct mlx5_core_dev *dev, struct mlx5_core_dct *dct,
|
||||
u32 *out, int outlen);
|
||||
|
||||
int mlx5_core_set_delay_drop(struct mlx5_core_dev *dev,
|
||||
u32 timeout_usec);
|
||||
|
Reference in New Issue
Block a user