NAME¶
DEVICE_IDENTIFY
—
identify a device, register it
SYNOPSIS¶
#include
<sys/param.h>
#include
<sys/bus.h>
void
DEVICE_IDENTIFY
(
driver_t
*driver,
device_t
parent);
DESCRIPTION¶
The identify function for a device is only needed for devices on busses that
cannot identify their children independently, e.g. the ISA bus. It is used to
recognize the device (usually done by accessing non-ambiguous registers in the
hardware) and to tell the kernel about it and thus creating a new device
instance.
BUS_ADD_CHILD(9) is used to register the device as
a child of the bus. The device's resources (such as IRQ and I/O ports) are
registered with the kernel by calling
bus_set_resource
() for each resource (refer
to
bus_set_resource(9) for more information).
Since the device tree and the device driver tree are disjoint, the
DEVICE_IDENTIFY
() routine needs to take
this into account. If you load and unload your device driver that has the
identify routine, the child node has the potential for adding the same node
multiple times unless specific measure are taken to preclude that possibility.
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 kernel.
void
foo_identify(driver_t *driver, device_t parent)
{
device_t child;
retrieve_device_information;
if (devices matches one of your supported devices &&
not already in device tree) {
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_add_child(9),
DEVICE_ATTACH(9),
DEVICE_DETACH(9),
DEVICE_PROBE(9),
DEVICE_SHUTDOWN(9)
AUTHORS¶
This manual page was written by
Alexander
Langer ⟨alex@FreeBSD.org⟩.