| .\" -*- nroff -*- | |
| .\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md | |
| .\" | |
| .TH IBV_QUERY_DEVICE_EX 3 2014-12-17 libibverbs "Libibverbs Programmer's Manual" | |
| .SH "NAME" | |
| ibv_query_device_ex \- query an RDMA device's attributes including extended | |
| device properties. | |
| .SH "SYNOPSIS" | |
| .nf | |
| .B #include <infiniband/verbs.h> | |
| .sp | |
| .BI "int ibv_query_device_ex(struct ibv_context " "*context", | |
| .BI " struct ibv_query_device_ex_input " "*input", | |
| .BI " struct ibv_device_attr_ex " "*attr" ); | |
| .fi | |
| .SH "DESCRIPTION" | |
| .B ibv_query_device_ex() | |
| returns the attributes of the device with context | |
| .I context\fR. | |
| The argument | |
| .I input | |
| is a pointer to an ibv_query_device_ex_input structure, used for future extensions | |
| The argument | |
| .I attr | |
| is a pointer to an ibv_device_attr_ex struct, as defined in <infiniband/verbs.h>. | |
| .PP | |
| .nf | |
| struct ibv_device_attr_ex { | |
| .in +8 | |
| struct ibv_device_attr orig_attr; | |
| uint32_t comp_mask; /* Compatibility mask that defines which of the following variables are valid */ | |
| struct ibv_odp_caps odp_caps; /* On-Demand Paging capabilities */ | |
| uint64_t completion_timestamp_mask; /* Completion timestamp mask (0 = unsupported) */ | |
| uint64_t hca_core_clock; /* The frequency (in kHZ) of the HCA (0 = unsupported) */ | |
| uint64_t device_cap_flags_ex; /* Extended device capability flags */ | |
| struct ibv_tso_caps tso_caps; /* TCP segmentation offload capabilities */ | |
| struct ibv_rss_caps rss_caps; /* RSS capabilities */ | |
| uint32_t max_wq_type_rq; /* Max Work Queue from type RQ */ | |
| struct ibv_packet_pacing_caps packet_pacing_caps; /* Packet pacing capabilities */ | |
| uint32_t raw_packet_caps; /* Raw packet capabilities, use enum ibv_raw_packet_caps */ | |
| struct ibv_tm_caps tm_caps; /* Tag matching capabilities */ | |
| struct ibv_cq_moderation_caps cq_mod_caps; /* CQ moderation max capabilities */ | |
| uint64_t max_dm_size; /* Max Device Memory size (in bytes) available for allocation */ | |
| struct ibv_pci_atomic_caps atomic_caps; /* PCI atomic operations capabilities, use enum ibv_pci_atomic_op_size */ | |
| uint32_t xrc_odp_caps; /* Mask with enum ibv_odp_transport_cap_bits to know which operations are supported. */ | |
| uint32_t phys_port_cnt_ex /* Extended number of physical port count, allows exposing more than 255 ports device */ | |
| .in -8 | |
| }; | |
| struct ibv_odp_caps { | |
| uint64_t general_odp_caps; /* Mask with enum ibv_odp_general_cap_bits */ | |
| struct { | |
| uint32_t rc_odp_caps; /* Mask with enum ibv_odp_tranport_cap_bits to know which operations are supported. */ | |
| uint32_t uc_odp_caps; /* Mask with enum ibv_odp_tranport_cap_bits to know which operations are supported. */ | |
| uint32_t ud_odp_caps; /* Mask with enum ibv_odp_tranport_cap_bits to know which operations are supported. */ | |
| } per_transport_caps; | |
| }; | |
| enum ibv_odp_general_cap_bits { | |
| IBV_ODP_SUPPORT = 1 << 0, /* On demand paging is supported */ | |
| IBV_ODP_SUPPORT_IMPLICIT = 1 << 1, /* Implicit on demand paging is supported */ | |
| }; | |
| enum ibv_odp_transport_cap_bits { | |
| IBV_ODP_SUPPORT_SEND = 1 << 0, /* Send operations support on-demand paging */ | |
| IBV_ODP_SUPPORT_RECV = 1 << 1, /* Receive operations support on-demand paging */ | |
| IBV_ODP_SUPPORT_WRITE = 1 << 2, /* RDMA-Write operations support on-demand paging */ | |
| IBV_ODP_SUPPORT_READ = 1 << 3, /* RDMA-Read operations support on-demand paging */ | |
| IBV_ODP_SUPPORT_ATOMIC = 1 << 4, /* RDMA-Atomic operations support on-demand paging */ | |
| IBV_ODP_SUPPORT_SRQ_RECV = 1 << 5, /* SRQ receive operations support on-demand paging */ | |
| IBV_ODP_SUPPORT_FLUSH = 1 << 6, /* RDMA-Flush operations support on-demand paging */ | |
| IBV_ODP_SUPPORT_ATOMIC_WRITE = 1 << 7, /* RDMA-Atomic-write operations support on-demand paing */ | |
| }; | |
| struct ibv_tso_caps { | |
| uint32_t max_tso; /* Maximum payload size in bytes supported for segmentation by TSO engine.*/ | |
| uint32_t supported_qpts; /* Bitmap showing which QP types are supported by TSO operation. */ | |
| }; | |
| struct ibv_rss_caps { | |
| uint32_t supported_qpts; /* Bitmap showing which QP types are supported RSS */ | |
| uint32_t max_rwq_indirection_tables; /* Max receive work queue indirection tables */ | |
| uint32_t max_rwq_indirection_table_size; /* Max receive work queue indirection table size */ | |
| uint64_t rx_hash_fields_mask; /* Mask with enum ibv_rx_hash_fields to know which incoming packet's field can participates in the RX hash */ | |
| uint8_t rx_hash_function; /* Mask with enum ibv_rx_hash_function_flags to know which hash functions are supported */ | |
| }; | |
| struct ibv_packet_pacing_caps { | |
| uint32_t qp_rate_limit_min; /* Minimum rate limit in kbps */ | |
| uint32_t qp_rate_limit_max; /* Maximum rate limit in kbps */ | |
| uint32_t supported_qpts; /* Bitmap showing which QP types are supported. */ | |
| }; | |
| enum ibv_raw_packet_caps { | |
| .in +8 | |
| IBV_RAW_PACKET_CAP_CVLAN_STRIPPING = 1 << 0, /* CVLAN stripping is supported */ | |
| IBV_RAW_PACKET_CAP_SCATTER_FCS = 1 << 1, /* FCS scattering is supported */ | |
| IBV_RAW_PACKET_CAP_IP_CSUM = 1 << 2, /* IP CSUM offload is supported */ | |
| .in -8 | |
| }; | |
| enum ibv_tm_cap_flags { | |
| .in +8 | |
| IBV_TM_CAP_RC = 1 << 0, /* Support tag matching on RC transport */ | |
| .in -8 | |
| }; | |
| struct ibv_tm_caps { | |
| .in +8 | |
| uint32_t max_rndv_hdr_size; /* Max size of rendezvous request header */ | |
| uint32_t max_num_tags; /* Max number of tagged buffers in a TM-SRQ matching list */ | |
| uint32_t flags; /* From enum ibv_tm_cap_flags */ | |
| uint32_t max_ops; /* Max number of outstanding list operations */ | |
| uint32_t max_sge; /* Max number of SGEs in a tagged buffer */ | |
| .in -8 | |
| }; | |
| struct ibv_cq_moderation_caps { | |
| uint16_t max_cq_count; | |
| uint16_t max_cq_period; | |
| }; | |
| enum ibv_pci_atomic_op_size { | |
| .in +8 | |
| IBV_PCI_ATOMIC_OPERATION_4_BYTE_SIZE_SUP = 1 << 0, | |
| IBV_PCI_ATOMIC_OPERATION_8_BYTE_SIZE_SUP = 1 << 1, | |
| IBV_PCI_ATOMIC_OPERATION_16_BYTE_SIZE_SUP = 1 << 2, | |
| .in -8 | |
| }; | |
| struct ibv_pci_atomic_caps { | |
| .in +8 | |
| uint16_t fetch_add; /* Supported sizes for an atomic fetch and add operation, use enum ibv_pci_atomic_op_size */ | |
| uint16_t swap; /* Supported sizes for an atomic unconditional swap operation, use enum ibv_pci_atomic_op_size */ | |
| uint16_t compare_swap; /* Supported sizes for an atomic compare and swap operation, use enum ibv_pci_atomic_op_size */ | |
| .in -8 | |
| }; | |
| .fi | |
| Extended device capability flags (device_cap_flags_ex): | |
| .br | |
| .TP 7 | |
| IBV_DEVICE_PCI_WRITE_END_PADDING | |
| Indicates the device has support for padding PCI writes to a full cache line. | |
| Padding packets to full cache lines reduces the amount of traffic | |
| required at the memory controller at the expense of creating more | |
| traffic on the PCI-E port. | |
| Workloads that have a high CPU memory load and low PCI-E utilization | |
| will benefit from this feature, while workloads that have a high PCI-E | |
| utilization and small packets will be harmed. | |
| For instance, with a 128 byte cache line size, the transfer of any | |
| packets less than 128 bytes will require a full 128 transfer on PCI, | |
| potentially doubling the required PCI-E bandwidth. | |
| This feature can be enabled on a QP or WQ basis via the | |
| IBV_QP_CREATE_PCI_WRITE_END_PADDING or IBV_WQ_FLAGS_PCI_WRITE_END_PADDING | |
| flags. | |
| .TP 7 | |
| IBV_DEVICE_CC_DMA_BOUNCE | |
| Indicates the device is running inside a Confidential Computing (CoCo) guest | |
| and requires DMA bounce buffering. Applications that explicitly opt in to | |
| unprotected/shared memory allocation should create a parent domain with | |
| IBV_PARENT_DOMAIN_INIT_ATTR_ALLOW_CC_UNPROTECTED_ALLOC, allocate buffers | |
| through ibv_alloc_buf(), and register them with ibv_reg_buf_mr() (or | |
| ibv_reg_mr_ex() with IBV_REG_MR_MASK_BUF). | |
| .SH "RETURN VALUE" | |
| .B ibv_query_device_ex() | |
| returns 0 on success, or the value of errno on failure (which indicates the failure reason). | |
| .SH "NOTES" | |
| The maximum values returned by this function are the upper limits of | |
| supported resources by the device. However, it may not be possible to | |
| use these maximum values, since the actual number of any resource that | |
| can be created may be limited by the machine configuration, the amount | |
| of host memory, user permissions, and the amount of resources already | |
| in use by other users/processes. | |
| .SH "SEE ALSO" | |
| .BR ibv_query_device (3), | |
| .BR ibv_open_device (3), | |
| .BR ibv_query_port (3), | |
| .BR ibv_query_pkey (3), | |
| .BR ibv_query_gid (3) | |
| .SH "AUTHORS" | |
| .TP | |
| Majd Dibbiny <majd@mellanox.com> |