Add devclass_get_drivers(9) which provides an array of pointers to driver
instances in a given devclass. This is useful for systems that want to call code in driver static methods, similar to device_identify(). Reviewed by: dfr MFC after: 2 weeks
This commit is contained in:
parent
c3e11b6b72
commit
824f34041b
57
share/man/man9/devclass_get_drivers.9
Normal file
57
share/man/man9/devclass_get_drivers.9
Normal file
@ -0,0 +1,57 @@
|
||||
.\" -*- nroff -*-
|
||||
.\"
|
||||
.\" Copyright (c) 2005 Nate Lawson
|
||||
.\"
|
||||
.\" All rights reserved.
|
||||
.\"
|
||||
.\" This program is free software.
|
||||
.\"
|
||||
.\" Redistribution and use in source and binary forms, with or without
|
||||
.\" modification, are permitted provided that the following conditions
|
||||
.\" are met:
|
||||
.\" 1. Redistributions of source code must retain the above copyright
|
||||
.\" notice, this list of conditions and the following disclaimer.
|
||||
.\" 2. Redistributions in binary form must reproduce the above copyright
|
||||
.\" notice, this list of conditions and the following disclaimer in the
|
||||
.\" documentation and/or other materials provided with the distribution.
|
||||
.\"
|
||||
.\" THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR
|
||||
.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
.\" IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
.\"
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd April 3, 2005
|
||||
.Dt DEVCLASS_GET_DRIVERS 9
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm devclass_get_drivers
|
||||
.Nd get a list of drivers in a devclass
|
||||
.Sh SYNOPSIS
|
||||
.In sys/param.h
|
||||
.In sys/bus.h
|
||||
.Ft int
|
||||
.Fn devclass_get_drivers "devclass_t dc" "driver_t ***listp" "int *countp"
|
||||
.Sh DESCRIPTION
|
||||
Retrieve a list of pointers to all driver instances currently in the
|
||||
devclass and return the list in
|
||||
.Fa *listp
|
||||
and the number of drivers in the list in
|
||||
.Fa *countp .
|
||||
The memory allocated for the list should be freed using
|
||||
.Fn free "*listp" "M_TEMP" .
|
||||
.Sh RETURN VALUES
|
||||
Zero is returned on success, otherwise an appropriate error is returned.
|
||||
.Sh SEE ALSO
|
||||
.Xr devclass 9 ,
|
||||
.Xr device 9
|
||||
.Sh AUTHORS
|
||||
This man page was written by
|
||||
.An Nate Lawson .
|
@ -1133,6 +1133,47 @@ devclass_get_devices(devclass_t dc, device_t **devlistp, int *devcountp)
|
||||
return (0);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get a list of drivers in the devclass
|
||||
*
|
||||
* An array containing a list of pointers to all the drivers in the
|
||||
* given devclass is allocated and returned in @p *listp. The number
|
||||
* of drivers in the array is returned in @p *countp. The caller should
|
||||
* free the array using @c free(p, M_TEMP).
|
||||
*
|
||||
* @param dc the devclass to examine
|
||||
* @param listp gives location for array pointer return value
|
||||
* @param countp gives location for number of array elements
|
||||
* return value
|
||||
*
|
||||
* @retval 0 success
|
||||
* @retval ENOMEM the array allocation failed
|
||||
*/
|
||||
int
|
||||
devclass_get_drivers(devclass_t dc, driver_t ***listp, int *countp)
|
||||
{
|
||||
driverlink_t dl;
|
||||
driver_t **list;
|
||||
int count;
|
||||
|
||||
count = 0;
|
||||
TAILQ_FOREACH(dl, &dc->drivers, link)
|
||||
count++;
|
||||
list = malloc(count * sizeof(driver_t *), M_TEMP, M_NOWAIT);
|
||||
if (list == NULL)
|
||||
return (ENOMEM);
|
||||
|
||||
count = 0;
|
||||
TAILQ_FOREACH(dl, &dc->drivers, link) {
|
||||
list[count] = dl->driver;
|
||||
count++;
|
||||
}
|
||||
*listp = list;
|
||||
*countp = count;
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get the number of devices in a devclass
|
||||
*
|
||||
|
@ -383,6 +383,7 @@ const char *devclass_get_name(devclass_t dc);
|
||||
device_t devclass_get_device(devclass_t dc, int unit);
|
||||
void *devclass_get_softc(devclass_t dc, int unit);
|
||||
int devclass_get_devices(devclass_t dc, device_t **listp, int *countp);
|
||||
int devclass_get_drivers(devclass_t dc, driver_t ***listp, int *countp);
|
||||
int devclass_get_count(devclass_t dc);
|
||||
int devclass_get_maxunit(devclass_t dc);
|
||||
int devclass_find_free_unit(devclass_t dc, int unit);
|
||||
|
Loading…
Reference in New Issue
Block a user