dat_redirection.h revision 03494a9880d80f834bec10a1e8f0a2f8f7c97bf4
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright (c) 2002-2004, Network Appliance, Inc. All rights reserved.
*/
/*
* Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _DAT_REDIRECTION_H_
#define _DAT_REDIRECTION_H_
/*
*
* HEADER: dat_redirection.h
*
* PURPOSE: Defines the common redirection macros
*
* Description: Macros to invoke DAPL functions from the dat_registry
*
* Mapping rules:
* All global symbols are prepended with "DAT_" or "dat_"
* All DAT objects have an 'api' tag which, such as 'ep' or 'lmr'
* The method table is in the provider definition structure.
*
*
*
*/
#ifdef __cplusplus
extern "C" {
#endif
typedef struct dat_provider DAT_PROVIDER;
#ifndef DAT_HANDLE_TO_PROVIDER
/*
* A utility macro to fetch the Provider Library for any object
*
* An alternate version could be defined for single library systems.
* it would look something like:
* extern const struct dat_ia my_single_ia_provider;
* #define DAT_HANDLE_TO_PROVIDER(ignore) &my_single_ia_provider
*
* This would allow a good compiler to avoid indirection overhead when
* making function calls.
*/
#define DAT_HANDLE_TO_PROVIDER(handle) (*(DAT_PROVIDER **)(handle))
#endif
#define DAT_IA_QUERY(ia, evd, ia_msk, ia_ptr, p_msk, p_ptr) \
(*DAT_HANDLE_TO_PROVIDER(ia)->ia_query_func)(\
(ia),\
(evd),\
(ia_msk),\
(ia_ptr),\
(p_msk),\
(p_ptr))
#define DAT_SET_CONSUMER_CONTEXT(handle, context) \
(*DAT_HANDLE_TO_PROVIDER(handle)->set_consumer_context_func)(\
(handle),\
(context))
#define DAT_GET_CONSUMER_CONTEXT(handle, context) \
(*DAT_HANDLE_TO_PROVIDER(handle)->get_consumer_context_func)(\
(handle),\
(context))
#define DAT_GET_HANDLE_TYPE(handle, handle_type) \
(*DAT_HANDLE_TO_PROVIDER(handle)->get_handle_type_func)(\
(handle),\
(handle_type))
#define DAT_CR_QUERY(cr, mask, param) \
(*DAT_HANDLE_TO_PROVIDER(cr)->cr_query_func)(\
(cr),\
(mask),\
(param))
#define DAT_CR_ACCEPT(cr, ep, size, pdata) \
(*DAT_HANDLE_TO_PROVIDER(cr)->cr_accept_func)(\
(cr),\
(ep),\
(size),\
(pdata))
#define DAT_CR_REJECT(cr) \
(*DAT_HANDLE_TO_PROVIDER(cr)->cr_reject_func)(\
(cr))
#define DAT_CR_HANDOFF(cr, qual) \
(*DAT_HANDLE_TO_PROVIDER(cr)->cr_handoff_func)(\
(cr),\
(qual))
#define DAT_EVD_QUERY(evd, mask, param) \
(*DAT_HANDLE_TO_PROVIDER(evd)->evd_query_func)(\
(evd),\
(mask),\
(param))
#define DAT_EVD_RESIZE(evd, qsize) \
(*DAT_HANDLE_TO_PROVIDER(evd)->evd_resize_func)(\
(evd),\
(qsize))
#define DAT_EVD_POST_SE(evd, event) \
(*DAT_HANDLE_TO_PROVIDER(evd)->evd_post_se_func)(\
(evd),\
(event))
#define DAT_EVD_DEQUEUE(evd, event) \
(*DAT_HANDLE_TO_PROVIDER(evd)->evd_dequeue_func)(\
(evd),\
(event))
#define DAT_EVD_FREE(evd)\
(*DAT_HANDLE_TO_PROVIDER(evd)->evd_free_func)(\
(evd))
#define DAT_EP_CREATE(ia, pz, in_evd, out_evd, connect_evd, attr, ep) \
(*DAT_HANDLE_TO_PROVIDER(ia)->ep_create_func)(\
(ia),\
(pz),\
(in_evd),\
(out_evd),\
(connect_evd),\
(attr),\
(ep))
#define DAT_EP_CREATE_WITH_SRQ(ia, pz, in_evd, out_evd, connect_evd, srq,\
attr, ep) \
(*DAT_HANDLE_TO_PROVIDER(ia)->ep_create_with_srq_func)(\
(ia),\
(pz),\
(in_evd),\
(out_evd),\
(connect_evd),\
(srq),\
(attr),\
(ep))
#define DAT_EP_QUERY(ep, mask, param) \
(*DAT_HANDLE_TO_PROVIDER(ep)->ep_query_func)(\
(ep),\
(mask),\
(param))
#define DAT_EP_MODIFY(ep, mask, param) \
(*DAT_HANDLE_TO_PROVIDER(ep)->ep_modify_func)(\
(ep),\
(mask),\
(param))
#define DAT_EP_CONNECT(ep, ia_addr, conn_qual, timeout, psize, pdata, \
qos, flags) \
(*DAT_HANDLE_TO_PROVIDER(ep)->ep_connect_func)(\
(ep),\
(ia_addr),\
(conn_qual),\
(timeout),\
(psize),\
(pdata),\
(qos),\
(flags))
#define DAT_EP_DUP_CONNECT(ep, dup, timeout, psize, pdata, qos) \
(*DAT_HANDLE_TO_PROVIDER(ep)->ep_dup_connect_func)(\
(ep),\
(dup),\
(timeout),\
(psize),\
(pdata),\
(qos))
#define DAT_EP_DISCONNECT(ep, flags) \
(*DAT_HANDLE_TO_PROVIDER(ep)->ep_disconnect_func)(\
(ep),\
(flags))
#define DAT_EP_POST_SEND(ep, size, lbuf, cookie, flags) \
(*DAT_HANDLE_TO_PROVIDER(ep)->ep_post_send_func)(\
(ep),\
(size),\
(lbuf),\
(cookie),\
(flags))
#define DAT_EP_POST_RECV(ep, size, lbuf, cookie, flags) \
(*DAT_HANDLE_TO_PROVIDER(ep)->ep_post_recv_func)(\
(ep),\
(size),\
(lbuf),\
(cookie),\
(flags))
#define DAT_EP_POST_RDMA_READ(ep, size, lbuf, cookie, rbuf, flags) \
(*DAT_HANDLE_TO_PROVIDER(ep)->ep_post_rdma_read_func)(\
(ep),\
(size),\
(lbuf),\
(cookie),\
(rbuf),\
(flags))
#define DAT_EP_POST_RDMA_WRITE(ep, size, lbuf, cookie, rbuf, flags) \
(*DAT_HANDLE_TO_PROVIDER(ep)->ep_post_rdma_write_func)(\
(ep),\
(size),\
(lbuf),\
(cookie),\
(rbuf),\
(flags))
#define DAT_EP_GET_STATUS(ep, ep_state, recv_idle, request_idle) \
(*DAT_HANDLE_TO_PROVIDER(ep)->ep_get_status_func)(\
(ep), \
(ep_state),\
(recv_idle),\
(request_idle))
#define DAT_EP_FREE(ep)\
(*DAT_HANDLE_TO_PROVIDER(ep)->ep_free_func)(\
(ep))
#define DAT_EP_RESET(ep)\
(*DAT_HANDLE_TO_PROVIDER(ep)->ep_reset_func)(\
(ep))
#define DAT_EP_RECV_QUERY(ep, nbuf_alloc, buf_span) \
(*DAT_HANDLE_TO_PROVIDER(ep)->ep_recv_query_func)(\
(ep),\
(nbuf_alloc),\
(buf_span))
#define DAT_EP_SET_WATERMARK(ep, soft_wm, hard_wm) \
(*DAT_HANDLE_TO_PROVIDER(ep)->ep_set_watermark_func)(\
(ep),\
(soft_wm),\
(hard_wm))
#define DAT_LMR_QUERY(lmr, mask, param)\
(*DAT_HANDLE_TO_PROVIDER(lmr)->lmr_query_func)(\
(lmr),\
(mask),\
(param))
#define DAT_LMR_FREE(lmr)\
(*DAT_HANDLE_TO_PROVIDER(lmr)->lmr_free_func)(\
(lmr))
#define DAT_LMR_SYNC_RDMA_READ(ia, lbuf, size) \
(*DAT_HANDLE_TO_PROVIDER(ia)->lmr_sync_rdma_read_func)(\
(ia), \
(lbuf), \
(size))
#define DAT_LMR_SYNC_RDMA_WRITE(ia, lbuf, size) \
(*DAT_HANDLE_TO_PROVIDER(ia)->lmr_sync_rdma_write_func)(\
(ia), \
(lbuf), \
(size))
#define DAT_RMR_CREATE(pz, rmr) \
(*DAT_HANDLE_TO_PROVIDER(pz)->rmr_create_func)(\
(pz),\
(rmr))
#define DAT_RMR_QUERY(rmr, mask, param) \
(*DAT_HANDLE_TO_PROVIDER(rmr)->rmr_query_func)(\
(rmr),\
(mask),\
(param))
#define DAT_RMR_BIND(rmr, lmr, mem_priv, ep, cookie, flags, context) \
(*DAT_HANDLE_TO_PROVIDER(rmr)->rmr_bind_func)(\
(rmr),\
(lmr),\
(mem_priv),\
(ep),\
(cookie),\
(flags),\
(context))
#define DAT_RMR_FREE(rmr)\
(*DAT_HANDLE_TO_PROVIDER(rmr)->rmr_free_func)(\
(rmr))
#define DAT_PSP_CREATE(ia, conn_qual, evd, flags, handle) \
(*DAT_HANDLE_TO_PROVIDER(ia)->psp_create_func)(\
(ia),\
(conn_qual),\
(evd),\
(flags),\
(handle))
#define DAT_PSP_CREATE_ANY(ia, conn_qual, evd, flags, handle) \
(*DAT_HANDLE_TO_PROVIDER(ia)->psp_create_any_func)(\
(ia), \
(conn_qual), \
(evd), \
(flags), \
(handle))
#define DAT_PSP_QUERY(psp, mask, param) \
(*DAT_HANDLE_TO_PROVIDER(psp)->psp_query_func)(\
(psp),\
(mask),\
(param))
#define DAT_PSP_FREE(psp)\
(*DAT_HANDLE_TO_PROVIDER(psp)->psp_free_func)(\
(psp))
#define DAT_RSP_CREATE(ia, conn_qual, ep, evd, handle) \
(*DAT_HANDLE_TO_PROVIDER(ia)->rsp_create_func)(\
(ia),\
(conn_qual),\
(ep),\
(evd),\
(handle))
#define DAT_RSP_QUERY(rsp, mask, param) \
(*DAT_HANDLE_TO_PROVIDER(rsp)->rsp_query_func)(\
(rsp),\
(mask),\
(param))
#define DAT_RSP_FREE(rsp)\
(*DAT_HANDLE_TO_PROVIDER(rsp)->rsp_free_func)(\
(rsp))
#define DAT_PZ_CREATE(ia, pz) \
(*DAT_HANDLE_TO_PROVIDER(ia)->pz_create_func)(\
(ia),\
(pz))
#define DAT_PZ_QUERY(pz, mask, param) \
(*DAT_HANDLE_TO_PROVIDER(pz)->pz_query_func)(\
(pz),\
(mask),\
(param))
#define DAT_PZ_FREE(pz) \
(*DAT_HANDLE_TO_PROVIDER(pz)->pz_free_func)(\
(pz))
#define DAT_SRQ_CREATE(ia, pz, attr, srq) \
(*DAT_HANDLE_TO_PROVIDER(ia)->srq_create_func)(\
(ia),\
(pz),\
(attr),\
(srq))
#define DAT_SRQ_SET_LW(srq, lw) \
(*DAT_HANDLE_TO_PROVIDER(srq)->srq_set_lw_func)(\
(srq),\
(lw))
#define DAT_SRQ_FREE(srq) \
(*DAT_HANDLE_TO_PROVIDER(srq)->srq_free_func)(\
(srq))
#define DAT_SRQ_QUERY(srq, mask, param) \
(*DAT_HANDLE_TO_PROVIDER(srq)->srq_query_func)(\
(srq),\
(mask),\
(param))
#define DAT_SRQ_RESIZE(srq, qsize) \
(*DAT_HANDLE_TO_PROVIDER(srq)->srq_resize_func)(\
(srq),\
(qsize))
#define DAT_SRQ_POST_RECV(srq, size, lbuf, cookie) \
(*DAT_HANDLE_TO_PROVIDER(srq)->srq_post_recv_func)(\
(srq),\
(size),\
(lbuf),\
(cookie))
/*
* FUNCTION PROTOTYPES
*/
typedef DAT_RETURN (*DAT_IA_OPEN_FUNC)(
IN const DAT_NAME_PTR, /* provider */
IN DAT_COUNT, /* asynch_evd_min_qlen */
INOUT DAT_EVD_HANDLE *, /* asynch_evd_handle */
OUT DAT_IA_HANDLE *, /* ia_handle */
IN boolean_t); /* relaxed ordering aware */
typedef DAT_RETURN (*DAT_IA_OPENV_FUNC)(
IN const DAT_NAME_PTR, /* provider */
IN DAT_COUNT, /* asynch_evd_min_qlen */
INOUT DAT_EVD_HANDLE *, /* asynch_evd_handle */
OUT DAT_IA_HANDLE *, /* ia_handle */
IN DAT_UINT32, /* dat major version number */
IN DAT_UINT32, /* dat minor version number */
IN DAT_BOOLEAN); /* dat thread safety */
typedef DAT_RETURN (*DAT_IA_CLOSE_FUNC)(
IN DAT_IA_HANDLE, /* ia_handle */
IN DAT_CLOSE_FLAGS); /* close_flags */
typedef DAT_RETURN (*DAT_IA_QUERY_FUNC)(
IN DAT_IA_HANDLE, /* ia handle */
OUT DAT_EVD_HANDLE *, /* async_evd_handle */
IN DAT_IA_ATTR_MASK, /* ia_attr_mask */
OUT DAT_IA_ATTR *, /* ia_attr */
IN DAT_PROVIDER_ATTR_MASK, /* provider_attr_mask */
OUT DAT_PROVIDER_ATTR *); /* provider_attr */
/* helper functions */
typedef DAT_RETURN (*DAT_SET_CONSUMER_CONTEXT_FUNC)(
IN DAT_HANDLE, /* dat handle */
IN DAT_CONTEXT); /* context */
typedef DAT_RETURN (*DAT_GET_CONSUMER_CONTEXT_FUNC)(
IN DAT_HANDLE, /* dat handle */
OUT DAT_CONTEXT *); /* context */
typedef DAT_RETURN (*DAT_GET_HANDLE_TYPE_FUNC)(
IN DAT_HANDLE,
OUT DAT_HANDLE_TYPE *);
/* CR Functions */
typedef DAT_RETURN (*DAT_CR_QUERY_FUNC)(
IN DAT_CR_HANDLE, /* cr_handle */
IN DAT_CR_PARAM_MASK, /* cr_param_mask */
OUT DAT_CR_PARAM *); /* cr_param */
typedef DAT_RETURN (*DAT_CR_ACCEPT_FUNC)(
IN DAT_CR_HANDLE, /* cr_handle */
IN DAT_EP_HANDLE, /* ep_handle */
IN DAT_COUNT, /* private_data_size */
IN const DAT_PVOID); /* private_data */
typedef DAT_RETURN (*DAT_CR_REJECT_FUNC)(
IN DAT_CR_HANDLE);
/*
* For DAT-1.1 this function is defined for both uDAPL and kDAPL.
* For DAT-1.0 it was only defined for uDAPL.
*/
typedef DAT_RETURN (*DAT_CR_HANDOFF_FUNC)(
IN DAT_CR_HANDLE, /* cr_handle */
IN DAT_CONN_QUAL); /* handoff */
/* EVD Functions */
typedef DAT_RETURN (*DAT_EVD_RESIZE_FUNC)(
IN DAT_EVD_HANDLE, /* evd_handle */
IN DAT_COUNT); /* evd_min_qlen */
typedef DAT_RETURN (*DAT_EVD_POST_SE_FUNC)(
IN DAT_EVD_HANDLE, /* evd_handle */
IN const DAT_EVENT *); /* event */
typedef DAT_RETURN (*DAT_EVD_DEQUEUE_FUNC)(
IN DAT_EVD_HANDLE, /* evd_handle */
OUT DAT_EVENT *); /* event */
typedef DAT_RETURN (*DAT_EVD_FREE_FUNC)(
IN DAT_EVD_HANDLE); /* evd_handle */
typedef DAT_RETURN (*DAT_EVD_QUERY_FUNC)(
IN DAT_EVD_HANDLE, /* evd_handle */
IN DAT_EVD_PARAM_MASK, /* evd_param_mask */
OUT DAT_EVD_PARAM *); /* evd_param */
/* EP functions */
typedef DAT_RETURN (*DAT_EP_CREATE_FUNC)(
IN DAT_IA_HANDLE, /* ia_handle */
IN DAT_PZ_HANDLE, /* pz_handle */
IN DAT_EVD_HANDLE, /* recv_completion_evd_handle */
IN DAT_EVD_HANDLE, /* request_completion_evd_handle */
IN DAT_EVD_HANDLE, /* connect_evd_handle */
IN const DAT_EP_ATTR *, /* ep_attributes */
OUT DAT_EP_HANDLE *); /* ep_handle */
typedef DAT_RETURN (*DAT_EP_CREATE_WITH_SRQ_FUNC)(
IN DAT_IA_HANDLE, /* ia_handle */
IN DAT_PZ_HANDLE, /* pz_handle */
IN DAT_EVD_HANDLE, /* recv_evd_handle */
IN DAT_EVD_HANDLE, /* request_evd_handle */
IN DAT_EVD_HANDLE, /* connect_evd_handle */
IN DAT_SRQ_HANDLE, /* srq_handle */
IN const DAT_EP_ATTR *, /* ep_attributes */
OUT DAT_EP_HANDLE *); /* ep_handle */
typedef DAT_RETURN (*DAT_EP_QUERY_FUNC)(
IN DAT_EP_HANDLE, /* ep_handle */
IN DAT_EP_PARAM_MASK, /* ep_param_mask */
OUT DAT_EP_PARAM *); /* ep_param */
typedef DAT_RETURN (*DAT_EP_MODIFY_FUNC)(
IN DAT_EP_HANDLE, /* ep_handle */
IN DAT_EP_PARAM_MASK, /* ep_param_mask */
IN const DAT_EP_PARAM *); /* ep_param */
typedef DAT_RETURN (*DAT_EP_CONNECT_FUNC)(
IN DAT_EP_HANDLE, /* ep_handle */
IN DAT_IA_ADDRESS_PTR, /* remote_ia_address */
IN DAT_CONN_QUAL, /* remote_conn_qual */
IN DAT_TIMEOUT, /* timeout */
IN DAT_COUNT, /* private_data_size */
IN const DAT_PVOID, /* private_data */
IN DAT_QOS, /* quality_of_service */
IN DAT_CONNECT_FLAGS); /* connect_flags */
typedef DAT_RETURN (*DAT_EP_DUP_CONNECT_FUNC)(
IN DAT_EP_HANDLE, /* ep_handle */
IN DAT_EP_HANDLE, /* ep_dup_handle */
IN DAT_TIMEOUT, /* timeout */
IN DAT_COUNT, /* private_data_size */
IN const DAT_PVOID, /* private_data */
IN DAT_QOS); /* quality_of_service */
typedef DAT_RETURN (*DAT_EP_DISCONNECT_FUNC)(
IN DAT_EP_HANDLE, /* ep_handle */
IN DAT_CLOSE_FLAGS); /* close_flags */
typedef DAT_RETURN (*DAT_EP_POST_SEND_FUNC)(
IN DAT_EP_HANDLE, /* ep_handle */
IN DAT_COUNT, /* num_segments */
IN DAT_LMR_TRIPLET *, /* local_iov */
IN DAT_DTO_COOKIE, /* user_cookie */
IN DAT_COMPLETION_FLAGS); /* completion_flags */
typedef DAT_RETURN (*DAT_EP_POST_RECV_FUNC)(
IN DAT_EP_HANDLE, /* ep_handle */
IN DAT_COUNT, /* num_segments */
IN DAT_LMR_TRIPLET *, /* local_iov */
IN DAT_DTO_COOKIE, /* user_cookie */
IN DAT_COMPLETION_FLAGS); /* completion_flags */
typedef DAT_RETURN (*DAT_EP_POST_RDMA_READ_FUNC)(
IN DAT_EP_HANDLE, /* ep_handle */
IN DAT_COUNT, /* num_segments */
IN DAT_LMR_TRIPLET *, /* local_iov */
IN DAT_DTO_COOKIE, /* user_cookie */
IN const DAT_RMR_TRIPLET *, /* remote_iov */
IN DAT_COMPLETION_FLAGS); /* completion_flags */
typedef DAT_RETURN (*DAT_EP_POST_RDMA_WRITE_FUNC)(
IN DAT_EP_HANDLE, /* ep_handle */
IN DAT_COUNT, /* num_segments */
IN DAT_LMR_TRIPLET *, /* local_iov */
IN DAT_DTO_COOKIE, /* user_cookie */
IN const DAT_RMR_TRIPLET *, /* remote_iov */
IN DAT_COMPLETION_FLAGS); /* completion_flags */
typedef DAT_RETURN (*DAT_EP_GET_STATUS_FUNC)(
IN DAT_EP_HANDLE, /* ep_handle */
OUT DAT_EP_STATE *, /* ep_state */
OUT DAT_BOOLEAN *, /* recv_idle */
OUT DAT_BOOLEAN *); /* request_idle */
typedef DAT_RETURN (*DAT_EP_FREE_FUNC)(
IN DAT_EP_HANDLE); /* ep_handle */
typedef DAT_RETURN (*DAT_EP_RESET_FUNC)(
IN DAT_EP_HANDLE); /* ep_handle */
typedef DAT_RETURN (*DAT_EP_RECV_QUERY_FUNC)(
IN DAT_EP_HANDLE, /* ep_handle */
OUT DAT_COUNT *, /* nbufs_allocated */
OUT DAT_COUNT *); /* bufs_alloc_span */
typedef DAT_RETURN (*DAT_EP_SET_WATERMARK_FUNC)(
IN DAT_EP_HANDLE, /* ep_handle */
IN DAT_COUNT, /* soft_high_watermark */
IN DAT_COUNT); /* hard_high_watermark */
/* LMR functions */
typedef DAT_RETURN (*DAT_LMR_FREE_FUNC)(
IN DAT_LMR_HANDLE);
typedef DAT_RETURN (*DAT_LMR_QUERY_FUNC)(
IN DAT_LMR_HANDLE, /* lmr_handle */
IN DAT_LMR_PARAM_MASK, /* lmr_param_mask */
OUT DAT_LMR_PARAM *); /* lmr_param */
typedef DAT_RETURN (*DAT_LMR_SYNC_RDMA_READ_FUNC)(
IN DAT_IA_HANDLE, /* ia_handle */
IN const DAT_LMR_TRIPLET *, /* local_segments */
IN DAT_VLEN); /* num_segments */
typedef DAT_RETURN (*DAT_LMR_SYNC_RDMA_WRITE_FUNC)(
IN DAT_IA_HANDLE, /* ia_handle */
IN const DAT_LMR_TRIPLET *, /* local_segments */
IN DAT_VLEN); /* num_segments */
/* RMR Functions */
typedef DAT_RETURN (*DAT_RMR_CREATE_FUNC)(
IN DAT_PZ_HANDLE, /* pz_handle */
OUT DAT_RMR_HANDLE *); /* rmr_handle */
typedef DAT_RETURN (*DAT_RMR_QUERY_FUNC)(
IN DAT_RMR_HANDLE, /* rmr_handle */
IN DAT_RMR_PARAM_MASK, /* rmr_param_mask */
OUT DAT_RMR_PARAM *); /* rmr_param */
typedef DAT_RETURN (*DAT_RMR_BIND_FUNC)(
IN DAT_RMR_HANDLE, /* rmr_handle */
IN const DAT_LMR_TRIPLET *, /* lmr_triplet */
IN DAT_MEM_PRIV_FLAGS, /* mem_priv */
IN DAT_EP_HANDLE, /* ep_handle */
IN DAT_RMR_COOKIE, /* user_cookie */
IN DAT_COMPLETION_FLAGS, /* completion_flags */
OUT DAT_RMR_CONTEXT *); /* context */
typedef DAT_RETURN (*DAT_RMR_FREE_FUNC)(
IN DAT_RMR_HANDLE);
/* PSP Functions */
typedef DAT_RETURN (*DAT_PSP_CREATE_FUNC)(
IN DAT_IA_HANDLE, /* ia_handle */
IN DAT_CONN_QUAL, /* conn_qual */
IN DAT_EVD_HANDLE, /* evd_handle */
IN DAT_PSP_FLAGS, /* psp_flags */
OUT DAT_PSP_HANDLE *); /* psp_handle */
typedef DAT_RETURN (*DAT_PSP_CREATE_ANY_FUNC)(
IN DAT_IA_HANDLE, /* ia_handle */
OUT DAT_CONN_QUAL *, /* conn_qual */
IN DAT_EVD_HANDLE, /* evd_handle */
IN DAT_PSP_FLAGS, /* psp_flags */
OUT DAT_PSP_HANDLE *); /* psp_handle */
typedef DAT_RETURN (*DAT_PSP_QUERY_FUNC)(
IN DAT_PSP_HANDLE, /* psp_handle */
IN DAT_PSP_PARAM_MASK, /* psp_param_mask */
OUT DAT_PSP_PARAM *); /* *psp_param */
typedef DAT_RETURN (*DAT_PSP_FREE_FUNC)(
IN DAT_PSP_HANDLE); /* psp_handle */
/* RSP Functions */
typedef DAT_RETURN (*DAT_RSP_CREATE_FUNC)(
IN DAT_IA_HANDLE, /* ia_handle */
IN DAT_CONN_QUAL, /* conn_qual */
IN DAT_EP_HANDLE, /* ep_handle */
IN DAT_EVD_HANDLE, /* evd_handle */
OUT DAT_RSP_HANDLE *); /* rsp_handle */
typedef DAT_RETURN (*DAT_RSP_QUERY_FUNC) (
IN DAT_RSP_HANDLE, /* rsp_handle */
IN DAT_RSP_PARAM_MASK, /* rsp_param_mask */
OUT DAT_RSP_PARAM *); /* *rsp_param */
typedef DAT_RETURN (*DAT_RSP_FREE_FUNC)(
IN DAT_RSP_HANDLE); /* rsp_handle */
/* PZ Functions */
typedef DAT_RETURN (*DAT_PZ_CREATE_FUNC)(
IN DAT_IA_HANDLE, /* ia_handle */
OUT DAT_PZ_HANDLE *); /* pz_handle */
typedef DAT_RETURN (*DAT_PZ_QUERY_FUNC)(
IN DAT_PZ_HANDLE, /* pz_handle */
IN DAT_PZ_PARAM_MASK, /* pz_param_mask */
OUT DAT_PZ_PARAM *); /* pz_param */
typedef DAT_RETURN (*DAT_PZ_FREE_FUNC)(
IN DAT_PZ_HANDLE); /* pz_handle */
/* SRQ Functions */
typedef DAT_RETURN (*DAT_SRQ_CREATE_FUNC)(
IN DAT_IA_HANDLE, /* ia_handle */
IN DAT_PZ_HANDLE, /* pz_handle */
IN DAT_SRQ_ATTR *, /* srq_attr */
OUT DAT_SRQ_HANDLE *); /* srq_handle */
typedef DAT_RETURN (*DAT_SRQ_SET_LW_FUNC)(
IN DAT_SRQ_HANDLE, /* srq_handle */
IN DAT_COUNT); /* low_watermark */
typedef DAT_RETURN (*DAT_SRQ_FREE_FUNC)(
IN DAT_SRQ_HANDLE); /* srq_handle */
typedef DAT_RETURN (*DAT_SRQ_QUERY_FUNC)(
IN DAT_SRQ_HANDLE, /* srq_handle */
IN DAT_SRQ_PARAM_MASK, /* srq_param_mask */
OUT DAT_SRQ_PARAM *); /* srq_param */
typedef DAT_RETURN (*DAT_SRQ_RESIZE_FUNC)(
IN DAT_SRQ_HANDLE, /* srq_handle */
IN DAT_COUNT); /* srq_max_recv_dto */
typedef DAT_RETURN (*DAT_SRQ_POST_RECV_FUNC)(
IN DAT_SRQ_HANDLE, /* srq_handle */
IN DAT_COUNT, /* num_segments */
IN DAT_LMR_TRIPLET *, /* local_iov */
IN DAT_DTO_COOKIE); /* user_cookie */
#ifdef __cplusplus
}
#endif
#endif /* _DAT_REDIRECTION_H_ */