xref: /illumos-gate/usr/src/cmd/picl/plugins/sun4u/chicago/envd/envd.h (revision bbc88f3a6c6d8e21cb05884590e32f7fb7b52e05)
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 2005 Sun Microsystems, Inc.  All rights reserved.
24  * Use is subject to license terms.
25  */
26 
27 #ifndef	_ENVD_H
28 #define	_ENVD_H
29 
30 #pragma ident	"%Z%%M%	%I%	%E% SMI"
31 
32 #include <sys/types.h>
33 #include <libintl.h>
34 
35 #ifdef	__cplusplus
36 extern "C" {
37 #endif
38 
39 /*
40  * Chicago Platform Details
41  */
42 #define	MAX_SENSORS		8
43 #define	MAX_FANS		6
44 
45 /*
46  * Fan names and ids
47  */
48 #define	ENV_SYSTEM_FAN0		"system-fan0"
49 #define	ENV_SYSTEM_FAN1		"system-fan1"
50 #define	ENV_SYSTEM_FAN2		"system-fan2"
51 #define	ENV_SYSTEM_FAN3		"system-fan3"
52 #define	ENV_SYSTEM_FAN4		"system-fan4"
53 
54 #define	SYSTEM_FAN0_ID		0
55 #define	SYSTEM_FAN1_ID		1
56 #define	SYSTEM_FAN2_ID		2
57 #define	SYSTEM_FAN3_ID		3
58 #define	SYSTEM_FAN4_ID		4
59 
60 #define	CPU0_FAN_ID		SYSTEM_FAN0_ID
61 #define	CPU1_FAN_ID		SYSTEM_FAN1_ID
62 
63 /*
64  * Sensor names and ids
65  */
66 #define	SENSOR_CPU0		"cpu0"
67 #define	SENSOR_CPU1		"cpu1"
68 #define	SENSOR_MB		"MotherBoard"
69 #define	SENSOR_ADT7462		"ADT7462"
70 #define	SENSOR_LM95221		"LM95221"
71 #define	SENSOR_FIRE		"FireASIC"
72 #define	SENSOR_LSI1064		"LSI1064"
73 #define	SENSOR_FRONT_PANEL	"Front_panel"
74 
75 #define	CPU0_SENSOR_ID		0
76 #define	CPU1_SENSOR_ID		1
77 #define	ADT7462_SENSOR_ID	2
78 #define	MB_SENSOR_ID		3
79 #define	LM95221_SENSOR_ID	4
80 #define	FIRE_SENSOR_ID		5
81 #define	LSI1064_SENSOR_ID	6
82 #define	FRONT_PANEL_SENSOR_ID	7
83 
84 /*
85  * Hard disk sensor names and ids
86  */
87 #define	ENV_DISK0		"hard-disk0"
88 #define	ENV_DISK1		"hard-disk1"
89 #define	ENV_DISK2		"hard-disk2"
90 #define	ENV_DISK3		"hard-disk3"
91 
92 #define	DISK0_ID		0
93 #define	DISK1_ID		1
94 #define	DISK2_ID		2
95 #define	DISK3_ID		3
96 
97 /*
98  * Thresholds and other constants
99  */
100 #define	DISK_SCAN_INTERVAL		10
101 #define	DISK_HIGH_WARN_TEMPERATURE	55
102 #define	DISK_LOW_WARN_TEMPERATURE	5
103 #define	DISK_HIGH_SHUTDOWN_TEMPERATURE	60
104 #define	DISK_LOW_SHUTDOWN_TEMPERATURE	0
105 #define	DISK_INVALID_TEMP		0xFFFF
106 #define	LSI1064_VENDOR_ID		0x1000
107 #define	LSI1064_DEVICE_ID		0x50
108 #define	FAN_SCAN_INTERVAL		10
109 #define	SENSOR_SCAN_INTERVAL		2
110 #define	SENSOR_WARNING_DURATION		4
111 #define	SENSOR_WARNING_INTERVAL		30
112 #define	DISK_WARNING_INTERVAL		30
113 #define	DISK_WARNING_DURATION		20
114 #define	SENSOR_SHUTDOWN_INTERVAL	60
115 #define	DISK_SHUTDOWN_INTERVAL		30
116 #define	ENV_CONF_FILE			"envmodel.conf"
117 #define	TUNABLE_CONF_FILE		"piclenvd.conf"
118 #define	PM_DEVICE			"/dev/pm"
119 #define	SHUTDOWN_CMD			"/usr/sbin/shutdown -y -g 60 -i 5"
120 #define	PICL_PLUGINS_NODE		"plugins"
121 #define	PICL_ENVIRONMENTAL_NODE		"environmental"
122 
123 #define	MAX_RETRIES_FOR_FAN_FAULT	10
124 #define	MAX_FAN_RETRIES			14
125 #define	MAX_SENSOR_RETRIES		14
126 
127 #define	TACH_TO_RPM(tach)		(90000 * 60)/tach
128 
129 #define	DISK0_PHYSPATH	\
130 	"/pci@1e,600000/pci@0/pci@a/pci@0/LSILogic,sas@1/sd@0,0"
131 
132 #define	DISK1_PHYSPATH	\
133 	"/pci@1e,600000/pci@0/pci@a/pci@0/LSILogic,sas@1/sd@1,0"
134 
135 #define	DISK2_PHYSPATH  \
136 	"/pci@1e,600000/pci@0/pci@a/pci@0/LSILogic,sas@1/sd@2,0"
137 
138 #define	DISK3_PHYSPATH  \
139 	"/pci@1e,600000/pci@0/pci@a/pci@0/LSILogic,sas@1/sd@3,0"
140 
141 #define	ENV_DISK0_DEVFS	\
142 "/devices/pci@1e,600000/pci@0/pci@a/pci@0/LSILogic,sas@1/sd@0,0:a,raw"
143 
144 #define	ENV_DISK1_DEVFS	\
145 "/devices/pci@1e,600000/pci@0/pci@a/pci@0/LSILogic,sas@1/sd@1,0:a,raw"
146 
147 #define	ENV_DISK2_DEVFS \
148 "/devices/pci@1e,600000/pci@0/pci@a/pci@0/LSILogic,sas@1/sd@2,0:a,raw"
149 
150 #define	ENV_DISK3_DEVFS \
151 "/devices/pci@1e,600000/pci@0/pci@a/pci@0/LSILogic,sas@1/sd@3,0:a,raw"
152 
153 #define	DISK0_NODE_PATH	\
154 "name:/platform/pci@1e,600000/pci@0/pci@a/pci@0/LSILogic,sas@1/sd@0,0"
155 
156 #define	DISK1_NODE_PATH	\
157 "name:/platform/pci@1e,600000/pci@0/pci@a/pci@0/LSILogic,sas@1/sd@1,0"
158 
159 #define	DISK2_NODE_PATH \
160 "name:/platform/pci@1e,600000/pci@0/pci@a/pci@0/LSILogic,sas@1/sd@2,0"
161 
162 #define	DISK3_NODE_PATH \
163 "name:/platform/pci@1e,600000/pci@0/pci@a/pci@0/LSILogic,sas@1/sd@3,0"
164 
165 #define	SCSI_CONTROLLER_NODE_PATH	\
166 	"name:/platform/pci@1e,600000/pci@0/pci@a/pci@0/LSILogic,sas@1"
167 
168 /* CPU Path Names */
169 #define	CPU0_PATH		"_class:/jbus/cpu?ID=0"
170 #define	CPU1_PATH		"_class:/jbus/cpu?ID=1"
171 
172 #define	ENV_MONITOR_DEVFS	"/devices/ebus@1f,464000/env-monitor@3,0"
173 
174 
175 /*
176  * devfs-path for various fans and their min/max speeds
177  */
178 #define	ENV_SYSTEM_FAN0_DEVFS	\
179 	"/devices/ebus@1f,464000/env-monitor@3,0:fan_0"
180 #define	ENV_SYSTEM_FAN1_DEVFS	\
181 	"/devices/ebus@1f,464000/env-monitor@3,0:fan_1"
182 #define	ENV_SYSTEM_FAN2_DEVFS	\
183 	"/devices/ebus@1f,464000/env-monitor@3,0:fan_2"
184 #define	ENV_SYSTEM_FAN3_DEVFS	\
185 	"/devices/ebus@1f,464000/env-monitor@3,0:fan_3"
186 #define	ENV_SYSTEM_FAN4_DEVFS	\
187 	"/devices/ebus@1f,464000/env-monitor@3,0:fan_4"
188 
189 /* MIN and MAX SPEED are in RPM units */
190 
191 #define	CPU_FAN_SPEED_MIN	250
192 #define	CPU_FAN_SPEED_MAX	5000
193 
194 #define	SYSTEM_FAN_SPEED_MIN	250
195 #define	SYSTEM_FAN_SPEED_MAX	5000
196 
197 /*
198  * devfs-path for various temperature sensors and CPU platform path
199  */
200 #define	SENSOR_CPU0_DEVFS	\
201 	"/devices/ebus@1f,464000/env-monitor@3,0:cpu_0"
202 #define	SENSOR_CPU1_DEVFS	\
203 	"/devices/ebus@1f,464000/env-monitor@3,0:cpu_1"
204 #define	SENSOR_MB_DEVFS	\
205 	"/devices/ebus@1f,464000/env-monitor@3,0:mb"
206 #define	SENSOR_ADT7462_DEVFS	\
207 	"/devices/ebus@1f,464000/env-monitor@3,0:adt7462"
208 #define	SENSOR_LM95221_DEVFS	\
209 	"/devices/ebus@1f,464000/env-monitor@3,0:lm95221"
210 #define	SENSOR_FIRE_DEVFS	\
211 	"/devices/ebus@1f,464000/env-monitor@3,0:fire"
212 #define	SENSOR_LSI1064_DEVFS	\
213 	"/devices/ebus@1f,464000/env-monitor@3,0:lsi1064"
214 #define	SENSOR_FRONT_PANEL_DEVFS	\
215 	"/devices/ebus@1f,464000/env-monitor@3,0:front_panel"
216 
217 /*
218  * Temperature type
219  */
220 typedef int16_t tempr_t;
221 
222 /*
223  *				SEEPROM LAYOUT
224  *
225  *      The layout of environmental segment in the SEEPROM in Chicago is as
226  *      shown below. Note that this is a stripped-down version of the Envseg
227  *      Definition v2.0 (but compatible). In particular, piclenvd in Chicago
228  *      does not use the #FanEntries and the list of FANn_ID/FANn_DOFF
229  *      pairs, and it doesn't use the SensorPolicy and the list of
230  *      Measured/Corrected pairs for the temperature sensor values either.
231  *
232  *
233  *                   0         1         2         3         4         5
234  *		+---------+------------------+----------+---------+---------+
235  *	0x1800:	| HDR_TAG |      HDR_VER     |  HDR_LEN | HDR_CRC |  N_SEGS |
236  *		+---------+---------+--------+----------+---------+---------+
237  *	0x1806:	|     SEG1_NAME	    |	            SEG1_DESC               |
238  *		+-------------------+-------------------+-------------------+
239  *	0x180C:	|     SEG1_OFF	    |	  SEG1_LEN	|      SEG2_NAME    |
240  *		+-------------------+-------------------+-------------------+
241  *		~							    ~
242  *		.							    .
243  *		~							    ~
244  *		+-------------------+-------------------+-------------------+
245  *	0xXXXX:	|     SEGn_OFF	    |	  SEGn_LEN	|
246  *		+-------------------+-------------------+
247  *
248  *
249  *              +---------+---------+---------------------------------------+
250  *  ENVSEG_OFF:	| ESEG_VER| N_SNSRS |            SENSOR1_ID                 |
251  *              +---------+---------+---------------------------------------+
252  *	        |    SNSR1_DOFF     |            SENSOR2_ID                 |
253  *              +-------------------+---------------------------------------+
254  *		~							    ~
255  *		~							    ~
256  *		+-------------------+---------------------------------------+
257  *	        |    SNSRm_DOFF     |
258  *              +-------------------+
259  *
260  *
261  *		+---------+---------+--------+----------+---------+---------+
262  * SNSRk_DOFF:	| HI_POFF | HI_SHUT | HI_WARN| LO_WARN  | LO_SHUT | LO_POFF |
263  *              +-------------------+--------+----------+---------+---------+
264  */
265 
266 #define	I2C_DEVFS		"/devices/ebus@1f,464000/i2c@3,80"
267 #define	IOFRU_DEV		"front-io-fru-prom@0,a4:front-io-fru-prom"
268 #define	FRU_SEEPROM_NAME	"front-io-fru-prom"
269 
270 /*
271  * SEEPROM section header
272  */
273 #define	SSCN_TAG	0x08
274 #define	SSCN_VER	0x0001
275 #define	SSCN_OFFSET	0x1800
276 typedef struct {
277 	uint8_t sscn_tag;		/* section header tag */
278 	uint8_t sscn_ver[2];		/* section header version */
279 	uint8_t sscn_len;		/* section header length */
280 	uint8_t sscn_crc;		/* unused */
281 	uint8_t sscn_nsegs;		/* total number of segments */
282 } seeprom_scn_t;
283 
284 /*
285  * SEEPROM segment header
286  */
287 typedef struct {
288 	uint16_t sseg_name;		/* segment name */
289 	uint16_t sseg_desc[2];		/* segment descriptor */
290 	uint16_t sseg_off;		/* segment data offset */
291 	uint16_t sseg_len;		/* segment length */
292 } seeprom_seg_t;
293 #define	ENVSEG_NAME	0x4553		/* "ES" */
294 
295 /*
296  * Envseg layout V2 (stripped-down version)
297  */
298 typedef struct {
299 	uint8_t esb_high_power_off;
300 	uint8_t esb_high_shutdown;
301 	uint8_t esb_high_warning;
302 	uint8_t esb_low_warning;
303 	uint8_t esb_low_shutdown;
304 	uint8_t esb_low_power_off;
305 } es_sensor_blk_t;
306 
307 typedef struct {
308 	uint16_t ess_id[2];		/* unique sensor id (on this FRU) */
309 	uint16_t ess_off;		/* sensor data blk offset */
310 } es_sensor_t;
311 
312 #define	ENVSEG_VERSION	2
313 typedef struct {
314 	uint8_t esd_ver;		/* envseg version */
315 	uint8_t esd_nsensors;		/* envseg total number of sensor blks */
316 	es_sensor_t esd_sensors[1];	/* sensor table (variable length) */
317 } es_data_t;
318 
319 /*
320  * Macros to fetch 16 and 32 bit msb-to-lsb data from unaligned addresses
321  */
322 #define	GET_UNALIGN16(addr)	\
323 	(((*(uint8_t *)addr) << 8) | *((uint8_t *)addr + 1))
324 #define	GET_UNALIGN32(addr)	\
325 	(GET_UNALIGN16(addr) << 16) | GET_UNALIGN16((uint8_t *)addr + 2)
326 
327 /*
328  * Macros to check sensor/disk temperatures
329  */
330 #define	SENSOR_TEMP_IN_WARNING_RANGE(val, sensorp) \
331 	((val) > (sensorp)->es->esb_high_warning || \
332 	(val) < (char)((sensorp)->es->esb_low_warning))
333 
334 #define	SENSOR_TEMP_IN_SHUTDOWN_RANGE(val, sensorp) \
335 	((val) > (sensorp)->es->esb_high_shutdown || \
336 	(val) < (char)((sensorp)->es->esb_low_shutdown))
337 
338 #define	DISK_TEMP_IN_WARNING_RANGE(val, diskp) \
339 	((val) > (diskp)->high_warning || \
340 	(val) < (char)((diskp)->low_warning))
341 
342 #define	DISK_TEMP_IN_SHUTDOWN_RANGE(val, diskp) \
343 	((val) > (diskp)->high_shutdown || \
344 	(val) < (char)((diskp)->low_shutdown))
345 
346 #define	SENSOR_WARN		1
347 #define	SENSOR_OK		0
348 
349 #define	FAN_FAILED		1
350 #define	FAN_OK			0
351 
352 /*
353  * Default limits for sensors in case environmental segment is absent
354  */
355 #define	CPU0_HIGH_POWER_OFF		105
356 #define	CPU0_HIGH_SHUTDOWN		100
357 #define	CPU0_HIGH_WARNING		95
358 #define	CPU0_LOW_WARNING		5
359 #define	CPU0_LOW_SHUTDOWN		0
360 #define	CPU0_LOW_POWER_OFF		0
361 
362 #define	CPU1_HIGH_POWER_OFF		105
363 #define	CPU1_HIGH_SHUTDOWN		100
364 #define	CPU1_HIGH_WARNING		95
365 #define	CPU1_LOW_WARNING		5
366 #define	CPU1_LOW_SHUTDOWN		0
367 #define	CPU1_LOW_POWER_OFF		0
368 
369 #define	ADT7462_HIGH_POWER_OFF		80
370 #define	ADT7462_HIGH_SHUTDOWN		75
371 #define	ADT7462_HIGH_WARNING		70
372 #define	ADT7462_LOW_WARNING		5
373 #define	ADT7462_LOW_SHUTDOWN		0
374 #define	ADT7462_LOW_POWER_OFF		0
375 
376 #define	MB_HIGH_POWER_OFF		80
377 #define	MB_HIGH_SHUTDOWN		75
378 #define	MB_HIGH_WARNING			70
379 #define	MB_LOW_WARNING			5
380 #define	MB_LOW_SHUTDOWN			0
381 #define	MB_LOW_POWER_OFF		0
382 
383 #define	LM95221_HIGH_POWER_OFF		80
384 #define	LM95221_HIGH_SHUTDOWN		75
385 #define	LM95221_HIGH_WARNING		70
386 #define	LM95221_LOW_WARNING		5
387 #define	LM95221_LOW_SHUTDOWN		0
388 #define	LM95221_LOW_POWER_OFF		0
389 
390 #define	FIRE_HIGH_POWER_OFF		105
391 #define	FIRE_HIGH_SHUTDOWN		100
392 #define	FIRE_HIGH_WARNING		95
393 #define	FIRE_LOW_WARNING		5
394 #define	FIRE_LOW_SHUTDOWN		0
395 #define	FIRE_LOW_POWER_OFF		0
396 
397 #define	LSI1064_HIGH_POWER_OFF		105
398 #define	LSI1064_HIGH_SHUTDOWN		100
399 #define	LSI1064_HIGH_WARNING		95
400 #define	LSI1064_LOW_WARNING		5
401 #define	LSI1064_LOW_SHUTDOWN		0
402 #define	LSI1064_LOW_POWER_OFF		0
403 
404 #define	FRONT_PANEL_HIGH_POWER_OFF	75
405 #define	FRONT_PANEL_HIGH_SHUTDOWN	70
406 #define	FRONT_PANEL_HIGH_WARNING	60
407 #define	FRONT_PANEL_LOW_WARNING		5
408 #define	FRONT_PANEL_LOW_SHUTDOWN	0
409 #define	FRONT_PANEL_LOW_POWER_OFF	0
410 
411 /*
412  * Temperature sensor related data structure
413  */
414 typedef struct env_sensor {
415 	char		*name;			/* sensor name */
416 	char		*devfs_path;		/* sensor device devfs path */
417 	int		id;
418 	int		fd;			/* device file descriptor */
419 	es_sensor_blk_t	*es;
420 	int		error;			/* error flag */
421 	boolean_t 	present;		/* sensor present */
422 	tempr_t		cur_temp;		/* current temperature */
423 	time_t		warning_start;		/* warning start time (secs) */
424 	time_t		warning_tstamp;		/* last warning time (secs) */
425 	time_t		shutdown_tstamp;	/* shutdown temp time (secs) */
426 	boolean_t 	shutdown_initiated;	/* shutdown initated */
427 } env_sensor_t;
428 
429 extern	env_sensor_t *sensor_lookup(char *sensor_name);
430 extern	int get_temperature(env_sensor_t *, tempr_t *);
431 
432 typedef struct env_disk {
433 	char		*name;			/* disk name */
434 	char		*devfs_path;	/* disk device devfs path */
435 	char		*physpath;	/* used to be probe for IDLW TIME */
436 	char		*nodepath;	/* used to detect presence of disk */
437 	uchar_t		id;
438 	int		fd;		/* device file descriptor */
439 	boolean_t	present;	/* disk present */
440 	boolean_t	tpage_supported;	/* Temperature page */
441 	int		current_temp;
442 	int		ref_temp;
443 	int		reliability_temp;
444 	uchar_t  	high_shutdown;
445 	uchar_t  	high_warning;
446 	uchar_t  	low_warning;
447 	uchar_t  	low_shutdown;
448 	time_t		warning_start;		/* warning start time (secs) */
449 	time_t		warning_tstamp;		/* last warning time (secs) */
450 	time_t		shutdown_tstamp;	/* shutdown temp time (secs) */
451 	boolean_t 	shutdown_initiated;	/* shutdown initated */
452 } env_disk_t;
453 
454 extern	env_disk_t *disk_lookup(char *disk_name);
455 extern	int disk_temperature(env_disk_t *, tempr_t *);
456 
457 /*
458  * Fan information data structure
459  */
460 typedef int fanspeed_t;
461 
462 typedef struct env_fan {
463 	char		*name;			/* fan name */
464 	char		*devfs_path;	/* fan device devfs path */
465 	uchar_t		id;
466 	fanspeed_t	speed_min;		/* minimum speed */
467 	fanspeed_t	speed_max;		/* maximum speed */
468 	int		forced_speed;		/* forced (fixed) speed */
469 	int		fd;			/* device file descriptor */
470 	boolean_t	present;		/* fan present */
471 	int		last_status;		/* Fan status */
472 	uint8_t		cspeed;			/* Current speed (tach) */
473 	uint8_t		lspeed;			/* Last speed (tach) */
474 } env_fan_t;
475 
476 /*
477  * Tuneables
478  */
479 typedef struct env_tuneable {
480 	char		*name;
481 	char		type;
482 	void		*value;
483 	int		(*rfunc)(ptree_rarg_t *, void *);
484 	int		(*wfunc)(ptree_warg_t *, const void *);
485 	int		nbytes;
486 	picl_prophdl_t proph;
487 } env_tuneable_t;
488 
489 extern	env_fan_t *fan_lookup(char *fan_name);
490 extern	int get_fan_speed(env_fan_t *, fanspeed_t *);
491 extern	int set_fan_speed(env_fan_t *, fanspeed_t);
492 
493 extern int env_debug;
494 extern void envd_log(int pri, const char *fmt, ...);
495 
496 /*
497  * Various messages
498  */
499 #define	ENVD_PLUGIN_INIT_FAILED		\
500 	gettext("SUNW_piclenvd: initialization failed!\n")
501 
502 #define	ENVD_PICL_SETUP_FAILED		\
503 	gettext("SUNW_piclenvd: PICL setup failed!\n")
504 
505 #define	PM_THREAD_CREATE_FAILED		\
506 	gettext("SUNW_piclenvd: pmthr thread creation failed!\n")
507 
508 #define	PM_THREAD_EXITING		\
509 	gettext("SUNW_piclenvd: pmthr exiting! errno:%d %s\n")
510 
511 #define	DISK_TEMP_THREAD_EXITING		\
512 	gettext("SUNW_piclenvd: Disk temp thread exiting."	\
513 	" Disk temperature will not be monitored. errno:%d %s\n")
514 
515 #define	ENVTHR_THREAD_CREATE_FAILED	\
516 	gettext("SUNW_piclenvd: envthr thread creation failed!\n")
517 
518 #define	ENV_SHUTDOWN_MSG		\
519 	gettext("SUNW_piclenvd: '%s' sensor temperature %d outside safe " \
520 	"limits (%d...%d). Shutting down the system.\n")
521 
522 #define	ENV_WARNING_MSG			\
523 	gettext("SUNW_piclenvd: '%s' sensor temperature %d outside safe " \
524 	"operating limits (%d...%d).\n")
525 
526 #define	ENV_FAN_OPEN_FAIL		\
527 	gettext("SUNW_piclenvd: can't open '%s' fan path:%s errno:%d %s\n")
528 
529 #define	ENV_SENSOR_OPEN_FAIL		\
530 	gettext("SUNW_piclenvd: can't open '%s' sensor path:%s errno:%d %s\n")
531 
532 #define	ENV_SENSOR_ACCESS_FAIL		\
533 	gettext("SUNW_piclenvd: can't access '%s' sensor errno:%d %s\n")
534 
535 #define	ENV_SENSOR_ACCESS_OK		\
536 	gettext("SUNW_piclenvd: '%s' sensor is accessible now.\n")
537 
538 #define	ENV_FAN_FAILURE_WARNING_MSG		\
539 	gettext("SUNW_piclenvd: %s has Failed.\n"	\
540 	"(rpm = %s status = %s)\n")
541 
542 #define	ENV_FAN_OK_MSG		\
543 	gettext("SUNW_piclenvd: %s is OKAY.\n")
544 
545 #define	ENV_FRU_OPEN_FAIL		\
546 	gettext("SUNW_piclenvd: can't open FRU SEEPROM path:%s errno:%d\n")
547 
548 #define	ENV_FRU_BAD_ENVSEG		\
549 	gettext("SUNW_piclenvd: version mismatch or environmental segment " \
550 		"header too short in FRU SEEPROM %s\n")
551 
552 #define	ENV_FRU_BAD_SCNHDR		\
553 	gettext("SUNW_piclenvd: invalid section header tag:%x version:%x\n")
554 
555 #define	ENV_FRU_NOMEM_FOR_SEG		\
556 	gettext("SUNW_piclenvd: cannot allocate %d bytes for env seg memory\n")
557 
558 #define	ENV_DEFAULT_LIMITS		\
559 	gettext("SUNW_piclenvd: error reading ES segment, using defaults\n")
560 
561 #ifdef	__cplusplus
562 }
563 #endif
564 
565 #endif	/* _ENVD_H */
566