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, Version 1.0 only 6 * (the "License"). You may not use this file except in compliance 7 * with the License. 8 * 9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 * or http://www.opensolaris.org/os/licensing. 11 * See the License for the specific language governing permissions 12 * and limitations under the License. 13 * 14 * When distributing Covered Code, include this CDDL HEADER in each 15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 * If applicable, add the following below this CDDL HEADER, with the 17 * fields enclosed by brackets "[]" replaced with your own identifying 18 * information: Portions Copyright [yyyy] [name of copyright owner] 19 * 20 * CDDL HEADER END 21 */ 22 /* 23 * Copyright (c) 2001 by Sun Microsystems, Inc. 24 * All rights reserved. 25 */ 26 27 #ifndef _CFGA_USB_H 28 #define _CFGA_USB_H 29 30 #pragma ident "%Z%%M% %I% %E% SMI" 31 32 #ifdef __cplusplus 33 extern "C" { 34 #endif 35 36 #include <stdlib.h> 37 #include <strings.h> 38 #include <fcntl.h> 39 #include <ctype.h> 40 #include <unistd.h> 41 #include <libintl.h> 42 #include <libdevice.h> 43 #include <sys/varargs.h> 44 #include <sys/usb/usba.h> 45 #include <sys/usb/hubd/hub.h> 46 #include <sys/usb/hubd/hubd_impl.h> 47 #include <libdevinfo.h> 48 #include <libdevice.h> 49 #include <librcm.h> 50 #include <synch.h> 51 #include <thread.h> 52 #include <assert.h> 53 54 #define CFGA_PLUGIN_LIB 55 #include <config_admin.h> 56 57 58 /* 59 * Debug stuff. 60 */ 61 #ifdef DEBUG 62 #define DPRINTF printf 63 #else 64 #define DPRINTF 0 && 65 #endif /* DEBUG */ 66 67 68 /* for walking links */ 69 typedef struct walk_link { 70 char *path; 71 char len; 72 char **linkpp; 73 } walk_link_t; 74 75 76 /* 77 * Stuff carried over for the routines borrowed from cfgadm/SCSI. 78 */ 79 typedef enum { 80 UCFGA_TERMINATE = 0, 81 UCFGA_CONTINUE 82 } ucfga_recur_t; 83 84 /* Structures for tree walking code */ 85 typedef struct { 86 char *phys; 87 char *log; 88 int ret; 89 int match_minor; 90 int l_errno; 91 } pathm_t; 92 93 94 #define MATCH_MINOR_NAME 1 95 #define S_FREE(x) (((x) != NULL) ? (free(x), (x) = NULL) : (void *)0) 96 #define GET_DYN(a) (((a) != NULL) ? strstr((a), DYN_SEP) : (void *)0) 97 98 99 /* Location of USB configuration file */ 100 #define USBCONF_FILE "/etc/usb/config_map.conf" 101 102 /* Hardware options */ 103 #define OPT_DISABLE_RCM "disable_rcm" 104 #define FLAG_DISABLE_RCM 0x00000001 /* flags */ 105 106 /* Return/error codes */ 107 typedef enum { 108 UCFGA_ERR = -2, 109 UCFGA_LIB_ERR, 110 UCFGA_OK, 111 UCFGA_BUSY, 112 UCFGA_NO_REC 113 } ucfga_ret_t; 114 115 116 117 /* Messages */ 118 119 typedef struct { 120 int intl; /* Flag: if 1, internationalize */ 121 cfga_err_t cfga_err; /* Error code libcfgadm understands */ 122 const char *msgstr; 123 } msgcvt_t; 124 #define NO_CVT 0 125 #define CVT 1 126 127 #define MSG_TBL_SZ(table) (sizeof ((table)) / sizeof (msgcvt_t)) 128 129 130 /* Error message ids (and indices into usb_error_msgs) */ 131 typedef enum { 132 133 CFGA_USB_OK = 0, 134 CFGA_USB_UNKNOWN, 135 CFGA_USB_INTERNAL_ERROR, 136 CFGA_USB_OPTIONS, 137 CFGA_USB_DYNAMIC_AP, 138 CFGA_USB_AP, 139 CFGA_USB_PORT, 140 CFGA_USB_DEVCTL, 141 CFGA_USB_NOT_CONNECTED, 142 CFGA_USB_NOT_CONFIGURED, 143 CFGA_USB_ALREADY_CONNECTED, 144 CFGA_USB_ALREADY_CONFIGURED, 145 CFGA_USB_OPEN, 146 CFGA_USB_IOCTL, 147 CFGA_USB_BUSY, 148 CFGA_USB_ALLOC_FAIL, 149 CFGA_USB_OPNOTSUPP, 150 CFGA_USB_DEVLINK, 151 CFGA_USB_STATE, 152 CFGA_USB_CONFIG_INVAL, 153 CFGA_USB_PRIV, 154 CFGA_USB_NVLIST, 155 CFGA_USB_ZEROLEN, 156 CFGA_USB_CONFIG_FILE, 157 CFGA_USB_LOCK_FILE, 158 CFGA_USB_UNLOCK_FILE, 159 CFGA_USB_ONE_CONFIG, 160 161 /* RCM Errors */ 162 CFGA_USB_RCM_HANDLE, 163 CFGA_USB_RCM_ONLINE, 164 CFGA_USB_RCM_OFFLINE, 165 CFGA_USB_RCM_INFO 166 167 } cfga_usb_ret_t; 168 169 170 /* 171 * Given an error msg index, look up the associated string, and 172 * convert it to the current locale if required. 173 */ 174 #define ERR_STR(msg_idx) \ 175 (get_msg((msg_idx), usb_error_msgs, MSG_TBL_SZ(usb_error_msgs))) 176 177 178 /* Misc text strings */ 179 #define CFGA_DEV_DIR "/dev/cfg" 180 #define DYN_SEP "::" 181 #define MINOR_SEP ":" 182 #define PORT "port" 183 #define PORT_SEPERATOR "." 184 #define USB "usb" 185 #define USB_CFGADM_DEFAULT_AP_TYPE "unknown" 186 187 /* these set of defines are -lav listing */ 188 #define USB_UNDEF_STR "<undef>" 189 #define USB_NO_CFG_STR "<no cfg str descr>" 190 191 /* -x commands */ 192 #define RESET_DEVICE "usb_reset" /* with -x option */ 193 #define USB_CONFIG "usb_config" /* with -x option */ 194 #define SET_CONFIG "config=" /* with -o option */ 195 #define SET_DRIVER "drv=" /* with -op option */ 196 197 /* for confirm operation */ 198 #define USB_CONFIRM_0 "the device: " 199 #define USB_CONFIRM_1 \ 200 "This operation will suspend activity on the USB device\nContinue" 201 202 /* Prototypes */ 203 extern int add_entry(char *, int, int, int, char *, char *, char *, 204 char **); 205 extern cfga_usb_ret_t do_control_ioctl(const char *, uint_t, uint_t, 206 void **, size_t *); 207 208 209 #ifdef __cplusplus 210 } 211 #endif 212 213 #endif /* _CFGA_USB_H */ 214