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