---
name: "DEVICE_IDENTIFY"
section: "9"
platform: "freebsd"
package: "base"
version: "16.0-CURRENT-20261027-61c70dc16a79"
release: "FreeBSD 16.0-CURRENT (2026-10-27)"
platforms: ["linux", "freebsd"]
url: "https://new.carta.tech/DEVICE_IDENTIFY"
---

# DEVICE\_IDENTIFY(9)

identify new child devices and register them

## 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)](/BUS_ADD_CHILD/9.md) 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)](/bus_set_resource/9.md) 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)](/device_find_child/9.md) 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_ADD_CHILD/9.md), [bus\_identify\_children(9)](/bus_identify_children/9.md), [bus\_set\_resource(9)](/bus_set_resource/9.md), [device(9)](/device/9.md), [device\_find\_child(9)](/device_find_child/9.md)

## AUTHORS

This manual page was written by Alexander Langer ⟨*alex@FreeBSD.org*⟩.
