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

tribblix@gmail.com :: GitHub :: Privacy