DEVICE_IDENTIFY(9)

NAME
DEVICE_IDENTIFY - identify a device, register it

SYNOPSIS
#include <sys/param.h>
#include <sys/bus.h>
int
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).

RETURN VALUES
Zero is returned on success, otherwise an appropriate error is returned (see errno(2)).

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. It also sets the description of the device.

    void
    foo_identify(driver_t *driver, device_t parent)
    {
    	device_t child;
    	retrieve_device_information;
    	if (devices matches one of your supported devices) {
    		child = BUS_ADD_CHILD(parent, 0, "foo", -1);
    		device_set_desc_copy(child, "foo chip ver.123");
    		device_set_driver(child, driver);
    		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_set_desc_copy(9), device_set_driver(9), DEVICE_SHUTDOWN(9)

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