xref: /titanic_52/usr/src/uts/sun4u/sys/envmon.h (revision 84ab085a13f931bc78e7415e7ce921dbaa14fcb3)
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, Version 1.0 only
6  * (the "License").  You may not use this file except in compliance
7  * with the License.
8  *
9  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10  * or http://www.opensolaris.org/os/licensing.
11  * See the License for the specific language governing permissions
12  * and limitations under the License.
13  *
14  * When distributing Covered Code, include this CDDL HEADER in each
15  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16  * If applicable, add the following below this CDDL HEADER, with the
17  * fields enclosed by brackets "[]" replaced with your own identifying
18  * information: Portions Copyright [yyyy] [name of copyright owner]
19  *
20  * CDDL HEADER END
21  */
22 /*
23  * Copyright 2003 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 
88 /* field length for text identifiers */
89 #define	ENVMON_MAXNAMELEN	32
90 
91 typedef struct {
92 	char			name[ENVMON_MAXNAMELEN];
93 } envmon_handle_t;
94 
95 /*
96  * Some structures include threshold fields.
97  * Where a particular threshold is not defined for a given sensor,
98  * the reserved value ENVMON_VAL_UNAVAILABLE is returned.
99  */
100 typedef struct {
101 	int16_t			warning;
102 	int16_t			shutdown;
103 	int16_t			poweroff;
104 } envmon_thresholds_t;
105 
106 /*
107  * id identifies the fru to be accessed.
108  * next_id returns the id for the next component of the type implied by
109  * the ioctl command. If there are no more frus in this sequence,
110  * next_id is set to an empty string.
111  * If id is set to an empty string on entry, next_id returns the first id.
112  * In this case, sensor_status will be returned as ENVMON_NOT_PRESENT.
113  */
114 typedef struct {
115 	envmon_handle_t		id;
116 	uint16_t		sensor_status;
117 	int16_t			value;		/* sensor reading */
118 	envmon_thresholds_t	lowthresholds;
119 	envmon_thresholds_t	highthresholds;
120 	envmon_handle_t		next_id;
121 } envmon_sensor_t;
122 
123 typedef struct {
124 	envmon_handle_t	id;
125 	uint16_t		sensor_status;
126 	uint16_t		condition;	/* 0 = within limits */
127 	envmon_handle_t	next_id;
128 } envmon_indicator_t;
129 
130 typedef struct {
131 	envmon_handle_t	id;
132 	uint16_t		sensor_status;
133 	uint16_t		speed;
134 	char			units[ENVMON_MAXNAMELEN];
135 	envmon_thresholds_t	lowthresholds;
136 	envmon_handle_t		next_id;
137 } envmon_fan_t;
138 
139 /*
140  * Values for led_state
141  */
142 #define	ENVMON_LED_OFF		0
143 #define	ENVMON_LED_ON		1
144 #define	ENVMON_LED_BLINKING	2
145 #define	ENVMON_LED_FLASHING	3
146 
147 /*
148  * Values for the hue of the leds
149  */
150 #define	ENVMON_LED_CLR_NONE	((int8_t)(-1))
151 #define	ENVMON_LED_CLR_ANY	0
152 #define	ENVMON_LED_CLR_WHITE	1
153 #define	ENVMON_LED_CLR_BLUE	2
154 #define	ENVMON_LED_CLR_GREEN	3
155 #define	ENVMON_LED_CLR_AMBER	4
156 #define	ENVMON_LED_CLR_RED	5
157 
158 typedef struct {
159 	envmon_handle_t		id;
160 	uint16_t		sensor_status;
161 	int8_t			led_state;
162 	int8_t			led_color;
163 	envmon_handle_t		next_id;
164 } envmon_led_info_t;
165 
166 typedef struct {
167 	envmon_handle_t		id;
168 	int8_t			led_state;
169 } envmon_led_ctl_t;
170 
171 /*
172  * Values for alarm_state
173  */
174 #define	ENVMON_ALARM_OFF	0
175 #define	ENVMON_ALARM_ON		1
176 
177 typedef struct {
178 	envmon_handle_t		id;
179 	uint16_t		sensor_status;
180 	int8_t			alarm_state;
181 	envmon_handle_t		next_id;
182 } envmon_alarm_info_t;
183 
184 typedef struct {
185 	envmon_handle_t		id;
186 	int8_t			alarm_state;
187 } envmon_alarm_ctl_t;
188 
189 /*
190  * Values for fru_status
191  */
192 #define	ENVMON_FRU_NOT_PRESENT	0
193 #define	ENVMON_FRU_PRESENT	1
194 #define	ENVMON_FRU_FAULT	2
195 #define	ENVMON_FRU_DOWNLOAD	3	/* flash update or download active */
196 
197 typedef struct {
198 	envmon_handle_t		id;
199 	uint8_t			sensor_status;
200 	uint8_t			fru_status;
201 	envmon_handle_t		next_id;
202 } envmon_hpu_t;
203 
204 /*
205  * env_sysinto_t is used to return limits on various item types
206  */
207 typedef struct {
208 	uint16_t	maxVoltSens;	/* max number of voltage sensors */
209 	uint16_t	maxVoltInd;	/* max number of voltage indicators */
210 	uint16_t	maxAmpSens;	/* max number of current sensors */
211 	uint16_t	maxAmpInd;	/* max number of circuit breakers */
212 	uint16_t	maxTempSens;	/* max number of temperature sensors */
213 	uint16_t	maxTempInd;	/* max number of temp'r indicators */
214 	uint16_t	maxFanSens;	/* max number of fan speed sensors */
215 	uint16_t	maxFanInd;	/* max number of fan indicators */
216 	uint16_t	maxLED;		/* max number of LEDs */
217 	uint16_t	maxHPU;		/* max number of Hot Pluggable Units */
218 } envmon_sysinfo_t;
219 
220 /*
221  * envmon_keysw_t is used to return the current value of the
222  * keyswitch (if fitted)
223  */
224 typedef enum envmon_keysw_pos {
225 	ENVMON_KEYSW_POS_UNKNOWN	= 0,
226 	ENVMON_KEYSW_POS_NORMAL,
227 	ENVMON_KEYSW_POS_DIAG,
228 	ENVMON_KEYSW_POS_LOCKED,
229 	ENVMON_KEYSW_POS_OFF
230 } envmon_keysw_pos_t;
231 
232 #ifdef	__cplusplus
233 }
234 #endif
235 
236 #endif	/* _SYS_ENVMON_H */
237