Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
DEVICE_IDENTIFY(9)	    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  enu-
     merated  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 de-
     vices.

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 <alex@FreeBSD.org>.

FreeBSD 14.3			 January 9, 2025	      DEVICE_IDENTIFY(9)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=DEVICE_IDENTIFY&sektion=9&manpath=FreeBSD+14.3-RELEASE+and+Ports>

home | help