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 * See the License for the specific language governing permissions 2N/A * and limitations under the License. 2N/A * When distributing Covered Code, include this CDDL HEADER in each 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 * Copyright (c) 2002-2004, Network Appliance, Inc. All rights reserved. 2N/A * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. 2N/A * PURPOSE: defines the common DAT API for uDAPL and kDAPL. 2N/A * Description: Header file for "uDAPL: User Direct Access Programming 2N/A * Library, Version: 1.2" 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/* Generic DAT types */ 2N/A * Used for provider, vendor, transport, hardware specific attributes 2N/A const char *
name;
/* Name of attribute */ 2N/A const char *
value;
/* Value of attribute */ 2N/A /* Completes with notification */ 2N/A /* Completions suppressed if successful */ 2N/A /* Sender controlled notification for recv completion */ 2N/A /* Completions with unsignaled notifications */ 2N/A /* Do not start processing until all previous RDMA reads complete. */ 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/* timeout = infinity */ 2N/A/* dat NULL handles */ 2N/A/* QOS definitions */ 2N/A /* not low latency, nor high throughput */ 2N/A /* both low latency and high throughput */ 2N/A /* DAT events only, no software events */ 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 * 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 * 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 * DAT_LMRC_TO_LSB(lmrc) returns the supplied LMR Context in ls-byte 2N/A * DAT_LMRC_TO_MSB(lmrc) returns the supplied LMR Context in ms-byte 2N/A * DAT_RMRC_TO_LSB(rmrc) returns the supplied RMR Context in ls-byte 2N/A * DAT_RMRC_TO_MSB(rmrc) returns the supplied RMR Context in ms-byte 2N/A * DAT_VADDR_TO_LSB(vaddr) returns the supplied Virtual Address in ls-byte 2N/A * DAT_VADDR_TO_MSB(vaddr) returns the supplied Virtual Address in 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 * 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 * For the best performance, Consumers should align each buffer segment to 2N/A * the boundary specified by the dat_optimal_alignment. 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 * The extra padding ensures that context, address, and length parameters are 2N/A * aligned on 64-bit boundaries. 2N/A/* Memory privileges */ 2N/A * For backwards compatibility with DAT-1.0 memory privileges values 2N/A/* LMR Arguments Mask */ 2N/A/* RMR Argumments & RMR Arguments Mask */ 2N/A/* Provider attributes */ 2N/A /* Not modification by provider, consumer can use anytime. */ 2N/A /* Provider does not modify returned IOV DTO on completion. */ 2N/A /* Provider may modify IOV DTO on completion, can't trust it. */ 2N/A/* General Interface Adapter attributes. These apply to both udat and kdat. */ 2N/A/* To support backwards compatibility for DAPL-1.0 */ 2N/A/* to support backwards compatibility for DAPL-1.0 & DAPL-1.1 */ 2N/A/* To support backwards compatibility for DAPL-1.0 & DAPL-1.1 */ 2N/A/* To support backwards compatibility for DAPL-1.0 & DAPL-1.1 */ 2N/A/* Endpoint attributes */ 2N/A/* Endpoint Parameters */ 2N/A/* For backwards compatibility */ 2N/A /* Remainder of values from EP_ATTR, 0x00001000 and up */ 2N/A * Connection Request Parameters. 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 /* Remote IA whose Endpoint requested the connection. */ 2N/A /* Port qualifier of the remote Endpoint of the requested connection. */ 2N/A /* Size of the Private Data. */ 2N/A * Pointer to the Private Data passed by remote side in the Connection 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 * *********************** Events ***************************************** 2N/A/* Completion status flags */ 2N/A/* dto completion status */ 2N/A/* For backwards compatibility */ 2N/A/* RMR completion status */ 2N/A/* For backwards compatibility */ 2N/A/* Completion group structs (six total) */ 2N/A/* DTO completion event data */ 2N/A/* transferred_length is not defined if status is not DAT_SUCCESS */ 2N/A/* RMR bind completion event data */ 2N/A/* Connection Request Arrival event data */ 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 /* Address of the IA on which the Connection Request arrived. */ 2N/A * Connection Qualifier of the IA on which the Service Point received a 2N/A * Connection Request. 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/* Connection event data */ 2N/A/* Async Error event data */ 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 /* LMR, RMR, or PZ handle */ 2N/A/* The reason is object type specific and its values are defined below */ 2N/A/* Software event data */ 2N/A/* Union for event Data */ 2N/A/* Event struct that holds all event information */ 2N/A * FUNCTION PROTOTYPES 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/* helper functions */ 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/* Non-coherent memory functions */ 2N/A * DAT registry functions. 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 /* dat_provider_list */ 2N/A * DAT error functions. 2N/A OUT const char **,
/* major message string */ 2N/A OUT const char **);
/* minor message string */