Linux and UNIX Man Pages

Linux & Unix Commands - Search Man Pages

driver(9) [freebsd man page]

DRIVER(9)						   BSD Kernel Developer's Manual						 DRIVER(9)

NAME
driver -- structure describing a device driver SYNOPSIS
#include <sys/param.h> #include <sys/kernel.h> #include <sys/bus.h> #include <sys/module.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 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 */ DEVMETHOD_END }; 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, NULL, NULL); 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 stan- dard "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 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
November 22, 2011 BSD

Check Out this Related Man Page

DEVICE_IDENTIFY(9)					   BSD Kernel Developer's Manual					DEVICE_IDENTIFY(9)

NAME
DEVICE_IDENTIFY -- identify a device, register it SYNOPSIS
#include <sys/param.h> #include <sys/bus.h> void DEVICE_IDENTIFY(driver_t *driver, device_t parent); DESCRIPTION
The identify function for a device is only needed for devices on busses 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. 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 bus_set_resource() for each resource (refer to bus_set_resource(9) for more information). Since the device tree and the device driver tree are disjoint, the 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. 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. void foo_identify(driver_t *driver, device_t parent) { device_t child; retrieve_device_information; if (devices matches one of your supported devices && not already in device tree) { child = BUS_ADD_CHILD(parent, 0, "foo", -1); bus_set_resource(child, SYS_RES_IOPORT, 0, FOO_IOADDR, 1); } } SEE ALSO
BUS_ADD_CHILD(9), bus_set_resource(9), device(9), device_add_child(9), DEVICE_ATTACH(9), DEVICE_DETACH(9), DEVICE_PROBE(9), DEVICE_SHUTDOWN(9) AUTHORS
This manual page was written by Alexander Langer <alex@FreeBSD.org>. BSD
May 13, 2004 BSD
Man Page