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 (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 22 /* 23 * Copyright (c) 2002-2003, Network Appliance, Inc. All rights reserved. 24 */ 25 26 /* 27 * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 28 * Use is subject to license terms. 29 */ 30 31 /* 32 * 33 * HEADER: dapl_adapter_util.h 34 * 35 * PURPOSE: Utility defs & routines for the adapter data structure 36 * 37 */ 38 39 #ifndef _DAPL_ADAPTER_UTIL_H_ 40 #define _DAPL_ADAPTER_UTIL_H_ 41 42 #ifdef __cplusplus 43 extern "C" { 44 #endif 45 46 /* Max number of cqes that can be polled from the CQ */ 47 #define MAX_CQES_PER_POLL 8 48 49 typedef enum async_handler_type { 50 DAPL_ASYNC_UNAFILIATED, 51 DAPL_ASYNC_CQ_ERROR, 52 DAPL_ASYNC_CQ_COMPLETION, 53 DAPL_ASYNC_QP_ERROR 54 } DAPL_ASYNC_HANDLER_TYPE; 55 56 57 #ifdef CM_BUSTED 58 DAT_RETURN dapl_set_remote_lid(IN char *rhost_name); 59 #endif /* CM_BUSTED */ 60 61 /* SUNW */ 62 DAT_RETURN dapls_ib_enum_hcas( 63 IN DAPL_HCA **hca_list, 64 OUT DAT_COUNT *hca_count); 65 66 void dapls_ib_state_init(void); 67 void dapls_ib_state_fini(void); 68 /* SUNW */ 69 70 DAT_RETURN dapls_ib_open_hca( 71 IN DAPL_HCA *hca_ptr, 72 OUT ib_hca_handle_t *ib_hca_handle); 73 74 DAT_RETURN dapls_ib_close_hca( 75 IN ib_hca_handle_t ib_hca_handle); 76 77 DAT_RETURN dapls_ib_qp_alloc( 78 IN DAPL_IA *ia_ptr, 79 IN DAPL_EP *ep_ptr, 80 IN DAPL_EP *ep_ctx_ptr); 81 82 DAT_RETURN dapls_ib_qp_free( 83 IN DAPL_IA *ia_ptr, 84 IN DAPL_EP *ep_ptr); 85 86 DAT_RETURN dapls_ib_qp_modify( 87 IN DAPL_IA *ia_ptr, 88 IN DAPL_EP *ep_ptr, 89 IN DAT_EP_ATTR *ep_attr); 90 91 DAT_RETURN dapls_ib_connect( 92 IN DAT_EP_HANDLE ep_handle, 93 IN DAT_IA_ADDRESS_PTR remote_ia_address, 94 IN DAT_CONN_QUAL remote_conn_qual, 95 IN DAT_COUNT prd_size, 96 IN DAPL_PRIVATE *prd_ptr, 97 IN DAT_TIMEOUT timeout); 98 99 DAT_RETURN dapls_ib_disconnect( 100 IN DAPL_EP *ep_ptr, 101 IN DAT_CLOSE_FLAGS completion_flags); 102 103 DAT_RETURN dapls_ib_setup_conn_listener( 104 IN DAPL_IA *ia_ptr, 105 IN DAT_UINT64 ServiceID, 106 IN DAPL_SP *sp_ptr); 107 108 DAT_RETURN dapls_ib_remove_conn_listener( 109 IN DAPL_IA *ia_ptr, 110 IN DAPL_SP *sp_ptr); 111 112 DAT_RETURN dapls_ib_accept_connection( 113 IN DAT_CR_HANDLE cr_handle, 114 IN DAT_EP_HANDLE ep_handle, 115 IN DAPL_PRIVATE *prd_ptr); 116 117 /* SUNW */ 118 DAT_RETURN dapls_ib_reject_connection( 119 IN ib_cm_handle_t cm_handle, 120 IN int reject_reason, 121 IN DAPL_SP *sp_ptr); 122 123 DAT_RETURN dapls_ib_handoff_connection( 124 IN DAPL_CR *cr_ptr, 125 IN DAT_CONN_QUAL cr_handoff); 126 127 void dapls_ib_async_callback( 128 IN DAPL_EVD *async_evd, 129 IN ib_hca_handle_t hca_handle, 130 IN ib_error_record_t *event_ptr, 131 IN void *context); 132 /* SUNW */ 133 134 DAT_RETURN dapls_ib_setup_async_callback( 135 IN DAPL_IA *ia_ptr, 136 IN DAPL_ASYNC_HANDLER_TYPE handler_type, 137 IN unsigned int *callback_handle, 138 IN ib_async_handler_t callback, 139 IN void *context); 140 141 DAT_RETURN dapls_ib_cq_alloc( 142 IN DAPL_IA *ia_ptr, 143 IN DAPL_EVD *evd_ptr, 144 IN DAPL_CNO *cno_ptr, 145 IN DAT_COUNT *cqlen); 146 147 /* SUNW */ 148 DAT_RETURN dapls_ib_cq_resize( 149 IN DAPL_EVD *evd_ptr, 150 IN DAT_COUNT cqlen); 151 /* SUNW */ 152 153 DAT_RETURN dapls_ib_cq_free( 154 IN DAPL_IA *ia_ptr, 155 IN DAPL_EVD *evd_ptr); 156 157 DAT_RETURN dapls_set_cq_notify( 158 IN DAPL_IA *ia_ptr, 159 IN DAPL_EVD *evd_ptr); 160 161 /* SUNW */ 162 DAT_RETURN dapls_set_cqN_notify( 163 IN DAPL_IA *ia_ptr, 164 IN DAPL_EVD *evd_ptr, 165 IN uint32_t events_needed); 166 /* SUNW */ 167 168 DAT_RETURN dapls_ib_cqd_create( 169 IN DAPL_HCA *hca_ptr); 170 171 DAT_RETURN dapls_ib_cqd_destroy( 172 IN DAPL_HCA *hca_ptr); 173 174 DAT_RETURN dapls_ib_pd_alloc( 175 IN DAPL_IA *ia_ptr, 176 IN DAPL_PZ *pz); 177 178 DAT_RETURN dapls_ib_pd_free( 179 IN DAPL_PZ *pz); 180 181 DAT_RETURN dapls_ib_mr_register( 182 IN DAPL_IA *ia_ptr, 183 IN DAPL_LMR *lmr, 184 IN DAT_PVOID virt_addr, 185 IN DAT_VLEN length, 186 IN DAT_MEM_PRIV_FLAGS privileges); 187 188 DAT_RETURN dapls_ib_mr_register_shared( 189 IN DAPL_IA *ia_ptr, 190 IN DAPL_LMR *lmr, 191 IN DAT_PVOID virt_addr, 192 IN DAT_VLEN length, 193 IN DAT_LMR_COOKIE cookie, 194 IN DAT_MEM_PRIV_FLAGS privileges); 195 196 DAT_RETURN dapls_ib_mr_deregister( 197 IN DAPL_LMR *lmr); 198 199 DAT_RETURN dapls_ib_mr_register_lmr( 200 IN DAPL_IA *ia_ptr, 201 IN DAPL_LMR *lmr, 202 IN DAT_MEM_PRIV_FLAGS privileges); 203 204 DAT_RETURN dapls_ib_mw_alloc( 205 IN DAPL_RMR *rmr); 206 207 DAT_RETURN dapls_ib_mw_free( 208 IN DAPL_RMR *rmr); 209 210 DAT_RETURN dapls_ib_mw_bind( 211 IN DAPL_RMR *rmr, 212 IN DAT_LMR_CONTEXT lmr_context, 213 IN DAPL_EP *ep, 214 IN DAPL_COOKIE *cookie, 215 IN DAT_VADDR virtual_address, 216 IN DAT_VLEN length, 217 IN DAT_MEM_PRIV_FLAGS mem_priv, 218 IN DAT_COMPLETION_FLAGS completion_flags); 219 220 DAT_RETURN dapls_ib_mw_unbind( 221 IN DAPL_RMR *rmr, 222 IN DAT_LMR_CONTEXT lmr_context, 223 IN DAPL_EP *ep, 224 IN DAPL_COOKIE *cookie, 225 IN DAT_COMPLETION_FLAGS completion_flags); 226 227 DAT_RETURN dapls_ib_query_hca( 228 IN DAPL_HCA *hca_ptr, 229 OUT DAT_IA_ATTR *ia_attr, 230 OUT DAT_EP_ATTR *ep_attr, 231 OUT DAT_SOCK_ADDR6 *ip_addr, 232 OUT DAT_SRQ_ATTR *srq_attr); 233 234 void dapls_ib_reinit_ep( 235 IN DAPL_EP *ep_ptr); 236 237 void dapls_ib_connected( 238 IN DAPL_EP *ep_ptr); 239 240 void dapls_ib_disconnect_clean( 241 IN DAPL_EP *ep_ptr, 242 IN DAT_BOOLEAN passive, 243 IN const ib_cm_events_t ib_cm_event); 244 245 DAT_RETURN dapls_ib_get_async_event( 246 IN ib_error_record_t *cause_ptr, 247 OUT DAT_EVENT_NUMBER *async_event); 248 249 DAT_RETURN dapls_ib_cm_remote_addr( 250 IN DAT_HANDLE dat_handle, 251 IN DAPL_PRIVATE *prd_ptr, 252 OUT DAT_SOCK_ADDR6 *remote_ia_address); 253 254 /* SUNW */ 255 void dapls_ib_store_premature_events( 256 IN ib_qp_handle_t qp_ptr, 257 IN ib_work_completion_t *cqe_ptr); 258 259 void dapls_ib_poll_premature_events( 260 IN DAPL_EP *ep_ptr, 261 OUT ib_work_completion_t **cqe_ptr, 262 OUT int *nevents); 263 264 void dapls_ib_free_premature_events( 265 IN DAPL_EP *ep_ptr, 266 IN int free_index); 267 268 DAT_RETURN dapls_ib_event_poll( 269 IN DAPL_EVD *evd_ptr, 270 IN uint64_t timeout, 271 IN uint_t threshold, 272 OUT dapl_ib_event_t *evp_ptr, 273 OUT int *num_events); 274 275 DAT_RETURN dapls_ib_event_wakeup( 276 IN DAPL_EVD *evd_ptr); 277 278 void dapls_ib_cq_peek( 279 IN DAPL_EVD *evd_ptr, 280 OUT int *num_cqe); 281 282 DAT_RETURN dapls_ib_modify_cno( 283 IN DAPL_EVD *evd_ptr, 284 IN DAPL_CNO *cno_ptr); 285 286 DAT_RETURN dapls_ib_cno_wait( 287 IN DAPL_CNO *cno_ptr, 288 IN DAT_TIMEOUT timeout, 289 IN DAPL_EVD **evd_ptr_p); 290 291 DAT_RETURN dapls_ib_cno_alloc( 292 IN DAPL_IA *ia_ptr, 293 IN DAPL_CNO *cno_ptr); 294 295 DAT_RETURN dapls_ib_cno_free( 296 IN DAPL_CNO *cno_ptr); 297 298 DAT_RETURN dapls_ib_post_recv( 299 IN DAPL_EP *ep_ptr, 300 IN DAPL_COOKIE *dto_cookie, 301 IN DAT_COUNT num_segments, 302 IN DAT_LMR_TRIPLET *local_iov, 303 IN DAT_COMPLETION_FLAGS completion_flags); 304 305 DAT_RETURN dapls_ib_post_recv_one( 306 IN DAPL_EP *ep_ptr, 307 IN DAPL_COOKIE *dto_cookie, 308 IN DAT_LMR_TRIPLET *local_iov); 309 310 DAT_RETURN dapls_ib_post_srq( 311 IN DAPL_SRQ *srq_ptr, 312 IN DAPL_COOKIE *dto_cookie, 313 IN DAT_COUNT num_segments, 314 IN DAT_LMR_TRIPLET *local_iov); 315 316 DAT_RETURN dapls_ib_post_send( 317 IN DAPL_EP *ep_ptr, 318 IN ib_send_op_type_t op_type, 319 IN DAPL_COOKIE *dto_cookie, 320 IN DAT_COUNT num_segments, 321 IN DAT_LMR_TRIPLET *local_iov, 322 IN const DAT_RMR_TRIPLET *remote_iov, 323 IN DAT_COMPLETION_FLAGS completion_flags); 324 325 DAT_RETURN dapls_ib_post_send_one( 326 IN DAPL_EP *ep_ptr, 327 IN ib_send_op_type_t op_type, 328 IN DAPL_COOKIE *dto_cookie, 329 IN DAT_LMR_TRIPLET *local_iov, 330 IN const DAT_RMR_TRIPLET *remote_iov); 331 332 DAT_RETURN dapls_ib_lmr_sync_rdma_common( 333 IN DAT_IA_HANDLE ia_handle, 334 IN const DAT_LMR_TRIPLET *local_segments, 335 IN DAT_VLEN num_segments, 336 IN uint32_t op_type); 337 338 DAT_RETURN dapls_ib_srq_alloc( 339 IN DAPL_IA *ia_handle, 340 IN DAPL_SRQ *srq_handle); 341 342 void dapls_ib_srq_free( 343 IN DAPL_IA *ia_handle, 344 IN DAPL_SRQ *srq_handle); 345 346 DAT_RETURN dapls_ib_srq_resize( 347 IN DAPL_SRQ *srq_ptr, 348 IN DAT_COUNT srqlen); 349 350 DAPL_EP *dapls_ib_srq_lookup_ep( 351 IN DAPL_SRQ *srq_ptr, 352 IN ib_work_completion_t *cqe_ptr); 353 354 DAT_COUNT dapls_ib_max_request_iov( 355 IN DAT_COUNT iovs, 356 IN DAT_COUNT wqes, 357 IN DAT_COUNT max_iovs, 358 IN int max_inline_bytes); 359 360 /* SUNW */ 361 362 363 #ifdef IBAPI 364 #include "dapl_ibapi_dto.h" 365 #elif VAPI 366 #include "dapl_vapi_dto.h" 367 #endif 368 369 #ifdef __cplusplus 370 } 371 #endif 372 373 #endif /* _DAPL_ADAPTER_UTIL_H_ */ 374