0001
0002
0003
0004
0005
0006 #ifndef MLX5_IB_SRQ_H
0007 #define MLX5_IB_SRQ_H
0008
0009 enum {
0010 MLX5_SRQ_FLAG_ERR = (1 << 0),
0011 MLX5_SRQ_FLAG_WQ_SIG = (1 << 1),
0012 MLX5_SRQ_FLAG_RNDV = (1 << 2),
0013 };
0014
0015 struct mlx5_srq_attr {
0016 u32 type;
0017 u32 flags;
0018 u32 log_size;
0019 u32 wqe_shift;
0020 u32 log_page_size;
0021 u32 wqe_cnt;
0022 u32 srqn;
0023 u32 xrcd;
0024 u32 page_offset;
0025 u32 cqn;
0026 u32 pd;
0027 u32 lwm;
0028 u32 user_index;
0029 u64 db_record;
0030 __be64 *pas;
0031 struct ib_umem *umem;
0032 u32 tm_log_list_size;
0033 u32 tm_next_tag;
0034 u32 tm_hw_phase_cnt;
0035 u32 tm_sw_phase_cnt;
0036 u16 uid;
0037 };
0038
0039 struct mlx5_ib_dev;
0040
0041 struct mlx5_core_srq {
0042 struct mlx5_core_rsc_common common;
0043 u32 srqn;
0044 int max;
0045 size_t max_gs;
0046 size_t max_avail_gather;
0047 int wqe_shift;
0048 void (*event)(struct mlx5_core_srq *srq, enum mlx5_event e);
0049
0050 u16 uid;
0051 };
0052
0053 struct mlx5_srq_table {
0054 struct notifier_block nb;
0055 struct xarray array;
0056 };
0057
0058 int mlx5_cmd_create_srq(struct mlx5_ib_dev *dev, struct mlx5_core_srq *srq,
0059 struct mlx5_srq_attr *in);
0060 int mlx5_cmd_destroy_srq(struct mlx5_ib_dev *dev, struct mlx5_core_srq *srq);
0061 int mlx5_cmd_query_srq(struct mlx5_ib_dev *dev, struct mlx5_core_srq *srq,
0062 struct mlx5_srq_attr *out);
0063 int mlx5_cmd_arm_srq(struct mlx5_ib_dev *dev, struct mlx5_core_srq *srq,
0064 u16 lwm, int is_srq);
0065 struct mlx5_core_srq *mlx5_cmd_get_srq(struct mlx5_ib_dev *dev, u32 srqn);
0066
0067 int mlx5_init_srq_table(struct mlx5_ib_dev *dev);
0068 void mlx5_cleanup_srq_table(struct mlx5_ib_dev *dev);
0069 #endif