.\" Automatically generated by Pandoc 2.5
.\"
.TH "mlx5dv_create_qp" "3" "2018\-9\-1" "mlx5" "mlx5 Programmer\[cq]s Manual"
.hy
.SH NAME
.PP
mlx5dv_create_qp \- creates a queue pair (QP)
.SH SYNOPSIS
.IP
.nf
\f[C]
#include <infiniband/mlx5dv.h>

struct ibv_qp *mlx5dv_create_qp(struct ibv_context         *context,
                                struct ibv_qp_init_attr_ex *qp_attr,
                                struct mlx5dv_qp_init_attr *mlx5_qp_attr)
\f[R]
.fi
.SH DESCRIPTION
.PP
\f[B]mlx5dv_create_qp()\f[R] creates a queue pair (QP) with specific
driver properties.
.SH ARGUMENTS
.PP
Please see \f[I]ibv_create_qp_ex(3)\f[R] man page for \f[I]context\f[R]
and \f[I]qp_attr\f[R].
.SS mlx5_qp_attr
.IP
.nf
\f[C]
struct mlx5dv_qp_init_attr {
    uint64_t comp_mask;
    uint32_t create_flags;
    struct mlx5dv_dc_init_attr  dc_init_attr;
    uint64_t send_ops_flags;
};
\f[R]
.fi
.TP
.B \f[I]comp_mask\f[R]
Bitmask specifying what fields in the structure are valid:
MLX5DV_QP_INIT_ATTR_MASK_QP_CREATE_FLAGS: valid values in
\f[I]create_flags\f[R] MLX5DV_QP_INIT_ATTR_MASK_DC: valid values in
\f[I]dc_init_attr\f[R] MLX5DV_QP_INIT_ATTR_MASK_SEND_OPS_FLAGS: valid
values in \f[I]send_ops_flags\f[R]
.TP
.B \f[I]create_flags\f[R]
A bitwise OR of the various values described below.
.RS
.PP
MLX5DV_QP_CREATE_TUNNEL_OFFLOADS: Enable offloading such as checksum and
LRO for incoming tunneling traffic.
.PP
MLX5DV_QP_CREATE_TIR_ALLOW_SELF_LOOPBACK_UC: Allow receiving loopback
unicast traffic.
.PP
MLX5DV_QP_CREATE_TIR_ALLOW_SELF_LOOPBACK_MC: Allow receiving loopback
multicast traffic.
.PP
MLX5DV_QP_CREATE_DISABLE_SCATTER_TO_CQE: Disable scatter to CQE feature
which is enabled by default.
.PP
MLX5DV_QP_CREATE_ALLOW_SCATTER_TO_CQE: Allow scatter to CQE for
requester even if the qp was not configured to signal all WRs.
.PP
MLX5DV_QP_CREATE_PACKET_BASED_CREDIT_MODE: Set QP to work in
end\-to\-end packet\-based credit, instead of the default message\-based
credits (IB spec.
section 9.7.7.2).
.PD 0
.P
.PD
It is the applications responsibility to make sure that the peer QP is
configured with same mode.
.RE
.TP
.B \f[I]dc_init_attr\f[R]
DC init attributes.
.SS \f[I]dc_init_attr\f[R]
.IP
.nf
\f[C]
struct mlx5dv_dc_init_attr {
    enum mlx5dv_dc_type dc_type;
    uint64_t dct_access_key;
};
\f[R]
.fi
.TP
.B \f[I]dc_type\f[R]
MLX5DV_DCTYPE_DCT QP type: Target DC.
MLX5DV_DCTYPE_DCI QP type: Initiator DC.
.TP
.B \f[I]dct_access_key\f[R]
used to create a DCT QP.
.TP
.B \f[I]send_ops_flags\f[R]
A bitwise OR of the various values described below.
.RS
.PP
MLX5DV_QP_EX_WITH_MR_INTERLEAVED: Enables the mlx5dv_wr_mr_interleaved()
work requset on this QP.
.PP
MLX5DV_QP_EX_WITH_MR_LIST: Enables the mlx5dv_wr_mr_list() work requset
on this QP.
.RE
.SH NOTES
.PP
\f[B]mlx5dv_qp_ex_from_ibv_qp_ex()\f[R] is used to get \f[I]struct
mlx5dv_qp_ex\f[R] for accessing the send ops interfaces when
IBV_QP_INIT_ATTR_SEND_OPS_FLAGS is used.
.PP
The MLX5DV_QP_CREATE_DISABLE_SCATTER_TO_CQE flag should be set in cases
that IOVA doesn\[cq]t match the process\[cq] VA and the message payload
size is small enough to trigger the scatter to CQE feature.
.PP
When device memory is used IBV_SEND_INLINE and scatter to CQE should not
be used, as the memcpy is not possible.
.SH RETURN VALUE
.PP
\f[B]mlx5dv_create_qp()\f[R] returns a pointer to the created QP, on
error NULL will be returned and errno will be set.
.SH SEE ALSO
.PP
\f[B]ibv_query_device_ex\f[R](3), \f[B]ibv_create_qp_ex\f[R](3),
.SH AUTHOR
.PP
Yonatan Cohen <yonatanc@mellanox.com>
