1 /*- 2 * Copyright (c) 2010 Isilon Systems, Inc. 3 * Copyright (c) 2010 iX Systems, Inc. 4 * Copyright (c) 2010 Panasas, Inc. 5 * Copyright (c) 2013, 2014 Mellanox Technologies, Ltd. 6 * Copyright (c) 2017 François Tigeot <ftigeot@wolfpond.org> 7 * All rights reserved. 8 * 9 * Redistribution and use in source and binary forms, with or without 10 * modification, are permitted provided that the following conditions 11 * are met: 12 * 1. Redistributions of source code must retain the above copyright 13 * notice unmodified, this list of conditions, and the following 14 * disclaimer. 15 * 2. Redistributions in binary form must reproduce the above copyright 16 * notice, this list of conditions and the following disclaimer in the 17 * documentation and/or other materials provided with the distribution. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 20 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 21 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 22 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 23 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 24 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 28 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 */ 30 31 #ifndef _LINUX_MODULEPARAM_H_ 32 #define _LINUX_MODULEPARAM_H_ 33 34 #include <linux/init.h> 35 #include <linux/stringify.h> 36 #include <linux/kernel.h> 37 38 /* 39 * These are presently not hooked up to anything. In linux the parameters 40 * can be set when modules are loaded. On FreeBSD these could be mapped 41 * to kenv in the future. 42 */ 43 struct kernel_param; 44 45 typedef int (*param_set_fn)(const char *val, struct kernel_param *kp); 46 typedef int (*param_get_fn)(char *buffer, struct kernel_param *kp); 47 48 struct kernel_param { 49 const char *name; 50 u16 perm; 51 u16 flags; 52 param_set_fn set; 53 param_get_fn get; 54 union { 55 void *arg; 56 struct kparam_string *str; 57 struct kparam_array *arr; 58 } un; 59 }; 60 61 #define KPARAM_ISBOOL 2 62 63 struct kparam_string { 64 unsigned int maxlen; 65 char *string; 66 }; 67 68 struct kparam_array 69 { 70 unsigned int max; 71 unsigned int *num; 72 param_set_fn set; 73 param_get_fn get; 74 unsigned int elemsize; 75 void *elem; 76 }; 77 78 static inline void 79 param_sysinit(struct kernel_param *param) 80 { 81 } 82 83 #define module_param_call(name, set, get, arg, perm) \ 84 static struct kernel_param __param_##name = \ 85 { #name, perm, 0, set, get, { arg } }; \ 86 SYSINIT(name##_param_sysinit, SI_SUB_DRIVERS, SI_ORDER_FIRST, \ 87 param_sysinit, &__param_##name); 88 89 #define module_param_string(name, string, len, perm) 90 91 #define module_param_named(name, var, type, mode) \ 92 module_param_call(name, param_set_##type, param_get_##type, &var, mode) 93 94 #define module_param_named_unsafe(name, var, type, mode) \ 95 module_param_call(name, param_set_##type, param_get_##type, &var, mode) 96 97 #define module_param(var, type, mode) \ 98 module_param_named(var, var, type, mode) 99 100 #define module_param_array(var, type, addr_argc, mode) \ 101 module_param_named(var, var, type, mode) 102 103 #define module_param_unsafe(name, type, perm) 104 105 #define MODULE_PARM_DESC(name, desc) 106 107 static inline int 108 param_set_byte(const char *val, struct kernel_param *kp) 109 { 110 111 return 0; 112 } 113 114 static inline int 115 param_get_byte(char *buffer, struct kernel_param *kp) 116 { 117 118 return 0; 119 } 120 121 122 static inline int 123 param_set_short(const char *val, struct kernel_param *kp) 124 { 125 126 return 0; 127 } 128 129 static inline int 130 param_get_short(char *buffer, struct kernel_param *kp) 131 { 132 133 return 0; 134 } 135 136 137 static inline int 138 param_set_ushort(const char *val, struct kernel_param *kp) 139 { 140 141 return 0; 142 } 143 144 static inline int 145 param_get_ushort(char *buffer, struct kernel_param *kp) 146 { 147 148 return 0; 149 } 150 151 152 static inline int 153 param_set_int(const char *val, struct kernel_param *kp) 154 { 155 156 return 0; 157 } 158 159 static inline int 160 param_get_int(char *buffer, struct kernel_param *kp) 161 { 162 163 return 0; 164 } 165 166 167 static inline int 168 param_set_uint(const char *val, struct kernel_param *kp) 169 { 170 171 return 0; 172 } 173 174 static inline int 175 param_get_uint(char *buffer, struct kernel_param *kp) 176 { 177 178 return 0; 179 } 180 181 182 static inline int 183 param_set_long(const char *val, struct kernel_param *kp) 184 { 185 186 return 0; 187 } 188 189 static inline int 190 param_get_long(char *buffer, struct kernel_param *kp) 191 { 192 193 return 0; 194 } 195 196 197 static inline int 198 param_set_ulong(const char *val, struct kernel_param *kp) 199 { 200 201 return 0; 202 } 203 204 static inline int 205 param_get_ulong(char *buffer, struct kernel_param *kp) 206 { 207 208 return 0; 209 } 210 211 212 static inline int 213 param_set_charp(const char *val, struct kernel_param *kp) 214 { 215 216 return 0; 217 } 218 219 static inline int 220 param_get_charp(char *buffer, struct kernel_param *kp) 221 { 222 223 return 0; 224 } 225 226 227 static inline int 228 param_set_bool(const char *val, struct kernel_param *kp) 229 { 230 231 return 0; 232 } 233 234 static inline int 235 param_get_bool(char *buffer, struct kernel_param *kp) 236 { 237 238 return 0; 239 } 240 241 #endif /* _LINUX_MODULEPARAM_H_ */ 242