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_find_child(parent, "foo", DEVICE_UNIT_ANY) == NULL) {
                     child = BUS_ADD_CHILD(parent, 0, "foo", DEVICE_UNIT_ANY);
                     bus_set_resource(child, SYS_RES_IOPORT, 0, FOO_IOADDR, 1);
             }
     }

SEE ALSO

     BUS_ADD_CHILD(9), bus_identify_children(9), bus_set_resource(9),
     device(9), device_find_child(9)

AUTHORS

     This manual page was written by Alexander Langer <alex@FreeBSD.org>.

FreeBSD 15.1-STABLE-HBSD       February 5, 2025             DEVICE_IDENTIFY(9)