moduleparam.h revision 255932
1219820Sjeff/*-
2219820Sjeff * Copyright (c) 2010 Isilon Systems, Inc.
3219820Sjeff * Copyright (c) 2010 iX Systems, Inc.
4219820Sjeff * Copyright (c) 2010 Panasas, Inc.
5219820Sjeff * All rights reserved.
6219820Sjeff *
7219820Sjeff * Redistribution and use in source and binary forms, with or without
8219820Sjeff * modification, are permitted provided that the following conditions
9219820Sjeff * are met:
10219820Sjeff * 1. Redistributions of source code must retain the above copyright
11219820Sjeff *    notice unmodified, this list of conditions, and the following
12219820Sjeff *    disclaimer.
13219820Sjeff * 2. Redistributions in binary form must reproduce the above copyright
14219820Sjeff *    notice, this list of conditions and the following disclaimer in the
15219820Sjeff *    documentation and/or other materials provided with the distribution.
16219820Sjeff *
17219820Sjeff * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18219820Sjeff * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19219820Sjeff * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20219820Sjeff * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21219820Sjeff * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22219820Sjeff * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23219820Sjeff * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24219820Sjeff * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25219820Sjeff * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26219820Sjeff * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27219820Sjeff */
28219820Sjeff#ifndef	_LINUX_MODULEPARAM_H_
29219820Sjeff#define	_LINUX_MODULEPARAM_H_
30219820Sjeff
31219820Sjeff#include <linux/types.h>
32219820Sjeff
33219820Sjeff/*
34219820Sjeff * These are presently not hooked up to anything.  In linux the parameters
35219820Sjeff * can be set when modules are loaded.  On FreeBSD these could be mapped
36219820Sjeff * to kenv in the future.
37219820Sjeff */
38219820Sjeffstruct kernel_param;
39219820Sjeff
40219820Sjefftypedef int (*param_set_fn)(const char *val, struct kernel_param *kp);
41219820Sjefftypedef int (*param_get_fn)(char *buffer, struct kernel_param *kp);
42219820Sjeff
43219820Sjeffstruct kernel_param {
44219820Sjeff	const char	*name;
45219820Sjeff	u16		perm;
46219820Sjeff	u16		flags;
47219820Sjeff	param_set_fn	set;
48219820Sjeff	param_get_fn	get;
49219820Sjeff	union {
50219820Sjeff		void	*arg;
51219820Sjeff		struct kparam_string	*str;
52219820Sjeff		struct kparam_array	*arr;
53219820Sjeff	} un;
54219820Sjeff};
55219820Sjeff
56219820Sjeff#define	KPARAM_ISBOOL	2
57219820Sjeff
58219820Sjeffstruct kparam_string {
59219820Sjeff	unsigned int maxlen;
60219820Sjeff	char *string;
61219820Sjeff};
62219820Sjeff
63219820Sjeffstruct kparam_array
64219820Sjeff{
65219820Sjeff	unsigned int	max;
66219820Sjeff	unsigned int	*num;
67219820Sjeff	param_set_fn	set;
68219820Sjeff	param_get_fn	get;
69219820Sjeff	unsigned int	elemsize;
70219820Sjeff	void 		*elem;
71219820Sjeff};
72219820Sjeff
73219820Sjeffstatic inline void
74219820Sjeffparam_sysinit(struct kernel_param *param)
75219820Sjeff{
76219820Sjeff}
77219820Sjeff
78219820Sjeff#define	module_param_call(name, set, get, arg, perm)			\
79219820Sjeff	static struct kernel_param __param_##name =			\
80219820Sjeff	    { #name, perm, 0, set, get, { arg } };			\
81219820Sjeff	SYSINIT(name##_param_sysinit, SI_SUB_DRIVERS, SI_ORDER_FIRST,	\
82219820Sjeff	    param_sysinit, &__param_##name);
83219820Sjeff
84219820Sjeff#define	module_param_named(name, var, type, mode)			\
85219820Sjeff	module_param_call(name, param_set_##type, param_get_##type, &var, mode)
86219820Sjeff
87219820Sjeff#define	module_param(var, type, mode)					\
88219820Sjeff	module_param_named(var, var, type, mode)
89219820Sjeff
90255932Salfred#define module_param_array(var, type, addr_argc, mode)                  \
91255932Salfred        module_param_named(var, var, type, mode)
92255932Salfred
93219820Sjeff#define	MODULE_PARM_DESC(name, desc)
94219820Sjeff
95219820Sjeffstatic inline int
96219820Sjeffparam_set_byte(const char *val, struct kernel_param *kp)
97219820Sjeff{
98219820Sjeff
99219820Sjeff	return 0;
100219820Sjeff}
101219820Sjeff
102219820Sjeffstatic inline int
103219820Sjeffparam_get_byte(char *buffer, struct kernel_param *kp)
104219820Sjeff{
105219820Sjeff
106219820Sjeff	return 0;
107219820Sjeff}
108219820Sjeff
109219820Sjeff
110219820Sjeffstatic inline int
111219820Sjeffparam_set_short(const char *val, struct kernel_param *kp)
112219820Sjeff{
113219820Sjeff
114219820Sjeff	return 0;
115219820Sjeff}
116219820Sjeff
117219820Sjeffstatic inline int
118219820Sjeffparam_get_short(char *buffer, struct kernel_param *kp)
119219820Sjeff{
120219820Sjeff
121219820Sjeff	return 0;
122219820Sjeff}
123219820Sjeff
124219820Sjeff
125219820Sjeffstatic inline int
126219820Sjeffparam_set_ushort(const char *val, struct kernel_param *kp)
127219820Sjeff{
128219820Sjeff
129219820Sjeff	return 0;
130219820Sjeff}
131219820Sjeff
132219820Sjeffstatic inline int
133219820Sjeffparam_get_ushort(char *buffer, struct kernel_param *kp)
134219820Sjeff{
135219820Sjeff
136219820Sjeff	return 0;
137219820Sjeff}
138219820Sjeff
139219820Sjeff
140219820Sjeffstatic inline int
141219820Sjeffparam_set_int(const char *val, struct kernel_param *kp)
142219820Sjeff{
143219820Sjeff
144219820Sjeff	return 0;
145219820Sjeff}
146219820Sjeff
147219820Sjeffstatic inline int
148219820Sjeffparam_get_int(char *buffer, struct kernel_param *kp)
149219820Sjeff{
150219820Sjeff
151219820Sjeff	return 0;
152219820Sjeff}
153219820Sjeff
154219820Sjeff
155219820Sjeffstatic inline int
156219820Sjeffparam_set_uint(const char *val, struct kernel_param *kp)
157219820Sjeff{
158219820Sjeff
159219820Sjeff	return 0;
160219820Sjeff}
161219820Sjeff
162219820Sjeffstatic inline int
163219820Sjeffparam_get_uint(char *buffer, struct kernel_param *kp)
164219820Sjeff{
165219820Sjeff
166219820Sjeff	return 0;
167219820Sjeff}
168219820Sjeff
169219820Sjeff
170219820Sjeffstatic inline int
171219820Sjeffparam_set_long(const char *val, struct kernel_param *kp)
172219820Sjeff{
173219820Sjeff
174219820Sjeff	return 0;
175219820Sjeff}
176219820Sjeff
177219820Sjeffstatic inline int
178219820Sjeffparam_get_long(char *buffer, struct kernel_param *kp)
179219820Sjeff{
180219820Sjeff
181219820Sjeff	return 0;
182219820Sjeff}
183219820Sjeff
184219820Sjeff
185219820Sjeffstatic inline int
186219820Sjeffparam_set_ulong(const char *val, struct kernel_param *kp)
187219820Sjeff{
188219820Sjeff
189219820Sjeff	return 0;
190219820Sjeff}
191219820Sjeff
192219820Sjeffstatic inline int
193219820Sjeffparam_get_ulong(char *buffer, struct kernel_param *kp)
194219820Sjeff{
195219820Sjeff
196219820Sjeff	return 0;
197219820Sjeff}
198219820Sjeff
199219820Sjeff
200219820Sjeffstatic inline int
201219820Sjeffparam_set_charp(const char *val, struct kernel_param *kp)
202219820Sjeff{
203219820Sjeff
204219820Sjeff	return 0;
205219820Sjeff}
206219820Sjeff
207219820Sjeffstatic inline int
208219820Sjeffparam_get_charp(char *buffer, struct kernel_param *kp)
209219820Sjeff{
210219820Sjeff
211219820Sjeff	return 0;
212219820Sjeff}
213219820Sjeff
214219820Sjeff
215219820Sjeffstatic inline int
216219820Sjeffparam_set_bool(const char *val, struct kernel_param *kp)
217219820Sjeff{
218219820Sjeff
219219820Sjeff	return 0;
220219820Sjeff}
221219820Sjeff
222219820Sjeffstatic inline int
223219820Sjeffparam_get_bool(char *buffer, struct kernel_param *kp)
224219820Sjeff{
225219820Sjeff
226219820Sjeff	return 0;
227219820Sjeff}
228219820Sjeff
229219820Sjeff#endif	/* _LINUX_MODULEPARAM_H_ */
230