/*
* 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-2003, Network Appliance, Inc. All rights reserved.
*/
/*
* Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
/*
*
* HEADER: dapl_adapter_util.h
*
* PURPOSE: Utility defs & routines for the adapter data structure
*
*/
#ifndef _DAPL_ADAPTER_UTIL_H_
#define _DAPL_ADAPTER_UTIL_H_
#ifdef __cplusplus
extern "C" {
#endif
/* Max number of cqes that can be polled from the CQ */
#define MAX_CQES_PER_POLL 8
typedef enum async_handler_type {
DAPL_ASYNC_UNAFILIATED,
DAPL_ASYNC_CQ_ERROR,
DAPL_ASYNC_CQ_COMPLETION,
DAPL_ASYNC_QP_ERROR
} DAPL_ASYNC_HANDLER_TYPE;
#ifdef CM_BUSTED
DAT_RETURN dapl_set_remote_lid(IN char *rhost_name);
#endif /* CM_BUSTED */
/* SUNW */
DAT_RETURN dapls_ib_enum_hcas(
IN DAPL_HCA **hca_list,
OUT DAT_COUNT *hca_count);
void dapls_ib_state_init(void);
void dapls_ib_state_fini(void);
/* SUNW */
DAT_RETURN dapls_ib_open_hca(
IN DAPL_HCA *hca_ptr,
OUT ib_hca_handle_t *ib_hca_handle);
DAT_RETURN dapls_ib_close_hca(
IN ib_hca_handle_t ib_hca_handle);
DAT_RETURN dapls_ib_qp_alloc(
IN DAPL_IA *ia_ptr,
IN DAPL_EP *ep_ptr,
IN DAPL_EP *ep_ctx_ptr);
DAT_RETURN dapls_ib_qp_free(
IN DAPL_IA *ia_ptr,
IN DAPL_EP *ep_ptr);
DAT_RETURN dapls_ib_qp_modify(
IN DAPL_IA *ia_ptr,
IN DAPL_EP *ep_ptr,
IN DAT_EP_ATTR *ep_attr);
DAT_RETURN dapls_ib_connect(
IN DAT_EP_HANDLE ep_handle,
IN DAT_IA_ADDRESS_PTR remote_ia_address,
IN DAT_CONN_QUAL remote_conn_qual,
IN DAT_COUNT prd_size,
IN DAPL_PRIVATE *prd_ptr,
IN DAT_TIMEOUT timeout);
DAT_RETURN dapls_ib_disconnect(
IN DAPL_EP *ep_ptr,
IN DAT_CLOSE_FLAGS completion_flags);
DAT_RETURN dapls_ib_setup_conn_listener(
IN DAPL_IA *ia_ptr,
IN DAT_UINT64 ServiceID,
IN DAPL_SP *sp_ptr);
DAT_RETURN dapls_ib_remove_conn_listener(
IN DAPL_IA *ia_ptr,
IN DAPL_SP *sp_ptr);
DAT_RETURN dapls_ib_accept_connection(
IN DAT_CR_HANDLE cr_handle,
IN DAT_EP_HANDLE ep_handle,
IN DAPL_PRIVATE *prd_ptr);
/* SUNW */
DAT_RETURN dapls_ib_reject_connection(
IN ib_cm_handle_t cm_handle,
IN int reject_reason,
IN DAPL_SP *sp_ptr);
DAT_RETURN dapls_ib_handoff_connection(
IN DAPL_CR *cr_ptr,
IN DAT_CONN_QUAL cr_handoff);
void dapls_ib_async_callback(
IN DAPL_EVD *async_evd,
IN ib_hca_handle_t hca_handle,
IN ib_error_record_t *event_ptr,
IN void *context);
/* SUNW */
DAT_RETURN dapls_ib_setup_async_callback(
IN DAPL_IA *ia_ptr,
IN DAPL_ASYNC_HANDLER_TYPE handler_type,
IN unsigned int *callback_handle,
IN ib_async_handler_t callback,
IN void *context);
DAT_RETURN dapls_ib_cq_alloc(
IN DAPL_IA *ia_ptr,
IN DAPL_EVD *evd_ptr,
IN DAPL_CNO *cno_ptr,
IN DAT_COUNT *cqlen);
/* SUNW */
DAT_RETURN dapls_ib_cq_resize(
IN DAPL_EVD *evd_ptr,
IN DAT_COUNT cqlen);
/* SUNW */
DAT_RETURN dapls_ib_cq_free(
IN DAPL_IA *ia_ptr,
IN DAPL_EVD *evd_ptr);
DAT_RETURN dapls_set_cq_notify(
IN DAPL_IA *ia_ptr,
IN DAPL_EVD *evd_ptr);
/* SUNW */
DAT_RETURN dapls_set_cqN_notify(
IN DAPL_IA *ia_ptr,
IN DAPL_EVD *evd_ptr,
IN uint32_t events_needed);
/* SUNW */
DAT_RETURN dapls_ib_cqd_create(
IN DAPL_HCA *hca_ptr);
DAT_RETURN dapls_ib_cqd_destroy(
IN DAPL_HCA *hca_ptr);
DAT_RETURN dapls_ib_pd_alloc(
IN DAPL_IA *ia_ptr,
IN DAPL_PZ *pz);
DAT_RETURN dapls_ib_pd_free(
IN DAPL_PZ *pz);
DAT_RETURN dapls_ib_mr_register(
IN DAPL_IA *ia_ptr,
IN DAPL_LMR *lmr,
IN DAT_PVOID virt_addr,
IN DAT_VLEN length,
IN DAT_MEM_PRIV_FLAGS privileges);
DAT_RETURN dapls_ib_mr_register_shared(
IN DAPL_IA *ia_ptr,
IN DAPL_LMR *lmr,
IN DAT_PVOID virt_addr,
IN DAT_VLEN length,
IN DAT_LMR_COOKIE cookie,
IN DAT_MEM_PRIV_FLAGS privileges);
DAT_RETURN dapls_ib_mr_deregister(
IN DAPL_LMR *lmr);
DAT_RETURN dapls_ib_mr_register_lmr(
IN DAPL_IA *ia_ptr,
IN DAPL_LMR *lmr,
IN DAT_MEM_PRIV_FLAGS privileges);
DAT_RETURN dapls_ib_mw_alloc(
IN DAPL_RMR *rmr);
DAT_RETURN dapls_ib_mw_free(
IN DAPL_RMR *rmr);
DAT_RETURN dapls_ib_mw_bind(
IN DAPL_RMR *rmr,
IN DAT_LMR_CONTEXT lmr_context,
IN DAPL_EP *ep,
IN DAPL_COOKIE *cookie,
IN DAT_VADDR virtual_address,
IN DAT_VLEN length,
IN DAT_MEM_PRIV_FLAGS mem_priv,
IN DAT_COMPLETION_FLAGS completion_flags);
DAT_RETURN dapls_ib_mw_unbind(
IN DAPL_RMR *rmr,
IN DAT_LMR_CONTEXT lmr_context,
IN DAPL_EP *ep,
IN DAPL_COOKIE *cookie,
IN DAT_COMPLETION_FLAGS completion_flags);
DAT_RETURN dapls_ib_query_hca(
IN DAPL_HCA *hca_ptr,
OUT DAT_IA_ATTR *ia_attr,
OUT DAT_EP_ATTR *ep_attr,
OUT DAT_SOCK_ADDR6 *ip_addr,
OUT DAT_SRQ_ATTR *srq_attr);
void dapls_ib_reinit_ep(
IN DAPL_EP *ep_ptr);
void dapls_ib_connected(
IN DAPL_EP *ep_ptr);
void dapls_ib_disconnect_clean(
IN DAPL_EP *ep_ptr,
IN DAT_BOOLEAN passive,
IN const ib_cm_events_t ib_cm_event);
DAT_RETURN dapls_ib_get_async_event(
IN ib_error_record_t *cause_ptr,
OUT DAT_EVENT_NUMBER *async_event);
DAT_RETURN dapls_ib_cm_remote_addr(
IN DAT_HANDLE dat_handle,
IN DAPL_PRIVATE *prd_ptr,
OUT DAT_SOCK_ADDR6 *remote_ia_address);
/* SUNW */
void dapls_ib_store_premature_events(
IN ib_qp_handle_t qp_ptr,
IN ib_work_completion_t *cqe_ptr);
void dapls_ib_poll_premature_events(
IN DAPL_EP *ep_ptr,
OUT ib_work_completion_t **cqe_ptr,
OUT int *nevents);
void dapls_ib_free_premature_events(
IN DAPL_EP *ep_ptr,
IN int free_index);
DAT_RETURN dapls_ib_event_poll(
IN DAPL_EVD *evd_ptr,
IN uint64_t timeout,
IN uint_t threshold,
OUT dapl_ib_event_t *evp_ptr,
OUT int *num_events);
DAT_RETURN dapls_ib_event_wakeup(
IN DAPL_EVD *evd_ptr);
void dapls_ib_cq_peek(
IN DAPL_EVD *evd_ptr,
OUT int *num_cqe);
DAT_RETURN dapls_ib_modify_cno(
IN DAPL_EVD *evd_ptr,
IN DAPL_CNO *cno_ptr);
DAT_RETURN dapls_ib_cno_wait(
IN DAPL_CNO *cno_ptr,
IN DAT_TIMEOUT timeout,
IN DAPL_EVD **evd_ptr_p);
DAT_RETURN dapls_ib_cno_alloc(
IN DAPL_IA *ia_ptr,
IN DAPL_CNO *cno_ptr);
DAT_RETURN dapls_ib_cno_free(
IN DAPL_CNO *cno_ptr);
DAT_RETURN dapls_ib_post_recv(
IN DAPL_EP *ep_ptr,
IN DAPL_COOKIE *dto_cookie,
IN DAT_COUNT num_segments,
IN DAT_LMR_TRIPLET *local_iov,
IN DAT_COMPLETION_FLAGS completion_flags);
DAT_RETURN dapls_ib_post_recv_one(
IN DAPL_EP *ep_ptr,
IN DAPL_COOKIE *dto_cookie,
IN DAT_LMR_TRIPLET *local_iov);
DAT_RETURN dapls_ib_post_srq(
IN DAPL_SRQ *srq_ptr,
IN DAPL_COOKIE *dto_cookie,
IN DAT_COUNT num_segments,
IN DAT_LMR_TRIPLET *local_iov);
DAT_RETURN dapls_ib_post_send(
IN DAPL_EP *ep_ptr,
IN ib_send_op_type_t op_type,
IN DAPL_COOKIE *dto_cookie,
IN DAT_COUNT num_segments,
IN DAT_LMR_TRIPLET *local_iov,
IN const DAT_RMR_TRIPLET *remote_iov,
IN DAT_COMPLETION_FLAGS completion_flags);
DAT_RETURN dapls_ib_post_send_one(
IN DAPL_EP *ep_ptr,
IN ib_send_op_type_t op_type,
IN DAPL_COOKIE *dto_cookie,
IN DAT_LMR_TRIPLET *local_iov,
IN const DAT_RMR_TRIPLET *remote_iov);
DAT_RETURN dapls_ib_lmr_sync_rdma_common(
IN DAT_IA_HANDLE ia_handle,
IN const DAT_LMR_TRIPLET *local_segments,
IN DAT_VLEN num_segments,
IN uint32_t op_type);
DAT_RETURN dapls_ib_srq_alloc(
IN DAPL_IA *ia_handle,
IN DAPL_SRQ *srq_handle);
void dapls_ib_srq_free(
IN DAPL_IA *ia_handle,
IN DAPL_SRQ *srq_handle);
DAT_RETURN dapls_ib_srq_resize(
IN DAPL_SRQ *srq_ptr,
IN DAT_COUNT srqlen);
DAPL_EP *dapls_ib_srq_lookup_ep(
IN DAPL_SRQ *srq_ptr,
IN ib_work_completion_t *cqe_ptr);
DAT_COUNT dapls_ib_max_request_iov(
IN DAT_COUNT iovs,
IN DAT_COUNT wqes,
IN DAT_COUNT max_iovs,
IN int max_inline_bytes);
/* SUNW */
#ifdef IBAPI
#include "dapl_ibapi_dto.h"
#elif VAPI
#include "dapl_vapi_dto.h"
#endif
#ifdef __cplusplus
}
#endif
#endif /* _DAPL_ADAPTER_UTIL_H_ */