17c478bd9Sstevel@tonic-gate /*
27c478bd9Sstevel@tonic-gate  * CDDL HEADER START
37c478bd9Sstevel@tonic-gate  *
47c478bd9Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
5*03494a98SBill Taylor  * Common Development and Distribution License (the "License").
6*03494a98SBill Taylor  * You may not use this file except in compliance with the License.
77c478bd9Sstevel@tonic-gate  *
87c478bd9Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
97c478bd9Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
107c478bd9Sstevel@tonic-gate  * See the License for the specific language governing permissions
117c478bd9Sstevel@tonic-gate  * and limitations under the License.
127c478bd9Sstevel@tonic-gate  *
137c478bd9Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
147c478bd9Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
157c478bd9Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
167c478bd9Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
177c478bd9Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
187c478bd9Sstevel@tonic-gate  *
197c478bd9Sstevel@tonic-gate  * CDDL HEADER END
207c478bd9Sstevel@tonic-gate  */
217c478bd9Sstevel@tonic-gate /*
227c478bd9Sstevel@tonic-gate  * Copyright (c) 2002-2004, Network Appliance, Inc. All rights reserved.
237c478bd9Sstevel@tonic-gate  */
247c478bd9Sstevel@tonic-gate 
257c478bd9Sstevel@tonic-gate /*
26*03494a98SBill Taylor  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
277c478bd9Sstevel@tonic-gate  * Use is subject to license terms.
287c478bd9Sstevel@tonic-gate  */
297c478bd9Sstevel@tonic-gate 
307c478bd9Sstevel@tonic-gate 
317c478bd9Sstevel@tonic-gate #ifndef _UDAT_H_
327c478bd9Sstevel@tonic-gate #define	_UDAT_H_
337c478bd9Sstevel@tonic-gate 
347c478bd9Sstevel@tonic-gate /*
357c478bd9Sstevel@tonic-gate  *
367c478bd9Sstevel@tonic-gate  * HEADER: udat.h
377c478bd9Sstevel@tonic-gate  *
387c478bd9Sstevel@tonic-gate  * PURPOSE: defines the user DAT API
397c478bd9Sstevel@tonic-gate  *
407c478bd9Sstevel@tonic-gate  * Description: Header file for "uDAPL: User Direct Access Programming
417c478bd9Sstevel@tonic-gate  *              Library, Version: 1.2"
427c478bd9Sstevel@tonic-gate  *
437c478bd9Sstevel@tonic-gate  * Mapping rules:
447c478bd9Sstevel@tonic-gate  *      All global symbols are prepended with "DAT_" or "dat_"
457c478bd9Sstevel@tonic-gate  *      All DAT objects have an 'api' tag which, such as 'ep' or 'lmr'
467c478bd9Sstevel@tonic-gate  *      The method table is in the provider definition structure.
477c478bd9Sstevel@tonic-gate  *
487c478bd9Sstevel@tonic-gate  *
497c478bd9Sstevel@tonic-gate  */
507c478bd9Sstevel@tonic-gate 
517c478bd9Sstevel@tonic-gate #ifdef __cplusplus
527c478bd9Sstevel@tonic-gate extern "C" {
537c478bd9Sstevel@tonic-gate #endif
547c478bd9Sstevel@tonic-gate 
557c478bd9Sstevel@tonic-gate #include <dat/udat_config.h>
567c478bd9Sstevel@tonic-gate 
577c478bd9Sstevel@tonic-gate #include <dat/dat_platform_specific.h>
587c478bd9Sstevel@tonic-gate 
597c478bd9Sstevel@tonic-gate typedef enum dat_mem_type
607c478bd9Sstevel@tonic-gate {
617c478bd9Sstevel@tonic-gate 	/* Shared between udat and kdat */
627c478bd9Sstevel@tonic-gate 	DAT_MEM_TYPE_VIRTUAL		= 0x00,
637c478bd9Sstevel@tonic-gate 	DAT_MEM_TYPE_LMR		= 0x01,
647c478bd9Sstevel@tonic-gate 	/* udat specific */
65*03494a98SBill Taylor 	DAT_MEM_TYPE_SHARED_VIRTUAL	= 0x02,
66*03494a98SBill Taylor 	DAT_MEM_TYPE_SO_VIRTUAL		= 0x03
677c478bd9Sstevel@tonic-gate } DAT_MEM_TYPE;
687c478bd9Sstevel@tonic-gate 
697c478bd9Sstevel@tonic-gate /* dat handle types */
707c478bd9Sstevel@tonic-gate typedef enum dat_handle_type
717c478bd9Sstevel@tonic-gate {
727c478bd9Sstevel@tonic-gate 	DAT_HANDLE_TYPE_CR,
737c478bd9Sstevel@tonic-gate 	DAT_HANDLE_TYPE_EP,
747c478bd9Sstevel@tonic-gate 	DAT_HANDLE_TYPE_EVD,
757c478bd9Sstevel@tonic-gate 	DAT_HANDLE_TYPE_IA,
767c478bd9Sstevel@tonic-gate 	DAT_HANDLE_TYPE_LMR,
777c478bd9Sstevel@tonic-gate 	DAT_HANDLE_TYPE_PSP,
787c478bd9Sstevel@tonic-gate 	DAT_HANDLE_TYPE_PZ,
797c478bd9Sstevel@tonic-gate 	DAT_HANDLE_TYPE_RMR,
807c478bd9Sstevel@tonic-gate 	DAT_HANDLE_TYPE_RSP,
817c478bd9Sstevel@tonic-gate 	DAT_HANDLE_TYPE_CNO,
827c478bd9Sstevel@tonic-gate 	DAT_HANDLE_TYPE_SRQ
837c478bd9Sstevel@tonic-gate } DAT_HANDLE_TYPE;
847c478bd9Sstevel@tonic-gate 
857c478bd9Sstevel@tonic-gate /*
867c478bd9Sstevel@tonic-gate  * EVD state consists of 3 orthogonal substates. One for
877c478bd9Sstevel@tonic-gate  * enabled/disabled, one for waitable/unwaitable, and one
887c478bd9Sstevel@tonic-gate  * for configuration. Within each substates the values are
897c478bd9Sstevel@tonic-gate  * mutually exclusive.
907c478bd9Sstevel@tonic-gate  */
917c478bd9Sstevel@tonic-gate typedef enum dat_evd_state
927c478bd9Sstevel@tonic-gate {
937c478bd9Sstevel@tonic-gate 	DAT_EVD_STATE_ENABLED 		= 0x01,
947c478bd9Sstevel@tonic-gate 	DAT_EVD_STATE_DISABLED 		= 0x02,
957c478bd9Sstevel@tonic-gate 	DAT_EVD_STATE_WAITABLE 		= 0x04,
967c478bd9Sstevel@tonic-gate 	DAT_EVD_STATE_UNWAITABLE 	= 0x08,
977c478bd9Sstevel@tonic-gate 	DAT_EVD_STATE_CONFIG_NOTIFY 	= 0x10,
987c478bd9Sstevel@tonic-gate 	DAT_EVD_STATE_CONFIG_SOLICITED 	= 0x20,
997c478bd9Sstevel@tonic-gate 	DAT_EVD_STATE_CONFIG_THRESHOLD 	= 0x30
1007c478bd9Sstevel@tonic-gate } DAT_EVD_STATE;
1017c478bd9Sstevel@tonic-gate 
1027c478bd9Sstevel@tonic-gate typedef enum dat_evd_param_mask
1037c478bd9Sstevel@tonic-gate {
1047c478bd9Sstevel@tonic-gate 	DAT_EVD_FIELD_IA_HANDLE    	= 0x01,
1057c478bd9Sstevel@tonic-gate 	DAT_EVD_FIELD_EVD_QLEN		= 0x02,
1067c478bd9Sstevel@tonic-gate 	DAT_EVD_FIELD_EVD_STATE    	= 0x04,
1077c478bd9Sstevel@tonic-gate 	DAT_EVD_FIELD_CNO		= 0x08,
1087c478bd9Sstevel@tonic-gate 	DAT_EVD_FIELD_EVD_FLAGS		= 0x10,
1097c478bd9Sstevel@tonic-gate 
1107c478bd9Sstevel@tonic-gate 	DAT_EVD_FIELD_ALL		= 0x1F
1117c478bd9Sstevel@tonic-gate } DAT_EVD_PARAM_MASK;
1127c478bd9Sstevel@tonic-gate 
1137c478bd9Sstevel@tonic-gate typedef DAT_UINT64 DAT_PROVIDER_ATTR_MASK;
1147c478bd9Sstevel@tonic-gate 
1157c478bd9Sstevel@tonic-gate #include <dat/dat.h>
1167c478bd9Sstevel@tonic-gate 
1177c478bd9Sstevel@tonic-gate typedef DAT_HANDLE	DAT_CNO_HANDLE;
1187c478bd9Sstevel@tonic-gate 
1197c478bd9Sstevel@tonic-gate struct dat_evd_param
1207c478bd9Sstevel@tonic-gate {
1217c478bd9Sstevel@tonic-gate 	DAT_IA_HANDLE		ia_handle;
1227c478bd9Sstevel@tonic-gate 	DAT_COUNT		evd_qlen;
1237c478bd9Sstevel@tonic-gate 	DAT_EVD_STATE		evd_state;
1247c478bd9Sstevel@tonic-gate 	DAT_CNO_HANDLE		cno_handle;
1257c478bd9Sstevel@tonic-gate 	DAT_EVD_FLAGS		evd_flags;
1267c478bd9Sstevel@tonic-gate };
1277c478bd9Sstevel@tonic-gate 
1287c478bd9Sstevel@tonic-gate #define	DAT_LMR_COOKIE_SIZE 40 /* size of DAT_LMR_COOKIE in bytes */
1297c478bd9Sstevel@tonic-gate typedef char (* DAT_LMR_COOKIE)[DAT_LMR_COOKIE_SIZE];
1307c478bd9Sstevel@tonic-gate 
1317c478bd9Sstevel@tonic-gate /* Format for OS wait proxy agent function */
1327c478bd9Sstevel@tonic-gate 
1337c478bd9Sstevel@tonic-gate typedef void (*DAT_AGENT_FUNC)(
1347c478bd9Sstevel@tonic-gate 	DAT_PVOID,	/* instance data   */
1357c478bd9Sstevel@tonic-gate 	DAT_EVD_HANDLE  /* Event Dispatcher*/);
1367c478bd9Sstevel@tonic-gate 
1377c478bd9Sstevel@tonic-gate /* Definition */
1387c478bd9Sstevel@tonic-gate 
1397c478bd9Sstevel@tonic-gate typedef struct dat_os_wait_proxy_agent
1407c478bd9Sstevel@tonic-gate {
1417c478bd9Sstevel@tonic-gate 	DAT_PVOID instance_data;
1427c478bd9Sstevel@tonic-gate 	DAT_AGENT_FUNC proxy_agent_func;
1437c478bd9Sstevel@tonic-gate } DAT_OS_WAIT_PROXY_AGENT;
1447c478bd9Sstevel@tonic-gate 
1457c478bd9Sstevel@tonic-gate /* Define NULL Proxy agent */
1467c478bd9Sstevel@tonic-gate 
1477c478bd9Sstevel@tonic-gate #define	DAT_OS_WAIT_PROXY_AGENT_NULL \
1487c478bd9Sstevel@tonic-gate 	(DAT_OS_WAIT_PROXY_AGENT) { \
1497c478bd9Sstevel@tonic-gate 	(DAT_PVOID) NULL, \
1507c478bd9Sstevel@tonic-gate 	(DAT_AGENT_FUNC) NULL }
1517c478bd9Sstevel@tonic-gate 
1527c478bd9Sstevel@tonic-gate 
1537c478bd9Sstevel@tonic-gate /* Flags */
1547c478bd9Sstevel@tonic-gate 
1557c478bd9Sstevel@tonic-gate /*
1567c478bd9Sstevel@tonic-gate  * The value specified by the uDAPL Consumer for dat_ia_open to indicate
1577c478bd9Sstevel@tonic-gate  * that not async EVD should be created for the opening instance of an IA.
1587c478bd9Sstevel@tonic-gate  * The same IA have been open before that has the only async EVD to
1597c478bd9Sstevel@tonic-gate  * handle async errors for all open instances of the IA.
1607c478bd9Sstevel@tonic-gate  */
1617c478bd9Sstevel@tonic-gate 
1627c478bd9Sstevel@tonic-gate #define	DAT_EVD_ASYNC_EXISTS (DAT_EVD_HANDLE) 0x1
1637c478bd9Sstevel@tonic-gate 
1647c478bd9Sstevel@tonic-gate /*
1657c478bd9Sstevel@tonic-gate  * The value return by the dat_ia_query for the case when there is no
1667c478bd9Sstevel@tonic-gate  * async EVD for the IA instance. Consumer had specified the value of
1677c478bd9Sstevel@tonic-gate  * DAT_EVD_ASYNC_EXISTS for the async_evd_handle for dat_ia_open.
1687c478bd9Sstevel@tonic-gate  */
1697c478bd9Sstevel@tonic-gate 
1707c478bd9Sstevel@tonic-gate #define	DAT_EVD_OUT_OF_SCOPE (DAT_EVD_HANDLE) 0x2
1717c478bd9Sstevel@tonic-gate 
1727c478bd9Sstevel@tonic-gate /*
1737c478bd9Sstevel@tonic-gate  * Memory types
1747c478bd9Sstevel@tonic-gate  *
1757c478bd9Sstevel@tonic-gate  * Specifing memory type for LMR create. A consumer must use a single
1767c478bd9Sstevel@tonic-gate  * value when registering memory. The union of any of these
1777c478bd9Sstevel@tonic-gate  * flags is used in the provider parameters to indicate what memory
1787c478bd9Sstevel@tonic-gate  * type provider supports for LMR memory creation.
1797c478bd9Sstevel@tonic-gate  */
1807c478bd9Sstevel@tonic-gate 
1817c478bd9Sstevel@tonic-gate 
1827c478bd9Sstevel@tonic-gate 
1837c478bd9Sstevel@tonic-gate /* For udapl only */
1847c478bd9Sstevel@tonic-gate 
1857c478bd9Sstevel@tonic-gate typedef struct dat_shared_memory
1867c478bd9Sstevel@tonic-gate {
1877c478bd9Sstevel@tonic-gate 	DAT_PVOID		virtual_address;
1887c478bd9Sstevel@tonic-gate 	DAT_LMR_COOKIE		shared_memory_id;
1897c478bd9Sstevel@tonic-gate } DAT_SHARED_MEMORY;
1907c478bd9Sstevel@tonic-gate 
1917c478bd9Sstevel@tonic-gate typedef union dat_region_description
1927c478bd9Sstevel@tonic-gate {
1937c478bd9Sstevel@tonic-gate 	DAT_PVOID		for_va;
1947c478bd9Sstevel@tonic-gate 	DAT_LMR_HANDLE		for_lmr_handle;
1957c478bd9Sstevel@tonic-gate 	DAT_SHARED_MEMORY	for_shared_memory;	/* For udapl only */
1967c478bd9Sstevel@tonic-gate } DAT_REGION_DESCRIPTION;
1977c478bd9Sstevel@tonic-gate 
1987c478bd9Sstevel@tonic-gate /* LMR Arguments */
1997c478bd9Sstevel@tonic-gate 
2007c478bd9Sstevel@tonic-gate struct dat_lmr_param
2017c478bd9Sstevel@tonic-gate {
2027c478bd9Sstevel@tonic-gate 	DAT_IA_HANDLE		ia_handle;
2037c478bd9Sstevel@tonic-gate 	DAT_MEM_TYPE		mem_type;
2047c478bd9Sstevel@tonic-gate 	DAT_REGION_DESCRIPTION	region_desc;
2057c478bd9Sstevel@tonic-gate 	DAT_VLEN		length;
2067c478bd9Sstevel@tonic-gate 	DAT_PZ_HANDLE		pz_handle;
2077c478bd9Sstevel@tonic-gate 	DAT_MEM_PRIV_FLAGS	mem_priv;
2087c478bd9Sstevel@tonic-gate 	DAT_LMR_CONTEXT		lmr_context;
2097c478bd9Sstevel@tonic-gate 	DAT_RMR_CONTEXT		rmr_context;
2107c478bd9Sstevel@tonic-gate 	DAT_VLEN		registered_size;
2117c478bd9Sstevel@tonic-gate 	DAT_VADDR		registered_address;
2127c478bd9Sstevel@tonic-gate };
2137c478bd9Sstevel@tonic-gate 
2147c478bd9Sstevel@tonic-gate 
2157c478bd9Sstevel@tonic-gate typedef struct dat_cno_param
2167c478bd9Sstevel@tonic-gate {
2177c478bd9Sstevel@tonic-gate 	DAT_IA_HANDLE		ia_handle;
2187c478bd9Sstevel@tonic-gate 	DAT_OS_WAIT_PROXY_AGENT	agent;
2197c478bd9Sstevel@tonic-gate } DAT_CNO_PARAM;
2207c478bd9Sstevel@tonic-gate 
2217c478bd9Sstevel@tonic-gate typedef enum dat_cno_param_mask
2227c478bd9Sstevel@tonic-gate {
2237c478bd9Sstevel@tonic-gate 	DAT_CNO_FIELD_IA_HANDLE	= 0x1,
2247c478bd9Sstevel@tonic-gate 	DAT_CNO_FIELD_AGENT	= 0x2,
2257c478bd9Sstevel@tonic-gate 
2267c478bd9Sstevel@tonic-gate 	DAT_CNO_FIELD_ALL	= 0x3
2277c478bd9Sstevel@tonic-gate } DAT_CNO_PARAM_MASK;
2287c478bd9Sstevel@tonic-gate 
2297c478bd9Sstevel@tonic-gate 
2307c478bd9Sstevel@tonic-gate /* General Provider attributes. udat specific. */
2317c478bd9Sstevel@tonic-gate typedef enum dat_pz_support
2327c478bd9Sstevel@tonic-gate {
2337c478bd9Sstevel@tonic-gate 	DAT_PZ_UNIQUE,
2347c478bd9Sstevel@tonic-gate 	DAT_PZ_SAME,
2357c478bd9Sstevel@tonic-gate 	DAT_PZ_SHAREABLE
2367c478bd9Sstevel@tonic-gate } DAT_PZ_SUPPORT;
2377c478bd9Sstevel@tonic-gate 
2387c478bd9Sstevel@tonic-gate /*
2397c478bd9Sstevel@tonic-gate  * Provider should support merging of all event stream types. Provider
2407c478bd9Sstevel@tonic-gate  * attribute specify support for merging different event stream types.
2417c478bd9Sstevel@tonic-gate  * It is a 2D binary matrix where each row and column represents an event
2427c478bd9Sstevel@tonic-gate  * stream type. Each binary entry is 1 if the event streams of its raw
2437c478bd9Sstevel@tonic-gate  * and column can fed the same EVD, and 0 otherwise. The order of event
2447c478bd9Sstevel@tonic-gate  * streams in row and column is the same as in the definition of
2457c478bd9Sstevel@tonic-gate  * DAT_EVD_FLAGS: index 0 - Software Event, 1- Connection Request,
2467c478bd9Sstevel@tonic-gate  * 2 - DTO Completion, 3 - Connection event, 4 - RMR Bind Completion,
2477c478bd9Sstevel@tonic-gate  * 5 - Asynchronous event. By definition each diagonal entry is 1.
2487c478bd9Sstevel@tonic-gate  * Consumer allocates an array for it and passes it IN as a pointer
2497c478bd9Sstevel@tonic-gate  * for the array that Provider fills. Provider must fill the array
2507c478bd9Sstevel@tonic-gate  * that Consumer passes.
2517c478bd9Sstevel@tonic-gate  */
2527c478bd9Sstevel@tonic-gate 
2537c478bd9Sstevel@tonic-gate struct dat_provider_attr
2547c478bd9Sstevel@tonic-gate {
2557c478bd9Sstevel@tonic-gate 	char				provider_name[DAT_NAME_MAX_LENGTH];
2567c478bd9Sstevel@tonic-gate 	DAT_UINT32			provider_version_major;
2577c478bd9Sstevel@tonic-gate 	DAT_UINT32			provider_version_minor;
2587c478bd9Sstevel@tonic-gate 	DAT_UINT32			dapl_version_major;
2597c478bd9Sstevel@tonic-gate 	DAT_UINT32			dapl_version_minor;
2607c478bd9Sstevel@tonic-gate 	DAT_MEM_TYPE			lmr_mem_types_supported;
2617c478bd9Sstevel@tonic-gate 	DAT_IOV_OWNERSHIP		iov_ownership_on_return;
2627c478bd9Sstevel@tonic-gate 	DAT_QOS				dat_qos_supported;
2637c478bd9Sstevel@tonic-gate 	DAT_COMPLETION_FLAGS		completion_flags_supported;
2647c478bd9Sstevel@tonic-gate 	DAT_BOOLEAN			is_thread_safe;
2657c478bd9Sstevel@tonic-gate 	DAT_COUNT			max_private_data_size;
2667c478bd9Sstevel@tonic-gate 	DAT_BOOLEAN			supports_multipath;
2677c478bd9Sstevel@tonic-gate 	DAT_EP_CREATOR_FOR_PSP		ep_creator;
2687c478bd9Sstevel@tonic-gate 	DAT_PZ_SUPPORT			pz_support;
2697c478bd9Sstevel@tonic-gate 	DAT_UINT32			optimal_buffer_alignment;
2707c478bd9Sstevel@tonic-gate 	const DAT_BOOLEAN		evd_stream_merging_supported[6][6];
2717c478bd9Sstevel@tonic-gate 	DAT_BOOLEAN			srq_supported;
2727c478bd9Sstevel@tonic-gate 	DAT_COUNT			srq_watermarks_supported;
2737c478bd9Sstevel@tonic-gate 	DAT_BOOLEAN			srq_ep_pz_difference_supported;
2747c478bd9Sstevel@tonic-gate 	DAT_COUNT			srq_info_supported;
2757c478bd9Sstevel@tonic-gate 	DAT_COUNT			ep_recv_info_supported;
2767c478bd9Sstevel@tonic-gate 	DAT_BOOLEAN			lmr_sync_req;
2777c478bd9Sstevel@tonic-gate 	DAT_BOOLEAN			dto_async_return_guaranteed;
2787c478bd9Sstevel@tonic-gate 	DAT_BOOLEAN			rdma_write_for_rdma_read_req;
2797c478bd9Sstevel@tonic-gate 	DAT_COUNT			num_provider_specific_attr;
2807c478bd9Sstevel@tonic-gate 	DAT_NAMED_ATTR *		provider_specific_attr;
2817c478bd9Sstevel@tonic-gate };
2827c478bd9Sstevel@tonic-gate 
2837c478bd9Sstevel@tonic-gate #define	DAT_PROVIDER_FIELD_PROVIDER_NAME		UINT64_C(0x0000001)
2847c478bd9Sstevel@tonic-gate #define	DAT_PROVIDER_FIELD_PROVIDER_VERSION_MAJOR	UINT64_C(0x0000002)
2857c478bd9Sstevel@tonic-gate #define	DAT_PROVIDER_FIELD_PROVIDER_VERSION_MINOR	UINT64_C(0x0000004)
2867c478bd9Sstevel@tonic-gate #define	DAT_PROVIDER_FIELD_DAPL_VERSION_MAJOR		UINT64_C(0x0000008)
2877c478bd9Sstevel@tonic-gate #define	DAT_PROVIDER_FIELD_DAPL_VERSION_MINOR		UINT64_C(0x0000010)
2887c478bd9Sstevel@tonic-gate #define	DAT_PROVIDER_FIELD_LMR_MEM_TYPE_SUPPORTED	UINT64_C(0x0000020)
2897c478bd9Sstevel@tonic-gate #define	DAT_PROVIDER_FIELD_IOV_OWNERSHIP		UINT64_C(0x0000040)
2907c478bd9Sstevel@tonic-gate #define	DAT_PROVIDER_FIELD_DAT_QOS_SUPPORTED		UINT64_C(0x0000080)
2917c478bd9Sstevel@tonic-gate #define	DAT_PROVIDER_FIELD_COMPLETION_FLAGS_SUPPORTED	UINT64_C(0x0000100)
2927c478bd9Sstevel@tonic-gate #define	DAT_PROVIDER_FIELD_IS_THREAD_SAFE		UINT64_C(0x0000200)
2937c478bd9Sstevel@tonic-gate #define	DAT_PROVIDER_FIELD_MAX_PRIVATE_DATA_SIZE	UINT64_C(0x0000400)
2947c478bd9Sstevel@tonic-gate #define	DAT_PROVIDER_FIELD_SUPPORTS_MULTIPATH		UINT64_C(0x0000800)
2957c478bd9Sstevel@tonic-gate #define	DAT_PROVIDER_FIELD_EP_CREATOR			UINT64_C(0x0001000)
2967c478bd9Sstevel@tonic-gate #define	DAT_PROVIDER_FIELD_PZ_SUPPORT			UINT64_C(0x0002000)
2977c478bd9Sstevel@tonic-gate #define	DAT_PROVIDER_FIELD_OPTIMAL_BUFFER_ALIGNMENT	UINT64_C(0x0004000)
2987c478bd9Sstevel@tonic-gate #define	DAT_PROVIDER_FIELD_EVD_STREAM_MERGING_SUPPORTED	UINT64_C(0x0008000)
2997c478bd9Sstevel@tonic-gate #define	DAT_PROVIDER_FIELD_SRQ_SUPPORTED		UINT64_C(0x0010000)
3007c478bd9Sstevel@tonic-gate #define	DAT_PROVIDER_FIELD_SRQ_WATERMARKS_SUPPORTED	UINT64_C(0x0020000)
3017c478bd9Sstevel@tonic-gate #define	DAT_PROVIDER_FIELD_SRQ_EP_PZ_DIFFERENCE_SUPPORTED \
3027c478bd9Sstevel@tonic-gate 							UINT64_C(0x0040000)
3037c478bd9Sstevel@tonic-gate #define	DAT_PROVIDER_FIELD_SRQ_INFO_SUPPORTED		UINT64_C(0x0080000)
3047c478bd9Sstevel@tonic-gate #define	DAT_PROVIDER_FIELD_EP_RECV_INFO_SUPPORTED	UINT64_C(0x0100000)
3057c478bd9Sstevel@tonic-gate #define	DAT_PROVIDER_FIELD_LMR_SYNC_REQ			UINT64_C(0x0200000)
3067c478bd9Sstevel@tonic-gate #define	DAT_PROVIDER_FIELD_DTO_ASYNC_RETURN_GUARANTEED	UINT64_C(0x0400000)
3077c478bd9Sstevel@tonic-gate #define	DAT_PROVIDER_FIELD_RDMA_WRITE_FOR_RDMA_READ_REQ	UINT64_C(0x0800000)
3087c478bd9Sstevel@tonic-gate #define	DAT_PROVIDER_FIELD_NUM_PROVIDER_SPECIFIC_ATTR	UINT64_C(0x1000000)
3097c478bd9Sstevel@tonic-gate #define	DAT_PROVIDER_FIELD_PROVIDER_SPECIFIC_ATTR	UINT64_C(0x2000000)
3107c478bd9Sstevel@tonic-gate 
3117c478bd9Sstevel@tonic-gate #define	DAT_PROVIDER_FIELD_ALL				UINT64_C(0x3FFFFFF)
3127c478bd9Sstevel@tonic-gate #define	DAT_PROVIDER_FIELD_NONE				UINT64_C(0x0)
3137c478bd9Sstevel@tonic-gate 
3147c478bd9Sstevel@tonic-gate #include <dat/udat_vendor_specific.h>
3157c478bd9Sstevel@tonic-gate 
3167c478bd9Sstevel@tonic-gate /* ************************************************************************ */
3177c478bd9Sstevel@tonic-gate 
3187c478bd9Sstevel@tonic-gate /*
3197c478bd9Sstevel@tonic-gate  * User DAT functions definitions.
3207c478bd9Sstevel@tonic-gate  */
3217c478bd9Sstevel@tonic-gate 
3227c478bd9Sstevel@tonic-gate 
3237c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_lmr_create(
3247c478bd9Sstevel@tonic-gate 	IN	DAT_IA_HANDLE,		/* ia_handle		*/
3257c478bd9Sstevel@tonic-gate 	IN	DAT_MEM_TYPE,		/* mem_type		*/
3267c478bd9Sstevel@tonic-gate 	IN	DAT_REGION_DESCRIPTION,	/* region_description   */
3277c478bd9Sstevel@tonic-gate 	IN	DAT_VLEN,		/* length		*/
3287c478bd9Sstevel@tonic-gate 	IN	DAT_PZ_HANDLE,		/* pz_handle		*/
3297c478bd9Sstevel@tonic-gate 	IN	DAT_MEM_PRIV_FLAGS,	/* privileges		*/
3307c478bd9Sstevel@tonic-gate 	OUT	DAT_LMR_HANDLE *,	/* lmr_handle		*/
3317c478bd9Sstevel@tonic-gate 	OUT	DAT_LMR_CONTEXT *,	/* lmr_context		*/
3327c478bd9Sstevel@tonic-gate 	OUT	DAT_RMR_CONTEXT *,	/* rmr_context		*/
3337c478bd9Sstevel@tonic-gate 	OUT	DAT_VLEN *,		/* registered_length	*/
3347c478bd9Sstevel@tonic-gate 	OUT	DAT_VADDR *);		/* registered_address   */
3357c478bd9Sstevel@tonic-gate 
3367c478bd9Sstevel@tonic-gate /* Event Functions */
3377c478bd9Sstevel@tonic-gate 
3387c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_evd_create(
3397c478bd9Sstevel@tonic-gate 	IN	DAT_IA_HANDLE,		/* ia_handle		*/
3407c478bd9Sstevel@tonic-gate 	IN	DAT_COUNT,		/* evd_min_qlen		*/
3417c478bd9Sstevel@tonic-gate 	IN	DAT_CNO_HANDLE,		/* cno_handle		*/
3427c478bd9Sstevel@tonic-gate 	IN	DAT_EVD_FLAGS,		/* evd_flags		*/
3437c478bd9Sstevel@tonic-gate 	OUT	DAT_EVD_HANDLE *);	/* evd_handle		*/
3447c478bd9Sstevel@tonic-gate 
3457c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_evd_modify_cno(
3467c478bd9Sstevel@tonic-gate 	IN	DAT_EVD_HANDLE,		/* evd_handle		*/
3477c478bd9Sstevel@tonic-gate 	IN	DAT_CNO_HANDLE);	/* cno_handle		*/
3487c478bd9Sstevel@tonic-gate 
3497c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_cno_create(
3507c478bd9Sstevel@tonic-gate 	IN	DAT_IA_HANDLE,		/* ia_handle		*/
3517c478bd9Sstevel@tonic-gate 	IN	DAT_OS_WAIT_PROXY_AGENT,	/* agent		*/
3527c478bd9Sstevel@tonic-gate 	OUT	DAT_CNO_HANDLE *);	/* cno_handle		*/
3537c478bd9Sstevel@tonic-gate 
3547c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_cno_modify_agent(
3557c478bd9Sstevel@tonic-gate 	IN	DAT_CNO_HANDLE,			/* cno_handle		*/
3567c478bd9Sstevel@tonic-gate 	IN	DAT_OS_WAIT_PROXY_AGENT);	/* agent		*/
3577c478bd9Sstevel@tonic-gate 
3587c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_cno_query(
3597c478bd9Sstevel@tonic-gate 	IN	DAT_CNO_HANDLE,		/* cno_handle		*/
3607c478bd9Sstevel@tonic-gate 	IN	DAT_CNO_PARAM_MASK,	/* cno_param_mask	*/
3617c478bd9Sstevel@tonic-gate 	OUT	DAT_CNO_PARAM *);	/* cno_param		*/
3627c478bd9Sstevel@tonic-gate 
3637c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_cno_free(
3647c478bd9Sstevel@tonic-gate 	IN DAT_CNO_HANDLE);		/* cno_handle		*/
3657c478bd9Sstevel@tonic-gate 
3667c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_cno_wait(
3677c478bd9Sstevel@tonic-gate 	IN	DAT_CNO_HANDLE,		/* cno_handle		*/
3687c478bd9Sstevel@tonic-gate 	IN	DAT_TIMEOUT,		/* timeout		*/
3697c478bd9Sstevel@tonic-gate 	OUT	DAT_EVD_HANDLE *);	/* evd_handle		*/
3707c478bd9Sstevel@tonic-gate 
3717c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_evd_enable(
3727c478bd9Sstevel@tonic-gate 	IN	DAT_EVD_HANDLE);	/* evd_handle		*/
3737c478bd9Sstevel@tonic-gate 
3747c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_evd_wait(
3757c478bd9Sstevel@tonic-gate 	IN	DAT_EVD_HANDLE,		/* evd_handle		*/
3767c478bd9Sstevel@tonic-gate 	IN	DAT_TIMEOUT,		/* Timeout		*/
3777c478bd9Sstevel@tonic-gate 	IN	DAT_COUNT,		/* Threshold		*/
3787c478bd9Sstevel@tonic-gate 	OUT	DAT_EVENT *,		/* event		*/
3797c478bd9Sstevel@tonic-gate 	OUT	DAT_COUNT *);		/* N more events	*/
3807c478bd9Sstevel@tonic-gate 
3817c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_evd_disable(
3827c478bd9Sstevel@tonic-gate 	IN	DAT_EVD_HANDLE);	/* evd_handle		*/
3837c478bd9Sstevel@tonic-gate 
3847c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_evd_set_unwaitable(
3857c478bd9Sstevel@tonic-gate 	IN DAT_EVD_HANDLE);		/* evd_handle */
3867c478bd9Sstevel@tonic-gate 
3877c478bd9Sstevel@tonic-gate extern DAT_RETURN dat_evd_clear_unwaitable(
3887c478bd9Sstevel@tonic-gate 	IN DAT_EVD_HANDLE); /* evd_handle */
3897c478bd9Sstevel@tonic-gate 
3907c478bd9Sstevel@tonic-gate #ifdef __cplusplus
3917c478bd9Sstevel@tonic-gate }
3927c478bd9Sstevel@tonic-gate #endif
3937c478bd9Sstevel@tonic-gate 
3947c478bd9Sstevel@tonic-gate #endif /* _UDAT_H_ */
395