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 * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms. 24 */ 25 26 #ifndef _SYS_IB_IBTL_IMPL_IBTL_IBNEX_H 27 #define _SYS_IB_IBTL_IMPL_IBTL_IBNEX_H 28 29 /* 30 * ibtl_ibnex.h 31 * 32 * All data structures and function prototypes that are specific to the 33 * IBTL<--->IB nexus private interface. 34 */ 35 36 #ifdef __cplusplus 37 extern "C" { 38 #endif 39 40 /* 41 * Cfgadm restricts ap_id length to 30 bytes (See CFGA_LOG_EXT_LEN) 42 */ 43 #define IBTL_IBNEX_APID_LEN 31 44 #define IBTL_IBNEX_STR_LEN 64 45 46 /* 47 * "ioc" and "ibport" child device names 48 */ 49 #define IBNEX_IOC_CNAME "ioc" 50 #define IBNEX_IBPORT_CNAME "ibport" 51 52 /* 53 * These two defines are used by the function ibtl_ibnex_get_hca_info(). 54 * If IBTL_IBNEX_LIST_CLNTS_FLAG is specified then an NVL packed list 55 * of only client names/ap_ids/alternate_HCA is returned. 56 * If IBTL_IBNEX_UNCFG_CLNTS_FLAG is specified then an NVL packed list 57 * of only client ap_ids/devpaths is returned. 58 */ 59 #define IBTL_IBNEX_LIST_CLNTS_FLAG 0x1 /* -x list_clients option */ 60 #define IBTL_IBNEX_UNCFG_CLNTS_FLAG 0x2 /* -x unconfig_clients option */ 61 62 typedef struct ibtl_ibnex_cb_args_s { 63 uint_t cb_flag; 64 dev_info_t *cb_dip; 65 struct modlinkage *cb_modlp; 66 ib_guid_t cb_hca_guid; 67 } ibtl_ibnex_cb_args_t; 68 69 /* Possible values for cb_flag */ 70 #define IBTL_IBNEX_IBC_INIT 0x11 71 #define IBTL_IBNEX_IBC_FINI 0x22 72 #define IBTL_IBNEX_REPROBE_DEV_REQ 0x33 73 74 /* 75 * Function: 76 * ibtl_ibnex_callback_t 77 * Inputs: 78 * cb_args - Arguments for the callback 79 * Returns: 80 * IBT_SUCCESS/IBT_FAILURE 81 * Description: 82 * Currently this routine provides function to check wheter 83 * particular client has access to open HCA or not. 84 */ 85 typedef ibt_status_t (*ibtl_ibnex_callback_t)(ibtl_ibnex_cb_args_t *); 86 87 /* 88 * Function: 89 * ibtl_ibnex_register_callback 90 * Inputs: 91 * ibnex_ibtl_callback - IBTL's IB nexus driver callback function 92 * Returns: 93 * NONE 94 * Description: 95 * Register a callback routine for IB nexus driver. 96 */ 97 void ibtl_ibnex_register_callback(ibtl_ibnex_callback_t); 98 99 /* 100 * Function: 101 * ibtl_ibnex_unregister_callback 102 * Inputs: 103 * NONE 104 * Returns: 105 * NONE 106 * Description: 107 * Un-register the callback routine for IB nexus driver. 108 */ 109 void ibtl_ibnex_unregister_callback(); 110 111 /* 112 * Function: 113 * ibtl_ibnex_get_hca_info 114 * Input: 115 * hca_guid - The HCA's node GUID. 116 * flag - Tells what to do 117 * IBTL_IBNEX_LIST_CLNTS_FLAG - Build client names/ap_ids/ 118 * alternate_HCA database 119 * IBTL_IBNEX_UNCFG_CLNTS_FLAG - Build client devpaths/ 120 * ap_id database 121 * callback - Callback function to get ap_id from ib(7d) 122 * Output: 123 * buffer - The information is returned in this buffer 124 * bufsiz - The size of the information buffer 125 * Returns: 126 * IBT_SUCCESS/IBT_HCA_INVALID/IBT_FAILURE 127 * Description: 128 * For a given HCA node GUID it figures out the registered clients 129 * (ie. ones who called ibt_attach(9f) on this GUID) and creates 130 * a NVL packed buffer (of either names/ap_ids/alternate_HCA or 131 * devpaths/ap_ids) and returns it. If a valid flag is not specified 132 * then an error is returned. 133 */ 134 ibt_status_t ibtl_ibnex_get_hca_info(ib_guid_t hca_guid, int flag, 135 char **buffer, size_t *bufsiz, 136 void (*callback)(dev_info_t *, char **)); 137 138 /* 139 * Function: 140 * ibtl_ibnex_hcadip2guid 141 * Input: 142 * dev_info_t - The "dip" of this HCA 143 * Output: 144 * hca_guid - The HCA's node GUID. 145 * Description: 146 * For a given HCA dip it figures out the GUID 147 * and returns it. If not found, NULL is returned. 148 */ 149 ib_guid_t ibtl_ibnex_hcadip2guid(dev_info_t *); 150 151 /* 152 * Function: 153 * ibtl_ibnex_hcaguid2dip 154 * Input: 155 * hca_guid - The HCA's node GUID. 156 * Output: 157 * dev_info_t - The "dip" of this HCA 158 * Returns: 159 * "dip" on SUCCESS, NULL on FAILURE 160 * Description: 161 * For a given HCA node GUID it figures out the "dip" 162 * and returns it. If not found, NULL is returned. 163 */ 164 dev_info_t *ibtl_ibnex_hcaguid2dip(ib_guid_t); 165 166 /* 167 * Function: 168 * ibtl_ibnex_get_hca_verbose_data 169 * Input: 170 * hca_guid - The HCA's node GUID. 171 * Output: 172 * buffer - The information is returned in this buffer 173 * bufsiz - The size of the information buffer 174 * Returns: 175 * IBT_SUCCESS/IBT_HCA_INVALID/IBT_FAILURE 176 * Description: 177 * For a given HCA node GUID it figures out the verbose listing display. 178 */ 179 ibt_status_t ibtl_ibnex_get_hca_verbose_data(ib_guid_t, char **, size_t *); 180 181 /* 182 * Function: 183 * ibtl_ibnex_valid_hca_parent 184 * Input: 185 * pdip - The parent dip from client's child dev_info_t 186 * Output: 187 * NONE 188 * Returns: 189 * IBT_SUCCESS/IBT_NO_HCAS_AVAILABLE 190 * Description: 191 * For a given pdip, of Port/VPPA devices, match it against all the 192 * registered HCAs's dip. If match found return IBT_SUCCESS, 193 * else IBT_NO_HCAS_AVAILABLE. 194 * For IOC/Pseudo devices check if the given pdip is that of 195 * the ib(7d) nexus. If yes return IBT_SUCCESS, 196 * else IBT_NO_HCAS_AVAILABLE. 197 */ 198 ibt_status_t ibtl_ibnex_valid_hca_parent(dev_info_t *); 199 200 /* 201 * Function: 202 * ibtl_ibnex_phci_register 203 * Input: 204 * hca_dip - The HCA dip 205 * Output: 206 * NONE 207 * Returns: 208 * IBT_SUCCESS/IBT_FAILURE 209 * Description: 210 * Register the HCA dip as the MPxIO PCHI. 211 */ 212 ibt_status_t ibtl_ibnex_phci_register(dev_info_t *hca_dip); 213 214 /* 215 * Function: 216 * ibtl_ibnex_phci_unregister 217 * Input: 218 * hca_dip - The HCA dip 219 * Output: 220 * NONE 221 * Returns: 222 * IBT_SUCCESS/IBT_FAILURE 223 * Description: 224 * Free up any pending MPxIO Pathinfos and unregister the HCA dip as the 225 * MPxIO PCHI. 226 */ 227 ibt_status_t ibtl_ibnex_phci_unregister(dev_info_t *hca_dip); 228 229 /* 230 * Function: 231 * ibtl_ibnex_query_hca_byguid 232 * Input: 233 * hca_guid - The HCA's node GUID. 234 * driver_name_size- size of the caller allocated driver_name buffer 235 * Output: 236 * hca_attrs - caller allocated buffer which will contain 237 * HCA attributes upon success 238 * driver_name - caller allocated buffer which will contain 239 * HCA driver name upon success 240 * driver_instance - HCA driver instance 241 * hca_device_path - caller allocated buffer of size MAXPATHLEN which 242 * will contain hca device path upon success. 243 * Returns: 244 * IBT_SUCCESS/IBT_FAILURE 245 * Description: 246 * Get the HCA attributes, driver name and instance number of the 247 * specified HCA. 248 */ 249 ibt_status_t 250 ibtl_ibnex_query_hca_byguid(ib_guid_t, ibt_hca_attr_t *, char *, size_t, int *, 251 char *); 252 253 #ifdef __cplusplus 254 } 255 #endif 256 257 #endif /* _SYS_IB_IBTL_IMPL_IBTL_IBNEX_H */ 258