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_SCSIXVR: 89 sprintf(rbuf, "SCSI port/transceiver"); 90 break; 91 case SESTYP_LANGUAGE: 92 sprintf(rbuf, "Language"); 93 break; 94 case SESTYP_COMPORT: 95 sprintf(rbuf, "Communication Port"); 96 break; 97 case SESTYP_VOM: 98 sprintf(rbuf, "Voltage Sensor"); 99 break; 100 case SESTYP_AMMETER: 101 sprintf(rbuf, "Current Sensor"); 102 break; 103 case SESTYP_SCSI_TGT: 104 sprintf(rbuf, "SCSI target port"); 105 break; 106 case SESTYP_SCSI_INI: 107 sprintf(rbuf, "SCSI initiator port"); 108 break; 109 case SESTYP_SUBENC: 110 sprintf(rbuf, "Simple sub-enclosure"); 111 break; 112 default: 113 (void) sprintf(rbuf, "<Type 0x%x>", type); 114 break; 115 } 116 return (rbuf); 117 } 118 119 static char * 120 scode2ascii(u_char code) 121 { 122 static char rbuf[32]; 123 switch (code & 0xf) { 124 case SES_OBJSTAT_UNSUPPORTED: 125 sprintf(rbuf, "status not supported"); 126 break; 127 case SES_OBJSTAT_OK: 128 sprintf(rbuf, "ok"); 129 break; 130 case SES_OBJSTAT_CRIT: 131 sprintf(rbuf, "critical"); 132 break; 133 case SES_OBJSTAT_NONCRIT: 134 sprintf(rbuf, "non-critical"); 135 break; 136 case SES_OBJSTAT_UNRECOV: 137 sprintf(rbuf, "unrecoverable"); 138 break; 139 case SES_OBJSTAT_NOTINSTALLED: 140 sprintf(rbuf, "not installed"); 141 break; 142 case SES_OBJSTAT_UNKNOWN: 143 sprintf(rbuf, "unknown status"); 144 break; 145 case SES_OBJSTAT_NOTAVAIL: 146 sprintf(rbuf, "status not available"); 147 break; 148 default: 149 sprintf(rbuf, "unknown status code %x", code & 0xf); 150 break; 151 } 152 return (rbuf); 153 } 154 155 156 char * 157 stat2ascii(int eletype __unused, u_char *cstat) 158 { 159 static char ebuf[256], *scode; 160 161 scode = scode2ascii(cstat[0]); 162 sprintf(ebuf, "Status=%s (bytes=0x%02x 0x%02x 0x%02x 0x%02x)", 163 scode, cstat[0], cstat[1], cstat[2], cstat[3]); 164 return (ebuf); 165 } 166