Update device_find_child(9) to return the first matching child if unit

is set to -1.

Reviewed by:	dfr, imp
This commit is contained in:
njl 2005-02-08 18:00:29 +00:00
parent e90b04ef14
commit 21180427d3
2 changed files with 25 additions and 8 deletions

View File

@ -28,7 +28,7 @@
.\"
.\" $FreeBSD$
.\"
.Dd June 16, 1998
.Dd February 8, 2005
.Dt DEVICE_FIND_CHILD 9
.Os
.Sh NAME
@ -38,14 +38,21 @@
.In sys/param.h
.In sys/bus.h
.Ft device_t
.Fn device_find_child "device_t dev" "const char* name" "int unit"
.Fn device_find_child "device_t dev" "const char *classname" "int unit"
.Sh DESCRIPTION
This function looks for a specific child of
.Dv dev .
with the given
.Fa name
.Fa classname
and
.Fa unit .
If
.Fa unit
is -1, it returns the first child of
.Dv dev
with a matching
.Fa classname
(that is, the one with the lowest unit.)
.Sh RETURN VALUES
If it exists, the child device is returned, otherwise NULL.
.Sh SEE ALSO

View File

@ -1576,8 +1576,10 @@ device_delete_child(device_t dev, device_t child)
* devices which have @p dev as a parent.
*
* @param dev the parent device to search
* @param unit the unit number to search for
*
* @param unit the unit number to search for. If the unit is -1,
* return the first child of @p dev which has name
* @p classname (that is, the one with the lowest unit.)
*
* @returns the device with the given unit number or @c
* NULL if there is no such device
*/
@ -1591,9 +1593,17 @@ device_find_child(device_t dev, const char *classname, int unit)
if (!dc)
return (NULL);
child = devclass_get_device(dc, unit);
if (child && child->parent == dev)
return (child);
if (unit != -1) {
child = devclass_get_device(dc, unit);
if (child && child->parent == dev)
return (child);
} else {
for (unit = 0; unit < devclass_get_maxunit(dc); unit++) {
child = devclass_get_device(dc, unit);
if (child && child->parent == dev)
return (child);
}
}
return (NULL);
}