2N/A/*
2N/A * CDDL HEADER START
2N/A *
2N/A * The contents of this file are subject to the terms of the
2N/A * Common Development and Distribution License (the "License").
2N/A * You may not use this file except in compliance with the License.
2N/A *
2N/A * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
2N/A * or http://www.opensolaris.org/os/licensing.
2N/A * See the License for the specific language governing permissions
2N/A * and limitations under the License.
2N/A *
2N/A * When distributing Covered Code, include this CDDL HEADER in each
2N/A * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
2N/A * If applicable, add the following below this CDDL HEADER, with the
2N/A * fields enclosed by brackets "[]" replaced with your own identifying
2N/A * information: Portions Copyright [yyyy] [name of copyright owner]
2N/A *
2N/A * CDDL HEADER END
2N/A */
2N/A/*
2N/A * Copyright (c) 2002-2004, Network Appliance, Inc. All rights reserved.
2N/A */
2N/A
2N/A/*
2N/A * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
2N/A */
2N/A
2N/A#ifndef _DAT_H_
2N/A#define _DAT_H_
2N/A
2N/A/*
2N/A *
2N/A * HEADER: dat.h
2N/A *
2N/A * PURPOSE: defines the common DAT API for uDAPL and kDAPL.
2N/A *
2N/A * Description: Header file for "uDAPL: User Direct Access Programming
2N/A * Library, Version: 1.2"
2N/A *
2N/A * Mapping rules:
2N/A * All global symbols are prepended with "DAT_" or "dat_"
2N/A * All DAT objects have an 'api' tag which, such as 'ep' or 'lmr'
2N/A * The method table is in the provider definition structure.
2N/A *
2N/A *
2N/A */
2N/A
2N/A#ifdef __cplusplus
2N/Aextern "C" {
2N/A#endif
2N/A
2N/A#include <dat/dat_error.h>
2N/A
2N/A/* Generic DAT types */
2N/A
2N/Atypedef char *DAT_NAME_PTR; /* Format for ia_name and attributes */
2N/A#define DAT_NAME_MAX_LENGTH 256
2N/A
2N/A/*
2N/A * Used for provider, vendor, transport, hardware specific attributes
2N/A * definitions.
2N/A */
2N/A
2N/Atypedef struct dat_named_attr {
2N/A const char *name; /* Name of attribute */
2N/A const char *value; /* Value of attribute */
2N/A} DAT_NAMED_ATTR;
2N/A
2N/Atypedef enum dat_boolean {
2N/A DAT_FALSE = 0,
2N/A DAT_TRUE = 1
2N/A} DAT_BOOLEAN;
2N/A
2N/Atypedef union dat_context {
2N/A DAT_PVOID as_ptr;
2N/A DAT_UINT64 as_64;
2N/A DAT_UVERYLONG as_index;
2N/A} DAT_CONTEXT;
2N/A
2N/Atypedef DAT_CONTEXT DAT_DTO_COOKIE;
2N/Atypedef DAT_CONTEXT DAT_RMR_COOKIE;
2N/A
2N/Atypedef enum dat_completion_flags {
2N/A /* Completes with notification */
2N/A DAT_COMPLETION_DEFAULT_FLAG = 0x00,
2N/A
2N/A /* Completions suppressed if successful */
2N/A DAT_COMPLETION_SUPPRESS_FLAG = 0x01,
2N/A
2N/A /* Sender controlled notification for recv completion */
2N/A DAT_COMPLETION_SOLICITED_WAIT_FLAG = 0x02,
2N/A
2N/A /* Completions with unsignaled notifications */
2N/A DAT_COMPLETION_UNSIGNALLED_FLAG = 0x04,
2N/A
2N/A /* Do not start processing until all previous RDMA reads complete. */
2N/A DAT_COMPLETION_BARRIER_FENCE_FLAG = 0x08,
2N/A
2N/A /*
2N/A * Only valid for uDAPL as EP attribute for Recv Completion flags.
2N/A * Waiter unblocking is controlled by Threshold value of dat_evd_wait.
2N/A * UNSIGNALLED for RECV not allowed when EP has this attribute
2N/A */
2N/A DAT_COMPLETION_EVD_THRESHOLD_FLAG = 0x10
2N/A
2N/A} DAT_COMPLETION_FLAGS;
2N/A
2N/A
2N/Atypedef DAT_UINT32 DAT_TIMEOUT; /* microseconds */
2N/A
2N/A/* timeout = infinity */
2N/A#define DAT_TIMEOUT_INFINITE ((DAT_TIMEOUT) ~0)
2N/A
2N/A/* dat handles */
2N/Atypedef DAT_PVOID DAT_HANDLE;
2N/Atypedef DAT_HANDLE DAT_CR_HANDLE;
2N/Atypedef DAT_HANDLE DAT_EP_HANDLE;
2N/Atypedef DAT_HANDLE DAT_EVD_HANDLE;
2N/Atypedef DAT_HANDLE DAT_IA_HANDLE;
2N/Atypedef DAT_HANDLE DAT_LMR_HANDLE;
2N/Atypedef DAT_HANDLE DAT_PSP_HANDLE;
2N/Atypedef DAT_HANDLE DAT_PZ_HANDLE;
2N/Atypedef DAT_HANDLE DAT_RMR_HANDLE;
2N/Atypedef DAT_HANDLE DAT_RSP_HANDLE;
2N/Atypedef DAT_HANDLE DAT_SRQ_HANDLE;
2N/A
2N/A
2N/A/* dat NULL handles */
2N/A#define DAT_HANDLE_NULL ((DAT_HANDLE)NULL)
2N/A
2N/Atypedef DAT_SOCK_ADDR *DAT_IA_ADDRESS_PTR;
2N/A
2N/Atypedef DAT_UINT64 DAT_CONN_QUAL;
2N/Atypedef DAT_UINT64 DAT_PORT_QUAL;
2N/A
2N/A/* QOS definitions */
2N/Atypedef enum dat_qos {
2N/A DAT_QOS_BEST_EFFORT = 0x00,
2N/A DAT_QOS_HIGH_THROUGHPUT = 0x01,
2N/A DAT_QOS_LOW_LATENCY = 0x02,
2N/A /* not low latency, nor high throughput */
2N/A DAT_QOS_ECONOMY = 0x04,
2N/A /* both low latency and high throughput */
2N/A DAT_QOS_PREMIUM = 0x08
2N/A} DAT_QOS;
2N/A
2N/A/*
2N/A * FLAGS
2N/A */
2N/A
2N/Atypedef enum dat_connect_flags {
2N/A DAT_CONNECT_DEFAULT_FLAG = 0x00,
2N/A DAT_CONNECT_MULTIPATH_FLAG = 0x01
2N/A} DAT_CONNECT_FLAGS;
2N/A
2N/Atypedef enum dat_close_flags {
2N/A DAT_CLOSE_ABRUPT_FLAG = 0x00,
2N/A DAT_CLOSE_GRACEFUL_FLAG = 0x01
2N/A} DAT_CLOSE_FLAGS;
2N/A
2N/A#define DAT_CLOSE_DEFAULT DAT_CLOSE_ABRUPT_FLAG
2N/A
2N/Atypedef enum dat_evd_flags {
2N/A DAT_EVD_SOFTWARE_FLAG = 0x001,
2N/A DAT_EVD_CR_FLAG = 0x010,
2N/A DAT_EVD_DTO_FLAG = 0x020,
2N/A DAT_EVD_CONNECTION_FLAG = 0x040,
2N/A DAT_EVD_RMR_BIND_FLAG = 0x080,
2N/A DAT_EVD_ASYNC_FLAG = 0x100,
2N/A /* DAT events only, no software events */
2N/A DAT_EVD_DEFAULT_FLAG = 0x1F0
2N/A} DAT_EVD_FLAGS;
2N/A
2N/Atypedef enum dat_psp_flags {
2N/A DAT_PSP_CONSUMER_FLAG = 0x00, /* Consumer creates an endpoint */
2N/A DAT_PSP_PROVIDER_FLAG = 0x01 /* Provider creates an endpoint */
2N/A} DAT_PSP_FLAGS;
2N/A
2N/A/*
2N/A * Memory Buffers
2N/A *
2N/A * Both LMR and RMR triplets specify 64-bit addresses in the local host's byte
2N/A * order, even when that exceeds the size of a DAT_PVOID for the host
2N/A * architecture.
2N/A */
2N/A
2N/A/*
2N/A * Both LMR and RMR Triplets specify 64-bit addresses in the local host
2N/A * order, even when that exceeds the size of a void pointer for the host
2N/A * architecture. The DAT_VADDR type that represents addresses is in the
2N/A * native byte-order of the local host. Helper macros that allow Consumers
2N/A * to convert DAT_VADDR into various orders that might be useful for
2N/A * inclusion of RMR Triplets into a payload of a message follow.
2N/A *
2N/A * DAT defines the following macros to convert the fields on an RMR Triplet
2N/A * to defined byte orders to allow their export by the Consumer over wire
2N/A * protocols. DAT does not define how the two peers decide which byte should be
2N/A * used.
2N/A *
2N/A * DAT_LMRC_TO_LSB(lmrc) returns the supplied LMR Context in ls-byte
2N/A * order.
2N/A * DAT_LMRC_TO_MSB(lmrc) returns the supplied LMR Context in ms-byte
2N/A * order.
2N/A * DAT_RMRC_TO_LSB(rmrc) returns the supplied RMR Context in ls-byte
2N/A * order.
2N/A * DAT_RMRC_TO_MSB(rmrc) returns the supplied RMR Context in ms-byte
2N/A * order.
2N/A * DAT_VADDR_TO_LSB(vaddr) returns the supplied Virtual Address in ls-byte
2N/A * order.
2N/A * DAT_VADDR_TO_MSB(vaddr) returns the supplied Virtual Address in
2N/A * ms-byte order.
2N/A * DAT_VLEN_TO_LSB(vlen) returns the supplied length in ls-byte order.
2N/A * DAT_VLEN_TO_MSB(vlen) returns the supplied length in ms-byte order.
2N/A *
2N/A * Consumers are free to use 64-bit or 32-bit arithmetic for local or remote
2N/A * memory address and length manipulation in their preferred byte-order. Only
2N/A * the LMR and RMR Triplets passed to a Provider as part of a Posted DTO are
2N/A * required to be in 64-bit address and local host order formats. Providers
2N/A * shall convert RMR_Triplets to a Transport-required wire format.
2N/A *
2N/A * For the best performance, Consumers should align each buffer segment to
2N/A * the boundary specified by the dat_optimal_alignment.
2N/A */
2N/Atypedef DAT_UINT32 DAT_LMR_CONTEXT;
2N/Atypedef DAT_UINT32 DAT_RMR_CONTEXT;
2N/A
2N/Atypedef DAT_UINT64 DAT_VLEN;
2N/Atypedef DAT_UINT64 DAT_VADDR;
2N/A
2N/Atypedef struct dat_provider_attr DAT_PROVIDER_ATTR;
2N/Atypedef struct dat_evd_param DAT_EVD_PARAM;
2N/Atypedef struct dat_lmr_param DAT_LMR_PARAM;
2N/A
2N/A/*
2N/A * It is legal for Consumer to specify zero for segment_length
2N/A * of the dat_lmr_triplet. When 0 is specified for the
2N/A * segment_length then the other two elements of the
2N/A * dat_lmr_triplet are irrelevant and can be invalid.
2N/A */
2N/A
2N/Atypedef struct dat_lmr_triplet {
2N/A DAT_LMR_CONTEXT lmr_context;
2N/A DAT_UINT32 pad;
2N/A DAT_VADDR virtual_address;
2N/A DAT_VLEN segment_length;
2N/A} DAT_LMR_TRIPLET;
2N/A
2N/Atypedef struct dat_rmr_triplet {
2N/A DAT_RMR_CONTEXT rmr_context;
2N/A DAT_UINT32 pad;
2N/A DAT_VADDR target_address;
2N/A DAT_VLEN segment_length;
2N/A} DAT_RMR_TRIPLET;
2N/A
2N/A/*
2N/A * The extra padding ensures that context, address, and length parameters are
2N/A * aligned on 64-bit boundaries.
2N/A */
2N/A
2N/A/* Memory privileges */
2N/A
2N/Atypedef enum dat_mem_priv_flags {
2N/A DAT_MEM_PRIV_NONE_FLAG = 0x00,
2N/A DAT_MEM_PRIV_LOCAL_READ_FLAG = 0x01,
2N/A DAT_MEM_PRIV_REMOTE_READ_FLAG = 0x02,
2N/A DAT_MEM_PRIV_LOCAL_WRITE_FLAG = 0x10,
2N/A DAT_MEM_PRIV_REMOTE_WRITE_FLAG = 0x20,
2N/A DAT_MEM_PRIV_ALL_FLAG = 0x33,
2N/A DAT_MEM_PRIV_RO_DISABLE_FLAG = 0x100
2N/A} DAT_MEM_PRIV_FLAGS;
2N/A
2N/A/*
2N/A * For backwards compatibility with DAT-1.0 memory privileges values
2N/A * are supported
2N/A */
2N/A#define DAT_MEM_PRIV_READ_FLAG (DAT_MEM_PRIV_LOCAL_READ_FLAG | \
2N/A DAT_MEM_PRIV_REMOTE_READ_FLAG)
2N/A#define DAT_MEM_PRIV_WRITE_FLAG (DAT_MEM_PRIV_LOCAL_WRITE_FLAG | \
2N/A DAT_MEM_PRIV_REMOTE_WRITE_FLAG)
2N/A
2N/A/* LMR Arguments Mask */
2N/A
2N/Atypedef enum dat_lmr_param_mask {
2N/A DAT_LMR_FIELD_IA_HANDLE = 0x001,
2N/A DAT_LMR_FIELD_MEM_TYPE = 0x002,
2N/A DAT_LMR_FIELD_REGION_DESC = 0x004,
2N/A DAT_LMR_FIELD_LENGTH = 0x008,
2N/A DAT_LMR_FIELD_PZ_HANDLE = 0x010,
2N/A DAT_LMR_FIELD_MEM_PRIV = 0x020,
2N/A DAT_LMR_FIELD_LMR_CONTEXT = 0x040,
2N/A DAT_LMR_FIELD_RMR_CONTEXT = 0x080,
2N/A DAT_LMR_FIELD_REGISTERED_SIZE = 0x100,
2N/A DAT_LMR_FIELD_REGISTERED_ADDRESS = 0x200,
2N/A
2N/A DAT_LMR_FIELD_ALL = 0x3FF
2N/A} DAT_LMR_PARAM_MASK;
2N/A
2N/A/* RMR Argumments & RMR Arguments Mask */
2N/A
2N/Atypedef struct dat_rmr_param {
2N/A DAT_IA_HANDLE ia_handle;
2N/A DAT_PZ_HANDLE pz_handle;
2N/A DAT_LMR_TRIPLET lmr_triplet;
2N/A DAT_MEM_PRIV_FLAGS mem_priv;
2N/A DAT_RMR_CONTEXT rmr_context;
2N/A} DAT_RMR_PARAM;
2N/A
2N/Atypedef enum dat_rmr_param_mask {
2N/A DAT_RMR_FIELD_IA_HANDLE = 0x01,
2N/A DAT_RMR_FIELD_PZ_HANDLE = 0x02,
2N/A DAT_RMR_FIELD_LMR_TRIPLET = 0x04,
2N/A DAT_RMR_FIELD_MEM_PRIV = 0x08,
2N/A DAT_RMR_FIELD_RMR_CONTEXT = 0x10,
2N/A
2N/A DAT_RMR_FIELD_ALL = 0x1F
2N/A} DAT_RMR_PARAM_MASK;
2N/A
2N/A/* Provider attributes */
2N/A
2N/Atypedef enum dat_iov_ownership {
2N/A /* Not modification by provider, consumer can use anytime. */
2N/A DAT_IOV_CONSUMER = 0x0,
2N/A
2N/A /* Provider does not modify returned IOV DTO on completion. */
2N/A DAT_IOV_PROVIDER_NOMOD = 0x1,
2N/A
2N/A /* Provider may modify IOV DTO on completion, can't trust it. */
2N/A DAT_IOV_PROVIDER_MOD = 0x2
2N/A
2N/A} DAT_IOV_OWNERSHIP;
2N/A
2N/Atypedef enum dat_ep_creator_for_psp {
2N/A DAT_PSP_CREATES_EP_NEVER, /* provider never creates endpoint */
2N/A DAT_PSP_CREATES_EP_IFASKED, /* provider creates endpoint if asked */
2N/A DAT_PSP_CREATES_EP_ALWAYS /* provider always creates endpoint */
2N/A} DAT_EP_CREATOR_FOR_PSP;
2N/A
2N/A/* General Interface Adapter attributes. These apply to both udat and kdat. */
2N/A
2N/A/* To support backwards compatibility for DAPL-1.0 */
2N/A#define max_rdma_read_per_ep max_rdma_read_per_ep_in
2N/A#define DAT_IA_FIELD_IA_MAX_DTO_PER_OP DAT_IA_FIELD_IA_ MAX_DTO_PER_EP_IN
2N/A
2N/A/* to support backwards compatibility for DAPL-1.0 & DAPL-1.1 */
2N/A#define max_mtu_size max_message_size
2N/A
2N/Atypedef struct dat_ia_attr
2N/A{
2N/A char adapter_name[DAT_NAME_MAX_LENGTH];
2N/A char vendor_name[DAT_NAME_MAX_LENGTH];
2N/A DAT_UINT32 hardware_version_major;
2N/A DAT_UINT32 hardware_version_minor;
2N/A DAT_UINT32 firmware_version_major;
2N/A DAT_UINT32 firmware_version_minor;
2N/A DAT_IA_ADDRESS_PTR ia_address_ptr;
2N/A DAT_COUNT max_eps;
2N/A DAT_COUNT max_dto_per_ep;
2N/A DAT_COUNT max_rdma_read_per_ep_in;
2N/A DAT_COUNT max_rdma_read_per_ep_out;
2N/A DAT_COUNT max_evds;
2N/A DAT_COUNT max_evd_qlen;
2N/A DAT_COUNT max_iov_segments_per_dto;
2N/A DAT_COUNT max_lmrs;
2N/A DAT_VLEN max_lmr_block_size;
2N/A DAT_VADDR max_lmr_virtual_address;
2N/A DAT_COUNT max_pzs;
2N/A DAT_VLEN max_message_size;
2N/A DAT_VLEN max_rdma_size;
2N/A DAT_COUNT max_rmrs;
2N/A DAT_VADDR max_rmr_target_address;
2N/A DAT_COUNT max_srqs;
2N/A DAT_COUNT max_ep_per_srq;
2N/A DAT_COUNT max_recv_per_srq;
2N/A DAT_COUNT max_iov_segments_per_rdma_read;
2N/A DAT_COUNT max_iov_segments_per_rdma_write;
2N/A DAT_COUNT max_rdma_read_in;
2N/A DAT_COUNT max_rdma_read_out;
2N/A DAT_BOOLEAN max_rdma_read_per_ep_in_guaranteed;
2N/A DAT_BOOLEAN max_rdma_read_per_ep_out_guaranteed;
2N/A DAT_COUNT num_transport_attr;
2N/A DAT_NAMED_ATTR *transport_attr;
2N/A DAT_COUNT num_vendor_attr;
2N/A DAT_NAMED_ATTR *vendor_attr;
2N/A} DAT_IA_ATTR;
2N/A
2N/A/* To support backwards compatibility for DAPL-1.0 & DAPL-1.1 */
2N/A#define DAT_IA_FIELD_IA_MAX_MTU_SIZE DAT_IA_FIELD_IA_MAX_MESSAGE_SIZE
2N/A
2N/Atypedef DAT_UINT64 DAT_IA_ATTR_MASK;
2N/A
2N/A#define DAT_IA_FIELD_IA_ADAPTER_NAME UINT64_C(0x000000001)
2N/A#define DAT_IA_FIELD_IA_VENDOR_NAME UINT64_C(0x000000002)
2N/A#define DAT_IA_FIELD_IA_HARDWARE_MAJOR_VERSION UINT64_C(0x000000004)
2N/A#define DAT_IA_FIELD_IA_HARDWARE_MINOR_VERSION UINT64_C(0x000000008)
2N/A#define DAT_IA_FIELD_IA_FIRMWARE_MAJOR_VERSION UINT64_C(0x000000010)
2N/A#define DAT_IA_FIELD_IA_FIRMWARE_MINOR_VERSION UINT64_C(0x000000020)
2N/A#define DAT_IA_FIELD_IA_ADDRESS_PTR UINT64_C(0x000000040)
2N/A#define DAT_IA_FIELD_IA_MAX_EPS UINT64_C(0x000000080)
2N/A#define DAT_IA_FIELD_IA_MAX_DTO_PER_EP UINT64_C(0x000000100)
2N/A#define DAT_IA_FIELD_IA_MAX_RDMA_READ_PER_EP_IN UINT64_C(0x000000200)
2N/A#define DAT_IA_FIELD_IA_MAX_RDMA_READ_PER_EP_OUT UINT64_C(0x000000400)
2N/A#define DAT_IA_FIELD_IA_MAX_EVDS UINT64_C(0x000000800)
2N/A#define DAT_IA_FIELD_IA_MAX_EVD_QLEN UINT64_C(0x000001000)
2N/A#define DAT_IA_FIELD_IA_MAX_IOV_SEGMENTS_PER_DTO UINT64_C(0x000002000)
2N/A#define DAT_IA_FIELD_IA_MAX_LMRS UINT64_C(0x000004000)
2N/A#define DAT_IA_FIELD_IA_MAX_LMR_BLOCK_SIZE UINT64_C(0x000008000)
2N/A#define DAT_IA_FIELD_IA_MAX_LMR_VIRTUAL_ADDRESS UINT64_C(0x000010000)
2N/A#define DAT_IA_FIELD_IA_MAX_PZS UINT64_C(0x000020000)
2N/A#define DAT_IA_FIELD_IA_MAX_MESSAGE_SIZE UINT64_C(0x000040000)
2N/A#define DAT_IA_FIELD_IA_MAX_RDMA_SIZE UINT64_C(0x000080000)
2N/A#define DAT_IA_FIELD_IA_MAX_RMRS UINT64_C(0x000100000)
2N/A#define DAT_IA_FIELD_IA_MAX_RMR_TARGET_ADDRESS UINT64_C(0x000200000)
2N/A#define DAT_IA_FIELD_IA_MAX_SRQS UINT64_C(0x000400000)
2N/A#define DAT_IA_FIELD_IA_MAX_EP_PER_SRQ UINT64_C(0x000800000)
2N/A#define DAT_IA_FIELD_IA_MAX_RECV_PER_SRQ UINT64_C(0x001000000)
2N/A#define DAT_IA_FIELD_IA_MAX_IOV_SEGMENTS_PER_RDMA_READ UINT64_C(0x002000000)
2N/A#define DAT_IA_FIELD_IA_MAX_IOV_SEGMENTS_PER_RDMA_WRITE UINT64_C(0x004000000)
2N/A#define DAT_IA_FIELD_IA_MAX_RDMA_READ_IN UINT64_C(0x008000000)
2N/A#define DAT_IA_FIELD_IA_MAX_RDMA_READ_OUT UINT64_C(0x010000000)
2N/A#define DAT_IA_FIELD_IA_MAX_RDMA_READ_PER_EP_IN_GUARANTEED \
2N/A UINT64_C(0x020000000)
2N/A#define DAT_IA_FIELD_IA_MAX_RDMA_READ_PER_EP_OUT_GUARANTEED \
2N/A UINT64_C(0x040000000)
2N/A#define DAT_IA_FIELD_IA_NUM_TRANSPORT_ATTR UINT64_C(0x080000000)
2N/A#define DAT_IA_FIELD_IA_TRANSPORT_ATTR UINT64_C(0x100000000)
2N/A#define DAT_IA_FIELD_IA_NUM_VENDOR_ATTR UINT64_C(0x200000000)
2N/A#define DAT_IA_FIELD_IA_VENDOR_ATTR UINT64_C(0x400000000)
2N/A
2N/A/* To support backwards compatibility for DAPL-1.0 & DAPL-1.1 */
2N/A#define DAT_IA_ALL DAT_IA_FIELD_ALL
2N/A#define DAT_IA_FIELD_ALL UINT64_C(0x7FFFFFFFF)
2N/A#define DAT_IA_FIELD_NONE UINT64_C(0x0)
2N/A
2N/A/* Endpoint attributes */
2N/A
2N/Atypedef enum dat_service_type {
2N/A DAT_SERVICE_TYPE_RC /* reliable connections */
2N/A} DAT_SERVICE_TYPE;
2N/A
2N/Atypedef struct dat_ep_attr {
2N/A DAT_SERVICE_TYPE service_type;
2N/A DAT_VLEN max_message_size;
2N/A DAT_VLEN max_rdma_size;
2N/A DAT_QOS qos;
2N/A DAT_COMPLETION_FLAGS recv_completion_flags;
2N/A DAT_COMPLETION_FLAGS request_completion_flags;
2N/A DAT_COUNT max_recv_dtos;
2N/A DAT_COUNT max_request_dtos;
2N/A DAT_COUNT max_recv_iov;
2N/A DAT_COUNT max_request_iov;
2N/A DAT_COUNT max_rdma_read_in;
2N/A DAT_COUNT max_rdma_read_out;
2N/A DAT_COUNT srq_soft_hw;
2N/A DAT_COUNT max_rdma_read_iov;
2N/A DAT_COUNT max_rdma_write_iov;
2N/A DAT_COUNT ep_transport_specific_count;
2N/A DAT_NAMED_ATTR * ep_transport_specific;
2N/A DAT_COUNT ep_provider_specific_count;
2N/A DAT_NAMED_ATTR * ep_provider_specific;
2N/A} DAT_EP_ATTR;
2N/A
2N/A/* Endpoint Parameters */
2N/A
2N/A/* For backwards compatibility */
2N/A#define DAT_EP_STATE_ERROR DAT_EP_STATE_DISCONNECTED
2N/A
2N/Atypedef enum dat_ep_state {
2N/A DAT_EP_STATE_UNCONNECTED, /* quiescent state */
2N/A DAT_EP_STATE_UNCONFIGURED_UNCONNECTED,
2N/A DAT_EP_STATE_RESERVED,
2N/A DAT_EP_STATE_UNCONFIGURED_RESERVED,
2N/A DAT_EP_STATE_PASSIVE_CONNECTION_PENDING,
2N/A DAT_EP_STATE_UNCONFIGURED_PASSIVE,
2N/A DAT_EP_STATE_ACTIVE_CONNECTION_PENDING,
2N/A DAT_EP_STATE_TENTATIVE_CONNECTION_PENDING,
2N/A DAT_EP_STATE_UNCONFIGURED_TENTATIVE,
2N/A DAT_EP_STATE_CONNECTED,
2N/A DAT_EP_STATE_DISCONNECT_PENDING,
2N/A DAT_EP_STATE_DISCONNECTED,
2N/A DAT_EP_STATE_COMPLETION_PENDING
2N/A} DAT_EP_STATE;
2N/A
2N/Atypedef struct dat_ep_param {
2N/A DAT_IA_HANDLE ia_handle;
2N/A DAT_EP_STATE ep_state;
2N/A DAT_IA_ADDRESS_PTR local_ia_address_ptr;
2N/A DAT_PORT_QUAL local_port_qual;
2N/A DAT_IA_ADDRESS_PTR remote_ia_address_ptr;
2N/A DAT_PORT_QUAL remote_port_qual;
2N/A DAT_PZ_HANDLE pz_handle;
2N/A DAT_EVD_HANDLE recv_evd_handle;
2N/A DAT_EVD_HANDLE request_evd_handle;
2N/A DAT_EVD_HANDLE connect_evd_handle;
2N/A DAT_SRQ_HANDLE srq_handle;
2N/A DAT_EP_ATTR ep_attr;
2N/A} DAT_EP_PARAM;
2N/A
2N/Atypedef DAT_UINT64 DAT_EP_PARAM_MASK;
2N/A#define DAT_EP_FIELD_IA_HANDLE UINT64_C(0x00000001)
2N/A#define DAT_EP_FIELD_EP_STATE UINT64_C(0x00000002)
2N/A#define DAT_EP_FIELD_LOCAL_IA_ADDRESS_PTR UINT64_C(0x00000004)
2N/A#define DAT_EP_FIELD_LOCAL_PORT_QUAL UINT64_C(0x00000008)
2N/A#define DAT_EP_FIELD_REMOTE_IA_ADDRESS_PTR UINT64_C(0x00000010)
2N/A#define DAT_EP_FIELD_REMOTE_PORT_QUAL UINT64_C(0x00000020)
2N/A#define DAT_EP_FIELD_PZ_HANDLE UINT64_C(0x00000040)
2N/A#define DAT_EP_FIELD_RECV_EVD_HANDLE UINT64_C(0x00000080)
2N/A#define DAT_EP_FIELD_REQUEST_EVD_HANDLE UINT64_C(0x00000100)
2N/A#define DAT_EP_FIELD_CONNECT_EVD_HANDLE UINT64_C(0x00000200)
2N/A#define DAT_EP_FIELD_SRQ_HANDLE UINT64_C(0x00000400)
2N/A
2N/A /* Remainder of values from EP_ATTR, 0x00001000 and up */
2N/A
2N/A#define DAT_EP_FIELD_EP_ATTR_SERVICE_TYPE UINT64_C(0x00001000)
2N/A#define DAT_EP_FIELD_EP_ATTR_MAX_MESSAGE_SIZE UINT64_C(0x00002000)
2N/A#define DAT_EP_FIELD_EP_ATTR_MAX_RDMA_SIZE UINT64_C(0x00004000)
2N/A#define DAT_EP_FIELD_EP_ATTR_QOS UINT64_C(0x00008000)
2N/A
2N/A#define DAT_EP_FIELD_EP_ATTR_RECV_COMPLETION_FLAGS UINT64_C(0x00010000)
2N/A#define DAT_EP_FIELD_EP_ATTR_REQUEST_COMPLETION_FLAGS UINT64_C(0x00020000)
2N/A#define DAT_EP_FIELD_EP_ATTR_MAX_RECV_DTOS UINT64_C(0x00040000)
2N/A#define DAT_EP_FIELD_EP_ATTR_MAX_REQUEST_DTOS UINT64_C(0x00080000)
2N/A
2N/A#define DAT_EP_FIELD_EP_ATTR_MAX_RECV_IOV UINT64_C(0x00100000)
2N/A#define DAT_EP_FIELD_EP_ATTR_MAX_REQUEST_IOV UINT64_C(0x00200000)
2N/A
2N/A#define DAT_EP_FIELD_EP_ATTR_MAX_RDMA_READ_IN UINT64_C(0x00400000)
2N/A#define DAT_EP_FIELD_EP_ATTR_MAX_RDMA_READ_OUT UINT64_C(0x00800000)
2N/A
2N/A#define DAT_EP_FIELD_EP_ATTR_SRQ_SOFT_HW UINT64_C(0x01000000)
2N/A
2N/A#define DAT_EP_FIELD_EP_ATTR_MAX_RDMA_READ_IOV UINT64_C(0x02000000)
2N/A#define DAT_EP_FIELD_EP_ATTR_MAX_RDMA_WRITE_IOV UINT64_C(0x04000000)
2N/A
2N/A#define DAT_EP_FIELD_EP_ATTR_NUM_TRANSPORT_ATTR UINT64_C(0x08000000)
2N/A#define DAT_EP_FIELD_EP_ATTR_TRANSPORT_SPECIFIC_ATTR UINT64_C(0x10000000)
2N/A
2N/A#define DAT_EP_FIELD_EP_ATTR_NUM_PROVIDER_ATTR UINT64_C(0x20000000)
2N/A#define DAT_EP_FIELD_EP_ATTR_PROVIDER_SPECIFIC_ATTR UINT64_C(0x40000000)
2N/A
2N/A#define DAT_EP_FIELD_EP_ATTR_ALL UINT64_C(0x7FFFF000)
2N/A#define DAT_EP_FIELD_ALL UINT64_C(0x7FFFF7FF)
2N/A
2N/A#define DAT_WATERMARK_INFINITE ((DAT_COUNT)~0)
2N/A
2N/A#define DAT_HW_DEFAULT DAT_WATERMARK_INFINITE
2N/A
2N/A#define DAT_SRQ_LW_DEFAULT 0x0
2N/A
2N/Atypedef enum dat_srq_state {
2N/A DAT_SRQ_STATE_OPERATIONAL,
2N/A DAT_SRQ_STATE_ERROR
2N/A} DAT_SRQ_STATE;
2N/A
2N/A#define DAT_VALUE_UNKNOWN (((DAT_COUNT) ~0)-1)
2N/A
2N/Atypedef struct dat_srq_attr {
2N/A DAT_COUNT max_recv_dtos;
2N/A DAT_COUNT max_recv_iov;
2N/A DAT_COUNT low_watermark;
2N/A} DAT_SRQ_ATTR;
2N/A
2N/Atypedef struct dat_srq_param {
2N/A DAT_IA_HANDLE ia_handle;
2N/A DAT_SRQ_STATE srq_state;
2N/A DAT_PZ_HANDLE pz_handle;
2N/A DAT_COUNT max_recv_dtos;
2N/A DAT_COUNT max_recv_iov;
2N/A DAT_COUNT low_watermark;
2N/A DAT_COUNT available_dto_count;
2N/A DAT_COUNT outstanding_dto_count;
2N/A} DAT_SRQ_PARAM;
2N/A
2N/Atypedef enum dat_srq_param_mask {
2N/A DAT_SRQ_FIELD_IA_HANDLE = 0x001,
2N/A DAT_SRQ_FIELD_SRQ_STATE = 0x002,
2N/A DAT_SRQ_FIELD_PZ_HANDLE = 0x004,
2N/A DAT_SRQ_FIELD_MAX_RECV_DTO = 0x008,
2N/A DAT_SRQ_FIELD_MAX_RECV_IOV = 0x010,
2N/A DAT_SRQ_FIELD_LOW_WATERMARK = 0x020,
2N/A DAT_SRQ_FIELD_AVAILABLE_DTO_COUNT = 0x040,
2N/A DAT_SRQ_FIELD_OUTSTANDING_DTO_COUNT = 0x080,
2N/A
2N/A DAT_SRQ_FIELD_ALL = 0x0FF
2N/A} DAT_SRQ_PARAM_MASK;
2N/A
2N/A/* PZ Parameters */
2N/A
2N/Atypedef struct dat_pz_param {
2N/A DAT_IA_HANDLE ia_handle;
2N/A} DAT_PZ_PARAM;
2N/A
2N/Atypedef enum dat_pz_param_mask {
2N/A DAT_PZ_FIELD_IA_HANDLE = 0x01,
2N/A
2N/A DAT_PZ_FIELD_ALL = 0x01
2N/A} DAT_PZ_PARAM_MASK;
2N/A
2N/A/* PSP Parameters */
2N/A
2N/Atypedef struct dat_psp_param {
2N/A DAT_IA_HANDLE ia_handle;
2N/A DAT_CONN_QUAL conn_qual;
2N/A DAT_EVD_HANDLE evd_handle;
2N/A DAT_PSP_FLAGS psp_flags;
2N/A} DAT_PSP_PARAM;
2N/A
2N/Atypedef enum dat_psp_param_mask {
2N/A DAT_PSP_FIELD_IA_HANDLE = 0x01,
2N/A DAT_PSP_FIELD_CONN_QUAL = 0x02,
2N/A DAT_PSP_FIELD_EVD_HANDLE = 0x04,
2N/A DAT_PSP_FIELD_PSP_FLAGS = 0x08,
2N/A
2N/A DAT_PSP_FIELD_ALL = 0x0F
2N/A} DAT_PSP_PARAM_MASK;
2N/A
2N/A/* RSP Parameters */
2N/A
2N/Atypedef struct dat_rsp_param {
2N/A DAT_IA_HANDLE ia_handle;
2N/A DAT_CONN_QUAL conn_qual;
2N/A DAT_EVD_HANDLE evd_handle;
2N/A DAT_EP_HANDLE ep_handle;
2N/A} DAT_RSP_PARAM;
2N/A
2N/Atypedef enum dat_rsp_param_mask {
2N/A DAT_RSP_FIELD_IA_HANDLE = 0x01,
2N/A DAT_RSP_FIELD_CONN_QUAL = 0x02,
2N/A DAT_RSP_FIELD_EVD_HANDLE = 0x04,
2N/A DAT_RSP_FIELD_EP_HANDLE = 0x08,
2N/A
2N/A DAT_RSP_FIELD_ALL = 0x0F
2N/A} DAT_RSP_PARAM_MASK;
2N/A
2N/A/*
2N/A * Connection Request Parameters.
2N/A *
2N/A * The Connection Request does not provide Remote Endpoint attributes.
2N/A * If a local Consumer needs this information, the remote Consumer should
2N/A * encode it into Private Data.
2N/A */
2N/A
2N/Atypedef struct dat_cr_param {
2N/A /* Remote IA whose Endpoint requested the connection. */
2N/A DAT_IA_ADDRESS_PTR remote_ia_address_ptr;
2N/A
2N/A /* Port qualifier of the remote Endpoint of the requested connection. */
2N/A DAT_PORT_QUAL remote_port_qual;
2N/A
2N/A /* Size of the Private Data. */
2N/A DAT_COUNT private_data_size;
2N/A
2N/A /*
2N/A * Pointer to the Private Data passed by remote side in the Connection
2N/A * Request.
2N/A */
2N/A DAT_PVOID private_data;
2N/A
2N/A /*
2N/A * The local Endpoint provided by the Service Point for the requested
2N/A * connection. It is the only Endpoint that can accept a Connection
2N/A * Request on this Service Point. The value DAT_HANDLE_NULL represents
2N/A * that there is no associated local Endpoint for the requested
2N/A * connection.
2N/A */
2N/A DAT_EP_HANDLE local_ep_handle;
2N/A
2N/A} DAT_CR_PARAM;
2N/A
2N/Atypedef enum dat_cr_param_mask {
2N/A DAT_CR_FIELD_REMOTE_IA_ADDRESS_PTR = 0x01,
2N/A DAT_CR_FIELD_REMOTE_PORT_QUAL = 0x02,
2N/A DAT_CR_FIELD_PRIVATE_DATA_SIZE = 0x04,
2N/A DAT_CR_FIELD_PRIVATE_DATA = 0x08,
2N/A DAT_CR_FIELD_LOCAL_EP_HANDLE = 0x10,
2N/A
2N/A DAT_CR_FIELD_ALL = 0x1F
2N/A} DAT_CR_PARAM_MASK;
2N/A
2N/A/*
2N/A * *********************** Events *****************************************
2N/A */
2N/A
2N/A/* Completion status flags */
2N/A
2N/A/* dto completion status */
2N/A
2N/A/* For backwards compatibility */
2N/A#define DAT_DTO_LENGTH_ERROR DAT_DTO_ERR_LOCAL_LENGTH
2N/A#define DAT_DTO_FAILURE DAT_DTO_ERR_FLUSHED
2N/A
2N/Atypedef enum dat_dto_completion_status {
2N/A DAT_DTO_SUCCESS = 0,
2N/A DAT_DTO_ERR_FLUSHED = 1,
2N/A DAT_DTO_ERR_LOCAL_LENGTH = 2,
2N/A DAT_DTO_ERR_LOCAL_EP = 3,
2N/A DAT_DTO_ERR_LOCAL_PROTECTION = 4,
2N/A DAT_DTO_ERR_BAD_RESPONSE = 5,
2N/A DAT_DTO_ERR_REMOTE_ACCESS = 6,
2N/A DAT_DTO_ERR_REMOTE_RESPONDER = 7,
2N/A DAT_DTO_ERR_TRANSPORT = 8,
2N/A DAT_DTO_ERR_RECEIVER_NOT_READY = 9,
2N/A DAT_DTO_ERR_PARTIAL_PACKET = 10,
2N/A DAT_RMR_OPERATION_FAILED = 11
2N/A} DAT_DTO_COMPLETION_STATUS;
2N/A
2N/A/* RMR completion status */
2N/A
2N/A/* For backwards compatibility */
2N/A#define DAT_RMR_BIND_SUCCESS DAT_DTO_SUCCESS
2N/A#define DAT_RMR_BIND_FAILURE DAT_DTO_ERR_FLUSHED
2N/A
2N/A#define DAT_RMR_BIND_COMPLETION_STATUS DAT_DTO_COMPLETION_STATUS
2N/A
2N/A/* Completion group structs (six total) */
2N/A
2N/A/* DTO completion event data */
2N/A/* transferred_length is not defined if status is not DAT_SUCCESS */
2N/Atypedef struct dat_dto_completion_event_data {
2N/A DAT_EP_HANDLE ep_handle;
2N/A DAT_DTO_COOKIE user_cookie;
2N/A DAT_DTO_COMPLETION_STATUS status;
2N/A DAT_VLEN transfered_length;
2N/A} DAT_DTO_COMPLETION_EVENT_DATA;
2N/A
2N/A/* RMR bind completion event data */
2N/Atypedef struct dat_rmr_bind_completion_event_data {
2N/A DAT_RMR_HANDLE rmr_handle;
2N/A DAT_RMR_COOKIE user_cookie;
2N/A DAT_RMR_BIND_COMPLETION_STATUS status;
2N/A} DAT_RMR_BIND_COMPLETION_EVENT_DATA;
2N/A
2N/Atypedef union dat_sp_handle {
2N/A DAT_RSP_HANDLE rsp_handle;
2N/A DAT_PSP_HANDLE psp_handle;
2N/A} DAT_SP_HANDLE;
2N/A
2N/A/* Connection Request Arrival event data */
2N/Atypedef struct dat_cr_arrival_event_data {
2N/A /*
2N/A * Handle to the Service Point that received the Connection Request
2N/A * from the remote side. If the Service Point was Reserved, sp is
2N/A * DAT_HANDLE_NULL because the reserved Service Point is automatically
2N/A * destroyed upon generating this event. Can be PSP or RSP.
2N/A */
2N/A DAT_SP_HANDLE sp_handle;
2N/A
2N/A /* Address of the IA on which the Connection Request arrived. */
2N/A DAT_IA_ADDRESS_PTR local_ia_address_ptr;
2N/A
2N/A /*
2N/A * Connection Qualifier of the IA on which the Service Point received a
2N/A * Connection Request.
2N/A */
2N/A DAT_CONN_QUAL conn_qual;
2N/A
2N/A /*
2N/A * The Connection Request instance created by a Provider for the
2N/A * arrived Connection Request. Consumers can find out private_data
2N/A * passed by a remote Consumer from cr_handle. It is up to a Consumer
2N/A * to dat_cr_accept or dat_cr_reject of the Connection Request.
2N/A */
2N/A DAT_CR_HANDLE cr_handle;
2N/A
2N/A} DAT_CR_ARRIVAL_EVENT_DATA;
2N/A
2N/A
2N/A/* Connection event data */
2N/Atypedef struct dat_connection_event_data {
2N/A DAT_EP_HANDLE ep_handle;
2N/A DAT_COUNT private_data_size;
2N/A DAT_PVOID private_data;
2N/A} DAT_CONNECTION_EVENT_DATA;
2N/A
2N/A/* Async Error event data */
2N/A/*
2N/A * For unaffiliated asynchronous event dat_handle is ia_handle. For Endpoint
2N/A * affiliated asynchronous event dat_handle is ep_handle. For EVD affiliated
2N/A * asynchronous event dat_handle is evd_handle. For SRQ affiliated asynchronous
2N/A * event dat_handle is srq_handle. For Memory affiliated asynchronous event
2N/A * dat_handle is either lmr_handle, rmr_handle or pz_handle.
2N/A */
2N/Atypedef struct dat_asynch_error_event_data {
2N/A DAT_HANDLE dat_handle; /* either IA, EP, EVD, SRQ */
2N/A /* LMR, RMR, or PZ handle */
2N/A DAT_COUNT reason; /* object specific */
2N/A} DAT_ASYNCH_ERROR_EVENT_DATA;
2N/A
2N/A/* The reason is object type specific and its values are defined below */
2N/Atypedef enum ia_async_error_reason {
2N/A DAT_IA_CATASTROPHIC_ERROR,
2N/A DAT_IA_OTHER_ERROR
2N/A} DAT_IA_ASYNC_ERROR_REASON;
2N/A
2N/Atypedef enum ep_async_error_reason {
2N/A DAT_EP_TRANSFER_TO_ERROR,
2N/A DAT_EP_OTHER_ERROR,
2N/A DAT_SRQ_SOFT_HIGH_WATERMARK_EVENT
2N/A} DAT_EP_ASYNC_ERROR_REASON;
2N/A
2N/Atypedef enum ep_evd_error_reason {
2N/A DAT_EVD_OVERFLOW_ERROR,
2N/A DAT_EVD_OTHER_ERROR
2N/A} DAT_EVD_ASYNC_ERROR_REASON;
2N/A
2N/Atypedef enum ep_srq_error_reason {
2N/A DAT_SRQ_TRANSFER_TO_ERROR,
2N/A DAT_SRQ_OTHER_ERROR,
2N/A DAT_SRQ_LOW_WATERMARK_EVENT
2N/A} DAT_SRQ_ASYNC_ERROR_REASON;
2N/A
2N/Atypedef enum lmr_async_error_reason {
2N/A DAT_LMR_OTHER_ERROR
2N/A} DAT_LMR_ASYNC_ERROR_REASON;
2N/A
2N/Atypedef enum rmr_async_error_reason {
2N/A DAT_RMR_OTHER_ERROR
2N/A} DAT_RMR_ASYNC_ERROR_REASON;
2N/A
2N/Atypedef enum pz_async_error_reason {
2N/A DAT_PZ_OTHER_ERROR
2N/A} DAT_PZ_ASYNC_ERROR_REASON;
2N/A
2N/A
2N/A/* Software event data */
2N/Atypedef struct dat_software_event_data {
2N/A DAT_PVOID pointer;
2N/A} DAT_SOFTWARE_EVENT_DATA;
2N/A
2N/Atypedef enum dat_event_number {
2N/A DAT_DTO_COMPLETION_EVENT = 0x00001,
2N/A
2N/A DAT_RMR_BIND_COMPLETION_EVENT = 0x01001,
2N/A
2N/A DAT_CONNECTION_REQUEST_EVENT = 0x02001,
2N/A
2N/A DAT_CONNECTION_EVENT_ESTABLISHED = 0x04001,
2N/A DAT_CONNECTION_EVENT_PEER_REJECTED = 0x04002,
2N/A DAT_CONNECTION_EVENT_NON_PEER_REJECTED = 0x04003,
2N/A DAT_CONNECTION_EVENT_ACCEPT_COMPLETION_ERROR = 0x04004,
2N/A DAT_CONNECTION_EVENT_DISCONNECTED = 0x04005,
2N/A DAT_CONNECTION_EVENT_BROKEN = 0x04006,
2N/A DAT_CONNECTION_EVENT_TIMED_OUT = 0x04007,
2N/A DAT_CONNECTION_EVENT_UNREACHABLE = 0x04008,
2N/A
2N/A DAT_ASYNC_ERROR_EVD_OVERFLOW = 0x08001,
2N/A DAT_ASYNC_ERROR_IA_CATASTROPHIC = 0x08002,
2N/A DAT_ASYNC_ERROR_EP_BROKEN = 0x08003,
2N/A DAT_ASYNC_ERROR_TIMED_OUT = 0x08004,
2N/A DAT_ASYNC_ERROR_PROVIDER_INTERNAL_ERROR = 0x08005,
2N/A
2N/A DAT_SOFTWARE_EVENT = 0x10001
2N/A} DAT_EVENT_NUMBER;
2N/A
2N/A/* Union for event Data */
2N/A
2N/Atypedef union dat_event_data {
2N/A DAT_DTO_COMPLETION_EVENT_DATA dto_completion_event_data;
2N/A DAT_RMR_BIND_COMPLETION_EVENT_DATA rmr_completion_event_data;
2N/A DAT_CR_ARRIVAL_EVENT_DATA cr_arrival_event_data;
2N/A DAT_CONNECTION_EVENT_DATA connect_event_data;
2N/A DAT_ASYNCH_ERROR_EVENT_DATA asynch_error_event_data;
2N/A DAT_SOFTWARE_EVENT_DATA software_event_data;
2N/A} DAT_EVENT_DATA;
2N/A
2N/A/* Event struct that holds all event information */
2N/A
2N/Atypedef struct dat_event {
2N/A DAT_EVENT_NUMBER event_number;
2N/A DAT_EVD_HANDLE evd_handle;
2N/A DAT_EVENT_DATA event_data;
2N/A} DAT_EVENT;
2N/A
2N/A/* Provider/registration info */
2N/A
2N/Atypedef struct dat_provider_info {
2N/A char ia_name[DAT_NAME_MAX_LENGTH];
2N/A DAT_UINT32 dapl_version_major;
2N/A DAT_UINT32 dapl_version_minor;
2N/A DAT_BOOLEAN is_thread_safe;
2N/A} DAT_PROVIDER_INFO;
2N/A
2N/A/*
2N/A * FUNCTION PROTOTYPES
2N/A */
2N/A/*
2N/A * IA functions
2N/A *
2N/A * Note that there are actual 'dat_ia_open' and 'dat_ia_close'
2N/A * functions, it is not just a re-directing #define. That is
2N/A * because the functions may have to ensure that the provider
2N/A * library is loaded before it can call it, and may choose to
2N/A * unload the library after the last close.
2N/A */
2N/A
2N/Aextern DAT_RETURN dat_ia_openv(
2N/A IN const DAT_NAME_PTR, /* provider */
2N/A IN DAT_COUNT, /* asynch_evd_min_qlen */
2N/A INOUT DAT_EVD_HANDLE *, /* asynch_evd_handle */
2N/A OUT DAT_IA_HANDLE *, /* ia_handle */
2N/A IN DAT_UINT32, /* dat major version number */
2N/A IN DAT_UINT32, /* dat minor version number */
2N/A IN DAT_BOOLEAN); /* dat thread safety */
2N/A
2N/A#define dat_ia_open(name, qlen, async_evd, ia) \
2N/A dat_ia_openv((name), (qlen), (async_evd), (ia), \
2N/A DAT_VERSION_MAJOR, DAT_VERSION_MINOR, \
2N/A DAT_THREADSAFE)
2N/A
2N/Aextern DAT_RETURN dat_ia_query(
2N/A IN DAT_IA_HANDLE, /* ia handle */
2N/A OUT DAT_EVD_HANDLE *, /* async_evd_handle */
2N/A IN DAT_IA_ATTR_MASK, /* ia_attr_mask */
2N/A OUT DAT_IA_ATTR *, /* ia_attr */
2N/A IN DAT_PROVIDER_ATTR_MASK, /* provider_attr_mask */
2N/A OUT DAT_PROVIDER_ATTR *); /* provider_attr */
2N/A
2N/Aextern DAT_RETURN dat_ia_close(
2N/A IN DAT_IA_HANDLE, /* ia_handle */
2N/A IN DAT_CLOSE_FLAGS); /* close_flags */
2N/A
2N/A/* helper functions */
2N/A
2N/Aextern DAT_RETURN dat_set_consumer_context(
2N/A IN DAT_HANDLE, /* dat handle */
2N/A IN DAT_CONTEXT); /* context */
2N/A
2N/Aextern DAT_RETURN dat_get_consumer_context(
2N/A IN DAT_HANDLE, /* dat handle */
2N/A OUT DAT_CONTEXT *); /* context */
2N/A
2N/Aextern DAT_RETURN dat_get_handle_type(
2N/A IN DAT_HANDLE, /* dat_handle */
2N/A OUT DAT_HANDLE_TYPE *); /* handle_type */
2N/A
2N/A/* CR Functions */
2N/A
2N/Aextern DAT_RETURN dat_cr_query(
2N/A IN DAT_CR_HANDLE, /* cr_handle */
2N/A IN DAT_CR_PARAM_MASK, /* cr_param_mask */
2N/A OUT DAT_CR_PARAM *); /* cr_param */
2N/A
2N/Aextern DAT_RETURN dat_cr_accept(
2N/A IN DAT_CR_HANDLE, /* cr_handle */
2N/A IN DAT_EP_HANDLE, /* ep_handle */
2N/A IN DAT_COUNT, /* private_data_size */
2N/A IN const DAT_PVOID); /* private_data */
2N/A
2N/Aextern DAT_RETURN dat_cr_reject(
2N/A IN DAT_CR_HANDLE);
2N/A
2N/A/*
2N/A * For DAT-1.1 and above, this function is defined for both uDAPL and kDAPL.
2N/A * For DAT-1.0 it was only defined for uDAPL.
2N/A */
2N/Aextern DAT_RETURN dat_cr_handoff(
2N/A IN DAT_CR_HANDLE, /* cr_handle */
2N/A IN DAT_CONN_QUAL); /* handoff */
2N/A
2N/A/* EVD Functions */
2N/A
2N/Aextern DAT_RETURN dat_evd_resize(
2N/A IN DAT_EVD_HANDLE, /* evd_handle */
2N/A IN DAT_COUNT); /* evd_min_qlen */
2N/A
2N/Aextern DAT_RETURN dat_evd_post_se(
2N/A IN DAT_EVD_HANDLE, /* evd_handle */
2N/A IN const DAT_EVENT *); /* event */
2N/A
2N/Aextern DAT_RETURN dat_evd_dequeue(
2N/A IN DAT_EVD_HANDLE, /* evd_handle */
2N/A OUT DAT_EVENT *); /* event */
2N/A
2N/Aextern DAT_RETURN dat_evd_query(
2N/A IN DAT_EVD_HANDLE, /* evd_handle */
2N/A IN DAT_EVD_PARAM_MASK, /* evd_param_mask */
2N/A OUT DAT_EVD_PARAM *); /* evd_param */
2N/A
2N/Aextern DAT_RETURN dat_evd_free(
2N/A IN DAT_EVD_HANDLE); /* evd_handle */
2N/A
2N/A/* EP functions */
2N/A
2N/Aextern DAT_RETURN dat_ep_create(
2N/A IN DAT_IA_HANDLE, /* ia_handle */
2N/A IN DAT_PZ_HANDLE, /* pz_handle */
2N/A IN DAT_EVD_HANDLE, /* recv_completion_evd_handle */
2N/A IN DAT_EVD_HANDLE, /* request_completion_evd_handle */
2N/A IN DAT_EVD_HANDLE, /* connect_evd_handle */
2N/A IN const DAT_EP_ATTR *, /* ep_attributes */
2N/A OUT DAT_EP_HANDLE *); /* ep_handle */
2N/A
2N/Aextern DAT_RETURN dat_ep_query(
2N/A IN DAT_EP_HANDLE, /* ep_handle */
2N/A IN DAT_EP_PARAM_MASK, /* ep_param_mask */
2N/A OUT DAT_EP_PARAM *); /* ep_param */
2N/A
2N/Aextern DAT_RETURN dat_ep_modify(
2N/A IN DAT_EP_HANDLE, /* ep_handle */
2N/A IN DAT_EP_PARAM_MASK, /* ep_param_mask */
2N/A IN const DAT_EP_PARAM *); /* ep_param */
2N/A
2N/Aextern DAT_RETURN dat_ep_connect(
2N/A IN DAT_EP_HANDLE, /* ep_handle */
2N/A IN DAT_IA_ADDRESS_PTR, /* remote_ia_address */
2N/A IN DAT_CONN_QUAL, /* remote_conn_qual */
2N/A IN DAT_TIMEOUT, /* timeout */
2N/A IN DAT_COUNT, /* private_data_size */
2N/A IN const DAT_PVOID, /* private_data */
2N/A IN DAT_QOS, /* quality_of_service */
2N/A IN DAT_CONNECT_FLAGS); /* connect_flags */
2N/A
2N/Aextern DAT_RETURN dat_ep_dup_connect(
2N/A IN DAT_EP_HANDLE, /* ep_handle */
2N/A IN DAT_EP_HANDLE, /* ep_dup_handle */
2N/A IN DAT_TIMEOUT, /* timeout */
2N/A IN DAT_COUNT, /* private_data_size */
2N/A IN const DAT_PVOID, /* private_data */
2N/A IN DAT_QOS); /* quality_of_service */
2N/A
2N/Aextern DAT_RETURN dat_ep_disconnect(
2N/A IN DAT_EP_HANDLE, /* ep_handle */
2N/A IN DAT_CLOSE_FLAGS); /* close_flags */
2N/A
2N/Aextern DAT_RETURN dat_ep_post_send(
2N/A IN DAT_EP_HANDLE, /* ep_handle */
2N/A IN DAT_COUNT, /* num_segments */
2N/A IN DAT_LMR_TRIPLET *, /* local_iov */
2N/A IN DAT_DTO_COOKIE, /* user_cookie */
2N/A IN DAT_COMPLETION_FLAGS); /* completion_flags */
2N/A
2N/Aextern DAT_RETURN dat_ep_post_recv(
2N/A IN DAT_EP_HANDLE, /* ep_handle */
2N/A IN DAT_COUNT, /* num_segments */
2N/A IN DAT_LMR_TRIPLET *, /* local_iov */
2N/A IN DAT_DTO_COOKIE, /* user_cookie */
2N/A IN DAT_COMPLETION_FLAGS); /* completion_flags */
2N/A
2N/Aextern DAT_RETURN dat_ep_post_rdma_read(
2N/A IN DAT_EP_HANDLE, /* ep_handle */
2N/A IN DAT_COUNT, /* num_segments */
2N/A IN DAT_LMR_TRIPLET *, /* local_iov */
2N/A IN DAT_DTO_COOKIE, /* user_cookie */
2N/A IN const DAT_RMR_TRIPLET *, /* remote_iov */
2N/A IN DAT_COMPLETION_FLAGS); /* completion_flags */
2N/A
2N/Aextern DAT_RETURN dat_ep_post_rdma_write(
2N/A IN DAT_EP_HANDLE, /* ep_handle */
2N/A IN DAT_COUNT, /* num_segments */
2N/A IN DAT_LMR_TRIPLET *, /* local_iov */
2N/A IN DAT_DTO_COOKIE, /* user_cookie */
2N/A IN const DAT_RMR_TRIPLET *, /* remote_iov */
2N/A IN DAT_COMPLETION_FLAGS); /* completion_flags */
2N/A
2N/Aextern DAT_RETURN dat_ep_get_status(
2N/A IN DAT_EP_HANDLE, /* ep_handle */
2N/A OUT DAT_EP_STATE *, /* ep_state */
2N/A OUT DAT_BOOLEAN *, /* recv_idle */
2N/A OUT DAT_BOOLEAN *); /* request_idle */
2N/A
2N/Aextern DAT_RETURN dat_ep_free(
2N/A IN DAT_EP_HANDLE); /* ep_handle */
2N/A
2N/Aextern DAT_RETURN dat_ep_reset(
2N/A IN DAT_EP_HANDLE); /* ep_handle */
2N/A
2N/A/* LMR functions */
2N/A
2N/Aextern DAT_RETURN dat_lmr_query(
2N/A IN DAT_LMR_HANDLE, /* lmr_handle */
2N/A IN DAT_LMR_PARAM_MASK, /* lmr_param_mask */
2N/A OUT DAT_LMR_PARAM *); /* lmr_param */
2N/A
2N/Aextern DAT_RETURN dat_lmr_free(
2N/A IN DAT_LMR_HANDLE); /* lmr_handle */
2N/A
2N/A/* Non-coherent memory functions */
2N/A
2N/Aextern DAT_RETURN dat_lmr_sync_rdma_read(
2N/A IN DAT_IA_HANDLE, /* ia_handle */
2N/A IN const DAT_LMR_TRIPLET *, /* local_segments */
2N/A IN DAT_VLEN); /* num_segments */
2N/A
2N/Aextern DAT_RETURN dat_lmr_sync_rdma_write(
2N/A IN DAT_IA_HANDLE, /* ia_handle */
2N/A IN const DAT_LMR_TRIPLET *, /* local_segments */
2N/A IN DAT_VLEN); /* num_segments */
2N/A
2N/A/* RMR Functions */
2N/A
2N/Aextern DAT_RETURN dat_rmr_create(
2N/A IN DAT_PZ_HANDLE, /* pz_handle */
2N/A OUT DAT_RMR_HANDLE *); /* rmr_handle */
2N/A
2N/Aextern DAT_RETURN dat_rmr_query(
2N/A IN DAT_RMR_HANDLE, /* rmr_handle */
2N/A IN DAT_RMR_PARAM_MASK, /* rmr_param_mask */
2N/A OUT DAT_RMR_PARAM *); /* rmr_param */
2N/A
2N/Aextern DAT_RETURN dat_rmr_bind(
2N/A IN DAT_RMR_HANDLE, /* rmr_handle */
2N/A IN const DAT_LMR_TRIPLET *, /* lmr_triplet */
2N/A IN DAT_MEM_PRIV_FLAGS, /* mem_priv */
2N/A IN DAT_EP_HANDLE, /* ep_handle */
2N/A IN DAT_RMR_COOKIE, /* user_cookie */
2N/A IN DAT_COMPLETION_FLAGS, /* completion_flags */
2N/A OUT DAT_RMR_CONTEXT *); /* context */
2N/A
2N/Aextern DAT_RETURN dat_rmr_free(
2N/A IN DAT_RMR_HANDLE); /* rmr_handle */
2N/A
2N/A/* PSP Functions */
2N/A
2N/Aextern DAT_RETURN dat_psp_create(
2N/A IN DAT_IA_HANDLE, /* ia_handle */
2N/A IN DAT_CONN_QUAL, /* conn_qual */
2N/A IN DAT_EVD_HANDLE, /* evd_handle */
2N/A IN DAT_PSP_FLAGS, /* psp_flags */
2N/A OUT DAT_PSP_HANDLE *); /* psp_handle */
2N/A
2N/Aextern DAT_RETURN dat_psp_create_any(
2N/A IN DAT_IA_HANDLE, /* ia_handle */
2N/A OUT DAT_CONN_QUAL *, /* conn_qual */
2N/A IN DAT_EVD_HANDLE, /* evd_handle */
2N/A IN DAT_PSP_FLAGS, /* psp_flags */
2N/A OUT DAT_PSP_HANDLE *); /* psp_handle */
2N/A
2N/Aextern DAT_RETURN dat_psp_query(
2N/A IN DAT_PSP_HANDLE, /* psp_handle */
2N/A IN DAT_PSP_PARAM_MASK, /* psp_param_mask */
2N/A OUT DAT_PSP_PARAM *); /* psp_param */
2N/A
2N/Aextern DAT_RETURN dat_psp_free(
2N/A IN DAT_PSP_HANDLE); /* psp_handle */
2N/A
2N/A/* RSP Functions */
2N/A
2N/Aextern DAT_RETURN dat_rsp_create(
2N/A IN DAT_IA_HANDLE, /* ia_handle */
2N/A IN DAT_CONN_QUAL, /* conn_qual */
2N/A IN DAT_EP_HANDLE, /* ep_handle */
2N/A IN DAT_EVD_HANDLE, /* evd_handle */
2N/A OUT DAT_RSP_HANDLE *); /* rsp_handle */
2N/A
2N/Aextern DAT_RETURN dat_rsp_query(
2N/A IN DAT_RSP_HANDLE, /* rsp_handle */
2N/A IN DAT_RSP_PARAM_MASK, /* rsp_param_mask */
2N/A OUT DAT_RSP_PARAM *); /* rsp_param */
2N/A
2N/Aextern DAT_RETURN dat_rsp_free(
2N/A IN DAT_RSP_HANDLE); /* rsp_handle */
2N/A
2N/A/* PZ Functions */
2N/A
2N/Aextern DAT_RETURN dat_pz_create(
2N/A IN DAT_IA_HANDLE, /* ia_handle */
2N/A OUT DAT_PZ_HANDLE *); /* pz_handle */
2N/A
2N/Aextern DAT_RETURN dat_pz_query(
2N/A IN DAT_PZ_HANDLE, /* pz_handle */
2N/A IN DAT_PZ_PARAM_MASK, /* pz_param_mask */
2N/A OUT DAT_PZ_PARAM *); /* pz_param */
2N/A
2N/Aextern DAT_RETURN dat_pz_free(
2N/A IN DAT_PZ_HANDLE); /* pz_handle */
2N/A
2N/A/*
2N/A * SRQ functions
2N/A */
2N/Aextern DAT_RETURN dat_ep_create_with_srq(
2N/A IN DAT_IA_HANDLE, /* ia_handle */
2N/A IN DAT_PZ_HANDLE, /* pz_handle */
2N/A IN DAT_EVD_HANDLE, /* recv_evd_handle */
2N/A IN DAT_EVD_HANDLE, /* request_evd_handle */
2N/A IN DAT_EVD_HANDLE, /* connect_evd_handle */
2N/A IN DAT_SRQ_HANDLE, /* srq_handle */
2N/A IN const DAT_EP_ATTR *, /* ep_attributes */
2N/A OUT DAT_EP_HANDLE *); /* ep_handle */
2N/A
2N/Aextern DAT_RETURN dat_ep_recv_query(
2N/A IN DAT_EP_HANDLE, /* ep_handle */
2N/A OUT DAT_COUNT *, /* nbufs_allocated */
2N/A OUT DAT_COUNT *); /* bufs_alloc_span */
2N/A
2N/Aextern DAT_RETURN dat_ep_set_watermark(
2N/A IN DAT_EP_HANDLE, /* ep_handle */
2N/A IN DAT_COUNT, /* soft_high_watermark */
2N/A IN DAT_COUNT); /* hard_high_watermark */
2N/A
2N/Aextern DAT_RETURN dat_srq_create(
2N/A IN DAT_IA_HANDLE, /* ia_handle */
2N/A IN DAT_PZ_HANDLE, /* pz_handle */
2N/A IN DAT_SRQ_ATTR *, /* srq_attr */
2N/A OUT DAT_SRQ_HANDLE *); /* srq_handle */
2N/A
2N/Aextern DAT_RETURN dat_srq_free(
2N/A IN DAT_SRQ_HANDLE); /* srq_handle */
2N/A
2N/Aextern DAT_RETURN dat_srq_post_recv(
2N/A IN DAT_SRQ_HANDLE, /* srq_handle */
2N/A IN DAT_COUNT, /* num_segments */
2N/A IN DAT_LMR_TRIPLET *, /* local_iov */
2N/A IN DAT_DTO_COOKIE); /* user_cookie */
2N/A
2N/Aextern DAT_RETURN dat_srq_query(
2N/A IN DAT_SRQ_HANDLE, /* srq_handle */
2N/A IN DAT_SRQ_PARAM_MASK, /* srq_param_mask */
2N/A OUT DAT_SRQ_PARAM *); /* srq_param */
2N/A
2N/Aextern DAT_RETURN dat_srq_resize(
2N/A IN DAT_SRQ_HANDLE, /* srq_handle */
2N/A IN DAT_COUNT); /* srq_max_recv_dto */
2N/A
2N/Aextern DAT_RETURN dat_srq_set_lw(
2N/A IN DAT_SRQ_HANDLE, /* srq_handle */
2N/A IN DAT_COUNT); /* low_watermark */
2N/A
2N/A/*
2N/A * DAT registry functions.
2N/A *
2N/A * Note the dat_ia_open and dat_ia_close functions are linked to
2N/A * registration code which "redirects" to the appropriate provider.
2N/A */
2N/Aextern DAT_RETURN dat_registry_list_providers(
2N/A IN DAT_COUNT, /* max_to_return */
2N/A OUT DAT_COUNT *, /* entries_returned */
2N/A /* dat_provider_list */
2N/A OUT DAT_PROVIDER_INFO *(dat_provider_list[]));
2N/A/*
2N/A * DAT error functions.
2N/A */
2N/Aextern DAT_RETURN dat_strerror(
2N/A IN DAT_RETURN, /* dat function return */
2N/A OUT const char **, /* major message string */
2N/A OUT const char **); /* minor message string */
2N/A
2N/A
2N/A#ifdef __cplusplus
2N/A}
2N/A#endif
2N/A
2N/A#endif /* _DAT_H_ */