820f120b52
volumes that are migrating such as when you change the stripe size. While I'm here use the same string than we had in the old framework to report status "online" vs "drive is online", because the sensor might be a RAID volume and not just a drive.
647 lines
17 KiB
Groff
647 lines
17 KiB
Groff
.\" $NetBSD: sysmon_envsys.9,v 1.17 2007/12/07 11:47:50 xtraeme Exp $
|
|
.\"
|
|
.\" Copyright (c) 2007 The NetBSD Foundation, Inc.
|
|
.\" All rights reserved.
|
|
.\"
|
|
.\" This code is derived from software contributed to The NetBSD Foundation
|
|
.\" by Juan Romero Pardines.
|
|
.\"
|
|
.\" Redistribution and use in source and binary forms, with or without
|
|
.\" modification, are permitted provided that the following conditions
|
|
.\" are met:
|
|
.\" 1. Redistributions of source code must retain the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer.
|
|
.\" 2. Redistributions in binary form must reproduce the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer in the
|
|
.\" documentation and/or other materials provided with the distribution.
|
|
.\" 3. All advertising materials mentioning features or use of this software
|
|
.\" must display the following acknowledgement:
|
|
.\" This product includes software developed by the NetBSD
|
|
.\" Foundation, Inc. and its contributors.
|
|
.\" 4. Neither the name of The NetBSD Foundation nor the names of its
|
|
.\" contributors may be used to endorse or promote products derived
|
|
.\" from this software without specific prior written permission.
|
|
.\"
|
|
.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
|
|
.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
|
.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
|
|
.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
.\" POSSIBILITY OF SUCH DAMAGE.
|
|
.\"
|
|
.Dd December 7, 2007
|
|
.Dt SYSMON_ENVSYS 9
|
|
.Os
|
|
.Sh NAME
|
|
.Nm sysmon_envsys
|
|
.Nd kernel part of the envsys 2 framework
|
|
.Sh SYNOPSIS
|
|
.In dev/sysmon/sysmonvar.h
|
|
.Ft struct sysmon_envsys *
|
|
.Fn sysmon_envsys_create "void"
|
|
.Ft void
|
|
.Fn sysmon_envsys_destroy "struct sysmon_envsys *"
|
|
.Ft int
|
|
.Fn sysmon_envsys_register "struct sysmon_envsys *"
|
|
.Ft void
|
|
.Fn sysmon_envsys_unregister "struct sysmon_envsys *"
|
|
.Ft int
|
|
.Fn sysmon_envsys_sensor_attach "struct sysmon_envsys *, envsys_data_t *"
|
|
.Ft int
|
|
.Fn sysmon_envsys_sensor_detach "struct sysmon_envsys *, envsys_data_t *"
|
|
.Sh DESCRIPTION
|
|
.Pp
|
|
.Nm
|
|
is the kernel part of the
|
|
.Xr envsys 4
|
|
framework.
|
|
With this framework you are able to register and unregister a
|
|
.Nm
|
|
device, attach or detach sensors into a device and enable or disable
|
|
automatic monitoring for some sensors without any user interactivity,
|
|
among other things.
|
|
.Pp
|
|
.Ss HOW TO USE THE FRAMEWORK
|
|
.Pp
|
|
To register a new driver to the
|
|
.Nm
|
|
framework, a
|
|
.Sy sysmon_envsys
|
|
object must be allocated and initialized; the
|
|
.Fn sysmon_envsys_create
|
|
function is used for this. This returns a zero'ed pointer to a sysmon_envsys
|
|
structure and takes care of initialization of some private features.
|
|
.Pp
|
|
Once we have the object we could start initializing sensors (see the
|
|
.Em SENSOR DETAILS
|
|
section for more information) and attaching
|
|
them to the device, this is acomplished by the
|
|
.Fn sysmon_envsys_sensor_attach
|
|
function. This function attachs the envsys_data_t (sensor) specified
|
|
as second argument into the sysmon_envsys object specified in the
|
|
first argument.
|
|
.Pp
|
|
Finally when the sensors are already attached, the device needs to set
|
|
some required (and optional) members of the sysmon_envsys struct before
|
|
calling the
|
|
.Fn sysmon_envsys_register
|
|
function to register the device.
|
|
.Pp
|
|
If there's some error before registering the device, the
|
|
.Fn sysmon_envsys_destroy
|
|
function must be used to detach the sensors previously attached
|
|
and free the sysmon_envsys object allocated by the
|
|
.Fn sysmon_envsys_create
|
|
function.
|
|
.Pp
|
|
The
|
|
.Em sysmon_envsys
|
|
structure is defined as follow
|
|
(only the public members are shown):
|
|
.Bd -literal
|
|
struct sysmon_envsys {
|
|
const char *sme_name;
|
|
int sme_flags;
|
|
int sme_class;
|
|
uint64_t sme_events_timeout;
|
|
void *sme_cookie;
|
|
void (*sme_refresh)(struct sysmon_envsys *, envsys_data_t *);
|
|
};
|
|
.Ed
|
|
.Pp
|
|
The members have the following meaning:
|
|
.Pp
|
|
.Bl -tag -width "sme_sensor_data_xxxxxxxxx"
|
|
.It Fa sme_class
|
|
This specifies the class of the sysmon envsys device. See the
|
|
.Sy DEVICE CLASSES
|
|
section for more information (OPTIONAL).
|
|
.It Fa sme_name
|
|
The name that will be used in the driver (REQUIRED).
|
|
.It Fa sme_flags
|
|
Additional flags for the
|
|
.Nm
|
|
device. Currently supporting
|
|
.Ar SME_DISABLE_REFRESH .
|
|
If enabled, the
|
|
.Ar sme_refresh
|
|
function callback won't be used
|
|
to refresh sensors data and the driver will use its own method.
|
|
Hence
|
|
.Ar sme_cookie
|
|
won't be necessary either (OPTIONAL).
|
|
.It Fa sme_events_timeout
|
|
This is used to specify the default timeout value that will be used to
|
|
check for critical events if any monitoring flag was set. The value
|
|
is used as seconds (OPTIONAL).
|
|
.El
|
|
.Pp
|
|
.Pp
|
|
If the driver wants to refresh sensors data via the
|
|
.Nm
|
|
framework, the following members must be specified:
|
|
.Pp
|
|
.Bl -tag -width "sme_sensor_data_xxxxxxxxx"
|
|
.It Fa sme_cookie
|
|
Pointer to the device struct (also called
|
|
.Dq softc
|
|
). This may be used in the
|
|
.Sy sme_refresh
|
|
function callback.
|
|
.It Fa sme_refresh
|
|
Pointer to a function that will be used to refresh sensor data in
|
|
the device. This can be used to set the state and other properties of the
|
|
sensor depending of the returned data by the driver.
|
|
.Em NOTE :
|
|
.Em You don't have to refresh all sensors, only the sensor specified by the
|
|
.Sy edata->sensor
|
|
.Em index.
|
|
.El
|
|
.Pp
|
|
Note that it's not necessary to refresh the sensors data before the
|
|
driver is registered, only do it if you need the data in your driver
|
|
to check for a specific condition.
|
|
.Pp
|
|
.Pp
|
|
The timeout value for the monitoring events on a device may be changed via the
|
|
.Em ENVSYS_SETDICTIONARY
|
|
.Xr ioctl 2
|
|
or the
|
|
.Xr envstat 8
|
|
command.
|
|
.Pp
|
|
To unregister a driver previously registered with the
|
|
.Nm
|
|
framework, the
|
|
.Fn sysmon_envsys_unregister
|
|
function must be used. If there were monitoring events registered for the
|
|
driver, they all will be destroyed before the device is unregistered and
|
|
its sensors will be detached; finally the
|
|
.Em sysmon_envsys
|
|
object will be freed, so there's no need to call
|
|
.Fn sysmon_envsys_destroy
|
|
if we are going to unregister a device.
|
|
.Pp
|
|
.Ss DEVICE CLASSES
|
|
The
|
|
.Fa sme_class
|
|
member of the
|
|
.Fa sysmon_envsys
|
|
structure is an optional flag that specifies the class of the
|
|
sysmon envsys device. Currently there are two classes:
|
|
.Pp
|
|
.Bl -tag -width ident
|
|
.It SME_CLASS_ACADAPTER
|
|
.Pp
|
|
This class is for devices that want to act as an
|
|
.Em AC adapter .
|
|
The device writer must ensure that at least there is a
|
|
sensor with
|
|
.Em units
|
|
of
|
|
.Sy ENVSYS_INDICATOR .
|
|
This will be used to report its current state (on/off).
|
|
.It SME_CLASS_BATTERY
|
|
.Pp
|
|
This class is for devices that want to act as an
|
|
.Em Battery .
|
|
The device writer must ensure that at least there are two sensors with
|
|
units of
|
|
.Sy ENVSYS_BATTERY_CAPACITY
|
|
and
|
|
.Sy ENVSYS_BATTERY_CHARGE .
|
|
.Pp
|
|
These two sensors are used to ensure that the battery device won't
|
|
never send a
|
|
.Em low-power
|
|
event to the
|
|
.Xr powerd 8
|
|
daemon (if running) when all battery devices are in a critical state.
|
|
The critical state means that a battery is not currently charging
|
|
and its charge state is low or critical.
|
|
When the
|
|
.Em low-power
|
|
condition is met, an event is sent to the
|
|
.Xr powerd 8
|
|
daemon (if running) and will shutdown the system gracefully via the
|
|
.Fa /etc/powerd/scripts/sensor_battery
|
|
script.
|
|
.Pp
|
|
If
|
|
.Xr powerd 8
|
|
is not running, the system will be powered off via the
|
|
.Xr cpu_reboot 9
|
|
call with the
|
|
.Em RB_POWERDOWN
|
|
flag.
|
|
.Pp
|
|
.El
|
|
.Em NOTE:
|
|
If a
|
|
.Em SME_CLASS_ACADAPTER
|
|
or
|
|
.Em SME_CLASS_BATTERY
|
|
class don't have the sensors required, the
|
|
.Em low-power
|
|
event will never be sent, and the graceful shutdown won't be possible.
|
|
.Ss SENSOR DETAILS
|
|
.Pp
|
|
Each sensor uses a
|
|
.Sy envsys_data_t
|
|
structure, it's defined as follow (only the public members are shown);
|
|
.Bd -literal
|
|
typedef struct envsys_data {
|
|
uint32_t units;
|
|
uint32_t state;
|
|
uint32_t flags;
|
|
uint32_t rpms;
|
|
int32_t rfact;
|
|
int32_t value_cur;
|
|
int32_t value_max;
|
|
int32_t value_min;
|
|
int32_t value_avg;
|
|
bool monitor;
|
|
char desc[ENVSYS_DESCLEN];
|
|
} envsys_data_t;
|
|
.Ed
|
|
.Pp
|
|
The members for the
|
|
.Sy envsys_data_t
|
|
structure have the following meaning:
|
|
.Pp
|
|
.Bl -tag -width cdoscdosrunru
|
|
.It Fa units
|
|
Used to set the units type.
|
|
.It Fa state
|
|
Used to set the current state.
|
|
.It Fa flags
|
|
Used to set additional flags.
|
|
.It Fa rpms
|
|
Used to set the nominal RPM value for
|
|
.Sy fan
|
|
sensors.
|
|
.It Fa rfact
|
|
Used to set the rfact value for
|
|
.Sy voltage
|
|
sensors.
|
|
.It Fa value_cur
|
|
Used to set the current value.
|
|
.It Fa value_max
|
|
Used to set the maximum value.
|
|
.It Fa value_min
|
|
Used to set the minimum value.
|
|
.It Fa value_avg
|
|
Used to set the average value.
|
|
.It Fa monitor
|
|
Used to enable automatic sensor monitoring (by default
|
|
it's disabled). The automatic sensor monitoring will check if
|
|
a condition is met periodically and will send an event to the
|
|
.Xr powerd 8
|
|
daemon (if running). The monitoring event will be registered when this flag
|
|
is
|
|
.Em true
|
|
and one or more of the
|
|
.Em ENVSYS_FMONFOO
|
|
flags were set in the
|
|
.Ar flags
|
|
member.
|
|
.It Fa desc
|
|
Used to set the description string.
|
|
.Em NOTE
|
|
.Em that the description string must be unique in a device, and sensors with
|
|
.Em duplicate or empty description will simply be ignored.
|
|
.El
|
|
.Pp
|
|
Users of this framework must take care about the following points:
|
|
.Bl -bullet
|
|
.It
|
|
The
|
|
.Ar desc
|
|
member needs to have a valid description, unique in a device and non empty
|
|
to be valid.
|
|
.It
|
|
The
|
|
.Ar units
|
|
type must be valid. The following units are defined:
|
|
.Pp
|
|
.Bl -tag -width "ENVSYS_BATTERY_CAPACITY" -compact
|
|
.It ENVSYS_STEMP
|
|
For temperature sensors.
|
|
.It ENVSYS_SFANRPM
|
|
For fan sensors.
|
|
.It ENVSYS_SVOLTS_AC
|
|
For AC Voltage.
|
|
.It ENVSYS_SVOLTS_DC
|
|
For DC Voltage.
|
|
.It ENVSYS_SOHMS
|
|
For Ohms.
|
|
.It ENVSYS_SWATTS
|
|
For Watts.
|
|
.It ENVSYS_SAMPS
|
|
For Ampere.
|
|
.It ENVSYS_SWATTHOUR
|
|
For Watts hour.
|
|
.It ENVSYS_SAMPHOUR
|
|
For Ampere hour.
|
|
.It ENVSYS_INDICATOR
|
|
For sensors that only want a boolean type.
|
|
.It ENVSYS_INTEGER
|
|
For sensors that only want an integer type.
|
|
.It ENVSYS_DRIVE
|
|
For drive sensors.
|
|
.It ENVSYS_BATTERY_CAPACITY
|
|
For Battery device classes. This sensor unit uses the ENVSYS_BATTERY_CAPACITY_*
|
|
values in
|
|
.Ar value_cur
|
|
to report its current capacity to userland. Mandatory if
|
|
.Em sme_class
|
|
is set to
|
|
.Em SME_CLASS_BATTERY .
|
|
.It ENVSYS_BATTERY_CHARGE
|
|
For Battery device classes. This sensor is equivalent to the Indicator type,
|
|
it's a boolean. Use it to specify in what state is the Battery state:
|
|
.Sy true
|
|
if the battery is currently charging or
|
|
.Sy false
|
|
otherwise. Mandatory if
|
|
.Em sme_class
|
|
is set to
|
|
.Em SME_CLASS_BATTERY .
|
|
.El
|
|
.It
|
|
When initializing or refreshing the sensor, the
|
|
.Ar state
|
|
member should be set to a known state (otherwise it will be in
|
|
unknown state). Possible values:
|
|
.Pp
|
|
.Bl -tag -width "ENVSYS_SCRITUNDERXX" -compact
|
|
.It ENVSYS_SVALID
|
|
Sets the sensor to a valid state.
|
|
.It ENVSYS_SINVALID
|
|
Sets the sensor to an invalid state.
|
|
.It ENVSYS_SCRITICAL
|
|
Sets the sensor to a critical state.
|
|
.It ENVSYS_SCRITUNDER
|
|
Sets the sensor to a critical under state.
|
|
.It ENVSYS_SCRITOVER
|
|
Sets the sensor to a critical over state.
|
|
.It ENVSYS_SWARNUNDER
|
|
Sets the sensor to a warning under state.
|
|
.It ENVSYS_SWARNOVER
|
|
Sets the sensor to a warning over state.
|
|
.El
|
|
.Pp
|
|
.It
|
|
The
|
|
.Ar flags
|
|
member accepts one or more of the following flags:
|
|
.Pp
|
|
.Bl -tag -width "ENVSYS_FCHANGERFACTXX"
|
|
.It ENVSYS_FCHANGERFACT
|
|
Marks the sensor with ability to change the
|
|
.Ar rfact
|
|
value on the fly (in voltage sensors). The
|
|
.Ar rfact
|
|
member must be used in the correct place of the code
|
|
that retrieves and converts the value of the sensor.
|
|
.It ENVSYS_FPERCENT
|
|
This uses the
|
|
.Ar value_cur
|
|
and
|
|
.Ar value_max
|
|
members to make a percentage. Both values must be enabled
|
|
and have data.
|
|
.It ENVSYS_FVALID_MAX
|
|
Marks the
|
|
.Ar value_max
|
|
value as valid.
|
|
.It ENVSYS_FVALID_MIN
|
|
Marks the
|
|
.Ar value_min
|
|
value as valid.
|
|
.It ENVSYS_FVALID_AVG
|
|
Marks the
|
|
.Ar value_avg
|
|
value as valid.
|
|
.It ENVSYS_FMONCRITICAL
|
|
Enables and registers a new event to monitor a critical state.
|
|
.It ENVSYS_FMONCRITUNDER
|
|
Enables and registers a new event to monitor a critical under state.
|
|
.It ENVSYS_FMONCRITOVER
|
|
Enables and registers a new event to monitor a critical over state.
|
|
.It ENVSYS_FMONWARNUNDER
|
|
Enables and registers a new event to monitor a warning under state.
|
|
.It ENVSYS_FMONWARNOVER
|
|
Enables and registers a new event to monitor a warning over state.
|
|
.It ENVSYS_FMONSTCHANGED
|
|
Enables and registers a new event to monitor Battery capacity or drive state
|
|
sensors. It won't be effective if the
|
|
.Ar units
|
|
member is not set to
|
|
.Ar ENVSYS_DRIVE
|
|
or
|
|
.Ar ENVSYS_BATTERY_CAPACITY .
|
|
.It ENVSYS_FMONNOTSUPP
|
|
Disallows to set a critical limit via the
|
|
.Em ENVSYS_SETDICTIONARY
|
|
.Xr ioctl(2) .
|
|
This flag has not any effect for monitoring flags set in the driver and it's
|
|
only meant to disable setting critical limits from userland.
|
|
.El
|
|
.Pp
|
|
.Em If the driver has to use any of the
|
|
.Ar value_max ,
|
|
.Ar value_min
|
|
.Em or
|
|
.Ar value_avg
|
|
.Em members, they should be marked as valid with the appropiate flag.
|
|
.Pp
|
|
.It
|
|
If
|
|
.Ar units
|
|
is set to
|
|
.Ar ENVSYS_DRIVE ,
|
|
there are some predefined states that must be set (only one)
|
|
to the
|
|
.Ar value_cur
|
|
member:
|
|
.Pp
|
|
.Bl -tag -width "ENVSYS_DRIVE_POWERDOWNXX" -compact
|
|
.It ENVSYS_DRIVE_EMPTY
|
|
Drive state is unknown.
|
|
.It ENVSYS_DRIVE_READY
|
|
Drive is ready.
|
|
.It ENVSYS_DRIVE_POWERUP
|
|
Drive is powering up.
|
|
.It ENVSYS_DRIVE_ONLINE
|
|
Drive is online.
|
|
.It ENVSYS_DRIVE_IDLE
|
|
Drive is idle.
|
|
.It ENVSYS_DRIVE_ACTIVE
|
|
Drive is active.
|
|
.It ENVSYS_DRIVE_REBUILD
|
|
Drive is rebuilding.
|
|
.It ENVSYS_DRIVE_POWERDOWN
|
|
Drive is powering down.
|
|
.It ENVSYS_DRIVE_FAIL
|
|
Drive has failed.
|
|
.It ENVSYS_DRIVE_PFAIL
|
|
Drive has been degraded.
|
|
.It ENVSYS_DRIVE_MIGRATING
|
|
Drive is migrating.
|
|
.El
|
|
.Pp
|
|
.It
|
|
If
|
|
.Ar units
|
|
is set to
|
|
.Ar ENVSYS_BATTERY_CAPACITY ,
|
|
there are some predefined capacity states that must be set (only one)
|
|
to the
|
|
.Ar value_cur
|
|
member:
|
|
.Pp
|
|
.Bl -tag -width "ENVSYS_BATTERY_CAPACITY_CRITICAL" -compact
|
|
.It ENVSYS_BATTERY_CAPACITY_NORMAL
|
|
Battery charge is in normal capacity.
|
|
.It ENVSYS_BATTERY_CAPACITY_CRITICAL
|
|
Battery charge is in critical capacity.
|
|
.It ENVSYS_BATTERY_CAPACITY_LOW
|
|
Battery charge is in low capacity.
|
|
.It ENVSYS_BATTERY_CAPACITY_WARNING
|
|
Battery charge is in warning capacity.
|
|
.El
|
|
.It
|
|
The
|
|
.Xr envsys 4
|
|
framework expects to have the values converted to
|
|
a unit that can be converted to another one easily. That means the user
|
|
should convert the value returned by the driver to the appropiate unit.
|
|
For example voltage sensors to
|
|
.Sy mV ,
|
|
temperature sensors to
|
|
.Sy uK ,
|
|
Watts to
|
|
.Sy mW ,
|
|
Ampere to
|
|
.Sy mA ,
|
|
etc.
|
|
.Pp
|
|
The following types shouldn't need any conversion:
|
|
.Ar ENVSYS_BATTERY_CAPACITY ,
|
|
.Ar ENVSYS_BATTERY_CHARGE ,
|
|
.Ar ENVSYS_INDICATOR ,
|
|
.Ar ENVSYS_INTEGER
|
|
and
|
|
.Ar ENVSYS_DRIVE .
|
|
.Pp
|
|
.Em PLEASE NOTE THAT YOU MUST AVOID USING FLOATING POINT OPERATIONS
|
|
.Em IN KERNEL WHEN CONVERTING THE DATA RETURNED BY THE DRIVER TO THE
|
|
.Em APPROPIATE UNIT, IT'S NOT ALLOWED.
|
|
.Pp
|
|
.El
|
|
.Ss HOW TO ENABLE AUTOMATIC MONITORING IN SENSORS
|
|
The following example illustrates how to enable automatic monitoring
|
|
in a virtual driver for a
|
|
.Em critical
|
|
state in the first sensor
|
|
.Em (sc_sensor[0]):
|
|
.Pp
|
|
.Bd -literal
|
|
int
|
|
mydriver_initialize_sensors(struct mysoftc *sc)
|
|
{
|
|
...
|
|
/* sensor is initialized with a valid state */
|
|
sc->sc_sensor[0].state = ENVSYS_SVALID;
|
|
|
|
/*
|
|
* the monitor member must be true to enable
|
|
* automatic monitoring.
|
|
*/
|
|
sc->sc_sensor[0].monitor = true;
|
|
|
|
/* and now we specify the type of the monitoring event */
|
|
sc->sc_sensor[0].flags |= ENVSYS_FMONCRITICAL;
|
|
...
|
|
}
|
|
|
|
int
|
|
mydriver_refresh(struct sysmon_envsys *sme, envsys_data_t *edata)
|
|
{
|
|
struct mysoftc *sc = sme->sme_cookie;
|
|
|
|
/* we get current data from the driver */
|
|
edata->value_cur = sc->sc_getdata();
|
|
|
|
/*
|
|
* if value is too high, mark the sensor in
|
|
* critical state.
|
|
*/
|
|
if (edata->value_cur > MYDRIVER_SENSOR0_HIWAT) {
|
|
edata->state = ENVSYS_SCRITICAL;
|
|
/* a critical event will be sent now automatically */
|
|
} else {
|
|
/*
|
|
* if value is within the limits, and we came from
|
|
* a critical state make sure to change sensor's state
|
|
* to valid.
|
|
*/
|
|
edata->state = ENVSYS_SVALID;
|
|
}
|
|
...
|
|
}
|
|
.Ed
|
|
.Pp
|
|
.Sh CODE REFERENCES
|
|
This section describes places within the NetBSD source tree where actual
|
|
code implementing the
|
|
.Sy envsys 2
|
|
framework can be found. All pathnames are relative to
|
|
.Pa /usr/src .
|
|
.Pp
|
|
The
|
|
.Sy envsys 2
|
|
framework is implemented within the files:
|
|
.Pp
|
|
.Pa sys/dev/sysmon/sysmon_envsys.c
|
|
.Pp
|
|
.Pa sys/dev/sysmon/sysmon_envsys_events.c
|
|
.Pp
|
|
.Pa sys/dev/sysmon/sysmon_envsys_tables.c
|
|
.Pp
|
|
.Pa sys/dev/sysmon/sysmon_envsys_util.c
|
|
.Pp
|
|
There's an example LKM driver that shows how the framework works in:
|
|
.Pa sys/lkm/misc/envsys2/lkminit_envsys2.c .
|
|
.Sh SEE ALSO
|
|
.Xr envsys 4 ,
|
|
.Xr envstat 8
|
|
.Sh HISTORY
|
|
The first
|
|
.Em envsys
|
|
framework first appeared in
|
|
.Nx 1.5 .
|
|
The
|
|
.Em envsys 2
|
|
framework first appeared in
|
|
.Nx 5.0 .
|
|
.Sh AUTHORS
|
|
The (current)
|
|
.Em envsys 2
|
|
framework was implemented by
|
|
.An Juan Romero Pardines .
|
|
Additional input on the design was provided by many
|
|
.Nx
|
|
developers around the world.
|
|
.Pp
|
|
The first
|
|
.Em envsys
|
|
framework was implemented by Jason R. Thorpe, Tim Rightnour
|
|
and Bill Squier.
|