KSENSOR_CREATE(9F) Kernel Functions for Drivers KSENSOR_CREATE(9F)
NAME
ksensor_create,
ksensor_create_scalar_pcidev,
ksensor_remove - create
and remove ksensors
SYNOPSIS
#include <sys/sensors.h> int ksensor_create(
dev_info_t *dip,
const ksensor_ops_t *ops,
void *driver,
const char *name,
const char *class,
id_t *idp);
int ksensor_create_scalar_pcidev(
dev_info_t *dip,
uint64_t kind,
const ksensor_ops_t *ops,
void *driver,
const char *name,
id_t *idp);
int ksensor_remove(
dev_info_t *dip,
id_t id);
INTERFACE LEVEL
Volatile - This interface is still evolving in illumos. API and ABI
stability is not guaranteed.
PARAMETERS
class A string that indicates the class of sensor, see
ksensor(9E) for more information.
dip Pointer to the driver's
dev_info_t structure for the
specific instance.
driver An opaque pointer that will be provided back to the
driver in
ksensor_ops(9E) entry points.
id A ksensor's ID which can be used to refer back to it in
the framework.
idp A pointer which will be filled in with a created
ksensor's ID.
kind A sensor kind, see
ksensor(9E) for a list of kinds.
name The name of the ksensor.
ops The ksensor operations vector, see
ksensor_ops(9E).
DESCRIPTION
The
ksensor_create() and
ksensor_create_scalar_pcidev() functions are
used to create ksensors and register them with the
ksensor(9E) framework during a driver's
attach(9E) entry point. A created ksensor
is identified by the combination of the driver's
dip and an ID which is
returned in
idp, which should be kept so the ksensor can be removed via
a subsequent call to
ksensor_remove().
The
ksensor_create_scalar_pcidev() function is used to create a ksensor
for a PCI or PCIe device and will cause it to automatically be
registered with the fault management architecture.
kind is one of the
sensor kinds listed in
ksensor(9E).
name should be something semantic about what the sensor is or its
location in the device. For example, a voltage or current sensor
should try to name the sensor based on the rail or supply it measures
such as Vdd. Similarly, a temperature sensor should try to indicate
where it measures the temperature.
The
ops argument provides the operations vector that the ksensor
framework should use for making calls. The passed in structure must
remain valid across the lifetime of the ksensor and often is a constant
structure in the driver's program text. See
ksensor_ops(9E) for more
information on the semantics of the callback operations vector. These
operations vectors will not be called during a driver's
attach(9E) or
detach(9E) entry points, but can otherwise be called in parallel from
multiple different threads. The framework does not provide any
serialization.
The opaque pointer
driver, will be returned as part of calling any of
the
ksensor_ops(9E) entry points. As the framework does not provide
the corresponding
dip back in the entry points, this should generally
not be a NULL pointer.
The
ksensor_create() function is a more generic function and requires
that the driver specify the
class of the sensor directly, rather than
having it inferred based upon
kind.
The
ksensor_remove() function allows a driver to remove a ksensor that
was previously created identified by
id. To simplify device teardown,
a driver may pass the special ID KSENSOR_ALL_IDS to remove any
registered ksensors. Because the framework guarantees that no entry
points will be called during either
attach(9E) or
detach(9E), the
driver does not need to take special care with when it calls
ksensor_remove(), unlike
untimeout(9F).
CONTEXT
The
ksensor_create() and
ksensor_create_scalar_pcidev() functions may
only be called from a driver's
attach(9E) entry point. The
ksensor_remove() function may only be called from a driver's
attach(9E) or
detach(9E) entry points.
RETURN VALUES
Upon successful completion, the
ksensor_create() and
ksensor_create_scalar_pcidev() functions return
0 and update
idp with
the newly created ksensor's ID. Otherwise, a non-zero error number is
returned.
Upon successful completion, the
ksensor_remove() function returns
0 and
deletes the ksensor. Otherwise, a non-zero error number is returned.
ERRORS
The
ksensor_create() and
ksensor_create_scalar_pcidev() functions will
fail if:
EAGAIN The driver did not call these functions from its
attach(9E) entry point.
EEXIST A ksensor with the same
class and
name already
exists.
EINVAL An invalid pointer was passed or
ops,
name, or
class are malformed.
Additionally, the
ksensor_create_scalar_pcidev() function will fail if:
EINVAL
dip does not refer to a valid PCI or PCIe device
node with a "regs" property.
EIO The "regs" property of
dip is malformed.
ENOTSUP The value of
kind is not supported.
The
ksensor_remove() function will fail if
EAGAIN The driver did not call this from either
attach(9E) or
detach(9E).
ENOENT The ksensor referenced in
id does not exist for
dip or, if
id is KSENSOR_ALL_IDS, the driver has no
ksensors.
SEE ALSO
attach(9E),
detach(9E),
ksensor(9E),
ksensor_ops(9E)illumos May 10, 2024 illumos