xref: /freebsd/share/man/man9/DECLARE_MODULE.9 (revision fa9896e082a1046ff4fbc75fcba4d18d1f2efc19)
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.\"
29920bdda8SEd Maste.Dd February 13, 2018
30b6a55e7aSAlexander Langer.Dt DECLARE_MODULE 9
31b6a55e7aSAlexander Langer.Os
32b6a55e7aSAlexander Langer.Sh NAME
33b6a55e7aSAlexander Langer.Nm DECLARE_MODULE
34b6a55e7aSAlexander Langer.Nd kernel module declaration macro
35b6a55e7aSAlexander Langer.Sh SYNOPSIS
36f16b3c0dSChad David.In sys/param.h
37f16b3c0dSChad David.In sys/kernel.h
3832eef9aeSRuslan Ermilov.In sys/module.h
39b6a55e7aSAlexander Langer.Fn DECLARE_MODULE "name" "moduledata_t data" "sub" "order"
40920bdda8SEd Maste.Fn DECLARE_MODULE_TIED "name" "moduledata_t data" "sub" "order"
41b6a55e7aSAlexander Langer.Sh DESCRIPTION
42b6a55e7aSAlexander LangerThe
43b6a55e7aSAlexander Langer.Fn DECLARE_MODULE
44b6a55e7aSAlexander Langermacro declares a generic kernel module.
45b6a55e7aSAlexander LangerIt is used to register the module with the system, using the
46b6a55e7aSAlexander Langer.Fn SYSINIT
47b6a55e7aSAlexander Langermacro.
48b6a55e7aSAlexander Langer.Fn DECLARE_MODULE
49b6a55e7aSAlexander Langeris usually used within other macros, such as
50b6a55e7aSAlexander Langer.Xr DRIVER_MODULE 9 ,
51a8ed195dSAlexander Langer.Xr DEV_MODULE 9
52b6a55e7aSAlexander Langerand
53b6a55e7aSAlexander Langer.Xr SYSCALL_MODULE 9 .
54c91b6b9eSGiorgos KeramidasOf course, it can also be called directly, for example in
55b6a55e7aSAlexander Langerorder to implement dynamic sysctls.
56b6a55e7aSAlexander Langer.Pp
57920bdda8SEd MasteA module declared with
58920bdda8SEd Maste.Fn DECLARE_MODULE_TIED
59920bdda8SEd Mastewill load only if the running kernel version
60920bdda8SEd Maste(as specified by
61920bdda8SEd Maste.Dv __FreeBSD_version )
62920bdda8SEd Masteis identical to that on which it was built.
63920bdda8SEd MasteThis declaration should be used by modules which depend on interfaces beyond
64920bdda8SEd Mastethe stable kernel KBI (such as ABI emulators or hypervisors that rely on
65920bdda8SEd Masteinternal kernel structures).
66345432aaSMatt Macy.Fn DECLARE_MODULE
67345432aaSMatt Macywill behave like
68345432aaSMatt Macy.Fn DECLARE_MODULE_TIED
69*55ed6718SBenedict Reuschlingwhen compiled with modules built with the kernel.
70*55ed6718SBenedict ReuschlingThis allows locks and other synchronization primitives
71*55ed6718SBenedict Reuschlingto be inlined safely.
72920bdda8SEd Maste.Pp
73920bdda8SEd MasteThe arguments are:
74c91b6b9eSGiorgos Keramidas.Bl -tag -width indent
75c91b6b9eSGiorgos Keramidas.It Fa name
76c91b6b9eSGiorgos KeramidasThe module name, which will be used in the
77b6a55e7aSAlexander Langer.Fn SYSINIT
78b6a55e7aSAlexander Langercall to identify the module.
79c91b6b9eSGiorgos Keramidas.It Fa data
80c91b6b9eSGiorgos KeramidasA
81b6a55e7aSAlexander Langer.Vt moduledata_t
82b6a55e7aSAlexander Langerstructure, which contains two main items, the official name of the
83b6a55e7aSAlexander Langermodule name, which will be used in the
84b6a55e7aSAlexander Langer.Vt module_t
85b6a55e7aSAlexander Langerstructure and a pointer to the event handler function of type
86b6a55e7aSAlexander Langer.Vt modeventhand_t .
87c91b6b9eSGiorgos Keramidas.It Fa sub
88c91b6b9eSGiorgos KeramidasAn argument directed to the
89b6a55e7aSAlexander Langer.Fn SYSINIT
90b6a55e7aSAlexander Langermacro.
91b6a55e7aSAlexander LangerValid values for this are contained in the
92f7fcafe1SChad David.Vt sysinit_sub_id
93b6a55e7aSAlexander Langerenumeration
94b6a55e7aSAlexander Langer(see
95743d5d51SRuslan Ermilov.In sys/kernel.h )
96b6a55e7aSAlexander Langerand specify the type of system startup interfaces.
97b6a55e7aSAlexander LangerThe
98b6a55e7aSAlexander Langer.Xr DRIVER_MODULE 9
99b6a55e7aSAlexander Langermacro uses a value of
100b6a55e7aSAlexander Langer.Dv SI_SUB_DRIVERS
101b6a55e7aSAlexander Langerhere for example, since these modules contain a driver for a device.
102b6a55e7aSAlexander LangerFor kernel modules that are loaded at runtime, a value of
103b6a55e7aSAlexander Langer.Dv SI_SUB_EXEC
104b6a55e7aSAlexander Langeris common.
105c91b6b9eSGiorgos Keramidas.It Fa order
106c91b6b9eSGiorgos KeramidasAn argument for
107b6a55e7aSAlexander Langer.Fn SYSINIT .
108b6a55e7aSAlexander LangerIt represents the KLDs order of initialization within the subsystem.
109b6a55e7aSAlexander LangerValid values are defined in the
110b6a55e7aSAlexander Langer.Vt sysinit_elem_order
111b6a55e7aSAlexander Langerenumeration
112743d5d51SRuslan Ermilov.Pq In sys/kernel.h .
113c91b6b9eSGiorgos Keramidas.El
114b6a55e7aSAlexander Langer.Sh SEE ALSO
115a8ed195dSAlexander Langer.Xr DEV_MODULE 9 ,
116b6a55e7aSAlexander Langer.Xr DRIVER_MODULE 9 ,
117b6a55e7aSAlexander Langer.Xr module 9 ,
1185521ff5aSRuslan Ermilov.Xr SYSCALL_MODULE 9
1195521ff5aSRuslan Ermilov.Pp
120b6a55e7aSAlexander Langer.Pa /usr/include/sys/kernel.h ,
121b6a55e7aSAlexander Langer.Pa /usr/share/examples/kld
122b6a55e7aSAlexander Langer.Sh AUTHORS
123b6a55e7aSAlexander Langer.An -nosplit
124b6a55e7aSAlexander LangerThis manual page was written by
1258a7314fcSBaptiste Daroussin.An Alexander Langer Aq Mt alex@FreeBSD.org ,
126b6a55e7aSAlexander Langerinspired by the KLD Facility Programming Tutorial by
1278a7314fcSBaptiste Daroussin.An Andrew Reiter Aq Mt arr@watson.org .
128