Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F107030610
D48367.id.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
D48367.id.diff
View Options
diff --git a/share/man/man9/DEVICE_IDENTIFY.9 b/share/man/man9/DEVICE_IDENTIFY.9
--- a/share/man/man9/DEVICE_IDENTIFY.9
+++ b/share/man/man9/DEVICE_IDENTIFY.9
@@ -31,39 +31,41 @@
.Os
.Sh NAME
.Nm DEVICE_IDENTIFY
-.Nd identify a device, register it
+.Nd identify new child devices and register them
.Sh SYNOPSIS
.In sys/param.h
.In sys/bus.h
.Ft void
.Fn DEVICE_IDENTIFY "driver_t *driver" "device_t parent"
.Sh DESCRIPTION
-The identify function for a device is only needed for devices on buses
-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.
+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 on various ways including accessing non-ambiguous
+device registers and parsing firmware tables.
+Software-only pseudo devices are also often enumerated via identify methods.
.Pp
+For each newly identified device,
+a new device instance should be created by invoking the
.Xr 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
-.Fn bus_set_resource
-for each resource (refer to
+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
.Xr bus_set_resource 9
-for more information).
+for each resource.
.Pp
-Since the device tree and the device driver tree are disjoint, the
-.Fn DEVICE_IDENTIFY
-routine needs to take this into account.
-If you load and unload your device driver that has the identify
-routine, the child node has the potential for adding the same node
-multiple times unless specific measure are taken to preclude that
-possibility.
+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
+.Xr device_find_child 9
+can be used to detect existing devices.
.Sh 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.
+(an I/O port) with the parent bus device.
.Bd -literal
void
foo_identify(driver_t *driver, device_t parent)
@@ -72,7 +74,7 @@
retrieve_device_information;
if (devices matches one of your supported devices &&
- not already in device tree) {
+ device_get_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);
}
@@ -82,11 +84,7 @@
.Xr BUS_ADD_CHILD 9 ,
.Xr bus_set_resource 9 ,
.Xr device 9 ,
-.Xr device_add_child 9 ,
-.Xr DEVICE_ATTACH 9 ,
-.Xr DEVICE_DETACH 9 ,
-.Xr DEVICE_PROBE 9 ,
-.Xr DEVICE_SHUTDOWN 9
+.Xr device_get_child 9
.Sh AUTHORS
This manual page was written by
.An Alexander Langer Aq Mt alex@FreeBSD.org .
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Fri, Jan 10, 5:43 AM (11 h, 32 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
15724145
Default Alt Text
D48367.id.diff (3 KB)
Attached To
Mode
D48367: DEVICE_IDENTIFY.9: Modernize description and use cases
Attached
Detach File
Event Timeline
Log In to Comment