1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License, Version 1.0 only 6 * (the "License"). You may not use this file except in compliance 7 * with the License. 8 * 9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 * or http://www.opensolaris.org/os/licensing. 11 * See the License for the specific language governing permissions 12 * and limitations under the License. 13 * 14 * When distributing Covered Code, include this CDDL HEADER in each 15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 * If applicable, add the following below this CDDL HEADER, with the 17 * fields enclosed by brackets "[]" replaced with your own identifying 18 * information: Portions Copyright [yyyy] [name of copyright owner] 19 * 20 * CDDL HEADER END 21 */ 22 /* 23 * Copyright (c) 2002-2004, Network Appliance, Inc. All rights reserved. 24 */ 25 26 /* 27 * Copyright 2004 Sun Microsystems, Inc. All rights reserved. 28 * Use is subject to license terms. 29 */ 30 31 32 #ifndef _UDAT_REDIRECTION_H_ 33 #define _UDAT_REDIRECTION_H_ 34 35 /* 36 * 37 * HEADER: udat_redirection.h 38 * 39 * PURPOSE: User DAT macro definitions 40 * 41 * Description: Macros to invoke DAPL functions from the dat_registry 42 * 43 * Mapping rules: 44 * All global symbols are prepended with "DAT_" or "dat_" 45 * All DAT objects have an 'api' tag which, such as 'ep' or 'lmr' 46 * The method table is in the provider definition structure. 47 * 48 * 49 * 50 */ 51 52 #ifdef __cplusplus 53 extern "C" { 54 #endif 55 56 #define DAT_LMR_CREATE(ia, mem_type, reg_desc, len, pz, priv,\ 57 lmr, lmr_context, rmr_context, reg_len, reg_addr) \ 58 (*DAT_HANDLE_TO_PROVIDER(ia)->lmr_create_func)(\ 59 (ia),\ 60 (mem_type),\ 61 (reg_desc),\ 62 (len),\ 63 (pz),\ 64 (priv),\ 65 (lmr),\ 66 (lmr_context),\ 67 (rmr_context),\ 68 (reg_len),\ 69 (reg_addr)) 70 71 #define DAT_EVD_CREATE(ia, qlen, cno, flags, handle) \ 72 (*DAT_HANDLE_TO_PROVIDER(ia)->evd_create_func)(\ 73 (ia),\ 74 (qlen),\ 75 (cno),\ 76 (flags),\ 77 (handle)) 78 79 #define DAT_EVD_ENABLE(evd) \ 80 (*DAT_HANDLE_TO_PROVIDER(evd)->evd_enable_func)(\ 81 (evd)) 82 83 #define DAT_EVD_WAIT(evd, timeout, threshold, event, nmore) \ 84 (*DAT_HANDLE_TO_PROVIDER(evd)->evd_wait_func)(\ 85 (evd),\ 86 (timeout),\ 87 (threshold),\ 88 (event),\ 89 (nmore)) 90 91 #define DAT_EVD_DISABLE(evd) \ 92 (*DAT_HANDLE_TO_PROVIDER(evd)->evd_disable_func)(\ 93 (evd)) 94 95 #define DAT_EVD_SET_UNWAITABLE(evd) \ 96 (*DAT_HANDLE_TO_PROVIDER(evd)->evd_set_unwaitable_func)(\ 97 (evd)) 98 99 #define DAT_EVD_CLEAR_UNWAITABLE(evd) \ 100 (*DAT_HANDLE_TO_PROVIDER(evd)->evd_clear_unwaitable_func)(\ 101 (evd)) 102 103 #define DAT_EVD_MODIFY_CNO(evd, cno) \ 104 (*DAT_HANDLE_TO_PROVIDER(evd)->evd_modify_cno_func)(\ 105 (evd),\ 106 (cno)) 107 108 #define DAT_CNO_CREATE(ia, proxy, cno) \ 109 (*DAT_HANDLE_TO_PROVIDER(ia)->cno_create_func)(\ 110 (ia),\ 111 (proxy),\ 112 (cno)) 113 114 #define DAT_CNO_MODIFY_AGENT(cno, proxy) \ 115 (*DAT_HANDLE_TO_PROVIDER(cno)->cno_modify_agent_func)(\ 116 (cno),\ 117 (proxy)) 118 119 #define DAT_CNO_QUERY(cno, mask, param) \ 120 (*DAT_HANDLE_TO_PROVIDER(cno)->cno_query_func)(\ 121 (cno),\ 122 (mask),\ 123 (param)) 124 125 #define DAT_CNO_FREE(cno) \ 126 (*DAT_HANDLE_TO_PROVIDER(cno)->cno_free_func)(\ 127 (cno)) 128 129 #define DAT_CNO_WAIT(cno, timeout, evd) \ 130 (*DAT_HANDLE_TO_PROVIDER(cno)->cno_wait_func)(\ 131 (cno),\ 132 (timeout),\ 133 (evd)) 134 /* 135 * FUNCTION PROTOTYPES 136 * 137 * User DAT function call definitions 138 * 139 */ 140 141 typedef DAT_RETURN (*DAT_LMR_CREATE_FUNC)( 142 IN DAT_IA_HANDLE, /* ia_handle */ 143 IN DAT_MEM_TYPE, /* mem_type */ 144 IN DAT_REGION_DESCRIPTION, /* region_description */ 145 IN DAT_VLEN, /* length */ 146 IN DAT_PZ_HANDLE, /* pz_handle */ 147 IN DAT_MEM_PRIV_FLAGS, /* privileges */ 148 OUT DAT_LMR_HANDLE *, /* lmr_handle */ 149 OUT DAT_LMR_CONTEXT *, /* lmr_context */ 150 OUT DAT_RMR_CONTEXT *, /* rmr_context */ 151 OUT DAT_VLEN *, /* registered_length */ 152 OUT DAT_VADDR *); /* registered_address */ 153 154 /* Event Functions */ 155 156 typedef DAT_RETURN (*DAT_EVD_CREATE_FUNC)( 157 IN DAT_IA_HANDLE, /* ia_handle */ 158 IN DAT_COUNT, /* evd_min_qlen */ 159 IN DAT_CNO_HANDLE, /* cno_handle */ 160 IN DAT_EVD_FLAGS, /* evd_flags */ 161 OUT DAT_EVD_HANDLE *); /* evd_handle */ 162 163 typedef DAT_RETURN (*DAT_EVD_MODIFY_CNO_FUNC)( 164 IN DAT_EVD_HANDLE, /* evd_handle */ 165 IN DAT_CNO_HANDLE); /* cno_handle */ 166 167 typedef DAT_RETURN (*DAT_CNO_CREATE_FUNC)( 168 IN DAT_IA_HANDLE, /* ia_handle */ 169 IN DAT_OS_WAIT_PROXY_AGENT, /* agent */ 170 OUT DAT_CNO_HANDLE *); /* cno_handle */ 171 172 typedef DAT_RETURN (*DAT_CNO_MODIFY_AGENT_FUNC)( 173 IN DAT_CNO_HANDLE, /* cno_handle */ 174 IN DAT_OS_WAIT_PROXY_AGENT); /* agent */ 175 176 typedef DAT_RETURN (*DAT_CNO_QUERY_FUNC)( 177 IN DAT_CNO_HANDLE, /* cno_handle */ 178 IN DAT_CNO_PARAM_MASK, /* cno_param_mask */ 179 OUT DAT_CNO_PARAM *); /* cno_param */ 180 181 typedef DAT_RETURN (*DAT_CNO_FREE_FUNC)( 182 IN DAT_CNO_HANDLE); /* cno_handle */ 183 184 typedef DAT_RETURN(*DAT_CNO_WAIT_FUNC)( 185 IN DAT_CNO_HANDLE, /* cno_handle */ 186 IN DAT_TIMEOUT, /* timeout */ 187 OUT DAT_EVD_HANDLE *); /* evd_handle */ 188 189 typedef DAT_RETURN (*DAT_EVD_ENABLE_FUNC)( 190 IN DAT_EVD_HANDLE); /* evd_handle */ 191 192 typedef DAT_RETURN (*DAT_EVD_WAIT_FUNC)( 193 IN DAT_EVD_HANDLE, /* evd_handle */ 194 IN DAT_TIMEOUT, /* Timeout */ 195 IN DAT_COUNT, /* Threshold */ 196 OUT DAT_EVENT *, /* event */ 197 OUT DAT_COUNT *); /* N more events */ 198 199 typedef DAT_RETURN (*DAT_EVD_DISABLE_FUNC)( 200 IN DAT_EVD_HANDLE); /* evd_handle */ 201 202 typedef DAT_RETURN (*DAT_EVD_SET_UNWAITABLE_FUNC)( 203 IN DAT_EVD_HANDLE); /* evd_handle */ 204 205 typedef DAT_RETURN (*DAT_EVD_CLEAR_UNWAITABLE_FUNC)( 206 IN DAT_EVD_HANDLE); /* evd_handle */ 207 208 209 #include <dat/dat_redirection.h> 210 211 struct dat_provider 212 { 213 const char *device_name; 214 DAT_PVOID extension; 215 216 DAT_IA_OPEN_FUNC ia_open_func; 217 DAT_IA_QUERY_FUNC ia_query_func; 218 DAT_IA_CLOSE_FUNC ia_close_func; 219 220 DAT_SET_CONSUMER_CONTEXT_FUNC set_consumer_context_func; 221 DAT_GET_CONSUMER_CONTEXT_FUNC get_consumer_context_func; 222 DAT_GET_HANDLE_TYPE_FUNC get_handle_type_func; 223 224 DAT_CNO_CREATE_FUNC cno_create_func; /* udat only */ 225 DAT_CNO_MODIFY_AGENT_FUNC cno_modify_agent_func; /* udat only */ 226 DAT_CNO_QUERY_FUNC cno_query_func; /* udat only */ 227 DAT_CNO_FREE_FUNC cno_free_func; /* udat only */ 228 DAT_CNO_WAIT_FUNC cno_wait_func; /* udat only */ 229 230 DAT_CR_QUERY_FUNC cr_query_func; 231 DAT_CR_ACCEPT_FUNC cr_accept_func; 232 DAT_CR_REJECT_FUNC cr_reject_func; 233 DAT_CR_HANDOFF_FUNC cr_handoff_func; 234 235 DAT_EVD_CREATE_FUNC evd_create_func; 236 DAT_EVD_QUERY_FUNC evd_query_func; 237 238 DAT_EVD_MODIFY_CNO_FUNC evd_modify_cno_func; /* udat only */ 239 DAT_EVD_ENABLE_FUNC evd_enable_func; /* udat only */ 240 DAT_EVD_DISABLE_FUNC evd_disable_func; /* udat only */ 241 DAT_EVD_WAIT_FUNC evd_wait_func; /* udat only */ 242 243 DAT_EVD_RESIZE_FUNC evd_resize_func; 244 DAT_EVD_POST_SE_FUNC evd_post_se_func; 245 DAT_EVD_DEQUEUE_FUNC evd_dequeue_func; 246 DAT_EVD_FREE_FUNC evd_free_func; 247 248 DAT_EP_CREATE_FUNC ep_create_func; 249 DAT_EP_QUERY_FUNC ep_query_func; 250 DAT_EP_MODIFY_FUNC ep_modify_func; 251 DAT_EP_CONNECT_FUNC ep_connect_func; 252 DAT_EP_DUP_CONNECT_FUNC ep_dup_connect_func; 253 DAT_EP_DISCONNECT_FUNC ep_disconnect_func; 254 DAT_EP_POST_SEND_FUNC ep_post_send_func; 255 DAT_EP_POST_RECV_FUNC ep_post_recv_func; 256 DAT_EP_POST_RDMA_READ_FUNC ep_post_rdma_read_func; 257 DAT_EP_POST_RDMA_WRITE_FUNC ep_post_rdma_write_func; 258 DAT_EP_GET_STATUS_FUNC ep_get_status_func; 259 DAT_EP_FREE_FUNC ep_free_func; 260 261 DAT_LMR_CREATE_FUNC lmr_create_func; 262 DAT_LMR_QUERY_FUNC lmr_query_func; 263 264 DAT_LMR_FREE_FUNC lmr_free_func; 265 266 DAT_RMR_CREATE_FUNC rmr_create_func; 267 DAT_RMR_QUERY_FUNC rmr_query_func; 268 DAT_RMR_BIND_FUNC rmr_bind_func; 269 DAT_RMR_FREE_FUNC rmr_free_func; 270 271 DAT_PSP_CREATE_FUNC psp_create_func; 272 DAT_PSP_QUERY_FUNC psp_query_func; 273 DAT_PSP_FREE_FUNC psp_free_func; 274 275 DAT_RSP_CREATE_FUNC rsp_create_func; 276 DAT_RSP_QUERY_FUNC rsp_query_func; 277 DAT_RSP_FREE_FUNC rsp_free_func; 278 279 DAT_PZ_CREATE_FUNC pz_create_func; 280 DAT_PZ_QUERY_FUNC pz_query_func; 281 DAT_PZ_FREE_FUNC pz_free_func; 282 283 /* dat-1.1 */ 284 DAT_PSP_CREATE_ANY_FUNC psp_create_any_func; 285 DAT_EP_RESET_FUNC ep_reset_func; 286 287 /* udat-1.1 */ 288 DAT_EVD_SET_UNWAITABLE_FUNC evd_set_unwaitable_func; 289 DAT_EVD_CLEAR_UNWAITABLE_FUNC evd_clear_unwaitable_func; 290 291 /* dat-1.2 */ 292 DAT_LMR_SYNC_RDMA_READ_FUNC lmr_sync_rdma_read_func; 293 DAT_LMR_SYNC_RDMA_WRITE_FUNC lmr_sync_rdma_write_func; 294 295 DAT_EP_CREATE_WITH_SRQ_FUNC ep_create_with_srq_func; 296 DAT_EP_RECV_QUERY_FUNC ep_recv_query_func; 297 DAT_EP_SET_WATERMARK_FUNC ep_set_watermark_func; 298 DAT_SRQ_CREATE_FUNC srq_create_func; 299 DAT_SRQ_FREE_FUNC srq_free_func; 300 DAT_SRQ_POST_RECV_FUNC srq_post_recv_func; 301 DAT_SRQ_QUERY_FUNC srq_query_func; 302 DAT_SRQ_RESIZE_FUNC srq_resize_func; 303 DAT_SRQ_SET_LW_FUNC srq_set_lw_func; 304 }; 305 306 #ifdef __cplusplus 307 } 308 #endif 309 310 #endif /* _UDAT_REDIRECTION_H_ */ 311