1: .\" -*- nroff -*-
2: .\"
3: .\" Copyright (c) 2000 Alexander Langer
4: .\"
5: .\" All rights reserved.
6: .\"
7: .\" This program is free software.
8: .\"
9: .\" Redistribution and use in source and binary forms, with or without
10: .\" modification, are permitted provided that the following conditions
11: .\" are met:
12: .\" 1. Redistributions of source code must retain the above copyright
13: .\" notice, this list of conditions and the following disclaimer.
14: .\" 2. Redistributions in binary form must reproduce the above copyright
15: .\" notice, this list of conditions and the following disclaimer in the
16: .\" documentation and/or other materials provided with the distribution.
17: .\"
18: .\" THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR
19: .\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20: .\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21: .\" IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT,
22: .\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23: .\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24: .\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25: .\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26: .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27: .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28: .\"
29: .\" $FreeBSD: src/share/man/man9/DRIVER_MODULE.9,v 1.1.2.5 2001/12/17 11:30:18 ru Exp $
30: .\" $DragonFly: src/share/man/man9/DRIVER_MODULE.9,v 1.2 2003/06/17 04:37:01 dillon Exp $
31: .\"
32: .Dd May 16, 2000
33: .Dt DRIVER_MODULE 9
34: .Os
35: .Sh NAME
36: .Nm DRIVER_MODULE
37: .Nd kernel driver declaration macro
38: .Sh SYNOPSIS
39: .In sys/types.h
40: .In sys/bus.h
41: .In sys/module.h
42: .Fn DRIVER_MODULE name busname "driver_t driver" "devclass_t devclass" "modeventhand_t evh" "void *arg"
43: .Fn MULTI_DRIVER_MODULE name busname "driver_t drivers[]" "devclass_t devclass" "modeventhand_t evh" "void *arg"
44: .Sh DESCRIPTION
45: The
46: .Fn DRIVER_MODULE
47: macro declares a kernel driver.
48: .Fn DRIVER_MODULE
49: expands to the real driver declaration, where the phrase
50: .Fa name
51: is used as the naming prefix for the driver and its functions.
52: Note that it is supplied as plain text, and not a
53: .Li char
54: or
55: .Li char * .
56: .Pp
57: .Fa busname
58: is the parent bus of the driver (PCI, ISA, PPBUS and others), e.g.\&
59: .Ql pci ,
60: .Ql isa ,
61: or
62: .Ql ppbus .
63: .Pp
64: The identifier used in
65: .Fn DRIVER_MODULE
66: can be different from the driver name.
67: Also, the same driver identifier can exist on different busses,
68: which is a pretty clean way of making front ends for different cards
69: using the same driver on the same or different busses.
70: For example, the following is allowed:
71: .Pp
72: .Fn DRIVER_MODULE foo isa foo_driver foo_devclass NULL NULL ;
73: .Pp
74: .Fn DRIVER_MODULE foo pci foo_driver foo_devclass NULL NULL ;
75: .Pp
76: .Fa driver
77: is the driver of type
78: .Li driver_t ,
79: which contains the information about the driver and is therefore one of the
80: two most important parts of the call to
81: .Fn DRIVER_MODULE .
82: .Pp
83: The
84: .Fa devclass
85: argument contains the kernel-internal information about the device,
86: which will be used within the kernel driver module.
87: .Pp
88: The
89: .Fa evh
90: argument is the event handler which is called when the driver (or module)
91: is loaded or unloaded (see
92: .Xr module 9 ) .
93: .Pp
94: The
95: .Fa arg
96: is unused at this time and should be a
97: .Dv NULL
98: pointer.
99: .Pp
100: .Fn MULTI_DRIVER_MODULE
101: is a special version of
102: .Fn DRIVER_MODULE ,
103: which takes a list of drivers instead of a single driver instance.
104: .Sh SEE ALSO
105: .Xr device 9 ,
106: .Xr driver 9 ,
107: .Xr module 9
108: .Sh AUTHORS
109: This manual page was written by
110: .An Alexander Langer Aq alex@FreeBSD.org .