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 2008 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms. 24 */ 25 26 #ifndef _CFGA_IB_H 27 #define _CFGA_IB_H 28 29 #ifdef __cplusplus 30 extern "C" { 31 #endif 32 33 #include <stdlib.h> 34 #include <strings.h> 35 #include <fcntl.h> 36 #include <ctype.h> 37 #include <unistd.h> 38 #include <libintl.h> 39 #include <sys/types32.h> 40 #include <sys/varargs.h> 41 #include <sys/ib/ibnex/ibnex_devctl.h> 42 #include <libdevinfo.h> 43 #include <libdevice.h> 44 #include <librcm.h> 45 #include <synch.h> 46 #include <thread.h> 47 #include <assert.h> 48 49 #define CFGA_PLUGIN_LIB 50 #include <config_admin.h> 51 52 53 /* 54 * Debug stuff. 55 */ 56 #ifdef DEBUG 57 #define DPRINTF printf 58 #else 59 #define DPRINTF 0 && 60 #endif /* DEBUG */ 61 62 63 /* for walking links */ 64 typedef struct walk_link { 65 char *path; 66 char len; 67 char **linkpp; 68 } walk_link_t; 69 70 71 /* 72 * Stuff carried over for the routines borrowed from cfgadm/SCSI. 73 */ 74 #define MATCH_MINOR_NAME 1 75 #define S_FREE(x) (((x) != NULL) ? (free(x), (x) = NULL) : (void *)0) 76 77 /* Return/error codes */ 78 typedef enum { 79 ICFGA_ERR = -2, 80 ICFGA_LIB_ERR, 81 ICFGA_OK, 82 ICFGA_BUSY, 83 ICFGA_NO_REC 84 } icfga_ret_t; 85 86 87 /* Error Messages */ 88 typedef struct { 89 int intl; /* Flag: if 1, internationalize */ 90 cfga_err_t cfga_err; /* Error code for libcfgadm */ 91 const char *msgstr; 92 } msgcvt_t; 93 94 /* "intl" defines */ 95 #define NO_CVT 0 96 #define CVT 1 97 98 #define MSG_TBL_SZ(table) (sizeof ((table)) / sizeof (msgcvt_t)) 99 100 101 /* Error message ids (and indices into ib_error_msgs) "cfga_err values " */ 102 typedef enum { 103 CFGA_IB_OK = 0, /* Plugin Related Errors */ 104 CFGA_IB_UNKNOWN, 105 CFGA_IB_INTERNAL_ERR, 106 CFGA_IB_INVAL_ARG_ERR, 107 CFGA_IB_OPTIONS_ERR, 108 CFGA_IB_AP_ERR, 109 CFGA_IB_DEVCTL_ERR, 110 CFGA_IB_NOT_CONNECTED, 111 CFGA_IB_NOT_CONFIGURED, 112 CFGA_IB_ALREADY_CONNECTED, 113 CFGA_IB_ALREADY_CONFIGURED, 114 CFGA_IB_CONFIG_OP_ERR, 115 CFGA_IB_UNCONFIG_OP_ERR, 116 CFGA_IB_OPEN_ERR, 117 CFGA_IB_IOCTL_ERR, 118 CFGA_IB_BUSY_ERR, 119 CFGA_IB_ALLOC_FAIL, 120 CFGA_IB_OPNOTSUPP, 121 CFGA_IB_INVAL_APID_ERR, 122 CFGA_IB_DEVLINK_ERR, 123 CFGA_IB_PRIV_ERR, 124 CFGA_IB_NVLIST_ERR, 125 CFGA_IB_HCA_LIST_ERR, 126 CFGA_IB_HCA_UNCONFIG_ERR, 127 CFGA_IB_UPD_PKEY_TBLS_ERR, 128 CFGA_IB_CONFIG_FILE_ERR, 129 CFGA_IB_LOCK_FILE_ERR, 130 CFGA_IB_UNLOCK_FILE_ERR, 131 CFGA_IB_COMM_INVAL_ERR, 132 CFGA_IB_SVC_INVAL_ERR, 133 CFGA_IB_SVC_LEN_ERR, 134 CFGA_IB_SVC_EXISTS_ERR, 135 CFGA_IB_SVC_NO_EXIST_ERR, 136 CFGA_IB_UCFG_CLNTS_ERR, 137 CFGA_IB_INVALID_OP_ERR, 138 139 CFGA_IB_RCM_HANDLE_ERR, /* Plugin's RCM Related Errors */ 140 CFGA_IB_RCM_ONLINE_ERR, 141 CFGA_IB_RCM_OFFLINE_ERR 142 } cfga_ib_ret_t; 143 144 145 /* 146 * Given an error msg index, look up the associated string, and 147 * convert it to the current locale if required. 148 */ 149 #define ERR_STR(msg_idx) \ 150 (ib_get_msg((msg_idx), ib_error_msgs, MSG_TBL_SZ(ib_error_msgs))) 151 152 /* Defines for "usage" */ 153 #define CFGA_IB_HELP_HEADER 1 /* Header only */ 154 #define CFGA_IB_HELP_CONFIG 2 /* -c usage help */ 155 #define CFGA_IB_HELP_LIST 3 /* -x list_clients usage help */ 156 #define CFGA_IB_HELP_UPD_PKEY 4 /* -x update_pkey_tbls usage help */ 157 #define CFGA_IB_HELP_CONF_FILE1 5 /* -x [add_service|delete_service] */ 158 #define CFGA_IB_HELP_CONF_FILE2 6 /* -x list_services help */ 159 #define CFGA_IB_HELP_UPD_IOC_CONF \ 160 7 /* -x update_ioc_config help */ 161 #define CFGA_IB_HELP_UNCFG_CLNTS \ 162 8 /* -x unconfig_clients usage help */ 163 #define CFGA_IB_HELP_UNKNOWN 9 /* unknown help */ 164 165 #define IB_RETRY_DEVPATH 12 /* devicepath show up: retry count */ 166 #define IB_MAX_DEVPATH_DELAY 6 /* sleep for 6 seconds */ 167 #define IB_NUM_NVPAIRS 6 /* for "info", "ap_id" etc. */ 168 169 /* Misc text strings */ 170 #define CFGA_DEV_DIR "/dev/cfg" 171 #define IB_STATIC_APID "/dev/cfg/ib" 172 #define MINOR_SEP ":" 173 #define IB_APID "apid" 174 #define IB_CFGADM_DEFAULT_AP_TYPE "unknown" 175 #define IB_PORT_TYPE "IB-PORT" 176 #define IB_FABRIC_INFO "InfiniBand Fabric" 177 #define IB_HCA_TYPE "IB-HCA" 178 #define IB_IOC_TYPE "IB-IOC" 179 #define IB_VPPA_TYPE "IB-VPPA" 180 #define IB_HCASVC_TYPE "IB-HCA_SVC" 181 #define IB_PSEUDO_TYPE "IB-PSEUDO" 182 #define IB_FABRIC_TYPE "IB-Fabric" 183 #define IB_FABRIC_APID_STR "ib:fabric" 184 185 /* -x commands */ 186 #define IB_LIST_HCA_CLIENTS "list_clients" /* list HCA's */ 187 /* clients */ 188 #define IB_UNCONFIG_HCA_CLIENTS "unconfig_clients" /* unconfig */ 189 /* HCA's */ 190 /* clients */ 191 #define IB_UPDATE_PKEY_TBLS "update_pkey_tbls" /* re-read */ 192 /* P_Keys */ 193 #define IB_ADD_SERVICE "add_service" /* add svc */ 194 #define IB_DELETE_SERVICE "delete_service" /* delete svc */ 195 #define IB_LIST_SERVICES "list_services" /* list svcs */ 196 #define IB_UPDATE_IOC_CONF "update_ioc_config" /* update IOC */ 197 /* config */ 198 199 /* for confirm operation */ 200 #define IB_CONFIRM1 \ 201 "This operation will suspend activity on the IB device\nContinue" 202 #define IB_CONFIRM3 \ 203 "This operation will unconfigure IB clients of this HCA\nContinue" 204 #define IB_CONFIRM4 \ 205 "This operation will update P_Key tables for all ports of all HCAs" 206 #define IB_CONFIRM5 \ 207 "This operation can update properties of IOC devices." 208 209 /* 210 * Export "node_type"s from ibnex_node_type_t (see ibnex.h) to 211 * cfgadm in user land. NOTE: If ibnex_node_type_t changes in 212 * ibnex.h; do not forget to update these values here as well. 213 */ 214 #define IBNEX_PORT_NODE_TYPE 0 215 #define IBNEX_VPPA_NODE_TYPE 1 216 #define IBNEX_HCASVC_NODE_TYPE 2 217 #define IBNEX_IOC_NODE_TYPE 3 218 #define IBNEX_PSEUDO_NODE_TYPE 4 219 220 /* for ib.conf file support */ 221 #define IBCONF_ADD_ENTRY 1 222 #define IBCONF_DELETE_ENTRY 2 223 224 #ifdef __cplusplus 225 } 226 #endif 227 228 #endif /* _CFGA_IB_H */ 229