Skip site navigation (1)Skip section navigation (2)

FreeBSD Man Pages

Man Page or Keyword Search:
Man Architecture
Apropos Keyword Search (all sections) Output format
home | help
DRIVER(9)	       FreeBSD Kernel Developer's Manual	     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 structure.  The
     structure contains	the name of the	device,	a pointer to a list of meth-
     ods, an indication	of the kind of device which the	driver implements and
     the size of the private data which	the driver needs to associate 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 DRIVER_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 instances 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 handler and	argu-
     ment 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 man page was written by Doug Rabson.

FreeBSD	9.2			 June 16, 1998			   FreeBSD 9.2

NAME | SYNOPSIS | DESCRIPTION | SEE ALSO | AUTHORS

Want to link to this manual page? Use this URL:
<http://www.freebsd.org/cgi/man.cgi?query=driver&sektion=9&manpath=FreeBSD+5.3-RELEASE>

home | help