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