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