xref: /illumos-gate/usr/src/uts/sun4u/sys/envmon.h (revision 06e46062)
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 (the "License").
6  * You may not use this file except in compliance with the License.
7  *
8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9  * or http://www.opensolaris.org/os/licensing.
10  * See the License for the specific language governing permissions
11  * and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL HEADER in each
14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15  * If applicable, add the following below this CDDL HEADER, with the
16  * fields enclosed by brackets "[]" replaced with your own identifying
17  * information: Portions Copyright [yyyy] [name of copyright owner]
18  *
19  * CDDL HEADER END
20  */
21 
22 /*
23  * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
24  * Use is subject to license terms.
25  */
26 
27 #ifndef _SYS_ENVMON_H
28 #define	_SYS_ENVMON_H
29 
30 #pragma ident	"%Z%%M%	%I%	%E% SMI"
31 
32 #ifdef	__cplusplus
33 extern "C" {
34 #endif
35 
36 #include <sys/ioccom.h>
37 
38 /*
39  * environmental monitoring ioctls
40  *
41  * there are two types of environmental monitor:
42  * sensors	- these provide a value for the environmental property
43  * indicators	- these provide a status of "within range" or "out of range"
44  *
45  * for any given environmental property, a particular platform is likely
46  * to support either a sensor or an indicator
47  *
48  * a reserved value is used to signify that a particular sensor value is
49  * not available
50  */
51 
52 /* reserved values to signify "value unavailable" */
53 #define	ENVMON_VAL_UNAVAILABLE	((int16_t)(-32768))
54 
55 /*
56  * The ability of a sensor or indicator to deliver a value is encapsulated
57  * in the sensor_status field.
58  * The following sensor_status bit fields are defined
59  */
60 #define	ENVMON_SENSOR_OK	0	/* this one's a value */
61 #define	ENVMON_NOT_PRESENT	1
62 #define	ENVMON_INACCESSIBLE	2	/* e.g. i2c bus problem */
63 
64 /*
65  * Some drivers may implement the older lomv interface in addition to
66  * the ioctls defined here. To avoid a clash with values from older
67  * interfaces, ioctls defined here start high in the available range.
68  */
69 #define	ENVMON_BASE		200
70 
71 #define	ENVMONIOCSYSINFO	_IOR('a',  ENVMON_BASE + 0, envmon_sysinfo_t)
72 #define	ENVMONIOCVOLTSENSOR	_IOWR('a', ENVMON_BASE + 1, envmon_sensor_t)
73 #define	ENVMONIOCAMPSENSOR	_IOWR('a', ENVMON_BASE + 2, envmon_sensor_t)
74 #define	ENVMONIOCTEMPSENSOR	_IOWR('a', ENVMON_BASE + 3, envmon_sensor_t)
75 #define	ENVMONIOCFAN		_IOWR('a', ENVMON_BASE + 4, envmon_fan_t)
76 #define	ENVMONIOCVOLTIND	_IOWR('a', ENVMON_BASE + 5, envmon_indicator_t)
77 #define	ENVMONIOCAMPIND		_IOWR('a', ENVMON_BASE + 6, envmon_indicator_t)
78 #define	ENVMONIOCTEMPIND	_IOWR('a', ENVMON_BASE + 7, envmon_indicator_t)
79 #define	ENVMONIOCFANIND		_IOWR('a', ENVMON_BASE + 8, envmon_indicator_t)
80 #define	ENVMONIOCGETLED		_IOWR('a', ENVMON_BASE + 9, envmon_led_info_t)
81 #define	ENVMONIOCSETLED		_IOW('a',  ENVMON_BASE + 10, envmon_led_ctl_t)
82 #define	ENVMONIOCHPU		_IOWR('a', ENVMON_BASE + 11, envmon_hpu_t)
83 #define	ENVMONIOCGETKEYSW	_IOR('a',  ENVMON_BASE + 12, envmon_keysw_pos_t)
84 #define	ENVMONIOCGETALARM	\
85 		_IOWR('a', ENVMON_BASE + 13, envmon_alarm_info_t)
86 #define	ENVMONIOCSETALARM	_IOWR('a', ENVMON_BASE + 14, envmon_alarm_ctl_t)
87 #define	ENVMONIOCCHASSISSERIALNUM	\
88 		_IOR('a', ENVMON_BASE + 15, envmon_chassis_t)
89 
90 /* field length for text identifiers */
91 #define	ENVMON_MAXNAMELEN	32
92 
93 typedef struct {
94 	char			name[ENVMON_MAXNAMELEN];
95 } envmon_handle_t;
96 
97 /*
98  * Some structures include threshold fields.
99  * Where a particular threshold is not defined for a given sensor,
100  * the reserved value ENVMON_VAL_UNAVAILABLE is returned.
101  */
102 typedef struct {
103 	int16_t			warning;
104 	int16_t			shutdown;
105 	int16_t			poweroff;
106 } envmon_thresholds_t;
107 
108 /*
109  * id identifies the fru to be accessed.
110  * next_id returns the id for the next component of the type implied by
111  * the ioctl command. If there are no more frus in this sequence,
112  * next_id is set to an empty string.
113  * If id is set to an empty string on entry, next_id returns the first id.
114  * In this case, sensor_status will be returned as ENVMON_NOT_PRESENT.
115  */
116 typedef struct {
117 	envmon_handle_t		id;
118 	uint16_t		sensor_status;
119 	int16_t			value;		/* sensor reading */
120 	envmon_thresholds_t	lowthresholds;
121 	envmon_thresholds_t	highthresholds;
122 	envmon_handle_t		next_id;
123 } envmon_sensor_t;
124 
125 typedef struct {
126 	envmon_handle_t	id;
127 	uint16_t		sensor_status;
128 	uint16_t		condition;	/* 0 = within limits */
129 	envmon_handle_t	next_id;
130 } envmon_indicator_t;
131 
132 typedef struct {
133 	envmon_handle_t	id;
134 	uint16_t		sensor_status;
135 	uint16_t		speed;
136 	char			units[ENVMON_MAXNAMELEN];
137 	envmon_thresholds_t	lowthresholds;
138 	envmon_handle_t		next_id;
139 } envmon_fan_t;
140 
141 /*
142  * Values for led_state
143  */
144 #define	ENVMON_LED_OFF		0
145 #define	ENVMON_LED_ON		1
146 #define	ENVMON_LED_BLINKING	2
147 #define	ENVMON_LED_FLASHING	3
148 
149 /*
150  * Values for the hue of the leds
151  */
152 #define	ENVMON_LED_CLR_NONE	((int8_t)(-1))
153 #define	ENVMON_LED_CLR_ANY	0
154 #define	ENVMON_LED_CLR_WHITE	1
155 #define	ENVMON_LED_CLR_BLUE	2
156 #define	ENVMON_LED_CLR_GREEN	3
157 #define	ENVMON_LED_CLR_AMBER	4
158 #define	ENVMON_LED_CLR_RED	5
159 
160 typedef struct {
161 	envmon_handle_t		id;
162 	uint16_t		sensor_status;
163 	int8_t			led_state;
164 	int8_t			led_color;
165 	envmon_handle_t		next_id;
166 } envmon_led_info_t;
167 
168 typedef struct {
169 	envmon_handle_t		id;
170 	int8_t			led_state;
171 } envmon_led_ctl_t;
172 
173 /*
174  * Values for alarm_state
175  */
176 #define	ENVMON_ALARM_OFF	0
177 #define	ENVMON_ALARM_ON		1
178 
179 typedef struct {
180 	envmon_handle_t		id;
181 	uint16_t		sensor_status;
182 	int8_t			alarm_state;
183 	envmon_handle_t		next_id;
184 } envmon_alarm_info_t;
185 
186 typedef struct {
187 	envmon_handle_t		id;
188 	int8_t			alarm_state;
189 } envmon_alarm_ctl_t;
190 
191 /*
192  * Values for fru_status
193  */
194 #define	ENVMON_FRU_NOT_PRESENT	0
195 #define	ENVMON_FRU_PRESENT	1
196 #define	ENVMON_FRU_FAULT	2
197 #define	ENVMON_FRU_DOWNLOAD	3	/* flash update or download active */
198 
199 typedef struct {
200 	envmon_handle_t		id;
201 	uint8_t			sensor_status;
202 	uint8_t			fru_status;
203 	envmon_handle_t		next_id;
204 } envmon_hpu_t;
205 
206 /*
207  * env_sysinto_t is used to return limits on various item types
208  */
209 typedef struct {
210 	uint16_t	maxVoltSens;	/* max number of voltage sensors */
211 	uint16_t	maxVoltInd;	/* max number of voltage indicators */
212 	uint16_t	maxAmpSens;	/* max number of current sensors */
213 	uint16_t	maxAmpInd;	/* max number of circuit breakers */
214 	uint16_t	maxTempSens;	/* max number of temperature sensors */
215 	uint16_t	maxTempInd;	/* max number of temp'r indicators */
216 	uint16_t	maxFanSens;	/* max number of fan speed sensors */
217 	uint16_t	maxFanInd;	/* max number of fan indicators */
218 	uint16_t	maxLED;		/* max number of LEDs */
219 	uint16_t	maxHPU;		/* max number of Hot Pluggable Units */
220 } envmon_sysinfo_t;
221 
222 /*
223  * envmon_keysw_t is used to return the current value of the
224  * keyswitch (if fitted)
225  */
226 typedef enum envmon_keysw_pos {
227 	ENVMON_KEYSW_POS_UNKNOWN	= 0,
228 	ENVMON_KEYSW_POS_NORMAL,
229 	ENVMON_KEYSW_POS_DIAG,
230 	ENVMON_KEYSW_POS_LOCKED,
231 	ENVMON_KEYSW_POS_OFF
232 } envmon_keysw_pos_t;
233 
234 /*
235  * envmon_chassis_t is used to retuen the chassis serial number
236  */
237 typedef struct {
238 	char		serial_number[ENVMON_MAXNAMELEN];
239 } envmon_chassis_t;
240 
241 #ifdef	__cplusplus
242 }
243 #endif
244 
245 #endif	/* _SYS_ENVMON_H */
246