xref: /freebsd/share/man/man9/DECLARE_MODULE.9 (revision 5521ff5a4d1929056e7ffc982fac3341ca54df7c)
1b6a55e7aSAlexander Langer.\" -*- nroff -*-
2b6a55e7aSAlexander Langer.\"
3b6a55e7aSAlexander Langer.\" Copyright (c) 2000 Alexander Langer
4b6a55e7aSAlexander Langer.\"
5b6a55e7aSAlexander Langer.\" All rights reserved.
6b6a55e7aSAlexander Langer.\"
7b6a55e7aSAlexander Langer.\" This program is free software.
8b6a55e7aSAlexander Langer.\"
9b6a55e7aSAlexander Langer.\" Redistribution and use in source and binary forms, with or without
10b6a55e7aSAlexander Langer.\" modification, are permitted provided that the following conditions
11b6a55e7aSAlexander Langer.\" are met:
12b6a55e7aSAlexander Langer.\" 1. Redistributions of source code must retain the above copyright
13b6a55e7aSAlexander Langer.\"    notice, this list of conditions and the following disclaimer.
14b6a55e7aSAlexander Langer.\" 2. Redistributions in binary form must reproduce the above copyright
15b6a55e7aSAlexander Langer.\"    notice, this list of conditions and the following disclaimer in the
16b6a55e7aSAlexander Langer.\"    documentation and/or other materials provided with the distribution.
17b6a55e7aSAlexander Langer.\"
18b6a55e7aSAlexander Langer.\" THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR
19b6a55e7aSAlexander Langer.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20b6a55e7aSAlexander Langer.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21b6a55e7aSAlexander Langer.\" IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT,
22b6a55e7aSAlexander Langer.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23b6a55e7aSAlexander Langer.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24b6a55e7aSAlexander Langer.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25b6a55e7aSAlexander Langer.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26b6a55e7aSAlexander Langer.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27b6a55e7aSAlexander Langer.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28b6a55e7aSAlexander Langer.\"
29b6a55e7aSAlexander Langer.\" $FreeBSD$
30b6a55e7aSAlexander Langer.\"
31b6a55e7aSAlexander Langer.Dd March 3, 2001
32b6a55e7aSAlexander Langer.Dt DECLARE_MODULE 9
33b6a55e7aSAlexander Langer.Os
34b6a55e7aSAlexander Langer.Sh NAME
35b6a55e7aSAlexander Langer.Nm DECLARE_MODULE
36b6a55e7aSAlexander Langer.Nd kernel module declaration macro
37b6a55e7aSAlexander Langer.Sh SYNOPSIS
38b6a55e7aSAlexander Langer.Fd #include <sys/module.h>
39b6a55e7aSAlexander Langer.Fn DECLARE_MODULE "name" "moduledata_t data" "sub" "order"
40b6a55e7aSAlexander Langer.Sh DESCRIPTION
41b6a55e7aSAlexander LangerThe
42b6a55e7aSAlexander Langer.Fn DECLARE_MODULE
43b6a55e7aSAlexander Langermacro declares a generic kernel module.
44b6a55e7aSAlexander LangerIt is used to register the module with the system, using the
45b6a55e7aSAlexander Langer.Fn SYSINIT
46b6a55e7aSAlexander Langermacro.
47b6a55e7aSAlexander Langer.Fn DECLARE_MODULE
48b6a55e7aSAlexander Langeris usually used within other macros, such as
49b6a55e7aSAlexander Langer.Xr DRIVER_MODULE 9 ,
50a8ed195dSAlexander Langer.Xr DEV_MODULE 9
51b6a55e7aSAlexander Langerand
52b6a55e7aSAlexander Langer.Xr SYSCALL_MODULE 9 .
53b6a55e7aSAlexander LangerHowever, it can be called directly of course, for example in
54b6a55e7aSAlexander Langerorder to implement dynamic sysctls.
55b6a55e7aSAlexander Langer.Pp
56b6a55e7aSAlexander LangerThe arguments to
57b6a55e7aSAlexander Langer.Fn DECLARE_MODULE :
58b6a55e7aSAlexander Langer.Pp
59b6a55e7aSAlexander Langer.Fa name
60b6a55e7aSAlexander Langeris the name of the module, which will be used in the
61b6a55e7aSAlexander Langer.Fn SYSINIT
62b6a55e7aSAlexander Langercall to identify the module.
63b6a55e7aSAlexander Langer.Pp
64b6a55e7aSAlexander Langer.Fa data
65b6a55e7aSAlexander Langeris a pointer to the
66b6a55e7aSAlexander Langer.Vt moduledata_t
67b6a55e7aSAlexander Langerstructure, which contains two main items, the official name of the
68b6a55e7aSAlexander Langermodule name, which will be used in the
69b6a55e7aSAlexander Langer.Vt module_t
70b6a55e7aSAlexander Langerstructure and a pointer to the event handler function of type
71b6a55e7aSAlexander Langer.Vt modeventhand_t .
72b6a55e7aSAlexander Langer.Pp
73b6a55e7aSAlexander Langer.Fa sub
74b6a55e7aSAlexander Langeris an argument directed to the
75b6a55e7aSAlexander Langer.Fn SYSINIT
76b6a55e7aSAlexander Langermacro.
77b6a55e7aSAlexander LangerValid values for this are contained in the
78b6a55e7aSAlexander Langer.Vt sysstem_sub_id
79b6a55e7aSAlexander Langerenumeration
80b6a55e7aSAlexander Langer(see
81b6a55e7aSAlexander Langer.Pa kernel.h )
82b6a55e7aSAlexander Langerand specify the type of system startup interfaces.
83b6a55e7aSAlexander LangerThe
84b6a55e7aSAlexander Langer.Xr DRIVER_MODULE 9
85b6a55e7aSAlexander Langermacro uses a value of
86b6a55e7aSAlexander Langer.Dv SI_SUB_DRIVERS
87b6a55e7aSAlexander Langerhere for example, since these modules contain a driver for a device.
88b6a55e7aSAlexander LangerFor kernel modules that are loaded at runtime, a value of
89b6a55e7aSAlexander Langer.Dv SI_SUB_EXEC
90b6a55e7aSAlexander Langeris common.
91b6a55e7aSAlexander Langer.Pp
92b6a55e7aSAlexander LangerThe
93b6a55e7aSAlexander Langer.Fa order
94b6a55e7aSAlexander Langervalue is another argument for
95b6a55e7aSAlexander Langer.Fn SYSINIT .
96b6a55e7aSAlexander LangerIt represents the KLDs order of initialization within the subsystem.
97b6a55e7aSAlexander LangerValid values are defined in the
98b6a55e7aSAlexander Langer.Vt sysinit_elem_order
99b6a55e7aSAlexander Langerenumeration
100b6a55e7aSAlexander Langer.Pa ( kernel.h ) .
101b6a55e7aSAlexander Langer.Sh SEE ALSO
102a8ed195dSAlexander Langer.Xr DEV_MODULE 9 ,
103b6a55e7aSAlexander Langer.Xr DRIVER_MODULE 9 ,
104b6a55e7aSAlexander Langer.Xr module 9 ,
1055521ff5aSRuslan Ermilov.Xr SYSCALL_MODULE 9
1065521ff5aSRuslan Ermilov.Pp
107b6a55e7aSAlexander Langer.Pa /usr/include/sys/kernel.h ,
108b6a55e7aSAlexander Langer.Pa /usr/share/examples/kld
109b6a55e7aSAlexander Langer.Sh AUTHORS
110b6a55e7aSAlexander Langer.An -nosplit
111b6a55e7aSAlexander LangerThis manual page was written by
112b6a55e7aSAlexander Langer.An Alexander Langer Aq alex@FreeBSD.org ,
113b6a55e7aSAlexander Langerinspired by the KLD Facility Programming Tutorial by
114b6a55e7aSAlexander Langer.An Andrew Reiter Aq arr@watson.org .
115