summaryrefslogtreecommitdiffstats
path: root/share/man/man9/DRIVER_MODULE.9
diff options
context:
space:
mode:
Diffstat (limited to 'share/man/man9/DRIVER_MODULE.9')
-rw-r--r--share/man/man9/DRIVER_MODULE.9150
1 files changed, 150 insertions, 0 deletions
diff --git a/share/man/man9/DRIVER_MODULE.9 b/share/man/man9/DRIVER_MODULE.9
new file mode 100644
index 0000000..af03ef9
--- /dev/null
+++ b/share/man/man9/DRIVER_MODULE.9
@@ -0,0 +1,150 @@
+.\" -*- nroff -*-
+.\"
+.\" Copyright (c) 2000 Alexander Langer
+.\"
+.\" 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 August 21, 2012
+.Dt DRIVER_MODULE 9
+.Os
+.Sh NAME
+.Nm DRIVER_MODULE ,
+.Nm DRIVER_MODULE_ORDERED ,
+.Nm EARLY_DRIVER_MODULE ,
+.Nm EARLY_DRIVER_MODULE_ORDERED
+.Nd kernel driver declaration macro
+.Sh SYNOPSIS
+.In sys/param.h
+.In sys/kernel.h
+.In sys/bus.h
+.In sys/module.h
+.Fn DRIVER_MODULE name busname "driver_t driver" "devclass_t devclass" "modeventhand_t evh" "void *arg"
+.Fn DRIVER_MODULE_ORDERED name busname "driver_t driver" "devclass_t devclass" "modeventhand_t evh" "void *arg" "int order"
+.Fn EARLY_DRIVER_MODULE name busname "driver_t driver" "devclass_t devclass" "modeventhand_t evh" "void *arg" "enum sysinit_elem_order order" "int pass"
+.Fn EARLY_DRIVER_MODULE_ORDERED name busname "driver_t driver" "devclass_t devclass" "modeventhand_t evh" "void *arg" "enum sysinit_elem_order order" "int pass"
+.Sh DESCRIPTION
+The
+.Fn DRIVER_MODULE
+macro declares a kernel driver.
+.Fn DRIVER_MODULE
+expands to the real driver declaration, where the phrase
+.Fa name
+is used as the naming prefix for the driver and its functions.
+Note that it is supplied as plain text, and not a
+.Li char
+or
+.Li char * .
+.Pp
+.Fa busname
+is the parent bus of the driver (PCI, ISA, PPBUS and others), e.g.\&
+.Ql pci ,
+.Ql isa ,
+or
+.Ql ppbus .
+.Pp
+The identifier used in
+.Fn DRIVER_MODULE
+can be different from the driver name.
+Also, the same driver identifier can exist on different busses,
+which is a pretty clean way of making front ends for different cards
+using the same driver on the same or different busses.
+For example, the following is allowed:
+.Pp
+.Fn DRIVER_MODULE foo isa foo_driver foo_devclass NULL NULL ;
+.Pp
+.Fn DRIVER_MODULE foo pci foo_driver foo_devclass NULL NULL ;
+.Pp
+.Fa driver
+is the driver of type
+.Li driver_t ,
+which contains the information about the driver and is therefore one of the
+two most important parts of the call to
+.Fn DRIVER_MODULE .
+.Pp
+The
+.Fa devclass
+argument contains the kernel-internal information about the device,
+which will be used within the kernel driver module.
+.Pp
+The
+.Fa evh
+argument is the event handler which is called when the driver (or module)
+is loaded or unloaded (see
+.Xr module 9 ) .
+.Pp
+The
+.Fa arg
+is unused at this time and should be a
+.Dv NULL
+pointer.
+.Pp
+The
+.Fn DRIVER_MODULE_ORDERED
+macro allows a driver to be registered in a specific order.
+This can be useful if a single kernel module contains multiple drivers
+that are inter-dependent.
+The
+.Fa order
+argument should be one of the
+.Xr SYSINIT 9
+initialization ordering constants
+.Pq Dv SI_ORDER_* .
+The default order for a driver module is
+.Dv SI_ORDER_MIDDLE .
+Typically a module will specify an order of
+.Dv SI_ORDER_ANY
+for a single driver to ensure it is registered last.
+.Pp
+The
+.Fn EARLY_DRIVER_MODULE
+macro allows a driver to be registered for a specific pass level.
+The boot time probe and attach process makes multiple passes over the
+device tree.
+Certain critical drivers that provide basic services needed by other
+devices are attach during earlier passes.
+Most drivers are attached in a final general pass.
+A driver that attaches during an early pass must register for a specific
+pass level
+.Pq BUS_PASS_*
+via the
+.Fa pass
+argument.
+Once a driver is registered it is available to attach to devices for
+all subsequent passes.
+.Pp
+The
+.Fn EARLY_DRIVER_MODULE_ORDERED
+macro allows a driver to be registered both in a specific order and
+for a specific pass level.
+.Sh SEE ALSO
+.Xr device 9 ,
+.Xr driver 9 ,
+.Xr module 9 ,
+.Xr SYSINIT 9
+.Sh AUTHORS
+This manual page was written by
+.An Alexander Langer Aq Mt alex@FreeBSD.org .
OpenPOWER on IntegriCloud