driver(9)
NAME
driver - structure describing a device driver
SYNOPSIS
#include <sys/param.h> #include <sys/bus.h> static int foo_probe(device_t); static int foo_attach(device_t); static int foo_detach(device_t); static int foo_frob(device_t, int, int); static int foo_twiddle(device_t, char *); static struct device_method_t foo_methods[] = { /* Methods from the device interface */ DEVMETHOD(device_probe, foo_probe), DEVMETHOD(device_attach, foo_attach), DEVMETHOD(device_detach, foo_detach), /* Methods from the bogo interface */ DEVMETHOD(bogo_frob, foo_frob), DEVMETHOD(bogo_twiddle, foo_twiddle), /* Terminate method list */ { 0, 0 } }; static driver_t foo_driver { "foo", foo_methods, sizeof(struct foo_softc) }; static devclass_t foo_devclass; DRIVER_MODULE(foo, bogo, foo_driver, foo_devclass, 0, 0);
DESCRIPTION
- Each driver in the kernel is described by a driver_t struc
- ture. The
structure contains the name of the device, a pointer to a - list of methods, an indication of the kind of device which the driver
- implements and
the size of the private data which the driver needs to asso - ciate with a
device instance. Each driver will implement one or more - sets of methods
(called interfaces). The example driver implements the - standard "driver"
interface and the fictitious "bogo" interface. - When a driver is registered with the system (by the DRIV
- ER_MODULE macro,
see DRIVER_MODULE(9)), it is added to the list of drivers - contained in
the devclass of its parent bus type. For instance all PCI - drivers would
be contained in the devclass named "pci" and all ISA drivers - would be in
the devclass named "isa". The reason the drivers are not - held in the
device object of the parent bus is to handle multiple in - stances of a
given type of bus. The DRIVER_MODULE macro will also create - the devclass
with the name of the driver and can optionally call extra - initialisation
code in the driver by specifying an extra module event han - dler and argument as the last two arguments.
SEE ALSO
- devclass(9), device(9), DEVICE_ATTACH(9), DEVICE_DETACH(9),
DEVICE_IDENTIFY(9), DEVICE_PROBE(9), DEVICE_SHUTDOWN(9), - DRIVER_MODULE(9)
AUTHORS
- This manual page was written by Doug Rabson.
- BSD June 16, 1998