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 * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms. 24 */ 25 26#ifndef _ENVD_H 27#define _ENVD_H 28 29#include <sys/types.h> 30#include <libintl.h> 31 32#ifdef __cplusplus 33extern "C" { 34#endif 35 36/* 37 * Chicago Platform Details 38 */ 39#define MAX_SENSORS 9 40#define MAX_FANS 6 41 42/* 43 * Fan names and ids 44 */ 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" 50 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 56 57#define CPU0_FAN_ID SYSTEM_FAN0_ID 58#define CPU1_FAN_ID SYSTEM_FAN1_ID 59 60/* 61 * Sensor names and ids 62 */ 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" 72 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 82 83/* 84 * Hard disk sensor names and ids 85 */ 86#define ENV_DISK0 "hard-disk0" 87#define ENV_DISK1 "hard-disk1" 88#define ENV_DISK2 "hard-disk2" 89#define ENV_DISK3 "hard-disk3" 90 91#define DISK0_ID 0 92#define DISK1_ID 1 93#define DISK2_ID 2 94#define DISK3_ID 3 95 96/* 97 * Thresholds and other constants 98 */ 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" 121 122#define MAX_RETRIES_FOR_FAN_FAULT 10 123#define MAX_FAN_RETRIES 14 124#define MAX_SENSOR_RETRIES 14 125 126#define TACH_TO_RPM(tach) (((tach) == 0) ? 0 : (90000 * 60)/(tach)) 127 128/* 129 * constants used for retrieving SMART data 130 */ 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 145 146#define DISK0_PHYSPATH \ 147 "/pci@1e,600000/pci@0/pci@9/pci@0/scsi@1/sd@0,0" 148 149#define DISK1_PHYSPATH \ 150 "/pci@1e,600000/pci@0/pci@9/pci@0/scsi@1/sd@1,0" 151 152#define DISK2_PHYSPATH \ 153 "/pci@1e,600000/pci@0/pci@9/pci@0/scsi@1/sd@2,0" 154 155#define DISK3_PHYSPATH \ 156 "/pci@1e,600000/pci@0/pci@9/pci@0/scsi@1/sd@3,0" 157 158#define ENV_DISK0_DEVFS \ 159"/devices/pci@1e,600000/pci@0/pci@9/pci@0/scsi@1/sd@0,0:a,raw" 160 161#define ENV_DISK1_DEVFS \ 162"/devices/pci@1e,600000/pci@0/pci@9/pci@0/scsi@1/sd@1,0:a,raw" 163 164#define ENV_DISK2_DEVFS \ 165"/devices/pci@1e,600000/pci@0/pci@9/pci@0/scsi@1/sd@2,0:a,raw" 166 167#define ENV_DISK3_DEVFS \ 168"/devices/pci@1e,600000/pci@0/pci@9/pci@0/scsi@1/sd@3,0:a,raw" 169 170#define DISK0_NODE_PATH \ 171"name:/platform/pci@1e,600000/pci@0/pci@9/pci@0/scsi@1/sd@0,0" 172 173#define DISK1_NODE_PATH \ 174"name:/platform/pci@1e,600000/pci@0/pci@9/pci@0/scsi@1/sd@1,0" 175 176#define DISK2_NODE_PATH \ 177"name:/platform/pci@1e,600000/pci@0/pci@9/pci@0/scsi@1/sd@2,0" 178 179#define DISK3_NODE_PATH \ 180"name:/platform/pci@1e,600000/pci@0/pci@9/pci@0/scsi@1/sd@3,0" 181 182#define SCSI_CONTROLLER_NODE_PATH \ 183 "name:/platform/pci@1e,600000/pci@0/pci@9/pci@0/scsi@1" 184 185/* CPU Path Names */ 186#define CPU0_PATH "_class:/jbus/cpu?ID=0" 187#define CPU1_PATH "_class:/jbus/cpu?ID=1" 188 189#define ENV_MONITOR_DEVFS "/devices/ebus@1f,464000/env-monitor@3,0" 190 191 192/* 193 * devfs-path for various fans and their min/max speeds 194 */ 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" 205 206/* MIN and MAX SPEED are in RPM units */ 207 208#define CPU_FAN_SPEED_MIN 250 209#define CPU_FAN_SPEED_MAX 5000 210 211#define SYSTEM_FAN_SPEED_MIN 250 212#define SYSTEM_FAN_SPEED_MAX 5000 213 214/* 215 * devfs-path for various temperature sensors and CPU platform path 216 */ 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" 235 236/* 237 * Temperature type 238 */ 239typedef int16_t tempr_t; 240 241/* 242 * SEEPROM LAYOUT 243 * 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. 250 * 251 * 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 * +-------------------+-------------------+ 266 * 267 * 268 * +---------+---------+---------------------------------------+ 269 * ENVSEG_OFF: | ESEG_VER| N_SNSRS | SENSOR1_ID | 270 * +---------+---------+---------------------------------------+ 271 * | SNSR1_DOFF | SENSOR2_ID | 272 * +-------------------+---------------------------------------+ 273 * ~ ~ 274 * ~ ~ 275 * +-------------------+---------------------------------------+ 276 * | SNSRm_DOFF | 277 * +-------------------+ 278 * 279 * 280 * +---------+---------+--------+----------+---------+---------+ 281 * SNSRk_DOFF: | HI_POFF | HI_SHUT | HI_WARN| LO_WARN | LO_SHUT | LO_POFF | 282 * +-------------------+--------+----------+---------+---------+ 283 */ 284 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" 288 289/* 290 * SEEPROM section header 291 */ 292#define SSCN_TAG 0x08 293#define SSCN_VER 0x0001 294#define SSCN_OFFSET 0x1800 295typedef 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; 302 303/* 304 * SEEPROM segment header 305 */ 306typedef 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" */ 313 314/* 315 * Envseg layout V2 (stripped-down version) 316 */ 317typedef 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; 325 326typedef 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; 330 331#define ENVSEG_VERSION 2 332typedef 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; 337 338/* 339 * Macros to fetch 16 and 32 bit msb-to-lsb data from unaligned addresses 340 */ 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) 345 346/* 347 * Macros to check sensor/disk temperatures 348 */ 349#define SENSOR_TEMP_IN_WARNING_RANGE(val, sensorp) \ 350 ((val) > (sensorp)->es->esb_high_warning || \ 351 (val) < (char)((sensorp)->es->esb_low_warning)) 352 353#define SENSOR_TEMP_IN_SHUTDOWN_RANGE(val, sensorp) \ 354 ((val) > (sensorp)->es->esb_high_shutdown || \ 355 (val) < (char)((sensorp)->es->esb_low_shutdown)) 356 357#define DISK_TEMP_IN_WARNING_RANGE(val, diskp) \ 358 ((val) > (diskp)->high_warning || \ 359 (val) < (char)((diskp)->low_warning)) 360 361#define DISK_TEMP_IN_SHUTDOWN_RANGE(val, diskp) \ 362 ((val) > (diskp)->high_shutdown || \ 363 (val) < (char)((diskp)->low_shutdown)) 364 365#define SENSOR_WARN 1 366#define SENSOR_OK 0 367 368#define FAN_FAILED 1 369#define FAN_OK 0 370 371/* 372 * Default limits for sensors in case environmental segment is absent 373 */ 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 380 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 387 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 394 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 401 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 408 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 415 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 422 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 429 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 436 437/* 438 * Temperature sensor related data structure 439 */ 440typedef 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; 454 455extern env_sensor_t *sensor_lookup(char *sensor_name); 456extern int get_temperature(env_sensor_t *, tempr_t *); 457 458typedef 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; 480 481extern env_disk_t *disk_lookup(char *disk_name); 482extern int disk_temperature(env_disk_t *, tempr_t *); 483 484/* 485 * Fan information data structure 486 */ 487typedef int fanspeed_t; 488 489typedef 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; 502 503/* 504 * Tuneables 505 */ 506typedef 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; 515 516/* 517 * Smart structures 518 */ 519 520typedef 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; 526 527typedef 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; 537 538extern env_fan_t *fan_lookup(char *fan_name); 539extern int get_fan_speed(env_fan_t *, fanspeed_t *); 540extern int set_fan_speed(env_fan_t *, fanspeed_t); 541 542extern int env_debug; 543extern void envd_log(int pri, const char *fmt, ...); 544 545/* 546 * Various messages 547 */ 548#define ENVD_PLUGIN_INIT_FAILED \ 549 gettext("SUNW_piclenvd: initialization failed!\n") 550 551#define ENVD_PICL_SETUP_FAILED \ 552 gettext("SUNW_piclenvd: PICL setup failed!\n") 553 554#define PM_THREAD_CREATE_FAILED \ 555 gettext("SUNW_piclenvd: pmthr thread creation failed!\n") 556 557#define PM_THREAD_EXITING \ 558 gettext("SUNW_piclenvd: pmthr exiting! errno:%d %s\n") 559 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") 563 564#define ENVTHR_THREAD_CREATE_FAILED \ 565 gettext("SUNW_piclenvd: envthr thread creation failed!\n") 566 567#define ENV_SHUTDOWN_MSG \ 568 gettext("SUNW_piclenvd: '%s' sensor temperature %d outside safe " \ 569 "limits (%d...%d). Shutting down the system.\n") 570 571#define ENV_WARNING_MSG \ 572 gettext("SUNW_piclenvd: '%s' sensor temperature %d outside safe " \ 573 "operating limits (%d...%d).\n") 574 575#define ENV_FAN_OPEN_FAIL \ 576 gettext("SUNW_piclenvd: can't open '%s' fan path:%s errno:%d %s\n") 577 578#define ENV_SENSOR_OPEN_FAIL \ 579 gettext("SUNW_piclenvd: can't open '%s' sensor path:%s errno:%d %s\n") 580 581#define ENV_SENSOR_ACCESS_FAIL \ 582 gettext("SUNW_piclenvd: can't access '%s' sensor errno:%d %s\n") 583 584#define ENV_SENSOR_ACCESS_OK \ 585 gettext("SUNW_piclenvd: '%s' sensor is accessible now.\n") 586 587#define ENV_FAN_FAILURE_WARNING_MSG \ 588 gettext("SUNW_piclenvd: %s has Failed.\n" \ 589 "(rpm = %s status = %s)\n") 590 591#define ENV_FAN_OK_MSG \ 592 gettext("SUNW_piclenvd: %s is OKAY.\n") 593 594#define ENV_FRU_OPEN_FAIL \ 595 gettext("SUNW_piclenvd: can't open FRU SEEPROM path:%s errno:%d\n") 596 597#define ENV_FRU_BAD_ENVSEG \ 598 gettext("SUNW_piclenvd: version mismatch or environmental segment " \ 599 "header too short in FRU SEEPROM %s\n") 600 601#define ENV_FRU_BAD_SCNHDR \ 602 gettext("SUNW_piclenvd: invalid section header tag:%x version:%x\n") 603 604#define ENV_FRU_NOMEM_FOR_SEG \ 605 gettext("SUNW_piclenvd: cannot allocate %d bytes for env seg memory\n") 606 607#define ENV_DEFAULT_LIMITS \ 608 gettext("SUNW_piclenvd: error reading ES segment, using defaults\n") 609 610#ifdef __cplusplus 611} 612#endif 613 614#endif /* _ENVD_H */ 615