xref: /onnv-gate/usr/src/lib/udapl/udapl_tavor/include/dapl.h (revision 12163:f0cf0084e756)
19517SBill.Taylor@Sun.COM /*
29517SBill.Taylor@Sun.COM  * CDDL HEADER START
39517SBill.Taylor@Sun.COM  *
49517SBill.Taylor@Sun.COM  * The contents of this file are subject to the terms of the
59517SBill.Taylor@Sun.COM  * Common Development and Distribution License (the "License").
69517SBill.Taylor@Sun.COM  * You may not use this file except in compliance with the License.
79517SBill.Taylor@Sun.COM  *
89517SBill.Taylor@Sun.COM  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
99517SBill.Taylor@Sun.COM  * or http://www.opensolaris.org/os/licensing.
109517SBill.Taylor@Sun.COM  * See the License for the specific language governing permissions
119517SBill.Taylor@Sun.COM  * and limitations under the License.
129517SBill.Taylor@Sun.COM  *
139517SBill.Taylor@Sun.COM  * When distributing Covered Code, include this CDDL HEADER in each
149517SBill.Taylor@Sun.COM  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
159517SBill.Taylor@Sun.COM  * If applicable, add the following below this CDDL HEADER, with the
169517SBill.Taylor@Sun.COM  * fields enclosed by brackets "[]" replaced with your own identifying
179517SBill.Taylor@Sun.COM  * information: Portions Copyright [yyyy] [name of copyright owner]
189517SBill.Taylor@Sun.COM  *
199517SBill.Taylor@Sun.COM  * CDDL HEADER END
209517SBill.Taylor@Sun.COM  */
219517SBill.Taylor@Sun.COM 
229517SBill.Taylor@Sun.COM /*
239517SBill.Taylor@Sun.COM  * Copyright (c) 2002-2003, Network Appliance, Inc. All rights reserved.
249517SBill.Taylor@Sun.COM  */
259517SBill.Taylor@Sun.COM 
269517SBill.Taylor@Sun.COM /*
27*12163SRamaswamy.Tummala@Sun.COM  * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
289517SBill.Taylor@Sun.COM  */
299517SBill.Taylor@Sun.COM 
309517SBill.Taylor@Sun.COM /*
319517SBill.Taylor@Sun.COM  *
329517SBill.Taylor@Sun.COM  * HEADER: dapl.h
339517SBill.Taylor@Sun.COM  *
349517SBill.Taylor@Sun.COM  * PURPOSE: defines common data structures for the DAPL reference implemenation
359517SBill.Taylor@Sun.COM  *
369517SBill.Taylor@Sun.COM  * Description: This file describes the working data structures used within
379517SBill.Taylor@Sun.COM  *              DAPL RI.
389517SBill.Taylor@Sun.COM  *
399517SBill.Taylor@Sun.COM  */
409517SBill.Taylor@Sun.COM 
419517SBill.Taylor@Sun.COM #ifndef _DAPL_H_
429517SBill.Taylor@Sun.COM #define	_DAPL_H_
439517SBill.Taylor@Sun.COM 
449517SBill.Taylor@Sun.COM #ifdef __cplusplus
459517SBill.Taylor@Sun.COM extern "C" {
469517SBill.Taylor@Sun.COM #endif
479517SBill.Taylor@Sun.COM 
489517SBill.Taylor@Sun.COM #include <sys/types.h>
499517SBill.Taylor@Sun.COM #include <sys/byteorder.h>
509517SBill.Taylor@Sun.COM 
519517SBill.Taylor@Sun.COM #include <dat/udat.h>
529517SBill.Taylor@Sun.COM #include <dat/dat_registry.h>
539517SBill.Taylor@Sun.COM #include "dapl_osd.h"
549517SBill.Taylor@Sun.COM #include "dapl_debug.h"
559517SBill.Taylor@Sun.COM #include "dapl_tavor_ibtf.h"
569517SBill.Taylor@Sun.COM 
579517SBill.Taylor@Sun.COM 
589517SBill.Taylor@Sun.COM /*
599517SBill.Taylor@Sun.COM  * The HTOBE_xx() macro converts data from host order to big endian
609517SBill.Taylor@Sun.COM  * order and hence uses the BE_xx macros to do the byte swapping.
619517SBill.Taylor@Sun.COM  *
629517SBill.Taylor@Sun.COM  * The BETOH_xx() macro converts data from big endian order to host
639517SBill.Taylor@Sun.COM  * order. This is used when data is read from CQs or QPs. Due to the
649517SBill.Taylor@Sun.COM  * self-inversing nature of byte swapping routines BE_xx macros have
659517SBill.Taylor@Sun.COM  * the effect of converting big endian to host byte order which can
669517SBill.Taylor@Sun.COM  * be big endian or little endian.
679517SBill.Taylor@Sun.COM  * eg.	On i386 BE_64(val64_be) = val64_le
689517SBill.Taylor@Sun.COM  *	On sparc BE_64(val64_be) = val64_be.
699517SBill.Taylor@Sun.COM  *
709517SBill.Taylor@Sun.COM  * Tavor is a big endian device, all the buffer manipulation for
719517SBill.Taylor@Sun.COM  * QPs, CQs and the doorbell page needs to be aware of this.
729517SBill.Taylor@Sun.COM  *
739517SBill.Taylor@Sun.COM  */
749517SBill.Taylor@Sun.COM #if defined(__amd64) || defined(__i386)
759517SBill.Taylor@Sun.COM /* use inline code to get performance of bswap* instructions */
769517SBill.Taylor@Sun.COM 
779517SBill.Taylor@Sun.COM #if !defined(__lint) && defined(__GNUC__)
789517SBill.Taylor@Sun.COM /* use GNU inline */
799517SBill.Taylor@Sun.COM 	/* works for both i386 and amd64 */
dapls_byteswap32(uint32_t value)809517SBill.Taylor@Sun.COM 	extern __inline__ uint32_t dapls_byteswap32(uint32_t value)
819517SBill.Taylor@Sun.COM 	{
829517SBill.Taylor@Sun.COM 		__asm__("bswap %0" : "+r" (value));
839517SBill.Taylor@Sun.COM 		return (value);
849517SBill.Taylor@Sun.COM 	}
859517SBill.Taylor@Sun.COM 
869517SBill.Taylor@Sun.COM #if defined(__amd64)
879517SBill.Taylor@Sun.COM 
dapls_byteswap64(uint64_t value)889517SBill.Taylor@Sun.COM 	extern __inline__ uint64_t dapls_byteswap64(uint64_t value)
899517SBill.Taylor@Sun.COM 	{
909517SBill.Taylor@Sun.COM 		__asm__("bswapq %0" : "+r" (value));
919517SBill.Taylor@Sun.COM 		return (value);
929517SBill.Taylor@Sun.COM 	}
939517SBill.Taylor@Sun.COM 
949517SBill.Taylor@Sun.COM #else /* defined(__i386) */
959517SBill.Taylor@Sun.COM 
dapls_byteswap64(uint64_t value)969517SBill.Taylor@Sun.COM 	extern __inline__ uint64_t dapls_byteswap64(uint64_t value)
979517SBill.Taylor@Sun.COM 	{
989517SBill.Taylor@Sun.COM 		union {
999517SBill.Taylor@Sun.COM 			struct { uint32_t a, b; } s;
1009517SBill.Taylor@Sun.COM 			uint64_t u;
1019517SBill.Taylor@Sun.COM 		} v;
1029517SBill.Taylor@Sun.COM 		v.u = value;
1039517SBill.Taylor@Sun.COM 		__asm__("bswap %0 ; bswap %1 ; xchgl %0,%1"
1049517SBill.Taylor@Sun.COM 		    : "=r" (v.s.a), "=r" (v.s.b)
1059517SBill.Taylor@Sun.COM 		    : "0" (v.s.a), "1" (v.s.b));
1069517SBill.Taylor@Sun.COM 		return (v.u);
1079517SBill.Taylor@Sun.COM 	}
1089517SBill.Taylor@Sun.COM #endif
1099517SBill.Taylor@Sun.COM 
1109517SBill.Taylor@Sun.COM #else	/* !defined(__lint) && defined(__GNUC__) */
1119517SBill.Taylor@Sun.COM /* use SUN inline with .il files */
1129517SBill.Taylor@Sun.COM uint64_t dapls_byteswap64(uint64_t);
1139517SBill.Taylor@Sun.COM uint32_t dapls_byteswap32(uint32_t);
1149517SBill.Taylor@Sun.COM 
1159517SBill.Taylor@Sun.COM #endif	/* !defined(__lint) && defined(__GNUC__) */
1169517SBill.Taylor@Sun.COM 
1179517SBill.Taylor@Sun.COM #define	HTOBE_64(x)	dapls_byteswap64(x)
1189517SBill.Taylor@Sun.COM #define	HTOBE_32(x)	dapls_byteswap32(x)
1199517SBill.Taylor@Sun.COM #define	BETOH_64(x)	dapls_byteswap64(x)
1209517SBill.Taylor@Sun.COM #define	BETOH_32(x)	dapls_byteswap32(x)
1219517SBill.Taylor@Sun.COM 
1229517SBill.Taylor@Sun.COM #else	/* defined(__amd64) || defined(__i386) */
1239517SBill.Taylor@Sun.COM 
1249517SBill.Taylor@Sun.COM /* These are identity (do nothing) on big-endian machines. */
1259517SBill.Taylor@Sun.COM 
1269517SBill.Taylor@Sun.COM #define	HTOBE_64(x)	BE_64((x))
1279517SBill.Taylor@Sun.COM #define	HTOBE_32(x)	BE_32((x))
1289517SBill.Taylor@Sun.COM #define	BETOH_64(x)	BE_64((x))
1299517SBill.Taylor@Sun.COM #define	BETOH_32(x)	BE_32((x))
1309517SBill.Taylor@Sun.COM 
1319517SBill.Taylor@Sun.COM #endif	/* defined(__amd64) || defined(__i386) */
1329517SBill.Taylor@Sun.COM 
1339517SBill.Taylor@Sun.COM /*
1349517SBill.Taylor@Sun.COM  *
1359517SBill.Taylor@Sun.COM  * Enumerations
1369517SBill.Taylor@Sun.COM  *
1379517SBill.Taylor@Sun.COM  */
1389517SBill.Taylor@Sun.COM 
1399517SBill.Taylor@Sun.COM typedef enum dapl_magic {
1409517SBill.Taylor@Sun.COM 	/* magic number values for verification & debug */
1419517SBill.Taylor@Sun.COM 	DAPL_MAGIC_IA = 0x1afeF00d,
1429517SBill.Taylor@Sun.COM 	DAPL_MAGIC_EVD = 0x2eedFace,
1439517SBill.Taylor@Sun.COM 	DAPL_MAGIC_EP = 0x3eadBabe,
1449517SBill.Taylor@Sun.COM 	DAPL_MAGIC_LMR = 0x4eefCafe,
1459517SBill.Taylor@Sun.COM 	DAPL_MAGIC_RMR = 0x5BadCafe,
1469517SBill.Taylor@Sun.COM 	DAPL_MAGIC_PZ = 0x6eafBeef,
1479517SBill.Taylor@Sun.COM 	DAPL_MAGIC_PSP = 0x7eadeD0c,
1489517SBill.Taylor@Sun.COM 	DAPL_MAGIC_RSP = 0x1ab4Feed,
1499517SBill.Taylor@Sun.COM 	DAPL_MAGIC_CR = 0x2e12Cee1,
1509517SBill.Taylor@Sun.COM 	DAPL_MAGIC_CR_DESTROYED = 0x312bDead,
1519517SBill.Taylor@Sun.COM 	DAPL_MAGIC_CNO = 0x4eadF00d,
1529517SBill.Taylor@Sun.COM 	DAPL_MAGIC_EP_EXIT = 0x5abeDead,
1539517SBill.Taylor@Sun.COM 	DAPL_MAGIC_SRQ = 0x5eedFace,
1549517SBill.Taylor@Sun.COM 	DAPL_MAGIC_INVALID = 0x6FFFFFFF
1559517SBill.Taylor@Sun.COM } DAPL_MAGIC;
1569517SBill.Taylor@Sun.COM 
1579517SBill.Taylor@Sun.COM typedef enum dapl_evd_state {
1589517SBill.Taylor@Sun.COM 	DAPL_EVD_STATE_TERMINAL,
1599517SBill.Taylor@Sun.COM 	DAPL_EVD_STATE_INITIAL,
1609517SBill.Taylor@Sun.COM 	DAPL_EVD_STATE_OPEN,
1619517SBill.Taylor@Sun.COM 	DAPL_EVD_STATE_WAITED,
1629517SBill.Taylor@Sun.COM 	DAPL_EVD_STATE_DEAD = 0xDEAD
1639517SBill.Taylor@Sun.COM } DAPL_EVD_STATE;
1649517SBill.Taylor@Sun.COM 
1659517SBill.Taylor@Sun.COM typedef enum dapl_evd_completion {
1669517SBill.Taylor@Sun.COM 	DAPL_EVD_STATE_INIT,
1679517SBill.Taylor@Sun.COM 	DAPL_EVD_STATE_SOLICITED_WAIT,
1689517SBill.Taylor@Sun.COM 	DAPL_EVD_STATE_THRESHOLD,
1699517SBill.Taylor@Sun.COM 	DAPL_EVD_STATE_UNSIGNALLED
1709517SBill.Taylor@Sun.COM } DAPL_EVD_COMPLETION;
1719517SBill.Taylor@Sun.COM 
1729517SBill.Taylor@Sun.COM typedef enum dapl_cno_state {
1739517SBill.Taylor@Sun.COM 	DAPL_CNO_STATE_UNTRIGGERED,
1749517SBill.Taylor@Sun.COM 	DAPL_CNO_STATE_TRIGGERED,
1759517SBill.Taylor@Sun.COM 	DAPL_CNO_STATE_DEAD = 0x7eadFeed
1769517SBill.Taylor@Sun.COM } DAPL_CNO_STATE;
1779517SBill.Taylor@Sun.COM 
1789517SBill.Taylor@Sun.COM typedef enum dapl_qp_state {
1799517SBill.Taylor@Sun.COM 	DAPL_QP_STATE_UNCONNECTED,
1809517SBill.Taylor@Sun.COM 	DAPL_QP_STATE_RESERVED,
1819517SBill.Taylor@Sun.COM 	DAPL_QP_STATE_PASSIVE_CONNECTION_PENDING,
1829517SBill.Taylor@Sun.COM 	DAPL_QP_STATE_ACTIVE_CONNECTION_PENDING,
1839517SBill.Taylor@Sun.COM 	DAPL_QP_STATE_TENTATIVE_CONNECTION_PENDING,
1849517SBill.Taylor@Sun.COM 	DAPL_QP_STATE_CONNECTED,
1859517SBill.Taylor@Sun.COM 	DAPL_QP_STATE_DISCONNECT_PENDING,
1869517SBill.Taylor@Sun.COM 	DAPL_QP_STATE_ERROR,
1879517SBill.Taylor@Sun.COM 	DAPL_QP_STATE_NOT_REUSABLE,
1889517SBill.Taylor@Sun.COM 	DAPL_QP_STATE_FREE
1899517SBill.Taylor@Sun.COM } DAPL_QP_STATE;
1909517SBill.Taylor@Sun.COM 
1919517SBill.Taylor@Sun.COM 
1929517SBill.Taylor@Sun.COM /*
1939517SBill.Taylor@Sun.COM  *
1949517SBill.Taylor@Sun.COM  * Constants
1959517SBill.Taylor@Sun.COM  *
1969517SBill.Taylor@Sun.COM  */
1979517SBill.Taylor@Sun.COM 
1989517SBill.Taylor@Sun.COM /*
1999517SBill.Taylor@Sun.COM  * number of HCAs allowed
2009517SBill.Taylor@Sun.COM  */
2019517SBill.Taylor@Sun.COM #define	DAPL_MAX_HCA_COUNT		4
2029517SBill.Taylor@Sun.COM 
2039517SBill.Taylor@Sun.COM /*
2049517SBill.Taylor@Sun.COM  * Configures the RMR bind evd restriction
2059517SBill.Taylor@Sun.COM  */
2069517SBill.Taylor@Sun.COM #define	DAPL_RMR_BIND_EVD_RESTRICTION	DAT_RMR_EVD_SAME_AS_REQUEST_EVD
2079517SBill.Taylor@Sun.COM 
2089517SBill.Taylor@Sun.COM /*
2099517SBill.Taylor@Sun.COM  * special qp_state indicating the EP does not have a QP attached yet
2109517SBill.Taylor@Sun.COM  */
2119517SBill.Taylor@Sun.COM #define	DAPL_QP_STATE_UNATTACHED	0xFFF0
2129517SBill.Taylor@Sun.COM 
2139517SBill.Taylor@Sun.COM /*
2149517SBill.Taylor@Sun.COM  *
2159517SBill.Taylor@Sun.COM  * Macros
2169517SBill.Taylor@Sun.COM  *
2179517SBill.Taylor@Sun.COM  */
2189517SBill.Taylor@Sun.COM 
2199517SBill.Taylor@Sun.COM /*
2209517SBill.Taylor@Sun.COM  * Simple macro to verify a handle is bad.
2219517SBill.Taylor@Sun.COM  * - pointer's magic number is wrong
2229517SBill.Taylor@Sun.COM  * - both pointer is NULL and not word aligned checked by the registry
2239517SBill.Taylor@Sun.COM  */
2249517SBill.Taylor@Sun.COM #define	DAPL_BAD_HANDLE(h, magicNum) (				\
2259517SBill.Taylor@Sun.COM 	    (((DAPL_HEADER *)(h))->magic != (magicNum)))
2269517SBill.Taylor@Sun.COM 
2279517SBill.Taylor@Sun.COM #define	DAPL_MIN(a, b)		(((a) < (b)) ? (a) : (b))
2289517SBill.Taylor@Sun.COM #define	DAPL_MAX(a, b)		(((a) > (b)) ? (a) : (b))
2299517SBill.Taylor@Sun.COM 
2309517SBill.Taylor@Sun.COM #define	DAT_ERROR(Type, SubType) \
2319517SBill.Taylor@Sun.COM 	((DAT_RETURN)(DAT_CLASS_ERROR | (Type) | (SubType)))
2329517SBill.Taylor@Sun.COM 
2339517SBill.Taylor@Sun.COM /*
2349517SBill.Taylor@Sun.COM  *
2359517SBill.Taylor@Sun.COM  * Typedefs
2369517SBill.Taylor@Sun.COM  *
2379517SBill.Taylor@Sun.COM  */
2389517SBill.Taylor@Sun.COM 
2399517SBill.Taylor@Sun.COM typedef	struct dapl_llist_entry DAPL_LLIST_ENTRY;
2409517SBill.Taylor@Sun.COM typedef	DAPL_LLIST_ENTRY *DAPL_LLIST_HEAD;
2419517SBill.Taylor@Sun.COM typedef	struct dapl_ring_buffer DAPL_RING_BUFFER;
2429517SBill.Taylor@Sun.COM typedef	struct dapl_cookie_buffer DAPL_COOKIE_BUFFER;
2439517SBill.Taylor@Sun.COM 
2449517SBill.Taylor@Sun.COM typedef	struct dapl_hash_table DAPL_HASH_TABLE;
2459517SBill.Taylor@Sun.COM typedef	struct dapl_hash_table *DAPL_HASH_TABLEP;
2469517SBill.Taylor@Sun.COM typedef	DAT_UINT64 DAPL_HASH_KEY;
2479517SBill.Taylor@Sun.COM typedef	void *DAPL_HASH_DATA;
2489517SBill.Taylor@Sun.COM 
2499517SBill.Taylor@Sun.COM typedef	struct dapl_hca DAPL_HCA;
2509517SBill.Taylor@Sun.COM 
2519517SBill.Taylor@Sun.COM typedef	struct dapl_header DAPL_HEADER;
2529517SBill.Taylor@Sun.COM 
2539517SBill.Taylor@Sun.COM typedef	struct dapl_ia DAPL_IA;
2549517SBill.Taylor@Sun.COM typedef	struct dapl_cno DAPL_CNO;
2559517SBill.Taylor@Sun.COM typedef	struct dapl_evd DAPL_EVD;
2569517SBill.Taylor@Sun.COM typedef	struct dapl_ep DAPL_EP;
2579517SBill.Taylor@Sun.COM typedef	struct dapl_pz DAPL_PZ;
2589517SBill.Taylor@Sun.COM typedef	struct dapl_lmr DAPL_LMR;
2599517SBill.Taylor@Sun.COM typedef	struct dapl_rmr DAPL_RMR;
2609517SBill.Taylor@Sun.COM typedef	struct dapl_sp DAPL_SP;
2619517SBill.Taylor@Sun.COM typedef	struct dapl_cr DAPL_CR;
2629517SBill.Taylor@Sun.COM typedef struct dapl_srq DAPL_SRQ;
2639517SBill.Taylor@Sun.COM 
2649517SBill.Taylor@Sun.COM typedef	struct dapl_cookie DAPL_COOKIE;
2659517SBill.Taylor@Sun.COM typedef	struct dapl_dto_cookie DAPL_DTO_COOKIE;
2669517SBill.Taylor@Sun.COM typedef	struct dapl_rmr_cookie DAPL_RMR_COOKIE;
2679517SBill.Taylor@Sun.COM 
2689517SBill.Taylor@Sun.COM typedef	void (*DAPL_CONNECTION_STATE_HANDLER)(IN DAPL_EP *,
2699517SBill.Taylor@Sun.COM 	IN ib_cm_events_t,
2709517SBill.Taylor@Sun.COM 	IN const void *,
2719517SBill.Taylor@Sun.COM 	OUT DAT_EVENT *);
2729517SBill.Taylor@Sun.COM 
2739517SBill.Taylor@Sun.COM 
2749517SBill.Taylor@Sun.COM /*
2759517SBill.Taylor@Sun.COM  *
2769517SBill.Taylor@Sun.COM  * Structures
2779517SBill.Taylor@Sun.COM  *
2789517SBill.Taylor@Sun.COM  */
2799517SBill.Taylor@Sun.COM 
2809517SBill.Taylor@Sun.COM struct dapl_llist_entry {
2819517SBill.Taylor@Sun.COM 	struct dapl_llist_entry *flink;
2829517SBill.Taylor@Sun.COM 	struct dapl_llist_entry *blink;
2839517SBill.Taylor@Sun.COM 	void *data;
2849517SBill.Taylor@Sun.COM 	DAPL_LLIST_HEAD *list_head;	/* for consistency checking */
2859517SBill.Taylor@Sun.COM };
2869517SBill.Taylor@Sun.COM 
2879517SBill.Taylor@Sun.COM struct dapl_ring_buffer {
2889517SBill.Taylor@Sun.COM 	void **base;		/* base of element array */
2899517SBill.Taylor@Sun.COM 	DAT_COUNT lim;		/* mask, number of entries - 1 */
2909517SBill.Taylor@Sun.COM 	DAPL_ATOMIC head;	/* head pointer index */
2919517SBill.Taylor@Sun.COM 	DAPL_ATOMIC tail;	/* tail pointer index */
2929517SBill.Taylor@Sun.COM 	DAPL_OS_LOCK lock;	/* lock */
2939517SBill.Taylor@Sun.COM };
2949517SBill.Taylor@Sun.COM 
2959517SBill.Taylor@Sun.COM struct dapl_cookie_buffer {
2969517SBill.Taylor@Sun.COM 	DAPL_COOKIE *pool;
2979517SBill.Taylor@Sun.COM 	DAT_COUNT pool_size;
2989517SBill.Taylor@Sun.COM 	DAPL_ATOMIC head;
2999517SBill.Taylor@Sun.COM 	DAPL_ATOMIC tail;
3009517SBill.Taylor@Sun.COM };
3019517SBill.Taylor@Sun.COM 
3029517SBill.Taylor@Sun.COM typedef DAT_RETURN (*DAPL_POST_SEND)(DAPL_EP *, ibt_send_wr_t *, boolean_t);
3039517SBill.Taylor@Sun.COM typedef DAT_RETURN (*DAPL_POST_RECV)(DAPL_EP *, ibt_recv_wr_t *, boolean_t);
3049517SBill.Taylor@Sun.COM typedef DAT_RETURN (*DAPL_POST_SRQ)(DAPL_SRQ *, ibt_recv_wr_t *, boolean_t);
3059517SBill.Taylor@Sun.COM typedef void (*DAPL_CQ_PEEK)(ib_cq_handle_t, int *);
3069517SBill.Taylor@Sun.COM typedef DAT_RETURN
3079517SBill.Taylor@Sun.COM 	(*DAPL_CQ_POLL)(ib_cq_handle_t, ibt_wc_t *, uint_t, uint_t *);
3089517SBill.Taylor@Sun.COM typedef DAT_RETURN (*DAPL_CQ_POLL_ONE)(ib_cq_handle_t, ibt_wc_t *);
3099517SBill.Taylor@Sun.COM typedef DAT_RETURN (*DAPL_CQ_NOTIFY)(ib_cq_handle_t, int, uint32_t);
3109517SBill.Taylor@Sun.COM typedef void (*DAPL_SRQ_FLUSH)(ib_qp_handle_t);
3119517SBill.Taylor@Sun.COM typedef void (*DAPL_QP_INIT)(ib_qp_handle_t);
3129517SBill.Taylor@Sun.COM typedef void (*DAPL_CQ_INIT)(ib_cq_handle_t);
3139517SBill.Taylor@Sun.COM typedef void (*DAPL_SRQ_INIT)(ib_srq_handle_t);
3149517SBill.Taylor@Sun.COM 
3159517SBill.Taylor@Sun.COM struct dapl_hca {
3169517SBill.Taylor@Sun.COM 	DAPL_OS_LOCK lock;
3179517SBill.Taylor@Sun.COM 	DAPL_LLIST_HEAD ia_list_head;
3189517SBill.Taylor@Sun.COM 	DAPL_EVD *async_evd;
3199517SBill.Taylor@Sun.COM 	DAPL_EVD *async_error_evd;
3209517SBill.Taylor@Sun.COM 	DAT_SOCK_ADDR6 hca_address;	/* local address of HCA */
3219517SBill.Taylor@Sun.COM 	/* Values specific to IB OS API */
3229517SBill.Taylor@Sun.COM 	IB_HCA_NAME name;
3239517SBill.Taylor@Sun.COM 	ib_hca_handle_t ib_hca_handle;
3249517SBill.Taylor@Sun.COM 	DAPL_ATOMIC handle_ref_count;	/* count of ia_opens on handle */
3259517SBill.Taylor@Sun.COM 	ib_uint32_t port_num;	/* number of physical port */
3269517SBill.Taylor@Sun.COM 	ib_uint32_t partition_max;
3279517SBill.Taylor@Sun.COM 	ib_uint32_t partition_key;
3289517SBill.Taylor@Sun.COM 	ib_uint32_t tavor_idx;
3299517SBill.Taylor@Sun.COM 	ib_guid_t node_GUID;
3309517SBill.Taylor@Sun.COM 	ib_lid_t lid;
3319517SBill.Taylor@Sun.COM 	int max_inline_send;
3329517SBill.Taylor@Sun.COM 	/* CQ support thread */
3339517SBill.Taylor@Sun.COM 	ib_cqd_handle_t ib_cqd_handle;		/* cq domain handle */
3349517SBill.Taylor@Sun.COM 	ib_cq_handle_t null_ib_cq_handle;	/* CQ handle with 0 entries */
3359517SBill.Taylor@Sun.COM 	/* Memory Subsystem Support */
3369517SBill.Taylor@Sun.COM 	DAPL_HASH_TABLE *lmr_hash_table;
3379517SBill.Taylor@Sun.COM 	/* Limits & useful HCA attributes */
3389517SBill.Taylor@Sun.COM 	DAT_IA_ATTR ia_attr;
3399517SBill.Taylor@Sun.COM 	struct dapl_hca *hca_next;
3409517SBill.Taylor@Sun.COM 	DAPL_POST_SEND post_send;
3419517SBill.Taylor@Sun.COM 	DAPL_POST_RECV post_recv;
3429517SBill.Taylor@Sun.COM 	DAPL_POST_SRQ post_srq;
3439517SBill.Taylor@Sun.COM 	DAPL_CQ_PEEK cq_peek;
3449517SBill.Taylor@Sun.COM 	DAPL_CQ_POLL cq_poll;
3459517SBill.Taylor@Sun.COM 	DAPL_CQ_POLL_ONE cq_poll_one;
3469517SBill.Taylor@Sun.COM 	DAPL_CQ_NOTIFY cq_notify;
3479517SBill.Taylor@Sun.COM 	DAPL_SRQ_FLUSH srq_flush;
3489517SBill.Taylor@Sun.COM 	DAPL_QP_INIT qp_init;
3499517SBill.Taylor@Sun.COM 	DAPL_CQ_INIT cq_init;
3509517SBill.Taylor@Sun.COM 	DAPL_SRQ_INIT srq_init;
3519517SBill.Taylor@Sun.COM 	int hermon_resize_cq;
3529517SBill.Taylor@Sun.COM };
3539517SBill.Taylor@Sun.COM 
3549517SBill.Taylor@Sun.COM #define	DAPL_SEND(x)	(x->header.owner_ia->hca_ptr->post_send)
3559517SBill.Taylor@Sun.COM #define	DAPL_RECV(x)	(x->header.owner_ia->hca_ptr->post_recv)
3569517SBill.Taylor@Sun.COM #define	DAPL_SRECV(x)	(x->header.owner_ia->hca_ptr->post_srq)
3579517SBill.Taylor@Sun.COM #define	DAPL_PEEK(x)	(x->header.owner_ia->hca_ptr->cq_peek)
3589517SBill.Taylor@Sun.COM #define	DAPL_POLL(x)	(x->header.owner_ia->hca_ptr->cq_poll)
3599517SBill.Taylor@Sun.COM #define	DAPL_POLL1(x)	(x->header.owner_ia->hca_ptr->cq_poll_one)
3609517SBill.Taylor@Sun.COM #define	DAPL_NOTIFY(x)	(x->header.owner_ia->hca_ptr->cq_notify)
3619517SBill.Taylor@Sun.COM #define	DAPL_FLUSH(x)	(x->header.owner_ia->hca_ptr->srq_flush)
3629517SBill.Taylor@Sun.COM #define	DAPL_INIT_QP(x)	(x->hca_ptr->qp_init)
3639517SBill.Taylor@Sun.COM #define	DAPL_INIT_CQ(x)	(x->hca_ptr->cq_init)
3649517SBill.Taylor@Sun.COM #define	DAPL_INIT_SRQ(x) (x->hca_ptr->srq_init)
3659517SBill.Taylor@Sun.COM 
3669517SBill.Taylor@Sun.COM extern void dapls_init_funcs_tavor(DAPL_HCA *);
3679517SBill.Taylor@Sun.COM extern void dapls_init_funcs_arbel(DAPL_HCA *);
3689517SBill.Taylor@Sun.COM extern void dapls_init_funcs_hermon(DAPL_HCA *);
3699517SBill.Taylor@Sun.COM 
3709517SBill.Taylor@Sun.COM /* DAPL Objects always have the following header */
3719517SBill.Taylor@Sun.COM struct dapl_header {
3729517SBill.Taylor@Sun.COM 	DAT_PROVIDER *provider;		/* required by DAT - must be first */
3739517SBill.Taylor@Sun.COM 	DAPL_MAGIC magic;		/* magic number for verification */
3749517SBill.Taylor@Sun.COM 	DAT_HANDLE_TYPE handle_type;	/* struct type */
3759517SBill.Taylor@Sun.COM 	DAPL_IA *owner_ia;		/* ia which owns this struct */
3769517SBill.Taylor@Sun.COM 	DAPL_LLIST_ENTRY ia_list_entry;	/* link entry on ia struct */
3779517SBill.Taylor@Sun.COM 	DAT_CONTEXT user_context;	/* user context - opaque to DAPL */
3789517SBill.Taylor@Sun.COM 	DAPL_OS_LOCK lock;		/* lock - in header for easier macros */
3799517SBill.Taylor@Sun.COM };
3809517SBill.Taylor@Sun.COM 
3819517SBill.Taylor@Sun.COM enum DAPL_IA_FLAGS {
3829517SBill.Taylor@Sun.COM 	DAPL_DISABLE_RO	= 1		/* Disable relaxed ordering */
3839517SBill.Taylor@Sun.COM };
3849517SBill.Taylor@Sun.COM 
3859517SBill.Taylor@Sun.COM /* DAPL_IA maps to DAT_IA_HANDLE */
3869517SBill.Taylor@Sun.COM struct dapl_ia {
3879517SBill.Taylor@Sun.COM 	DAPL_HEADER header;
3889517SBill.Taylor@Sun.COM 	DAPL_HCA *hca_ptr;
3899517SBill.Taylor@Sun.COM 	DAPL_EVD *async_error_evd;
3909517SBill.Taylor@Sun.COM 	DAT_BOOLEAN cleanup_async_error_evd;
3919517SBill.Taylor@Sun.COM 
3929517SBill.Taylor@Sun.COM 	DAPL_LLIST_ENTRY hca_ia_list_entry;	/* HCAs list of IAs */
3939517SBill.Taylor@Sun.COM 	DAPL_LLIST_HEAD ep_list_head;		/* EP queue */
3949517SBill.Taylor@Sun.COM 	DAPL_LLIST_HEAD lmr_list_head;		/* LMR queue */
3959517SBill.Taylor@Sun.COM 	DAPL_LLIST_HEAD rmr_list_head;		/* RMR queue */
3969517SBill.Taylor@Sun.COM 	DAPL_LLIST_HEAD pz_list_head;		/* PZ queue */
3979517SBill.Taylor@Sun.COM 	DAPL_LLIST_HEAD evd_list_head;		/* EVD queue */
3989517SBill.Taylor@Sun.COM 	DAPL_LLIST_HEAD cno_list_head;		/* CNO queue */
3999517SBill.Taylor@Sun.COM 	DAPL_LLIST_HEAD psp_list_head;		/* PSP queue */
4009517SBill.Taylor@Sun.COM 	DAPL_LLIST_HEAD rsp_list_head;		/* RSP queue */
4019517SBill.Taylor@Sun.COM 	DAPL_LLIST_HEAD srq_list_head;		/* SRQ queue */
4029517SBill.Taylor@Sun.COM 
4039517SBill.Taylor@Sun.COM 	enum DAPL_IA_FLAGS dapl_flags;		/* state flags, see above */
4049517SBill.Taylor@Sun.COM };
4059517SBill.Taylor@Sun.COM 
4069517SBill.Taylor@Sun.COM /* DAPL_CNO maps to DAT_CNO_HANDLE */
4079517SBill.Taylor@Sun.COM struct dapl_cno {
4089517SBill.Taylor@Sun.COM 	DAPL_HEADER header;
4099517SBill.Taylor@Sun.COM 
4109517SBill.Taylor@Sun.COM 	/* A CNO cannot be freed while it is referenced elsewhere.  */
4119517SBill.Taylor@Sun.COM 	DAPL_ATOMIC cno_ref_count;
4129517SBill.Taylor@Sun.COM 	DAPL_CNO_STATE cno_state;
4139517SBill.Taylor@Sun.COM 
4149517SBill.Taylor@Sun.COM 	DAT_COUNT cno_waiters;
4159517SBill.Taylor@Sun.COM 	DAPL_EVD *cno_evd_triggered;
4169517SBill.Taylor@Sun.COM 	DAT_OS_WAIT_PROXY_AGENT cno_wait_agent;
4179517SBill.Taylor@Sun.COM 
4189517SBill.Taylor@Sun.COM 	DAPL_OS_WAIT_OBJECT cno_wait_object;
4199517SBill.Taylor@Sun.COM 	DAPL_LLIST_HEAD evd_list_head;
4209517SBill.Taylor@Sun.COM 	ib_cno_handle_t ib_cno_handle;
4219517SBill.Taylor@Sun.COM };
4229517SBill.Taylor@Sun.COM 
4239517SBill.Taylor@Sun.COM /* DAPL_EVD maps to DAT_EVD_HANDLE */
4249517SBill.Taylor@Sun.COM struct dapl_evd {
4259517SBill.Taylor@Sun.COM 	DAPL_HEADER header;
4269517SBill.Taylor@Sun.COM 
4279517SBill.Taylor@Sun.COM 	DAPL_EVD_STATE evd_state;
4289517SBill.Taylor@Sun.COM 	DAT_EVD_FLAGS evd_flags;
4299517SBill.Taylor@Sun.COM 	DAT_BOOLEAN evd_enabled;	/* For attached CNO.  */
4309517SBill.Taylor@Sun.COM 	DAT_BOOLEAN evd_waitable;	/* EVD state.  */
4319517SBill.Taylor@Sun.COM 
4329517SBill.Taylor@Sun.COM 	/* Derived from evd_flags; see dapls_evd_internal_create.  */
4339517SBill.Taylor@Sun.COM 	DAT_BOOLEAN evd_producer_locking_needed;
4349517SBill.Taylor@Sun.COM 
4359517SBill.Taylor@Sun.COM 	/* Every EVD has a CQ unless it is a SOFTWARE_EVENT only EVD */
4369517SBill.Taylor@Sun.COM 	ib_cq_handle_t ib_cq_handle;
4379517SBill.Taylor@Sun.COM 
4389517SBill.Taylor@Sun.COM 	/*
4399517SBill.Taylor@Sun.COM 	 * Mellanox Specific completion handle for
4409517SBill.Taylor@Sun.COM 	 * registration/de-registration
4419517SBill.Taylor@Sun.COM 	 */
4429517SBill.Taylor@Sun.COM 	ib_comp_handle_t ib_comp_handle;
4439517SBill.Taylor@Sun.COM 
4449517SBill.Taylor@Sun.COM 	/*
4459517SBill.Taylor@Sun.COM 	 * An Event Dispatcher cannot be freed while
4469517SBill.Taylor@Sun.COM 	 * it is referenced elsewhere.
4479517SBill.Taylor@Sun.COM 	 */
4489517SBill.Taylor@Sun.COM 	DAPL_ATOMIC evd_ref_count;
4499517SBill.Taylor@Sun.COM 
4509517SBill.Taylor@Sun.COM 	/* Set if there has been a catastrophic overflow */
4519517SBill.Taylor@Sun.COM 	DAT_BOOLEAN catastrophic_overflow;
4529517SBill.Taylor@Sun.COM 
4539517SBill.Taylor@Sun.COM 	/* the actual events */
4549517SBill.Taylor@Sun.COM 	DAT_COUNT qlen;
4559517SBill.Taylor@Sun.COM 	DAT_EVENT *events;
4569517SBill.Taylor@Sun.COM 	DAPL_RING_BUFFER free_event_queue;
4579517SBill.Taylor@Sun.COM 	DAPL_RING_BUFFER pending_event_queue;
4589517SBill.Taylor@Sun.COM 
4599517SBill.Taylor@Sun.COM 	/*
4609517SBill.Taylor@Sun.COM 	 * CQ Completions are not placed into 'deferred_events'
4619517SBill.Taylor@Sun.COM 	 * rather they are simply left on the Completion Queue
4629517SBill.Taylor@Sun.COM 	 * and the fact that there was a notification is flagged.
4639517SBill.Taylor@Sun.COM 	 */
4649517SBill.Taylor@Sun.COM 	DAT_BOOLEAN cq_notified;
4659517SBill.Taylor@Sun.COM 	DAPL_OS_TICKS cq_notified_when;
4669517SBill.Taylor@Sun.COM 
4679517SBill.Taylor@Sun.COM 	DAT_COUNT cno_active_count;
4689517SBill.Taylor@Sun.COM 	DAPL_CNO *cno_ptr;
4699517SBill.Taylor@Sun.COM 
4709517SBill.Taylor@Sun.COM 	DAPL_OS_WAIT_OBJECT wait_object;
4719517SBill.Taylor@Sun.COM 	DAT_COUNT threshold;
4729517SBill.Taylor@Sun.COM 	DAPL_LLIST_ENTRY cno_list_entry;
4739517SBill.Taylor@Sun.COM 	DAPL_EVD_COMPLETION	completion_type;
4749517SBill.Taylor@Sun.COM };
4759517SBill.Taylor@Sun.COM 
4769517SBill.Taylor@Sun.COM /* DAPL_EP maps to DAT_EP_HANDLE */
4779517SBill.Taylor@Sun.COM struct dapl_ep {
4789517SBill.Taylor@Sun.COM 	DAPL_HEADER header;
4799517SBill.Taylor@Sun.COM 	/* What the DAT Consumer asked for */
4809517SBill.Taylor@Sun.COM 	DAT_EP_PARAM param;
4819517SBill.Taylor@Sun.COM 
4829517SBill.Taylor@Sun.COM 	/* The RC Queue Pair (IBM OS API) */
4839517SBill.Taylor@Sun.COM 	ib_qp_handle_t qp_handle;
4849517SBill.Taylor@Sun.COM 	unsigned int qpn;		/* qp number */
4859517SBill.Taylor@Sun.COM 	ib_qp_state_t qp_state;
4869517SBill.Taylor@Sun.COM 
4879517SBill.Taylor@Sun.COM 	/* communications manager handle (IBM OS API) */
4889517SBill.Taylor@Sun.COM 	ib_cm_handle_t cm_handle;
4899517SBill.Taylor@Sun.COM 	/*
4909517SBill.Taylor@Sun.COM 	 * store the remote IA address here, reference from the param
4919517SBill.Taylor@Sun.COM 	 * struct which only has a pointer, no storage
4929517SBill.Taylor@Sun.COM 	 */
4939517SBill.Taylor@Sun.COM 	DAT_SOCK_ADDR6 remote_ia_address;
4949517SBill.Taylor@Sun.COM 
4959517SBill.Taylor@Sun.COM 	/* For passive connections we maintain a back pointer to the CR */
4969517SBill.Taylor@Sun.COM 	void *cr_ptr;
4979517SBill.Taylor@Sun.COM 
4989517SBill.Taylor@Sun.COM 	/* private data container */
4999517SBill.Taylor@Sun.COM 	unsigned char private_data[DAPL_MAX_PRIVATE_DATA_SIZE];
5009517SBill.Taylor@Sun.COM 
5019517SBill.Taylor@Sun.COM 	/* DTO data */
5029517SBill.Taylor@Sun.COM 	DAPL_ATOMIC req_count;
5039517SBill.Taylor@Sun.COM 	DAPL_ATOMIC recv_count;
5049517SBill.Taylor@Sun.COM 
5059517SBill.Taylor@Sun.COM 	DAPL_COOKIE_BUFFER req_buffer;
5069517SBill.Taylor@Sun.COM 	DAPL_COOKIE_BUFFER recv_buffer;
5079517SBill.Taylor@Sun.COM 
5089517SBill.Taylor@Sun.COM 	DAT_BOOLEAN		srq_attached;
5099517SBill.Taylor@Sun.COM };
5109517SBill.Taylor@Sun.COM 
5119517SBill.Taylor@Sun.COM /* DAPL_PZ maps to DAT_PZ_HANDLE */
5129517SBill.Taylor@Sun.COM struct dapl_pz {
5139517SBill.Taylor@Sun.COM 	DAPL_HEADER header;
5149517SBill.Taylor@Sun.COM 	ib_pd_handle_t pd_handle;
5159517SBill.Taylor@Sun.COM 	DAPL_ATOMIC pz_ref_count;
5169517SBill.Taylor@Sun.COM };
5179517SBill.Taylor@Sun.COM 
5189517SBill.Taylor@Sun.COM /* DAPL_LMR maps to DAT_LMR_HANDLE */
5199517SBill.Taylor@Sun.COM struct dapl_lmr {
5209517SBill.Taylor@Sun.COM 	DAPL_HEADER header;
5219517SBill.Taylor@Sun.COM 	DAT_LMR_PARAM param;
5229517SBill.Taylor@Sun.COM 	ib_mr_handle_t mr_handle;
5239517SBill.Taylor@Sun.COM 	DAPL_ATOMIC lmr_ref_count;
5249517SBill.Taylor@Sun.COM };
5259517SBill.Taylor@Sun.COM 
5269517SBill.Taylor@Sun.COM /* DAPL_RMR maps to DAT_RMR_HANDLE */
5279517SBill.Taylor@Sun.COM struct dapl_rmr {
5289517SBill.Taylor@Sun.COM 	DAPL_HEADER header;
5299517SBill.Taylor@Sun.COM 	DAT_RMR_PARAM param;
5309517SBill.Taylor@Sun.COM 	DAPL_EP *ep;
5319517SBill.Taylor@Sun.COM 	DAPL_PZ *pz;
5329517SBill.Taylor@Sun.COM 	DAPL_LMR *lmr;
5339517SBill.Taylor@Sun.COM 	ib_mw_handle_t mw_handle;
5349517SBill.Taylor@Sun.COM };
5359517SBill.Taylor@Sun.COM 
5369517SBill.Taylor@Sun.COM /* SP types, indicating the state and queue */
5379517SBill.Taylor@Sun.COM typedef enum dapl_sp_state {
5389517SBill.Taylor@Sun.COM 	DAPL_SP_STATE_FREE,
5399517SBill.Taylor@Sun.COM 	DAPL_SP_STATE_PSP_LISTENING,
5409517SBill.Taylor@Sun.COM 	DAPL_SP_STATE_PSP_PENDING,
5419517SBill.Taylor@Sun.COM 	DAPL_SP_STATE_RSP_LISTENING,
5429517SBill.Taylor@Sun.COM 	DAPL_SP_STATE_RSP_PENDING
5439517SBill.Taylor@Sun.COM } DAPL_SP_STATE;
5449517SBill.Taylor@Sun.COM 
5459517SBill.Taylor@Sun.COM /* DAPL_SP maps to DAT_PSP_HANDLE and DAT_RSP_HANDLE */
5469517SBill.Taylor@Sun.COM struct dapl_sp {
5479517SBill.Taylor@Sun.COM 	DAPL_HEADER header;
5489517SBill.Taylor@Sun.COM 	DAPL_SP_STATE state;	/* type and queue of the SP */
5499517SBill.Taylor@Sun.COM 
5509517SBill.Taylor@Sun.COM 	/* PSP/RSP PARAM fields */
5519517SBill.Taylor@Sun.COM 	DAT_IA_HANDLE ia_handle;
5529517SBill.Taylor@Sun.COM 	DAT_CONN_QUAL conn_qual;
5539517SBill.Taylor@Sun.COM 	DAT_EVD_HANDLE evd_handle;
5549517SBill.Taylor@Sun.COM 	DAT_PSP_FLAGS psp_flags;
5559517SBill.Taylor@Sun.COM 	DAT_EP_HANDLE ep_handle;
5569517SBill.Taylor@Sun.COM 
5579517SBill.Taylor@Sun.COM 	/* maintenence fields */
5589517SBill.Taylor@Sun.COM 	DAT_BOOLEAN listening;		/* PSP is registered & active */
5599517SBill.Taylor@Sun.COM 	ib_cm_srvc_handle_t cm_srvc_handle;	/* Used by Mellanox CM */
5609517SBill.Taylor@Sun.COM 	DAPL_LLIST_HEAD cr_list_head;	/* CR pending queue */
5619517SBill.Taylor@Sun.COM 	DAT_COUNT cr_list_count;	/* count of CRs on queue */
5629517SBill.Taylor@Sun.COM };
5639517SBill.Taylor@Sun.COM 
5649517SBill.Taylor@Sun.COM /* DAPL_CR maps to DAT_CR_HANDLE */
5659517SBill.Taylor@Sun.COM struct dapl_cr {
5669517SBill.Taylor@Sun.COM 	DAPL_HEADER header;
5679517SBill.Taylor@Sun.COM 
5689517SBill.Taylor@Sun.COM 	/*
5699517SBill.Taylor@Sun.COM 	 * for convenience the data is kept as a DAT_CR_PARAM.
5709517SBill.Taylor@Sun.COM 	 * however, the "local_endpoint" field is always NULL
5719517SBill.Taylor@Sun.COM 	 * so this wastes a pointer. This is probably ok to
5729517SBill.Taylor@Sun.COM 	 * simplify code, espedially dat_cr_query.
5739517SBill.Taylor@Sun.COM 	 */
5749517SBill.Taylor@Sun.COM 	DAT_CR_PARAM param;
5759517SBill.Taylor@Sun.COM 	/* IB specific fields */
5769517SBill.Taylor@Sun.COM 	ib_cm_handle_t ib_cm_handle;
5779517SBill.Taylor@Sun.COM 
5789517SBill.Taylor@Sun.COM 	DAT_SOCK_ADDR6 remote_ia_address;
5799517SBill.Taylor@Sun.COM 	/*
5809517SBill.Taylor@Sun.COM 	 * Assuming that the maximum private data size is small.
5819517SBill.Taylor@Sun.COM 	 * If it gets large, use of a pointer may be appropriate.
5829517SBill.Taylor@Sun.COM 	 */
5839517SBill.Taylor@Sun.COM 	unsigned char private_data[DAPL_MAX_PRIVATE_DATA_SIZE];
5849517SBill.Taylor@Sun.COM 	/*
5859517SBill.Taylor@Sun.COM 	 * Need to be able to associate the CR back to the PSP for
5869517SBill.Taylor@Sun.COM 	 * dapl_cr_reject.
5879517SBill.Taylor@Sun.COM 	 */
5889517SBill.Taylor@Sun.COM 	DAPL_SP *sp_ptr;
5899517SBill.Taylor@Sun.COM };
5909517SBill.Taylor@Sun.COM 
5919517SBill.Taylor@Sun.COM /* DAPL_SRQ maps to DAT_SRQ_HANDLE */
5929517SBill.Taylor@Sun.COM struct dapl_srq {
5939517SBill.Taylor@Sun.COM 	DAPL_HEADER		header;
5949517SBill.Taylor@Sun.COM 	DAT_SRQ_PARAM		param;
5959517SBill.Taylor@Sun.COM 	/* SRQ cannot be freed till EPs attached to srq are freed */
5969517SBill.Taylor@Sun.COM 	DAPL_ATOMIC		srq_ref_count;
5979517SBill.Taylor@Sun.COM 	ib_srq_handle_t		srq_handle;
5989517SBill.Taylor@Sun.COM 	/* DTO data */
5999517SBill.Taylor@Sun.COM 	DAPL_ATOMIC		recv_count;
6009517SBill.Taylor@Sun.COM 	DAPL_COOKIE_BUFFER	recv_buffer;
6019517SBill.Taylor@Sun.COM };
6029517SBill.Taylor@Sun.COM 
6039517SBill.Taylor@Sun.COM typedef enum dapl_dto_type {
6049517SBill.Taylor@Sun.COM 	DAPL_DTO_TYPE_SEND,
6059517SBill.Taylor@Sun.COM 	DAPL_DTO_TYPE_RECV,
6069517SBill.Taylor@Sun.COM 	DAPL_DTO_TYPE_RDMA_WRITE,
6079517SBill.Taylor@Sun.COM 	DAPL_DTO_TYPE_RDMA_READ
6089517SBill.Taylor@Sun.COM } DAPL_DTO_TYPE;
6099517SBill.Taylor@Sun.COM 
6109517SBill.Taylor@Sun.COM typedef enum dapl_cookie_type {
6119517SBill.Taylor@Sun.COM 	DAPL_COOKIE_TYPE_NULL,
6129517SBill.Taylor@Sun.COM 	DAPL_COOKIE_TYPE_DTO,
6139517SBill.Taylor@Sun.COM 	DAPL_COOKIE_TYPE_RMR
6149517SBill.Taylor@Sun.COM } DAPL_COOKIE_TYPE;
6159517SBill.Taylor@Sun.COM 
6169517SBill.Taylor@Sun.COM /* DAPL_DTO_COOKIE used as context for DTO WQEs */
6179517SBill.Taylor@Sun.COM struct dapl_dto_cookie {
6189517SBill.Taylor@Sun.COM 	DAPL_DTO_TYPE type;
6199517SBill.Taylor@Sun.COM 	DAT_DTO_COOKIE cookie;
6209517SBill.Taylor@Sun.COM 	DAT_COUNT size;		/* used for SEND and RDMA write */
6219517SBill.Taylor@Sun.COM };
6229517SBill.Taylor@Sun.COM 
6239517SBill.Taylor@Sun.COM /* DAPL_RMR_COOKIE used as context for bind WQEs */
6249517SBill.Taylor@Sun.COM struct dapl_rmr_cookie {
6259517SBill.Taylor@Sun.COM 	DAPL_RMR *rmr;
6269517SBill.Taylor@Sun.COM 	DAT_RMR_COOKIE cookie;
6279517SBill.Taylor@Sun.COM };
6289517SBill.Taylor@Sun.COM 
6299517SBill.Taylor@Sun.COM typedef enum dapl_cookie_queue_type {
6309517SBill.Taylor@Sun.COM 	DAPL_COOKIE_QUEUE_EP,
6319517SBill.Taylor@Sun.COM 	DAPL_COOKIE_QUEUE_SRQ
6329517SBill.Taylor@Sun.COM } DAPL_COOKIE_QUEUE_TYPE;
6339517SBill.Taylor@Sun.COM 
6349517SBill.Taylor@Sun.COM /* DAPL_COOKIE used as context for WQEs */
6359517SBill.Taylor@Sun.COM struct dapl_cookie {
6369517SBill.Taylor@Sun.COM 	DAPL_COOKIE_TYPE type;	/* Must be first, to define struct.  */
6379517SBill.Taylor@Sun.COM 	DAPL_COOKIE_QUEUE_TYPE	 queue_type;
6389517SBill.Taylor@Sun.COM 	union {
6399517SBill.Taylor@Sun.COM 		void		*ptr;
6409517SBill.Taylor@Sun.COM 		DAPL_EP		*ep;
6419517SBill.Taylor@Sun.COM 		DAPL_SRQ	*srq;
6429517SBill.Taylor@Sun.COM 	} queue;
6439517SBill.Taylor@Sun.COM 	DAT_COUNT index;
6449517SBill.Taylor@Sun.COM 	union {
6459517SBill.Taylor@Sun.COM 		DAPL_DTO_COOKIE dto;
6469517SBill.Taylor@Sun.COM 		DAPL_RMR_COOKIE rmr;
6479517SBill.Taylor@Sun.COM 	} val;
6489517SBill.Taylor@Sun.COM };
6499517SBill.Taylor@Sun.COM 
6509517SBill.Taylor@Sun.COM /*
6519517SBill.Taylor@Sun.COM  * Generic HCA name field
6529517SBill.Taylor@Sun.COM  */
6539517SBill.Taylor@Sun.COM #define	DAPL_HCA_NAME_MAX_LEN 260
6549517SBill.Taylor@Sun.COM typedef char DAPL_HCA_NAME[DAPL_HCA_NAME_MAX_LEN + 1];
6559517SBill.Taylor@Sun.COM 
6569517SBill.Taylor@Sun.COM #if defined(IBHOSTS_NAMING)
6579517SBill.Taylor@Sun.COM 
6589517SBill.Taylor@Sun.COM /*
6599517SBill.Taylor@Sun.COM  * Simple mapping table to match IP addresses to GIDs. Loaded
6609517SBill.Taylor@Sun.COM  * by dapl_init.
6619517SBill.Taylor@Sun.COM  */
6629517SBill.Taylor@Sun.COM typedef struct _dapl_gid_map_table {
6639517SBill.Taylor@Sun.COM 	uint32_t ip_address;
6649517SBill.Taylor@Sun.COM 	ib_gid_t gid;
6659517SBill.Taylor@Sun.COM } DAPL_GID_MAP;
6669517SBill.Taylor@Sun.COM 
6679517SBill.Taylor@Sun.COM #endif /* IBHOSTS_NAMING */
6689517SBill.Taylor@Sun.COM 
6699517SBill.Taylor@Sun.COM /*
6709517SBill.Taylor@Sun.COM  *
6719517SBill.Taylor@Sun.COM  * Function Prototypes
6729517SBill.Taylor@Sun.COM  *
6739517SBill.Taylor@Sun.COM  */
6749517SBill.Taylor@Sun.COM 
6759517SBill.Taylor@Sun.COM /*
6769517SBill.Taylor@Sun.COM  * DAT Mandated functions
6779517SBill.Taylor@Sun.COM  */
6789517SBill.Taylor@Sun.COM extern DAT_RETURN
6799517SBill.Taylor@Sun.COM dapl_ia_open(
6809517SBill.Taylor@Sun.COM 	IN const DAT_NAME_PTR,	/* name */
6819517SBill.Taylor@Sun.COM 	IN DAT_COUNT,		/* asynch_evd_qlen */
6829517SBill.Taylor@Sun.COM 	INOUT DAT_EVD_HANDLE *,	/* asynch_evd_handle */
6839517SBill.Taylor@Sun.COM 	OUT DAT_IA_HANDLE *,	/* ia_handle */
6849517SBill.Taylor@Sun.COM 	IN	boolean_t);	/* ro_aware_client */
6859517SBill.Taylor@Sun.COM 
6869517SBill.Taylor@Sun.COM extern DAT_RETURN
6879517SBill.Taylor@Sun.COM dapl_ia_close(
6889517SBill.Taylor@Sun.COM 	IN DAT_IA_HANDLE,	/* ia_handle */
6899517SBill.Taylor@Sun.COM 	IN DAT_CLOSE_FLAGS);	/* ia_flags */
6909517SBill.Taylor@Sun.COM 
6919517SBill.Taylor@Sun.COM 
6929517SBill.Taylor@Sun.COM extern DAT_RETURN
6939517SBill.Taylor@Sun.COM dapl_ia_query(
6949517SBill.Taylor@Sun.COM 	IN DAT_IA_HANDLE,		/* ia handle */
6959517SBill.Taylor@Sun.COM 	OUT DAT_EVD_HANDLE *,		/* async_evd_handle */
6969517SBill.Taylor@Sun.COM 	IN DAT_IA_ATTR_MASK,		/* ia_params_mask */
6979517SBill.Taylor@Sun.COM 	OUT DAT_IA_ATTR *,		/* ia_params */
6989517SBill.Taylor@Sun.COM 	IN DAT_PROVIDER_ATTR_MASK,	/* provider_params_mask */
6999517SBill.Taylor@Sun.COM 	OUT DAT_PROVIDER_ATTR *);	/* provider_params */
7009517SBill.Taylor@Sun.COM 
7019517SBill.Taylor@Sun.COM 
7029517SBill.Taylor@Sun.COM /* helper functions */
7039517SBill.Taylor@Sun.COM extern DAT_RETURN
7049517SBill.Taylor@Sun.COM dapl_set_consumer_context(
7059517SBill.Taylor@Sun.COM 	IN DAT_HANDLE,		/* dat handle */
7069517SBill.Taylor@Sun.COM 	IN DAT_CONTEXT);	/* context */
7079517SBill.Taylor@Sun.COM 
7089517SBill.Taylor@Sun.COM extern DAT_RETURN
7099517SBill.Taylor@Sun.COM dapl_get_consumer_context(
7109517SBill.Taylor@Sun.COM 	IN DAT_HANDLE,		/* dat handle */
7119517SBill.Taylor@Sun.COM 	OUT DAT_CONTEXT *);	/* context */
7129517SBill.Taylor@Sun.COM 
7139517SBill.Taylor@Sun.COM extern DAT_RETURN
7149517SBill.Taylor@Sun.COM dapl_get_handle_type(
7159517SBill.Taylor@Sun.COM 	IN DAT_HANDLE,
7169517SBill.Taylor@Sun.COM 	OUT DAT_HANDLE_TYPE *);
7179517SBill.Taylor@Sun.COM 
7189517SBill.Taylor@Sun.COM 
7199517SBill.Taylor@Sun.COM /* CNO functions */
7209517SBill.Taylor@Sun.COM extern DAT_RETURN
7219517SBill.Taylor@Sun.COM dapl_cno_create(
7229517SBill.Taylor@Sun.COM 	IN DAT_IA_HANDLE,		/* ia_handle */
7239517SBill.Taylor@Sun.COM 	IN DAT_OS_WAIT_PROXY_AGENT,	/* agent */
7249517SBill.Taylor@Sun.COM 	OUT DAT_CNO_HANDLE *);		/* cno_handle */
7259517SBill.Taylor@Sun.COM 
7269517SBill.Taylor@Sun.COM extern DAT_RETURN
7279517SBill.Taylor@Sun.COM dapl_cno_modify_agent(
7289517SBill.Taylor@Sun.COM 	IN DAT_CNO_HANDLE,		/* cno_handle */
7299517SBill.Taylor@Sun.COM 	IN DAT_OS_WAIT_PROXY_AGENT);	/* agent */
7309517SBill.Taylor@Sun.COM 
7319517SBill.Taylor@Sun.COM extern DAT_RETURN
7329517SBill.Taylor@Sun.COM dapl_cno_query(
7339517SBill.Taylor@Sun.COM 	IN DAT_CNO_HANDLE,	/* cno_handle */
7349517SBill.Taylor@Sun.COM 	IN DAT_CNO_PARAM_MASK,	/* cno_param_mask */
7359517SBill.Taylor@Sun.COM 	OUT DAT_CNO_PARAM *);	/* cno_param */
7369517SBill.Taylor@Sun.COM 
7379517SBill.Taylor@Sun.COM extern DAT_RETURN
7389517SBill.Taylor@Sun.COM dapl_cno_free(IN DAT_CNO_HANDLE);	/* cno_handle */
7399517SBill.Taylor@Sun.COM 
7409517SBill.Taylor@Sun.COM extern DAT_RETURN
7419517SBill.Taylor@Sun.COM dapl_cno_wait(
7429517SBill.Taylor@Sun.COM 	IN DAT_CNO_HANDLE,	/* cno_handle */
7439517SBill.Taylor@Sun.COM 	IN DAT_TIMEOUT,		/* timeout */
7449517SBill.Taylor@Sun.COM 	OUT DAT_EVD_HANDLE *);	/* evd_handle */
7459517SBill.Taylor@Sun.COM 
7469517SBill.Taylor@Sun.COM 
7479517SBill.Taylor@Sun.COM /* CR Functions */
7489517SBill.Taylor@Sun.COM extern DAT_RETURN
7499517SBill.Taylor@Sun.COM dapl_cr_query(
7509517SBill.Taylor@Sun.COM 	IN DAT_CR_HANDLE,	/* cr_handle */
7519517SBill.Taylor@Sun.COM 	IN DAT_CR_PARAM_MASK,	/* cr_args_mask */
7529517SBill.Taylor@Sun.COM 	OUT DAT_CR_PARAM *);	/* cwr_args */
7539517SBill.Taylor@Sun.COM 
7549517SBill.Taylor@Sun.COM extern DAT_RETURN
7559517SBill.Taylor@Sun.COM dapl_cr_accept(
7569517SBill.Taylor@Sun.COM 	IN DAT_CR_HANDLE,	/* cr_handle */
7579517SBill.Taylor@Sun.COM 	IN DAT_EP_HANDLE,	/* ep_handle */
7589517SBill.Taylor@Sun.COM 	IN DAT_COUNT,		/* private_data_size */
7599517SBill.Taylor@Sun.COM 	IN const DAT_PVOID);	/* private_data */
7609517SBill.Taylor@Sun.COM 
7619517SBill.Taylor@Sun.COM extern DAT_RETURN
7629517SBill.Taylor@Sun.COM dapl_cr_reject(IN DAT_CR_HANDLE);
7639517SBill.Taylor@Sun.COM 
7649517SBill.Taylor@Sun.COM extern DAT_RETURN
7659517SBill.Taylor@Sun.COM dapl_cr_handoff(
7669517SBill.Taylor@Sun.COM 	IN DAT_CR_HANDLE,	/* cr_handle */
7679517SBill.Taylor@Sun.COM 	IN DAT_CONN_QUAL);	/* handoff */
7689517SBill.Taylor@Sun.COM 
7699517SBill.Taylor@Sun.COM /* EVD Functions */
7709517SBill.Taylor@Sun.COM extern DAT_RETURN
7719517SBill.Taylor@Sun.COM dapl_evd_create(
7729517SBill.Taylor@Sun.COM 	IN DAT_IA_HANDLE,	/* ia_handle */
7739517SBill.Taylor@Sun.COM 	IN DAT_COUNT,		/* evd_min_qlen */
7749517SBill.Taylor@Sun.COM 	IN DAT_CNO_HANDLE,	/* cno_handle */
7759517SBill.Taylor@Sun.COM 	IN DAT_EVD_FLAGS,	/* evd_flags */
7769517SBill.Taylor@Sun.COM 	OUT DAT_EVD_HANDLE *);	/* evd_handle */
7779517SBill.Taylor@Sun.COM 
7789517SBill.Taylor@Sun.COM extern DAT_RETURN
7799517SBill.Taylor@Sun.COM dapl_evd_query(
7809517SBill.Taylor@Sun.COM 	IN DAT_EVD_HANDLE,	/* evd_handle */
7819517SBill.Taylor@Sun.COM 	IN DAT_EVD_PARAM_MASK,	/* evd_args_mask */
7829517SBill.Taylor@Sun.COM 	OUT DAT_EVD_PARAM *);	/* evd_args */
7839517SBill.Taylor@Sun.COM 
7849517SBill.Taylor@Sun.COM #if 0				/* kdapl */
7859517SBill.Taylor@Sun.COM extern DAT_RETURN
7869517SBill.Taylor@Sun.COM dapl_evd_modify_upcall(
7879517SBill.Taylor@Sun.COM 	IN DAT_EVD_HANDLE,	/* evd_handle */
7889517SBill.Taylor@Sun.COM 	IN DAT_UPCALL_POLICY,	/* upcall_policy */
7899517SBill.Taylor@Sun.COM 	IN DAT_UPCALL_OBJECT);	/* upcall */
7909517SBill.Taylor@Sun.COM #else
7919517SBill.Taylor@Sun.COM 
7929517SBill.Taylor@Sun.COM extern DAT_RETURN
7939517SBill.Taylor@Sun.COM dapl_evd_modify_cno(
7949517SBill.Taylor@Sun.COM 	IN DAT_EVD_HANDLE,	/* evd_handle */
7959517SBill.Taylor@Sun.COM 	IN DAT_CNO_HANDLE);	/* cno_handle */
7969517SBill.Taylor@Sun.COM 
7979517SBill.Taylor@Sun.COM extern DAT_RETURN
7989517SBill.Taylor@Sun.COM dapl_evd_enable(IN DAT_EVD_HANDLE);	/* evd_handle */
7999517SBill.Taylor@Sun.COM 
8009517SBill.Taylor@Sun.COM extern DAT_RETURN
8019517SBill.Taylor@Sun.COM dapl_evd_disable(IN DAT_EVD_HANDLE);	/* evd_handle */
8029517SBill.Taylor@Sun.COM 
8039517SBill.Taylor@Sun.COM extern DAT_RETURN
8049517SBill.Taylor@Sun.COM dapl_evd_wait(
8059517SBill.Taylor@Sun.COM 	IN DAT_EVD_HANDLE,	/* evd_handle */
8069517SBill.Taylor@Sun.COM 	IN DAT_TIMEOUT,		/* timeout */
8079517SBill.Taylor@Sun.COM 	IN DAT_COUNT,		/* threshold */
8089517SBill.Taylor@Sun.COM 	OUT DAT_EVENT *,	/* event */
8099517SBill.Taylor@Sun.COM 	OUT DAT_COUNT *);	/* nmore */
8109517SBill.Taylor@Sun.COM #endif
8119517SBill.Taylor@Sun.COM 
8129517SBill.Taylor@Sun.COM extern DAT_RETURN
8139517SBill.Taylor@Sun.COM dapl_evd_resize(
8149517SBill.Taylor@Sun.COM 	IN DAT_EVD_HANDLE,	/* evd_handle */
8159517SBill.Taylor@Sun.COM 	IN DAT_COUNT);		/* evd_qlen */
8169517SBill.Taylor@Sun.COM 
8179517SBill.Taylor@Sun.COM extern DAT_RETURN
8189517SBill.Taylor@Sun.COM dapl_evd_wait(
8199517SBill.Taylor@Sun.COM 	IN DAT_EVD_HANDLE,	/* evd_handle */
8209517SBill.Taylor@Sun.COM 	IN DAT_TIMEOUT,		/* timeout */
8219517SBill.Taylor@Sun.COM 	IN DAT_COUNT,		/* threshold */
8229517SBill.Taylor@Sun.COM 	OUT DAT_EVENT *,	/* event */
8239517SBill.Taylor@Sun.COM 	OUT DAT_COUNT *);	/* nmore */
8249517SBill.Taylor@Sun.COM 
8259517SBill.Taylor@Sun.COM extern DAT_RETURN
8269517SBill.Taylor@Sun.COM dapl_evd_post_se(
8279517SBill.Taylor@Sun.COM 	DAT_EVD_HANDLE,		/* evd_handle */
8289517SBill.Taylor@Sun.COM 	const DAT_EVENT *);	/* event */
8299517SBill.Taylor@Sun.COM 
8309517SBill.Taylor@Sun.COM extern DAT_RETURN
8319517SBill.Taylor@Sun.COM dapl_evd_dequeue(
8329517SBill.Taylor@Sun.COM 	IN DAT_EVD_HANDLE,	/* evd_handle */
8339517SBill.Taylor@Sun.COM 	OUT DAT_EVENT *);	/* event */
8349517SBill.Taylor@Sun.COM 
8359517SBill.Taylor@Sun.COM extern DAT_RETURN
8369517SBill.Taylor@Sun.COM dapl_evd_free(IN DAT_EVD_HANDLE);
8379517SBill.Taylor@Sun.COM 
8389517SBill.Taylor@Sun.COM extern DAT_RETURN
8399517SBill.Taylor@Sun.COM dapl_evd_set_unwaitable(IN DAT_EVD_HANDLE evd_handle);
8409517SBill.Taylor@Sun.COM 
8419517SBill.Taylor@Sun.COM extern DAT_RETURN
8429517SBill.Taylor@Sun.COM dapl_evd_clear_unwaitable(IN DAT_EVD_HANDLE evd_handle);
8439517SBill.Taylor@Sun.COM 
8449517SBill.Taylor@Sun.COM 
8459517SBill.Taylor@Sun.COM /* EP functions */
8469517SBill.Taylor@Sun.COM extern DAT_RETURN
8479517SBill.Taylor@Sun.COM dapl_ep_create(
8489517SBill.Taylor@Sun.COM 	IN DAT_IA_HANDLE,	/* ia_handle */
8499517SBill.Taylor@Sun.COM 	IN DAT_PZ_HANDLE,	/* pz_handle */
8509517SBill.Taylor@Sun.COM 	IN DAT_EVD_HANDLE,	/* in_dto_completion_evd_handle */
8519517SBill.Taylor@Sun.COM 	IN DAT_EVD_HANDLE,	/* out_dto_completion_evd_handle */
8529517SBill.Taylor@Sun.COM 	IN DAT_EVD_HANDLE,	/* connect_evd_handle */
8539517SBill.Taylor@Sun.COM 	IN const DAT_EP_ATTR *,	/* ep_parameters */
8549517SBill.Taylor@Sun.COM 	OUT DAT_EP_HANDLE *);	/* ep_handle */
8559517SBill.Taylor@Sun.COM 
8569517SBill.Taylor@Sun.COM extern DAT_RETURN
8579517SBill.Taylor@Sun.COM dapl_ep_query(
8589517SBill.Taylor@Sun.COM 	IN DAT_EP_HANDLE,	/* ep_handle */
8599517SBill.Taylor@Sun.COM 	IN DAT_EP_PARAM_MASK,	/* ep_args_mask */
8609517SBill.Taylor@Sun.COM 	OUT DAT_EP_PARAM *);	/* ep_args */
8619517SBill.Taylor@Sun.COM 
8629517SBill.Taylor@Sun.COM extern DAT_RETURN
8639517SBill.Taylor@Sun.COM dapl_ep_modify(
8649517SBill.Taylor@Sun.COM 	IN DAT_EP_HANDLE,		/* ep_handle */
8659517SBill.Taylor@Sun.COM 	IN DAT_EP_PARAM_MASK,		/* ep_args_mask */
8669517SBill.Taylor@Sun.COM 	IN const DAT_EP_PARAM *);	/* ep_args */
8679517SBill.Taylor@Sun.COM 
8689517SBill.Taylor@Sun.COM extern DAT_RETURN
8699517SBill.Taylor@Sun.COM dapl_ep_connect(
8709517SBill.Taylor@Sun.COM 	IN DAT_EP_HANDLE,	/* ep_handle */
8719517SBill.Taylor@Sun.COM 	IN DAT_IA_ADDRESS_PTR,	/* remote_ia_address */
8729517SBill.Taylor@Sun.COM 	IN DAT_CONN_QUAL,	/* remote_conn_qual */
8739517SBill.Taylor@Sun.COM 	IN DAT_TIMEOUT,		/* timeout */
8749517SBill.Taylor@Sun.COM 	IN DAT_COUNT,		/* private_data_size */
8759517SBill.Taylor@Sun.COM 	IN const DAT_PVOID,	/* private_data  */
8769517SBill.Taylor@Sun.COM 	IN DAT_QOS,		/* quality_of_service */
8779517SBill.Taylor@Sun.COM 	IN DAT_CONNECT_FLAGS);	/* connect_flags */
8789517SBill.Taylor@Sun.COM 
8799517SBill.Taylor@Sun.COM extern DAT_RETURN
8809517SBill.Taylor@Sun.COM dapl_ep_dup_connect(
8819517SBill.Taylor@Sun.COM 	IN DAT_EP_HANDLE,	/* ep_handle */
8829517SBill.Taylor@Sun.COM 	IN DAT_EP_HANDLE,	/* ep_dup_handle */
8839517SBill.Taylor@Sun.COM 	IN DAT_TIMEOUT,		/* timeout */
8849517SBill.Taylor@Sun.COM 	IN DAT_COUNT,		/* private_data_size */
8859517SBill.Taylor@Sun.COM 	IN const DAT_PVOID,	/* private_data */
8869517SBill.Taylor@Sun.COM 	IN DAT_QOS);		/* quality_of_service */
8879517SBill.Taylor@Sun.COM 
8889517SBill.Taylor@Sun.COM extern DAT_RETURN
8899517SBill.Taylor@Sun.COM dapl_ep_disconnect(
8909517SBill.Taylor@Sun.COM 	IN DAT_EP_HANDLE,	/* ep_handle */
8919517SBill.Taylor@Sun.COM 	IN DAT_CLOSE_FLAGS);	/* completion_flags */
8929517SBill.Taylor@Sun.COM 
8939517SBill.Taylor@Sun.COM extern DAT_RETURN
8949517SBill.Taylor@Sun.COM dapl_ep_post_send(
8959517SBill.Taylor@Sun.COM 	IN DAT_EP_HANDLE,		/* ep_handle */
8969517SBill.Taylor@Sun.COM 	IN DAT_COUNT,			/* num_segments */
8979517SBill.Taylor@Sun.COM 	IN DAT_LMR_TRIPLET *,		/* local_iov */
8989517SBill.Taylor@Sun.COM 	IN DAT_DTO_COOKIE,		/* user_cookie */
8999517SBill.Taylor@Sun.COM 	IN DAT_COMPLETION_FLAGS);	/* completion_flags */
9009517SBill.Taylor@Sun.COM 
9019517SBill.Taylor@Sun.COM extern DAT_RETURN
9029517SBill.Taylor@Sun.COM dapl_ep_post_recv(
9039517SBill.Taylor@Sun.COM 	IN DAT_EP_HANDLE,		/* ep_handle */
9049517SBill.Taylor@Sun.COM 	IN DAT_COUNT,			/* num_segments */
9059517SBill.Taylor@Sun.COM 	IN DAT_LMR_TRIPLET *,		/* local_iov */
9069517SBill.Taylor@Sun.COM 	IN DAT_DTO_COOKIE,		/* user_cookie */
9079517SBill.Taylor@Sun.COM 	IN DAT_COMPLETION_FLAGS);	/* completion_flags */
9089517SBill.Taylor@Sun.COM 
9099517SBill.Taylor@Sun.COM extern DAT_RETURN
9109517SBill.Taylor@Sun.COM dapl_ep_post_rdma_read(
9119517SBill.Taylor@Sun.COM 	IN DAT_EP_HANDLE,		/* ep_handle */
9129517SBill.Taylor@Sun.COM 	IN DAT_COUNT,			/* num_segments */
9139517SBill.Taylor@Sun.COM 	IN DAT_LMR_TRIPLET *,		/* local_iov */
9149517SBill.Taylor@Sun.COM 	IN DAT_DTO_COOKIE,		/* user_cookie */
9159517SBill.Taylor@Sun.COM 	IN const DAT_RMR_TRIPLET *,	/* remote_iov */
9169517SBill.Taylor@Sun.COM 	IN DAT_COMPLETION_FLAGS);	/* completion_flags */
9179517SBill.Taylor@Sun.COM 
9189517SBill.Taylor@Sun.COM extern DAT_RETURN
9199517SBill.Taylor@Sun.COM dapl_ep_post_rdma_write(
9209517SBill.Taylor@Sun.COM 	IN DAT_EP_HANDLE,		/* ep_handle */
9219517SBill.Taylor@Sun.COM 	IN DAT_COUNT,			/* num_segments */
9229517SBill.Taylor@Sun.COM 	IN DAT_LMR_TRIPLET *,		/* local_iov */
9239517SBill.Taylor@Sun.COM 	IN DAT_DTO_COOKIE,		/* user_cookie */
9249517SBill.Taylor@Sun.COM 	IN const DAT_RMR_TRIPLET *,	/* remote_iov */
9259517SBill.Taylor@Sun.COM 	IN DAT_COMPLETION_FLAGS);	/* completion_flags */
9269517SBill.Taylor@Sun.COM 
9279517SBill.Taylor@Sun.COM extern DAT_RETURN
9289517SBill.Taylor@Sun.COM dapl_ep_get_status(
9299517SBill.Taylor@Sun.COM 	IN DAT_EP_HANDLE,	/* ep_handle */
9309517SBill.Taylor@Sun.COM 	OUT DAT_EP_STATE *,	/* ep_state */
9319517SBill.Taylor@Sun.COM 	OUT DAT_BOOLEAN *,	/* in_dto_idle */
9329517SBill.Taylor@Sun.COM 	OUT DAT_BOOLEAN *);	/* out_dto_idle */
9339517SBill.Taylor@Sun.COM 
9349517SBill.Taylor@Sun.COM extern DAT_RETURN
9359517SBill.Taylor@Sun.COM dapl_ep_free(IN DAT_EP_HANDLE);		/* ep_handle */
9369517SBill.Taylor@Sun.COM 
9379517SBill.Taylor@Sun.COM extern DAT_RETURN
9389517SBill.Taylor@Sun.COM dapl_ep_reset(IN DAT_EP_HANDLE);	/* ep_handle */
9399517SBill.Taylor@Sun.COM 
9409517SBill.Taylor@Sun.COM 
9419517SBill.Taylor@Sun.COM /* LMR functions */
9429517SBill.Taylor@Sun.COM extern DAT_RETURN
9439517SBill.Taylor@Sun.COM dapl_lmr_create(
9449517SBill.Taylor@Sun.COM 	IN DAT_IA_HANDLE,		/* ia_handle */
9459517SBill.Taylor@Sun.COM 	IN DAT_MEM_TYPE,		/* mem_type */
9469517SBill.Taylor@Sun.COM 	IN DAT_REGION_DESCRIPTION,	/* region_description */
9479517SBill.Taylor@Sun.COM 	IN DAT_VLEN,			/* length */
9489517SBill.Taylor@Sun.COM 	IN DAT_PZ_HANDLE,		/* pz_handle */
9499517SBill.Taylor@Sun.COM 	IN DAT_MEM_PRIV_FLAGS,		/* privileges */
9509517SBill.Taylor@Sun.COM 	OUT DAT_LMR_HANDLE *,		/* lmr_handle */
9519517SBill.Taylor@Sun.COM 	OUT DAT_LMR_CONTEXT *,		/* lmr_context */
9529517SBill.Taylor@Sun.COM 	OUT DAT_RMR_CONTEXT *,		/* rmr_context */
9539517SBill.Taylor@Sun.COM 	OUT DAT_VLEN *,			/* registered_length */
9549517SBill.Taylor@Sun.COM 	OUT DAT_VADDR *);		/* registered_address */
9559517SBill.Taylor@Sun.COM 
9569517SBill.Taylor@Sun.COM extern DAT_RETURN
9579517SBill.Taylor@Sun.COM dapl_lmr_query(
9589517SBill.Taylor@Sun.COM 	IN DAT_LMR_HANDLE,
9599517SBill.Taylor@Sun.COM 	IN DAT_LMR_PARAM_MASK,
9609517SBill.Taylor@Sun.COM 	OUT DAT_LMR_PARAM *);
9619517SBill.Taylor@Sun.COM 
9629517SBill.Taylor@Sun.COM extern DAT_RETURN
9639517SBill.Taylor@Sun.COM dapl_lmr_free(IN DAT_LMR_HANDLE);
9649517SBill.Taylor@Sun.COM 
9659517SBill.Taylor@Sun.COM 
9669517SBill.Taylor@Sun.COM /* RMR Functions */
9679517SBill.Taylor@Sun.COM extern DAT_RETURN
9689517SBill.Taylor@Sun.COM dapl_rmr_create(
9699517SBill.Taylor@Sun.COM 	IN DAT_PZ_HANDLE,	/* pz_handle */
9709517SBill.Taylor@Sun.COM 	OUT DAT_RMR_HANDLE *);	/* rmr_handle */
9719517SBill.Taylor@Sun.COM 
9729517SBill.Taylor@Sun.COM extern DAT_RETURN
9739517SBill.Taylor@Sun.COM dapl_rmr_query(
9749517SBill.Taylor@Sun.COM 	IN DAT_RMR_HANDLE,	/* rmr_handle */
9759517SBill.Taylor@Sun.COM 	IN DAT_RMR_PARAM_MASK,	/* rmr_args_mask */
9769517SBill.Taylor@Sun.COM 	OUT DAT_RMR_PARAM *);	/* rmr_args */
9779517SBill.Taylor@Sun.COM 
9789517SBill.Taylor@Sun.COM extern DAT_RETURN
9799517SBill.Taylor@Sun.COM dapl_rmr_bind(
9809517SBill.Taylor@Sun.COM 	IN DAT_RMR_HANDLE,		/* rmr_handle */
9819517SBill.Taylor@Sun.COM 	IN const DAT_LMR_TRIPLET *,	/* lmr_triplet */
9829517SBill.Taylor@Sun.COM 	IN DAT_MEM_PRIV_FLAGS,		/* mem_priv */
9839517SBill.Taylor@Sun.COM 	IN DAT_EP_HANDLE,		/* ep_handle */
9849517SBill.Taylor@Sun.COM 	IN DAT_RMR_COOKIE,		/* user_cookie */
9859517SBill.Taylor@Sun.COM 	IN DAT_COMPLETION_FLAGS,	/* completion_flags */
9869517SBill.Taylor@Sun.COM 	INOUT DAT_RMR_CONTEXT *);	/* context */
9879517SBill.Taylor@Sun.COM 
9889517SBill.Taylor@Sun.COM extern DAT_RETURN
9899517SBill.Taylor@Sun.COM dapl_rmr_free(IN DAT_RMR_HANDLE);
9909517SBill.Taylor@Sun.COM 
9919517SBill.Taylor@Sun.COM 
9929517SBill.Taylor@Sun.COM /* PSP Functions */
9939517SBill.Taylor@Sun.COM extern DAT_RETURN
9949517SBill.Taylor@Sun.COM dapl_psp_create(
9959517SBill.Taylor@Sun.COM 	IN DAT_IA_HANDLE,	/* ia_handle */
9969517SBill.Taylor@Sun.COM 	IN DAT_CONN_QUAL,	/* conn_qual */
9979517SBill.Taylor@Sun.COM 	IN DAT_EVD_HANDLE,	/* evd_handle */
9989517SBill.Taylor@Sun.COM 	IN DAT_PSP_FLAGS,	/* psp_flags */
9999517SBill.Taylor@Sun.COM 	OUT DAT_PSP_HANDLE *);	/* psp_handle */
10009517SBill.Taylor@Sun.COM 
10019517SBill.Taylor@Sun.COM extern DAT_RETURN
10029517SBill.Taylor@Sun.COM dapl_psp_create_any(
10039517SBill.Taylor@Sun.COM 	IN DAT_IA_HANDLE,	/* ia_handle */
10049517SBill.Taylor@Sun.COM 	OUT DAT_CONN_QUAL *,	/* conn_qual */
10059517SBill.Taylor@Sun.COM 	IN DAT_EVD_HANDLE,	/* evd_handle */
10069517SBill.Taylor@Sun.COM 	IN DAT_PSP_FLAGS,	/* psp_flags */
10079517SBill.Taylor@Sun.COM 	OUT DAT_PSP_HANDLE *);	/* psp_handle */
10089517SBill.Taylor@Sun.COM 
10099517SBill.Taylor@Sun.COM extern DAT_RETURN
10109517SBill.Taylor@Sun.COM dapl_psp_query(
10119517SBill.Taylor@Sun.COM 	IN DAT_PSP_HANDLE,
10129517SBill.Taylor@Sun.COM 	IN DAT_PSP_PARAM_MASK,
10139517SBill.Taylor@Sun.COM 	OUT DAT_PSP_PARAM *);
10149517SBill.Taylor@Sun.COM 
10159517SBill.Taylor@Sun.COM extern DAT_RETURN
10169517SBill.Taylor@Sun.COM dapl_psp_free(IN DAT_PSP_HANDLE);	/* psp_handle */
10179517SBill.Taylor@Sun.COM 
10189517SBill.Taylor@Sun.COM 
10199517SBill.Taylor@Sun.COM /* RSP Functions */
10209517SBill.Taylor@Sun.COM extern DAT_RETURN
10219517SBill.Taylor@Sun.COM dapl_rsp_create(
10229517SBill.Taylor@Sun.COM 	IN DAT_IA_HANDLE,	/* ia_handle */
10239517SBill.Taylor@Sun.COM 	IN DAT_CONN_QUAL,	/* conn_qual */
10249517SBill.Taylor@Sun.COM 	IN DAT_EP_HANDLE,	/* ep_handle */
10259517SBill.Taylor@Sun.COM 	IN DAT_EVD_HANDLE,	/* evd_handle */
10269517SBill.Taylor@Sun.COM 	OUT DAT_RSP_HANDLE *);	/* rsp_handle */
10279517SBill.Taylor@Sun.COM 
10289517SBill.Taylor@Sun.COM extern DAT_RETURN
10299517SBill.Taylor@Sun.COM dapl_rsp_query(
10309517SBill.Taylor@Sun.COM 	IN DAT_RSP_HANDLE,
10319517SBill.Taylor@Sun.COM 	IN DAT_RSP_PARAM_MASK,
10329517SBill.Taylor@Sun.COM 	OUT DAT_RSP_PARAM *);
10339517SBill.Taylor@Sun.COM 
10349517SBill.Taylor@Sun.COM extern DAT_RETURN
10359517SBill.Taylor@Sun.COM dapl_rsp_free(IN DAT_RSP_HANDLE);	/* rsp_handle */
10369517SBill.Taylor@Sun.COM 
10379517SBill.Taylor@Sun.COM 
10389517SBill.Taylor@Sun.COM /* PZ Functions */
10399517SBill.Taylor@Sun.COM extern DAT_RETURN
10409517SBill.Taylor@Sun.COM dapl_pz_create(
10419517SBill.Taylor@Sun.COM 	IN DAT_IA_HANDLE,	/* ia_handle */
10429517SBill.Taylor@Sun.COM 	OUT DAT_PZ_HANDLE *);	/* pz_handle */
10439517SBill.Taylor@Sun.COM 
10449517SBill.Taylor@Sun.COM extern DAT_RETURN
10459517SBill.Taylor@Sun.COM dapl_pz_query(
10469517SBill.Taylor@Sun.COM 	IN DAT_PZ_HANDLE,	/* pz_handle */
10479517SBill.Taylor@Sun.COM 	IN DAT_PZ_PARAM_MASK,	/* pz_args_mask */
10489517SBill.Taylor@Sun.COM 	OUT DAT_PZ_PARAM *);	/* pz_args */
10499517SBill.Taylor@Sun.COM 
10509517SBill.Taylor@Sun.COM extern DAT_RETURN
10519517SBill.Taylor@Sun.COM dapl_pz_free(IN DAT_PZ_HANDLE);	/* pz_handle */
10529517SBill.Taylor@Sun.COM 
10539517SBill.Taylor@Sun.COM /* Non-coherent memory fucntions */
10549517SBill.Taylor@Sun.COM 
10559517SBill.Taylor@Sun.COM extern DAT_RETURN dapl_lmr_sync_rdma_read(
10569517SBill.Taylor@Sun.COM 	IN	DAT_IA_HANDLE,		/* ia_handle		*/
10579517SBill.Taylor@Sun.COM 	IN 	const DAT_LMR_TRIPLET *, /* local_segments	*/
10589517SBill.Taylor@Sun.COM 	IN	DAT_VLEN);		/* num_segments		*/
10599517SBill.Taylor@Sun.COM 
10609517SBill.Taylor@Sun.COM extern DAT_RETURN dapl_lmr_sync_rdma_write(
10619517SBill.Taylor@Sun.COM 	IN	DAT_IA_HANDLE,		/* ia_handle		*/
10629517SBill.Taylor@Sun.COM 	IN 	const DAT_LMR_TRIPLET *, /* local_segments	*/
10639517SBill.Taylor@Sun.COM 	IN	DAT_VLEN);		/* num_segments		*/
10649517SBill.Taylor@Sun.COM 
10659517SBill.Taylor@Sun.COM /*
10669517SBill.Taylor@Sun.COM  * SRQ functions
10679517SBill.Taylor@Sun.COM  */
10689517SBill.Taylor@Sun.COM extern DAT_RETURN dapl_ep_create_with_srq(
10699517SBill.Taylor@Sun.COM 	IN	DAT_IA_HANDLE,		/* ia_handle		*/
10709517SBill.Taylor@Sun.COM 	IN	DAT_PZ_HANDLE,		/* pz_handle		*/
10719517SBill.Taylor@Sun.COM 	IN	DAT_EVD_HANDLE,		/* recv_evd_handle	*/
10729517SBill.Taylor@Sun.COM 	IN	DAT_EVD_HANDLE,		/* request_evd_handle	*/
10739517SBill.Taylor@Sun.COM 	IN	DAT_EVD_HANDLE,		/* connect_evd_handle	*/
10749517SBill.Taylor@Sun.COM 	IN	DAT_SRQ_HANDLE,		/* srq_handle 		*/
10759517SBill.Taylor@Sun.COM 	IN	const DAT_EP_ATTR *,	/* ep_attributes	*/
10769517SBill.Taylor@Sun.COM 	OUT	DAT_EP_HANDLE *);	/* ep_handle		*/
10779517SBill.Taylor@Sun.COM 
10789517SBill.Taylor@Sun.COM extern DAT_RETURN dapl_ep_recv_query(
10799517SBill.Taylor@Sun.COM 	IN	DAT_EP_HANDLE,		/* ep_handle		*/
10809517SBill.Taylor@Sun.COM 	OUT	DAT_COUNT *,		/* nbufs_allocated	*/
10819517SBill.Taylor@Sun.COM 	OUT	DAT_COUNT *);		/* bufs_alloc_span	*/
10829517SBill.Taylor@Sun.COM 
10839517SBill.Taylor@Sun.COM extern DAT_RETURN dapl_ep_set_watermark(
10849517SBill.Taylor@Sun.COM 	IN	DAT_EP_HANDLE,		/* ep_handle		*/
10859517SBill.Taylor@Sun.COM 	IN	DAT_COUNT,		/* soft_high_watermark	*/
10869517SBill.Taylor@Sun.COM 	IN	DAT_COUNT);		/* hard_high_watermark	*/
10879517SBill.Taylor@Sun.COM 
10889517SBill.Taylor@Sun.COM extern DAT_RETURN dapl_srq_create(
10899517SBill.Taylor@Sun.COM 	IN	DAT_IA_HANDLE,		/* ia_handle		*/
10909517SBill.Taylor@Sun.COM 	IN	DAT_PZ_HANDLE,		/* pz_handle		*/
10919517SBill.Taylor@Sun.COM 	IN	DAT_SRQ_ATTR *,		/* srq_attr		*/
10929517SBill.Taylor@Sun.COM 	OUT	DAT_SRQ_HANDLE *);	/* srq_handle		*/
10939517SBill.Taylor@Sun.COM 
10949517SBill.Taylor@Sun.COM extern DAT_RETURN dapl_srq_free(
10959517SBill.Taylor@Sun.COM 	IN	DAT_SRQ_HANDLE);	/* srq_handle		*/
10969517SBill.Taylor@Sun.COM 
10979517SBill.Taylor@Sun.COM extern DAT_RETURN dapl_srq_post_recv(
10989517SBill.Taylor@Sun.COM 	IN	DAT_SRQ_HANDLE,		/* srq_handle		*/
10999517SBill.Taylor@Sun.COM 	IN	DAT_COUNT,		/* num_segments		*/
11009517SBill.Taylor@Sun.COM 	IN	DAT_LMR_TRIPLET *,	/* local_iov		*/
11019517SBill.Taylor@Sun.COM 	IN	DAT_DTO_COOKIE);	/* user_cookie		*/
11029517SBill.Taylor@Sun.COM 
11039517SBill.Taylor@Sun.COM extern DAT_RETURN dapl_srq_query(
11049517SBill.Taylor@Sun.COM 	IN	DAT_SRQ_HANDLE,		/* srq_handle		*/
11059517SBill.Taylor@Sun.COM 	IN	DAT_SRQ_PARAM_MASK,	/* srq_param_mask	*/
11069517SBill.Taylor@Sun.COM 	OUT	DAT_SRQ_PARAM *);	/* srq_param		*/
11079517SBill.Taylor@Sun.COM 
11089517SBill.Taylor@Sun.COM extern DAT_RETURN dapl_srq_resize(
11099517SBill.Taylor@Sun.COM 	IN	DAT_SRQ_HANDLE,		/* srq_handle		*/
11109517SBill.Taylor@Sun.COM 	IN	DAT_COUNT);		/* srq_max_recv_dto	*/
11119517SBill.Taylor@Sun.COM 
11129517SBill.Taylor@Sun.COM extern DAT_RETURN dapl_srq_set_lw(
11139517SBill.Taylor@Sun.COM 	IN	DAT_SRQ_HANDLE,		/* srq_handle		*/
11149517SBill.Taylor@Sun.COM 	IN	DAT_COUNT);		/* low_watermark	*/
11159517SBill.Taylor@Sun.COM 
11169517SBill.Taylor@Sun.COM 
11179517SBill.Taylor@Sun.COM /*
11189517SBill.Taylor@Sun.COM  * DAPL internal utility function prototpyes
11199517SBill.Taylor@Sun.COM  */
11209517SBill.Taylor@Sun.COM extern void
11219517SBill.Taylor@Sun.COM dapl_llist_init_head(DAPL_LLIST_HEAD *head);
11229517SBill.Taylor@Sun.COM 
11239517SBill.Taylor@Sun.COM extern void
11249517SBill.Taylor@Sun.COM dapl_llist_init_entry(DAPL_LLIST_ENTRY *entry);
11259517SBill.Taylor@Sun.COM 
11269517SBill.Taylor@Sun.COM extern DAT_BOOLEAN
11279517SBill.Taylor@Sun.COM dapl_llist_is_empty(DAPL_LLIST_HEAD *head);
11289517SBill.Taylor@Sun.COM 
11299517SBill.Taylor@Sun.COM extern void
11309517SBill.Taylor@Sun.COM dapl_llist_add_head(
11319517SBill.Taylor@Sun.COM 	DAPL_LLIST_HEAD *head,
11329517SBill.Taylor@Sun.COM 	DAPL_LLIST_ENTRY *entry,
11339517SBill.Taylor@Sun.COM 	void *data);
11349517SBill.Taylor@Sun.COM 
11359517SBill.Taylor@Sun.COM extern void
11369517SBill.Taylor@Sun.COM dapl_llist_add_tail(
11379517SBill.Taylor@Sun.COM 	DAPL_LLIST_HEAD *head,
11389517SBill.Taylor@Sun.COM 	DAPL_LLIST_ENTRY *entry,
11399517SBill.Taylor@Sun.COM 	void *data);
11409517SBill.Taylor@Sun.COM 
11419517SBill.Taylor@Sun.COM extern void
11429517SBill.Taylor@Sun.COM dapl_llist_add_entry(
11439517SBill.Taylor@Sun.COM 	DAPL_LLIST_HEAD *head,
11449517SBill.Taylor@Sun.COM 	DAPL_LLIST_ENTRY *entry,
11459517SBill.Taylor@Sun.COM 	DAPL_LLIST_ENTRY *new_entry,
11469517SBill.Taylor@Sun.COM 	void *data);
11479517SBill.Taylor@Sun.COM 
11489517SBill.Taylor@Sun.COM extern void *
11499517SBill.Taylor@Sun.COM dapl_llist_remove_head(DAPL_LLIST_HEAD *head);
11509517SBill.Taylor@Sun.COM 
11519517SBill.Taylor@Sun.COM extern void *
11529517SBill.Taylor@Sun.COM dapl_llist_remove_tail(DAPL_LLIST_HEAD *head);
11539517SBill.Taylor@Sun.COM 
11549517SBill.Taylor@Sun.COM extern void *
11559517SBill.Taylor@Sun.COM dapl_llist_remove_entry(DAPL_LLIST_HEAD *head,
11569517SBill.Taylor@Sun.COM 	DAPL_LLIST_ENTRY *entry);
11579517SBill.Taylor@Sun.COM 
11589517SBill.Taylor@Sun.COM extern void *
11599517SBill.Taylor@Sun.COM dapl_llist_peek_head(DAPL_LLIST_HEAD *head);
11609517SBill.Taylor@Sun.COM 
11619517SBill.Taylor@Sun.COM extern void *
11629517SBill.Taylor@Sun.COM dapl_llist_next_entry(
11639517SBill.Taylor@Sun.COM 	IN DAPL_LLIST_HEAD *head,
11649517SBill.Taylor@Sun.COM 	IN DAPL_LLIST_ENTRY *cur_ent);
11659517SBill.Taylor@Sun.COM 
11669517SBill.Taylor@Sun.COM extern void
11679517SBill.Taylor@Sun.COM dapl_llist_debug_print_list(DAPL_LLIST_HEAD *head);
11689517SBill.Taylor@Sun.COM 
11699517SBill.Taylor@Sun.COM #ifdef __cplusplus
11709517SBill.Taylor@Sun.COM }
11719517SBill.Taylor@Sun.COM #endif
11729517SBill.Taylor@Sun.COM 
11739517SBill.Taylor@Sun.COM #endif /* _DAPL_H_ */
1174