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 can-
       not  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  cre-
       ated  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  de-
       vice 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_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