bnxt_re/lib: Direct Verbs: Add man pages Document direct verbs (DV) feature and related DV APIs. The man page describes these DV APIs: - Doorbell regions (db) - Completion Queues (cq) - Queue pairs (qp) Signed-off-by: Sriharsha Basavapatna <sriharsha.basavapatna@broadcom.com> Reviewed-by: Selvin Xavier <selvin.xavier@broadcom.com>
diff --git a/CMakeLists.txt b/CMakeLists.txt index 3ccd87f..0071766 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt
@@ -804,6 +804,7 @@ # Providers if (HAVE_COHERENT_DMA) add_subdirectory(providers/bnxt_re) +add_subdirectory(providers/bnxt_re/man) add_subdirectory(providers/cxgb4) # NO SPARSE add_subdirectory(providers/efa) add_subdirectory(providers/efa/man)
diff --git a/debian/libibverbs-dev.install b/debian/libibverbs-dev.install index 065c9ec..ecf6d36 100644 --- a/debian/libibverbs-dev.install +++ b/debian/libibverbs-dev.install
@@ -41,6 +41,7 @@ usr/lib/*/pkgconfig/libmana.pc usr/lib/*/pkgconfig/libmlx4.pc usr/lib/*/pkgconfig/libmlx5.pc +usr/share/man/man3/bnxt_re_dv*.3 usr/share/man/man3/efadv_*.3 usr/share/man/man3/hnsdv_*.3 usr/share/man/man3/ibv_* @@ -50,6 +51,7 @@ usr/share/man/man3/mlx4dv_*.3 usr/share/man/man3/mlx5dv_*.3 usr/share/man/man3/mult_to_ibv_rate.3 +usr/share/man/man7/bnxt_re_dv.7 usr/share/man/man7/efadv.7 usr/share/man/man7/hnsdv.7 usr/share/man/man7/ionicdv.7
diff --git a/providers/bnxt_re/man/CMakeLists.txt b/providers/bnxt_re/man/CMakeLists.txt new file mode 100644 index 0000000..6e4637d --- /dev/null +++ b/providers/bnxt_re/man/CMakeLists.txt
@@ -0,0 +1,8 @@ +rdma_man_pages( + bnxt_re_dv.7.md + bnxt_re_dv_alloc_db_region.3.md + bnxt_re_dv_free_db_region.3.md + bnxt_re_dv_get_default_db_region.3.md + bnxt_re_dv_create_cq.3.md + bnxt_re_dv_create_qp.3.md +)
diff --git a/providers/bnxt_re/man/bnxt_re_dv.7.md b/providers/bnxt_re/man/bnxt_re_dv.7.md new file mode 100644 index 0000000..a8701fd --- /dev/null +++ b/providers/bnxt_re/man/bnxt_re_dv.7.md
@@ -0,0 +1,68 @@ +--- +layout: page +title: BNXT_RE_DV +section: 7 +tagline: Verbs +date: 2025-06-17 +header: "Broadcom BNXT-RE Direct Verbs Manual" +footer: bnxt_re +--- + +# NAME + +bnxt_re_dv - Direct verbs for Broadcom RoCE (bnxt_re) devices + +# DESCRIPTION + +The libibverbs API is abstract and portable. For workloads that need to +manage some of the RDMA HW resources directly, the bnxt_re provider +exposes **direct verbs**. These are driver-specific routines that work +together with user-registered queue memory and optional doorbell regions. + +To use these new interfaces, include `<infiniband/bnxt_re_dv.h>` and link +against **libbnxt_re** (in addition to **libibverbs**). + +The following Direct Verbs are supported: + +**Doorbell regions** + +- **bnxt_re_dv_alloc_db_region**(3), **bnxt_re_dv_free_db_region**(3) allocate + and release extra doorbell mapping regions. +- **bnxt_re_dv_get_default_db_region**(3) returns the default doorbell page index + and user-mapped doorbell address for the context. + +**Completion queues** + +- **bnxt_re_dv_create_cq**(3) creates a CQ backed by a prior + **ibv_alloc_user_buf**(3) handle and offset. Such a CQ is destroyed like any + other CQ, using **ibv_destroy_cq**(3). + +Applications may create one large buffer with **ibv_alloc_user_buf**(3) and +pass different offsets (aligned to the device page size) and lengths when +creating individual CQs or QP rings. + +**Queue pairs** + +- **bnxt_re_dv_create_qp**(3) creates a QP whose SQ and RQ rings are backed by + prior **ibv_alloc_user_buf**(3) handles and offsets. An optional doorbell + region from **bnxt_re_dv_alloc_db_region**(3) may be supplied; if omitted + the context default is used. Such a QP is destroyed like any other QP, + using **ibv_destroy_qp**(3). Its attributes are modified using the standard + **ibv_modify_qp**(3). + +# SEE ALSO + +**verbs**(7), +**bnxt_re_dv_alloc_db_region**(3), +**bnxt_re_dv_free_db_region**(3), +**bnxt_re_dv_get_default_db_region**(3), +**bnxt_re_dv_create_cq**(3), +**bnxt_re_dv_create_qp**(3), +**ibv_alloc_user_buf**(3), +**ibv_modify_qp**(3) + +# AUTHORS + +Kalesh AP \<kalesh-anakkur.purayil@broadcom.com\>, +Sriharsha Basavapatna \<sriharsha.basavapatna@broadcom.com\>, +Selvin Xavier \<selvin.xavier@broadcom.com\>
diff --git a/providers/bnxt_re/man/bnxt_re_dv_alloc_db_region.3.md b/providers/bnxt_re/man/bnxt_re_dv_alloc_db_region.3.md new file mode 100644 index 0000000..3fd7d3b --- /dev/null +++ b/providers/bnxt_re/man/bnxt_re_dv_alloc_db_region.3.md
@@ -0,0 +1,63 @@ +--- +layout: page +title: bnxt_re_dv_alloc_db_region +section: 3 +tagline: Verbs +date: 2025-06-17 +header: "Broadcom BNXT-RE Direct Verbs Manual" +footer: bnxt_re +--- + +# NAME + +bnxt_re_dv_alloc_db_region - allocate an additional doorbell region + +# SYNOPSIS + +```c +#include <infiniband/bnxt_re_dv.h> + +struct bnxt_re_dv_db_region_attr * +bnxt_re_dv_alloc_db_region(struct ibv_context *ctx); +``` + +# DESCRIPTION + +**bnxt_re_dv_alloc_db_region**() allocates a new doorbell region for *ctx*. +The kernel returns a doorbell region handle and attributes; the library +memory-maps the doorbell page so the application can post doorbells using the +returned mapping. + +The returned pointer must be released with **bnxt_re_dv_free_db_region**(3). + +# ARGUMENTS + +*ctx* +: Verbs device context returned by **ibv_open_device**(3). Identifies the + device instance on which the new doorbell region is allocated. + +# RETURN VALUE + +On success, returns a pointer to a **struct bnxt_re_dv_db_region_attr** +with all fields filled in: + +```c +struct bnxt_re_dv_db_region_attr { + uint32_t handle; /* kernel handle for this doorbell region */ + uint32_t dpi; /* doorbell page index */ + uint64_t *dbr; /* mapped doorbell page (user virtual address) */ +}; +``` + +On failure, returns NULL and sets errno. + +# SEE ALSO + +**bnxt_re_dv**(7), +**bnxt_re_dv_free_db_region**(3), +**bnxt_re_dv_get_default_db_region**(3), +**ibv_open_device**(3) + +# AUTHOR + +Kalesh AP \<kalesh-anakkur.purayil@broadcom.com\>
diff --git a/providers/bnxt_re/man/bnxt_re_dv_create_cq.3.md b/providers/bnxt_re/man/bnxt_re_dv_create_cq.3.md new file mode 100644 index 0000000..6335a21 --- /dev/null +++ b/providers/bnxt_re/man/bnxt_re_dv_create_cq.3.md
@@ -0,0 +1,59 @@ +--- +layout: page +title: bnxt_re_dv_create_cq +section: 3 +tagline: Verbs +date: 2025-06-17 +header: "Broadcom BNXT-RE Direct Verbs Manual" +footer: bnxt_re +--- + +# NAME + +bnxt_re_dv_create_cq - create a completion queue using application-provided memory + +# SYNOPSIS + +```c +#include <infiniband/bnxt_re_dv.h> + +struct ibv_cq *bnxt_re_dv_create_cq(struct ibv_context *ibvctx, + struct bnxt_re_dv_cq_init_attr *cq_attr); + +struct bnxt_re_dv_cq_init_attr { + struct ibv_buf *umem_handle; /* handle from ibv_alloc_user_buf() */ + uint64_t umem_offset; /* byte offset into umem, page-aligned */ + uint32_t ncqe; /* number of CQ entries requested */ +}; +``` + +# DESCRIPTION + +**bnxt_re_dv_create_cq**() creates a completion queue using memory described +by **ibv_alloc_user_buf**(3). The **umem_handle** field must be the handle +returned by that function; **umem_offset** is the byte offset into that +buffer, aligned to the device page size; **ncqe** is the requested number +of CQEs. + +This call requires Linux kernel 7.2 or later; on older kernels it fails. + +A CQ created this way is destroyed like any other CQ, using +**ibv_destroy_cq**(3). + +# RETURN VALUE + +Returns a pointer to the created **ibv_cq** on success, or NULL on failure with +errno set. + +# SEE ALSO + +**bnxt_re_dv**(7), +**ibv_alloc_user_buf**(3), +**ibv_create_cq**(3), +**ibv_destroy_cq**(3) + +# AUTHORS + +Sriharsha Basavapatna \<sriharsha.basavapatna@broadcom.com\>, +Kalesh AP \<kalesh-anakkur.purayil@broadcom.com\>, +Selvin Xavier \<selvin.xavier@broadcom.com\>
diff --git a/providers/bnxt_re/man/bnxt_re_dv_create_qp.3.md b/providers/bnxt_re/man/bnxt_re_dv_create_qp.3.md new file mode 100644 index 0000000..a4fbfa0 --- /dev/null +++ b/providers/bnxt_re/man/bnxt_re_dv_create_qp.3.md
@@ -0,0 +1,100 @@ +--- +layout: page +title: bnxt_re_dv_create_qp +section: 3 +tagline: Verbs +date: 2026-06-05 +header: "Broadcom BNXT-RE Direct Verbs Manual" +footer: bnxt_re +--- + +# NAME + +bnxt_re_dv_create_qp - create a queue pair using application-provided memory + +# SYNOPSIS + +```c +#include <infiniband/bnxt_re_dv.h> + +struct ibv_qp *bnxt_re_dv_create_qp(struct ibv_pd *pd, + struct bnxt_re_dv_qp_init_attr *qp_attr); + +struct bnxt_re_dv_qp_init_attr { + /* Standard ibv parameters */ + enum ibv_qp_type qp_type; + uint32_t max_send_wr; + uint32_t max_recv_wr; + uint32_t max_send_sge; + uint32_t max_recv_sge; + uint32_t max_inline_data; + struct ibv_cq *send_cq; + struct ibv_cq *recv_cq; + struct ibv_srq *srq; /* NULL if not using an SRQ */ + + /* Direct verbs parameters */ + uint64_t qp_handle; /* opaque handle embedded in CQEs */ + void *dbr_handle; /* bnxt_re_dv_alloc_db_region() handle, + or NULL for the context default */ + struct ibv_buf *sq_umem_handle; /* handle from ibv_alloc_user_buf() */ + uint64_t sq_umem_offset; /* byte offset into SQ umem, page-aligned */ + uint32_t sq_len; /* SQ ring length in bytes (incl. MSN area) */ + uint32_t sq_slots; /* SQ depth in WQE slots */ + uint32_t sq_npsn; /* number of PSN entries */ + struct ibv_buf *rq_umem_handle; /* handle from ibv_alloc_user_buf() */ + uint64_t rq_umem_offset; /* byte offset into RQ umem, page-aligned */ + uint32_t rq_len; /* RQ ring length in bytes */ + uint64_t comp_mask; /* reserved, set to 0 */ +}; +``` + +# DESCRIPTION + +**bnxt_re_dv_create_qp**() creates a queue pair whose send queue (SQ) and +receive queue (RQ) rings are backed by memory described by +**ibv_alloc_user_buf**(3). This allows the application to manage QP ring +memory directly. + +**qp_handle** is an opaque value set by the library on successful return. It +is embedded in completion queue entries (CQEs) so the application can +correlate completions back to this QP. The application must not set this +field before the call; it is populated by the library. + +**sq_umem_handle** must be a handle returned by **ibv_alloc_user_buf**(3). +**sq_umem_offset** is the page-aligned byte offset into that buffer +where the SQ ring starts. **sq_len** must cover the full ring including the +MSN (message sequence number) area. **sq_slots** is the SQ depth in WQE +slots and **sq_npsn** is the number of PSN entries; both must be set by the +application based on the ring memory it has allocated. + +**rq_umem_handle** must be a handle returned by **ibv_alloc_user_buf**(3) +for the RQ ring. If **srq** is set, **rq_umem_handle** and **rq_umem_offset** +are ignored. + +If **dbr_handle** is NULL, the context's default doorbell page is used. +Otherwise it must be a pointer returned by **bnxt_re_dv_alloc_db_region**(3). + +This call requires Linux kernel 7.2 or later when **sq_umem_handle** is +provided; on older kernels it fails. + +A QP created this way is destroyed like any other QP, using +**ibv_destroy_qp**(3). + +# RETURN VALUE + +Returns a pointer to the created **ibv_qp** on success, or NULL on failure +with errno set. + +# SEE ALSO + +**bnxt_re_dv**(7), +**ibv_alloc_user_buf**(3), +**bnxt_re_dv_alloc_db_region**(3), +**ibv_create_qp**(3), +**ibv_destroy_qp**(3), +**ibv_modify_qp**(3) + +# AUTHORS + +Sriharsha Basavapatna \<sriharsha.basavapatna@broadcom.com\>, +Selvin Xavier \<selvin.xavier@broadcom.com\>
diff --git a/providers/bnxt_re/man/bnxt_re_dv_free_db_region.3.md b/providers/bnxt_re/man/bnxt_re_dv_free_db_region.3.md new file mode 100644 index 0000000..fb3bcc7 --- /dev/null +++ b/providers/bnxt_re/man/bnxt_re_dv_free_db_region.3.md
@@ -0,0 +1,46 @@ +--- +layout: page +title: bnxt_re_dv_free_db_region +section: 3 +tagline: Verbs +date: 2025-06-17 +header: "Broadcom BNXT-RE Direct Verbs Manual" +footer: bnxt_re +--- + +# NAME + +bnxt_re_dv_free_db_region - free a doorbell region allocated with bnxt_re_dv_alloc_db_region + +# SYNOPSIS + +```c +#include <infiniband/bnxt_re_dv.h> + +int bnxt_re_dv_free_db_region(struct ibv_context *ctx, + struct bnxt_re_dv_db_region_attr *attr); +``` + +# DESCRIPTION + +**bnxt_re_dv_free_db_region**() unmmaps the doorbell page, requests the driver to +free the region identified by *attr*, and frees the **bnxt_re_dv_db_region_attr** +structure. + +*attr* must be the pointer returned by **bnxt_re_dv_alloc_db_region**(3) for the +same *ctx*. + +# RETURN VALUE + +Returns 0 on success. On ioctl failure returns a non-zero error value and sets +**errno** to that value. + +# SEE ALSO + +**bnxt_re_dv**(7), +**bnxt_re_dv_alloc_db_region**(3), +**bnxt_re_dv_get_default_db_region**(3) + +# AUTHOR + +Kalesh AP \<kalesh-anakkur.purayil@broadcom.com\>
diff --git a/providers/bnxt_re/man/bnxt_re_dv_get_default_db_region.3.md b/providers/bnxt_re/man/bnxt_re_dv_get_default_db_region.3.md new file mode 100644 index 0000000..c233390 --- /dev/null +++ b/providers/bnxt_re/man/bnxt_re_dv_get_default_db_region.3.md
@@ -0,0 +1,53 @@ +--- +layout: page +title: bnxt_re_dv_get_default_db_region +section: 3 +tagline: Verbs +date: 2025-06-17 +header: "Broadcom BNXT-RE Direct Verbs Manual" +footer: bnxt_re +--- + +# NAME + +bnxt_re_dv_get_default_db_region - query the default doorbell region for a context + +# SYNOPSIS + +```c +#include <infiniband/bnxt_re_dv.h> + +int bnxt_re_dv_get_default_db_region(struct ibv_context *ibvctx, + struct bnxt_re_dv_db_region_attr *out); +``` + +# DESCRIPTION + +**bnxt_re_dv_get_default_db_region**() fills *out* with the default doorbell page +index (**dpi**) and a pointer (**dbr**) to the user-mapped doorbell page +already associated with the **ibv_context**. + +Unlike **bnxt_re_dv_alloc_db_region**(3), this does not allocate a new region. + +# ARGUMENTS + +*out* +: Output structure; **handle** is not used for the default region; **dbr** + and **dpi** are valid on success. + For the definition of **struct bnxt_re_dv_db_region_attr** and its members, see + **bnxt_re_dv_alloc_db_region**(3). + +# RETURN VALUE + +Returns 0 on success, or a negative error code on failure. + +# SEE ALSO + +**bnxt_re_dv**(7), +**bnxt_re_dv_alloc_db_region**(3), +**bnxt_re_dv_free_db_region**(3), +**ibv_open_device**(3) + +# AUTHOR + +Kalesh AP \<kalesh-anakkur.purayil@broadcom.com\>
diff --git a/redhat/rdma-core.spec b/redhat/rdma-core.spec index c088269..6cc9e1f 100644 --- a/redhat/rdma-core.spec +++ b/redhat/rdma-core.spec
@@ -468,6 +468,7 @@ %endif %{_libdir}/lib*.so %{_libdir}/pkgconfig/*.pc +%{_mandir}/man3/bnxt_re_dv* %{_mandir}/man3/efadv* %{_mandir}/man3/hnsdv* %{_mandir}/man3/ibv_* @@ -480,6 +481,7 @@ %{_mandir}/man3/manadv* %{_mandir}/man3/mlx5dv* %{_mandir}/man3/mlx4dv* +%{_mandir}/man7/bnxt_re_dv* %{_mandir}/man7/efadv* %{_mandir}/man7/hnsdv* %{_mandir}/man7/ionicdv*
diff --git a/suse/rdma-core.spec b/suse/rdma-core.spec index fbd776b..a9290a2 100644 --- a/suse/rdma-core.spec +++ b/suse/rdma-core.spec
@@ -696,12 +696,14 @@ %{_mandir}/man3/*_to_ibv_rate.* %{_mandir}/man7/rdma_cm.* %if 0%{?dma_coherent} +%{_mandir}/man3/bnxt_re_dv* %{_mandir}/man3/efadv* %{_mandir}/man3/hnsdv* %{_mandir}/man3/ionic_dv* %{_mandir}/man3/manadv* %{_mandir}/man3/mlx5dv* %{_mandir}/man3/mlx4dv* +%{_mandir}/man7/bnxt_re_dv* %{_mandir}/man7/efadv* %{_mandir}/man7/hnsdv* %{_mandir}/man7/ionicdv*