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