xref: /titanic_52/usr/src/uts/common/sys/ib/ibtl/ibci.h (revision 17a2b317610f531d565bf4e940433aab2d9e6985)
17c478bd9Sstevel@tonic-gate /*
27c478bd9Sstevel@tonic-gate  * CDDL HEADER START
37c478bd9Sstevel@tonic-gate  *
47c478bd9Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
503494a98SBill Taylor  * Common Development and Distribution License (the "License").
603494a98SBill Taylor  * You may not use this file except in compliance with the License.
77c478bd9Sstevel@tonic-gate  *
87c478bd9Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
97c478bd9Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
107c478bd9Sstevel@tonic-gate  * See the License for the specific language governing permissions
117c478bd9Sstevel@tonic-gate  * and limitations under the License.
127c478bd9Sstevel@tonic-gate  *
137c478bd9Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
147c478bd9Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
157c478bd9Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
167c478bd9Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
177c478bd9Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
187c478bd9Sstevel@tonic-gate  *
197c478bd9Sstevel@tonic-gate  * CDDL HEADER END
207c478bd9Sstevel@tonic-gate  */
217c478bd9Sstevel@tonic-gate /*
22*17a2b317SBill Taylor  * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
237c478bd9Sstevel@tonic-gate  */
247c478bd9Sstevel@tonic-gate 
257c478bd9Sstevel@tonic-gate #ifndef	_SYS_IB_IBTL_IBCI_H
267c478bd9Sstevel@tonic-gate #define	_SYS_IB_IBTL_IBCI_H
277c478bd9Sstevel@tonic-gate 
287c478bd9Sstevel@tonic-gate /*
297c478bd9Sstevel@tonic-gate  * ibci.h
307c478bd9Sstevel@tonic-gate  *
317c478bd9Sstevel@tonic-gate  * Define the data structures and function prototypes that comprise
327c478bd9Sstevel@tonic-gate  * the IB Channel API (API for HCA drivers).  All CI handles are opaque
337c478bd9Sstevel@tonic-gate  * to the IBTF here, real data is accessed in the HCA driver by a
347c478bd9Sstevel@tonic-gate  * typecast to a driver specific struct.
357c478bd9Sstevel@tonic-gate  */
367c478bd9Sstevel@tonic-gate 
377c478bd9Sstevel@tonic-gate #include <sys/ib/ibtl/ibtl_types.h>
387c478bd9Sstevel@tonic-gate #include <sys/ib/ibtl/ibtl_ci_types.h>
397c478bd9Sstevel@tonic-gate #include <sys/modctl.h>
407c478bd9Sstevel@tonic-gate 
417c478bd9Sstevel@tonic-gate 
427c478bd9Sstevel@tonic-gate #ifdef	__cplusplus
437c478bd9Sstevel@tonic-gate extern "C" {
447c478bd9Sstevel@tonic-gate #endif
457c478bd9Sstevel@tonic-gate 
467c478bd9Sstevel@tonic-gate /*
477c478bd9Sstevel@tonic-gate  * Define CI opaque IBTF handles.
487c478bd9Sstevel@tonic-gate  */
497c478bd9Sstevel@tonic-gate typedef	struct	ibtl_qp_s	*ibtl_qp_hdl_t;		/* ibt_alloc_qp() */
507c478bd9Sstevel@tonic-gate typedef struct	ibtl_eec_s	*ibtl_eec_hdl_t;	/* ibt_alloc_eec() */
517c478bd9Sstevel@tonic-gate 
527c478bd9Sstevel@tonic-gate /*
537c478bd9Sstevel@tonic-gate  * Define IBTF opaque CI handles.
547c478bd9Sstevel@tonic-gate  */
557c478bd9Sstevel@tonic-gate typedef struct ibc_hca_s	*ibc_hca_hdl_t; /* HCA/CI Handle */
567c478bd9Sstevel@tonic-gate typedef struct ibc_pd_s		*ibc_pd_hdl_t;	/* Protection Domain Handle */
577c478bd9Sstevel@tonic-gate typedef	struct ibc_rdd_s	*ibc_rdd_hdl_t;	/* Reliable Datagram Domain */
587c478bd9Sstevel@tonic-gate typedef struct ibc_ah_s		*ibc_ah_hdl_t;	/* Address Handle */
597c478bd9Sstevel@tonic-gate typedef struct ibc_qp_s		*ibc_qp_hdl_t;	/* Queue Pair Handle */
607c478bd9Sstevel@tonic-gate typedef struct ibc_srq_s	*ibc_srq_hdl_t;	/* Shared Receive Queue Hdl */
617c478bd9Sstevel@tonic-gate typedef struct ibc_qpn_s	*ibc_qpn_hdl_t;	/* Queue Pair Number Handle */
627c478bd9Sstevel@tonic-gate typedef struct ibc_cq_s		*ibc_cq_hdl_t;	/* Completion Queue Handle */
637c478bd9Sstevel@tonic-gate typedef struct ibc_eec_s	*ibc_eec_hdl_t; /* End-to-End Context Handle */
6403494a98SBill Taylor typedef struct ibc_mem_alloc_s	*ibc_mem_alloc_hdl_t; /* Memory Handle */
657c478bd9Sstevel@tonic-gate 
66*17a2b317SBill Taylor #define	ibc_sched_hdl_t		ibt_sched_hdl_t	/* CQ Sched Handle */
6743ed929aSsrust #define	ibc_fmr_pool_hdl_t	ibt_fmr_pool_hdl_t /* FMR Pool Handle */
687c478bd9Sstevel@tonic-gate #define	ibc_mr_hdl_t	ibt_mr_hdl_t	/* Memory Region Handle */
697c478bd9Sstevel@tonic-gate #define	ibc_mw_hdl_t	ibt_mw_hdl_t	/* Memory Window Handle */
707c478bd9Sstevel@tonic-gate #define	ibc_ma_hdl_t	ibt_ma_hdl_t	/* Memory Area Handle */
7103494a98SBill Taylor #define	ibc_mi_hdl_t	ibt_mi_hdl_t	/* Memory IOV Handle */
727c478bd9Sstevel@tonic-gate 
737c478bd9Sstevel@tonic-gate /* Handle used by CI for up calls to IBTF */
747c478bd9Sstevel@tonic-gate typedef struct ibtl_hca_devinfo_s *ibc_clnt_hdl_t;	/* ibc_attach() */
757c478bd9Sstevel@tonic-gate 
767c478bd9Sstevel@tonic-gate /*
777c478bd9Sstevel@tonic-gate  * Fields opaque to TI, but visible to CI
787c478bd9Sstevel@tonic-gate  */
797c478bd9Sstevel@tonic-gate 
807c478bd9Sstevel@tonic-gate /*
817c478bd9Sstevel@tonic-gate  * ibt_qp_alloc_attr_t
827c478bd9Sstevel@tonic-gate  */
837c478bd9Sstevel@tonic-gate #define	qp_ibc_scq_hdl	qp_opaque1
847c478bd9Sstevel@tonic-gate #define	qp_ibc_rcq_hdl	qp_opaque2
857c478bd9Sstevel@tonic-gate #define	qp_ibc_srq_hdl	qp_opaque3
867c478bd9Sstevel@tonic-gate 
877c478bd9Sstevel@tonic-gate 
887c478bd9Sstevel@tonic-gate /*
897c478bd9Sstevel@tonic-gate  * ibt_status_t
907c478bd9Sstevel@tonic-gate  */
917c478bd9Sstevel@tonic-gate #define	IBT_HCA_RAWD_CHAN_EXCEEDED	IBT_ERR_OPAQUE1	/* Requested raw QP */
927c478bd9Sstevel@tonic-gate 							/* exceeds HCA max */
937c478bd9Sstevel@tonic-gate 							/* limit */
947c478bd9Sstevel@tonic-gate #define	IBT_CHAN_RAWD_NOT_SUPPORTED	IBT_ERR_OPAQUE2	/* Raw datagram QPs */
957c478bd9Sstevel@tonic-gate 							/* not supported */
967c478bd9Sstevel@tonic-gate #define	IBT_CHAN_RD_NOT_SUPPORTED	IBT_ERR_OPAQUE3	/* RD not supported */
977c478bd9Sstevel@tonic-gate #define	IBT_EEC_HDL_INVALID		IBT_ERR_OPAQUE4	/* Invalid EEC handle */
987c478bd9Sstevel@tonic-gate #define	IBT_EEC_STATE_INVALID		IBT_ERR_OPAQUE5	/* Invalid EEC State */
997c478bd9Sstevel@tonic-gate #define	IBT_EEC_ATTR_RO			IBT_ERR_OPAQUE6	/* Can't Change EEC */
1007c478bd9Sstevel@tonic-gate 							/* Attribute */
1017c478bd9Sstevel@tonic-gate #define	IBT_RDD_IN_USE			IBT_ERR_OPAQUE7	/* RDD in Use */
1027c478bd9Sstevel@tonic-gate #define	IBT_RDD_HDL_INVALID		IBT_ERR_OPAQUE8	/* Invalid RDD */
1037c478bd9Sstevel@tonic-gate #define	IBT_RNR_NAK_TIMER_INVALID	IBT_ERR_OPAQUE9	/* Invalid RNR NAK */
1047c478bd9Sstevel@tonic-gate 							/* Timer Value */
1057c478bd9Sstevel@tonic-gate #define	IBT_RDD_NOT_SUPPORTED		IBT_ERR_OPAQUE10
1067c478bd9Sstevel@tonic-gate 
1077c478bd9Sstevel@tonic-gate 
1087c478bd9Sstevel@tonic-gate /*
1097c478bd9Sstevel@tonic-gate  * ibt_wc_status_t
1107c478bd9Sstevel@tonic-gate  */
1117c478bd9Sstevel@tonic-gate #define	IBT_WC_LOCAL_EEC_OP_ERR		12	/* Internal consistency error */
1127c478bd9Sstevel@tonic-gate #define	IBT_WC_LOCAL_RDD_VIOLATION_ERR	30	/* The RDD associated with */
1137c478bd9Sstevel@tonic-gate 						/* the QP does not match */
1147c478bd9Sstevel@tonic-gate 						/* the RDD associated with */
1157c478bd9Sstevel@tonic-gate 						/* the EE Context */
1167c478bd9Sstevel@tonic-gate #define	IBT_WC_REMOTE_RD_REQ_INVALID	31	/* Detected an invalid */
1177c478bd9Sstevel@tonic-gate 						/* incoming RD message */
1187c478bd9Sstevel@tonic-gate #define	IBT_WC_EEC_REMOTE_ABORTED	32	/* Requester aborted the */
1197c478bd9Sstevel@tonic-gate 						/* operation */
1207c478bd9Sstevel@tonic-gate #define	IBT_WC_EEC_NUM_INVALID		33	/* Invalid EEC Number */
1217c478bd9Sstevel@tonic-gate 						/* detected */
1227c478bd9Sstevel@tonic-gate #define	IBT_WC_EEC_STATE_INVALID	34	/* Invalid EEC state */
1237c478bd9Sstevel@tonic-gate 
1247c478bd9Sstevel@tonic-gate /*
1257c478bd9Sstevel@tonic-gate  * ibt_async_code_t
1267c478bd9Sstevel@tonic-gate  */
1277c478bd9Sstevel@tonic-gate #define	IBT_EVENT_PATH_MIGRATED_EEC	IBT_ASYNC_OPAQUE1
1287c478bd9Sstevel@tonic-gate #define	IBT_ERROR_CATASTROPHIC_EEC	IBT_ASYNC_OPAQUE3
1297c478bd9Sstevel@tonic-gate #define	IBT_ERROR_PATH_MIGRATE_REQ_EEC	IBT_ASYNC_OPAQUE4
1307c478bd9Sstevel@tonic-gate 
1317c478bd9Sstevel@tonic-gate /*
1327c478bd9Sstevel@tonic-gate  * ibt_object_type_t
1337c478bd9Sstevel@tonic-gate  */
1347c478bd9Sstevel@tonic-gate #define	IBT_HDL_EEC	IBT_HDL_OPAQUE1
1357c478bd9Sstevel@tonic-gate #define	IBT_HDL_RDD	IBT_HDL_OPAQUE2
1367c478bd9Sstevel@tonic-gate 
1377c478bd9Sstevel@tonic-gate 
1387c478bd9Sstevel@tonic-gate /*
1397c478bd9Sstevel@tonic-gate  * ibt_wc_t
1407c478bd9Sstevel@tonic-gate  */
14103494a98SBill Taylor #define	wc_eecn		wc_detail	/* End-to-End Context RD's only */
1427c478bd9Sstevel@tonic-gate 
1437c478bd9Sstevel@tonic-gate 
1447c478bd9Sstevel@tonic-gate /* Channel Interface version */
145*17a2b317SBill Taylor typedef int ibc_version_t;
146*17a2b317SBill Taylor #define	IBCI_V1	1
147*17a2b317SBill Taylor #define	IBCI_V2	2
148*17a2b317SBill Taylor #define	IBCI_V3	3
149*17a2b317SBill Taylor #define	IBCI_V4	4
1507c478bd9Sstevel@tonic-gate 
1517c478bd9Sstevel@tonic-gate 
1527c478bd9Sstevel@tonic-gate typedef enum ibc_free_qp_flags_e {
1537c478bd9Sstevel@tonic-gate 	IBC_FREE_QP_AND_QPN	= 0,	/* free all qp resources */
1547c478bd9Sstevel@tonic-gate 	IBC_FREE_QP_ONLY	= 1	/* OK to free the QP, but the QPN */
1557c478bd9Sstevel@tonic-gate 					/* cannot be reused until a future */
1567c478bd9Sstevel@tonic-gate 					/* call to ibc_release_qpn(qpn_hdl), */
1577c478bd9Sstevel@tonic-gate 					/* where qpn_hdl is a return value */
1587c478bd9Sstevel@tonic-gate 					/* of ibc_free_qp() */
1597c478bd9Sstevel@tonic-gate } ibc_free_qp_flags_t;
1607c478bd9Sstevel@tonic-gate 
1617c478bd9Sstevel@tonic-gate /*
1627c478bd9Sstevel@tonic-gate  * RDD alloc flags
1637c478bd9Sstevel@tonic-gate  */
1647c478bd9Sstevel@tonic-gate typedef enum ibc_rdd_flags_e {
1657c478bd9Sstevel@tonic-gate 	IBT_RDD_NO_FLAGS	= 0,
1667c478bd9Sstevel@tonic-gate 	IBT_RDD_USER_MAP	= (1 << 0),
1677c478bd9Sstevel@tonic-gate 	IBT_RDD_DEFER_ALLOC	= (1 << 1)
1687c478bd9Sstevel@tonic-gate } ibc_rdd_flags_t;
1697c478bd9Sstevel@tonic-gate 
1707c478bd9Sstevel@tonic-gate /*
1717c478bd9Sstevel@tonic-gate  * EEC alloc flags
1727c478bd9Sstevel@tonic-gate  */
1737c478bd9Sstevel@tonic-gate typedef enum ibc_eec_flags_e {
1747c478bd9Sstevel@tonic-gate 	IBT_EEC_NO_FLAGS	= 0,
1757c478bd9Sstevel@tonic-gate 	IBT_EEC_USER_MAP	= (1 << 0),
1767c478bd9Sstevel@tonic-gate 	IBT_EEC_DEFER_ALLOC	= (1 << 1)
1777c478bd9Sstevel@tonic-gate } ibc_eec_flags_t;
1787c478bd9Sstevel@tonic-gate 
1797c478bd9Sstevel@tonic-gate /*
1807c478bd9Sstevel@tonic-gate  * Event data for asynchronous events and errors. The QP/EEC/CQ/SRQ handle,
1817c478bd9Sstevel@tonic-gate  * or port number associated with the Event/Error is passed as an argument
1827c478bd9Sstevel@tonic-gate  * to the async handler.
1837c478bd9Sstevel@tonic-gate  */
1847c478bd9Sstevel@tonic-gate typedef struct ibc_async_event_s {
1857c478bd9Sstevel@tonic-gate 	uint64_t	ev_fma_ena;	/* fault management error data */
1867c478bd9Sstevel@tonic-gate 	ibtl_qp_hdl_t	ev_qp_hdl;	/* IBTF QP handle. */
1877c478bd9Sstevel@tonic-gate 	ibtl_eec_hdl_t	ev_eec_hdl;	/* IBTF EEC handle. */
1887c478bd9Sstevel@tonic-gate 	ibt_cq_hdl_t	ev_cq_hdl;	/* IBT CQ handle. */
1897c478bd9Sstevel@tonic-gate 	ibt_srq_hdl_t	ev_srq_hdl;	/* SRQ handle */
19003494a98SBill Taylor 	ibt_port_change_t ev_port_flags; /* Port Change flags */
19103494a98SBill Taylor 	uint8_t		ev_port;	/* For PORT UP/DOWN/CHANGE events */
192*17a2b317SBill Taylor 	ibt_fc_syndrome_t ev_fc;	/* FEXCH syndrome */
1937c478bd9Sstevel@tonic-gate } ibc_async_event_t;
1947c478bd9Sstevel@tonic-gate 
1957c478bd9Sstevel@tonic-gate 
1967c478bd9Sstevel@tonic-gate typedef struct ibc_operations_s {
1977c478bd9Sstevel@tonic-gate 	/* HCA */
1987c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_query_hca_ports)(ibc_hca_hdl_t hca, uint8_t port,
1997c478bd9Sstevel@tonic-gate 	    ibt_hca_portinfo_t *info_p);
2007c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_modify_ports)(ibc_hca_hdl_t hca, uint8_t port,
2017c478bd9Sstevel@tonic-gate 	    ibt_port_modify_flags_t flags, uint8_t init_type);
2027c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_modify_system_image)(ibc_hca_hdl_t hca,
2037c478bd9Sstevel@tonic-gate 	    ib_guid_t sys_guid);
2047c478bd9Sstevel@tonic-gate 
2057c478bd9Sstevel@tonic-gate 	/* Protection Domain */
2067c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_alloc_pd)(ibc_hca_hdl_t hca, ibt_pd_flags_t flags,
2077c478bd9Sstevel@tonic-gate 	    ibc_pd_hdl_t *pd_p);
2087c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_free_pd)(ibc_hca_hdl_t hca, ibc_pd_hdl_t pd);
2097c478bd9Sstevel@tonic-gate 
2107c478bd9Sstevel@tonic-gate 	/* Reliable Datagram Domain */
2117c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_alloc_rdd)(ibc_hca_hdl_t hca, ibc_rdd_flags_t flags,
2127c478bd9Sstevel@tonic-gate 	    ibc_rdd_hdl_t *rdd_p);
2137c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_free_rdd)(ibc_hca_hdl_t hca, ibc_rdd_hdl_t rdd);
2147c478bd9Sstevel@tonic-gate 
2157c478bd9Sstevel@tonic-gate 	/* Address Handle */
2167c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_alloc_ah)(ibc_hca_hdl_t hca, ibt_ah_flags_t flags,
2177c478bd9Sstevel@tonic-gate 	    ibc_pd_hdl_t pd, ibt_adds_vect_t *attr_p, ibc_ah_hdl_t *ah_p);
2187c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_free_ah)(ibc_hca_hdl_t hca, ibc_ah_hdl_t ah);
2197c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_query_ah)(ibc_hca_hdl_t hca, ibc_ah_hdl_t ah,
2207c478bd9Sstevel@tonic-gate 	    ibc_pd_hdl_t *pd_p, ibt_adds_vect_t *attr_p);
2217c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_modify_ah)(ibc_hca_hdl_t hca, ibc_ah_hdl_t ah,
2227c478bd9Sstevel@tonic-gate 	    ibt_adds_vect_t *attr_p);
2237c478bd9Sstevel@tonic-gate 
2247c478bd9Sstevel@tonic-gate 	/* Queue Pair */
2257c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_alloc_qp)(ibc_hca_hdl_t hca, ibtl_qp_hdl_t ibtl_qp,
2267c478bd9Sstevel@tonic-gate 	    ibt_qp_type_t type, ibt_qp_alloc_attr_t *attr_p,
2277c478bd9Sstevel@tonic-gate 	    ibt_chan_sizes_t *queue_sizes_p, ib_qpn_t *qpn, ibc_qp_hdl_t *qp_p);
2287c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_alloc_special_qp)(ibc_hca_hdl_t hca, uint8_t port,
2297c478bd9Sstevel@tonic-gate 	    ibtl_qp_hdl_t ibt_qp, ibt_sqp_type_t type,
2307c478bd9Sstevel@tonic-gate 	    ibt_qp_alloc_attr_t *attr_p, ibt_chan_sizes_t *queue_sizes_p,
2317c478bd9Sstevel@tonic-gate 	    ibc_qp_hdl_t *qp_p);
23203494a98SBill Taylor 	ibt_status_t (*ibc_alloc_qp_range)(ibc_hca_hdl_t hca, uint_t log2,
23303494a98SBill Taylor 	    ibtl_qp_hdl_t *ibtl_qp_p, ibt_qp_type_t type,
23403494a98SBill Taylor 	    ibt_qp_alloc_attr_t *attr_p, ibt_chan_sizes_t *queue_sizes_p,
23503494a98SBill Taylor 	    ibc_cq_hdl_t *send_cq_p, ibc_cq_hdl_t *recv_cq_p,
23603494a98SBill Taylor 	    ib_qpn_t *qpn_p, ibc_qp_hdl_t *qp_p);
2377c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_free_qp)(ibc_hca_hdl_t hca, ibc_qp_hdl_t qp,
2387c478bd9Sstevel@tonic-gate 	    ibc_free_qp_flags_t free_qp_flags, ibc_qpn_hdl_t *qpnh_p);
2397c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_release_qpn)(ibc_hca_hdl_t hca, ibc_qpn_hdl_t qpnh);
2407c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_query_qp)(ibc_hca_hdl_t hca, ibc_qp_hdl_t qp,
2417c478bd9Sstevel@tonic-gate 	    ibt_qp_query_attr_t *attr_p);
2427c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_modify_qp)(ibc_hca_hdl_t hca, ibc_qp_hdl_t qp,
2437c478bd9Sstevel@tonic-gate 	    ibt_cep_modify_flags_t flags, ibt_qp_info_t *info_p,
2447c478bd9Sstevel@tonic-gate 	    ibt_queue_sizes_t *actual_sz);
2457c478bd9Sstevel@tonic-gate 
2467c478bd9Sstevel@tonic-gate 	/* Completion Queues */
2477c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_alloc_cq)(ibc_hca_hdl_t hca, ibt_cq_hdl_t ibt_cq,
2487c478bd9Sstevel@tonic-gate 	    ibt_cq_attr_t *attr_p, ibc_cq_hdl_t *cq_p, uint_t *actual_size);
2497c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_free_cq)(ibc_hca_hdl_t hca, ibc_cq_hdl_t cq);
2507c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_query_cq)(ibc_hca_hdl_t hca, ibc_cq_hdl_t cq,
25103494a98SBill Taylor 	    uint_t *entries, uint_t *count_p, uint_t *usec_p,
25203494a98SBill Taylor 	    ibt_cq_handler_id_t *hid_p);
2537c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_resize_cq)(ibc_hca_hdl_t hca, ibc_cq_hdl_t cq,
2547c478bd9Sstevel@tonic-gate 	    uint_t size, uint_t *actual_size);
25503494a98SBill Taylor 	ibt_status_t (*ibc_modify_cq)(ibc_hca_hdl_t hca, ibc_cq_hdl_t cq,
25603494a98SBill Taylor 	    uint_t count, uint_t usec, ibt_cq_handler_id_t hid);
2577c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_alloc_cq_sched)(ibc_hca_hdl_t hca,
258*17a2b317SBill Taylor 	    ibt_cq_sched_attr_t *attr, ibc_sched_hdl_t *sched_hdl_p);
2597c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_free_cq_sched)(ibc_hca_hdl_t hca,
260*17a2b317SBill Taylor 	    ibc_sched_hdl_t sched_hdl);
261*17a2b317SBill Taylor 	ibt_status_t (*ibc_query_cq_handler_id)(ibc_hca_hdl_t hca,
262*17a2b317SBill Taylor 	    ibt_cq_handler_id_t hid, ibt_cq_handler_attr_t *attrs);
2637c478bd9Sstevel@tonic-gate 
2647c478bd9Sstevel@tonic-gate 	/* EE Context */
2657c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_alloc_eec)(ibc_hca_hdl_t hca, ibc_eec_flags_t flags,
2667c478bd9Sstevel@tonic-gate 	    ibtl_eec_hdl_t ibtl_eec, ibc_rdd_hdl_t rdd, ibc_eec_hdl_t *eec_p);
2677c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_free_eec)(ibc_hca_hdl_t hca, ibc_eec_hdl_t eec);
2687c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_query_eec)(ibc_hca_hdl_t hca, ibc_eec_hdl_t eec,
2697c478bd9Sstevel@tonic-gate 	    ibt_eec_query_attr_t *attr_p);
2707c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_modify_eec)(ibc_hca_hdl_t hca, ibc_eec_hdl_t eec,
2717c478bd9Sstevel@tonic-gate 	    ibt_cep_modify_flags_t flags, ibt_eec_info_t *info_p);
2727c478bd9Sstevel@tonic-gate 
2737c478bd9Sstevel@tonic-gate 	/* Memory Registration */
2747c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_register_mr)(ibc_hca_hdl_t hca, ibc_pd_hdl_t pd,
2757c478bd9Sstevel@tonic-gate 	    ibt_mr_attr_t *attr_p, void *ibtl_reserved, ibc_mr_hdl_t *mr_p,
2767c478bd9Sstevel@tonic-gate 	    ibt_mr_desc_t *mem_desc);
2777c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_register_buf)(ibc_hca_hdl_t hca, ibc_pd_hdl_t pd,
2787c478bd9Sstevel@tonic-gate 	    ibt_smr_attr_t *attrp, struct buf *buf, void *ibtl_reserved,
2797c478bd9Sstevel@tonic-gate 	    ibc_mr_hdl_t *mr_hdl_p, ibt_mr_desc_t *mem_desc);
2807c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_register_shared_mr)(ibc_hca_hdl_t hca,
2817c478bd9Sstevel@tonic-gate 	    ibc_mr_hdl_t mr, ibc_pd_hdl_t pd, ibt_smr_attr_t *attr_p,
2827c478bd9Sstevel@tonic-gate 	    void *ibtl_reserved, ibc_mr_hdl_t *mr_p, ibt_mr_desc_t *mem_desc);
2837c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_deregister_mr)(ibc_hca_hdl_t hca, ibc_mr_hdl_t mr);
2847c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_query_mr)(ibc_hca_hdl_t hca, ibc_mr_hdl_t mr,
2857c478bd9Sstevel@tonic-gate 	    ibt_mr_query_attr_t *info_p);
2867c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_reregister_mr)(ibc_hca_hdl_t hca, ibc_mr_hdl_t mr,
2877c478bd9Sstevel@tonic-gate 	    ibc_pd_hdl_t pd, ibt_mr_attr_t *attr_p, void *ibtl_reserved,
2887c478bd9Sstevel@tonic-gate 	    ibc_mr_hdl_t *mr_p, ibt_mr_desc_t *mem_desc);
2897c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_reregister_buf)(ibc_hca_hdl_t hca, ibc_mr_hdl_t mr,
2907c478bd9Sstevel@tonic-gate 	    ibc_pd_hdl_t pd, ibt_smr_attr_t *attrp, struct buf *buf,
2917c478bd9Sstevel@tonic-gate 	    void *ibtl_reserved, ibc_mr_hdl_t *mr_p, ibt_mr_desc_t *mem_desc);
2927c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_sync_mr)(ibc_hca_hdl_t hca,
2937c478bd9Sstevel@tonic-gate 	    ibt_mr_sync_t *mr_segments, size_t	num_segments);
2947c478bd9Sstevel@tonic-gate 
2957c478bd9Sstevel@tonic-gate 	/* Memory Window */
2967c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_alloc_mw)(ibc_hca_hdl_t hca, ibc_pd_hdl_t pd,
2977c478bd9Sstevel@tonic-gate 	    ibt_mw_flags_t flags, ibc_mw_hdl_t *mw_p, ibt_rkey_t *rkey_p);
2987c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_free_mw)(ibc_hca_hdl_t hca, ibc_mw_hdl_t mw);
2997c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_query_mw)(ibc_hca_hdl_t hca, ibc_mw_hdl_t mw,
3007c478bd9Sstevel@tonic-gate 	    ibt_mw_query_attr_t *mw_attr_p);
3017c478bd9Sstevel@tonic-gate 
3027c478bd9Sstevel@tonic-gate 	/* Multicast Group */
3037c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_attach_mcg)(ibc_hca_hdl_t hca, ibc_qp_hdl_t qp,
3047c478bd9Sstevel@tonic-gate 	    ib_gid_t gid, ib_lid_t lid);
3057c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_detach_mcg)(ibc_hca_hdl_t hca, ibc_qp_hdl_t qp,
3067c478bd9Sstevel@tonic-gate 	    ib_gid_t gid, ib_lid_t lid);
3077c478bd9Sstevel@tonic-gate 
3087c478bd9Sstevel@tonic-gate 	/* WR processing */
3097c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_post_send)(ibc_hca_hdl_t hca, ibc_qp_hdl_t qp,
3107c478bd9Sstevel@tonic-gate 	    ibt_send_wr_t *wr_p, uint_t num_wr, uint_t *num_posted);
3117c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_post_recv)(ibc_hca_hdl_t hca, ibc_qp_hdl_t qp,
3127c478bd9Sstevel@tonic-gate 	    ibt_recv_wr_t *wr_p, uint_t num_wr, uint_t *num_posted);
3137c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_poll_cq)(ibc_hca_hdl_t hca, ibc_cq_hdl_t cq,
3147c478bd9Sstevel@tonic-gate 	    ibt_wc_t *wc_p, uint_t num_wc, uint_t *num_polled);
3157c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_notify_cq)(ibc_hca_hdl_t hca, ibc_cq_hdl_t cq,
3167c478bd9Sstevel@tonic-gate 	    ibt_cq_notify_flags_t flags);
3177c478bd9Sstevel@tonic-gate 
3187c478bd9Sstevel@tonic-gate 	/* CI Object Private Data */
3197c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_ci_data_in)(ibc_hca_hdl_t hca,
3207c478bd9Sstevel@tonic-gate 	    ibt_ci_data_flags_t flags, ibt_object_type_t object,
3217c478bd9Sstevel@tonic-gate 	    void *ibc_object_handle, void *data_p, size_t data_sz);
3227c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_ci_data_out)(ibc_hca_hdl_t hca,
3237c478bd9Sstevel@tonic-gate 	    ibt_ci_data_flags_t flags, ibt_object_type_t object,
3247c478bd9Sstevel@tonic-gate 	    void *ibc_object_handle, void *data_p, size_t data_sz);
3257c478bd9Sstevel@tonic-gate 
3267c478bd9Sstevel@tonic-gate 	/* Shared Receive Queues */
3277c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_alloc_srq)(ibc_hca_hdl_t hca, ibt_srq_flags_t flags,
3287c478bd9Sstevel@tonic-gate 	    ibt_srq_hdl_t ibt_srq, ibc_pd_hdl_t pd, ibt_srq_sizes_t *sizes,
3297c478bd9Sstevel@tonic-gate 	    ibc_srq_hdl_t *ibc_srq_p, ibt_srq_sizes_t *real_size_p);
3307c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_free_srq)(ibc_hca_hdl_t hca, ibc_srq_hdl_t srq);
3317c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_query_srq)(ibc_hca_hdl_t hca, ibc_srq_hdl_t srq,
3327c478bd9Sstevel@tonic-gate 	    ibc_pd_hdl_t *pd_p, ibt_srq_sizes_t *sizes_p, uint_t *limit);
3337c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_modify_srq)(ibc_hca_hdl_t hca, ibc_srq_hdl_t srq,
3347c478bd9Sstevel@tonic-gate 	    ibt_srq_modify_flags_t flags, uint_t size, uint_t limit,
3357c478bd9Sstevel@tonic-gate 	    uint_t *real_size_p);
3367c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_post_srq)(ibc_hca_hdl_t hca, ibc_srq_hdl_t srq,
3377c478bd9Sstevel@tonic-gate 	    ibt_recv_wr_t *wr, uint_t num_wr, uint_t *num_posted_p);
3387c478bd9Sstevel@tonic-gate 
3397c478bd9Sstevel@tonic-gate 	/* Address translation */
3407c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_map_mem_area)(ibc_hca_hdl_t hca_hdl,
3417c478bd9Sstevel@tonic-gate 	    ibt_va_attr_t *va_attrs, void *ibtl_reserved,
342c7facc54SBill Taylor 	    uint_t paddr_list_len, ibt_reg_req_t *reg_req,
343c7facc54SBill Taylor 	    ibc_ma_hdl_t *ma_hdl_p);
3447c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_unmap_mem_area)(ibc_hca_hdl_t hca_hdl,
3457c478bd9Sstevel@tonic-gate 	    ibc_ma_hdl_t ma_hdl);
34603494a98SBill Taylor 	ibt_status_t (*ibc_map_mem_iov)(ibc_hca_hdl_t hca_hdl,
34703494a98SBill Taylor 	    ibt_iov_attr_t *iov_attr, ibt_all_wr_t *wr,
34803494a98SBill Taylor 	    ibc_mi_hdl_t *mi_hdl);
34903494a98SBill Taylor 	ibt_status_t (*ibc_unmap_mem_iov)(ibc_hca_hdl_t hca_hdl,
35003494a98SBill Taylor 	    ibc_mi_hdl_t mi_hdl);
3517c478bd9Sstevel@tonic-gate 
3527c478bd9Sstevel@tonic-gate 	/* Allocate L_Key */
3537c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_alloc_lkey)(ibc_hca_hdl_t hca_hdl, ibc_pd_hdl_t pd,
3547c478bd9Sstevel@tonic-gate 	    ibt_lkey_flags_t flags, uint_t phys_buf_list_sz,
3557c478bd9Sstevel@tonic-gate 	    ibc_mr_hdl_t *mr_p, ibt_pmr_desc_t *mem_desc_p);
3567c478bd9Sstevel@tonic-gate 
3577c478bd9Sstevel@tonic-gate 	/* Physical Register Memory Region */
3587c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_register_physical_mr)(ibc_hca_hdl_t hca,
3597c478bd9Sstevel@tonic-gate 	    ibc_pd_hdl_t pd, ibt_pmr_attr_t *mem_pattr, void *ibtl_reserved,
3607c478bd9Sstevel@tonic-gate 	    ibc_mr_hdl_t *mr_p, ibt_pmr_desc_t *mem_desc_p);
3617c478bd9Sstevel@tonic-gate 	ibt_status_t (*ibc_reregister_physical_mr)(ibc_hca_hdl_t hca,
3627c478bd9Sstevel@tonic-gate 	    ibc_mr_hdl_t mr, ibc_pd_hdl_t pd, ibt_pmr_attr_t *mem_pattr,
3637c478bd9Sstevel@tonic-gate 	    void *ibtl_reserved, ibc_mr_hdl_t *mr_p,
3647c478bd9Sstevel@tonic-gate 	    ibt_pmr_desc_t *mem_desc_p);
36543ed929aSsrust 
36643ed929aSsrust 	/* Fast Memory Registration (FMR) */
36743ed929aSsrust 	ibt_status_t (*ibc_create_fmr_pool)(ibc_hca_hdl_t hca, ibc_pd_hdl_t pd,
36843ed929aSsrust 	    ibt_fmr_pool_attr_t *fmr_params, ibc_fmr_pool_hdl_t *fmr_pool_p);
36943ed929aSsrust 	ibt_status_t (*ibc_destroy_fmr_pool)(ibc_hca_hdl_t hca,
37043ed929aSsrust 	    ibc_fmr_pool_hdl_t fmr_pool);
37143ed929aSsrust 	ibt_status_t (*ibc_flush_fmr_pool)(ibc_hca_hdl_t hca,
37243ed929aSsrust 	    ibc_fmr_pool_hdl_t fmr_pool);
37343ed929aSsrust 	ibt_status_t (*ibc_register_physical_fmr)(ibc_hca_hdl_t hca,
37443ed929aSsrust 	    ibc_fmr_pool_hdl_t fmr_pool, ibt_pmr_attr_t *mem_pattr,
37543ed929aSsrust 	    void *ibtl_reserved, ibc_mr_hdl_t *mr_hdl_p,
37643ed929aSsrust 	    ibt_pmr_desc_t *mem_desc_p);
37743ed929aSsrust 	ibt_status_t (*ibc_deregister_fmr)(ibc_hca_hdl_t hca, ibc_mr_hdl_t mr);
37803494a98SBill Taylor 
37903494a98SBill Taylor 	/* IO memory management */
38003494a98SBill Taylor 	ibt_status_t (*ibc_alloc_io_mem)(ibc_hca_hdl_t hca_hdl, size_t size,
38103494a98SBill Taylor 	    ibt_mr_flags_t mr_flag, caddr_t *kaddrp,
38203494a98SBill Taylor 	    ibc_mem_alloc_hdl_t *mem_alloc_hdl);
38303494a98SBill Taylor 	ibt_status_t (*ibc_free_io_mem)(ibc_hca_hdl_t hca_hdl,
38403494a98SBill Taylor 	    ibc_mem_alloc_hdl_t mem_alloc_hdl);
38503494a98SBill Taylor 
38603494a98SBill Taylor 	/* Extended RC (XRC) */
38703494a98SBill Taylor 	ibt_status_t (*ibc_alloc_xrc_domain)();
38803494a98SBill Taylor 	ibt_status_t (*ibc_free_xrc_domain)();
38903494a98SBill Taylor 	ibt_status_t (*ibc_alloc_xrc_srq)();
39003494a98SBill Taylor 	ibt_status_t (*ibc_free_xrc_srq)();
39103494a98SBill Taylor 	ibt_status_t (*ibc_query_xrc_srq)();
39203494a98SBill Taylor 	ibt_status_t (*ibc_modify_xrc_srq)();
39303494a98SBill Taylor 	ibt_status_t (*ibc_alloc_xrc_tgt_qp)();
39403494a98SBill Taylor 	ibt_status_t (*ibc_free_xrc_tgt_qp)();
39503494a98SBill Taylor 	ibt_status_t (*ibc_query_xrc_tgt_qp)();
39603494a98SBill Taylor 	ibt_status_t (*ibc_modify_xrc_tgt_qp)();
397*17a2b317SBill Taylor 
398*17a2b317SBill Taylor 	/* DMA memory region */
399*17a2b317SBill Taylor 	ibt_status_t (*ibc_register_dma_mr)(ibc_hca_hdl_t hca, ibc_pd_hdl_t pd,
400*17a2b317SBill Taylor 	    ibt_dmr_attr_t *attr_p, void *ibtl_reserved, ibc_mr_hdl_t *mr_p,
401*17a2b317SBill Taylor 	    ibt_mr_desc_t *mem_desc);
402*17a2b317SBill Taylor 
403*17a2b317SBill Taylor 	/* OPS extensions for next round of enhancements */
404*17a2b317SBill Taylor 	ibt_status_t (*ibc_enhancement1)();
405*17a2b317SBill Taylor 	ibt_status_t (*ibc_enhancement2)();
406*17a2b317SBill Taylor 	ibt_status_t (*ibc_enhancement3)();
407*17a2b317SBill Taylor 	ibt_status_t (*ibc_enhancement4)();
4087c478bd9Sstevel@tonic-gate } ibc_operations_t;
4097c478bd9Sstevel@tonic-gate 
4107c478bd9Sstevel@tonic-gate 
4117c478bd9Sstevel@tonic-gate /*
4127c478bd9Sstevel@tonic-gate  * The ibc_hca_info_s structure is used for HCA drivers to communicate its
4137c478bd9Sstevel@tonic-gate  * HCA specific information to IBTF when it attaches a device via ibc_attach().
4147c478bd9Sstevel@tonic-gate  *
4157c478bd9Sstevel@tonic-gate  * IBTF assumes that the structures pointed to by the hca_ops and hca_attr
4167c478bd9Sstevel@tonic-gate  * structure members are persistent.
4177c478bd9Sstevel@tonic-gate  */
4187c478bd9Sstevel@tonic-gate typedef struct ibc_hca_info_s {
4197c478bd9Sstevel@tonic-gate 	ibc_version_t		hca_ci_vers;	/* CI Version */
4207c478bd9Sstevel@tonic-gate 	ibc_hca_hdl_t		hca_handle;	/* used for call through */
4217c478bd9Sstevel@tonic-gate 						/* "hca_ops" */
4227c478bd9Sstevel@tonic-gate 	ibc_operations_t	*hca_ops;
4237c478bd9Sstevel@tonic-gate 	ibt_hca_attr_t		*hca_attr;
4247c478bd9Sstevel@tonic-gate } ibc_hca_info_t;
4257c478bd9Sstevel@tonic-gate 
4267c478bd9Sstevel@tonic-gate 
4277c478bd9Sstevel@tonic-gate /* Channel Interface return status */
4287c478bd9Sstevel@tonic-gate typedef enum ibc_status_e {
4297c478bd9Sstevel@tonic-gate 	IBC_SUCCESS = 0,
4307c478bd9Sstevel@tonic-gate 	IBC_FAILURE = 1
4317c478bd9Sstevel@tonic-gate } ibc_status_t;
4327c478bd9Sstevel@tonic-gate 
4337c478bd9Sstevel@tonic-gate /*
4347c478bd9Sstevel@tonic-gate  * CI up-calls to IBTF.
4357c478bd9Sstevel@tonic-gate  */
4367c478bd9Sstevel@tonic-gate 
4377c478bd9Sstevel@tonic-gate /*
4387c478bd9Sstevel@tonic-gate  * ibc_init
4397c478bd9Sstevel@tonic-gate  *	Registers CI clients with the Solaris I/O framework
4407c478bd9Sstevel@tonic-gate  *
4417c478bd9Sstevel@tonic-gate  * ibc_fini
4427c478bd9Sstevel@tonic-gate  *	Un-Registers CI clients with the Solaris I/O framework
4437c478bd9Sstevel@tonic-gate  */
4447c478bd9Sstevel@tonic-gate int ibc_init(struct modlinkage *modlp);
4457c478bd9Sstevel@tonic-gate void ibc_fini(struct modlinkage *modlp);
4467c478bd9Sstevel@tonic-gate 
4477c478bd9Sstevel@tonic-gate /*
4487c478bd9Sstevel@tonic-gate  * ibc_attach
44924b28d04Shiremath  *	Register HCA device with IBTF. During this call HCA driver provides
45024b28d04Shiremath  *	driver's information neededby IBTF.
4517c478bd9Sstevel@tonic-gate  *
4527c478bd9Sstevel@tonic-gate  * ibc_post_attach
4537c478bd9Sstevel@tonic-gate  *	After a successful ibc_attach, this must be called.
4547c478bd9Sstevel@tonic-gate  *
4557c478bd9Sstevel@tonic-gate  * ibc_pre_detach
4567c478bd9Sstevel@tonic-gate  *	Attempt to De-Register HCA Device from IBTF.
4577c478bd9Sstevel@tonic-gate  *	This requires the cooperation of IBTF clients to
4587c478bd9Sstevel@tonic-gate  *	stop using this HCA.  Upon success, the HCA driver
4597c478bd9Sstevel@tonic-gate  *	is committed to calling ibc_detach.
4607c478bd9Sstevel@tonic-gate  *
4617c478bd9Sstevel@tonic-gate  * ibc_detach
4627c478bd9Sstevel@tonic-gate  *	De-Register HCA Device from IBTF.
4637c478bd9Sstevel@tonic-gate  *	This function will succeed if ibc_pre_detach has previously
4647c478bd9Sstevel@tonic-gate  *	succeeded for this device.
4657c478bd9Sstevel@tonic-gate  */
4667c478bd9Sstevel@tonic-gate ibc_status_t ibc_attach(ibc_clnt_hdl_t *ibc_hdl_p, ibc_hca_info_t *info_p);
4677c478bd9Sstevel@tonic-gate void ibc_post_attach(ibc_clnt_hdl_t ibc_hdl);
4687c478bd9Sstevel@tonic-gate ibc_status_t ibc_pre_detach(ibc_clnt_hdl_t ibc_hdl, ddi_detach_cmd_t cmd);
4697c478bd9Sstevel@tonic-gate void ibc_detach(ibc_clnt_hdl_t ibc_hdl);
4707c478bd9Sstevel@tonic-gate 
4717c478bd9Sstevel@tonic-gate /*
4727c478bd9Sstevel@tonic-gate  * ibc_cq_handler
4737c478bd9Sstevel@tonic-gate  *	IBTF Completion Queue Notification Handler.
4747c478bd9Sstevel@tonic-gate  */
4757c478bd9Sstevel@tonic-gate void ibc_cq_handler(ibc_clnt_hdl_t ibc_hdl, ibt_cq_hdl_t ibt_cq);
4767c478bd9Sstevel@tonic-gate 
4777c478bd9Sstevel@tonic-gate /*
4787c478bd9Sstevel@tonic-gate  * ibc_async_handler
4797c478bd9Sstevel@tonic-gate  *	IBTF Asynchronous event/error handler.
4807c478bd9Sstevel@tonic-gate  */
4817c478bd9Sstevel@tonic-gate void ibc_async_handler(ibc_clnt_hdl_t ibc_hdl, ibt_async_code_t code,
4827c478bd9Sstevel@tonic-gate     ibc_async_event_t *event_p);
48324b28d04Shiremath 
4847c478bd9Sstevel@tonic-gate /*
4857c478bd9Sstevel@tonic-gate  * ibc_memory_handler
4867c478bd9Sstevel@tonic-gate  *	IBTF memory event/error handler.
4877c478bd9Sstevel@tonic-gate  */
4887c478bd9Sstevel@tonic-gate void ibc_memory_handler(ibc_clnt_hdl_t ibc_hdl, ibt_mem_code_t code,
4897c478bd9Sstevel@tonic-gate     ibt_mem_data_t *data_p, void *ibtl_reserved);
4907c478bd9Sstevel@tonic-gate 
4917c478bd9Sstevel@tonic-gate /*
4927c478bd9Sstevel@tonic-gate  * ibc_get_ci_failure()
4937c478bd9Sstevel@tonic-gate  *
4947c478bd9Sstevel@tonic-gate  *	Used to obtain a special IBTF failure code for CI specific failures,
4957c478bd9Sstevel@tonic-gate  *	failures other than those defined in ibt_status_t.
4967c478bd9Sstevel@tonic-gate  */
4977c478bd9Sstevel@tonic-gate ibt_status_t ibc_get_ci_failure(uint64_t ena);
4987c478bd9Sstevel@tonic-gate 
4997c478bd9Sstevel@tonic-gate #ifdef __cplusplus
5007c478bd9Sstevel@tonic-gate }
5017c478bd9Sstevel@tonic-gate #endif
5027c478bd9Sstevel@tonic-gate 
5037c478bd9Sstevel@tonic-gate #endif	/* _SYS_IB_IBTL_IBCI_H */
504