Subject: Re: PROPOSAL: API for environmental sensors
To: Tim Rightnour <root@garbled.net>
From: Matthew Jacob <mjacob@feral.com>
List: tech-kern
Date: 11/09/1999 15:03:16
Can we join this together with SAF-TE (see http://www.safte.org) and SES
(ftp://ftp.t10.org/t10/drafts/ses/ses-r08b.pdf) specifications so that
SCSI based environmental sensors are also part of this?
On Tue, 9 Nov 1999, Tim Rightnour wrote:
>
> Co-Authored by Bill Squier and Tim Rightnour
>
> ------
> The following API is presented with the caveat that polling devices of
> this type is not a good idea. The proper solution is use some form of
> "kernel events" mechanism.
>
> ENVSYS API 1.0
> --------------
>
>
> There are a number of considerations:
>
> (1) This API is designed to support various environmental sensor ICs
> available on modern motherboards. Initially it supports three
> distinct sensor types; fan speed, temperature, and voltage.
> Additional sensor types can be added with new ioctl's without
> disrupting the current API.
>
> (2) Many sensor ICs have no fixed assignment of registers to
> physical phenomena. Thus, some userland mechanism of
> assigning meanings to the registers is required to allow
> userland utilities to produce reasonable output.
>
> (3) The number of registers for each class of sensor varies
> among devices. Therefore a way to enumerate all data of
> a particular sensor type is required. Fixed limits on the
> number of sensors per type is not desirable.
>
> (4) Some ICs provide useful statistical information.
> Collecting reliable statistical information in userland
> from a polled device is problematic. We would like to use
> the on-chip information when it is available.
>
> (5) A useful balance between complexity of use and amount
> of available information is desired. While it may be
> possible to allow for an unlimited number of statistical
> measures to be returned by a device, we have chosen only
> four common ones: current, minimum, maximum, and average.
> Even with this limited set, it may be impractical or
> impossible for devices to produce them all. Thus, a
> mechanism to determine which statistics are valid is required.
>
> (6) The API is designed in a way that can be used to monitor
> both system-internal, and system-external environmental
> sensors.
>
> The following ioctl(2)'s must be supported by any device claiming to
> be compliant with version 1.0 of the ENVSYS API.
>
> For the purposes of this API, all devices must number the sensors of
> each type sequentially, beginning with 0. Thus if there are n
> temperature sensors, they *must* be numbered 0..n-1.
>
> ENVSYS_VERSION (int)
> Returns API version * 1000. A userland application could use
> this ioctl to determine further supported ioctl's of the
> device.
>
> ENVSYS_GTEMPDATA (envsys_temp_data_t)
> ENVSYS_GRPMDATA (envsys_rpm_data_t)
> ENVSYS_GELECDATA (envsys_electrical_data_t)
>
> These commands make use of:
>
> typedef struct envsys_uint32_data {
> u_int sensor;
>
> u_int_32_t cur; /* all data in given */
> u_int_32_t min; /* in microKelvins or */
> u_int_32_t max; /* rpms */
> u_int_32_t avg;
>
> u_int_32_t flags; /* see below */
> } envsys_temp_data_t, envsys_rpm_data_t;
>
>
> typedef struct envsys_int32_data {
> u_int sensor;
>
> int_32_t cur; /* all data in given */
> int_32_t min; /* in microvolts, ohms */
> int_32_t max; /* watts, microamps */
> int_32_t avg; /* depending on units */
>
> u_int_32_t flags; /* see below */
> u_int units; /* see below */
> } envsys_electrical_data_t;
>
> #define ENVSYS_EVOLTS_AC 1
> #define ENVSYS_EVOLTS_DC 2
> #define ENVSYS_EOHMS 3
> #define ENVSYS_EWATTS 4
> #define ENVSYS_EAMPS 5
>
> At request time, the caller of this command fills the sensor
> member with the sensor number for which data is being
> requested. The structure is returned with available data
> filled in by the driver.
>
> Flags are:
>
> ENVSYS_FVALID 0x00000001
> Not set implies an illegal sensor number was
> requested.
>
> ENVSYS_FCURVALID 0x00000002
> ENVSYS_FMINVALID 0x00000004
> ENVSYS_FMAXVALID 0x00000008
> ENVSYS_FAVGVALID 0x00000016
> Set if these fields are filled with valid data
>
> Although ENVSYS_FVALID might be implied from the absence of
> all other *VALID flags, it is conceivable that some ICs have
> a period during which valid sensors contain invalid data.
>
>
> ENVSYS_STEMPINFO (envsys_temp_info_t)
> ENVSYS_SRPMINFO (envsys_rpm_info_t)
> ENVSYS_SVOLTINFO (envsys_electrical_info_t)
>
> ENVSYS_GTEMPINFO (envsys_temp_info_t)
> ENVSYS_GRPMINFO (envsys_rpm_info_t)
> ENVSYS_GVOLTINFO (envsys_electrical_info_t)
>
> These commands make use of:
>
> typedef struct envsys_basic_info {
> u_int sensor;
> wchar_t desc[33]; /* description */
>
> u_int rpms; /* for fans, set
> nominal rpms */
>
> u_int_32_t flags; /* SENSOR_FVALID */
> } envsys_temp_info_t, envsys_rpm_info_t, envsys_electrical_info_t;
>
> The "S" series is for setting this information in the driver,
> the "G" series is for retrieving this information.
>
> All environmental sensor types read the supplied "desc"
> field and store the contents for subsequent requests. The
> driver is expected to supply a default NULL terminated string
> for "desc".
>
> RPM sensor types additionally read the nominal RPM value
> from rpms.
>
> The driver will fill in the flags value, indicating to the user
> that he has successfully programmed an existing sensor.
>
> DRIVER IMPLEMENTATION NOTES
>
> The driver is expected to allow multiple open instances of the
> device, and serialize requests if neccesary internally. For the
> purposes of this API, only open, close and ioctl entrypoints need
> exist. Additional entrypoints, or ioctls for programming IC
> specific features such as watchpoints are outside the scope of
> this API, and should be designed in a non-interfering manner.
> The driver is not required to provide up-to-date information
> at all times, and may substitute stale data at the discretion
> of the implementor where a read might be too expensive.
>
>
> ---
> Tim Rightnour <root@garbled.net>
> NetBSD: Free multi-architecture OS http://www.netbsd.org/
> NetBSD Mailing lists on the web: http://mail-index.netbsd.org/
>