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
90219820Sjeff#define	MODULE_PARM_DESC(name, desc)
91219820Sjeff
92219820Sjeffstatic inline int
93219820Sjeffparam_set_byte(const char *val, struct kernel_param *kp)
94219820Sjeff{
95219820Sjeff
96219820Sjeff	return 0;
97219820Sjeff}
98219820Sjeff
99219820Sjeffstatic inline int
100219820Sjeffparam_get_byte(char *buffer, struct kernel_param *kp)
101219820Sjeff{
102219820Sjeff
103219820Sjeff	return 0;
104219820Sjeff}
105219820Sjeff
106219820Sjeff
107219820Sjeffstatic inline int
108219820Sjeffparam_set_short(const char *val, struct kernel_param *kp)
109219820Sjeff{
110219820Sjeff
111219820Sjeff	return 0;
112219820Sjeff}
113219820Sjeff
114219820Sjeffstatic inline int
115219820Sjeffparam_get_short(char *buffer, struct kernel_param *kp)
116219820Sjeff{
117219820Sjeff
118219820Sjeff	return 0;
119219820Sjeff}
120219820Sjeff
121219820Sjeff
122219820Sjeffstatic inline int
123219820Sjeffparam_set_ushort(const char *val, struct kernel_param *kp)
124219820Sjeff{
125219820Sjeff
126219820Sjeff	return 0;
127219820Sjeff}
128219820Sjeff
129219820Sjeffstatic inline int
130219820Sjeffparam_get_ushort(char *buffer, struct kernel_param *kp)
131219820Sjeff{
132219820Sjeff
133219820Sjeff	return 0;
134219820Sjeff}
135219820Sjeff
136219820Sjeff
137219820Sjeffstatic inline int
138219820Sjeffparam_set_int(const char *val, struct kernel_param *kp)
139219820Sjeff{
140219820Sjeff
141219820Sjeff	return 0;
142219820Sjeff}
143219820Sjeff
144219820Sjeffstatic inline int
145219820Sjeffparam_get_int(char *buffer, struct kernel_param *kp)
146219820Sjeff{
147219820Sjeff
148219820Sjeff	return 0;
149219820Sjeff}
150219820Sjeff
151219820Sjeff
152219820Sjeffstatic inline int
153219820Sjeffparam_set_uint(const char *val, struct kernel_param *kp)
154219820Sjeff{
155219820Sjeff
156219820Sjeff	return 0;
157219820Sjeff}
158219820Sjeff
159219820Sjeffstatic inline int
160219820Sjeffparam_get_uint(char *buffer, struct kernel_param *kp)
161219820Sjeff{
162219820Sjeff
163219820Sjeff	return 0;
164219820Sjeff}
165219820Sjeff
166219820Sjeff
167219820Sjeffstatic inline int
168219820Sjeffparam_set_long(const char *val, struct kernel_param *kp)
169219820Sjeff{
170219820Sjeff
171219820Sjeff	return 0;
172219820Sjeff}
173219820Sjeff
174219820Sjeffstatic inline int
175219820Sjeffparam_get_long(char *buffer, struct kernel_param *kp)
176219820Sjeff{
177219820Sjeff
178219820Sjeff	return 0;
179219820Sjeff}
180219820Sjeff
181219820Sjeff
182219820Sjeffstatic inline int
183219820Sjeffparam_set_ulong(const char *val, struct kernel_param *kp)
184219820Sjeff{
185219820Sjeff
186219820Sjeff	return 0;
187219820Sjeff}
188219820Sjeff
189219820Sjeffstatic inline int
190219820Sjeffparam_get_ulong(char *buffer, struct kernel_param *kp)
191219820Sjeff{
192219820Sjeff
193219820Sjeff	return 0;
194219820Sjeff}
195219820Sjeff
196219820Sjeff
197219820Sjeffstatic inline int
198219820Sjeffparam_set_charp(const char *val, struct kernel_param *kp)
199219820Sjeff{
200219820Sjeff
201219820Sjeff	return 0;
202219820Sjeff}
203219820Sjeff
204219820Sjeffstatic inline int
205219820Sjeffparam_get_charp(char *buffer, struct kernel_param *kp)
206219820Sjeff{
207219820Sjeff
208219820Sjeff	return 0;
209219820Sjeff}
210219820Sjeff
211219820Sjeff
212219820Sjeffstatic inline int
213219820Sjeffparam_set_bool(const char *val, struct kernel_param *kp)
214219820Sjeff{
215219820Sjeff
216219820Sjeff	return 0;
217219820Sjeff}
218219820Sjeff
219219820Sjeffstatic inline int
220219820Sjeffparam_get_bool(char *buffer, struct kernel_param *kp)
221219820Sjeff{
222219820Sjeff
223219820Sjeff	return 0;
224219820Sjeff}
225219820Sjeff
226219820Sjeff#endif	/* _LINUX_MODULEPARAM_H_ */
227