1*7c478bd9Sstevel@tonic-gate /* 2*7c478bd9Sstevel@tonic-gate * CDDL HEADER START 3*7c478bd9Sstevel@tonic-gate * 4*7c478bd9Sstevel@tonic-gate * The contents of this file are subject to the terms of the 5*7c478bd9Sstevel@tonic-gate * Common Development and Distribution License, Version 1.0 only 6*7c478bd9Sstevel@tonic-gate * (the "License"). You may not use this file except in compliance 7*7c478bd9Sstevel@tonic-gate * with the License. 8*7c478bd9Sstevel@tonic-gate * 9*7c478bd9Sstevel@tonic-gate * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10*7c478bd9Sstevel@tonic-gate * or http://www.opensolaris.org/os/licensing. 11*7c478bd9Sstevel@tonic-gate * See the License for the specific language governing permissions 12*7c478bd9Sstevel@tonic-gate * and limitations under the License. 13*7c478bd9Sstevel@tonic-gate * 14*7c478bd9Sstevel@tonic-gate * When distributing Covered Code, include this CDDL HEADER in each 15*7c478bd9Sstevel@tonic-gate * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16*7c478bd9Sstevel@tonic-gate * If applicable, add the following below this CDDL HEADER, with the 17*7c478bd9Sstevel@tonic-gate * fields enclosed by brackets "[]" replaced with your own identifying 18*7c478bd9Sstevel@tonic-gate * information: Portions Copyright [yyyy] [name of copyright owner] 19*7c478bd9Sstevel@tonic-gate * 20*7c478bd9Sstevel@tonic-gate * CDDL HEADER END 21*7c478bd9Sstevel@tonic-gate */ 22*7c478bd9Sstevel@tonic-gate /* 23*7c478bd9Sstevel@tonic-gate * Copyright (c) 2002-2004, Network Appliance, Inc. All rights reserved. 24*7c478bd9Sstevel@tonic-gate */ 25*7c478bd9Sstevel@tonic-gate 26*7c478bd9Sstevel@tonic-gate /* 27*7c478bd9Sstevel@tonic-gate * Copyright 2004 Sun Microsystems, Inc. All rights reserved. 28*7c478bd9Sstevel@tonic-gate * Use is subject to license terms. 29*7c478bd9Sstevel@tonic-gate */ 30*7c478bd9Sstevel@tonic-gate 31*7c478bd9Sstevel@tonic-gate #ifndef _DAT_H_ 32*7c478bd9Sstevel@tonic-gate #define _DAT_H_ 33*7c478bd9Sstevel@tonic-gate 34*7c478bd9Sstevel@tonic-gate #pragma ident "%Z%%M% %I% %E% SMI" 35*7c478bd9Sstevel@tonic-gate 36*7c478bd9Sstevel@tonic-gate /* 37*7c478bd9Sstevel@tonic-gate * 38*7c478bd9Sstevel@tonic-gate * HEADER: dat.h 39*7c478bd9Sstevel@tonic-gate * 40*7c478bd9Sstevel@tonic-gate * PURPOSE: defines the common DAT API for uDAPL and kDAPL. 41*7c478bd9Sstevel@tonic-gate * 42*7c478bd9Sstevel@tonic-gate * Description: Header file for "uDAPL: User Direct Access Programming 43*7c478bd9Sstevel@tonic-gate * Library, Version: 1.2" 44*7c478bd9Sstevel@tonic-gate * 45*7c478bd9Sstevel@tonic-gate * Mapping rules: 46*7c478bd9Sstevel@tonic-gate * All global symbols are prepended with "DAT_" or "dat_" 47*7c478bd9Sstevel@tonic-gate * All DAT objects have an 'api' tag which, such as 'ep' or 'lmr' 48*7c478bd9Sstevel@tonic-gate * The method table is in the provider definition structure. 49*7c478bd9Sstevel@tonic-gate * 50*7c478bd9Sstevel@tonic-gate * 51*7c478bd9Sstevel@tonic-gate */ 52*7c478bd9Sstevel@tonic-gate 53*7c478bd9Sstevel@tonic-gate #ifdef __cplusplus 54*7c478bd9Sstevel@tonic-gate extern "C" { 55*7c478bd9Sstevel@tonic-gate #endif 56*7c478bd9Sstevel@tonic-gate 57*7c478bd9Sstevel@tonic-gate #include <dat/dat_error.h> 58*7c478bd9Sstevel@tonic-gate 59*7c478bd9Sstevel@tonic-gate /* Generic DAT types */ 60*7c478bd9Sstevel@tonic-gate 61*7c478bd9Sstevel@tonic-gate typedef char *DAT_NAME_PTR; /* Format for ia_name and attributes */ 62*7c478bd9Sstevel@tonic-gate #define DAT_NAME_MAX_LENGTH 256 63*7c478bd9Sstevel@tonic-gate 64*7c478bd9Sstevel@tonic-gate /* 65*7c478bd9Sstevel@tonic-gate * Used for provider, vendor, transport, hardware specific attributes 66*7c478bd9Sstevel@tonic-gate * definitions. 67*7c478bd9Sstevel@tonic-gate */ 68*7c478bd9Sstevel@tonic-gate 69*7c478bd9Sstevel@tonic-gate typedef struct dat_named_attr { 70*7c478bd9Sstevel@tonic-gate const char *name; /* Name of attribute */ 71*7c478bd9Sstevel@tonic-gate const char *value; /* Value of attribute */ 72*7c478bd9Sstevel@tonic-gate } DAT_NAMED_ATTR; 73*7c478bd9Sstevel@tonic-gate 74*7c478bd9Sstevel@tonic-gate typedef enum dat_boolean { 75*7c478bd9Sstevel@tonic-gate DAT_FALSE = 0, 76*7c478bd9Sstevel@tonic-gate DAT_TRUE = 1 77*7c478bd9Sstevel@tonic-gate } DAT_BOOLEAN; 78*7c478bd9Sstevel@tonic-gate 79*7c478bd9Sstevel@tonic-gate typedef union dat_context { 80*7c478bd9Sstevel@tonic-gate DAT_PVOID as_ptr; 81*7c478bd9Sstevel@tonic-gate DAT_UINT64 as_64; 82*7c478bd9Sstevel@tonic-gate DAT_UVERYLONG as_index; 83*7c478bd9Sstevel@tonic-gate } DAT_CONTEXT; 84*7c478bd9Sstevel@tonic-gate 85*7c478bd9Sstevel@tonic-gate typedef DAT_CONTEXT DAT_DTO_COOKIE; 86*7c478bd9Sstevel@tonic-gate typedef DAT_CONTEXT DAT_RMR_COOKIE; 87*7c478bd9Sstevel@tonic-gate 88*7c478bd9Sstevel@tonic-gate typedef enum dat_completion_flags { 89*7c478bd9Sstevel@tonic-gate /* Completes with notification */ 90*7c478bd9Sstevel@tonic-gate DAT_COMPLETION_DEFAULT_FLAG = 0x00, 91*7c478bd9Sstevel@tonic-gate 92*7c478bd9Sstevel@tonic-gate /* Completions suppressed if successful */ 93*7c478bd9Sstevel@tonic-gate DAT_COMPLETION_SUPPRESS_FLAG = 0x01, 94*7c478bd9Sstevel@tonic-gate 95*7c478bd9Sstevel@tonic-gate /* Sender controlled notification for recv completion */ 96*7c478bd9Sstevel@tonic-gate DAT_COMPLETION_SOLICITED_WAIT_FLAG = 0x02, 97*7c478bd9Sstevel@tonic-gate 98*7c478bd9Sstevel@tonic-gate /* Completions with unsignaled notifications */ 99*7c478bd9Sstevel@tonic-gate DAT_COMPLETION_UNSIGNALLED_FLAG = 0x04, 100*7c478bd9Sstevel@tonic-gate 101*7c478bd9Sstevel@tonic-gate /* Do not start processing until all previous RDMA reads complete. */ 102*7c478bd9Sstevel@tonic-gate DAT_COMPLETION_BARRIER_FENCE_FLAG = 0x08, 103*7c478bd9Sstevel@tonic-gate 104*7c478bd9Sstevel@tonic-gate /* 105*7c478bd9Sstevel@tonic-gate * Only valid for uDAPL as EP attribute for Recv Completion flags. 106*7c478bd9Sstevel@tonic-gate * Waiter unblocking is controlled by Threshold value of dat_evd_wait. 107*7c478bd9Sstevel@tonic-gate * UNSIGNALLED for RECV not allowed when EP has this attribute 108*7c478bd9Sstevel@tonic-gate */ 109*7c478bd9Sstevel@tonic-gate DAT_COMPLETION_EVD_THRESHOLD_FLAG = 0x10 110*7c478bd9Sstevel@tonic-gate 111*7c478bd9Sstevel@tonic-gate } DAT_COMPLETION_FLAGS; 112*7c478bd9Sstevel@tonic-gate 113*7c478bd9Sstevel@tonic-gate 114*7c478bd9Sstevel@tonic-gate typedef DAT_UINT32 DAT_TIMEOUT; /* microseconds */ 115*7c478bd9Sstevel@tonic-gate 116*7c478bd9Sstevel@tonic-gate /* timeout = infinity */ 117*7c478bd9Sstevel@tonic-gate #define DAT_TIMEOUT_INFINITE ((DAT_TIMEOUT) ~0) 118*7c478bd9Sstevel@tonic-gate 119*7c478bd9Sstevel@tonic-gate /* dat handles */ 120*7c478bd9Sstevel@tonic-gate typedef DAT_PVOID DAT_HANDLE; 121*7c478bd9Sstevel@tonic-gate typedef DAT_HANDLE DAT_CR_HANDLE; 122*7c478bd9Sstevel@tonic-gate typedef DAT_HANDLE DAT_EP_HANDLE; 123*7c478bd9Sstevel@tonic-gate typedef DAT_HANDLE DAT_EVD_HANDLE; 124*7c478bd9Sstevel@tonic-gate typedef DAT_HANDLE DAT_IA_HANDLE; 125*7c478bd9Sstevel@tonic-gate typedef DAT_HANDLE DAT_LMR_HANDLE; 126*7c478bd9Sstevel@tonic-gate typedef DAT_HANDLE DAT_PSP_HANDLE; 127*7c478bd9Sstevel@tonic-gate typedef DAT_HANDLE DAT_PZ_HANDLE; 128*7c478bd9Sstevel@tonic-gate typedef DAT_HANDLE DAT_RMR_HANDLE; 129*7c478bd9Sstevel@tonic-gate typedef DAT_HANDLE DAT_RSP_HANDLE; 130*7c478bd9Sstevel@tonic-gate typedef DAT_HANDLE DAT_SRQ_HANDLE; 131*7c478bd9Sstevel@tonic-gate 132*7c478bd9Sstevel@tonic-gate 133*7c478bd9Sstevel@tonic-gate /* dat NULL handles */ 134*7c478bd9Sstevel@tonic-gate #define DAT_HANDLE_NULL ((DAT_HANDLE)NULL) 135*7c478bd9Sstevel@tonic-gate 136*7c478bd9Sstevel@tonic-gate typedef DAT_SOCK_ADDR *DAT_IA_ADDRESS_PTR; 137*7c478bd9Sstevel@tonic-gate 138*7c478bd9Sstevel@tonic-gate typedef DAT_UINT64 DAT_CONN_QUAL; 139*7c478bd9Sstevel@tonic-gate typedef DAT_UINT64 DAT_PORT_QUAL; 140*7c478bd9Sstevel@tonic-gate 141*7c478bd9Sstevel@tonic-gate /* QOS definitions */ 142*7c478bd9Sstevel@tonic-gate typedef enum dat_qos { 143*7c478bd9Sstevel@tonic-gate DAT_QOS_BEST_EFFORT = 0x00, 144*7c478bd9Sstevel@tonic-gate DAT_QOS_HIGH_THROUGHPUT = 0x01, 145*7c478bd9Sstevel@tonic-gate DAT_QOS_LOW_LATENCY = 0x02, 146*7c478bd9Sstevel@tonic-gate /* not low latency, nor high throughput */ 147*7c478bd9Sstevel@tonic-gate DAT_QOS_ECONOMY = 0x04, 148*7c478bd9Sstevel@tonic-gate /* both low latency and high throughput */ 149*7c478bd9Sstevel@tonic-gate DAT_QOS_PREMIUM = 0x08 150*7c478bd9Sstevel@tonic-gate } DAT_QOS; 151*7c478bd9Sstevel@tonic-gate 152*7c478bd9Sstevel@tonic-gate /* 153*7c478bd9Sstevel@tonic-gate * FLAGS 154*7c478bd9Sstevel@tonic-gate */ 155*7c478bd9Sstevel@tonic-gate 156*7c478bd9Sstevel@tonic-gate typedef enum dat_connect_flags { 157*7c478bd9Sstevel@tonic-gate DAT_CONNECT_DEFAULT_FLAG = 0x00, 158*7c478bd9Sstevel@tonic-gate DAT_CONNECT_MULTIPATH_FLAG = 0x01 159*7c478bd9Sstevel@tonic-gate } DAT_CONNECT_FLAGS; 160*7c478bd9Sstevel@tonic-gate 161*7c478bd9Sstevel@tonic-gate typedef enum dat_close_flags { 162*7c478bd9Sstevel@tonic-gate DAT_CLOSE_ABRUPT_FLAG = 0x00, 163*7c478bd9Sstevel@tonic-gate DAT_CLOSE_GRACEFUL_FLAG = 0x01 164*7c478bd9Sstevel@tonic-gate } DAT_CLOSE_FLAGS; 165*7c478bd9Sstevel@tonic-gate 166*7c478bd9Sstevel@tonic-gate #define DAT_CLOSE_DEFAULT DAT_CLOSE_ABRUPT_FLAG 167*7c478bd9Sstevel@tonic-gate 168*7c478bd9Sstevel@tonic-gate typedef enum dat_evd_flags { 169*7c478bd9Sstevel@tonic-gate DAT_EVD_SOFTWARE_FLAG = 0x001, 170*7c478bd9Sstevel@tonic-gate DAT_EVD_CR_FLAG = 0x010, 171*7c478bd9Sstevel@tonic-gate DAT_EVD_DTO_FLAG = 0x020, 172*7c478bd9Sstevel@tonic-gate DAT_EVD_CONNECTION_FLAG = 0x040, 173*7c478bd9Sstevel@tonic-gate DAT_EVD_RMR_BIND_FLAG = 0x080, 174*7c478bd9Sstevel@tonic-gate DAT_EVD_ASYNC_FLAG = 0x100, 175*7c478bd9Sstevel@tonic-gate /* DAT events only, no software events */ 176*7c478bd9Sstevel@tonic-gate DAT_EVD_DEFAULT_FLAG = 0x1F0 177*7c478bd9Sstevel@tonic-gate } DAT_EVD_FLAGS; 178*7c478bd9Sstevel@tonic-gate 179*7c478bd9Sstevel@tonic-gate typedef enum dat_psp_flags { 180*7c478bd9Sstevel@tonic-gate DAT_PSP_CONSUMER_FLAG = 0x00, /* Consumer creates an endpoint */ 181*7c478bd9Sstevel@tonic-gate DAT_PSP_PROVIDER_FLAG = 0x01 /* Provider creates an endpoint */ 182*7c478bd9Sstevel@tonic-gate } DAT_PSP_FLAGS; 183*7c478bd9Sstevel@tonic-gate 184*7c478bd9Sstevel@tonic-gate /* 185*7c478bd9Sstevel@tonic-gate * Memory Buffers 186*7c478bd9Sstevel@tonic-gate * 187*7c478bd9Sstevel@tonic-gate * Both LMR and RMR triplets specify 64-bit addresses in the local host's byte 188*7c478bd9Sstevel@tonic-gate * order, even when that exceeds the size of a DAT_PVOID for the host 189*7c478bd9Sstevel@tonic-gate * architecture. 190*7c478bd9Sstevel@tonic-gate */ 191*7c478bd9Sstevel@tonic-gate 192*7c478bd9Sstevel@tonic-gate /* 193*7c478bd9Sstevel@tonic-gate * Both LMR and RMR Triplets specify 64-bit addresses in the local host 194*7c478bd9Sstevel@tonic-gate * order, even when that exceeds the size of a void pointer for the host 195*7c478bd9Sstevel@tonic-gate * architecture. The DAT_VADDR type that represents addresses is in the 196*7c478bd9Sstevel@tonic-gate * native byte-order of the local host. Helper macros that allow Consumers 197*7c478bd9Sstevel@tonic-gate * to convert DAT_VADDR into various orders that might be useful for 198*7c478bd9Sstevel@tonic-gate * inclusion of RMR Triplets into a payload of a message follow. 199*7c478bd9Sstevel@tonic-gate * 200*7c478bd9Sstevel@tonic-gate * DAT defines the following macros to convert the fields on an RMR Triplet 201*7c478bd9Sstevel@tonic-gate * to defined byte orders to allow their export by the Consumer over wire 202*7c478bd9Sstevel@tonic-gate * protocols. DAT does not define how the two peers decide which byte should be 203*7c478bd9Sstevel@tonic-gate * used. 204*7c478bd9Sstevel@tonic-gate * 205*7c478bd9Sstevel@tonic-gate * DAT_LMRC_TO_LSB(lmrc) returns the supplied LMR Context in ls-byte 206*7c478bd9Sstevel@tonic-gate * order. 207*7c478bd9Sstevel@tonic-gate * DAT_LMRC_TO_MSB(lmrc) returns the supplied LMR Context in ms-byte 208*7c478bd9Sstevel@tonic-gate * order. 209*7c478bd9Sstevel@tonic-gate * DAT_RMRC_TO_LSB(rmrc) returns the supplied RMR Context in ls-byte 210*7c478bd9Sstevel@tonic-gate * order. 211*7c478bd9Sstevel@tonic-gate * DAT_RMRC_TO_MSB(rmrc) returns the supplied RMR Context in ms-byte 212*7c478bd9Sstevel@tonic-gate * order. 213*7c478bd9Sstevel@tonic-gate * DAT_VADDR_TO_LSB(vaddr) returns the supplied Virtual Address in ls-byte 214*7c478bd9Sstevel@tonic-gate * order. 215*7c478bd9Sstevel@tonic-gate * DAT_VADDR_TO_MSB(vaddr) returns the supplied Virtual Address in 216*7c478bd9Sstevel@tonic-gate * ms-byte order. 217*7c478bd9Sstevel@tonic-gate * DAT_VLEN_TO_LSB(vlen) returns the supplied length in ls-byte order. 218*7c478bd9Sstevel@tonic-gate * DAT_VLEN_TO_MSB(vlen) returns the supplied length in ms-byte order. 219*7c478bd9Sstevel@tonic-gate * 220*7c478bd9Sstevel@tonic-gate * Consumers are free to use 64-bit or 32-bit arithmetic for local or remote 221*7c478bd9Sstevel@tonic-gate * memory address and length manipulation in their preferred byte-order. Only 222*7c478bd9Sstevel@tonic-gate * the LMR and RMR Triplets passed to a Provider as part of a Posted DTO are 223*7c478bd9Sstevel@tonic-gate * required to be in 64-bit address and local host order formats. Providers 224*7c478bd9Sstevel@tonic-gate * shall convert RMR_Triplets to a Transport-required wire format. 225*7c478bd9Sstevel@tonic-gate * 226*7c478bd9Sstevel@tonic-gate * For the best performance, Consumers should align each buffer segment to 227*7c478bd9Sstevel@tonic-gate * the boundary specified by the dat_optimal_alignment. 228*7c478bd9Sstevel@tonic-gate */ 229*7c478bd9Sstevel@tonic-gate typedef DAT_UINT32 DAT_LMR_CONTEXT; 230*7c478bd9Sstevel@tonic-gate typedef DAT_UINT32 DAT_RMR_CONTEXT; 231*7c478bd9Sstevel@tonic-gate 232*7c478bd9Sstevel@tonic-gate typedef DAT_UINT64 DAT_VLEN; 233*7c478bd9Sstevel@tonic-gate typedef DAT_UINT64 DAT_VADDR; 234*7c478bd9Sstevel@tonic-gate 235*7c478bd9Sstevel@tonic-gate typedef struct dat_provider_attr DAT_PROVIDER_ATTR; 236*7c478bd9Sstevel@tonic-gate typedef struct dat_evd_param DAT_EVD_PARAM; 237*7c478bd9Sstevel@tonic-gate typedef struct dat_lmr_param DAT_LMR_PARAM; 238*7c478bd9Sstevel@tonic-gate 239*7c478bd9Sstevel@tonic-gate /* 240*7c478bd9Sstevel@tonic-gate * It is legal for Consumer to specify zero for segment_length 241*7c478bd9Sstevel@tonic-gate * of the dat_lmr_triplet. When 0 is specified for the 242*7c478bd9Sstevel@tonic-gate * segment_length then the other two elements of the 243*7c478bd9Sstevel@tonic-gate * dat_lmr_triplet are irrelevant and can be invalid. 244*7c478bd9Sstevel@tonic-gate */ 245*7c478bd9Sstevel@tonic-gate 246*7c478bd9Sstevel@tonic-gate typedef struct dat_lmr_triplet { 247*7c478bd9Sstevel@tonic-gate DAT_LMR_CONTEXT lmr_context; 248*7c478bd9Sstevel@tonic-gate DAT_UINT32 pad; 249*7c478bd9Sstevel@tonic-gate DAT_VADDR virtual_address; 250*7c478bd9Sstevel@tonic-gate DAT_VLEN segment_length; 251*7c478bd9Sstevel@tonic-gate } DAT_LMR_TRIPLET; 252*7c478bd9Sstevel@tonic-gate 253*7c478bd9Sstevel@tonic-gate typedef struct dat_rmr_triplet { 254*7c478bd9Sstevel@tonic-gate DAT_RMR_CONTEXT rmr_context; 255*7c478bd9Sstevel@tonic-gate DAT_UINT32 pad; 256*7c478bd9Sstevel@tonic-gate DAT_VADDR target_address; 257*7c478bd9Sstevel@tonic-gate DAT_VLEN segment_length; 258*7c478bd9Sstevel@tonic-gate } DAT_RMR_TRIPLET; 259*7c478bd9Sstevel@tonic-gate 260*7c478bd9Sstevel@tonic-gate /* 261*7c478bd9Sstevel@tonic-gate * The extra padding ensures that context, address, and length parameters are 262*7c478bd9Sstevel@tonic-gate * aligned on 64-bit boundaries. 263*7c478bd9Sstevel@tonic-gate */ 264*7c478bd9Sstevel@tonic-gate 265*7c478bd9Sstevel@tonic-gate /* Memory privileges */ 266*7c478bd9Sstevel@tonic-gate 267*7c478bd9Sstevel@tonic-gate typedef enum dat_mem_priv_flags { 268*7c478bd9Sstevel@tonic-gate DAT_MEM_PRIV_NONE_FLAG = 0x00, 269*7c478bd9Sstevel@tonic-gate DAT_MEM_PRIV_LOCAL_READ_FLAG = 0x01, 270*7c478bd9Sstevel@tonic-gate DAT_MEM_PRIV_REMOTE_READ_FLAG = 0x02, 271*7c478bd9Sstevel@tonic-gate DAT_MEM_PRIV_LOCAL_WRITE_FLAG = 0x10, 272*7c478bd9Sstevel@tonic-gate DAT_MEM_PRIV_REMOTE_WRITE_FLAG = 0x20, 273*7c478bd9Sstevel@tonic-gate DAT_MEM_PRIV_ALL_FLAG = 0x33 274*7c478bd9Sstevel@tonic-gate } DAT_MEM_PRIV_FLAGS; 275*7c478bd9Sstevel@tonic-gate 276*7c478bd9Sstevel@tonic-gate /* 277*7c478bd9Sstevel@tonic-gate * For backwards compatibility with DAT-1.0 memory privileges values 278*7c478bd9Sstevel@tonic-gate * are supported 279*7c478bd9Sstevel@tonic-gate */ 280*7c478bd9Sstevel@tonic-gate #define DAT_MEM_PRIV_READ_FLAG (DAT_MEM_PRIV_LOCAL_READ_FLAG | \ 281*7c478bd9Sstevel@tonic-gate DAT_MEM_PRIV_REMOTE_READ_FLAG) 282*7c478bd9Sstevel@tonic-gate #define DAT_MEM_PRIV_WRITE_FLAG (DAT_MEM_PRIV_LOCAL_WRITE_FLAG | \ 283*7c478bd9Sstevel@tonic-gate DAT_MEM_PRIV_REMOTE_WRITE_FLAG) 284*7c478bd9Sstevel@tonic-gate 285*7c478bd9Sstevel@tonic-gate /* LMR Arguments Mask */ 286*7c478bd9Sstevel@tonic-gate 287*7c478bd9Sstevel@tonic-gate typedef enum dat_lmr_param_mask { 288*7c478bd9Sstevel@tonic-gate DAT_LMR_FIELD_IA_HANDLE = 0x001, 289*7c478bd9Sstevel@tonic-gate DAT_LMR_FIELD_MEM_TYPE = 0x002, 290*7c478bd9Sstevel@tonic-gate DAT_LMR_FIELD_REGION_DESC = 0x004, 291*7c478bd9Sstevel@tonic-gate DAT_LMR_FIELD_LENGTH = 0x008, 292*7c478bd9Sstevel@tonic-gate DAT_LMR_FIELD_PZ_HANDLE = 0x010, 293*7c478bd9Sstevel@tonic-gate DAT_LMR_FIELD_MEM_PRIV = 0x020, 294*7c478bd9Sstevel@tonic-gate DAT_LMR_FIELD_LMR_CONTEXT = 0x040, 295*7c478bd9Sstevel@tonic-gate DAT_LMR_FIELD_RMR_CONTEXT = 0x080, 296*7c478bd9Sstevel@tonic-gate DAT_LMR_FIELD_REGISTERED_SIZE = 0x100, 297*7c478bd9Sstevel@tonic-gate DAT_LMR_FIELD_REGISTERED_ADDRESS = 0x200, 298*7c478bd9Sstevel@tonic-gate 299*7c478bd9Sstevel@tonic-gate DAT_LMR_FIELD_ALL = 0x3FF 300*7c478bd9Sstevel@tonic-gate } DAT_LMR_PARAM_MASK; 301*7c478bd9Sstevel@tonic-gate 302*7c478bd9Sstevel@tonic-gate /* RMR Argumments & RMR Arguments Mask */ 303*7c478bd9Sstevel@tonic-gate 304*7c478bd9Sstevel@tonic-gate typedef struct dat_rmr_param { 305*7c478bd9Sstevel@tonic-gate DAT_IA_HANDLE ia_handle; 306*7c478bd9Sstevel@tonic-gate DAT_PZ_HANDLE pz_handle; 307*7c478bd9Sstevel@tonic-gate DAT_LMR_TRIPLET lmr_triplet; 308*7c478bd9Sstevel@tonic-gate DAT_MEM_PRIV_FLAGS mem_priv; 309*7c478bd9Sstevel@tonic-gate DAT_RMR_CONTEXT rmr_context; 310*7c478bd9Sstevel@tonic-gate } DAT_RMR_PARAM; 311*7c478bd9Sstevel@tonic-gate 312*7c478bd9Sstevel@tonic-gate typedef enum dat_rmr_param_mask { 313*7c478bd9Sstevel@tonic-gate DAT_RMR_FIELD_IA_HANDLE = 0x01, 314*7c478bd9Sstevel@tonic-gate DAT_RMR_FIELD_PZ_HANDLE = 0x02, 315*7c478bd9Sstevel@tonic-gate DAT_RMR_FIELD_LMR_TRIPLET = 0x04, 316*7c478bd9Sstevel@tonic-gate DAT_RMR_FIELD_MEM_PRIV = 0x08, 317*7c478bd9Sstevel@tonic-gate DAT_RMR_FIELD_RMR_CONTEXT = 0x10, 318*7c478bd9Sstevel@tonic-gate 319*7c478bd9Sstevel@tonic-gate DAT_RMR_FIELD_ALL = 0x1F 320*7c478bd9Sstevel@tonic-gate } DAT_RMR_PARAM_MASK; 321*7c478bd9Sstevel@tonic-gate 322*7c478bd9Sstevel@tonic-gate /* Provider attributes */ 323*7c478bd9Sstevel@tonic-gate 324*7c478bd9Sstevel@tonic-gate typedef enum dat_iov_ownership { 325*7c478bd9Sstevel@tonic-gate /* Not modification by provider, consumer can use anytime. */ 326*7c478bd9Sstevel@tonic-gate DAT_IOV_CONSUMER = 0x0, 327*7c478bd9Sstevel@tonic-gate 328*7c478bd9Sstevel@tonic-gate /* Provider does not modify returned IOV DTO on completion. */ 329*7c478bd9Sstevel@tonic-gate DAT_IOV_PROVIDER_NOMOD = 0x1, 330*7c478bd9Sstevel@tonic-gate 331*7c478bd9Sstevel@tonic-gate /* Provider may modify IOV DTO on completion, can't trust it. */ 332*7c478bd9Sstevel@tonic-gate DAT_IOV_PROVIDER_MOD = 0x2 333*7c478bd9Sstevel@tonic-gate 334*7c478bd9Sstevel@tonic-gate } DAT_IOV_OWNERSHIP; 335*7c478bd9Sstevel@tonic-gate 336*7c478bd9Sstevel@tonic-gate typedef enum dat_ep_creator_for_psp { 337*7c478bd9Sstevel@tonic-gate DAT_PSP_CREATES_EP_NEVER, /* provider never creates endpoint */ 338*7c478bd9Sstevel@tonic-gate DAT_PSP_CREATES_EP_IFASKED, /* provider creates endpoint if asked */ 339*7c478bd9Sstevel@tonic-gate DAT_PSP_CREATES_EP_ALWAYS /* provider always creates endpoint */ 340*7c478bd9Sstevel@tonic-gate } DAT_EP_CREATOR_FOR_PSP; 341*7c478bd9Sstevel@tonic-gate 342*7c478bd9Sstevel@tonic-gate /* General Interface Adapter attributes. These apply to both udat and kdat. */ 343*7c478bd9Sstevel@tonic-gate 344*7c478bd9Sstevel@tonic-gate /* To support backwards compatibility for DAPL-1.0 */ 345*7c478bd9Sstevel@tonic-gate #define max_rdma_read_per_ep max_rdma_read_per_ep_in 346*7c478bd9Sstevel@tonic-gate #define DAT_IA_FIELD_IA_MAX_DTO_PER_OP DAT_IA_FIELD_IA_ MAX_DTO_PER_EP_IN 347*7c478bd9Sstevel@tonic-gate 348*7c478bd9Sstevel@tonic-gate /* to support backwards compatibility for DAPL-1.0 & DAPL-1.1 */ 349*7c478bd9Sstevel@tonic-gate #define max_mtu_size max_message_size 350*7c478bd9Sstevel@tonic-gate 351*7c478bd9Sstevel@tonic-gate typedef struct dat_ia_attr 352*7c478bd9Sstevel@tonic-gate { 353*7c478bd9Sstevel@tonic-gate char adapter_name[DAT_NAME_MAX_LENGTH]; 354*7c478bd9Sstevel@tonic-gate char vendor_name[DAT_NAME_MAX_LENGTH]; 355*7c478bd9Sstevel@tonic-gate DAT_UINT32 hardware_version_major; 356*7c478bd9Sstevel@tonic-gate DAT_UINT32 hardware_version_minor; 357*7c478bd9Sstevel@tonic-gate DAT_UINT32 firmware_version_major; 358*7c478bd9Sstevel@tonic-gate DAT_UINT32 firmware_version_minor; 359*7c478bd9Sstevel@tonic-gate DAT_IA_ADDRESS_PTR ia_address_ptr; 360*7c478bd9Sstevel@tonic-gate DAT_COUNT max_eps; 361*7c478bd9Sstevel@tonic-gate DAT_COUNT max_dto_per_ep; 362*7c478bd9Sstevel@tonic-gate DAT_COUNT max_rdma_read_per_ep_in; 363*7c478bd9Sstevel@tonic-gate DAT_COUNT max_rdma_read_per_ep_out; 364*7c478bd9Sstevel@tonic-gate DAT_COUNT max_evds; 365*7c478bd9Sstevel@tonic-gate DAT_COUNT max_evd_qlen; 366*7c478bd9Sstevel@tonic-gate DAT_COUNT max_iov_segments_per_dto; 367*7c478bd9Sstevel@tonic-gate DAT_COUNT max_lmrs; 368*7c478bd9Sstevel@tonic-gate DAT_VLEN max_lmr_block_size; 369*7c478bd9Sstevel@tonic-gate DAT_VADDR max_lmr_virtual_address; 370*7c478bd9Sstevel@tonic-gate DAT_COUNT max_pzs; 371*7c478bd9Sstevel@tonic-gate DAT_VLEN max_message_size; 372*7c478bd9Sstevel@tonic-gate DAT_VLEN max_rdma_size; 373*7c478bd9Sstevel@tonic-gate DAT_COUNT max_rmrs; 374*7c478bd9Sstevel@tonic-gate DAT_VADDR max_rmr_target_address; 375*7c478bd9Sstevel@tonic-gate DAT_COUNT max_srqs; 376*7c478bd9Sstevel@tonic-gate DAT_COUNT max_ep_per_srq; 377*7c478bd9Sstevel@tonic-gate DAT_COUNT max_recv_per_srq; 378*7c478bd9Sstevel@tonic-gate DAT_COUNT max_iov_segments_per_rdma_read; 379*7c478bd9Sstevel@tonic-gate DAT_COUNT max_iov_segments_per_rdma_write; 380*7c478bd9Sstevel@tonic-gate DAT_COUNT max_rdma_read_in; 381*7c478bd9Sstevel@tonic-gate DAT_COUNT max_rdma_read_out; 382*7c478bd9Sstevel@tonic-gate DAT_BOOLEAN max_rdma_read_per_ep_in_guaranteed; 383*7c478bd9Sstevel@tonic-gate DAT_BOOLEAN max_rdma_read_per_ep_out_guaranteed; 384*7c478bd9Sstevel@tonic-gate DAT_COUNT num_transport_attr; 385*7c478bd9Sstevel@tonic-gate DAT_NAMED_ATTR *transport_attr; 386*7c478bd9Sstevel@tonic-gate DAT_COUNT num_vendor_attr; 387*7c478bd9Sstevel@tonic-gate DAT_NAMED_ATTR *vendor_attr; 388*7c478bd9Sstevel@tonic-gate } DAT_IA_ATTR; 389*7c478bd9Sstevel@tonic-gate 390*7c478bd9Sstevel@tonic-gate /* To support backwards compatibility for DAPL-1.0 & DAPL-1.1 */ 391*7c478bd9Sstevel@tonic-gate #define DAT_IA_FIELD_IA_MAX_MTU_SIZE DAT_IA_FIELD_IA_MAX_MESSAGE_SIZE 392*7c478bd9Sstevel@tonic-gate 393*7c478bd9Sstevel@tonic-gate typedef DAT_UINT64 DAT_IA_ATTR_MASK; 394*7c478bd9Sstevel@tonic-gate 395*7c478bd9Sstevel@tonic-gate #define DAT_IA_FIELD_IA_ADAPTER_NAME UINT64_C(0x000000001) 396*7c478bd9Sstevel@tonic-gate #define DAT_IA_FIELD_IA_VENDOR_NAME UINT64_C(0x000000002) 397*7c478bd9Sstevel@tonic-gate #define DAT_IA_FIELD_IA_HARDWARE_MAJOR_VERSION UINT64_C(0x000000004) 398*7c478bd9Sstevel@tonic-gate #define DAT_IA_FIELD_IA_HARDWARE_MINOR_VERSION UINT64_C(0x000000008) 399*7c478bd9Sstevel@tonic-gate #define DAT_IA_FIELD_IA_FIRMWARE_MAJOR_VERSION UINT64_C(0x000000010) 400*7c478bd9Sstevel@tonic-gate #define DAT_IA_FIELD_IA_FIRMWARE_MINOR_VERSION UINT64_C(0x000000020) 401*7c478bd9Sstevel@tonic-gate #define DAT_IA_FIELD_IA_ADDRESS_PTR UINT64_C(0x000000040) 402*7c478bd9Sstevel@tonic-gate #define DAT_IA_FIELD_IA_MAX_EPS UINT64_C(0x000000080) 403*7c478bd9Sstevel@tonic-gate #define DAT_IA_FIELD_IA_MAX_DTO_PER_EP UINT64_C(0x000000100) 404*7c478bd9Sstevel@tonic-gate #define DAT_IA_FIELD_IA_MAX_RDMA_READ_PER_EP_IN UINT64_C(0x000000200) 405*7c478bd9Sstevel@tonic-gate #define DAT_IA_FIELD_IA_MAX_RDMA_READ_PER_EP_OUT UINT64_C(0x000000400) 406*7c478bd9Sstevel@tonic-gate #define DAT_IA_FIELD_IA_MAX_EVDS UINT64_C(0x000000800) 407*7c478bd9Sstevel@tonic-gate #define DAT_IA_FIELD_IA_MAX_EVD_QLEN UINT64_C(0x000001000) 408*7c478bd9Sstevel@tonic-gate #define DAT_IA_FIELD_IA_MAX_IOV_SEGMENTS_PER_DTO UINT64_C(0x000002000) 409*7c478bd9Sstevel@tonic-gate #define DAT_IA_FIELD_IA_MAX_LMRS UINT64_C(0x000004000) 410*7c478bd9Sstevel@tonic-gate #define DAT_IA_FIELD_IA_MAX_LMR_BLOCK_SIZE UINT64_C(0x000008000) 411*7c478bd9Sstevel@tonic-gate #define DAT_IA_FIELD_IA_MAX_LMR_VIRTUAL_ADDRESS UINT64_C(0x000010000) 412*7c478bd9Sstevel@tonic-gate #define DAT_IA_FIELD_IA_MAX_PZS UINT64_C(0x000020000) 413*7c478bd9Sstevel@tonic-gate #define DAT_IA_FIELD_IA_MAX_MESSAGE_SIZE UINT64_C(0x000040000) 414*7c478bd9Sstevel@tonic-gate #define DAT_IA_FIELD_IA_MAX_RDMA_SIZE UINT64_C(0x000080000) 415*7c478bd9Sstevel@tonic-gate #define DAT_IA_FIELD_IA_MAX_RMRS UINT64_C(0x000100000) 416*7c478bd9Sstevel@tonic-gate #define DAT_IA_FIELD_IA_MAX_RMR_TARGET_ADDRESS UINT64_C(0x000200000) 417*7c478bd9Sstevel@tonic-gate #define DAT_IA_FIELD_IA_MAX_SRQS UINT64_C(0x000400000) 418*7c478bd9Sstevel@tonic-gate #define DAT_IA_FIELD_IA_MAX_EP_PER_SRQ UINT64_C(0x000800000) 419*7c478bd9Sstevel@tonic-gate #define DAT_IA_FIELD_IA_MAX_RECV_PER_SRQ UINT64_C(0x001000000) 420*7c478bd9Sstevel@tonic-gate #define DAT_IA_FIELD_IA_MAX_IOV_SEGMENTS_PER_RDMA_READ UINT64_C(0x002000000) 421*7c478bd9Sstevel@tonic-gate #define DAT_IA_FIELD_IA_MAX_IOV_SEGMENTS_PER_RDMA_WRITE UINT64_C(0x004000000) 422*7c478bd9Sstevel@tonic-gate #define DAT_IA_FIELD_IA_MAX_RDMA_READ_IN UINT64_C(0x008000000) 423*7c478bd9Sstevel@tonic-gate #define DAT_IA_FIELD_IA_MAX_RDMA_READ_OUT UINT64_C(0x010000000) 424*7c478bd9Sstevel@tonic-gate #define DAT_IA_FIELD_IA_MAX_RDMA_READ_PER_EP_IN_GUARANTEED \ 425*7c478bd9Sstevel@tonic-gate UINT64_C(0x020000000) 426*7c478bd9Sstevel@tonic-gate #define DAT_IA_FIELD_IA_MAX_RDMA_READ_PER_EP_OUT_GUARANTEED \ 427*7c478bd9Sstevel@tonic-gate UINT64_C(0x040000000) 428*7c478bd9Sstevel@tonic-gate #define DAT_IA_FIELD_IA_NUM_TRANSPORT_ATTR UINT64_C(0x080000000) 429*7c478bd9Sstevel@tonic-gate #define DAT_IA_FIELD_IA_TRANSPORT_ATTR UINT64_C(0x100000000) 430*7c478bd9Sstevel@tonic-gate #define DAT_IA_FIELD_IA_NUM_VENDOR_ATTR UINT64_C(0x200000000) 431*7c478bd9Sstevel@tonic-gate #define DAT_IA_FIELD_IA_VENDOR_ATTR UINT64_C(0x400000000) 432*7c478bd9Sstevel@tonic-gate 433*7c478bd9Sstevel@tonic-gate /* To support backwards compatibility for DAPL-1.0 & DAPL-1.1 */ 434*7c478bd9Sstevel@tonic-gate #define DAT_IA_ALL DAT_IA_FIELD_ALL 435*7c478bd9Sstevel@tonic-gate #define DAT_IA_FIELD_ALL UINT64_C(0x7FFFFFFFF) 436*7c478bd9Sstevel@tonic-gate #define DAT_IA_FIELD_NONE UINT64_C(0x0) 437*7c478bd9Sstevel@tonic-gate 438*7c478bd9Sstevel@tonic-gate /* Endpoint attributes */ 439*7c478bd9Sstevel@tonic-gate 440*7c478bd9Sstevel@tonic-gate typedef enum dat_service_type { 441*7c478bd9Sstevel@tonic-gate DAT_SERVICE_TYPE_RC /* reliable connections */ 442*7c478bd9Sstevel@tonic-gate } DAT_SERVICE_TYPE; 443*7c478bd9Sstevel@tonic-gate 444*7c478bd9Sstevel@tonic-gate typedef struct dat_ep_attr { 445*7c478bd9Sstevel@tonic-gate DAT_SERVICE_TYPE service_type; 446*7c478bd9Sstevel@tonic-gate DAT_VLEN max_message_size; 447*7c478bd9Sstevel@tonic-gate DAT_VLEN max_rdma_size; 448*7c478bd9Sstevel@tonic-gate DAT_QOS qos; 449*7c478bd9Sstevel@tonic-gate DAT_COMPLETION_FLAGS recv_completion_flags; 450*7c478bd9Sstevel@tonic-gate DAT_COMPLETION_FLAGS request_completion_flags; 451*7c478bd9Sstevel@tonic-gate DAT_COUNT max_recv_dtos; 452*7c478bd9Sstevel@tonic-gate DAT_COUNT max_request_dtos; 453*7c478bd9Sstevel@tonic-gate DAT_COUNT max_recv_iov; 454*7c478bd9Sstevel@tonic-gate DAT_COUNT max_request_iov; 455*7c478bd9Sstevel@tonic-gate DAT_COUNT max_rdma_read_in; 456*7c478bd9Sstevel@tonic-gate DAT_COUNT max_rdma_read_out; 457*7c478bd9Sstevel@tonic-gate DAT_COUNT srq_soft_hw; 458*7c478bd9Sstevel@tonic-gate DAT_COUNT max_rdma_read_iov; 459*7c478bd9Sstevel@tonic-gate DAT_COUNT max_rdma_write_iov; 460*7c478bd9Sstevel@tonic-gate DAT_COUNT ep_transport_specific_count; 461*7c478bd9Sstevel@tonic-gate DAT_NAMED_ATTR * ep_transport_specific; 462*7c478bd9Sstevel@tonic-gate DAT_COUNT ep_provider_specific_count; 463*7c478bd9Sstevel@tonic-gate DAT_NAMED_ATTR * ep_provider_specific; 464*7c478bd9Sstevel@tonic-gate } DAT_EP_ATTR; 465*7c478bd9Sstevel@tonic-gate 466*7c478bd9Sstevel@tonic-gate /* Endpoint Parameters */ 467*7c478bd9Sstevel@tonic-gate 468*7c478bd9Sstevel@tonic-gate /* For backwards compatability */ 469*7c478bd9Sstevel@tonic-gate #define DAT_EP_STATE_ERROR DAT_EP_STATE_DISCONNECTED 470*7c478bd9Sstevel@tonic-gate 471*7c478bd9Sstevel@tonic-gate typedef enum dat_ep_state { 472*7c478bd9Sstevel@tonic-gate DAT_EP_STATE_UNCONNECTED, /* quiescent state */ 473*7c478bd9Sstevel@tonic-gate DAT_EP_STATE_UNCONFIGURED_UNCONNECTED, 474*7c478bd9Sstevel@tonic-gate DAT_EP_STATE_RESERVED, 475*7c478bd9Sstevel@tonic-gate DAT_EP_STATE_UNCONFIGURED_RESERVED, 476*7c478bd9Sstevel@tonic-gate DAT_EP_STATE_PASSIVE_CONNECTION_PENDING, 477*7c478bd9Sstevel@tonic-gate DAT_EP_STATE_UNCONFIGURED_PASSIVE, 478*7c478bd9Sstevel@tonic-gate DAT_EP_STATE_ACTIVE_CONNECTION_PENDING, 479*7c478bd9Sstevel@tonic-gate DAT_EP_STATE_TENTATIVE_CONNECTION_PENDING, 480*7c478bd9Sstevel@tonic-gate DAT_EP_STATE_UNCONFIGURED_TENTATIVE, 481*7c478bd9Sstevel@tonic-gate DAT_EP_STATE_CONNECTED, 482*7c478bd9Sstevel@tonic-gate DAT_EP_STATE_DISCONNECT_PENDING, 483*7c478bd9Sstevel@tonic-gate DAT_EP_STATE_DISCONNECTED, 484*7c478bd9Sstevel@tonic-gate DAT_EP_STATE_COMPLETION_PENDING 485*7c478bd9Sstevel@tonic-gate } DAT_EP_STATE; 486*7c478bd9Sstevel@tonic-gate 487*7c478bd9Sstevel@tonic-gate typedef struct dat_ep_param { 488*7c478bd9Sstevel@tonic-gate DAT_IA_HANDLE ia_handle; 489*7c478bd9Sstevel@tonic-gate DAT_EP_STATE ep_state; 490*7c478bd9Sstevel@tonic-gate DAT_IA_ADDRESS_PTR local_ia_address_ptr; 491*7c478bd9Sstevel@tonic-gate DAT_PORT_QUAL local_port_qual; 492*7c478bd9Sstevel@tonic-gate DAT_IA_ADDRESS_PTR remote_ia_address_ptr; 493*7c478bd9Sstevel@tonic-gate DAT_PORT_QUAL remote_port_qual; 494*7c478bd9Sstevel@tonic-gate DAT_PZ_HANDLE pz_handle; 495*7c478bd9Sstevel@tonic-gate DAT_EVD_HANDLE recv_evd_handle; 496*7c478bd9Sstevel@tonic-gate DAT_EVD_HANDLE request_evd_handle; 497*7c478bd9Sstevel@tonic-gate DAT_EVD_HANDLE connect_evd_handle; 498*7c478bd9Sstevel@tonic-gate DAT_SRQ_HANDLE srq_handle; 499*7c478bd9Sstevel@tonic-gate DAT_EP_ATTR ep_attr; 500*7c478bd9Sstevel@tonic-gate } DAT_EP_PARAM; 501*7c478bd9Sstevel@tonic-gate 502*7c478bd9Sstevel@tonic-gate typedef DAT_UINT64 DAT_EP_PARAM_MASK; 503*7c478bd9Sstevel@tonic-gate #define DAT_EP_FIELD_IA_HANDLE UINT64_C(0x00000001) 504*7c478bd9Sstevel@tonic-gate #define DAT_EP_FIELD_EP_STATE UINT64_C(0x00000002) 505*7c478bd9Sstevel@tonic-gate #define DAT_EP_FIELD_LOCAL_IA_ADDRESS_PTR UINT64_C(0x00000004) 506*7c478bd9Sstevel@tonic-gate #define DAT_EP_FIELD_LOCAL_PORT_QUAL UINT64_C(0x00000008) 507*7c478bd9Sstevel@tonic-gate #define DAT_EP_FIELD_REMOTE_IA_ADDRESS_PTR UINT64_C(0x00000010) 508*7c478bd9Sstevel@tonic-gate #define DAT_EP_FIELD_REMOTE_PORT_QUAL UINT64_C(0x00000020) 509*7c478bd9Sstevel@tonic-gate #define DAT_EP_FIELD_PZ_HANDLE UINT64_C(0x00000040) 510*7c478bd9Sstevel@tonic-gate #define DAT_EP_FIELD_RECV_EVD_HANDLE UINT64_C(0x00000080) 511*7c478bd9Sstevel@tonic-gate #define DAT_EP_FIELD_REQUEST_EVD_HANDLE UINT64_C(0x00000100) 512*7c478bd9Sstevel@tonic-gate #define DAT_EP_FIELD_CONNECT_EVD_HANDLE UINT64_C(0x00000200) 513*7c478bd9Sstevel@tonic-gate #define DAT_EP_FIELD_SRQ_HANDLE UINT64_C(0x00000400) 514*7c478bd9Sstevel@tonic-gate 515*7c478bd9Sstevel@tonic-gate /* Remainder of values from EP_ATTR, 0x00001000 and up */ 516*7c478bd9Sstevel@tonic-gate 517*7c478bd9Sstevel@tonic-gate #define DAT_EP_FIELD_EP_ATTR_SERVICE_TYPE UINT64_C(0x00001000) 518*7c478bd9Sstevel@tonic-gate #define DAT_EP_FIELD_EP_ATTR_MAX_MESSAGE_SIZE UINT64_C(0x00002000) 519*7c478bd9Sstevel@tonic-gate #define DAT_EP_FIELD_EP_ATTR_MAX_RDMA_SIZE UINT64_C(0x00004000) 520*7c478bd9Sstevel@tonic-gate #define DAT_EP_FIELD_EP_ATTR_QOS UINT64_C(0x00008000) 521*7c478bd9Sstevel@tonic-gate 522*7c478bd9Sstevel@tonic-gate #define DAT_EP_FIELD_EP_ATTR_RECV_COMPLETION_FLAGS UINT64_C(0x00010000) 523*7c478bd9Sstevel@tonic-gate #define DAT_EP_FIELD_EP_ATTR_REQUEST_COMPLETION_FLAGS UINT64_C(0x00020000) 524*7c478bd9Sstevel@tonic-gate #define DAT_EP_FIELD_EP_ATTR_MAX_RECV_DTOS UINT64_C(0x00040000) 525*7c478bd9Sstevel@tonic-gate #define DAT_EP_FIELD_EP_ATTR_MAX_REQUEST_DTOS UINT64_C(0x00080000) 526*7c478bd9Sstevel@tonic-gate 527*7c478bd9Sstevel@tonic-gate #define DAT_EP_FIELD_EP_ATTR_MAX_RECV_IOV UINT64_C(0x00100000) 528*7c478bd9Sstevel@tonic-gate #define DAT_EP_FIELD_EP_ATTR_MAX_REQUEST_IOV UINT64_C(0x00200000) 529*7c478bd9Sstevel@tonic-gate 530*7c478bd9Sstevel@tonic-gate #define DAT_EP_FIELD_EP_ATTR_MAX_RDMA_READ_IN UINT64_C(0x00400000) 531*7c478bd9Sstevel@tonic-gate #define DAT_EP_FIELD_EP_ATTR_MAX_RDMA_READ_OUT UINT64_C(0x00800000) 532*7c478bd9Sstevel@tonic-gate 533*7c478bd9Sstevel@tonic-gate #define DAT_EP_FIELD_EP_ATTR_SRQ_SOFT_HW UINT64_C(0x01000000) 534*7c478bd9Sstevel@tonic-gate 535*7c478bd9Sstevel@tonic-gate #define DAT_EP_FIELD_EP_ATTR_MAX_RDMA_READ_IOV UINT64_C(0x02000000) 536*7c478bd9Sstevel@tonic-gate #define DAT_EP_FIELD_EP_ATTR_MAX_RDMA_WRITE_IOV UINT64_C(0x04000000) 537*7c478bd9Sstevel@tonic-gate 538*7c478bd9Sstevel@tonic-gate #define DAT_EP_FIELD_EP_ATTR_NUM_TRANSPORT_ATTR UINT64_C(0x08000000) 539*7c478bd9Sstevel@tonic-gate #define DAT_EP_FIELD_EP_ATTR_TRANSPORT_SPECIFIC_ATTR UINT64_C(0x10000000) 540*7c478bd9Sstevel@tonic-gate 541*7c478bd9Sstevel@tonic-gate #define DAT_EP_FIELD_EP_ATTR_NUM_PROVIDER_ATTR UINT64_C(0x20000000) 542*7c478bd9Sstevel@tonic-gate #define DAT_EP_FIELD_EP_ATTR_PROVIDER_SPECIFIC_ATTR UINT64_C(0x40000000) 543*7c478bd9Sstevel@tonic-gate 544*7c478bd9Sstevel@tonic-gate #define DAT_EP_FIELD_EP_ATTR_ALL UINT64_C(0x7FFFF000) 545*7c478bd9Sstevel@tonic-gate #define DAT_EP_FIELD_ALL UINT64_C(0x7FFFF7FF) 546*7c478bd9Sstevel@tonic-gate 547*7c478bd9Sstevel@tonic-gate #define DAT_WATERMARK_INFINITE ((DAT_COUNT)~0) 548*7c478bd9Sstevel@tonic-gate 549*7c478bd9Sstevel@tonic-gate #define DAT_HW_DEFAULT DAT_WATERMARK_INFINITE 550*7c478bd9Sstevel@tonic-gate 551*7c478bd9Sstevel@tonic-gate #define DAT_SRQ_LW_DEFAULT 0x0 552*7c478bd9Sstevel@tonic-gate 553*7c478bd9Sstevel@tonic-gate typedef enum dat_srq_state { 554*7c478bd9Sstevel@tonic-gate DAT_SRQ_STATE_OPERATIONAL, 555*7c478bd9Sstevel@tonic-gate DAT_SRQ_STATE_ERROR 556*7c478bd9Sstevel@tonic-gate } DAT_SRQ_STATE; 557*7c478bd9Sstevel@tonic-gate 558*7c478bd9Sstevel@tonic-gate #define DAT_VALUE_UNKNOWN (((DAT_COUNT) ~0)-1) 559*7c478bd9Sstevel@tonic-gate 560*7c478bd9Sstevel@tonic-gate typedef struct dat_srq_attr { 561*7c478bd9Sstevel@tonic-gate DAT_COUNT max_recv_dtos; 562*7c478bd9Sstevel@tonic-gate DAT_COUNT max_recv_iov; 563*7c478bd9Sstevel@tonic-gate DAT_COUNT low_watermark; 564*7c478bd9Sstevel@tonic-gate } DAT_SRQ_ATTR; 565*7c478bd9Sstevel@tonic-gate 566*7c478bd9Sstevel@tonic-gate typedef struct dat_srq_param { 567*7c478bd9Sstevel@tonic-gate DAT_IA_HANDLE ia_handle; 568*7c478bd9Sstevel@tonic-gate DAT_SRQ_STATE srq_state; 569*7c478bd9Sstevel@tonic-gate DAT_PZ_HANDLE pz_handle; 570*7c478bd9Sstevel@tonic-gate DAT_COUNT max_recv_dtos; 571*7c478bd9Sstevel@tonic-gate DAT_COUNT max_recv_iov; 572*7c478bd9Sstevel@tonic-gate DAT_COUNT low_watermark; 573*7c478bd9Sstevel@tonic-gate DAT_COUNT available_dto_count; 574*7c478bd9Sstevel@tonic-gate DAT_COUNT outstanding_dto_count; 575*7c478bd9Sstevel@tonic-gate } DAT_SRQ_PARAM; 576*7c478bd9Sstevel@tonic-gate 577*7c478bd9Sstevel@tonic-gate typedef enum dat_srq_param_mask { 578*7c478bd9Sstevel@tonic-gate DAT_SRQ_FIELD_IA_HANDLE = 0x001, 579*7c478bd9Sstevel@tonic-gate DAT_SRQ_FIELD_SRQ_STATE = 0x002, 580*7c478bd9Sstevel@tonic-gate DAT_SRQ_FIELD_PZ_HANDLE = 0x004, 581*7c478bd9Sstevel@tonic-gate DAT_SRQ_FIELD_MAX_RECV_DTO = 0x008, 582*7c478bd9Sstevel@tonic-gate DAT_SRQ_FIELD_MAX_RECV_IOV = 0x010, 583*7c478bd9Sstevel@tonic-gate DAT_SRQ_FIELD_LOW_WATERMARK = 0x020, 584*7c478bd9Sstevel@tonic-gate DAT_SRQ_FIELD_AVAILABLE_DTO_COUNT = 0x040, 585*7c478bd9Sstevel@tonic-gate DAT_SRQ_FIELD_OUTSTANDING_DTO_COUNT = 0x080, 586*7c478bd9Sstevel@tonic-gate 587*7c478bd9Sstevel@tonic-gate DAT_SRQ_FIELD_ALL = 0x0FF 588*7c478bd9Sstevel@tonic-gate } DAT_SRQ_PARAM_MASK; 589*7c478bd9Sstevel@tonic-gate 590*7c478bd9Sstevel@tonic-gate /* PZ Parameters */ 591*7c478bd9Sstevel@tonic-gate 592*7c478bd9Sstevel@tonic-gate typedef struct dat_pz_param { 593*7c478bd9Sstevel@tonic-gate DAT_IA_HANDLE ia_handle; 594*7c478bd9Sstevel@tonic-gate } DAT_PZ_PARAM; 595*7c478bd9Sstevel@tonic-gate 596*7c478bd9Sstevel@tonic-gate typedef enum dat_pz_param_mask { 597*7c478bd9Sstevel@tonic-gate DAT_PZ_FIELD_IA_HANDLE = 0x01, 598*7c478bd9Sstevel@tonic-gate 599*7c478bd9Sstevel@tonic-gate DAT_PZ_FIELD_ALL = 0x01 600*7c478bd9Sstevel@tonic-gate } DAT_PZ_PARAM_MASK; 601*7c478bd9Sstevel@tonic-gate 602*7c478bd9Sstevel@tonic-gate /* PSP Parameters */ 603*7c478bd9Sstevel@tonic-gate 604*7c478bd9Sstevel@tonic-gate typedef struct dat_psp_param { 605*7c478bd9Sstevel@tonic-gate DAT_IA_HANDLE ia_handle; 606*7c478bd9Sstevel@tonic-gate DAT_CONN_QUAL conn_qual; 607*7c478bd9Sstevel@tonic-gate DAT_EVD_HANDLE evd_handle; 608*7c478bd9Sstevel@tonic-gate DAT_PSP_FLAGS psp_flags; 609*7c478bd9Sstevel@tonic-gate } DAT_PSP_PARAM; 610*7c478bd9Sstevel@tonic-gate 611*7c478bd9Sstevel@tonic-gate typedef enum dat_psp_param_mask { 612*7c478bd9Sstevel@tonic-gate DAT_PSP_FIELD_IA_HANDLE = 0x01, 613*7c478bd9Sstevel@tonic-gate DAT_PSP_FIELD_CONN_QUAL = 0x02, 614*7c478bd9Sstevel@tonic-gate DAT_PSP_FIELD_EVD_HANDLE = 0x04, 615*7c478bd9Sstevel@tonic-gate DAT_PSP_FIELD_PSP_FLAGS = 0x08, 616*7c478bd9Sstevel@tonic-gate 617*7c478bd9Sstevel@tonic-gate DAT_PSP_FIELD_ALL = 0x0F 618*7c478bd9Sstevel@tonic-gate } DAT_PSP_PARAM_MASK; 619*7c478bd9Sstevel@tonic-gate 620*7c478bd9Sstevel@tonic-gate /* RSP Parameters */ 621*7c478bd9Sstevel@tonic-gate 622*7c478bd9Sstevel@tonic-gate typedef struct dat_rsp_param { 623*7c478bd9Sstevel@tonic-gate DAT_IA_HANDLE ia_handle; 624*7c478bd9Sstevel@tonic-gate DAT_CONN_QUAL conn_qual; 625*7c478bd9Sstevel@tonic-gate DAT_EVD_HANDLE evd_handle; 626*7c478bd9Sstevel@tonic-gate DAT_EP_HANDLE ep_handle; 627*7c478bd9Sstevel@tonic-gate } DAT_RSP_PARAM; 628*7c478bd9Sstevel@tonic-gate 629*7c478bd9Sstevel@tonic-gate typedef enum dat_rsp_param_mask { 630*7c478bd9Sstevel@tonic-gate DAT_RSP_FIELD_IA_HANDLE = 0x01, 631*7c478bd9Sstevel@tonic-gate DAT_RSP_FIELD_CONN_QUAL = 0x02, 632*7c478bd9Sstevel@tonic-gate DAT_RSP_FIELD_EVD_HANDLE = 0x04, 633*7c478bd9Sstevel@tonic-gate DAT_RSP_FIELD_EP_HANDLE = 0x08, 634*7c478bd9Sstevel@tonic-gate 635*7c478bd9Sstevel@tonic-gate DAT_RSP_FIELD_ALL = 0x0F 636*7c478bd9Sstevel@tonic-gate } DAT_RSP_PARAM_MASK; 637*7c478bd9Sstevel@tonic-gate 638*7c478bd9Sstevel@tonic-gate /* 639*7c478bd9Sstevel@tonic-gate * Connection Request Parameters. 640*7c478bd9Sstevel@tonic-gate * 641*7c478bd9Sstevel@tonic-gate * The Connection Request does not provide Remote Endpoint attributes. 642*7c478bd9Sstevel@tonic-gate * If a local Consumer needs this information, the remote Consumer should 643*7c478bd9Sstevel@tonic-gate * encode it into Private Data. 644*7c478bd9Sstevel@tonic-gate */ 645*7c478bd9Sstevel@tonic-gate 646*7c478bd9Sstevel@tonic-gate typedef struct dat_cr_param { 647*7c478bd9Sstevel@tonic-gate /* Remote IA whose Endpoint requested the connection. */ 648*7c478bd9Sstevel@tonic-gate DAT_IA_ADDRESS_PTR remote_ia_address_ptr; 649*7c478bd9Sstevel@tonic-gate 650*7c478bd9Sstevel@tonic-gate /* Port qualifier of the remote Endpoint of the requested connection. */ 651*7c478bd9Sstevel@tonic-gate DAT_PORT_QUAL remote_port_qual; 652*7c478bd9Sstevel@tonic-gate 653*7c478bd9Sstevel@tonic-gate /* Size of the Private Data. */ 654*7c478bd9Sstevel@tonic-gate DAT_COUNT private_data_size; 655*7c478bd9Sstevel@tonic-gate 656*7c478bd9Sstevel@tonic-gate /* 657*7c478bd9Sstevel@tonic-gate * Pointer to the Private Data passed by remote side in the Connection 658*7c478bd9Sstevel@tonic-gate * Request. 659*7c478bd9Sstevel@tonic-gate */ 660*7c478bd9Sstevel@tonic-gate DAT_PVOID private_data; 661*7c478bd9Sstevel@tonic-gate 662*7c478bd9Sstevel@tonic-gate /* 663*7c478bd9Sstevel@tonic-gate * The local Endpoint provided by the Service Point for the requested 664*7c478bd9Sstevel@tonic-gate * connection. It is the only Endpoint that can accept a Connection 665*7c478bd9Sstevel@tonic-gate * Request on this Service Point. The value DAT_HANDLE_NULL represents 666*7c478bd9Sstevel@tonic-gate * that there is no associated local Endpoint for the requested 667*7c478bd9Sstevel@tonic-gate * connection. 668*7c478bd9Sstevel@tonic-gate */ 669*7c478bd9Sstevel@tonic-gate DAT_EP_HANDLE local_ep_handle; 670*7c478bd9Sstevel@tonic-gate 671*7c478bd9Sstevel@tonic-gate } DAT_CR_PARAM; 672*7c478bd9Sstevel@tonic-gate 673*7c478bd9Sstevel@tonic-gate typedef enum dat_cr_param_mask { 674*7c478bd9Sstevel@tonic-gate DAT_CR_FIELD_REMOTE_IA_ADDRESS_PTR = 0x01, 675*7c478bd9Sstevel@tonic-gate DAT_CR_FIELD_REMOTE_PORT_QUAL = 0x02, 676*7c478bd9Sstevel@tonic-gate DAT_CR_FIELD_PRIVATE_DATA_SIZE = 0x04, 677*7c478bd9Sstevel@tonic-gate DAT_CR_FIELD_PRIVATE_DATA = 0x08, 678*7c478bd9Sstevel@tonic-gate DAT_CR_FIELD_LOCAL_EP_HANDLE = 0x10, 679*7c478bd9Sstevel@tonic-gate 680*7c478bd9Sstevel@tonic-gate DAT_CR_FIELD_ALL = 0x1F 681*7c478bd9Sstevel@tonic-gate } DAT_CR_PARAM_MASK; 682*7c478bd9Sstevel@tonic-gate 683*7c478bd9Sstevel@tonic-gate /* 684*7c478bd9Sstevel@tonic-gate * *********************** Events ***************************************** 685*7c478bd9Sstevel@tonic-gate */ 686*7c478bd9Sstevel@tonic-gate 687*7c478bd9Sstevel@tonic-gate /* Completion status flags */ 688*7c478bd9Sstevel@tonic-gate 689*7c478bd9Sstevel@tonic-gate /* dto completion status */ 690*7c478bd9Sstevel@tonic-gate 691*7c478bd9Sstevel@tonic-gate /* For backwards compatability */ 692*7c478bd9Sstevel@tonic-gate #define DAT_DTO_LENGTH_ERROR DAT_DTO_ERR_LOCAL_LENGTH 693*7c478bd9Sstevel@tonic-gate #define DAT_DTO_FAILURE DAT_DTO_ERR_FLUSHED 694*7c478bd9Sstevel@tonic-gate 695*7c478bd9Sstevel@tonic-gate typedef enum dat_dto_completion_status { 696*7c478bd9Sstevel@tonic-gate DAT_DTO_SUCCESS = 0, 697*7c478bd9Sstevel@tonic-gate DAT_DTO_ERR_FLUSHED = 1, 698*7c478bd9Sstevel@tonic-gate DAT_DTO_ERR_LOCAL_LENGTH = 2, 699*7c478bd9Sstevel@tonic-gate DAT_DTO_ERR_LOCAL_EP = 3, 700*7c478bd9Sstevel@tonic-gate DAT_DTO_ERR_LOCAL_PROTECTION = 4, 701*7c478bd9Sstevel@tonic-gate DAT_DTO_ERR_BAD_RESPONSE = 5, 702*7c478bd9Sstevel@tonic-gate DAT_DTO_ERR_REMOTE_ACCESS = 6, 703*7c478bd9Sstevel@tonic-gate DAT_DTO_ERR_REMOTE_RESPONDER = 7, 704*7c478bd9Sstevel@tonic-gate DAT_DTO_ERR_TRANSPORT = 8, 705*7c478bd9Sstevel@tonic-gate DAT_DTO_ERR_RECEIVER_NOT_READY = 9, 706*7c478bd9Sstevel@tonic-gate DAT_DTO_ERR_PARTIAL_PACKET = 10, 707*7c478bd9Sstevel@tonic-gate DAT_RMR_OPERATION_FAILED = 11 708*7c478bd9Sstevel@tonic-gate } DAT_DTO_COMPLETION_STATUS; 709*7c478bd9Sstevel@tonic-gate 710*7c478bd9Sstevel@tonic-gate /* RMR completion status */ 711*7c478bd9Sstevel@tonic-gate 712*7c478bd9Sstevel@tonic-gate /* For backwards compatability */ 713*7c478bd9Sstevel@tonic-gate #define DAT_RMR_BIND_SUCCESS DAT_DTO_SUCCESS 714*7c478bd9Sstevel@tonic-gate #define DAT_RMR_BIND_FAILURE DAT_DTO_ERR_FLUSHED 715*7c478bd9Sstevel@tonic-gate 716*7c478bd9Sstevel@tonic-gate #define DAT_RMR_BIND_COMPLETION_STATUS DAT_DTO_COMPLETION_STATUS 717*7c478bd9Sstevel@tonic-gate 718*7c478bd9Sstevel@tonic-gate /* Completion group structs (six total) */ 719*7c478bd9Sstevel@tonic-gate 720*7c478bd9Sstevel@tonic-gate /* DTO completion event data */ 721*7c478bd9Sstevel@tonic-gate /* transferred_length is not defined if status is not DAT_SUCCESS */ 722*7c478bd9Sstevel@tonic-gate typedef struct dat_dto_completion_event_data { 723*7c478bd9Sstevel@tonic-gate DAT_EP_HANDLE ep_handle; 724*7c478bd9Sstevel@tonic-gate DAT_DTO_COOKIE user_cookie; 725*7c478bd9Sstevel@tonic-gate DAT_DTO_COMPLETION_STATUS status; 726*7c478bd9Sstevel@tonic-gate DAT_VLEN transfered_length; 727*7c478bd9Sstevel@tonic-gate } DAT_DTO_COMPLETION_EVENT_DATA; 728*7c478bd9Sstevel@tonic-gate 729*7c478bd9Sstevel@tonic-gate /* RMR bind completion event data */ 730*7c478bd9Sstevel@tonic-gate typedef struct dat_rmr_bind_completion_event_data { 731*7c478bd9Sstevel@tonic-gate DAT_RMR_HANDLE rmr_handle; 732*7c478bd9Sstevel@tonic-gate DAT_RMR_COOKIE user_cookie; 733*7c478bd9Sstevel@tonic-gate DAT_RMR_BIND_COMPLETION_STATUS status; 734*7c478bd9Sstevel@tonic-gate } DAT_RMR_BIND_COMPLETION_EVENT_DATA; 735*7c478bd9Sstevel@tonic-gate 736*7c478bd9Sstevel@tonic-gate typedef union dat_sp_handle { 737*7c478bd9Sstevel@tonic-gate DAT_RSP_HANDLE rsp_handle; 738*7c478bd9Sstevel@tonic-gate DAT_PSP_HANDLE psp_handle; 739*7c478bd9Sstevel@tonic-gate } DAT_SP_HANDLE; 740*7c478bd9Sstevel@tonic-gate 741*7c478bd9Sstevel@tonic-gate /* Connection Request Arrival event data */ 742*7c478bd9Sstevel@tonic-gate typedef struct dat_cr_arrival_event_data { 743*7c478bd9Sstevel@tonic-gate /* 744*7c478bd9Sstevel@tonic-gate * Handle to the Service Point that received the Connection Request 745*7c478bd9Sstevel@tonic-gate * from the remote side. If the Service Point was Reserved, sp is 746*7c478bd9Sstevel@tonic-gate * DAT_HANDLE_NULL because the reserved Service Point is automatically 747*7c478bd9Sstevel@tonic-gate * destroyed upon generating this event. Can be PSP or RSP. 748*7c478bd9Sstevel@tonic-gate */ 749*7c478bd9Sstevel@tonic-gate DAT_SP_HANDLE sp_handle; 750*7c478bd9Sstevel@tonic-gate 751*7c478bd9Sstevel@tonic-gate /* Address of the IA on which the Connection Request arrived. */ 752*7c478bd9Sstevel@tonic-gate DAT_IA_ADDRESS_PTR local_ia_address_ptr; 753*7c478bd9Sstevel@tonic-gate 754*7c478bd9Sstevel@tonic-gate /* 755*7c478bd9Sstevel@tonic-gate * Connection Qualifier of the IA on which the Service Point received a 756*7c478bd9Sstevel@tonic-gate * Connection Request. 757*7c478bd9Sstevel@tonic-gate */ 758*7c478bd9Sstevel@tonic-gate DAT_CONN_QUAL conn_qual; 759*7c478bd9Sstevel@tonic-gate 760*7c478bd9Sstevel@tonic-gate /* 761*7c478bd9Sstevel@tonic-gate * The Connection Request instance created by a Provider for the 762*7c478bd9Sstevel@tonic-gate * arrived Connection Request. Consumers can find out private_data 763*7c478bd9Sstevel@tonic-gate * passed by a remote Consumer from cr_handle. It is up to a Consumer 764*7c478bd9Sstevel@tonic-gate * to dat_cr_accept or dat_cr_reject of the Connection Request. 765*7c478bd9Sstevel@tonic-gate */ 766*7c478bd9Sstevel@tonic-gate DAT_CR_HANDLE cr_handle; 767*7c478bd9Sstevel@tonic-gate 768*7c478bd9Sstevel@tonic-gate } DAT_CR_ARRIVAL_EVENT_DATA; 769*7c478bd9Sstevel@tonic-gate 770*7c478bd9Sstevel@tonic-gate 771*7c478bd9Sstevel@tonic-gate /* Connection event data */ 772*7c478bd9Sstevel@tonic-gate typedef struct dat_connection_event_data { 773*7c478bd9Sstevel@tonic-gate DAT_EP_HANDLE ep_handle; 774*7c478bd9Sstevel@tonic-gate DAT_COUNT private_data_size; 775*7c478bd9Sstevel@tonic-gate DAT_PVOID private_data; 776*7c478bd9Sstevel@tonic-gate } DAT_CONNECTION_EVENT_DATA; 777*7c478bd9Sstevel@tonic-gate 778*7c478bd9Sstevel@tonic-gate /* Async Error event data */ 779*7c478bd9Sstevel@tonic-gate /* 780*7c478bd9Sstevel@tonic-gate * For unaffiliated asynchronous event dat_handle is ia_handle. For Endpoint 781*7c478bd9Sstevel@tonic-gate * affiliated asynchronous event dat_handle is ep_handle. For EVD affiliated 782*7c478bd9Sstevel@tonic-gate * asynchronous event dat_handle is evd_handle. For SRQ affiliated asynchronous 783*7c478bd9Sstevel@tonic-gate * event dat_handle is srq_handle. For Memory affiliated asynchronous event 784*7c478bd9Sstevel@tonic-gate * dat_handle is either lmr_handle, rmr_handle or pz_handle. 785*7c478bd9Sstevel@tonic-gate */ 786*7c478bd9Sstevel@tonic-gate typedef struct dat_asynch_error_event_data { 787*7c478bd9Sstevel@tonic-gate DAT_HANDLE dat_handle; /* either IA, EP, EVD, SRQ */ 788*7c478bd9Sstevel@tonic-gate /* LMR, RMR, or PZ handle */ 789*7c478bd9Sstevel@tonic-gate DAT_COUNT reason; /* object specific */ 790*7c478bd9Sstevel@tonic-gate } DAT_ASYNCH_ERROR_EVENT_DATA; 791*7c478bd9Sstevel@tonic-gate 792*7c478bd9Sstevel@tonic-gate /* The reason is object type specific and its values are defined below */ 793*7c478bd9Sstevel@tonic-gate typedef enum ia_async_error_reason { 794*7c478bd9Sstevel@tonic-gate DAT_IA_CATASTROPHIC_ERROR, 795*7c478bd9Sstevel@tonic-gate DAT_IA_OTHER_ERROR 796*7c478bd9Sstevel@tonic-gate } DAT_IA_ASYNC_ERROR_REASON; 797*7c478bd9Sstevel@tonic-gate 798*7c478bd9Sstevel@tonic-gate typedef enum ep_async_error_reason { 799*7c478bd9Sstevel@tonic-gate DAT_EP_TRANSFER_TO_ERROR, 800*7c478bd9Sstevel@tonic-gate DAT_EP_OTHER_ERROR, 801*7c478bd9Sstevel@tonic-gate DAT_SRQ_SOFT_HIGH_WATERMARK_EVENT 802*7c478bd9Sstevel@tonic-gate } DAT_EP_ASYNC_ERROR_REASON; 803*7c478bd9Sstevel@tonic-gate 804*7c478bd9Sstevel@tonic-gate typedef enum ep_evd_error_reason { 805*7c478bd9Sstevel@tonic-gate DAT_EVD_OVERFLOW_ERROR, 806*7c478bd9Sstevel@tonic-gate DAT_EVD_OTHER_ERROR 807*7c478bd9Sstevel@tonic-gate } DAT_EVD_ASYNC_ERROR_REASON; 808*7c478bd9Sstevel@tonic-gate 809*7c478bd9Sstevel@tonic-gate typedef enum ep_srq_error_reason { 810*7c478bd9Sstevel@tonic-gate DAT_SRQ_TRANSFER_TO_ERROR, 811*7c478bd9Sstevel@tonic-gate DAT_SRQ_OTHER_ERROR, 812*7c478bd9Sstevel@tonic-gate DAT_SRQ_LOW_WATERMARK_EVENT 813*7c478bd9Sstevel@tonic-gate } DAT_SRQ_ASYNC_ERROR_REASON; 814*7c478bd9Sstevel@tonic-gate 815*7c478bd9Sstevel@tonic-gate typedef enum lmr_async_error_reason { 816*7c478bd9Sstevel@tonic-gate DAT_LMR_OTHER_ERROR 817*7c478bd9Sstevel@tonic-gate } DAT_LMR_ASYNC_ERROR_REASON; 818*7c478bd9Sstevel@tonic-gate 819*7c478bd9Sstevel@tonic-gate typedef enum rmr_async_error_reason { 820*7c478bd9Sstevel@tonic-gate DAT_RMR_OTHER_ERROR 821*7c478bd9Sstevel@tonic-gate } DAT_RMR_ASYNC_ERROR_REASON; 822*7c478bd9Sstevel@tonic-gate 823*7c478bd9Sstevel@tonic-gate typedef enum pz_async_error_reason { 824*7c478bd9Sstevel@tonic-gate DAT_PZ_OTHER_ERROR 825*7c478bd9Sstevel@tonic-gate } DAT_PZ_ASYNC_ERROR_REASON; 826*7c478bd9Sstevel@tonic-gate 827*7c478bd9Sstevel@tonic-gate 828*7c478bd9Sstevel@tonic-gate /* Software event data */ 829*7c478bd9Sstevel@tonic-gate typedef struct dat_software_event_data { 830*7c478bd9Sstevel@tonic-gate DAT_PVOID pointer; 831*7c478bd9Sstevel@tonic-gate } DAT_SOFTWARE_EVENT_DATA; 832*7c478bd9Sstevel@tonic-gate 833*7c478bd9Sstevel@tonic-gate typedef enum dat_event_number { 834*7c478bd9Sstevel@tonic-gate DAT_DTO_COMPLETION_EVENT = 0x00001, 835*7c478bd9Sstevel@tonic-gate 836*7c478bd9Sstevel@tonic-gate DAT_RMR_BIND_COMPLETION_EVENT = 0x01001, 837*7c478bd9Sstevel@tonic-gate 838*7c478bd9Sstevel@tonic-gate DAT_CONNECTION_REQUEST_EVENT = 0x02001, 839*7c478bd9Sstevel@tonic-gate 840*7c478bd9Sstevel@tonic-gate DAT_CONNECTION_EVENT_ESTABLISHED = 0x04001, 841*7c478bd9Sstevel@tonic-gate DAT_CONNECTION_EVENT_PEER_REJECTED = 0x04002, 842*7c478bd9Sstevel@tonic-gate DAT_CONNECTION_EVENT_NON_PEER_REJECTED = 0x04003, 843*7c478bd9Sstevel@tonic-gate DAT_CONNECTION_EVENT_ACCEPT_COMPLETION_ERROR = 0x04004, 844*7c478bd9Sstevel@tonic-gate DAT_CONNECTION_EVENT_DISCONNECTED = 0x04005, 845*7c478bd9Sstevel@tonic-gate DAT_CONNECTION_EVENT_BROKEN = 0x04006, 846*7c478bd9Sstevel@tonic-gate DAT_CONNECTION_EVENT_TIMED_OUT = 0x04007, 847*7c478bd9Sstevel@tonic-gate DAT_CONNECTION_EVENT_UNREACHABLE = 0x04008, 848*7c478bd9Sstevel@tonic-gate 849*7c478bd9Sstevel@tonic-gate DAT_ASYNC_ERROR_EVD_OVERFLOW = 0x08001, 850*7c478bd9Sstevel@tonic-gate DAT_ASYNC_ERROR_IA_CATASTROPHIC = 0x08002, 851*7c478bd9Sstevel@tonic-gate DAT_ASYNC_ERROR_EP_BROKEN = 0x08003, 852*7c478bd9Sstevel@tonic-gate DAT_ASYNC_ERROR_TIMED_OUT = 0x08004, 853*7c478bd9Sstevel@tonic-gate DAT_ASYNC_ERROR_PROVIDER_INTERNAL_ERROR = 0x08005, 854*7c478bd9Sstevel@tonic-gate 855*7c478bd9Sstevel@tonic-gate DAT_SOFTWARE_EVENT = 0x10001 856*7c478bd9Sstevel@tonic-gate } DAT_EVENT_NUMBER; 857*7c478bd9Sstevel@tonic-gate 858*7c478bd9Sstevel@tonic-gate /* Union for event Data */ 859*7c478bd9Sstevel@tonic-gate 860*7c478bd9Sstevel@tonic-gate typedef union dat_event_data { 861*7c478bd9Sstevel@tonic-gate DAT_DTO_COMPLETION_EVENT_DATA dto_completion_event_data; 862*7c478bd9Sstevel@tonic-gate DAT_RMR_BIND_COMPLETION_EVENT_DATA rmr_completion_event_data; 863*7c478bd9Sstevel@tonic-gate DAT_CR_ARRIVAL_EVENT_DATA cr_arrival_event_data; 864*7c478bd9Sstevel@tonic-gate DAT_CONNECTION_EVENT_DATA connect_event_data; 865*7c478bd9Sstevel@tonic-gate DAT_ASYNCH_ERROR_EVENT_DATA asynch_error_event_data; 866*7c478bd9Sstevel@tonic-gate DAT_SOFTWARE_EVENT_DATA software_event_data; 867*7c478bd9Sstevel@tonic-gate } DAT_EVENT_DATA; 868*7c478bd9Sstevel@tonic-gate 869*7c478bd9Sstevel@tonic-gate /* Event struct that holds all event information */ 870*7c478bd9Sstevel@tonic-gate 871*7c478bd9Sstevel@tonic-gate typedef struct dat_event { 872*7c478bd9Sstevel@tonic-gate DAT_EVENT_NUMBER event_number; 873*7c478bd9Sstevel@tonic-gate DAT_EVD_HANDLE evd_handle; 874*7c478bd9Sstevel@tonic-gate DAT_EVENT_DATA event_data; 875*7c478bd9Sstevel@tonic-gate } DAT_EVENT; 876*7c478bd9Sstevel@tonic-gate 877*7c478bd9Sstevel@tonic-gate /* Provider/registration info */ 878*7c478bd9Sstevel@tonic-gate 879*7c478bd9Sstevel@tonic-gate typedef struct dat_provider_info { 880*7c478bd9Sstevel@tonic-gate char ia_name[DAT_NAME_MAX_LENGTH]; 881*7c478bd9Sstevel@tonic-gate DAT_UINT32 dapl_version_major; 882*7c478bd9Sstevel@tonic-gate DAT_UINT32 dapl_version_minor; 883*7c478bd9Sstevel@tonic-gate DAT_BOOLEAN is_thread_safe; 884*7c478bd9Sstevel@tonic-gate } DAT_PROVIDER_INFO; 885*7c478bd9Sstevel@tonic-gate 886*7c478bd9Sstevel@tonic-gate /* 887*7c478bd9Sstevel@tonic-gate * FUNCTION PROTOTYPES 888*7c478bd9Sstevel@tonic-gate */ 889*7c478bd9Sstevel@tonic-gate /* 890*7c478bd9Sstevel@tonic-gate * IA functions 891*7c478bd9Sstevel@tonic-gate * 892*7c478bd9Sstevel@tonic-gate * Note that there are actual 'dat_ia_open' and 'dat_ia_close' 893*7c478bd9Sstevel@tonic-gate * functions, it is not just a re-directing #define. That is 894*7c478bd9Sstevel@tonic-gate * because the functions may have to ensure that the provider 895*7c478bd9Sstevel@tonic-gate * library is loaded before it can call it, and may choose to 896*7c478bd9Sstevel@tonic-gate * unload the library after the last close. 897*7c478bd9Sstevel@tonic-gate */ 898*7c478bd9Sstevel@tonic-gate 899*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_ia_openv( 900*7c478bd9Sstevel@tonic-gate IN const DAT_NAME_PTR, /* provider */ 901*7c478bd9Sstevel@tonic-gate IN DAT_COUNT, /* asynch_evd_min_qlen */ 902*7c478bd9Sstevel@tonic-gate INOUT DAT_EVD_HANDLE *, /* asynch_evd_handle */ 903*7c478bd9Sstevel@tonic-gate OUT DAT_IA_HANDLE *, /* ia_handle */ 904*7c478bd9Sstevel@tonic-gate IN DAT_UINT32, /* dat major version number */ 905*7c478bd9Sstevel@tonic-gate IN DAT_UINT32, /* dat minor version number */ 906*7c478bd9Sstevel@tonic-gate IN DAT_BOOLEAN); /* dat thread safety */ 907*7c478bd9Sstevel@tonic-gate 908*7c478bd9Sstevel@tonic-gate #define dat_ia_open(name, qlen, async_evd, ia) \ 909*7c478bd9Sstevel@tonic-gate dat_ia_openv((name), (qlen), (async_evd), (ia), \ 910*7c478bd9Sstevel@tonic-gate DAT_VERSION_MAJOR, DAT_VERSION_MINOR, \ 911*7c478bd9Sstevel@tonic-gate DAT_THREADSAFE) 912*7c478bd9Sstevel@tonic-gate 913*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_ia_query( 914*7c478bd9Sstevel@tonic-gate IN DAT_IA_HANDLE, /* ia handle */ 915*7c478bd9Sstevel@tonic-gate OUT DAT_EVD_HANDLE *, /* async_evd_handle */ 916*7c478bd9Sstevel@tonic-gate IN DAT_IA_ATTR_MASK, /* ia_attr_mask */ 917*7c478bd9Sstevel@tonic-gate OUT DAT_IA_ATTR *, /* ia_attr */ 918*7c478bd9Sstevel@tonic-gate IN DAT_PROVIDER_ATTR_MASK, /* provider_attr_mask */ 919*7c478bd9Sstevel@tonic-gate OUT DAT_PROVIDER_ATTR *); /* provider_attr */ 920*7c478bd9Sstevel@tonic-gate 921*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_ia_close( 922*7c478bd9Sstevel@tonic-gate IN DAT_IA_HANDLE, /* ia_handle */ 923*7c478bd9Sstevel@tonic-gate IN DAT_CLOSE_FLAGS); /* close_flags */ 924*7c478bd9Sstevel@tonic-gate 925*7c478bd9Sstevel@tonic-gate /* helper functions */ 926*7c478bd9Sstevel@tonic-gate 927*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_set_consumer_context( 928*7c478bd9Sstevel@tonic-gate IN DAT_HANDLE, /* dat handle */ 929*7c478bd9Sstevel@tonic-gate IN DAT_CONTEXT); /* context */ 930*7c478bd9Sstevel@tonic-gate 931*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_get_consumer_context( 932*7c478bd9Sstevel@tonic-gate IN DAT_HANDLE, /* dat handle */ 933*7c478bd9Sstevel@tonic-gate OUT DAT_CONTEXT *); /* context */ 934*7c478bd9Sstevel@tonic-gate 935*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_get_handle_type( 936*7c478bd9Sstevel@tonic-gate IN DAT_HANDLE, /* dat_handle */ 937*7c478bd9Sstevel@tonic-gate OUT DAT_HANDLE_TYPE *); /* handle_type */ 938*7c478bd9Sstevel@tonic-gate 939*7c478bd9Sstevel@tonic-gate /* CR Functions */ 940*7c478bd9Sstevel@tonic-gate 941*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_cr_query( 942*7c478bd9Sstevel@tonic-gate IN DAT_CR_HANDLE, /* cr_handle */ 943*7c478bd9Sstevel@tonic-gate IN DAT_CR_PARAM_MASK, /* cr_param_mask */ 944*7c478bd9Sstevel@tonic-gate OUT DAT_CR_PARAM *); /* cr_param */ 945*7c478bd9Sstevel@tonic-gate 946*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_cr_accept( 947*7c478bd9Sstevel@tonic-gate IN DAT_CR_HANDLE, /* cr_handle */ 948*7c478bd9Sstevel@tonic-gate IN DAT_EP_HANDLE, /* ep_handle */ 949*7c478bd9Sstevel@tonic-gate IN DAT_COUNT, /* private_data_size */ 950*7c478bd9Sstevel@tonic-gate IN const DAT_PVOID); /* private_data */ 951*7c478bd9Sstevel@tonic-gate 952*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_cr_reject( 953*7c478bd9Sstevel@tonic-gate IN DAT_CR_HANDLE); 954*7c478bd9Sstevel@tonic-gate 955*7c478bd9Sstevel@tonic-gate /* 956*7c478bd9Sstevel@tonic-gate * For DAT-1.1 and above, this function is defined for both uDAPL and kDAPL. 957*7c478bd9Sstevel@tonic-gate * For DAT-1.0 it was only defined for uDAPL. 958*7c478bd9Sstevel@tonic-gate */ 959*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_cr_handoff( 960*7c478bd9Sstevel@tonic-gate IN DAT_CR_HANDLE, /* cr_handle */ 961*7c478bd9Sstevel@tonic-gate IN DAT_CONN_QUAL); /* handoff */ 962*7c478bd9Sstevel@tonic-gate 963*7c478bd9Sstevel@tonic-gate /* EVD Functions */ 964*7c478bd9Sstevel@tonic-gate 965*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_evd_resize( 966*7c478bd9Sstevel@tonic-gate IN DAT_EVD_HANDLE, /* evd_handle */ 967*7c478bd9Sstevel@tonic-gate IN DAT_COUNT); /* evd_min_qlen */ 968*7c478bd9Sstevel@tonic-gate 969*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_evd_post_se( 970*7c478bd9Sstevel@tonic-gate IN DAT_EVD_HANDLE, /* evd_handle */ 971*7c478bd9Sstevel@tonic-gate IN const DAT_EVENT *); /* event */ 972*7c478bd9Sstevel@tonic-gate 973*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_evd_dequeue( 974*7c478bd9Sstevel@tonic-gate IN DAT_EVD_HANDLE, /* evd_handle */ 975*7c478bd9Sstevel@tonic-gate OUT DAT_EVENT *); /* event */ 976*7c478bd9Sstevel@tonic-gate 977*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_evd_query( 978*7c478bd9Sstevel@tonic-gate IN DAT_EVD_HANDLE, /* evd_handle */ 979*7c478bd9Sstevel@tonic-gate IN DAT_EVD_PARAM_MASK, /* evd_param_mask */ 980*7c478bd9Sstevel@tonic-gate OUT DAT_EVD_PARAM *); /* evd_param */ 981*7c478bd9Sstevel@tonic-gate 982*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_evd_free( 983*7c478bd9Sstevel@tonic-gate IN DAT_EVD_HANDLE); /* evd_handle */ 984*7c478bd9Sstevel@tonic-gate 985*7c478bd9Sstevel@tonic-gate /* EP functions */ 986*7c478bd9Sstevel@tonic-gate 987*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_ep_create( 988*7c478bd9Sstevel@tonic-gate IN DAT_IA_HANDLE, /* ia_handle */ 989*7c478bd9Sstevel@tonic-gate IN DAT_PZ_HANDLE, /* pz_handle */ 990*7c478bd9Sstevel@tonic-gate IN DAT_EVD_HANDLE, /* recv_completion_evd_handle */ 991*7c478bd9Sstevel@tonic-gate IN DAT_EVD_HANDLE, /* request_completion_evd_handle */ 992*7c478bd9Sstevel@tonic-gate IN DAT_EVD_HANDLE, /* connect_evd_handle */ 993*7c478bd9Sstevel@tonic-gate IN const DAT_EP_ATTR *, /* ep_attributes */ 994*7c478bd9Sstevel@tonic-gate OUT DAT_EP_HANDLE *); /* ep_handle */ 995*7c478bd9Sstevel@tonic-gate 996*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_ep_query( 997*7c478bd9Sstevel@tonic-gate IN DAT_EP_HANDLE, /* ep_handle */ 998*7c478bd9Sstevel@tonic-gate IN DAT_EP_PARAM_MASK, /* ep_param_mask */ 999*7c478bd9Sstevel@tonic-gate OUT DAT_EP_PARAM *); /* ep_param */ 1000*7c478bd9Sstevel@tonic-gate 1001*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_ep_modify( 1002*7c478bd9Sstevel@tonic-gate IN DAT_EP_HANDLE, /* ep_handle */ 1003*7c478bd9Sstevel@tonic-gate IN DAT_EP_PARAM_MASK, /* ep_param_mask */ 1004*7c478bd9Sstevel@tonic-gate IN const DAT_EP_PARAM *); /* ep_param */ 1005*7c478bd9Sstevel@tonic-gate 1006*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_ep_connect( 1007*7c478bd9Sstevel@tonic-gate IN DAT_EP_HANDLE, /* ep_handle */ 1008*7c478bd9Sstevel@tonic-gate IN DAT_IA_ADDRESS_PTR, /* remote_ia_address */ 1009*7c478bd9Sstevel@tonic-gate IN DAT_CONN_QUAL, /* remote_conn_qual */ 1010*7c478bd9Sstevel@tonic-gate IN DAT_TIMEOUT, /* timeout */ 1011*7c478bd9Sstevel@tonic-gate IN DAT_COUNT, /* private_data_size */ 1012*7c478bd9Sstevel@tonic-gate IN const DAT_PVOID, /* private_data */ 1013*7c478bd9Sstevel@tonic-gate IN DAT_QOS, /* quality_of_service */ 1014*7c478bd9Sstevel@tonic-gate IN DAT_CONNECT_FLAGS); /* connect_flags */ 1015*7c478bd9Sstevel@tonic-gate 1016*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_ep_dup_connect( 1017*7c478bd9Sstevel@tonic-gate IN DAT_EP_HANDLE, /* ep_handle */ 1018*7c478bd9Sstevel@tonic-gate IN DAT_EP_HANDLE, /* ep_dup_handle */ 1019*7c478bd9Sstevel@tonic-gate IN DAT_TIMEOUT, /* timeout */ 1020*7c478bd9Sstevel@tonic-gate IN DAT_COUNT, /* private_data_size */ 1021*7c478bd9Sstevel@tonic-gate IN const DAT_PVOID, /* private_data */ 1022*7c478bd9Sstevel@tonic-gate IN DAT_QOS); /* quality_of_service */ 1023*7c478bd9Sstevel@tonic-gate 1024*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_ep_disconnect( 1025*7c478bd9Sstevel@tonic-gate IN DAT_EP_HANDLE, /* ep_handle */ 1026*7c478bd9Sstevel@tonic-gate IN DAT_CLOSE_FLAGS); /* close_flags */ 1027*7c478bd9Sstevel@tonic-gate 1028*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_ep_post_send( 1029*7c478bd9Sstevel@tonic-gate IN DAT_EP_HANDLE, /* ep_handle */ 1030*7c478bd9Sstevel@tonic-gate IN DAT_COUNT, /* num_segments */ 1031*7c478bd9Sstevel@tonic-gate IN DAT_LMR_TRIPLET *, /* local_iov */ 1032*7c478bd9Sstevel@tonic-gate IN DAT_DTO_COOKIE, /* user_cookie */ 1033*7c478bd9Sstevel@tonic-gate IN DAT_COMPLETION_FLAGS); /* completion_flags */ 1034*7c478bd9Sstevel@tonic-gate 1035*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_ep_post_recv( 1036*7c478bd9Sstevel@tonic-gate IN DAT_EP_HANDLE, /* ep_handle */ 1037*7c478bd9Sstevel@tonic-gate IN DAT_COUNT, /* num_segments */ 1038*7c478bd9Sstevel@tonic-gate IN DAT_LMR_TRIPLET *, /* local_iov */ 1039*7c478bd9Sstevel@tonic-gate IN DAT_DTO_COOKIE, /* user_cookie */ 1040*7c478bd9Sstevel@tonic-gate IN DAT_COMPLETION_FLAGS); /* completion_flags */ 1041*7c478bd9Sstevel@tonic-gate 1042*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_ep_post_rdma_read( 1043*7c478bd9Sstevel@tonic-gate IN DAT_EP_HANDLE, /* ep_handle */ 1044*7c478bd9Sstevel@tonic-gate IN DAT_COUNT, /* num_segments */ 1045*7c478bd9Sstevel@tonic-gate IN DAT_LMR_TRIPLET *, /* local_iov */ 1046*7c478bd9Sstevel@tonic-gate IN DAT_DTO_COOKIE, /* user_cookie */ 1047*7c478bd9Sstevel@tonic-gate IN const DAT_RMR_TRIPLET *, /* remote_iov */ 1048*7c478bd9Sstevel@tonic-gate IN DAT_COMPLETION_FLAGS); /* completion_flags */ 1049*7c478bd9Sstevel@tonic-gate 1050*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_ep_post_rdma_write( 1051*7c478bd9Sstevel@tonic-gate IN DAT_EP_HANDLE, /* ep_handle */ 1052*7c478bd9Sstevel@tonic-gate IN DAT_COUNT, /* num_segments */ 1053*7c478bd9Sstevel@tonic-gate IN DAT_LMR_TRIPLET *, /* local_iov */ 1054*7c478bd9Sstevel@tonic-gate IN DAT_DTO_COOKIE, /* user_cookie */ 1055*7c478bd9Sstevel@tonic-gate IN const DAT_RMR_TRIPLET *, /* remote_iov */ 1056*7c478bd9Sstevel@tonic-gate IN DAT_COMPLETION_FLAGS); /* completion_flags */ 1057*7c478bd9Sstevel@tonic-gate 1058*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_ep_get_status( 1059*7c478bd9Sstevel@tonic-gate IN DAT_EP_HANDLE, /* ep_handle */ 1060*7c478bd9Sstevel@tonic-gate OUT DAT_EP_STATE *, /* ep_state */ 1061*7c478bd9Sstevel@tonic-gate OUT DAT_BOOLEAN *, /* recv_idle */ 1062*7c478bd9Sstevel@tonic-gate OUT DAT_BOOLEAN *); /* request_idle */ 1063*7c478bd9Sstevel@tonic-gate 1064*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_ep_free( 1065*7c478bd9Sstevel@tonic-gate IN DAT_EP_HANDLE); /* ep_handle */ 1066*7c478bd9Sstevel@tonic-gate 1067*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_ep_reset( 1068*7c478bd9Sstevel@tonic-gate IN DAT_EP_HANDLE); /* ep_handle */ 1069*7c478bd9Sstevel@tonic-gate 1070*7c478bd9Sstevel@tonic-gate /* LMR functions */ 1071*7c478bd9Sstevel@tonic-gate 1072*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_lmr_query( 1073*7c478bd9Sstevel@tonic-gate IN DAT_LMR_HANDLE, /* lmr_handle */ 1074*7c478bd9Sstevel@tonic-gate IN DAT_LMR_PARAM_MASK, /* lmr_param_mask */ 1075*7c478bd9Sstevel@tonic-gate OUT DAT_LMR_PARAM *); /* lmr_param */ 1076*7c478bd9Sstevel@tonic-gate 1077*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_lmr_free( 1078*7c478bd9Sstevel@tonic-gate IN DAT_LMR_HANDLE); /* lmr_handle */ 1079*7c478bd9Sstevel@tonic-gate 1080*7c478bd9Sstevel@tonic-gate /* Non-coherent memory functions */ 1081*7c478bd9Sstevel@tonic-gate 1082*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_lmr_sync_rdma_read( 1083*7c478bd9Sstevel@tonic-gate IN DAT_IA_HANDLE, /* ia_handle */ 1084*7c478bd9Sstevel@tonic-gate IN const DAT_LMR_TRIPLET *, /* local_segments */ 1085*7c478bd9Sstevel@tonic-gate IN DAT_VLEN); /* num_segments */ 1086*7c478bd9Sstevel@tonic-gate 1087*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_lmr_sync_rdma_write( 1088*7c478bd9Sstevel@tonic-gate IN DAT_IA_HANDLE, /* ia_handle */ 1089*7c478bd9Sstevel@tonic-gate IN const DAT_LMR_TRIPLET *, /* local_segments */ 1090*7c478bd9Sstevel@tonic-gate IN DAT_VLEN); /* num_segments */ 1091*7c478bd9Sstevel@tonic-gate 1092*7c478bd9Sstevel@tonic-gate /* RMR Functions */ 1093*7c478bd9Sstevel@tonic-gate 1094*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_rmr_create( 1095*7c478bd9Sstevel@tonic-gate IN DAT_PZ_HANDLE, /* pz_handle */ 1096*7c478bd9Sstevel@tonic-gate OUT DAT_RMR_HANDLE *); /* rmr_handle */ 1097*7c478bd9Sstevel@tonic-gate 1098*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_rmr_query( 1099*7c478bd9Sstevel@tonic-gate IN DAT_RMR_HANDLE, /* rmr_handle */ 1100*7c478bd9Sstevel@tonic-gate IN DAT_RMR_PARAM_MASK, /* rmr_param_mask */ 1101*7c478bd9Sstevel@tonic-gate OUT DAT_RMR_PARAM *); /* rmr_param */ 1102*7c478bd9Sstevel@tonic-gate 1103*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_rmr_bind( 1104*7c478bd9Sstevel@tonic-gate IN DAT_RMR_HANDLE, /* rmr_handle */ 1105*7c478bd9Sstevel@tonic-gate IN const DAT_LMR_TRIPLET *, /* lmr_triplet */ 1106*7c478bd9Sstevel@tonic-gate IN DAT_MEM_PRIV_FLAGS, /* mem_priv */ 1107*7c478bd9Sstevel@tonic-gate IN DAT_EP_HANDLE, /* ep_handle */ 1108*7c478bd9Sstevel@tonic-gate IN DAT_RMR_COOKIE, /* user_cookie */ 1109*7c478bd9Sstevel@tonic-gate IN DAT_COMPLETION_FLAGS, /* completion_flags */ 1110*7c478bd9Sstevel@tonic-gate OUT DAT_RMR_CONTEXT *); /* context */ 1111*7c478bd9Sstevel@tonic-gate 1112*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_rmr_free( 1113*7c478bd9Sstevel@tonic-gate IN DAT_RMR_HANDLE); /* rmr_handle */ 1114*7c478bd9Sstevel@tonic-gate 1115*7c478bd9Sstevel@tonic-gate /* PSP Functions */ 1116*7c478bd9Sstevel@tonic-gate 1117*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_psp_create( 1118*7c478bd9Sstevel@tonic-gate IN DAT_IA_HANDLE, /* ia_handle */ 1119*7c478bd9Sstevel@tonic-gate IN DAT_CONN_QUAL, /* conn_qual */ 1120*7c478bd9Sstevel@tonic-gate IN DAT_EVD_HANDLE, /* evd_handle */ 1121*7c478bd9Sstevel@tonic-gate IN DAT_PSP_FLAGS, /* psp_flags */ 1122*7c478bd9Sstevel@tonic-gate OUT DAT_PSP_HANDLE *); /* psp_handle */ 1123*7c478bd9Sstevel@tonic-gate 1124*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_psp_create_any( 1125*7c478bd9Sstevel@tonic-gate IN DAT_IA_HANDLE, /* ia_handle */ 1126*7c478bd9Sstevel@tonic-gate OUT DAT_CONN_QUAL *, /* conn_qual */ 1127*7c478bd9Sstevel@tonic-gate IN DAT_EVD_HANDLE, /* evd_handle */ 1128*7c478bd9Sstevel@tonic-gate IN DAT_PSP_FLAGS, /* psp_flags */ 1129*7c478bd9Sstevel@tonic-gate OUT DAT_PSP_HANDLE *); /* psp_handle */ 1130*7c478bd9Sstevel@tonic-gate 1131*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_psp_query( 1132*7c478bd9Sstevel@tonic-gate IN DAT_PSP_HANDLE, /* psp_handle */ 1133*7c478bd9Sstevel@tonic-gate IN DAT_PSP_PARAM_MASK, /* psp_param_mask */ 1134*7c478bd9Sstevel@tonic-gate OUT DAT_PSP_PARAM *); /* psp_param */ 1135*7c478bd9Sstevel@tonic-gate 1136*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_psp_free( 1137*7c478bd9Sstevel@tonic-gate IN DAT_PSP_HANDLE); /* psp_handle */ 1138*7c478bd9Sstevel@tonic-gate 1139*7c478bd9Sstevel@tonic-gate /* RSP Functions */ 1140*7c478bd9Sstevel@tonic-gate 1141*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_rsp_create( 1142*7c478bd9Sstevel@tonic-gate IN DAT_IA_HANDLE, /* ia_handle */ 1143*7c478bd9Sstevel@tonic-gate IN DAT_CONN_QUAL, /* conn_qual */ 1144*7c478bd9Sstevel@tonic-gate IN DAT_EP_HANDLE, /* ep_handle */ 1145*7c478bd9Sstevel@tonic-gate IN DAT_EVD_HANDLE, /* evd_handle */ 1146*7c478bd9Sstevel@tonic-gate OUT DAT_RSP_HANDLE *); /* rsp_handle */ 1147*7c478bd9Sstevel@tonic-gate 1148*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_rsp_query( 1149*7c478bd9Sstevel@tonic-gate IN DAT_RSP_HANDLE, /* rsp_handle */ 1150*7c478bd9Sstevel@tonic-gate IN DAT_RSP_PARAM_MASK, /* rsp_param_mask */ 1151*7c478bd9Sstevel@tonic-gate OUT DAT_RSP_PARAM *); /* rsp_param */ 1152*7c478bd9Sstevel@tonic-gate 1153*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_rsp_free( 1154*7c478bd9Sstevel@tonic-gate IN DAT_RSP_HANDLE); /* rsp_handle */ 1155*7c478bd9Sstevel@tonic-gate 1156*7c478bd9Sstevel@tonic-gate /* PZ Functions */ 1157*7c478bd9Sstevel@tonic-gate 1158*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_pz_create( 1159*7c478bd9Sstevel@tonic-gate IN DAT_IA_HANDLE, /* ia_handle */ 1160*7c478bd9Sstevel@tonic-gate OUT DAT_PZ_HANDLE *); /* pz_handle */ 1161*7c478bd9Sstevel@tonic-gate 1162*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_pz_query( 1163*7c478bd9Sstevel@tonic-gate IN DAT_PZ_HANDLE, /* pz_handle */ 1164*7c478bd9Sstevel@tonic-gate IN DAT_PZ_PARAM_MASK, /* pz_param_mask */ 1165*7c478bd9Sstevel@tonic-gate OUT DAT_PZ_PARAM *); /* pz_param */ 1166*7c478bd9Sstevel@tonic-gate 1167*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_pz_free( 1168*7c478bd9Sstevel@tonic-gate IN DAT_PZ_HANDLE); /* pz_handle */ 1169*7c478bd9Sstevel@tonic-gate 1170*7c478bd9Sstevel@tonic-gate /* 1171*7c478bd9Sstevel@tonic-gate * SRQ functions 1172*7c478bd9Sstevel@tonic-gate */ 1173*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_ep_create_with_srq( 1174*7c478bd9Sstevel@tonic-gate IN DAT_IA_HANDLE, /* ia_handle */ 1175*7c478bd9Sstevel@tonic-gate IN DAT_PZ_HANDLE, /* pz_handle */ 1176*7c478bd9Sstevel@tonic-gate IN DAT_EVD_HANDLE, /* recv_evd_handle */ 1177*7c478bd9Sstevel@tonic-gate IN DAT_EVD_HANDLE, /* request_evd_handle */ 1178*7c478bd9Sstevel@tonic-gate IN DAT_EVD_HANDLE, /* connect_evd_handle */ 1179*7c478bd9Sstevel@tonic-gate IN DAT_SRQ_HANDLE, /* srq_handle */ 1180*7c478bd9Sstevel@tonic-gate IN const DAT_EP_ATTR *, /* ep_attributes */ 1181*7c478bd9Sstevel@tonic-gate OUT DAT_EP_HANDLE *); /* ep_handle */ 1182*7c478bd9Sstevel@tonic-gate 1183*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_ep_recv_query( 1184*7c478bd9Sstevel@tonic-gate IN DAT_EP_HANDLE, /* ep_handle */ 1185*7c478bd9Sstevel@tonic-gate OUT DAT_COUNT *, /* nbufs_allocated */ 1186*7c478bd9Sstevel@tonic-gate OUT DAT_COUNT *); /* bufs_alloc_span */ 1187*7c478bd9Sstevel@tonic-gate 1188*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_ep_set_watermark( 1189*7c478bd9Sstevel@tonic-gate IN DAT_EP_HANDLE, /* ep_handle */ 1190*7c478bd9Sstevel@tonic-gate IN DAT_COUNT, /* soft_high_watermark */ 1191*7c478bd9Sstevel@tonic-gate IN DAT_COUNT); /* hard_high_watermark */ 1192*7c478bd9Sstevel@tonic-gate 1193*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_srq_create( 1194*7c478bd9Sstevel@tonic-gate IN DAT_IA_HANDLE, /* ia_handle */ 1195*7c478bd9Sstevel@tonic-gate IN DAT_PZ_HANDLE, /* pz_handle */ 1196*7c478bd9Sstevel@tonic-gate IN DAT_SRQ_ATTR *, /* srq_attr */ 1197*7c478bd9Sstevel@tonic-gate OUT DAT_SRQ_HANDLE *); /* srq_handle */ 1198*7c478bd9Sstevel@tonic-gate 1199*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_srq_free( 1200*7c478bd9Sstevel@tonic-gate IN DAT_SRQ_HANDLE); /* srq_handle */ 1201*7c478bd9Sstevel@tonic-gate 1202*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_srq_post_recv( 1203*7c478bd9Sstevel@tonic-gate IN DAT_SRQ_HANDLE, /* srq_handle */ 1204*7c478bd9Sstevel@tonic-gate IN DAT_COUNT, /* num_segments */ 1205*7c478bd9Sstevel@tonic-gate IN DAT_LMR_TRIPLET *, /* local_iov */ 1206*7c478bd9Sstevel@tonic-gate IN DAT_DTO_COOKIE); /* user_cookie */ 1207*7c478bd9Sstevel@tonic-gate 1208*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_srq_query( 1209*7c478bd9Sstevel@tonic-gate IN DAT_SRQ_HANDLE, /* srq_handle */ 1210*7c478bd9Sstevel@tonic-gate IN DAT_SRQ_PARAM_MASK, /* srq_param_mask */ 1211*7c478bd9Sstevel@tonic-gate OUT DAT_SRQ_PARAM *); /* srq_param */ 1212*7c478bd9Sstevel@tonic-gate 1213*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_srq_resize( 1214*7c478bd9Sstevel@tonic-gate IN DAT_SRQ_HANDLE, /* srq_handle */ 1215*7c478bd9Sstevel@tonic-gate IN DAT_COUNT); /* srq_max_recv_dto */ 1216*7c478bd9Sstevel@tonic-gate 1217*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_srq_set_lw( 1218*7c478bd9Sstevel@tonic-gate IN DAT_SRQ_HANDLE, /* srq_handle */ 1219*7c478bd9Sstevel@tonic-gate IN DAT_COUNT); /* low_watermark */ 1220*7c478bd9Sstevel@tonic-gate 1221*7c478bd9Sstevel@tonic-gate /* 1222*7c478bd9Sstevel@tonic-gate * DAT registry functions. 1223*7c478bd9Sstevel@tonic-gate * 1224*7c478bd9Sstevel@tonic-gate * Note the dat_ia_open and dat_ia_close functions are linked to 1225*7c478bd9Sstevel@tonic-gate * registration code which "redirects" to the appropriate provider. 1226*7c478bd9Sstevel@tonic-gate */ 1227*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_registry_list_providers( 1228*7c478bd9Sstevel@tonic-gate IN DAT_COUNT, /* max_to_return */ 1229*7c478bd9Sstevel@tonic-gate OUT DAT_COUNT *, /* entries_returned */ 1230*7c478bd9Sstevel@tonic-gate /* dat_provider_list */ 1231*7c478bd9Sstevel@tonic-gate OUT DAT_PROVIDER_INFO *(dat_provider_list[])); 1232*7c478bd9Sstevel@tonic-gate /* 1233*7c478bd9Sstevel@tonic-gate * DAT error functions. 1234*7c478bd9Sstevel@tonic-gate */ 1235*7c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_strerror( 1236*7c478bd9Sstevel@tonic-gate IN DAT_RETURN, /* dat function return */ 1237*7c478bd9Sstevel@tonic-gate OUT const char **, /* major message string */ 1238*7c478bd9Sstevel@tonic-gate OUT const char **); /* minor message string */ 1239*7c478bd9Sstevel@tonic-gate 1240*7c478bd9Sstevel@tonic-gate 1241*7c478bd9Sstevel@tonic-gate #ifdef __cplusplus 1242*7c478bd9Sstevel@tonic-gate } 1243*7c478bd9Sstevel@tonic-gate #endif 1244*7c478bd9Sstevel@tonic-gate 1245*7c478bd9Sstevel@tonic-gate #endif /* _DAT_H_ */ 1246