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/* 23 * Copyright 2005 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 33extern "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#define ENVMONIOCCHASSISSERIALNUM \ 88 _IOR('a', ENVMON_BASE + 15, envmon_chassis_t) 89 90/* field length for text identifiers */ 91#define ENVMON_MAXNAMELEN 32 92 93typedef struct { 94 char name[ENVMON_MAXNAMELEN]; 95} envmon_handle_t; 96 97/* 98 * Some structures include threshold fields. 99 * Where a particular threshold is not defined for a given sensor, 100 * the reserved value ENVMON_VAL_UNAVAILABLE is returned. 101 */ 102typedef struct { 103 int16_t warning; 104 int16_t shutdown; 105 int16_t poweroff; 106} envmon_thresholds_t; 107 108/* 109 * id identifies the fru to be accessed. 110 * next_id returns the id for the next component of the type implied by 111 * the ioctl command. If there are no more frus in this sequence, 112 * next_id is set to an empty string. 113 * If id is set to an empty string on entry, next_id returns the first id. 114 * In this case, sensor_status will be returned as ENVMON_NOT_PRESENT. 115 */ 116typedef struct { 117 envmon_handle_t id; 118 uint16_t sensor_status; 119 int16_t value; /* sensor reading */ 120 envmon_thresholds_t lowthresholds; 121 envmon_thresholds_t highthresholds; 122 envmon_handle_t next_id; 123} envmon_sensor_t; 124 125typedef struct { 126 envmon_handle_t id; 127 uint16_t sensor_status; 128 uint16_t condition; /* 0 = within limits */ 129 envmon_handle_t next_id; 130} envmon_indicator_t; 131 132typedef struct { 133 envmon_handle_t id; 134 uint16_t sensor_status; 135 uint16_t speed; 136 char units[ENVMON_MAXNAMELEN]; 137 envmon_thresholds_t lowthresholds; 138 envmon_handle_t next_id; 139} envmon_fan_t; 140 141/* 142 * Values for led_state 143 */ 144#define ENVMON_LED_OFF 0 145#define ENVMON_LED_ON 1 146#define ENVMON_LED_BLINKING 2 147#define ENVMON_LED_FLASHING 3 148 149/* 150 * Values for the hue of the leds 151 */ 152#define ENVMON_LED_CLR_NONE ((int8_t)(-1)) 153#define ENVMON_LED_CLR_ANY 0 154#define ENVMON_LED_CLR_WHITE 1 155#define ENVMON_LED_CLR_BLUE 2 156#define ENVMON_LED_CLR_GREEN 3 157#define ENVMON_LED_CLR_AMBER 4 158#define ENVMON_LED_CLR_RED 5 159 160typedef struct { 161 envmon_handle_t id; 162 uint16_t sensor_status; 163 int8_t led_state; 164 int8_t led_color; 165 envmon_handle_t next_id; 166} envmon_led_info_t; 167 168typedef struct { 169 envmon_handle_t id; 170 int8_t led_state; 171} envmon_led_ctl_t; 172 173/* 174 * Values for alarm_state 175 */ 176#define ENVMON_ALARM_OFF 0 177#define ENVMON_ALARM_ON 1 178 179typedef struct { 180 envmon_handle_t id; 181 uint16_t sensor_status; 182 int8_t alarm_state; 183 envmon_handle_t next_id; 184} envmon_alarm_info_t; 185 186typedef struct { 187 envmon_handle_t id; 188 int8_t alarm_state; 189} envmon_alarm_ctl_t; 190 191/* 192 * Values for fru_status 193 */ 194#define ENVMON_FRU_NOT_PRESENT 0 195#define ENVMON_FRU_PRESENT 1 196#define ENVMON_FRU_FAULT 2 197#define ENVMON_FRU_DOWNLOAD 3 /* flash update or download active */ 198 199typedef struct { 200 envmon_handle_t id; 201 uint8_t sensor_status; 202 uint8_t fru_status; 203 envmon_handle_t next_id; 204} envmon_hpu_t; 205 206/* 207 * env_sysinto_t is used to return limits on various item types 208 */ 209typedef struct { 210 uint16_t maxVoltSens; /* max number of voltage sensors */ 211 uint16_t maxVoltInd; /* max number of voltage indicators */ 212 uint16_t maxAmpSens; /* max number of current sensors */ 213 uint16_t maxAmpInd; /* max number of circuit breakers */ 214 uint16_t maxTempSens; /* max number of temperature sensors */ 215 uint16_t maxTempInd; /* max number of temp'r indicators */ 216 uint16_t maxFanSens; /* max number of fan speed sensors */ 217 uint16_t maxFanInd; /* max number of fan indicators */ 218 uint16_t maxLED; /* max number of LEDs */ 219 uint16_t maxHPU; /* max number of Hot Pluggable Units */ 220} envmon_sysinfo_t; 221 222/* 223 * envmon_keysw_t is used to return the current value of the 224 * keyswitch (if fitted) 225 */ 226typedef enum envmon_keysw_pos { 227 ENVMON_KEYSW_POS_UNKNOWN = 0, 228 ENVMON_KEYSW_POS_NORMAL, 229 ENVMON_KEYSW_POS_DIAG, 230 ENVMON_KEYSW_POS_LOCKED, 231 ENVMON_KEYSW_POS_OFF 232} envmon_keysw_pos_t; 233 234/* 235 * envmon_chassis_t is used to retuen the chassis serial number 236 */ 237typedef struct { 238 char serial_number[ENVMON_MAXNAMELEN]; 239} envmon_chassis_t; 240 241#ifdef __cplusplus 242} 243#endif 244 245#endif /* _SYS_ENVMON_H */ 246