1 /* $FreeBSD$ */ 2 /* 3 * Copyright (c) 2000 by Matthew Jacob 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions, and the following disclaimer, 11 * without modification, immediately at the beginning of the file. 12 * 2. The name of the author may not be used to endorse or promote products 13 * derived from this software without specific prior written permission. 14 * 15 * Alternatively, this software may be distributed under the terms of the 16 * the GNU Public License ("GPL"). 17 * 18 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 19 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR 22 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 23 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 24 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 25 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 26 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 27 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 28 * SUCH DAMAGE. 29 * 30 * Matthew Jacob 31 * Feral Software 32 * mjacob@feral.com 33 */ 34 35 #include <unistd.h> 36 #include <stdlib.h> 37 #include <stdio.h> 38 #include <sys/ioctl.h> 39 #include SESINC 40 41 #include "eltsub.h" 42 43 char * 44 geteltnm(int type) 45 { 46 static char rbuf[132]; 47 48 switch (type) { 49 case SESTYP_UNSPECIFIED: 50 sprintf(rbuf, "Unspecified"); 51 break; 52 case SESTYP_DEVICE: 53 sprintf(rbuf, "Device"); 54 break; 55 case SESTYP_POWER: 56 sprintf(rbuf, "Power supply"); 57 break; 58 case SESTYP_FAN: 59 sprintf(rbuf, "Cooling element"); 60 break; 61 case SESTYP_THERM: 62 sprintf(rbuf, "Temperature sensors"); 63 break; 64 case SESTYP_DOORLOCK: 65 sprintf(rbuf, "Door Lock"); 66 break; 67 case SESTYP_ALARM: 68 sprintf(rbuf, "Audible alarm"); 69 break; 70 case SESTYP_ESCC: 71 sprintf(rbuf, "Enclosure services controller electronics"); 72 break; 73 case SESTYP_SCC: 74 sprintf(rbuf, "SCC controller electronics"); 75 break; 76 case SESTYP_NVRAM: 77 sprintf(rbuf, "Nonvolatile cache"); 78 break; 79 case SESTYP_UPS: 80 sprintf(rbuf, "Uninterruptible power supply"); 81 break; 82 case SESTYP_DISPLAY: 83 sprintf(rbuf, "Display"); 84 break; 85 case SESTYP_KEYPAD: 86 sprintf(rbuf, "Key pad entry device"); 87 break; 88 case SESTYP_ENCLOSURE: 89 sprintf(rbuf, "Enclosure"); 90 break; 91 case SESTYP_SCSIXVR: 92 sprintf(rbuf, "SCSI port/transceiver"); 93 break; 94 case SESTYP_LANGUAGE: 95 sprintf(rbuf, "Language"); 96 break; 97 case SESTYP_COMPORT: 98 sprintf(rbuf, "Communication Port"); 99 break; 100 case SESTYP_VOM: 101 sprintf(rbuf, "Voltage Sensor"); 102 break; 103 case SESTYP_AMMETER: 104 sprintf(rbuf, "Current Sensor"); 105 break; 106 case SESTYP_SCSI_TGT: 107 sprintf(rbuf, "SCSI target port"); 108 break; 109 case SESTYP_SCSI_INI: 110 sprintf(rbuf, "SCSI initiator port"); 111 break; 112 case SESTYP_SUBENC: 113 sprintf(rbuf, "Simple sub-enclosure"); 114 break; 115 case SESTYP_ARRAY: 116 sprintf(rbuf, "Array device"); 117 break; 118 case SESTYP_SASEXPANDER: 119 sprintf(rbuf, "SAS Expander"); 120 break; 121 case SESTYP_SASCONNECTOR: 122 sprintf(rbuf, "SAS Connector"); 123 break; 124 default: 125 (void) sprintf(rbuf, "<Type 0x%x>", type); 126 break; 127 } 128 return (rbuf); 129 } 130 131 static char * 132 scode2ascii(u_char code) 133 { 134 static char rbuf[32]; 135 switch (code & 0xf) { 136 case SES_OBJSTAT_UNSUPPORTED: 137 sprintf(rbuf, "status not supported"); 138 break; 139 case SES_OBJSTAT_OK: 140 sprintf(rbuf, "ok"); 141 break; 142 case SES_OBJSTAT_CRIT: 143 sprintf(rbuf, "critical"); 144 break; 145 case SES_OBJSTAT_NONCRIT: 146 sprintf(rbuf, "non-critical"); 147 break; 148 case SES_OBJSTAT_UNRECOV: 149 sprintf(rbuf, "unrecoverable"); 150 break; 151 case SES_OBJSTAT_NOTINSTALLED: 152 sprintf(rbuf, "not installed"); 153 break; 154 case SES_OBJSTAT_UNKNOWN: 155 sprintf(rbuf, "unknown status"); 156 break; 157 case SES_OBJSTAT_NOTAVAIL: 158 sprintf(rbuf, "status not available"); 159 break; 160 default: 161 sprintf(rbuf, "unknown status code %x", code & 0xf); 162 break; 163 } 164 return (rbuf); 165 } 166 167 168 char * 169 stat2ascii(int eletype __unused, u_char *cstat) 170 { 171 static char ebuf[256], *scode; 172 173 scode = scode2ascii(cstat[0]); 174 sprintf(ebuf, "Status=%s (bytes=0x%02x 0x%02x 0x%02x 0x%02x)", 175 scode, cstat[0], cstat[1], cstat[2], cstat[3]); 176 return (ebuf); 177 } 178