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