1 /* $NetBSD: envsys.h,v 1.31 2010/02/28 20:04:04 pgoyette Exp $ */ 2 3 /*- 4 * Copyright (c) 1999, 2007 The NetBSD Foundation, Inc. 5 * All rights reserved. 6 * 7 * This code is derived from software contributed to The NetBSD Foundation 8 * by Tim Rightnour, Juan Romero Pardines and Bill Squier. 9 * 10 * Redistribution and use in source and binary forms, with or without 11 * modification, are permitted provided that the following conditions 12 * are met: 13 * 1. Redistributions of source code must retain the above copyright 14 * notice, this list of conditions and the following disclaimer. 15 * 2. Redistributions in binary form must reproduce the above copyright 16 * notice, this list of conditions and the following disclaimer in the 17 * documentation and/or other materials provided with the distribution. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 21 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 23 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29 * POSSIBILITY OF SUCH DAMAGE. 30 */ 31 32 #ifndef _SYS_ENVSYS_H_ 33 #define _SYS_ENVSYS_H_ 34 35 #ifndef _KERNEL 36 #include <stdbool.h> 37 #endif 38 39 #include <sys/ioccom.h> 40 #include <sys/power.h> 41 #include <sys/queue.h> 42 43 /* 44 * ENVironmental SYStem version 2 (aka ENVSYS 2) 45 */ 46 47 #define ENVSYS_MAXSENSORS 512 48 #define ENVSYS_DESCLEN 32 49 50 /* sensor units */ 51 enum envsys_units { 52 ENVSYS_STEMP = 0, /* Temperature */ 53 ENVSYS_SFANRPM, /* Fan RPM */ 54 ENVSYS_SVOLTS_AC, /* AC Volts */ 55 ENVSYS_SVOLTS_DC, /* DC Volts */ 56 ENVSYS_SOHMS, /* Ohms */ 57 ENVSYS_SWATTS, /* Watts */ 58 ENVSYS_SAMPS, /* Ampere */ 59 ENVSYS_SWATTHOUR, /* Watt hour */ 60 ENVSYS_SAMPHOUR, /* Ampere hour */ 61 ENVSYS_INDICATOR, /* Indicator */ 62 ENVSYS_INTEGER, /* Integer */ 63 ENVSYS_DRIVE, /* Drive */ 64 ENVSYS_BATTERY_CAPACITY, /* Battery capacity */ 65 ENVSYS_BATTERY_CHARGE, /* Battery charging/discharging */ 66 ENVSYS_NSENSORS 67 }; 68 69 /* sensor states */ 70 enum envsys_states { 71 ENVSYS_SVALID = 10, /* sensor state is valid */ 72 ENVSYS_SINVALID, /* sensor state is invalid */ 73 ENVSYS_SCRITICAL, /* sensor state is critical */ 74 ENVSYS_SCRITUNDER, /* sensor state is critical under */ 75 ENVSYS_SCRITOVER, /* sensor state is critical over */ 76 ENVSYS_SWARNUNDER, /* sensor state is warn under */ 77 ENVSYS_SWARNOVER /* sensor state is warn over */ 78 }; 79 80 /* sensor drive states */ 81 enum envsys_drive_states { 82 ENVSYS_DRIVE_EMPTY = 1, /* drive is empty */ 83 ENVSYS_DRIVE_READY, /* drive is ready */ 84 ENVSYS_DRIVE_POWERUP, /* drive is powered up */ 85 ENVSYS_DRIVE_ONLINE, /* drive is online */ 86 ENVSYS_DRIVE_IDLE, /* drive is idle */ 87 ENVSYS_DRIVE_ACTIVE, /* drive is active */ 88 ENVSYS_DRIVE_REBUILD, /* drive is rebuilding */ 89 ENVSYS_DRIVE_POWERDOWN, /* drive is powered down */ 90 ENVSYS_DRIVE_FAIL, /* drive failed */ 91 ENVSYS_DRIVE_PFAIL, /* drive is degraded */ 92 ENVSYS_DRIVE_MIGRATING, /* drive is migrating */ 93 ENVSYS_DRIVE_OFFLINE, /* drive is offline */ 94 ENVSYS_DRIVE_BUILD, /* drive is building */ 95 ENVSYS_DRIVE_CHECK /* drive is checking its state */ 96 }; 97 98 /* sensor battery capacity states */ 99 enum envsys_battery_capacity_states { 100 ENVSYS_BATTERY_CAPACITY_NORMAL = 1, /* normal cap in battery */ 101 ENVSYS_BATTERY_CAPACITY_WARNING, /* warning cap in battery */ 102 ENVSYS_BATTERY_CAPACITY_CRITICAL, /* critical cap in battery */ 103 ENVSYS_BATTERY_CAPACITY_HIGH, /* high cap in battery */ 104 ENVSYS_BATTERY_CAPACITY_MAX, /* maximum cap in battery */ 105 ENVSYS_BATTERY_CAPACITY_LOW /* low cap in battery */ 106 }; 107 108 /* 109 * IOCTLs 110 */ 111 #define ENVSYS_GETDICTIONARY _IOWR('E', 0, struct plistref) 112 #define ENVSYS_SETDICTIONARY _IOWR('E', 1, struct plistref) 113 #define ENVSYS_REMOVEPROPS _IOWR('E', 2, struct plistref) 114 115 /* 116 * Compatibility with old interface. Only ENVSYS_GTREDATA 117 * and ENVSYS_GTREINFO ioctls are supported. 118 */ 119 120 /* get sensor data */ 121 122 struct envsys_tre_data { 123 u_int sensor; 124 union { /* all data is given */ 125 uint32_t data_us; /* in microKelvins, */ 126 int32_t data_s; /* rpms, volts, amps, */ 127 } cur, min, max, avg; /* ohms, watts, etc */ 128 /* see units below */ 129 130 uint32_t warnflags; /* warning flags */ 131 uint32_t validflags; /* sensor valid flags */ 132 u_int units; /* type of sensor */ 133 }; 134 typedef struct envsys_tre_data envsys_tre_data_t; 135 136 /* flags for warnflags */ 137 #define ENVSYS_WARN_OK 0x00000000 /* All is well */ 138 #define ENVSYS_WARN_UNDER 0x00000001 /* an under condition */ 139 #define ENVSYS_WARN_CRITUNDER 0x00000002 /* a critical under condition */ 140 #define ENVSYS_WARN_OVER 0x00000004 /* an over condition */ 141 #define ENVSYS_WARN_CRITOVER 0x00000008 /* a critical over condition */ 142 143 /* drive status */ 144 #define ENVSYS_DRIVE_EMPTY 1 145 #define ENVSYS_DRIVE_READY 2 146 #define ENVSYS_DRIVE_POWERUP 3 147 #define ENVSYS_DRIVE_ONLINE 4 148 #define ENVSYS_DRIVE_IDLE 5 149 #define ENVSYS_DRIVE_ACTIVE 6 150 #define ENVSYS_DRIVE_REBUILD 7 151 #define ENVSYS_DRIVE_POWERDOWN 8 152 #define ENVSYS_DRIVE_FAIL 9 153 #define ENVSYS_DRIVE_PFAIL 10 154 155 #ifdef ENVSYSUNITNAMES 156 static const char * const envsysunitnames[] = { 157 "degC", "RPM", "VAC", "V", "Ohms", "W", 158 "A", "Wh", "Ah", "bool", "integer", "drive", "Unk" 159 }; 160 static const char * const envsysdrivestatus[] = { 161 "unknown", "empty", "ready", "powering up", "online", "idle", "active", 162 "rebuilding", "powering down", "failed", "degraded" 163 }; 164 #endif 165 166 167 /* flags for validflags */ 168 #define ENVSYS_FVALID 0x00000001 /* sensor is valid */ 169 #define ENVSYS_FCURVALID 0x00000002 /* cur for this sens is valid */ 170 #define ENVSYS_FMINVALID 0x00000004 /* min for this sens is valid */ 171 #define ENVSYS_FMAXVALID 0x00000008 /* max for this sens is valid */ 172 #define ENVSYS_FAVGVALID 0x00000010 /* avg for this sens is valid */ 173 #define ENVSYS_FFRACVALID 0x00000020 /* display fraction of max */ 174 175 #define ENVSYS_GTREDATA _IOWR('E', 2, envsys_tre_data_t) 176 177 /* set and check sensor info */ 178 179 struct envsys_basic_info { 180 u_int sensor; /* sensor number */ 181 u_int units; /* type of sensor */ 182 char desc[33]; /* sensor description */ 183 u_int rfact; /* for volts, (int)(factor x 10^4) */ 184 u_int rpms; /* for fans, set nominal RPMs */ 185 uint32_t validflags; /* sensor valid flags */ 186 }; 187 typedef struct envsys_basic_info envsys_basic_info_t; 188 189 #define ENVSYS_GTREINFO _IOWR('E', 4, envsys_basic_info_t) 190 191 #endif /* _SYS_ENVSYS_H_ */ 192