aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/ibdrv/include
diff options
context:
space:
mode:
authorqrort <qrort@yandex-team.com>2022-12-02 11:31:25 +0300
committerqrort <qrort@yandex-team.com>2022-12-02 11:31:25 +0300
commitb1f4ffc9c8abff3ba58dc1ec9a9f92d2f0de6806 (patch)
tree2a23209faf0fea5586a6d4b9cee60d1b318d29fe /contrib/libs/ibdrv/include
parent559174a9144de40d6bb3997ea4073c82289b4974 (diff)
downloadydb-b1f4ffc9c8abff3ba58dc1ec9a9f92d2f0de6806.tar.gz
remove kikimr/driver DEPENDS
Diffstat (limited to 'contrib/libs/ibdrv/include')
-rw-r--r--contrib/libs/ibdrv/include/infiniband/ib_user_ioctl_verbs.h267
-rw-r--r--contrib/libs/ibdrv/include/infiniband/mlx5_api.h71
-rw-r--r--contrib/libs/ibdrv/include/infiniband/mlx5_user_ioctl_verbs.h102
-rw-r--r--contrib/libs/ibdrv/include/infiniband/mlx5dv.h1700
-rw-r--r--contrib/libs/ibdrv/include/infiniband/sa.h136
-rw-r--r--contrib/libs/ibdrv/include/infiniband/tm_types.h66
-rw-r--r--contrib/libs/ibdrv/include/infiniband/verbs_api.h99
-rw-r--r--contrib/libs/ibdrv/include/rdma/rdma_verbs.h317
8 files changed, 0 insertions, 2758 deletions
diff --git a/contrib/libs/ibdrv/include/infiniband/ib_user_ioctl_verbs.h b/contrib/libs/ibdrv/include/infiniband/ib_user_ioctl_verbs.h
deleted file mode 100644
index cfea82acfe..0000000000
--- a/contrib/libs/ibdrv/include/infiniband/ib_user_ioctl_verbs.h
+++ /dev/null
@@ -1,267 +0,0 @@
-/* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR Linux-OpenIB) */
-/*
- * Copyright (c) 2017-2018, Mellanox Technologies inc. All rights reserved.
- *
- * This software is available to you under a choice of one of two
- * licenses. You may choose to be licensed under the terms of the GNU
- * General Public License (GPL) Version 2, available from the file
- * COPYING in the main directory of this source tree, or the
- * OpenIB.org BSD license below:
- *
- * Redistribution and use in source and binary forms, with or
- * without modification, are permitted provided that the following
- * conditions are met:
- *
- * - Redistributions of source code must retain the above
- * copyright notice, this list of conditions and the following
- * disclaimer.
- *
- * - Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-#ifndef IB_USER_IOCTL_VERBS_H
-#define IB_USER_IOCTL_VERBS_H
-
-#include <linux/types.h>
-#include <rdma/ib_user_verbs.h>
-
-#ifndef RDMA_UAPI_PTR
-#define RDMA_UAPI_PTR(_type, _name) __aligned_u64 _name
-#endif
-
-#define IB_UVERBS_ACCESS_OPTIONAL_FIRST (1 << 20)
-#define IB_UVERBS_ACCESS_OPTIONAL_LAST (1 << 29)
-
-enum ib_uverbs_core_support {
- IB_UVERBS_CORE_SUPPORT_OPTIONAL_MR_ACCESS = 1 << 0,
-};
-
-enum ib_uverbs_access_flags {
- IB_UVERBS_ACCESS_LOCAL_WRITE = 1 << 0,
- IB_UVERBS_ACCESS_REMOTE_WRITE = 1 << 1,
- IB_UVERBS_ACCESS_REMOTE_READ = 1 << 2,
- IB_UVERBS_ACCESS_REMOTE_ATOMIC = 1 << 3,
- IB_UVERBS_ACCESS_MW_BIND = 1 << 4,
- IB_UVERBS_ACCESS_ZERO_BASED = 1 << 5,
- IB_UVERBS_ACCESS_ON_DEMAND = 1 << 6,
- IB_UVERBS_ACCESS_HUGETLB = 1 << 7,
-
- IB_UVERBS_ACCESS_RELAXED_ORDERING = IB_UVERBS_ACCESS_OPTIONAL_FIRST,
- IB_UVERBS_ACCESS_OPTIONAL_RANGE =
- ((IB_UVERBS_ACCESS_OPTIONAL_LAST << 1) - 1) &
- ~(IB_UVERBS_ACCESS_OPTIONAL_FIRST - 1)
-};
-
-enum ib_uverbs_srq_type {
- IB_UVERBS_SRQT_BASIC,
- IB_UVERBS_SRQT_XRC,
- IB_UVERBS_SRQT_TM,
-};
-
-enum ib_uverbs_wq_type {
- IB_UVERBS_WQT_RQ,
-};
-
-enum ib_uverbs_wq_flags {
- IB_UVERBS_WQ_FLAGS_CVLAN_STRIPPING = 1 << 0,
- IB_UVERBS_WQ_FLAGS_SCATTER_FCS = 1 << 1,
- IB_UVERBS_WQ_FLAGS_DELAY_DROP = 1 << 2,
- IB_UVERBS_WQ_FLAGS_PCI_WRITE_END_PADDING = 1 << 3,
-};
-
-enum ib_uverbs_qp_type {
- IB_UVERBS_QPT_RC = 2,
- IB_UVERBS_QPT_UC,
- IB_UVERBS_QPT_UD,
- IB_UVERBS_QPT_RAW_PACKET = 8,
- IB_UVERBS_QPT_XRC_INI,
- IB_UVERBS_QPT_XRC_TGT,
- IB_UVERBS_QPT_DRIVER = 0xFF,
-};
-
-enum ib_uverbs_qp_create_flags {
- IB_UVERBS_QP_CREATE_BLOCK_MULTICAST_LOOPBACK = 1 << 1,
- IB_UVERBS_QP_CREATE_SCATTER_FCS = 1 << 8,
- IB_UVERBS_QP_CREATE_CVLAN_STRIPPING = 1 << 9,
- IB_UVERBS_QP_CREATE_PCI_WRITE_END_PADDING = 1 << 11,
- IB_UVERBS_QP_CREATE_SQ_SIG_ALL = 1 << 12,
-};
-
-enum ib_uverbs_query_port_cap_flags {
- IB_UVERBS_PCF_SM = 1 << 1,
- IB_UVERBS_PCF_NOTICE_SUP = 1 << 2,
- IB_UVERBS_PCF_TRAP_SUP = 1 << 3,
- IB_UVERBS_PCF_OPT_IPD_SUP = 1 << 4,
- IB_UVERBS_PCF_AUTO_MIGR_SUP = 1 << 5,
- IB_UVERBS_PCF_SL_MAP_SUP = 1 << 6,
- IB_UVERBS_PCF_MKEY_NVRAM = 1 << 7,
- IB_UVERBS_PCF_PKEY_NVRAM = 1 << 8,
- IB_UVERBS_PCF_LED_INFO_SUP = 1 << 9,
- IB_UVERBS_PCF_SM_DISABLED = 1 << 10,
- IB_UVERBS_PCF_SYS_IMAGE_GUID_SUP = 1 << 11,
- IB_UVERBS_PCF_PKEY_SW_EXT_PORT_TRAP_SUP = 1 << 12,
- IB_UVERBS_PCF_EXTENDED_SPEEDS_SUP = 1 << 14,
- IB_UVERBS_PCF_CM_SUP = 1 << 16,
- IB_UVERBS_PCF_SNMP_TUNNEL_SUP = 1 << 17,
- IB_UVERBS_PCF_REINIT_SUP = 1 << 18,
- IB_UVERBS_PCF_DEVICE_MGMT_SUP = 1 << 19,
- IB_UVERBS_PCF_VENDOR_CLASS_SUP = 1 << 20,
- IB_UVERBS_PCF_DR_NOTICE_SUP = 1 << 21,
- IB_UVERBS_PCF_CAP_MASK_NOTICE_SUP = 1 << 22,
- IB_UVERBS_PCF_BOOT_MGMT_SUP = 1 << 23,
- IB_UVERBS_PCF_LINK_LATENCY_SUP = 1 << 24,
- IB_UVERBS_PCF_CLIENT_REG_SUP = 1 << 25,
- /*
- * IsOtherLocalChangesNoticeSupported is aliased by IP_BASED_GIDS and
- * is inaccessible
- */
- IB_UVERBS_PCF_LINK_SPEED_WIDTH_TABLE_SUP = 1 << 27,
- IB_UVERBS_PCF_VENDOR_SPECIFIC_MADS_TABLE_SUP = 1 << 28,
- IB_UVERBS_PCF_MCAST_PKEY_TRAP_SUPPRESSION_SUP = 1 << 29,
- IB_UVERBS_PCF_MCAST_FDB_TOP_SUP = 1 << 30,
- IB_UVERBS_PCF_HIERARCHY_INFO_SUP = 1ULL << 31,
-
- /* NOTE this is an internal flag, not an IBA flag */
- IB_UVERBS_PCF_IP_BASED_GIDS = 1 << 26,
-};
-
-enum ib_uverbs_query_port_flags {
- IB_UVERBS_QPF_GRH_REQUIRED = 1 << 0,
-};
-
-enum ib_uverbs_flow_action_esp_keymat {
- IB_UVERBS_FLOW_ACTION_ESP_KEYMAT_AES_GCM,
-};
-
-enum ib_uverbs_flow_action_esp_keymat_aes_gcm_iv_algo {
- IB_UVERBS_FLOW_ACTION_IV_ALGO_SEQ,
-};
-
-struct ib_uverbs_flow_action_esp_keymat_aes_gcm {
- __aligned_u64 iv;
- __u32 iv_algo; /* Use enum ib_uverbs_flow_action_esp_keymat_aes_gcm_iv_algo */
-
- __u32 salt;
- __u32 icv_len;
-
- __u32 key_len;
- __u32 aes_key[256 / 32];
-};
-
-enum ib_uverbs_flow_action_esp_replay {
- IB_UVERBS_FLOW_ACTION_ESP_REPLAY_NONE,
- IB_UVERBS_FLOW_ACTION_ESP_REPLAY_BMP,
-};
-
-struct ib_uverbs_flow_action_esp_replay_bmp {
- __u32 size;
-};
-
-enum ib_uverbs_flow_action_esp_flags {
- IB_UVERBS_FLOW_ACTION_ESP_FLAGS_INLINE_CRYPTO = 0UL << 0, /* Default */
- IB_UVERBS_FLOW_ACTION_ESP_FLAGS_FULL_OFFLOAD = 1UL << 0,
-
- IB_UVERBS_FLOW_ACTION_ESP_FLAGS_TUNNEL = 0UL << 1, /* Default */
- IB_UVERBS_FLOW_ACTION_ESP_FLAGS_TRANSPORT = 1UL << 1,
-
- IB_UVERBS_FLOW_ACTION_ESP_FLAGS_DECRYPT = 0UL << 2, /* Default */
- IB_UVERBS_FLOW_ACTION_ESP_FLAGS_ENCRYPT = 1UL << 2,
-
- IB_UVERBS_FLOW_ACTION_ESP_FLAGS_ESN_NEW_WINDOW = 1UL << 3,
-};
-
-struct ib_uverbs_flow_action_esp_encap {
- /* This struct represents a list of pointers to flow_xxxx_filter that
- * encapsulates the payload in ESP tunnel mode.
- */
- RDMA_UAPI_PTR(void *, val_ptr); /* pointer to a flow_xxxx_filter */
- RDMA_UAPI_PTR(struct ib_uverbs_flow_action_esp_encap *, next_ptr);
- __u16 len; /* Len of the filter struct val_ptr points to */
- __u16 type; /* Use flow_spec_type enum */
-};
-
-struct ib_uverbs_flow_action_esp {
- __u32 spi;
- __u32 seq;
- __u32 tfc_pad;
- __u32 flags;
- __aligned_u64 hard_limit_pkts;
-};
-
-enum ib_uverbs_read_counters_flags {
- /* prefer read values from driver cache */
- IB_UVERBS_READ_COUNTERS_PREFER_CACHED = 1 << 0,
-};
-
-enum ib_uverbs_advise_mr_advice {
- IB_UVERBS_ADVISE_MR_ADVICE_PREFETCH,
- IB_UVERBS_ADVISE_MR_ADVICE_PREFETCH_WRITE,
-};
-
-enum ib_uverbs_advise_mr_flag {
- IB_UVERBS_ADVISE_MR_FLAG_FLUSH = 1 << 0,
-};
-
-struct ib_uverbs_query_port_resp_ex {
- struct ib_uverbs_query_port_resp legacy_resp;
- __u16 port_cap_flags2;
- __u8 reserved[6];
-};
-
-struct ib_uverbs_qp_cap {
- __u32 max_send_wr;
- __u32 max_recv_wr;
- __u32 max_send_sge;
- __u32 max_recv_sge;
- __u32 max_inline_data;
-};
-
-enum rdma_driver_id {
- RDMA_DRIVER_UNKNOWN,
- RDMA_DRIVER_MLX5,
- RDMA_DRIVER_MLX4,
- RDMA_DRIVER_CXGB3,
- RDMA_DRIVER_CXGB4,
- RDMA_DRIVER_MTHCA,
- RDMA_DRIVER_BNXT_RE,
- RDMA_DRIVER_OCRDMA,
- RDMA_DRIVER_NES,
- RDMA_DRIVER_I40IW,
- RDMA_DRIVER_VMW_PVRDMA,
- RDMA_DRIVER_QEDR,
- RDMA_DRIVER_HNS,
- RDMA_DRIVER_USNIC,
- RDMA_DRIVER_RXE,
- RDMA_DRIVER_HFI1,
- RDMA_DRIVER_QIB,
- RDMA_DRIVER_EFA,
- RDMA_DRIVER_SIW,
-};
-
-enum ib_uverbs_gid_type {
- IB_UVERBS_GID_TYPE_IB,
- IB_UVERBS_GID_TYPE_ROCE_V1,
- IB_UVERBS_GID_TYPE_ROCE_V2,
-};
-
-struct ib_uverbs_gid_entry {
- __aligned_u64 gid[2];
- __u32 gid_index;
- __u32 port_num;
- __u32 gid_type;
- __u32 netdev_ifindex; /* It is 0 if there is no netdev associated with it */
-};
-
-#endif
diff --git a/contrib/libs/ibdrv/include/infiniband/mlx5_api.h b/contrib/libs/ibdrv/include/infiniband/mlx5_api.h
deleted file mode 100644
index 7895591a7a..0000000000
--- a/contrib/libs/ibdrv/include/infiniband/mlx5_api.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (c) 2017, Mellanox Technologies inc. All rights reserved.
- *
- * This software is available to you under a choice of one of two
- * licenses. You may choose to be licensed under the terms of the GNU
- * General Public License (GPL) Version 2, available from the file
- * COPYING in the main directory of this source tree, or the
- * OpenIB.org BSD license below:
- *
- * Redistribution and use in source and binary forms, with or
- * without modification, are permitted provided that the following
- * conditions are met:
- *
- * - Redistributions of source code must retain the above
- * copyright notice, this list of conditions and the following
- * disclaimer.
- *
- * - Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-#ifndef MLX5_API_H
-#define MLX5_API_H
-
-#include <infiniband/mlx5_user_ioctl_verbs.h>
-
-#define mlx5dv_flow_action_flags mlx5_ib_uapi_flow_action_flags
-#define MLX5DV_FLOW_ACTION_FLAGS_REQUIRE_METADATA MLX5_IB_UAPI_FLOW_ACTION_FLAGS_REQUIRE_METADATA
-#define mlx5dv_flow_table_type mlx5_ib_uapi_flow_table_type
-#define MLX5DV_FLOW_TABLE_TYPE_NIC_RX MLX5_IB_UAPI_FLOW_TABLE_TYPE_NIC_RX
-#define MLX5DV_FLOW_TABLE_TYPE_NIC_TX MLX5_IB_UAPI_FLOW_TABLE_TYPE_NIC_TX
-#define MLX5DV_FLOW_TABLE_TYPE_FDB MLX5_IB_UAPI_FLOW_TABLE_TYPE_FDB
-#define MLX5DV_FLOW_TABLE_TYPE_RDMA_RX MLX5_IB_UAPI_FLOW_TABLE_TYPE_RDMA_RX
-#define MLX5DV_FLOW_TABLE_TYPE_RDMA_TX MLX5_IB_UAPI_FLOW_TABLE_TYPE_RDMA_TX
-#define mlx5dv_flow_action_packet_reformat_type mlx5_ib_uapi_flow_action_packet_reformat_type
-#define MLX5DV_FLOW_ACTION_PACKET_REFORMAT_TYPE_L2_TUNNEL_TO_L2 MLX5_IB_UAPI_FLOW_ACTION_PACKET_REFORMAT_TYPE_L2_TUNNEL_TO_L2
-#define MLX5DV_FLOW_ACTION_PACKET_REFORMAT_TYPE_L2_TO_L2_TUNNEL MLX5_IB_UAPI_FLOW_ACTION_PACKET_REFORMAT_TYPE_L2_TO_L2_TUNNEL
-#define MLX5DV_FLOW_ACTION_PACKET_REFORMAT_TYPE_L3_TUNNEL_TO_L2 MLX5_IB_UAPI_FLOW_ACTION_PACKET_REFORMAT_TYPE_L3_TUNNEL_TO_L2
-#define MLX5DV_FLOW_ACTION_PACKET_REFORMAT_TYPE_L2_TO_L3_TUNNEL MLX5_IB_UAPI_FLOW_ACTION_PACKET_REFORMAT_TYPE_L2_TO_L3_TUNNEL
-#define mlx5dv_devx_async_cmd_hdr mlx5_ib_uapi_devx_async_cmd_hdr
-#define mlx5dv_devx_async_event_hdr mlx5_ib_uapi_devx_async_event_hdr
-#define mlx5dv_alloc_dm_type mlx5_ib_uapi_dm_type
-#define MLX5DV_DM_TYPE_MEMIC MLX5_IB_UAPI_DM_TYPE_MEMIC
-#define MLX5DV_DM_TYPE_STEERING_SW_ICM MLX5_IB_UAPI_DM_TYPE_STEERING_SW_ICM
-#define MLX5DV_DM_TYPE_HEADER_MODIFY_SW_ICM MLX5_IB_UAPI_DM_TYPE_HEADER_MODIFY_SW_ICM
-#define MLX5DV_DM_TYPE_HEADER_MODIFY_PATTERN_SW_ICM MLX5_IB_UAPI_DM_TYPE_HEADER_MODIFY_PATTERN_SW_ICM
-#define mlx5dv_devx_create_event_channel_flags mlx5_ib_uapi_devx_create_event_channel_flags
-#define MLX5DV_DEVX_CREATE_EVENT_CHANNEL_FLAGS_OMIT_EV_DATA MLX5_IB_UAPI_DEVX_CR_EV_CH_FLAGS_OMIT_DATA
-#define MLX5DV_DEVX_PORT_VPORT MLX5_IB_UAPI_QUERY_PORT_VPORT
-#define MLX5DV_DEVX_PORT_VPORT_VHCA_ID MLX5_IB_UAPI_QUERY_PORT_VPORT_VHCA_ID
-#define MLX5DV_DEVX_PORT_ESW_OWNER_VHCA_ID MLX5_IB_UAPI_QUERY_PORT_ESW_OWNER_VHCA_ID
-#define MLX5DV_DEVX_PORT_VPORT_ICM_RX MLX5_IB_UAPI_QUERY_PORT_VPORT_ICM_RX
-#define MLX5DV_DEVX_PORT_VPORT_ICM_TX MLX5_IB_UAPI_QUERY_PORT_VPORT_ICM_TX
-#define MLX5DV_DEVX_PORT_MATCH_REG_C_0 MLX5_IB_UAPI_QUERY_PORT_MATCH_REG_C_0
-#define mlx5dv_devx_reg_32 mlx5_ib_uapi_devx_reg_32
-#define MLX5DV_PP_ALLOC_FLAGS_DEDICATED_INDEX MLX5_IB_UAPI_PP_ALLOC_FLAGS_DEDICATED_INDEX
-#define MLX5DV_UAR_ALLOC_TYPE_BF MLX5_IB_UAPI_UAR_ALLOC_TYPE_BF
-#define MLX5DV_UAR_ALLOC_TYPE_NC MLX5_IB_UAPI_UAR_ALLOC_TYPE_NC
-
-#endif
diff --git a/contrib/libs/ibdrv/include/infiniband/mlx5_user_ioctl_verbs.h b/contrib/libs/ibdrv/include/infiniband/mlx5_user_ioctl_verbs.h
deleted file mode 100644
index a1aa36abad..0000000000
--- a/contrib/libs/ibdrv/include/infiniband/mlx5_user_ioctl_verbs.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright (c) 2018, Mellanox Technologies inc. All rights reserved.
- *
- * This software is available to you under a choice of one of two
- * licenses. You may choose to be licensed under the terms of the GNU
- * General Public License (GPL) Version 2, available from the file
- * COPYING in the main directory of this source tree, or the
- * OpenIB.org BSD license below:
- *
- * Redistribution and use in source and binary forms, with or
- * without modification, are permitted provided that the following
- * conditions are met:
- *
- * - Redistributions of source code must retain the above
- * copyright notice, this list of conditions and the following
- * disclaimer.
- *
- * - Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-#ifndef MLX5_USER_IOCTL_VERBS_H
-#define MLX5_USER_IOCTL_VERBS_H
-
-#include <linux/types.h>
-
-enum mlx5_ib_uapi_flow_action_flags {
- MLX5_IB_UAPI_FLOW_ACTION_FLAGS_REQUIRE_METADATA = 1 << 0,
-};
-
-enum mlx5_ib_uapi_flow_table_type {
- MLX5_IB_UAPI_FLOW_TABLE_TYPE_NIC_RX = 0x0,
- MLX5_IB_UAPI_FLOW_TABLE_TYPE_NIC_TX = 0x1,
- MLX5_IB_UAPI_FLOW_TABLE_TYPE_FDB = 0x2,
- MLX5_IB_UAPI_FLOW_TABLE_TYPE_RDMA_RX = 0x3,
- MLX5_IB_UAPI_FLOW_TABLE_TYPE_RDMA_TX = 0x4,
-};
-
-enum mlx5_ib_uapi_flow_action_packet_reformat_type {
- MLX5_IB_UAPI_FLOW_ACTION_PACKET_REFORMAT_TYPE_L2_TUNNEL_TO_L2 = 0x0,
- MLX5_IB_UAPI_FLOW_ACTION_PACKET_REFORMAT_TYPE_L2_TO_L2_TUNNEL = 0x1,
- MLX5_IB_UAPI_FLOW_ACTION_PACKET_REFORMAT_TYPE_L3_TUNNEL_TO_L2 = 0x2,
- MLX5_IB_UAPI_FLOW_ACTION_PACKET_REFORMAT_TYPE_L2_TO_L3_TUNNEL = 0x3,
-};
-
-struct mlx5_ib_uapi_devx_async_cmd_hdr {
- __aligned_u64 wr_id;
- __u8 out_data[];
-};
-
-enum mlx5_ib_uapi_devx_query_port_comp_mask {
- MLX5_IB_UAPI_QUERY_PORT_VPORT = 1 << 0,
- MLX5_IB_UAPI_QUERY_PORT_VPORT_VHCA_ID = 1 << 1,
- MLX5_IB_UAPI_QUERY_PORT_ESW_OWNER_VHCA_ID = 1 << 2,
- MLX5_IB_UAPI_QUERY_PORT_VPORT_ICM_RX = 1 << 3,
- MLX5_IB_UAPI_QUERY_PORT_VPORT_ICM_TX = 1 << 4,
- MLX5_IB_UAPI_QUERY_PORT_MATCH_REG_C_0 = 1 << 5,
-};
-
-struct mlx5_ib_uapi_devx_reg_32 {
- __u32 value;
- __u32 mask;
-};
-
-enum mlx5_ib_uapi_dm_type {
- MLX5_IB_UAPI_DM_TYPE_MEMIC,
- MLX5_IB_UAPI_DM_TYPE_STEERING_SW_ICM,
- MLX5_IB_UAPI_DM_TYPE_HEADER_MODIFY_SW_ICM,
- MLX5_IB_UAPI_DM_TYPE_HEADER_MODIFY_PATTERN_SW_ICM,
-};
-
-enum mlx5_ib_uapi_devx_create_event_channel_flags {
- MLX5_IB_UAPI_DEVX_CR_EV_CH_FLAGS_OMIT_DATA = 1 << 0,
-};
-
-struct mlx5_ib_uapi_devx_async_event_hdr {
- __aligned_u64 cookie;
- __u8 out_data[];
-};
-
-enum mlx5_ib_uapi_pp_alloc_flags {
- MLX5_IB_UAPI_PP_ALLOC_FLAGS_DEDICATED_INDEX = 1 << 0,
-};
-
-enum mlx5_ib_uapi_uar_alloc_type {
- MLX5_IB_UAPI_UAR_ALLOC_TYPE_BF = 0x0,
- MLX5_IB_UAPI_UAR_ALLOC_TYPE_NC = 0x1,
-};
-
-#endif
-
diff --git a/contrib/libs/ibdrv/include/infiniband/mlx5dv.h b/contrib/libs/ibdrv/include/infiniband/mlx5dv.h
deleted file mode 100644
index 3d69216782..0000000000
--- a/contrib/libs/ibdrv/include/infiniband/mlx5dv.h
+++ /dev/null
@@ -1,1700 +0,0 @@
-/*
- * Copyright (c) 2017 Mellanox Technologies, Inc. All rights reserved.
- *
- * This software is available to you under a choice of one of two
- * licenses. You may choose to be licensed under the terms of the GNU
- * General Public License (GPL) Version 2, available from the file
- * COPYING in the main directory of this source tree, or the
- * OpenIB.org BSD license below:
- *
- * Redistribution and use in source and binary forms, with or
- * without modification, are permitted provided that the following
- * conditions are met:
- *
- * - Redistributions of source code must retain the above
- * copyright notice, this list of conditions and the following
- * disclaimer.
- *
- * - Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-#ifndef _MLX5DV_H_
-#define _MLX5DV_H_
-
-#include <stdio.h>
-#include <stdbool.h>
-#include <linux/types.h> /* For the __be64 type */
-#include <sys/types.h>
-#include <endian.h>
-#if defined(__SSE3__)
-#include <limits.h>
-#include <emmintrin.h>
-#include <tmmintrin.h>
-#endif /* defined(__SSE3__) */
-
-#include <infiniband/verbs.h>
-#include <infiniband/tm_types.h>
-#include <infiniband/mlx5_api.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Always inline the functions */
-#ifdef __GNUC__
-#define MLX5DV_ALWAYS_INLINE inline __attribute__((always_inline))
-#else
-#define MLX5DV_ALWAYS_INLINE inline
-#endif
-
-
-#define MLX5DV_RES_TYPE_QP ((uint64_t)RDMA_DRIVER_MLX5 << 32 | 1)
-#define MLX5DV_RES_TYPE_RWQ ((uint64_t)RDMA_DRIVER_MLX5 << 32 | 2)
-#define MLX5DV_RES_TYPE_DBR ((uint64_t)RDMA_DRIVER_MLX5 << 32 | 3)
-#define MLX5DV_RES_TYPE_SRQ ((uint64_t)RDMA_DRIVER_MLX5 << 32 | 4)
-#define MLX5DV_RES_TYPE_CQ ((uint64_t)RDMA_DRIVER_MLX5 << 32 | 5)
-
-enum {
- MLX5_RCV_DBR = 0,
- MLX5_SND_DBR = 1,
-};
-
-enum mlx5dv_context_comp_mask {
- MLX5DV_CONTEXT_MASK_CQE_COMPRESION = 1 << 0,
- MLX5DV_CONTEXT_MASK_SWP = 1 << 1,
- MLX5DV_CONTEXT_MASK_STRIDING_RQ = 1 << 2,
- MLX5DV_CONTEXT_MASK_TUNNEL_OFFLOADS = 1 << 3,
- MLX5DV_CONTEXT_MASK_DYN_BFREGS = 1 << 4,
- MLX5DV_CONTEXT_MASK_CLOCK_INFO_UPDATE = 1 << 5,
- MLX5DV_CONTEXT_MASK_FLOW_ACTION_FLAGS = 1 << 6,
- MLX5DV_CONTEXT_MASK_DC_ODP_CAPS = 1 << 7,
- MLX5DV_CONTEXT_MASK_HCA_CORE_CLOCK = 1 << 8,
- MLX5DV_CONTEXT_MASK_NUM_LAG_PORTS = 1 << 9,
-};
-
-struct mlx5dv_cqe_comp_caps {
- uint32_t max_num;
- uint32_t supported_format; /* enum mlx5dv_cqe_comp_res_format */
-};
-
-struct mlx5dv_sw_parsing_caps {
- uint32_t sw_parsing_offloads; /* Use enum mlx5dv_sw_parsing_offloads */
- uint32_t supported_qpts;
-};
-
-struct mlx5dv_striding_rq_caps {
- uint32_t min_single_stride_log_num_of_bytes;
- uint32_t max_single_stride_log_num_of_bytes;
- uint32_t min_single_wqe_log_num_of_strides;
- uint32_t max_single_wqe_log_num_of_strides;
- uint32_t supported_qpts;
-};
-
-enum mlx5dv_tunnel_offloads {
- MLX5DV_RAW_PACKET_CAP_TUNNELED_OFFLOAD_VXLAN = 1 << 0,
- MLX5DV_RAW_PACKET_CAP_TUNNELED_OFFLOAD_GRE = 1 << 1,
- MLX5DV_RAW_PACKET_CAP_TUNNELED_OFFLOAD_GENEVE = 1 << 2,
- MLX5DV_RAW_PACKET_CAP_TUNNELED_OFFLOAD_CW_MPLS_OVER_GRE = 1 << 3,
- MLX5DV_RAW_PACKET_CAP_TUNNELED_OFFLOAD_CW_MPLS_OVER_UDP = 1 << 4,
-};
-
-enum mlx5dv_flow_action_cap_flags {
- MLX5DV_FLOW_ACTION_FLAGS_ESP_AES_GCM = 1 << 0,
- MLX5DV_FLOW_ACTION_FLAGS_ESP_AES_GCM_REQ_METADATA = 1 << 1,
- MLX5DV_FLOW_ACTION_FLAGS_ESP_AES_GCM_SPI_STEERING = 1 << 2,
- MLX5DV_FLOW_ACTION_FLAGS_ESP_AES_GCM_FULL_OFFLOAD = 1 << 3,
- MLX5DV_FLOW_ACTION_FLAGS_ESP_AES_GCM_TX_IV_IS_ESN = 1 << 4,
-};
-
-struct mlx5dv_devx_port {
- uint64_t comp_mask;
- uint16_t vport_num;
- uint16_t vport_vhca_id;
- uint16_t esw_owner_vhca_id;
- uint64_t icm_addr_rx;
- uint64_t icm_addr_tx;
- struct mlx5dv_devx_reg_32 reg_c_0;
-};
-
-/*
- * Direct verbs device-specific attributes
- */
-struct mlx5dv_context {
- uint8_t version;
- uint64_t flags;
- uint64_t comp_mask;
- struct mlx5dv_cqe_comp_caps cqe_comp_caps;
- struct mlx5dv_sw_parsing_caps sw_parsing_caps;
- struct mlx5dv_striding_rq_caps striding_rq_caps;
- uint32_t tunnel_offloads_caps;
- uint32_t max_dynamic_bfregs;
- uint64_t max_clock_info_update_nsec;
- uint32_t flow_action_flags; /* use enum mlx5dv_flow_action_cap_flags */
- uint32_t dc_odp_caps; /* use enum ibv_odp_transport_cap_bits */
- void *hca_core_clock;
- uint8_t num_lag_ports;
-};
-
-enum mlx5dv_context_flags {
- /*
- * This flag indicates if CQE version 0 or 1 is needed.
- */
- MLX5DV_CONTEXT_FLAGS_CQE_V1 = (1 << 0),
- MLX5DV_CONTEXT_FLAGS_OBSOLETE = (1 << 1), /* Obsoleted, don't use */
- MLX5DV_CONTEXT_FLAGS_MPW_ALLOWED = (1 << 2),
- MLX5DV_CONTEXT_FLAGS_ENHANCED_MPW = (1 << 3),
- MLX5DV_CONTEXT_FLAGS_CQE_128B_COMP = (1 << 4), /* Support CQE 128B compression */
- MLX5DV_CONTEXT_FLAGS_CQE_128B_PAD = (1 << 5), /* Support CQE 128B padding */
- MLX5DV_CONTEXT_FLAGS_PACKET_BASED_CREDIT_MODE = (1 << 6),
-};
-
-enum mlx5dv_cq_init_attr_mask {
- MLX5DV_CQ_INIT_ATTR_MASK_COMPRESSED_CQE = 1 << 0,
- MLX5DV_CQ_INIT_ATTR_MASK_FLAGS = 1 << 1,
- MLX5DV_CQ_INIT_ATTR_MASK_CQE_SIZE = 1 << 2,
-};
-
-enum mlx5dv_cq_init_attr_flags {
- MLX5DV_CQ_INIT_ATTR_FLAGS_CQE_PAD = 1 << 0,
- MLX5DV_CQ_INIT_ATTR_FLAGS_RESERVED = 1 << 1,
-};
-
-struct mlx5dv_cq_init_attr {
- uint64_t comp_mask; /* Use enum mlx5dv_cq_init_attr_mask */
- uint8_t cqe_comp_res_format; /* Use enum mlx5dv_cqe_comp_res_format */
- uint32_t flags; /* Use enum mlx5dv_cq_init_attr_flags */
- uint16_t cqe_size; /* when MLX5DV_CQ_INIT_ATTR_MASK_CQE_SIZE set */
-};
-
-struct ibv_cq_ex *mlx5dv_create_cq(struct ibv_context *context,
- struct ibv_cq_init_attr_ex *cq_attr,
- struct mlx5dv_cq_init_attr *mlx5_cq_attr);
-
-enum mlx5dv_qp_create_flags {
- MLX5DV_QP_CREATE_TUNNEL_OFFLOADS = 1 << 0,
- MLX5DV_QP_CREATE_TIR_ALLOW_SELF_LOOPBACK_UC = 1 << 1,
- MLX5DV_QP_CREATE_TIR_ALLOW_SELF_LOOPBACK_MC = 1 << 2,
- MLX5DV_QP_CREATE_DISABLE_SCATTER_TO_CQE = 1 << 3,
- MLX5DV_QP_CREATE_ALLOW_SCATTER_TO_CQE = 1 << 4,
- MLX5DV_QP_CREATE_PACKET_BASED_CREDIT_MODE = 1 << 5,
-};
-
-enum mlx5dv_mkey_init_attr_flags {
- MLX5DV_MKEY_INIT_ATTR_FLAGS_INDIRECT = 1 << 0,
-};
-
-struct mlx5dv_mkey_init_attr {
- struct ibv_pd *pd;
- uint32_t create_flags; /* Use enum mlx5dv_mkey_init_attr_flags */
- uint16_t max_entries; /* Requested max number of pointed entries by this indirect mkey */
-};
-
-struct mlx5dv_mkey {
- uint32_t lkey;
- uint32_t rkey;
-};
-
-struct mlx5dv_mkey *mlx5dv_create_mkey(struct mlx5dv_mkey_init_attr *mkey_init_attr);
-int mlx5dv_destroy_mkey(struct mlx5dv_mkey *mkey);
-
-enum mlx5dv_qp_init_attr_mask {
- MLX5DV_QP_INIT_ATTR_MASK_QP_CREATE_FLAGS = 1 << 0,
- MLX5DV_QP_INIT_ATTR_MASK_DC = 1 << 1,
- MLX5DV_QP_INIT_ATTR_MASK_SEND_OPS_FLAGS = 1 << 2,
-};
-
-enum mlx5dv_dc_type {
- MLX5DV_DCTYPE_DCT = 1,
- MLX5DV_DCTYPE_DCI,
-};
-
-struct mlx5dv_dc_init_attr {
- enum mlx5dv_dc_type dc_type;
- uint64_t dct_access_key;
-};
-
-enum mlx5dv_qp_create_send_ops_flags {
- MLX5DV_QP_EX_WITH_MR_INTERLEAVED = 1 << 0,
- MLX5DV_QP_EX_WITH_MR_LIST = 1 << 1,
-};
-
-struct mlx5dv_qp_init_attr {
- uint64_t comp_mask; /* Use enum mlx5dv_qp_init_attr_mask */
- uint32_t create_flags; /* Use enum mlx5dv_qp_create_flags */
- struct mlx5dv_dc_init_attr dc_init_attr;
- uint64_t send_ops_flags; /* Use enum mlx5dv_qp_create_send_ops_flags */
-};
-
-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);
-
-struct mlx5dv_mr_interleaved {
- uint64_t addr;
- uint32_t bytes_count;
- uint32_t bytes_skip;
- uint32_t lkey;
-};
-
-enum mlx5dv_wc_opcode {
- MLX5DV_WC_UMR = IBV_WC_DRIVER1,
-};
-
-struct mlx5dv_qp_ex {
- uint64_t comp_mask;
- /*
- * Available just for the MLX5 DC QP type with send opcodes of type:
- * rdma, atomic and send.
- */
- void (*wr_set_dc_addr)(struct mlx5dv_qp_ex *mqp, struct ibv_ah *ah,
- uint32_t remote_dctn, uint64_t remote_dc_key);
- void (*wr_mr_interleaved)(struct mlx5dv_qp_ex *mqp,
- struct mlx5dv_mkey *mkey,
- uint32_t access_flags, /* use enum ibv_access_flags */
- uint32_t repeat_count,
- uint16_t num_interleaved,
- struct mlx5dv_mr_interleaved *data);
- void (*wr_mr_list)(struct mlx5dv_qp_ex *mqp,
- struct mlx5dv_mkey *mkey,
- uint32_t access_flags, /* use enum ibv_access_flags */
- uint16_t num_sges,
- struct ibv_sge *sge);
-};
-
-struct mlx5dv_qp_ex *mlx5dv_qp_ex_from_ibv_qp_ex(struct ibv_qp_ex *qp);
-
-int mlx5dv_query_devx_port(struct ibv_context *ctx,
- uint32_t port_num,
- struct mlx5dv_devx_port *mlx5_devx_port);
-
-static inline void mlx5dv_wr_set_dc_addr(struct mlx5dv_qp_ex *mqp,
- struct ibv_ah *ah,
- uint32_t remote_dctn,
- uint64_t remote_dc_key)
-{
- mqp->wr_set_dc_addr(mqp, ah, remote_dctn, remote_dc_key);
-}
-
-static inline void mlx5dv_wr_mr_interleaved(struct mlx5dv_qp_ex *mqp,
- struct mlx5dv_mkey *mkey,
- uint32_t access_flags,
- uint32_t repeat_count,
- uint16_t num_interleaved,
- struct mlx5dv_mr_interleaved *data)
-{
- mqp->wr_mr_interleaved(mqp, mkey, access_flags, repeat_count,
- num_interleaved, data);
-}
-
-static inline void mlx5dv_wr_mr_list(struct mlx5dv_qp_ex *mqp,
- struct mlx5dv_mkey *mkey,
- uint32_t access_flags,
- uint16_t num_sges,
- struct ibv_sge *sge)
-{
- mqp->wr_mr_list(mqp, mkey, access_flags, num_sges, sge);
-}
-
-enum mlx5dv_flow_action_esp_mask {
- MLX5DV_FLOW_ACTION_ESP_MASK_FLAGS = 1 << 0,
-};
-
-struct mlx5dv_flow_action_esp {
- uint64_t comp_mask; /* Use enum mlx5dv_flow_action_esp_mask */
- uint32_t action_flags; /* Use enum mlx5dv_flow_action_flags */
-};
-
-struct mlx5dv_flow_match_parameters {
- size_t match_sz;
- uint64_t match_buf[]; /* Device spec format */
-};
-
-enum mlx5dv_flow_matcher_attr_mask {
- MLX5DV_FLOW_MATCHER_MASK_FT_TYPE = 1 << 0,
-};
-
-struct mlx5dv_flow_matcher_attr {
- enum ibv_flow_attr_type type;
- uint32_t flags; /* From enum ibv_flow_flags */
- uint16_t priority;
- uint8_t match_criteria_enable; /* Device spec format */
- struct mlx5dv_flow_match_parameters *match_mask;
- uint64_t comp_mask; /* use mlx5dv_flow_matcher_attr_mask */
- enum mlx5dv_flow_table_type ft_type;
-};
-
-struct mlx5dv_flow_matcher;
-
-struct mlx5dv_flow_matcher *
-mlx5dv_create_flow_matcher(struct ibv_context *context,
- struct mlx5dv_flow_matcher_attr *matcher_attr);
-
-int mlx5dv_destroy_flow_matcher(struct mlx5dv_flow_matcher *matcher);
-
-enum mlx5dv_flow_action_type {
- MLX5DV_FLOW_ACTION_DEST_IBV_QP,
- MLX5DV_FLOW_ACTION_DROP,
- MLX5DV_FLOW_ACTION_IBV_COUNTER,
- MLX5DV_FLOW_ACTION_IBV_FLOW_ACTION,
- MLX5DV_FLOW_ACTION_TAG,
- MLX5DV_FLOW_ACTION_DEST_DEVX,
- MLX5DV_FLOW_ACTION_COUNTERS_DEVX,
- MLX5DV_FLOW_ACTION_DEFAULT_MISS,
-};
-
-struct mlx5dv_flow_action_attr {
- enum mlx5dv_flow_action_type type;
- union {
- struct ibv_qp *qp;
- struct ibv_counters *counter;
- struct ibv_flow_action *action;
- uint32_t tag_value;
- struct mlx5dv_devx_obj *obj;
- };
-};
-
-struct ibv_flow *
-mlx5dv_create_flow(struct mlx5dv_flow_matcher *matcher,
- struct mlx5dv_flow_match_parameters *match_value,
- size_t num_actions,
- struct mlx5dv_flow_action_attr actions_attr[]);
-
-struct ibv_flow_action *mlx5dv_create_flow_action_esp(struct ibv_context *ctx,
- struct ibv_flow_action_esp_attr *esp,
- struct mlx5dv_flow_action_esp *mlx5_attr);
-
-/*
- * mlx5dv_create_flow_action_modify_header - Create a flow action which mutates
- * a packet. The flow action can be attached to steering rules via
- * ibv_create_flow().
- *
- * @ctx: RDMA device context to create the action on.
- * @actions_sz: The size of *actions* buffer in bytes.
- * @actions: A buffer which contains modify actions provided in device spec
- * format.
- * @ft_type: Defines the flow table type to which the modify
- * header action will be attached.
- *
- * Return a valid ibv_flow_action if successful, NULL otherwise.
- */
-struct ibv_flow_action *
-mlx5dv_create_flow_action_modify_header(struct ibv_context *ctx,
- size_t actions_sz,
- uint64_t actions[],
- enum mlx5dv_flow_table_type ft_type);
-
-/*
- * mlx5dv_create_flow_action_packet_reformat - Create flow action which can
- * encap/decap packets.
- */
-struct ibv_flow_action *
-mlx5dv_create_flow_action_packet_reformat(struct ibv_context *ctx,
- size_t data_sz,
- void *data,
- enum mlx5dv_flow_action_packet_reformat_type reformat_type,
- enum mlx5dv_flow_table_type ft_type);
-/*
- * Most device capabilities are exported by ibv_query_device(...),
- * but there is HW device-specific information which is important
- * for data-path, but isn't provided.
- *
- * Return 0 on success.
- */
-int mlx5dv_query_device(struct ibv_context *ctx_in,
- struct mlx5dv_context *attrs_out);
-
-enum mlx5dv_qp_comp_mask {
- MLX5DV_QP_MASK_UAR_MMAP_OFFSET = 1 << 0,
- MLX5DV_QP_MASK_RAW_QP_HANDLES = 1 << 1,
- MLX5DV_QP_MASK_RAW_QP_TIR_ADDR = 1 << 2,
-};
-
-struct mlx5dv_qp {
- __be32 *dbrec;
- struct {
- void *buf;
- uint32_t wqe_cnt;
- uint32_t stride;
- } sq;
- struct {
- void *buf;
- uint32_t wqe_cnt;
- uint32_t stride;
- } rq;
- struct {
- void *reg;
- uint32_t size;
- } bf;
- uint64_t comp_mask;
- off_t uar_mmap_offset;
- uint32_t tirn;
- uint32_t tisn;
- uint32_t rqn;
- uint32_t sqn;
- uint64_t tir_icm_addr;
-};
-
-struct mlx5dv_cq {
- void *buf;
- __be32 *dbrec;
- uint32_t cqe_cnt;
- uint32_t cqe_size;
- void *cq_uar;
- uint32_t cqn;
- uint64_t comp_mask;
-};
-
-enum mlx5dv_srq_comp_mask {
- MLX5DV_SRQ_MASK_SRQN = 1 << 0,
-};
-
-struct mlx5dv_srq {
- void *buf;
- __be32 *dbrec;
- uint32_t stride;
- uint32_t head;
- uint32_t tail;
- uint64_t comp_mask;
- uint32_t srqn;
-};
-
-struct mlx5dv_rwq {
- void *buf;
- __be32 *dbrec;
- uint32_t wqe_cnt;
- uint32_t stride;
- uint64_t comp_mask;
-};
-
-struct mlx5dv_alloc_dm_attr {
- enum mlx5dv_alloc_dm_type type;
- uint64_t comp_mask;
-};
-
-enum mlx5dv_dm_comp_mask {
- MLX5DV_DM_MASK_REMOTE_VA = 1 << 0,
-};
-
-struct mlx5dv_dm {
- void *buf;
- uint64_t length;
- uint64_t comp_mask;
- uint64_t remote_va;
-};
-
-struct ibv_dm *mlx5dv_alloc_dm(struct ibv_context *context,
- struct ibv_alloc_dm_attr *dm_attr,
- struct mlx5dv_alloc_dm_attr *mlx5_dm_attr);
-
-struct mlx5_wqe_av;
-
-struct mlx5dv_ah {
- struct mlx5_wqe_av *av;
- uint64_t comp_mask;
-};
-
-struct mlx5dv_pd {
- uint32_t pdn;
- uint64_t comp_mask;
-};
-
-struct mlx5dv_obj {
- struct {
- struct ibv_qp *in;
- struct mlx5dv_qp *out;
- } qp;
- struct {
- struct ibv_cq *in;
- struct mlx5dv_cq *out;
- } cq;
- struct {
- struct ibv_srq *in;
- struct mlx5dv_srq *out;
- } srq;
- struct {
- struct ibv_wq *in;
- struct mlx5dv_rwq *out;
- } rwq;
- struct {
- struct ibv_dm *in;
- struct mlx5dv_dm *out;
- } dm;
- struct {
- struct ibv_ah *in;
- struct mlx5dv_ah *out;
- } ah;
- struct {
- struct ibv_pd *in;
- struct mlx5dv_pd *out;
- } pd;
-};
-
-enum mlx5dv_obj_type {
- MLX5DV_OBJ_QP = 1 << 0,
- MLX5DV_OBJ_CQ = 1 << 1,
- MLX5DV_OBJ_SRQ = 1 << 2,
- MLX5DV_OBJ_RWQ = 1 << 3,
- MLX5DV_OBJ_DM = 1 << 4,
- MLX5DV_OBJ_AH = 1 << 5,
- MLX5DV_OBJ_PD = 1 << 6,
-};
-
-enum mlx5dv_wq_init_attr_mask {
- MLX5DV_WQ_INIT_ATTR_MASK_STRIDING_RQ = 1 << 0,
-};
-
-struct mlx5dv_striding_rq_init_attr {
- uint32_t single_stride_log_num_of_bytes;
- uint32_t single_wqe_log_num_of_strides;
- uint8_t two_byte_shift_en;
-};
-
-struct mlx5dv_wq_init_attr {
- uint64_t comp_mask; /* Use enum mlx5dv_wq_init_attr_mask */
- struct mlx5dv_striding_rq_init_attr striding_rq_attrs;
-};
-
-/*
- * This function creates a work queue object with extra properties
- * defined by mlx5dv_wq_init_attr struct.
- *
- * For each bit in the comp_mask, a field in mlx5dv_wq_init_attr
- * should follow.
- *
- * MLX5DV_WQ_INIT_ATTR_MASK_STRIDING_RQ: Create a work queue with
- * striding RQ capabilities.
- * - single_stride_log_num_of_bytes represents the size of each stride in the
- * WQE and its value should be between min_single_stride_log_num_of_bytes
- * and max_single_stride_log_num_of_bytes that are reported in
- * mlx5dv_query_device.
- * - single_wqe_log_num_of_strides represents the number of strides in each WQE.
- * Its value should be between min_single_wqe_log_num_of_strides and
- * max_single_wqe_log_num_of_strides that are reported in mlx5dv_query_device.
- * - two_byte_shift_en: When enabled, hardware pads 2 bytes of zeroes
- * before writing the message to memory (e.g. for IP alignment)
- */
-struct ibv_wq *mlx5dv_create_wq(struct ibv_context *context,
- struct ibv_wq_init_attr *wq_init_attr,
- struct mlx5dv_wq_init_attr *mlx5_wq_attr);
-/*
- * This function will initialize mlx5dv_xxx structs based on supplied type.
- * The information for initialization is taken from ibv_xx structs supplied
- * as part of input.
- *
- * Request information of CQ marks its owned by DV for all consumer index
- * related actions.
- *
- * The initialization type can be combination of several types together.
- *
- * Return: 0 in case of success.
- */
-int mlx5dv_init_obj(struct mlx5dv_obj *obj, uint64_t obj_type);
-
-enum {
- MLX5_OPCODE_NOP = 0x00,
- MLX5_OPCODE_SEND_INVAL = 0x01,
- MLX5_OPCODE_RDMA_WRITE = 0x08,
- MLX5_OPCODE_RDMA_WRITE_IMM = 0x09,
- MLX5_OPCODE_SEND = 0x0a,
- MLX5_OPCODE_SEND_IMM = 0x0b,
- MLX5_OPCODE_TSO = 0x0e,
- MLX5_OPCODE_RDMA_READ = 0x10,
- MLX5_OPCODE_ATOMIC_CS = 0x11,
- MLX5_OPCODE_ATOMIC_FA = 0x12,
- MLX5_OPCODE_ATOMIC_MASKED_CS = 0x14,
- MLX5_OPCODE_ATOMIC_MASKED_FA = 0x15,
- MLX5_OPCODE_FMR = 0x19,
- MLX5_OPCODE_LOCAL_INVAL = 0x1b,
- MLX5_OPCODE_CONFIG_CMD = 0x1f,
- MLX5_OPCODE_UMR = 0x25,
- MLX5_OPCODE_TAG_MATCHING = 0x28,
- MLX5_OPCODE_FLOW_TBL_ACCESS = 0x2c,
-};
-
-/*
- * CQE related part
- */
-
-enum {
- MLX5_INLINE_SCATTER_32 = 0x4,
- MLX5_INLINE_SCATTER_64 = 0x8,
-};
-
-enum {
- MLX5_CQE_SYNDROME_LOCAL_LENGTH_ERR = 0x01,
- MLX5_CQE_SYNDROME_LOCAL_QP_OP_ERR = 0x02,
- MLX5_CQE_SYNDROME_LOCAL_PROT_ERR = 0x04,
- MLX5_CQE_SYNDROME_WR_FLUSH_ERR = 0x05,
- MLX5_CQE_SYNDROME_MW_BIND_ERR = 0x06,
- MLX5_CQE_SYNDROME_BAD_RESP_ERR = 0x10,
- MLX5_CQE_SYNDROME_LOCAL_ACCESS_ERR = 0x11,
- MLX5_CQE_SYNDROME_REMOTE_INVAL_REQ_ERR = 0x12,
- MLX5_CQE_SYNDROME_REMOTE_ACCESS_ERR = 0x13,
- MLX5_CQE_SYNDROME_REMOTE_OP_ERR = 0x14,
- MLX5_CQE_SYNDROME_TRANSPORT_RETRY_EXC_ERR = 0x15,
- MLX5_CQE_SYNDROME_RNR_RETRY_EXC_ERR = 0x16,
- MLX5_CQE_SYNDROME_REMOTE_ABORTED_ERR = 0x22,
-};
-
-enum {
- MLX5_CQE_VENDOR_SYNDROME_ODP_PFAULT = 0x93,
-};
-
-enum {
- MLX5_CQE_L2_OK = 1 << 0,
- MLX5_CQE_L3_OK = 1 << 1,
- MLX5_CQE_L4_OK = 1 << 2,
-};
-
-enum {
- MLX5_CQE_L3_HDR_TYPE_NONE = 0x0,
- MLX5_CQE_L3_HDR_TYPE_IPV6 = 0x1,
- MLX5_CQE_L3_HDR_TYPE_IPV4 = 0x2,
-};
-
-enum {
- MLX5_CQE_OWNER_MASK = 1,
- MLX5_CQE_REQ = 0,
- MLX5_CQE_RESP_WR_IMM = 1,
- MLX5_CQE_RESP_SEND = 2,
- MLX5_CQE_RESP_SEND_IMM = 3,
- MLX5_CQE_RESP_SEND_INV = 4,
- MLX5_CQE_RESIZE_CQ = 5,
- MLX5_CQE_NO_PACKET = 6,
- MLX5_CQE_REQ_ERR = 13,
- MLX5_CQE_RESP_ERR = 14,
- MLX5_CQE_INVALID = 15,
-};
-
-enum {
- MLX5_CQ_DOORBELL = 0x20
-};
-
-enum {
- MLX5_CQ_DB_REQ_NOT_SOL = 1 << 24,
- MLX5_CQ_DB_REQ_NOT = 0 << 24,
-};
-
-struct mlx5_err_cqe {
- uint8_t rsvd0[32];
- uint32_t srqn;
- uint8_t rsvd1[18];
- uint8_t vendor_err_synd;
- uint8_t syndrome;
- uint32_t s_wqe_opcode_qpn;
- uint16_t wqe_counter;
- uint8_t signature;
- uint8_t op_own;
-};
-
-struct mlx5_tm_cqe {
- __be32 success;
- __be16 hw_phase_cnt;
- uint8_t rsvd0[12];
-};
-
-struct mlx5_cqe64 {
- union {
- struct {
- uint8_t rsvd0[2];
- __be16 wqe_id;
- uint8_t rsvd4[13];
- uint8_t ml_path;
- uint8_t rsvd20[4];
- __be16 slid;
- __be32 flags_rqpn;
- uint8_t hds_ip_ext;
- uint8_t l4_hdr_type_etc;
- __be16 vlan_info;
- };
- struct mlx5_tm_cqe tm_cqe;
- /* TMH is scattered to CQE upon match */
- struct ibv_tmh tmh;
- };
- __be32 srqn_uidx;
- __be32 imm_inval_pkey;
- uint8_t app;
- uint8_t app_op;
- __be16 app_info;
- __be32 byte_cnt;
- __be64 timestamp;
- __be32 sop_drop_qpn;
- __be16 wqe_counter;
- uint8_t signature;
- uint8_t op_own;
-};
-
-enum {
- MLX5_TMC_SUCCESS = 0x80000000U,
-};
-
-enum mlx5dv_cqe_comp_res_format {
- MLX5DV_CQE_RES_FORMAT_HASH = 1 << 0,
- MLX5DV_CQE_RES_FORMAT_CSUM = 1 << 1,
- MLX5DV_CQE_RES_FORMAT_CSUM_STRIDX = 1 << 2,
-};
-
-enum mlx5dv_sw_parsing_offloads {
- MLX5DV_SW_PARSING = 1 << 0,
- MLX5DV_SW_PARSING_CSUM = 1 << 1,
- MLX5DV_SW_PARSING_LSO = 1 << 2,
-};
-
-static MLX5DV_ALWAYS_INLINE
-uint8_t mlx5dv_get_cqe_owner(struct mlx5_cqe64 *cqe)
-{
- return cqe->op_own & 0x1;
-}
-
-static MLX5DV_ALWAYS_INLINE
-void mlx5dv_set_cqe_owner(struct mlx5_cqe64 *cqe, uint8_t val)
-{
- cqe->op_own = (val & 0x1) | (cqe->op_own & ~0x1);
-}
-
-/* Solicited event */
-static MLX5DV_ALWAYS_INLINE
-uint8_t mlx5dv_get_cqe_se(struct mlx5_cqe64 *cqe)
-{
- return (cqe->op_own >> 1) & 0x1;
-}
-
-static MLX5DV_ALWAYS_INLINE
-uint8_t mlx5dv_get_cqe_format(struct mlx5_cqe64 *cqe)
-{
- return (cqe->op_own >> 2) & 0x3;
-}
-
-static MLX5DV_ALWAYS_INLINE
-uint8_t mlx5dv_get_cqe_opcode(struct mlx5_cqe64 *cqe)
-{
- return cqe->op_own >> 4;
-}
-
-/*
- * WQE related part
- */
-enum {
- MLX5_INVALID_LKEY = 0x100,
-};
-
-enum {
- MLX5_EXTENDED_UD_AV = 0x80000000,
-};
-
-enum {
- MLX5_WQE_CTRL_CQ_UPDATE = 2 << 2,
- MLX5_WQE_CTRL_SOLICITED = 1 << 1,
- MLX5_WQE_CTRL_FENCE = 4 << 5,
- MLX5_WQE_CTRL_INITIATOR_SMALL_FENCE = 1 << 5,
-};
-
-enum {
- MLX5_SEND_WQE_BB = 64,
- MLX5_SEND_WQE_SHIFT = 6,
-};
-
-enum {
- MLX5_INLINE_SEG = 0x80000000,
-};
-
-enum {
- MLX5_ETH_WQE_L3_CSUM = (1 << 6),
- MLX5_ETH_WQE_L4_CSUM = (1 << 7),
-};
-
-struct mlx5_wqe_srq_next_seg {
- uint8_t rsvd0[2];
- __be16 next_wqe_index;
- uint8_t signature;
- uint8_t rsvd1[11];
-};
-
-struct mlx5_wqe_data_seg {
- __be32 byte_count;
- __be32 lkey;
- __be64 addr;
-};
-
-struct mlx5_wqe_ctrl_seg {
- __be32 opmod_idx_opcode;
- __be32 qpn_ds;
- uint8_t signature;
- uint8_t rsvd[2];
- uint8_t fm_ce_se;
- __be32 imm;
-};
-
-struct mlx5_wqe_flow_update_ctrl_seg {
- __be32 flow_idx_update;
- __be32 dest_handle;
- uint8_t reserved0[40];
-};
-
-struct mlx5_wqe_header_modify_argument_update_seg {
- uint8_t argument_list[64];
-};
-
-struct mlx5_mprq_wqe {
- struct mlx5_wqe_srq_next_seg nseg;
- struct mlx5_wqe_data_seg dseg;
-};
-
-struct mlx5_wqe_av {
- union {
- struct {
- __be32 qkey;
- __be32 reserved;
- } qkey;
- __be64 dc_key;
- } key;
- __be32 dqp_dct;
- uint8_t stat_rate_sl;
- uint8_t fl_mlid;
- __be16 rlid;
- uint8_t reserved0[4];
- uint8_t rmac[6];
- uint8_t tclass;
- uint8_t hop_limit;
- __be32 grh_gid_fl;
- uint8_t rgid[16];
-};
-
-struct mlx5_wqe_datagram_seg {
- struct mlx5_wqe_av av;
-};
-
-struct mlx5_wqe_raddr_seg {
- __be64 raddr;
- __be32 rkey;
- __be32 reserved;
-};
-
-struct mlx5_wqe_atomic_seg {
- __be64 swap_add;
- __be64 compare;
-};
-
-struct mlx5_wqe_inl_data_seg {
- uint32_t byte_count;
-};
-
-struct mlx5_wqe_eth_seg {
- __be32 rsvd0;
- uint8_t cs_flags;
- uint8_t rsvd1;
- __be16 mss;
- __be32 rsvd2;
- __be16 inline_hdr_sz;
- uint8_t inline_hdr_start[2];
- uint8_t inline_hdr[16];
-};
-
-struct mlx5_wqe_tm_seg {
- uint8_t opcode;
- uint8_t flags;
- __be16 index;
- uint8_t rsvd0[2];
- __be16 sw_cnt;
- uint8_t rsvd1[8];
- __be64 append_tag;
- __be64 append_mask;
-};
-
-enum {
- MLX5_WQE_UMR_CTRL_FLAG_INLINE = 1 << 7,
- MLX5_WQE_UMR_CTRL_FLAG_CHECK_FREE = 1 << 5,
- MLX5_WQE_UMR_CTRL_FLAG_TRNSLATION_OFFSET = 1 << 4,
- MLX5_WQE_UMR_CTRL_FLAG_CHECK_QPN = 1 << 3,
-};
-
-enum {
- MLX5_WQE_UMR_CTRL_MKEY_MASK_LEN = 1 << 0,
- MLX5_WQE_UMR_CTRL_MKEY_MASK_START_ADDR = 1 << 6,
- MLX5_WQE_UMR_CTRL_MKEY_MASK_MKEY = 1 << 13,
- MLX5_WQE_UMR_CTRL_MKEY_MASK_QPN = 1 << 14,
- MLX5_WQE_UMR_CTRL_MKEY_MASK_ACCESS_LOCAL_WRITE = 1 << 18,
- MLX5_WQE_UMR_CTRL_MKEY_MASK_ACCESS_REMOTE_READ = 1 << 19,
- MLX5_WQE_UMR_CTRL_MKEY_MASK_ACCESS_REMOTE_WRITE = 1 << 20,
- MLX5_WQE_UMR_CTRL_MKEY_MASK_ACCESS_ATOMIC = 1 << 21,
- MLX5_WQE_UMR_CTRL_MKEY_MASK_FREE = 1 << 29,
-};
-
-struct mlx5_wqe_umr_ctrl_seg {
- uint8_t flags;
- uint8_t rsvd0[3];
- __be16 klm_octowords;
- __be16 translation_offset;
- __be64 mkey_mask;
- uint8_t rsvd1[32];
-};
-
-struct mlx5_wqe_umr_klm_seg {
- /* up to 2GB */
- __be32 byte_count;
- __be32 mkey;
- __be64 address;
-};
-
-union mlx5_wqe_umr_inline_seg {
- struct mlx5_wqe_umr_klm_seg klm;
-};
-
-struct mlx5_wqe_umr_repeat_ent_seg {
- __be16 stride;
- __be16 byte_count;
- __be32 memkey;
- __be64 va;
-};
-
-struct mlx5_wqe_umr_repeat_block_seg {
- __be32 byte_count;
- __be32 op;
- __be32 repeat_count;
- __be16 reserved;
- __be16 num_ent;
- struct mlx5_wqe_umr_repeat_ent_seg entries[0];
-};
-
-enum {
- MLX5_WQE_MKEY_CONTEXT_FREE = 1 << 6
-};
-
-enum {
- MLX5_WQE_MKEY_CONTEXT_ACCESS_FLAGS_ATOMIC = 1 << 6,
- MLX5_WQE_MKEY_CONTEXT_ACCESS_FLAGS_REMOTE_WRITE = 1 << 5,
- MLX5_WQE_MKEY_CONTEXT_ACCESS_FLAGS_REMOTE_READ = 1 << 4,
- MLX5_WQE_MKEY_CONTEXT_ACCESS_FLAGS_LOCAL_WRITE = 1 << 3,
- MLX5_WQE_MKEY_CONTEXT_ACCESS_FLAGS_LOCAL_READ = 1 << 2
-};
-
-struct mlx5_wqe_mkey_context_seg {
- uint8_t free;
- uint8_t reserved1;
- uint8_t access_flags;
- uint8_t sf;
- __be32 qpn_mkey;
- __be32 reserved2;
- __be32 flags_pd;
- __be64 start_addr;
- __be64 len;
- __be32 bsf_octword_size;
- __be32 reserved3[4];
- __be32 translations_octword_size;
- uint8_t reserved4[3];
- uint8_t log_page_size;
- __be32 reserved;
- union mlx5_wqe_umr_inline_seg inseg[0];
-};
-
-/*
- * Control segment - contains some control information for the current WQE.
- *
- * Output:
- * seg - control segment to be filled
- * Input:
- * pi - WQEBB number of the first block of this WQE.
- * This number should wrap at 0xffff, regardless of
- * size of the WQ.
- * opcode - Opcode of this WQE. Encodes the type of operation
- * to be executed on the QP.
- * opmod - Opcode modifier.
- * qp_num - QP/SQ number this WQE is posted to.
- * fm_ce_se - FM (fence mode), CE (completion and event mode)
- * and SE (solicited event).
- * ds - WQE size in octowords (16-byte units). DS accounts for all
- * the segments in the WQE as summarized in WQE construction.
- * signature - WQE signature.
- * imm - Immediate data/Invalidation key/UMR mkey.
- */
-static MLX5DV_ALWAYS_INLINE
-void mlx5dv_set_ctrl_seg(struct mlx5_wqe_ctrl_seg *seg, uint16_t pi,
- uint8_t opcode, uint8_t opmod, uint32_t qp_num,
- uint8_t fm_ce_se, uint8_t ds,
- uint8_t signature, uint32_t imm)
-{
- seg->opmod_idx_opcode = htobe32(((uint32_t)opmod << 24) | ((uint32_t)pi << 8) | opcode);
- seg->qpn_ds = htobe32((qp_num << 8) | ds);
- seg->fm_ce_se = fm_ce_se;
- seg->signature = signature;
- /*
- * The caller should prepare "imm" in advance based on WR opcode.
- * For IBV_WR_SEND_WITH_IMM and IBV_WR_RDMA_WRITE_WITH_IMM,
- * the "imm" should be assigned as is.
- * For the IBV_WR_SEND_WITH_INV, it should be htobe32(imm).
- */
- seg->imm = imm;
-}
-
-/* x86 optimized version of mlx5dv_set_ctrl_seg()
- *
- * This is useful when doing calculations on large data sets
- * for parallel calculations.
- *
- * It doesn't suit for serialized algorithms.
- */
-#if defined(__SSE3__)
-static MLX5DV_ALWAYS_INLINE
-void mlx5dv_x86_set_ctrl_seg(struct mlx5_wqe_ctrl_seg *seg, uint16_t pi,
- uint8_t opcode, uint8_t opmod, uint32_t qp_num,
- uint8_t fm_ce_se, uint8_t ds,
- uint8_t signature, uint32_t imm)
-{
- __m128i val = _mm_set_epi32(imm, qp_num, (ds << 16) | pi,
- (signature << 24) | (opcode << 16) | (opmod << 8) | fm_ce_se);
- __m128i mask = _mm_set_epi8(15, 14, 13, 12, /* immediate */
- 0, /* signal/fence_mode */
-#if CHAR_MIN
- -128, -128, /* reserved */
-#else
- 0x80, 0x80, /* reserved */
-#endif
- 3, /* signature */
- 6, /* data size */
- 8, 9, 10, /* QP num */
- 2, /* opcode */
- 4, 5, /* sw_pi in BE */
- 1 /* opmod */
- );
- *(__m128i *) seg = _mm_shuffle_epi8(val, mask);
-}
-#endif /* defined(__SSE3__) */
-
-/*
- * Datagram Segment - contains address information required in order
- * to form a datagram message.
- *
- * Output:
- * seg - datagram segment to be filled.
- * Input:
- * key - Q_key/access key.
- * dqp_dct - Destination QP number for UD and DCT for DC.
- * ext - Address vector extension.
- * stat_rate_sl - Maximum static rate control, SL/ethernet priority.
- * fl_mlid - Force loopback and source LID for IB.
- * rlid - Remote LID
- * rmac - Remote MAC
- * tclass - GRH tclass/IPv6 tclass/IPv4 ToS
- * hop_limit - GRH hop limit/IPv6 hop limit/IPv4 TTL
- * grh_gid_fi - GRH, source GID address and IPv6 flow label.
- * rgid - Remote GID/IP address.
- */
-static MLX5DV_ALWAYS_INLINE
-void mlx5dv_set_dgram_seg(struct mlx5_wqe_datagram_seg *seg,
- uint64_t key, uint32_t dqp_dct,
- uint8_t ext, uint8_t stat_rate_sl,
- uint8_t fl_mlid, uint16_t rlid,
- uint8_t *rmac, uint8_t tclass,
- uint8_t hop_limit, uint32_t grh_gid_fi,
- uint8_t *rgid)
-{
-
- /* Always put 64 bits, in q_key, the reserved part will be 0 */
- seg->av.key.dc_key = htobe64(key);
- seg->av.dqp_dct = htobe32(((uint32_t)ext << 31) | dqp_dct);
- seg->av.stat_rate_sl = stat_rate_sl;
- seg->av.fl_mlid = fl_mlid;
- seg->av.rlid = htobe16(rlid);
- memcpy(seg->av.rmac, rmac, 6);
- seg->av.tclass = tclass;
- seg->av.hop_limit = hop_limit;
- seg->av.grh_gid_fl = htobe32(grh_gid_fi);
- memcpy(seg->av.rgid, rgid, 16);
-}
-
-/*
- * Data Segments - contain pointers and a byte count for the scatter/gather list.
- * They can optionally contain data, which will save a memory read access for
- * gather Work Requests.
- */
-static MLX5DV_ALWAYS_INLINE
-void mlx5dv_set_data_seg(struct mlx5_wqe_data_seg *seg,
- uint32_t length, uint32_t lkey,
- uintptr_t address)
-{
- seg->byte_count = htobe32(length);
- seg->lkey = htobe32(lkey);
- seg->addr = htobe64(address);
-}
-/*
- * x86 optimized version of mlx5dv_set_data_seg()
- *
- * This is useful when doing calculations on large data sets
- * for parallel calculations.
- *
- * It doesn't suit for serialized algorithms.
- */
-#if defined(__SSE3__)
-static MLX5DV_ALWAYS_INLINE
-void mlx5dv_x86_set_data_seg(struct mlx5_wqe_data_seg *seg,
- uint32_t length, uint32_t lkey,
- uintptr_t address)
-{
-
- uint64_t address64 = address;
- __m128i val = _mm_set_epi32((uint32_t)address64, (uint32_t)(address64 >> 32), lkey, length);
- __m128i mask = _mm_set_epi8(12, 13, 14, 15, /* local address low */
- 8, 9, 10, 11, /* local address high */
- 4, 5, 6, 7, /* l_key */
- 0, 1, 2, 3 /* byte count */
- );
- *(__m128i *) seg = _mm_shuffle_epi8(val, mask);
-}
-#endif /* defined(__SSE3__) */
-
-/*
- * Eth Segment - contains packet headers and information for stateless L2, L3, L4 offloading.
- *
- * Output:
- * seg - Eth segment to be filled.
- * Input:
- * cs_flags - l3cs/l3cs_inner/l4cs/l4cs_inner.
- * mss - Maximum segment size. For TSO WQEs, the number of bytes
- * in the TCP payload to be transmitted in each packet. Must
- * be 0 on non TSO WQEs.
- * inline_hdr_sz - Length of the inlined packet headers.
- * inline_hdr_start - Inlined packet header.
- */
-static MLX5DV_ALWAYS_INLINE
-void mlx5dv_set_eth_seg(struct mlx5_wqe_eth_seg *seg, uint8_t cs_flags,
- uint16_t mss, uint16_t inline_hdr_sz,
- uint8_t *inline_hdr_start)
-{
- seg->cs_flags = cs_flags;
- seg->mss = htobe16(mss);
- seg->inline_hdr_sz = htobe16(inline_hdr_sz);
- memcpy(seg->inline_hdr_start, inline_hdr_start, inline_hdr_sz);
-}
-
-enum mlx5dv_set_ctx_attr_type {
- MLX5DV_CTX_ATTR_BUF_ALLOCATORS = 1,
-};
-
-enum {
- MLX5_MMAP_GET_REGULAR_PAGES_CMD = 0,
- MLX5_MMAP_GET_NC_PAGES_CMD = 3,
-};
-
-struct mlx5dv_ctx_allocators {
- void *(*alloc)(size_t size, void *priv_data);
- void (*free)(void *ptr, void *priv_data);
- void *data;
-};
-
-/*
- * Generic context attributes set API
- *
- * Returns 0 on success, or the value of errno on failure
- * (which indicates the failure reason).
- */
-int mlx5dv_set_context_attr(struct ibv_context *context,
- enum mlx5dv_set_ctx_attr_type type, void *attr);
-
-struct mlx5dv_clock_info {
- uint64_t nsec;
- uint64_t last_cycles;
- uint64_t frac;
- uint32_t mult;
- uint32_t shift;
- uint64_t mask;
-};
-
-/*
- * Get mlx5 core clock info
- *
- * Output:
- * clock_info - clock info to be filled
- * Input:
- * context - device context
- *
- * Return: 0 on success, or the value of errno on failure
- */
-int mlx5dv_get_clock_info(struct ibv_context *context,
- struct mlx5dv_clock_info *clock_info);
-
-/*
- * Translate device timestamp to nano-sec
- *
- * Input:
- * clock_info - clock info to be filled
- * device_timestamp - timestamp to translate
- *
- * Return: nano-sec
- */
-static inline uint64_t mlx5dv_ts_to_ns(struct mlx5dv_clock_info *clock_info,
- uint64_t device_timestamp)
-{
- uint64_t delta, nsec;
-
- /*
- * device_timestamp & cycles are the free running 'mask' bit counters
- * from the hardware hca_core_clock clock.
- */
- delta = (device_timestamp - clock_info->last_cycles) & clock_info->mask;
- nsec = clock_info->nsec;
-
- /*
- * Guess if the device_timestamp is more recent than
- * clock_info->last_cycles, if not (too far in the future) treat
- * it as old time stamp. This will break every max_clock_info_update_nsec.
- */
-
- if (delta > clock_info->mask / 2) {
- delta = (clock_info->last_cycles - device_timestamp) &
- clock_info->mask;
- nsec -= ((delta * clock_info->mult) - clock_info->frac) >>
- clock_info->shift;
- } else {
- nsec += ((delta * clock_info->mult) + clock_info->frac) >>
- clock_info->shift;
- }
-
- return nsec;
-}
-
-enum mlx5dv_context_attr_flags {
- MLX5DV_CONTEXT_FLAGS_DEVX = 1 << 0,
-};
-
-struct mlx5dv_context_attr {
- uint32_t flags; /* Use enum mlx5dv_context_attr_flags */
- uint64_t comp_mask;
-};
-
-bool mlx5dv_is_supported(struct ibv_device *device);
-
-struct ibv_context *
-mlx5dv_open_device(struct ibv_device *device, struct mlx5dv_context_attr *attr);
-
-struct mlx5dv_devx_obj;
-
-struct mlx5dv_devx_obj *
-mlx5dv_devx_obj_create(struct ibv_context *context, const void *in, size_t inlen,
- void *out, size_t outlen);
-int mlx5dv_devx_obj_query(struct mlx5dv_devx_obj *obj, const void *in, size_t inlen,
- void *out, size_t outlen);
-int mlx5dv_devx_obj_modify(struct mlx5dv_devx_obj *obj, const void *in, size_t inlen,
- void *out, size_t outlen);
-int mlx5dv_devx_obj_destroy(struct mlx5dv_devx_obj *obj);
-int mlx5dv_devx_general_cmd(struct ibv_context *context, const void *in, size_t inlen,
- void *out, size_t outlen);
-
-struct mlx5dv_devx_umem {
- uint32_t umem_id;
-};
-
-struct mlx5dv_devx_umem *
-mlx5dv_devx_umem_reg(struct ibv_context *ctx, void *addr, size_t size, uint32_t access);
-int mlx5dv_devx_umem_dereg(struct mlx5dv_devx_umem *umem);
-
-struct mlx5dv_devx_uar {
- void *reg_addr;
- void *base_addr;
- uint32_t page_id;
- off_t mmap_off;
- uint64_t comp_mask;
-};
-
-struct mlx5dv_devx_uar *mlx5dv_devx_alloc_uar(struct ibv_context *context,
- uint32_t flags);
-void mlx5dv_devx_free_uar(struct mlx5dv_devx_uar *devx_uar);
-
-
-struct mlx5dv_var {
- uint32_t page_id;
- uint32_t length;
- off_t mmap_off;
- uint64_t comp_mask;
-};
-
-struct mlx5dv_var *
-mlx5dv_alloc_var(struct ibv_context *context, uint32_t flags);
-void mlx5dv_free_var(struct mlx5dv_var *dv_var);
-
-int mlx5dv_devx_query_eqn(struct ibv_context *context, uint32_t vector,
- uint32_t *eqn);
-
-int mlx5dv_devx_cq_query(struct ibv_cq *cq, const void *in, size_t inlen,
- void *out, size_t outlen);
-int mlx5dv_devx_cq_modify(struct ibv_cq *cq, const void *in, size_t inlen,
- void *out, size_t outlen);
-int mlx5dv_devx_qp_query(struct ibv_qp *qp, const void *in, size_t inlen,
- void *out, size_t outlen);
-int mlx5dv_devx_qp_modify(struct ibv_qp *qp, const void *in, size_t inlen,
- void *out, size_t outlen);
-int mlx5dv_devx_srq_query(struct ibv_srq *srq, const void *in, size_t inlen,
- void *out, size_t outlen);
-int mlx5dv_devx_srq_modify(struct ibv_srq *srq, const void *in, size_t inlen,
- void *out, size_t outlen);
-int mlx5dv_devx_wq_query(struct ibv_wq *wq, const void *in, size_t inlen,
- void *out, size_t outlen);
-int mlx5dv_devx_wq_modify(struct ibv_wq *wq, const void *in, size_t inlen,
- void *out, size_t outlen);
-int mlx5dv_devx_ind_tbl_query(struct ibv_rwq_ind_table *ind_tbl,
- const void *in, size_t inlen,
- void *out, size_t outlen);
-int mlx5dv_devx_ind_tbl_modify(struct ibv_rwq_ind_table *ind_tbl,
- const void *in, size_t inlen,
- void *out, size_t outlen);
-
-struct mlx5dv_devx_cmd_comp {
- int fd;
-};
-
-struct mlx5dv_devx_cmd_comp *
-mlx5dv_devx_create_cmd_comp(struct ibv_context *context);
-void mlx5dv_devx_destroy_cmd_comp(struct mlx5dv_devx_cmd_comp *cmd_comp);
-int mlx5dv_devx_obj_query_async(struct mlx5dv_devx_obj *obj, const void *in,
- size_t inlen, size_t outlen,
- uint64_t wr_id,
- struct mlx5dv_devx_cmd_comp *cmd_comp);
-
-int mlx5dv_devx_get_async_cmd_comp(struct mlx5dv_devx_cmd_comp *cmd_comp,
- struct mlx5dv_devx_async_cmd_hdr *cmd_resp,
- size_t cmd_resp_len);
-
-struct mlx5dv_devx_event_channel {
- int fd;
-};
-
-struct mlx5dv_devx_event_channel *
-mlx5dv_devx_create_event_channel(struct ibv_context *context,
- enum mlx5dv_devx_create_event_channel_flags flags);
-void mlx5dv_devx_destroy_event_channel(struct mlx5dv_devx_event_channel *event_channel);
-
-
-int mlx5dv_devx_subscribe_devx_event(struct mlx5dv_devx_event_channel *event_channel,
- struct mlx5dv_devx_obj *obj, /* can be NULL for unaffiliated events */
- uint16_t events_sz,
- uint16_t events_num[],
- uint64_t cookie);
-
-int mlx5dv_devx_subscribe_devx_event_fd(struct mlx5dv_devx_event_channel *event_channel,
- int fd,
- struct mlx5dv_devx_obj *obj, /* can be NULL for unaffiliated events */
- uint16_t event_num);
-
-/* return code: upon success number of bytes read, otherwise -1 and errno was set */
-ssize_t mlx5dv_devx_get_event(struct mlx5dv_devx_event_channel *event_channel,
- struct mlx5dv_devx_async_event_hdr *event_data,
- size_t event_resp_len);
-
-
-#define __devx_nullp(typ) ((struct mlx5_ifc_##typ##_bits *)NULL)
-#define __devx_st_sz_bits(typ) sizeof(struct mlx5_ifc_##typ##_bits)
-#define __devx_bit_sz(typ, fld) sizeof(__devx_nullp(typ)->fld)
-#define __devx_bit_off(typ, fld) offsetof(struct mlx5_ifc_##typ##_bits, fld)
-#define __devx_dw_off(bit_off) ((bit_off) / 32)
-#define __devx_64_off(bit_off) ((bit_off) / 64)
-#define __devx_dw_bit_off(bit_sz, bit_off) (32 - (bit_sz) - ((bit_off) & 0x1f))
-#define __devx_mask(bit_sz) ((uint32_t)((1ull << (bit_sz)) - 1))
-#define __devx_dw_mask(bit_sz, bit_off) \
- (__devx_mask(bit_sz) << __devx_dw_bit_off(bit_sz, bit_off))
-
-#define DEVX_FLD_SZ_BYTES(typ, fld) (__devx_bit_sz(typ, fld) / 8)
-#define DEVX_ST_SZ_BYTES(typ) (sizeof(struct mlx5_ifc_##typ##_bits) / 8)
-#define DEVX_ST_SZ_DW(typ) (sizeof(struct mlx5_ifc_##typ##_bits) / 32)
-#define DEVX_ST_SZ_QW(typ) (sizeof(struct mlx5_ifc_##typ##_bits) / 64)
-#define DEVX_UN_SZ_BYTES(typ) (sizeof(union mlx5_ifc_##typ##_bits) / 8)
-#define DEVX_UN_SZ_DW(typ) (sizeof(union mlx5_ifc_##typ##_bits) / 32)
-#define DEVX_BYTE_OFF(typ, fld) (__devx_bit_off(typ, fld) / 8)
-#define DEVX_ADDR_OF(typ, p, fld) \
- ((unsigned char *)(p) + DEVX_BYTE_OFF(typ, fld))
-
-static inline void _devx_set(void *p, uint32_t value, size_t bit_off,
- size_t bit_sz)
-{
- __be32 *fld = (__be32 *)(p) + __devx_dw_off(bit_off);
- uint32_t dw_mask = __devx_dw_mask(bit_sz, bit_off);
- uint32_t mask = __devx_mask(bit_sz);
-
- *fld = htobe32((be32toh(*fld) & (~dw_mask)) |
- ((value & mask) << __devx_dw_bit_off(bit_sz, bit_off)));
-}
-
-#define DEVX_SET(typ, p, fld, v) \
- _devx_set(p, v, __devx_bit_off(typ, fld), __devx_bit_sz(typ, fld))
-
-static inline uint32_t _devx_get(const void *p, size_t bit_off, size_t bit_sz)
-{
- return ((be32toh(*((const __be32 *)(p) + __devx_dw_off(bit_off))) >>
- __devx_dw_bit_off(bit_sz, bit_off)) &
- __devx_mask(bit_sz));
-}
-
-#define DEVX_GET(typ, p, fld) \
- _devx_get(p, __devx_bit_off(typ, fld), __devx_bit_sz(typ, fld))
-
-static inline void _devx_set64(void *p, uint64_t v, size_t bit_off)
-{
- *((__be64 *)(p) + __devx_64_off(bit_off)) = htobe64(v);
-}
-
-#define DEVX_SET64(typ, p, fld, v) _devx_set64(p, v, __devx_bit_off(typ, fld))
-
-static inline uint64_t _devx_get64(const void *p, size_t bit_off)
-{
- return be64toh(*((const __be64 *)(p) + __devx_64_off(bit_off)));
-}
-
-#define DEVX_GET64(typ, p, fld) _devx_get64(p, __devx_bit_off(typ, fld))
-
-struct mlx5dv_dr_domain;
-struct mlx5dv_dr_table;
-struct mlx5dv_dr_matcher;
-struct mlx5dv_dr_rule;
-struct mlx5dv_dr_action;
-
-enum mlx5dv_dr_domain_type {
- MLX5DV_DR_DOMAIN_TYPE_NIC_RX,
- MLX5DV_DR_DOMAIN_TYPE_NIC_TX,
- MLX5DV_DR_DOMAIN_TYPE_FDB,
-};
-
-enum mlx5dv_dr_domain_sync_flags {
- MLX5DV_DR_DOMAIN_SYNC_FLAGS_SW = 1 << 0,
- MLX5DV_DR_DOMAIN_SYNC_FLAGS_HW = 1 << 1,
- MLX5DV_DR_DOMAIN_SYNC_FLAGS_MEM = 1 << 2,
-};
-
-struct mlx5dv_dr_flow_meter_attr {
- struct mlx5dv_dr_table *next_table;
- uint8_t active;
- uint8_t reg_c_index;
- size_t flow_meter_parameter_sz;
- void *flow_meter_parameter;
-};
-
-struct mlx5dv_dr_flow_sampler_attr {
- uint32_t sample_ratio;
- struct mlx5dv_dr_table *default_next_table;
- uint32_t num_sample_actions;
- struct mlx5dv_dr_action **sample_actions;
- __be64 action;
-};
-
-struct mlx5dv_dr_domain *
-mlx5dv_dr_domain_create(struct ibv_context *ctx,
- enum mlx5dv_dr_domain_type type);
-
-int mlx5dv_dr_domain_destroy(struct mlx5dv_dr_domain *domain);
-
-int mlx5dv_dr_domain_sync(struct mlx5dv_dr_domain *domain, uint32_t flags);
-
-void mlx5dv_dr_domain_set_reclaim_device_memory(struct mlx5dv_dr_domain *dmn,
- bool enable);
-
-struct mlx5dv_dr_table *
-mlx5dv_dr_table_create(struct mlx5dv_dr_domain *domain, uint32_t level);
-
-int mlx5dv_dr_table_destroy(struct mlx5dv_dr_table *table);
-
-struct mlx5dv_dr_matcher *
-mlx5dv_dr_matcher_create(struct mlx5dv_dr_table *table,
- uint16_t priority,
- uint8_t match_criteria_enable,
- struct mlx5dv_flow_match_parameters *mask);
-
-int mlx5dv_dr_matcher_destroy(struct mlx5dv_dr_matcher *matcher);
-
-struct mlx5dv_dr_rule *
-mlx5dv_dr_rule_create(struct mlx5dv_dr_matcher *matcher,
- struct mlx5dv_flow_match_parameters *value,
- size_t num_actions,
- struct mlx5dv_dr_action *actions[]);
-
-int mlx5dv_dr_rule_destroy(struct mlx5dv_dr_rule *rule);
-
-enum mlx5dv_dr_action_flags {
- MLX5DV_DR_ACTION_FLAGS_ROOT_LEVEL = 1 << 0,
-};
-
-struct mlx5dv_dr_action *
-mlx5dv_dr_action_create_dest_ibv_qp(struct ibv_qp *ibqp);
-
-struct mlx5dv_dr_action *
-mlx5dv_dr_action_create_dest_table(struct mlx5dv_dr_table *table);
-
-struct mlx5dv_dr_action *
-mlx5dv_dr_action_create_dest_vport(struct mlx5dv_dr_domain *domain,
- uint32_t vport);
-
-struct mlx5dv_dr_action *
-mlx5dv_dr_action_create_dest_devx_tir(struct mlx5dv_devx_obj *devx_obj);
-
-struct mlx5dv_dr_action *
-mlx5dv_dr_action_create_dest_ib_port(struct mlx5dv_dr_domain *domain,
- uint32_t ib_port);
-
-enum mlx5dv_dr_action_dest_type {
- MLX5DV_DR_ACTION_DEST,
- MLX5DV_DR_ACTION_DEST_REFORMAT,
-};
-
-struct mlx5dv_dr_action_dest_reformat {
- struct mlx5dv_dr_action *reformat;
- struct mlx5dv_dr_action *dest;
-};
-
-struct mlx5dv_dr_action_dest_attr {
- enum mlx5dv_dr_action_dest_type type;
- union {
- struct mlx5dv_dr_action *dest;
- struct mlx5dv_dr_action_dest_reformat *dest_reformat;
- };
-};
-
-struct mlx5dv_dr_action *
-mlx5dv_dr_action_create_dest_array(struct mlx5dv_dr_domain *domain,
- size_t num_dest,
- struct mlx5dv_dr_action_dest_attr *dests[]);
-
-struct mlx5dv_dr_action *mlx5dv_dr_action_create_drop(void);
-
-struct mlx5dv_dr_action *mlx5dv_dr_action_create_default_miss(void);
-
-struct mlx5dv_dr_action *mlx5dv_dr_action_create_tag(uint32_t tag_value);
-
-struct mlx5dv_dr_action *
-mlx5dv_dr_action_create_flow_counter(struct mlx5dv_devx_obj *devx_obj,
- uint32_t offset);
-
-enum mlx5dv_dr_action_aso_first_hit_flags {
- MLX5DV_DR_ACTION_FLAGS_ASO_FIRST_HIT_SET = 1 << 0,
-};
-
-enum mlx5dv_dr_action_aso_flow_meter_flags {
- MLX5DV_DR_ACTION_FLAGS_ASO_FLOW_METER_RED = 1 << 0,
- MLX5DV_DR_ACTION_FLAGS_ASO_FLOW_METER_YELLOW = 1 << 1,
- MLX5DV_DR_ACTION_FLAGS_ASO_FLOW_METER_GREEN = 1 << 2,
- MLX5DV_DR_ACTION_FLAGS_ASO_FLOW_METER_UNDEFINED = 1 << 3,
-};
-
-enum mlx5dv_dr_action_aso_ct_flags {
- MLX5DV_DR_ACTION_FLAGS_ASO_CT_DIRECTION_INITIATOR = 1 << 0,
- MLX5DV_DR_ACTION_FLAGS_ASO_CT_DIRECTION_RESPONDER = 1 << 1,
-};
-
-struct mlx5dv_dr_action *
-mlx5dv_dr_action_create_aso(struct mlx5dv_dr_domain *domain,
- struct mlx5dv_devx_obj *devx_obj,
- uint32_t offset,
- uint32_t flags,
- uint8_t return_reg_c);
-
-int mlx5dv_dr_action_modify_aso(struct mlx5dv_dr_action *action,
- uint32_t offset,
- uint32_t flags,
- uint8_t return_reg_c);
-
-struct mlx5dv_dr_action *
-mlx5dv_dr_action_create_packet_reformat(struct mlx5dv_dr_domain *domain,
- uint32_t flags,
- enum mlx5dv_flow_action_packet_reformat_type reformat_type,
- size_t data_sz, void *data);
-
-struct mlx5dv_dr_action *
-mlx5dv_dr_action_create_modify_header(struct mlx5dv_dr_domain *domain,
- uint32_t flags,
- size_t actions_sz,
- __be64 actions[]);
-
-struct mlx5dv_dr_action *
-mlx5dv_dr_action_create_flow_meter(struct mlx5dv_dr_flow_meter_attr *attr);
-
-int mlx5dv_dr_action_modify_flow_meter(struct mlx5dv_dr_action *action,
- struct mlx5dv_dr_flow_meter_attr *attr,
- __be64 modify_field_select);
-
-struct mlx5dv_dr_action *
-mlx5dv_dr_action_create_flow_sampler(struct mlx5dv_dr_flow_sampler_attr *attr);
-
-struct mlx5dv_dr_action *mlx5dv_dr_action_create_pop_vlan(void);
-
-struct mlx5dv_dr_action
-*mlx5dv_dr_action_create_push_vlan(struct mlx5dv_dr_domain *domain,
- __be32 vlan_hdr);
-
-int mlx5dv_dr_action_destroy(struct mlx5dv_dr_action *action);
-
-int mlx5dv_dump_dr_domain(FILE *fout, struct mlx5dv_dr_domain *domain);
-int mlx5dv_dump_dr_table(FILE *fout, struct mlx5dv_dr_table *table);
-int mlx5dv_dump_dr_matcher(FILE *fout, struct mlx5dv_dr_matcher *matcher);
-int mlx5dv_dump_dr_rule(FILE *fout, struct mlx5dv_dr_rule *rule);
-
-struct mlx5dv_pp {
- uint16_t index;
-};
-
-struct mlx5dv_pp *mlx5dv_pp_alloc(struct ibv_context *context,
- size_t pp_context_sz,
- const void *pp_context,
- uint32_t flags);
-
-void mlx5dv_pp_free(struct mlx5dv_pp *pp);
-
-int mlx5dv_query_qp_lag_port(struct ibv_qp *qp,
- uint8_t *port_num,
- uint8_t *active_port_num);
-
-int mlx5dv_modify_qp_lag_port(struct ibv_qp *qp, uint8_t port_num);
-
-int mlx5dv_modify_qp_udp_sport(struct ibv_qp *qp, uint16_t udp_sport);
-
-enum mlx5dv_sched_elem_attr_flags {
- MLX5DV_SCHED_ELEM_ATTR_FLAGS_BW_SHARE = 1 << 0,
- MLX5DV_SCHED_ELEM_ATTR_FLAGS_MAX_AVG_BW = 1 << 1,
-};
-
-struct mlx5dv_sched_attr {
- struct mlx5dv_sched_node *parent;
- uint32_t flags; /* Use mlx5dv_sched_elem_attr_flags */
- uint32_t bw_share;
- uint32_t max_avg_bw;
- uint64_t comp_mask;
-};
-
-struct mlx5dv_sched_node;
-struct mlx5dv_sched_leaf;
-
-struct mlx5dv_sched_node *
-mlx5dv_sched_node_create(struct ibv_context *context,
- const struct mlx5dv_sched_attr *sched_attr);
-struct mlx5dv_sched_leaf *
-mlx5dv_sched_leaf_create(struct ibv_context *context,
- const struct mlx5dv_sched_attr *sched_attr);
-
-int mlx5dv_sched_node_modify(struct mlx5dv_sched_node *node,
- const struct mlx5dv_sched_attr *sched_attr);
-
-int mlx5dv_sched_leaf_modify(struct mlx5dv_sched_leaf *leaf,
- const struct mlx5dv_sched_attr *sched_attr);
-
-int mlx5dv_sched_node_destroy(struct mlx5dv_sched_node *node);
-
-int mlx5dv_sched_leaf_destroy(struct mlx5dv_sched_leaf *leaf);
-
-int mlx5dv_modify_qp_sched_elem(struct ibv_qp *qp,
- const struct mlx5dv_sched_leaf *requestor,
- const struct mlx5dv_sched_leaf *responder);
-
-int mlx5dv_reserved_qpn_alloc(struct ibv_context *ctx, uint32_t *qpn);
-int mlx5dv_reserved_qpn_dealloc(struct ibv_context *ctx, uint32_t qpn);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _MLX5DV_H_ */
diff --git a/contrib/libs/ibdrv/include/infiniband/sa.h b/contrib/libs/ibdrv/include/infiniband/sa.h
deleted file mode 100644
index e7f96dd5ed..0000000000
--- a/contrib/libs/ibdrv/include/infiniband/sa.h
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * Copyright (c) 2004 Topspin Communications. All rights reserved.
- * Copyright (c) 2005 Voltaire, Inc. All rights reserved.
- *
- * This software is available to you under a choice of one of two
- * licenses. You may choose to be licensed under the terms of the GNU
- * General Public License (GPL) Version 2, available from the file
- * COPYING in the main directory of this source tree, or the
- * OpenIB.org BSD license below:
- *
- * Redistribution and use in source and binary forms, with or
- * without modification, are permitted provided that the following
- * conditions are met:
- *
- * - Redistributions of source code must retain the above
- * copyright notice, this list of conditions and the following
- * disclaimer.
- *
- * - Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-#ifndef INFINIBAND_SA_H
-#define INFINIBAND_SA_H
-
-#include <infiniband/verbs.h>
-#include <linux/types.h>
-
-struct ibv_sa_path_rec {
- /* reserved */
- /* reserved */
- union ibv_gid dgid;
- union ibv_gid sgid;
- __be16 dlid;
- __be16 slid;
- int raw_traffic;
- /* reserved */
- __be32 flow_label;
- uint8_t hop_limit;
- uint8_t traffic_class;
- int reversible;
- uint8_t numb_path;
- __be16 pkey;
- /* reserved */
- uint8_t sl;
- uint8_t mtu_selector;
- uint8_t mtu;
- uint8_t rate_selector;
- uint8_t rate;
- uint8_t packet_life_time_selector;
- uint8_t packet_life_time;
- uint8_t preference;
-};
-
-struct ibv_sa_mcmember_rec {
- union ibv_gid mgid;
- union ibv_gid port_gid;
- uint32_t qkey;
- uint16_t mlid;
- uint8_t mtu_selector;
- uint8_t mtu;
- uint8_t traffic_class;
- uint16_t pkey;
- uint8_t rate_selector;
- uint8_t rate;
- uint8_t packet_life_time_selector;
- uint8_t packet_life_time;
- uint8_t sl;
- uint32_t flow_label;
- uint8_t hop_limit;
- uint8_t scope;
- uint8_t join_state;
- int proxy_join;
-};
-
-struct ibv_sa_service_rec {
- uint64_t id;
- union ibv_gid gid;
- uint16_t pkey;
- /* uint16_t resv; */
- uint32_t lease;
- uint8_t key[16];
- uint8_t name[64];
- uint8_t data8[16];
- uint16_t data16[8];
- uint32_t data32[4];
- uint64_t data64[2];
-};
-
-#define IBV_PATH_RECORD_REVERSIBLE 0x80
-
-struct ibv_path_record {
- __be64 service_id;
- union ibv_gid dgid;
- union ibv_gid sgid;
- __be16 dlid;
- __be16 slid;
- __be32 flowlabel_hoplimit; /* resv-31:28 flow label-27:8 hop limit-7:0*/
- uint8_t tclass;
- uint8_t reversible_numpath; /* reversible-7:7 num path-6:0 */
- __be16 pkey;
- __be16 qosclass_sl; /* qos class-15:4 sl-3:0 */
- uint8_t mtu; /* mtu selector-7:6 mtu-5:0 */
- uint8_t rate; /* rate selector-7:6 rate-5:0 */
- uint8_t packetlifetime; /* lifetime selector-7:6 lifetime-5:0 */
- uint8_t preference;
- uint8_t reserved[6];
-};
-
-#define IBV_PATH_FLAG_GMP (1<<0)
-#define IBV_PATH_FLAG_PRIMARY (1<<1)
-#define IBV_PATH_FLAG_ALTERNATE (1<<2)
-#define IBV_PATH_FLAG_OUTBOUND (1<<3)
-#define IBV_PATH_FLAG_INBOUND (1<<4)
-#define IBV_PATH_FLAG_INBOUND_REVERSE (1<<5)
-#define IBV_PATH_FLAG_BIDIRECTIONAL (IBV_PATH_FLAG_OUTBOUND | \
- IBV_PATH_FLAG_INBOUND_REVERSE)
-
-struct ibv_path_data {
- uint32_t flags;
- uint32_t reserved;
- struct ibv_path_record path;
-};
-
-#endif /* INFINIBAND_SA_H */
diff --git a/contrib/libs/ibdrv/include/infiniband/tm_types.h b/contrib/libs/ibdrv/include/infiniband/tm_types.h
deleted file mode 100644
index f1b302ad34..0000000000
--- a/contrib/libs/ibdrv/include/infiniband/tm_types.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (c) 2017 Mellanox Technologies Ltd. All rights reserved.
- *
- * This software is available to you under a choice of one of two
- * licenses. You may choose to be licensed under the terms of the GNU
- * General Public License (GPL) Version 2, available from the file
- * COPYING in the main directory of this source tree, or the
- * OpenIB.org BSD license below:
- *
- * Redistribution and use in source and binary forms, with or
- * without modification, are permitted provided that the following
- * conditions are met:
- *
- * - Redistributions of source code must retain the above
- * copyright notice, this list of conditions and the following
- * disclaimer.
- *
- * - Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- */
-#ifndef _TM_TYPES_H
-#define _TM_TYPES_H
-
-#include <linux/types.h>
-#include <stdint.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-enum ibv_tmh_op {
- IBV_TMH_NO_TAG = 0,
- IBV_TMH_RNDV = 1,
- IBV_TMH_FIN = 2,
- IBV_TMH_EAGER = 3,
-};
-
-struct ibv_tmh {
- uint8_t opcode; /* from enum ibv_tmh_op */
- uint8_t reserved[3]; /* must be zero */
- __be32 app_ctx; /* opaque user data */
- __be64 tag;
-};
-
-struct ibv_rvh {
- __be64 va;
- __be32 rkey;
- __be32 len;
-};
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* _TM_TYPES_H */
diff --git a/contrib/libs/ibdrv/include/infiniband/verbs_api.h b/contrib/libs/ibdrv/include/infiniband/verbs_api.h
deleted file mode 100644
index ded6fa401a..0000000000
--- a/contrib/libs/ibdrv/include/infiniband/verbs_api.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (c) 2017, Mellanox Technologies inc. All rights reserved.
- *
- * This software is available to you under a choice of one of two
- * licenses. You may choose to be licensed under the terms of the GNU
- * General Public License (GPL) Version 2, available from the file
- * COPYING in the main directory of this source tree, or the
- * OpenIB.org BSD license below:
- *
- * Redistribution and use in source and binary forms, with or
- * without modification, are permitted provided that the following
- * conditions are met:
- *
- * - Redistributions of source code must retain the above
- * copyright notice, this list of conditions and the following
- * disclaimer.
- *
- * - Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-#ifndef VERBS_API_H
-#define VERBS_API_H
-
-#if UINTPTR_MAX == UINT32_MAX
-#if __BYTE_ORDER == __LITTLE_ENDIAN
-#define RDMA_UAPI_PTR(_type, _name) \
- union { \
- struct { \
- _type _name; \
- __u32 _name##_reserved; \
- }; \
- __aligned_u64 _name##_data_u64; \
- }
-#else
-#define RDMA_UAPI_PTR(_type, _name) \
- union { \
- struct { \
- __u32 _name##_reserved; \
- _type _name; \
- }; \
- __aligned_u64 _name##_data_u64; \
- }
-#endif
-#elif UINTPTR_MAX == UINT64_MAX
-#define RDMA_UAPI_PTR(_type, _name) \
- union { \
- _type _name; \
- __aligned_u64 _name##_data_u64; \
- }
-#else
-#error "Pointer size not supported"
-#endif
-
-#include <infiniband/ib_user_ioctl_verbs.h>
-
-#define ibv_flow_action_esp_keymat ib_uverbs_flow_action_esp_keymat
-#define IBV_FLOW_ACTION_ESP_KEYMAT_AES_GCM IB_UVERBS_FLOW_ACTION_ESP_KEYMAT_AES_GCM
-#define ibv_flow_action_esp_keymat_aes_gcm_iv_algo ib_uverbs_flow_action_esp_keymat_aes_gcm_iv_algo
-#define IBV_FLOW_ACTION_IV_ALGO_SEQ IB_UVERBS_FLOW_ACTION_IV_ALGO_SEQ
-#define ibv_flow_action_esp_keymat_aes_gcm ib_uverbs_flow_action_esp_keymat_aes_gcm
-#define ibv_flow_action_esp_replay ib_uverbs_flow_action_esp_replay
-#define IBV_FLOW_ACTION_ESP_REPLAY_NONE IB_UVERBS_FLOW_ACTION_ESP_REPLAY_NONE
-#define IBV_FLOW_ACTION_ESP_REPLAY_BMP IB_UVERBS_FLOW_ACTION_ESP_REPLAY_BMP
-#define ibv_flow_action_esp_replay_bmp ib_uverbs_flow_action_esp_replay_bmp
-#define ibv_flow_action_esp_flags ib_uverbs_flow_action_esp_flags
-#define IBV_FLOW_ACTION_ESP_FLAGS_INLINE_CRYPTO IB_UVERBS_FLOW_ACTION_ESP_FLAGS_INLINE_CRYPTO
-#define IBV_FLOW_ACTION_ESP_FLAGS_FULL_OFFLOAD IB_UVERBS_FLOW_ACTION_ESP_FLAGS_FULL_OFFLOAD
-#define IBV_FLOW_ACTION_ESP_FLAGS_TUNNEL IB_UVERBS_FLOW_ACTION_ESP_FLAGS_TUNNEL
-#define IBV_FLOW_ACTION_ESP_FLAGS_TRANSPORT IB_UVERBS_FLOW_ACTION_ESP_FLAGS_TRANSPORT
-#define IBV_FLOW_ACTION_ESP_FLAGS_DECRYPT IB_UVERBS_FLOW_ACTION_ESP_FLAGS_DECRYPT
-#define IBV_FLOW_ACTION_ESP_FLAGS_ENCRYPT IB_UVERBS_FLOW_ACTION_ESP_FLAGS_ENCRYPT
-#define IBV_FLOW_ACTION_ESP_FLAGS_ESN_NEW_WINDOW IB_UVERBS_FLOW_ACTION_ESP_FLAGS_ESN_NEW_WINDOW
-#define ibv_flow_action_esp_encap ib_uverbs_flow_action_esp_encap
-#define ibv_flow_action_esp ib_uverbs_flow_action_esp
-
-#define ibv_advise_mr_advice ib_uverbs_advise_mr_advice
-#define IBV_ADVISE_MR_ADVICE_PREFETCH IB_UVERBS_ADVISE_MR_ADVICE_PREFETCH
-#define IBV_ADVISE_MR_ADVICE_PREFETCH_WRITE IB_UVERBS_ADVISE_MR_ADVICE_PREFETCH_WRITE
-
-#define IBV_ADVISE_MR_FLAG_FLUSH IB_UVERBS_ADVISE_MR_FLAG_FLUSH
-
-#define IBV_QPF_GRH_REQUIRED IB_UVERBS_QPF_GRH_REQUIRED
-
-#define IBV_ACCESS_OPTIONAL_RANGE IB_UVERBS_ACCESS_OPTIONAL_RANGE
-#define IBV_ACCESS_OPTIONAL_FIRST IB_UVERBS_ACCESS_OPTIONAL_FIRST
-#endif
-
diff --git a/contrib/libs/ibdrv/include/rdma/rdma_verbs.h b/contrib/libs/ibdrv/include/rdma/rdma_verbs.h
deleted file mode 100644
index 10049c31ce..0000000000
--- a/contrib/libs/ibdrv/include/rdma/rdma_verbs.h
+++ /dev/null
@@ -1,317 +0,0 @@
-/*
- * Copyright (c) 2010-2014 Intel Corporation. All rights reserved.
- *
- * This software is available to you under a choice of one of two
- * licenses. You may choose to be licensed under the terms of the GNU
- * General Public License (GPL) Version 2, available from the file
- * COPYING in the main directory of this source tree, or the
- * OpenIB.org BSD license below:
- *
- * Redistribution and use in source and binary forms, with or
- * without modification, are permitted provided that the following
- * conditions are met:
- *
- * - Redistributions of source code must retain the above
- * copyright notice, this list of conditions and the following
- * disclaimer.
- *
- * - Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-#if !defined(RDMA_VERBS_H)
-#define RDMA_VERBS_H
-
-#include <assert.h>
-#include <infiniband/verbs.h>
-#include <rdma/rdma_cma.h>
-#include <errno.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-static inline int rdma_seterrno(int ret)
-{
- if (ret) {
- errno = ret;
- ret = -1;
- }
- return ret;
-}
-
-/*
- * Shared receive queues.
- */
-int rdma_create_srq(struct rdma_cm_id *id, struct ibv_pd *pd,
- struct ibv_srq_init_attr *attr);
-int rdma_create_srq_ex(struct rdma_cm_id *id, struct ibv_srq_init_attr_ex *attr);
-
-void rdma_destroy_srq(struct rdma_cm_id *id);
-
-
-/*
- * Memory registration helpers.
- */
-static inline struct ibv_mr *
-rdma_reg_msgs(struct rdma_cm_id *id, void *addr, size_t length)
-{
- return ibv_reg_mr(id->pd, addr, length, IBV_ACCESS_LOCAL_WRITE);
-}
-
-static inline struct ibv_mr *
-rdma_reg_read(struct rdma_cm_id *id, void *addr, size_t length)
-{
- return ibv_reg_mr(id->pd, addr, length, IBV_ACCESS_LOCAL_WRITE |
- IBV_ACCESS_REMOTE_READ);
-}
-
-static inline struct ibv_mr *
-rdma_reg_write(struct rdma_cm_id *id, void *addr, size_t length)
-{
- return ibv_reg_mr(id->pd, addr, length, IBV_ACCESS_LOCAL_WRITE |
- IBV_ACCESS_REMOTE_WRITE);
-}
-
-static inline int
-rdma_dereg_mr(struct ibv_mr *mr)
-{
- return rdma_seterrno(ibv_dereg_mr(mr));
-}
-
-
-/*
- * Vectored send, receive, and RDMA operations.
- * Support multiple scatter-gather entries.
- */
-static inline int
-rdma_post_recvv(struct rdma_cm_id *id, void *context, struct ibv_sge *sgl,
- int nsge)
-{
- struct ibv_recv_wr wr, *bad;
-
- wr.wr_id = (uintptr_t) context;
- wr.next = NULL;
- wr.sg_list = sgl;
- wr.num_sge = nsge;
-
- if (id->srq)
- return rdma_seterrno(ibv_post_srq_recv(id->srq, &wr, &bad));
- else
- return rdma_seterrno(ibv_post_recv(id->qp, &wr, &bad));
-}
-
-static inline int
-rdma_post_sendv(struct rdma_cm_id *id, void *context, struct ibv_sge *sgl,
- int nsge, int flags)
-{
- struct ibv_send_wr wr, *bad;
-
- wr.wr_id = (uintptr_t) context;
- wr.next = NULL;
- wr.sg_list = sgl;
- wr.num_sge = nsge;
- wr.opcode = IBV_WR_SEND;
- wr.send_flags = flags;
-
- return rdma_seterrno(ibv_post_send(id->qp, &wr, &bad));
-}
-
-static inline int
-rdma_post_readv(struct rdma_cm_id *id, void *context, struct ibv_sge *sgl,
- int nsge, int flags, uint64_t remote_addr, uint32_t rkey)
-{
- struct ibv_send_wr wr, *bad;
-
- wr.wr_id = (uintptr_t) context;
- wr.next = NULL;
- wr.sg_list = sgl;
- wr.num_sge = nsge;
- wr.opcode = IBV_WR_RDMA_READ;
- wr.send_flags = flags;
- wr.wr.rdma.remote_addr = remote_addr;
- wr.wr.rdma.rkey = rkey;
-
- return rdma_seterrno(ibv_post_send(id->qp, &wr, &bad));
-}
-
-static inline int
-rdma_post_writev(struct rdma_cm_id *id, void *context, struct ibv_sge *sgl,
- int nsge, int flags, uint64_t remote_addr, uint32_t rkey)
-{
- struct ibv_send_wr wr, *bad;
-
- wr.wr_id = (uintptr_t) context;
- wr.next = NULL;
- wr.sg_list = sgl;
- wr.num_sge = nsge;
- wr.opcode = IBV_WR_RDMA_WRITE;
- wr.send_flags = flags;
- wr.wr.rdma.remote_addr = remote_addr;
- wr.wr.rdma.rkey = rkey;
-
- return rdma_seterrno(ibv_post_send(id->qp, &wr, &bad));
-}
-
-/*
- * Simple send, receive, and RDMA calls.
- */
-static inline int
-rdma_post_recv(struct rdma_cm_id *id, void *context, void *addr,
- size_t length, struct ibv_mr *mr)
-{
- struct ibv_sge sge;
-
- assert((addr >= mr->addr) &&
- (((uint8_t *) addr + length) <= ((uint8_t *) mr->addr + mr->length)));
- sge.addr = (uint64_t) (uintptr_t) addr;
- sge.length = (uint32_t) length;
- sge.lkey = mr->lkey;
-
- return rdma_post_recvv(id, context, &sge, 1);
-}
-
-static inline int
-rdma_post_send(struct rdma_cm_id *id, void *context, void *addr,
- size_t length, struct ibv_mr *mr, int flags)
-{
- struct ibv_sge sge;
-
- sge.addr = (uint64_t) (uintptr_t) addr;
- sge.length = (uint32_t) length;
- sge.lkey = mr ? mr->lkey : 0;
-
- return rdma_post_sendv(id, context, &sge, 1, flags);
-}
-
-static inline int
-rdma_post_read(struct rdma_cm_id *id, void *context, void *addr,
- size_t length, struct ibv_mr *mr, int flags,
- uint64_t remote_addr, uint32_t rkey)
-{
- struct ibv_sge sge;
-
- sge.addr = (uint64_t) (uintptr_t) addr;
- sge.length = (uint32_t) length;
- sge.lkey = mr->lkey;
-
- return rdma_post_readv(id, context, &sge, 1, flags, remote_addr, rkey);
-}
-
-static inline int
-rdma_post_write(struct rdma_cm_id *id, void *context, void *addr,
- size_t length, struct ibv_mr *mr, int flags,
- uint64_t remote_addr, uint32_t rkey)
-{
- struct ibv_sge sge;
-
- sge.addr = (uint64_t) (uintptr_t) addr;
- sge.length = (uint32_t) length;
- sge.lkey = mr ? mr->lkey : 0;
-
- return rdma_post_writev(id, context, &sge, 1, flags, remote_addr, rkey);
-}
-
-static inline int
-rdma_post_ud_send(struct rdma_cm_id *id, void *context, void *addr,
- size_t length, struct ibv_mr *mr, int flags,
- struct ibv_ah *ah, uint32_t remote_qpn)
-{
- struct ibv_send_wr wr, *bad;
- struct ibv_sge sge;
-
- sge.addr = (uint64_t) (uintptr_t) addr;
- sge.length = (uint32_t) length;
- sge.lkey = mr ? mr->lkey : 0;
-
- wr.wr_id = (uintptr_t) context;
- wr.next = NULL;
- wr.sg_list = &sge;
- wr.num_sge = 1;
- wr.opcode = IBV_WR_SEND;
- wr.send_flags = flags;
- wr.wr.ud.ah = ah;
- wr.wr.ud.remote_qpn = remote_qpn;
- wr.wr.ud.remote_qkey = RDMA_UDP_QKEY;
-
- return rdma_seterrno(ibv_post_send(id->qp, &wr, &bad));
-}
-
-static inline int
-rdma_get_send_comp(struct rdma_cm_id *id, struct ibv_wc *wc)
-{
- struct ibv_cq *cq;
- void *context;
- int ret;
-
- do {
- ret = ibv_poll_cq(id->send_cq, 1, wc);
- if (ret)
- break;
-
- ret = ibv_req_notify_cq(id->send_cq, 0);
- if (ret)
- return rdma_seterrno(ret);
-
- ret = ibv_poll_cq(id->send_cq, 1, wc);
- if (ret)
- break;
-
- ret = ibv_get_cq_event(id->send_cq_channel, &cq, &context);
- if (ret)
- return ret;
-
- assert(cq == id->send_cq && context == id);
- ibv_ack_cq_events(id->send_cq, 1);
- } while (1);
-
- return (ret < 0) ? rdma_seterrno(ret) : ret;
-}
-
-static inline int
-rdma_get_recv_comp(struct rdma_cm_id *id, struct ibv_wc *wc)
-{
- struct ibv_cq *cq;
- void *context;
- int ret;
-
- do {
- ret = ibv_poll_cq(id->recv_cq, 1, wc);
- if (ret)
- break;
-
- ret = ibv_req_notify_cq(id->recv_cq, 0);
- if (ret)
- return rdma_seterrno(ret);
-
- ret = ibv_poll_cq(id->recv_cq, 1, wc);
- if (ret)
- break;
-
- ret = ibv_get_cq_event(id->recv_cq_channel, &cq, &context);
- if (ret)
- return ret;
-
- assert(cq == id->recv_cq && context == id);
- ibv_ack_cq_events(id->recv_cq, 1);
- } while (1);
-
- return (ret < 0) ? rdma_seterrno(ret) : ret;
-}
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* RDMA_CMA_H */