DEVICE_IDENTIFY(9) FreeBSD Kernel Developer's Manual DEVICE_IDENTIFY(9)
NAME
DEVICE_IDENTIFY - identify new child devices and register them
SYNOPSIS
#include <sys/param.h>
#include <sys/bus.h>
void
DEVICE_IDENTIFY(driver_t *driver, device_t parent);
DESCRIPTION
The identify method of a device driver is used to add devices that cannot
be enumerated by the standard method on a bus device. Devices can be
enumerated in various ways including accessing non-ambiguous device
registers and parsing firmware tables. Software-only pseudo devices are
also often enumerated via identify methods.
For each newly identified device, a new device instance should be created
by invoking the BUS_ADD_CHILD(9) method. If the identify method is able
to discover other properties about the new device, those should also be
set. For example, device resources should be added to the device by
calling bus_set_resource(9) for each resource.
An identify method might be invoked multiple times. If a device driver
is unloaded and loaded, the identify method will be called a second time
after being reloaded. As a result, the identify method should avoid
duplicate devices. Devices added by identify methods typically use a
fixed device name in which case device_find_child(9) can be used to
detect existing devices.
EXAMPLES
The following pseudo-code shows an example of a function that probes for
a piece of hardware and registers it and its resource (an I/O port) with
the parent bus device.
void
foo_identify(driver_t *driver, device_t parent)
{
device_t child;
retrieve_device_information;
if (devices matches one of your supported devices &&
device_get_child(parent, "foo", -1) == NULL) {
child = BUS_ADD_CHILD(parent, 0, "foo", -1);
bus_set_resource(child, SYS_RES_IOPORT, 0, FOO_IOADDR, 1);
}
}
SEE ALSO
BUS_ADD_CHILD(9), bus_set_resource(9), device(9), device_find_child(9)
AUTHORS
This manual page was written by Alexander Langer <
[email protected]>.
FreeBSD 14.1-RELEASE-p8 January 9, 2025 FreeBSD 14.1-RELEASE-p8