device_identify(9)
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 de
- vices 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 reg - istered 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 dis
- joint, 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 &¬ 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), de
- vice_add_child(9),
DEVICE_ATTACH(9), DEVICE_DETACH(9), DEVICE_PROBE(9), DE - VICE_SHUTDOWN(9)
AUTHORS
- This manual page was written by Alexander Langer
- <alex@FreeBSD.org>.
- BSD May 13, 2004