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 2000-2002 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 #include <sys/types.h> 31 #include <libintl.h> 32 33 #ifdef __cplusplus 34 extern "C" { 35 #endif 36 37 #define SENSOR_POLL_INTERVAL 4 /* in seconds */ 38 #define WARNING_INTERVAL 30 /* in seconds */ 39 #define SHUTDOWN_INTERVAL 20 /* in seconds */ 40 #define ENV_CONF_FILE "piclenvd.conf" 41 #define ENVMODEL_CONF_FILE "envmodel.conf" 42 #define PM_DEVICE "/dev/pm" 43 #define SHUTDOWN_CMD "/usr/sbin/shutdown -y -g 60 -i 5" 44 45 /* 46 * devfs-path for various fans and their min/max speeds 47 */ 48 #define ENV_CPU_FAN_DEVFS \ 49 "/pci@1f,0/pmu@3/fan-control@0,c8:cpu_fan" 50 #define ENV_SYSTEM_FAN_DEVFS \ 51 "/pci@1f,0/pmu@3/fan-control@0,c8:sys_fan" 52 53 #define SYSTEM_FAN_SPEED_MIN 0 54 #define SYSTEM_FAN_SPEED_MAX 100 55 56 57 /* 58 * devfs-path for various temperature sensors and CPU platform path 59 */ 60 #define CPU_DIE_SENSOR_DEVFS \ 61 "/pci@1f,0/pmu@3/i2c@0,0/temperature@30:die_temp" 62 #define CPU_AMB_SENSOR_DEVFS \ 63 "/pci@1f,0/pmu@3/i2c@0,0/temperature@30:amb_temp" 64 65 /* 66 * Temperature thresholds structure 67 */ 68 typedef int16_t tempr_t; 69 70 typedef struct { 71 tempr_t low_power_off; /* low power-off temperature */ 72 tempr_t high_power_off; /* high power-off temperature */ 73 tempr_t low_shutdown; /* low shutdown temperature */ 74 tempr_t high_shutdown; /* high shutdown temperature */ 75 tempr_t low_warning; /* low warning temperature */ 76 tempr_t high_warning; /* high warning temperature */ 77 tempr_t target_temp; /* target temperature */ 78 } sensor_thresh_t; 79 80 #define TEMP_IN_SHUTDOWN_RANGE(val, threshp) \ 81 ((val) > (threshp)->high_shutdown || (val) < (threshp)->low_shutdown) 82 83 #define TEMP_IN_WARNING_RANGE(val, threshp) \ 84 ((val) > (threshp)->high_warning || (val) < (threshp)->low_warning) 85 86 87 /* 88 * CPU "die" temperature thresholds 89 */ 90 #define CPU_DIE_HIGH_POWER_OFF 125 91 #define CPU_DIE_HIGH_SHUTDOWN 90 92 #define CPU_DIE_HIGH_WARNING 85 93 #define CPU_DIE_TARGET_TEMP 80 94 #define CPU_DIE_LOW_WARNING 0 95 #define CPU_DIE_LOW_SHUTDOWN -10 96 #define CPU_DIE_LOW_POWER_OFF -20 97 98 /* 99 * CPU ambient temperature thresholds 100 */ 101 #define CPU_AMB_HIGH_POWER_OFF 70 102 #define CPU_AMB_HIGH_SHUTDOWN 60 103 #define CPU_AMB_HIGH_WARNING 40 104 #define CPU_AMB_TARGET_TEMP 32 105 #define CPU_AMB_LOW_WARNING 0 106 #define CPU_AMB_LOW_SHUTDOWN -10 107 #define CPU_AMB_LOW_POWER_OFF -20 108 109 110 /* 111 * Fan names 112 */ 113 #define ENV_SYSTEM_FAN "system" 114 115 /* 116 * Sensor names 117 */ 118 #define SENSOR_CPU_DIE "cpu" 119 #define SENSOR_CPU_AMB "cpu-ambient" 120 121 /* 122 * Temperature sensor related data structure 123 */ 124 typedef struct env_sensor { 125 char *name; /* sensor name */ 126 char *devfs_path; /* sensor device devfs path */ 127 sensor_thresh_t *temp_thresh; /* sensor temp threshold */ 128 int fd; /* device file descriptor */ 129 int error; /* error flag */ 130 boolean_t present; /* sensor present */ 131 tempr_t cur_temp; /* current temperature */ 132 time_t warning_tstamp; /* last warning time in secs */ 133 time_t shutdown_tstamp; /* shutdown temp time (secs) */ 134 boolean_t shutdown_initiated; /* shutdown initated */ 135 } env_sensor_t; 136 137 extern env_sensor_t *sensor_lookup(char *sensor_name); 138 extern int get_temperature(env_sensor_t *, tempr_t *); 139 140 /* 141 * Fan information data structure 142 */ 143 typedef uint8_t fanspeed_t; 144 145 typedef struct env_fan { 146 char *name; /* fan name */ 147 char *devfs_path; /* fan device devfs path */ 148 fanspeed_t speed_min; /* minimum speed */ 149 fanspeed_t speed_max; /* maximum speed */ 150 int fd; /* device file descriptor */ 151 boolean_t present; /* fan present */ 152 fanspeed_t cur_speed; /* current fan speed */ 153 fanspeed_t prev_speed; /* previous fan speed */ 154 } env_fan_t; 155 156 157 extern env_fan_t *fan_lookup(char *fan_name); 158 extern int get_fan_speed(env_fan_t *, fanspeed_t *); 159 160 extern int env_debug; 161 extern void envd_log(int pri, const char *fmt, ...); 162 163 /* 164 * Various messages 165 */ 166 #define ENVD_PLUGIN_INIT_FAILED \ 167 gettext("SUNW_piclenvd: initialization failed!\n") 168 169 #define ENVD_PICL_SETUP_FAILED \ 170 gettext("SUNW_piclenvd: PICL setup failed!\n") 171 172 #define PM_THREAD_CREATE_FAILED \ 173 gettext("SUNW_piclenvd: pmthr thread creation failed!\n") 174 175 #define PM_THREAD_EXITING \ 176 gettext("SUNW_piclenvd: pmthr exiting! errno:%d %s\n") 177 178 #define ENV_THREAD_CREATE_FAILED \ 179 gettext("SUNW_piclenvd: envthr thread creation failed!\n") 180 181 #define ENV_SHUTDOWN_MSG \ 182 gettext("SUNW_piclenvd: '%s' sensor temperature %d outside safe " \ 183 "limits (%d...%d). Shutting down the system.\n") 184 185 #define ENV_WARNING_MSG \ 186 gettext("SUNW_piclenvd: '%s' sensor temperature %d outside safe " \ 187 "operating limits (%d...%d).\n") 188 189 #define ENV_FAN_OPEN_FAIL \ 190 gettext("SUNW_piclenvd: can't open '%s' fan path:%s errno:%d %s\n") 191 192 #define ENV_SENSOR_OPEN_FAIL \ 193 gettext("SUNW_piclenvd: can't open '%s' sensor path:%s errno:%d %s\n") 194 195 #define ENV_SENSOR_ACCESS_FAIL \ 196 gettext("SUNW_piclenvd: can't access '%s' sensor errno:%d %s\n") 197 198 #define ENV_SENSOR_ACCESS_OK \ 199 gettext("SUNW_piclenvd: '%s' sensor is accessible now.\n") 200 201 #define ENV_CONF_INT_EXPECTED \ 202 gettext("SUNW_piclenvd: file:%s line:%d Invalid syntax or integer " \ 203 "value outside range for keyword '%s'.\n") 204 205 #define ENV_CONF_STRING_EXPECTED \ 206 gettext("SUNW_piclenvd: file:%s line:%d Invalid syntax for keyword " \ 207 "'%s'. Expecting string in double quotes (length < %d).\n") 208 209 #define ENV_CONF_UNSUPPORTED_TYPE \ 210 gettext("SUNW_piclenvd: file:%s line:%d Unsupported type:%d for " \ 211 "keyword '%s'.\n") 212 213 #define ENV_CONF_UNSUPPORTED_KEYWORD \ 214 gettext("SUNW_piclenvd: file:%s line:%d Unsupported keyword '%s'.\n") 215 216 #ifdef __cplusplus 217 } 218 #endif 219 220 #endif /* _ENVD_H */ 221