18d59ecb2SHans Petter Selasky /*-
28d59ecb2SHans Petter Selasky  * Copyright (c) 2010 Isilon Systems, Inc.
38d59ecb2SHans Petter Selasky  * Copyright (c) 2010 iX Systems, Inc.
48d59ecb2SHans Petter Selasky  * Copyright (c) 2010 Panasas, Inc.
51d9b99e5SHans Petter Selasky  * Copyright (c) 2013-2016 Mellanox Technologies, Ltd.
68d59ecb2SHans Petter Selasky  * All rights reserved.
78d59ecb2SHans Petter Selasky  *
88d59ecb2SHans Petter Selasky  * Redistribution and use in source and binary forms, with or without
98d59ecb2SHans Petter Selasky  * modification, are permitted provided that the following conditions
108d59ecb2SHans Petter Selasky  * are met:
118d59ecb2SHans Petter Selasky  * 1. Redistributions of source code must retain the above copyright
128d59ecb2SHans Petter Selasky  *    notice unmodified, this list of conditions, and the following
138d59ecb2SHans Petter Selasky  *    disclaimer.
148d59ecb2SHans Petter Selasky  * 2. Redistributions in binary form must reproduce the above copyright
158d59ecb2SHans Petter Selasky  *    notice, this list of conditions and the following disclaimer in the
168d59ecb2SHans Petter Selasky  *    documentation and/or other materials provided with the distribution.
178d59ecb2SHans Petter Selasky  *
188d59ecb2SHans Petter Selasky  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
198d59ecb2SHans Petter Selasky  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
208d59ecb2SHans Petter Selasky  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
218d59ecb2SHans Petter Selasky  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
228d59ecb2SHans Petter Selasky  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
238d59ecb2SHans Petter Selasky  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
248d59ecb2SHans Petter Selasky  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
258d59ecb2SHans Petter Selasky  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
268d59ecb2SHans Petter Selasky  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
278d59ecb2SHans Petter Selasky  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
288d59ecb2SHans Petter Selasky  *
298d59ecb2SHans Petter Selasky  * $FreeBSD$
308d59ecb2SHans Petter Selasky  */
31*2d0694b9SVladimir Kondratyev #ifndef	_LINUXKPI_LINUX_MODULEPARAM_H_
32*2d0694b9SVladimir Kondratyev #define	_LINUXKPI_LINUX_MODULEPARAM_H_
338d59ecb2SHans Petter Selasky 
341d9b99e5SHans Petter Selasky #include <sys/types.h>
351d9b99e5SHans Petter Selasky #include <sys/sysctl.h>
361d9b99e5SHans Petter Selasky 
378d59ecb2SHans Petter Selasky #include <linux/types.h>
388d59ecb2SHans Petter Selasky 
391d9b99e5SHans Petter Selasky #ifndef LINUXKPI_PARAM_PARENT
401d9b99e5SHans Petter Selasky #define	LINUXKPI_PARAM_PARENT	_compat_linuxkpi
411d9b99e5SHans Petter Selasky #endif
428d59ecb2SHans Petter Selasky 
431d9b99e5SHans Petter Selasky #ifndef LINUXKPI_PARAM_PREFIX
441d9b99e5SHans Petter Selasky #define	LINUXKPI_PARAM_PREFIX	/* empty prefix is the default */
451d9b99e5SHans Petter Selasky #endif
468d59ecb2SHans Petter Selasky 
4706ca64ecSHans Petter Selasky #ifndef LINUXKPI_PARAM_PERM
4806ca64ecSHans Petter Selasky #define	LINUXKPI_PARAM_PERM(perm) (((perm) & 0222) ? CTLFLAG_RWTUN : CTLFLAG_RDTUN)
4906ca64ecSHans Petter Selasky #endif
5006ca64ecSHans Petter Selasky 
511d9b99e5SHans Petter Selasky #define	LINUXKPI_PARAM_CONCAT_SUB(a,b,c,d) a##b##c##d
521d9b99e5SHans Petter Selasky #define	LINUXKPI_PARAM_CONCAT(...) LINUXKPI_PARAM_CONCAT_SUB(__VA_ARGS__)
531d9b99e5SHans Petter Selasky #define	LINUXKPI_PARAM_PASS(...) __VA_ARGS__
541d9b99e5SHans Petter Selasky #define	LINUXKPI_PARAM_DESC(name) LINUXKPI_PARAM_CONCAT(linuxkpi_,LINUXKPI_PARAM_PREFIX,name,_desc)
551d9b99e5SHans Petter Selasky #define	LINUXKPI_PARAM_NAME(name) LINUXKPI_PARAM_CONCAT(LINUXKPI_PARAM_PREFIX,name,,)
568d59ecb2SHans Petter Selasky 
5706ca64ecSHans Petter Selasky #define	LINUXKPI_PARAM_bool(name, var, perm)				\
580bb3dd30SHans Petter Selasky 	extern const char LINUXKPI_PARAM_DESC(name)[];			\
590bb3dd30SHans Petter Selasky 	LINUXKPI_PARAM_PASS(SYSCTL_BOOL(LINUXKPI_PARAM_PARENT, OID_AUTO,\
6006ca64ecSHans Petter Selasky 	LINUXKPI_PARAM_NAME(name), LINUXKPI_PARAM_PERM(perm), &(var), 0, \
610bb3dd30SHans Petter Selasky 	LINUXKPI_PARAM_DESC(name)))
620bb3dd30SHans Petter Selasky 
6306ca64ecSHans Petter Selasky #define	LINUXKPI_PARAM_byte(name, var, perm)				\
641d9b99e5SHans Petter Selasky 	extern const char LINUXKPI_PARAM_DESC(name)[];			\
651d9b99e5SHans Petter Selasky 	LINUXKPI_PARAM_PASS(SYSCTL_U8(LINUXKPI_PARAM_PARENT, OID_AUTO,	\
6606ca64ecSHans Petter Selasky 	LINUXKPI_PARAM_NAME(name), LINUXKPI_PARAM_PERM(perm), &(var), 0, \
671d9b99e5SHans Petter Selasky 	LINUXKPI_PARAM_DESC(name)))
688d59ecb2SHans Petter Selasky 
6906ca64ecSHans Petter Selasky #define	LINUXKPI_PARAM_short(name, var, perm)				\
701d9b99e5SHans Petter Selasky 	extern const char LINUXKPI_PARAM_DESC(name)[];			\
711d9b99e5SHans Petter Selasky 	LINUXKPI_PARAM_PASS(SYSCTL_S16(LINUXKPI_PARAM_PARENT, OID_AUTO,	\
7206ca64ecSHans Petter Selasky 	LINUXKPI_PARAM_NAME(name), LINUXKPI_PARAM_PERM(perm), &(var), 0, \
731d9b99e5SHans Petter Selasky 	LINUXKPI_PARAM_DESC(name)))
748d59ecb2SHans Petter Selasky 
7506ca64ecSHans Petter Selasky #define	LINUXKPI_PARAM_ushort(name, var, perm)				\
761d9b99e5SHans Petter Selasky 	extern const char LINUXKPI_PARAM_DESC(name)[];			\
771d9b99e5SHans Petter Selasky 	LINUXKPI_PARAM_PASS(SYSCTL_U16(LINUXKPI_PARAM_PARENT, OID_AUTO,	\
7806ca64ecSHans Petter Selasky 	LINUXKPI_PARAM_NAME(name), LINUXKPI_PARAM_PERM(perm), &(var), 0, \
791d9b99e5SHans Petter Selasky 	LINUXKPI_PARAM_DESC(name)))
808d59ecb2SHans Petter Selasky 
8106ca64ecSHans Petter Selasky #define	LINUXKPI_PARAM_int(name, var, perm)				\
821d9b99e5SHans Petter Selasky 	extern const char LINUXKPI_PARAM_DESC(name)[];			\
831d9b99e5SHans Petter Selasky 	LINUXKPI_PARAM_PASS(SYSCTL_INT(LINUXKPI_PARAM_PARENT, OID_AUTO,	\
8406ca64ecSHans Petter Selasky 	LINUXKPI_PARAM_NAME(name), LINUXKPI_PARAM_PERM(perm), &(var), 0,\
851d9b99e5SHans Petter Selasky 	LINUXKPI_PARAM_DESC(name)))
868d59ecb2SHans Petter Selasky 
8706ca64ecSHans Petter Selasky #define	LINUXKPI_PARAM_uint(name, var, perm)				\
881d9b99e5SHans Petter Selasky 	extern const char LINUXKPI_PARAM_DESC(name)[];			\
891d9b99e5SHans Petter Selasky 	LINUXKPI_PARAM_PASS(SYSCTL_UINT(LINUXKPI_PARAM_PARENT, OID_AUTO, \
9006ca64ecSHans Petter Selasky 	LINUXKPI_PARAM_NAME(name), LINUXKPI_PARAM_PERM(perm), &(var), 0, \
911d9b99e5SHans Petter Selasky 	LINUXKPI_PARAM_DESC(name)))
928d59ecb2SHans Petter Selasky 
9306ca64ecSHans Petter Selasky #define	LINUXKPI_PARAM_long(name, var, perm)				\
941d9b99e5SHans Petter Selasky 	extern const char LINUXKPI_PARAM_DESC(name)[];			\
951d9b99e5SHans Petter Selasky 	LINUXKPI_PARAM_PASS(SYSCTL_LONG(LINUXKPI_PARAM_PARENT, OID_AUTO, \
9606ca64ecSHans Petter Selasky 	LINUXKPI_PARAM_NAME(name), LINUXKPI_PARAM_PERM(perm), &(var), 0, \
971d9b99e5SHans Petter Selasky 	LINUXKPI_PARAM_DESC(name)))
981d9b99e5SHans Petter Selasky 
9906ca64ecSHans Petter Selasky #define	LINUXKPI_PARAM_ulong(name, var, perm)				\
1001d9b99e5SHans Petter Selasky 	extern const char LINUXKPI_PARAM_DESC(name)[];			\
1011d9b99e5SHans Petter Selasky 	LINUXKPI_PARAM_PASS(SYSCTL_ULONG(LINUXKPI_PARAM_PARENT, OID_AUTO, \
10206ca64ecSHans Petter Selasky 	LINUXKPI_PARAM_NAME(name), LINUXKPI_PARAM_PERM(perm), &(var), 0, \
1031d9b99e5SHans Petter Selasky 	LINUXKPI_PARAM_DESC(name)))
1041d9b99e5SHans Petter Selasky 
1052b503ba6SBjoern A. Zeeb #define	LINUXKPI_PARAM_charp(name, var, perm)				\
1062b503ba6SBjoern A. Zeeb 	extern const char LINUXKPI_PARAM_DESC(name)[];			\
1072b503ba6SBjoern A. Zeeb 	LINUXKPI_PARAM_PASS(SYSCTL_STRING(LINUXKPI_PARAM_PARENT, OID_AUTO, \
1082b503ba6SBjoern A. Zeeb 	LINUXKPI_PARAM_NAME(name), LINUXKPI_PARAM_PERM(perm), &(var), 0, \
1092b503ba6SBjoern A. Zeeb 	LINUXKPI_PARAM_DESC(name)))
1102b503ba6SBjoern A. Zeeb 
1111d9b99e5SHans Petter Selasky #define	module_param_string(name, str, len, perm)			\
1121d9b99e5SHans Petter Selasky 	extern const char LINUXKPI_PARAM_DESC(name)[];			\
1131d9b99e5SHans Petter Selasky 	LINUXKPI_PARAM_PASS(SYSCTL_STRING(LINUXKPI_PARAM_PARENT, OID_AUTO, \
11406ca64ecSHans Petter Selasky 	LINUXKPI_PARAM_NAME(name), LINUXKPI_PARAM_PERM(perm), (str), (len), \
1151d9b99e5SHans Petter Selasky 	LINUXKPI_PARAM_DESC(name)))
1168d59ecb2SHans Petter Selasky 
1178d59ecb2SHans Petter Selasky #define	module_param_named(name, var, type, mode)	\
11806ca64ecSHans Petter Selasky 	LINUXKPI_PARAM_##type(name, var, mode)
1198d59ecb2SHans Petter Selasky 
1208d59ecb2SHans Petter Selasky #define	module_param(var, type, mode)	\
12106ca64ecSHans Petter Selasky 	LINUXKPI_PARAM_##type(var, var, mode)
1228d59ecb2SHans Petter Selasky 
123707324edSHans Petter Selasky #define	module_param_named_unsafe(name, var, type, mode) \
12406ca64ecSHans Petter Selasky 	LINUXKPI_PARAM_##type(name, var, mode)
125707324edSHans Petter Selasky 
126707324edSHans Petter Selasky #define	module_param_unsafe(var, type, mode) \
12706ca64ecSHans Petter Selasky 	LINUXKPI_PARAM_##type(var, var, mode)
128707324edSHans Petter Selasky 
1291d9b99e5SHans Petter Selasky #define	module_param_array(var, type, addr_argc, mode)
1308d59ecb2SHans Petter Selasky 
1311d9b99e5SHans Petter Selasky #define	MODULE_PARM_DESC(name, desc) \
1321d9b99e5SHans Petter Selasky 	const char LINUXKPI_PARAM_DESC(name)[] = { desc }
1338d59ecb2SHans Petter Selasky 
13420789a72SHans Petter Selasky #define	kernel_param_lock(...) do {} while (0)
13520789a72SHans Petter Selasky #define	kernel_param_unlock(...) do {} while (0)
13620789a72SHans Petter Selasky 
1371d9b99e5SHans Petter Selasky SYSCTL_DECL(_compat_linuxkpi);
1388d59ecb2SHans Petter Selasky 
139*2d0694b9SVladimir Kondratyev #endif					/* _LINUXKPI_LINUX_MODULEPARAM_H_ */
140