2N/A/*
2N/A * CDDL HEADER START
2N/A *
2N/A * The contents of this file are subject to the terms of the
2N/A * Common Development and Distribution License (the "License").
2N/A * You may not use this file except in compliance with the License.
2N/A *
2N/A * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
2N/A * or http://www.opensolaris.org/os/licensing.
2N/A * See the License for the specific language governing permissions
2N/A * and limitations under the License.
2N/A *
2N/A * When distributing Covered Code, include this CDDL HEADER in each
2N/A * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
2N/A * If applicable, add the following below this CDDL HEADER, with the
2N/A * fields enclosed by brackets "[]" replaced with your own identifying
2N/A * information: Portions Copyright [yyyy] [name of copyright owner]
2N/A *
2N/A * CDDL HEADER END
2N/A */
2N/A
2N/A/*
2N/A * Copyright (c) 2002-2003, Network Appliance, Inc. All rights reserved.
2N/A */
2N/A
2N/A/*
2N/A * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
2N/A * Use is subject to license terms.
2N/A */
2N/A
2N/A/*
2N/A *
2N/A * HEADER: dapl_adapter_util.h
2N/A *
2N/A * PURPOSE: Utility defs & routines for the adapter data structure
2N/A *
2N/A */
2N/A
2N/A#ifndef _DAPL_ADAPTER_UTIL_H_
2N/A#define _DAPL_ADAPTER_UTIL_H_
2N/A
2N/A#ifdef __cplusplus
2N/Aextern "C" {
2N/A#endif
2N/A
2N/A/* Max number of cqes that can be polled from the CQ */
2N/A#define MAX_CQES_PER_POLL 8
2N/A
2N/Atypedef enum async_handler_type {
2N/A DAPL_ASYNC_UNAFILIATED,
2N/A DAPL_ASYNC_CQ_ERROR,
2N/A DAPL_ASYNC_CQ_COMPLETION,
2N/A DAPL_ASYNC_QP_ERROR
2N/A} DAPL_ASYNC_HANDLER_TYPE;
2N/A
2N/A
2N/A#ifdef CM_BUSTED
2N/ADAT_RETURN dapl_set_remote_lid(IN char *rhost_name);
2N/A#endif /* CM_BUSTED */
2N/A
2N/A/* SUNW */
2N/ADAT_RETURN dapls_ib_enum_hcas(
2N/A IN DAPL_HCA **hca_list,
2N/A OUT DAT_COUNT *hca_count);
2N/A
2N/Avoid dapls_ib_state_init(void);
2N/Avoid dapls_ib_state_fini(void);
2N/A/* SUNW */
2N/A
2N/ADAT_RETURN dapls_ib_open_hca(
2N/A IN DAPL_HCA *hca_ptr,
2N/A OUT ib_hca_handle_t *ib_hca_handle);
2N/A
2N/ADAT_RETURN dapls_ib_close_hca(
2N/A IN ib_hca_handle_t ib_hca_handle);
2N/A
2N/ADAT_RETURN dapls_ib_qp_alloc(
2N/A IN DAPL_IA *ia_ptr,
2N/A IN DAPL_EP *ep_ptr,
2N/A IN DAPL_EP *ep_ctx_ptr);
2N/A
2N/ADAT_RETURN dapls_ib_qp_free(
2N/A IN DAPL_IA *ia_ptr,
2N/A IN DAPL_EP *ep_ptr);
2N/A
2N/ADAT_RETURN dapls_ib_qp_modify(
2N/A IN DAPL_IA *ia_ptr,
2N/A IN DAPL_EP *ep_ptr,
2N/A IN DAT_EP_ATTR *ep_attr);
2N/A
2N/ADAT_RETURN dapls_ib_connect(
2N/A IN DAT_EP_HANDLE ep_handle,
2N/A IN DAT_IA_ADDRESS_PTR remote_ia_address,
2N/A IN DAT_CONN_QUAL remote_conn_qual,
2N/A IN DAT_COUNT prd_size,
2N/A IN DAPL_PRIVATE *prd_ptr,
2N/A IN DAT_TIMEOUT timeout);
2N/A
2N/ADAT_RETURN dapls_ib_disconnect(
2N/A IN DAPL_EP *ep_ptr,
2N/A IN DAT_CLOSE_FLAGS completion_flags);
2N/A
2N/ADAT_RETURN dapls_ib_setup_conn_listener(
2N/A IN DAPL_IA *ia_ptr,
2N/A IN DAT_UINT64 ServiceID,
2N/A IN DAPL_SP *sp_ptr);
2N/A
2N/ADAT_RETURN dapls_ib_remove_conn_listener(
2N/A IN DAPL_IA *ia_ptr,
2N/A IN DAPL_SP *sp_ptr);
2N/A
2N/ADAT_RETURN dapls_ib_accept_connection(
2N/A IN DAT_CR_HANDLE cr_handle,
2N/A IN DAT_EP_HANDLE ep_handle,
2N/A IN DAPL_PRIVATE *prd_ptr);
2N/A
2N/A/* SUNW */
2N/ADAT_RETURN dapls_ib_reject_connection(
2N/A IN ib_cm_handle_t cm_handle,
2N/A IN int reject_reason,
2N/A IN DAPL_SP *sp_ptr);
2N/A
2N/ADAT_RETURN dapls_ib_handoff_connection(
2N/A IN DAPL_CR *cr_ptr,
2N/A IN DAT_CONN_QUAL cr_handoff);
2N/A
2N/Avoid dapls_ib_async_callback(
2N/A IN DAPL_EVD *async_evd,
2N/A IN ib_hca_handle_t hca_handle,
2N/A IN ib_error_record_t *event_ptr,
2N/A IN void *context);
2N/A/* SUNW */
2N/A
2N/ADAT_RETURN dapls_ib_setup_async_callback(
2N/A IN DAPL_IA *ia_ptr,
2N/A IN DAPL_ASYNC_HANDLER_TYPE handler_type,
2N/A IN unsigned int *callback_handle,
2N/A IN ib_async_handler_t callback,
2N/A IN void *context);
2N/A
2N/ADAT_RETURN dapls_ib_cq_alloc(
2N/A IN DAPL_IA *ia_ptr,
2N/A IN DAPL_EVD *evd_ptr,
2N/A IN DAPL_CNO *cno_ptr,
2N/A IN DAT_COUNT *cqlen);
2N/A
2N/A/* SUNW */
2N/ADAT_RETURN dapls_ib_cq_resize(
2N/A IN DAPL_EVD *evd_ptr,
2N/A IN DAT_COUNT cqlen);
2N/A/* SUNW */
2N/A
2N/ADAT_RETURN dapls_ib_cq_free(
2N/A IN DAPL_IA *ia_ptr,
2N/A IN DAPL_EVD *evd_ptr);
2N/A
2N/ADAT_RETURN dapls_set_cq_notify(
2N/A IN DAPL_IA *ia_ptr,
2N/A IN DAPL_EVD *evd_ptr);
2N/A
2N/A/* SUNW */
2N/ADAT_RETURN dapls_set_cqN_notify(
2N/A IN DAPL_IA *ia_ptr,
2N/A IN DAPL_EVD *evd_ptr,
2N/A IN uint32_t events_needed);
2N/A/* SUNW */
2N/A
2N/ADAT_RETURN dapls_ib_cqd_create(
2N/A IN DAPL_HCA *hca_ptr);
2N/A
2N/ADAT_RETURN dapls_ib_cqd_destroy(
2N/A IN DAPL_HCA *hca_ptr);
2N/A
2N/ADAT_RETURN dapls_ib_pd_alloc(
2N/A IN DAPL_IA *ia_ptr,
2N/A IN DAPL_PZ *pz);
2N/A
2N/ADAT_RETURN dapls_ib_pd_free(
2N/A IN DAPL_PZ *pz);
2N/A
2N/ADAT_RETURN dapls_ib_mr_register(
2N/A IN DAPL_IA *ia_ptr,
2N/A IN DAPL_LMR *lmr,
2N/A IN DAT_PVOID virt_addr,
2N/A IN DAT_VLEN length,
2N/A IN DAT_MEM_PRIV_FLAGS privileges);
2N/A
2N/ADAT_RETURN dapls_ib_mr_register_shared(
2N/A IN DAPL_IA *ia_ptr,
2N/A IN DAPL_LMR *lmr,
2N/A IN DAT_PVOID virt_addr,
2N/A IN DAT_VLEN length,
2N/A IN DAT_LMR_COOKIE cookie,
2N/A IN DAT_MEM_PRIV_FLAGS privileges);
2N/A
2N/ADAT_RETURN dapls_ib_mr_deregister(
2N/A IN DAPL_LMR *lmr);
2N/A
2N/ADAT_RETURN dapls_ib_mr_register_lmr(
2N/A IN DAPL_IA *ia_ptr,
2N/A IN DAPL_LMR *lmr,
2N/A IN DAT_MEM_PRIV_FLAGS privileges);
2N/A
2N/ADAT_RETURN dapls_ib_mw_alloc(
2N/A IN DAPL_RMR *rmr);
2N/A
2N/ADAT_RETURN dapls_ib_mw_free(
2N/A IN DAPL_RMR *rmr);
2N/A
2N/ADAT_RETURN dapls_ib_mw_bind(
2N/A IN DAPL_RMR *rmr,
2N/A IN DAT_LMR_CONTEXT lmr_context,
2N/A IN DAPL_EP *ep,
2N/A IN DAPL_COOKIE *cookie,
2N/A IN DAT_VADDR virtual_address,
2N/A IN DAT_VLEN length,
2N/A IN DAT_MEM_PRIV_FLAGS mem_priv,
2N/A IN DAT_COMPLETION_FLAGS completion_flags);
2N/A
2N/ADAT_RETURN dapls_ib_mw_unbind(
2N/A IN DAPL_RMR *rmr,
2N/A IN DAT_LMR_CONTEXT lmr_context,
2N/A IN DAPL_EP *ep,
2N/A IN DAPL_COOKIE *cookie,
2N/A IN DAT_COMPLETION_FLAGS completion_flags);
2N/A
2N/ADAT_RETURN dapls_ib_query_hca(
2N/A IN DAPL_HCA *hca_ptr,
2N/A OUT DAT_IA_ATTR *ia_attr,
2N/A OUT DAT_EP_ATTR *ep_attr,
2N/A OUT DAT_SOCK_ADDR6 *ip_addr,
2N/A OUT DAT_SRQ_ATTR *srq_attr);
2N/A
2N/Avoid dapls_ib_reinit_ep(
2N/A IN DAPL_EP *ep_ptr);
2N/A
2N/Avoid dapls_ib_connected(
2N/A IN DAPL_EP *ep_ptr);
2N/A
2N/Avoid dapls_ib_disconnect_clean(
2N/A IN DAPL_EP *ep_ptr,
2N/A IN DAT_BOOLEAN passive,
2N/A IN const ib_cm_events_t ib_cm_event);
2N/A
2N/ADAT_RETURN dapls_ib_get_async_event(
2N/A IN ib_error_record_t *cause_ptr,
2N/A OUT DAT_EVENT_NUMBER *async_event);
2N/A
2N/ADAT_RETURN dapls_ib_cm_remote_addr(
2N/A IN DAT_HANDLE dat_handle,
2N/A IN DAPL_PRIVATE *prd_ptr,
2N/A OUT DAT_SOCK_ADDR6 *remote_ia_address);
2N/A
2N/A/* SUNW */
2N/Avoid dapls_ib_store_premature_events(
2N/A IN ib_qp_handle_t qp_ptr,
2N/A IN ib_work_completion_t *cqe_ptr);
2N/A
2N/Avoid dapls_ib_poll_premature_events(
2N/A IN DAPL_EP *ep_ptr,
2N/A OUT ib_work_completion_t **cqe_ptr,
2N/A OUT int *nevents);
2N/A
2N/Avoid dapls_ib_free_premature_events(
2N/A IN DAPL_EP *ep_ptr,
2N/A IN int free_index);
2N/A
2N/ADAT_RETURN dapls_ib_event_poll(
2N/A IN DAPL_EVD *evd_ptr,
2N/A IN uint64_t timeout,
2N/A IN uint_t threshold,
2N/A OUT dapl_ib_event_t *evp_ptr,
2N/A OUT int *num_events);
2N/A
2N/ADAT_RETURN dapls_ib_event_wakeup(
2N/A IN DAPL_EVD *evd_ptr);
2N/A
2N/Avoid dapls_ib_cq_peek(
2N/A IN DAPL_EVD *evd_ptr,
2N/A OUT int *num_cqe);
2N/A
2N/ADAT_RETURN dapls_ib_modify_cno(
2N/A IN DAPL_EVD *evd_ptr,
2N/A IN DAPL_CNO *cno_ptr);
2N/A
2N/ADAT_RETURN dapls_ib_cno_wait(
2N/A IN DAPL_CNO *cno_ptr,
2N/A IN DAT_TIMEOUT timeout,
2N/A IN DAPL_EVD **evd_ptr_p);
2N/A
2N/ADAT_RETURN dapls_ib_cno_alloc(
2N/A IN DAPL_IA *ia_ptr,
2N/A IN DAPL_CNO *cno_ptr);
2N/A
2N/ADAT_RETURN dapls_ib_cno_free(
2N/A IN DAPL_CNO *cno_ptr);
2N/A
2N/ADAT_RETURN dapls_ib_post_recv(
2N/A IN DAPL_EP *ep_ptr,
2N/A IN DAPL_COOKIE *dto_cookie,
2N/A IN DAT_COUNT num_segments,
2N/A IN DAT_LMR_TRIPLET *local_iov,
2N/A IN DAT_COMPLETION_FLAGS completion_flags);
2N/A
2N/ADAT_RETURN dapls_ib_post_recv_one(
2N/A IN DAPL_EP *ep_ptr,
2N/A IN DAPL_COOKIE *dto_cookie,
2N/A IN DAT_LMR_TRIPLET *local_iov);
2N/A
2N/ADAT_RETURN dapls_ib_post_srq(
2N/A IN DAPL_SRQ *srq_ptr,
2N/A IN DAPL_COOKIE *dto_cookie,
2N/A IN DAT_COUNT num_segments,
2N/A IN DAT_LMR_TRIPLET *local_iov);
2N/A
2N/ADAT_RETURN dapls_ib_post_send(
2N/A IN DAPL_EP *ep_ptr,
2N/A IN ib_send_op_type_t op_type,
2N/A IN DAPL_COOKIE *dto_cookie,
2N/A IN DAT_COUNT num_segments,
2N/A IN DAT_LMR_TRIPLET *local_iov,
2N/A IN const DAT_RMR_TRIPLET *remote_iov,
2N/A IN DAT_COMPLETION_FLAGS completion_flags);
2N/A
2N/ADAT_RETURN dapls_ib_post_send_one(
2N/A IN DAPL_EP *ep_ptr,
2N/A IN ib_send_op_type_t op_type,
2N/A IN DAPL_COOKIE *dto_cookie,
2N/A IN DAT_LMR_TRIPLET *local_iov,
2N/A IN const DAT_RMR_TRIPLET *remote_iov);
2N/A
2N/ADAT_RETURN dapls_ib_lmr_sync_rdma_common(
2N/A IN DAT_IA_HANDLE ia_handle,
2N/A IN const DAT_LMR_TRIPLET *local_segments,
2N/A IN DAT_VLEN num_segments,
2N/A IN uint32_t op_type);
2N/A
2N/ADAT_RETURN dapls_ib_srq_alloc(
2N/A IN DAPL_IA *ia_handle,
2N/A IN DAPL_SRQ *srq_handle);
2N/A
2N/Avoid dapls_ib_srq_free(
2N/A IN DAPL_IA *ia_handle,
2N/A IN DAPL_SRQ *srq_handle);
2N/A
2N/ADAT_RETURN dapls_ib_srq_resize(
2N/A IN DAPL_SRQ *srq_ptr,
2N/A IN DAT_COUNT srqlen);
2N/A
2N/ADAPL_EP *dapls_ib_srq_lookup_ep(
2N/A IN DAPL_SRQ *srq_ptr,
2N/A IN ib_work_completion_t *cqe_ptr);
2N/A
2N/ADAT_COUNT dapls_ib_max_request_iov(
2N/A IN DAT_COUNT iovs,
2N/A IN DAT_COUNT wqes,
2N/A IN DAT_COUNT max_iovs,
2N/A IN int max_inline_bytes);
2N/A
2N/A/* SUNW */
2N/A
2N/A
2N/A#ifdef IBAPI
2N/A#include "dapl_ibapi_dto.h"
2N/A#elif VAPI
2N/A#include "dapl_vapi_dto.h"
2N/A#endif
2N/A
2N/A#ifdef __cplusplus
2N/A}
2N/A#endif
2N/A
2N/A#endif /* _DAPL_ADAPTER_UTIL_H_ */