]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - sys/sys/module_khelp.h
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / sys / sys / module_khelp.h
1 /*-
2  * Copyright (c) 2010 Lawrence Stewart <lstewart@freebsd.org>
3  * Copyright (c) 2010 The FreeBSD Foundation
4  * All rights reserved.
5  *
6  * This software was developed by Lawrence Stewart while studying at the Centre
7  * for Advanced Internet Architectures, Swinburne University of Technology, made
8  * possible in part by grants from the FreeBSD Foundation and Cisco University
9  * Research Program Fund at Community Foundation Silicon Valley.
10  *
11  * Portions of this software were developed at the Centre for Advanced
12  * Internet Architectures, Swinburne University of Technology, Melbourne,
13  * Australia by Lawrence Stewart under sponsorship from the FreeBSD Foundation.
14  *
15  * Redistribution and use in source and binary forms, with or without
16  * modification, are permitted provided that the following conditions
17  * are met:
18  * 1. Redistributions of source code must retain the above copyright
19  *    notice, this list of conditions and the following disclaimer.
20  * 2. Redistributions in binary form must reproduce the above copyright
21  *    notice, this list of conditions and the following disclaimer in the
22  *    documentation and/or other materials provided with the distribution.
23  *
24  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
25  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
28  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34  * SUCH DAMAGE.
35  *
36  * $FreeBSD$
37  */
38
39 #ifndef _SYS_MODULE_KHELP_H_
40 #define _SYS_MODULE_KHELP_H_
41
42 /* XXXLAS: Needed for uma related typedefs. */
43 #include <vm/uma.h>
44
45 /* Helper flags. */
46 #define HELPER_NEEDS_OSD        0x0001
47
48 struct helper {
49         int (*mod_init) (void);
50         int (*mod_destroy) (void);
51 #define HELPER_NAME_MAXLEN 16
52         char                    h_name[HELPER_NAME_MAXLEN];
53         uma_zone_t              h_zone;
54         struct hookinfo         *h_hooks;
55         uint32_t                h_nhooks;
56         uint32_t                h_classes;
57         int32_t                 h_id;
58         volatile uint32_t       h_refcount;
59         uint16_t                h_flags;
60         TAILQ_ENTRY(helper)     h_next;
61 };
62
63 struct khelp_modevent_data {
64         char                    name[HELPER_NAME_MAXLEN];
65         struct helper           *helper;
66         struct hookinfo         *hooks;
67         int                     nhooks;
68         int                     uma_zsize;
69         uma_ctor                umactor;
70         uma_dtor                umadtor;
71 };
72
73 #define KHELP_DECLARE_MOD_UMA(hname, hdata, hhooks, version, size, ctor, dtor) \
74         static struct khelp_modevent_data kmd_##hname = {               \
75                 .name = #hname,                                         \
76                 .helper = hdata,                                        \
77                 .hooks = hhooks,                                        \
78                 .nhooks = sizeof(hhooks) / sizeof(hhooks[0]),           \
79                 .uma_zsize = size,                                      \
80                 .umactor = ctor,                                        \
81                 .umadtor = dtor                                         \
82         };                                                              \
83         static moduledata_t h_##hname = {                               \
84                 .name = #hname,                                         \
85                 .evhand = khelp_modevent,                               \
86                 .priv = &kmd_##hname                                    \
87         };                                                              \
88         DECLARE_MODULE(hname, h_##hname, SI_SUB_KLD, SI_ORDER_ANY);     \
89         MODULE_VERSION(hname, version)
90
91 #define KHELP_DECLARE_MOD(hname, hdata, hhooks, version)                \
92         KHELP_DECLARE_MOD_UMA(hname, hdata, hhooks, version, 0, NULL, NULL)
93
94 int     khelp_modevent(module_t mod, int type, void *data);
95
96 #endif /* _SYS_MODULE_KHELP_H_ */