eltsub.c revision 222336
1/* $FreeBSD: head/share/examples/ses/srcs/eltsub.c 222336 2011-05-27 03:23:39Z mav $ */
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
43char *
44geteltnm(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_SAS_EXP:
119		sprintf(rbuf, "SAS Expender");
120		break;
121	case SESTYP_SAS_CONN:
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
131static char *
132scode2ascii(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
168char *
169stat2ascii(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