moduleparam.h revision 255932
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_param_array(var, type, addr_argc, mode) \ 91 module_param_named(var, var, type, mode) 92 93#define MODULE_PARM_DESC(name, desc) 94 95static inline int 96param_set_byte(const char *val, struct kernel_param *kp) 97{ 98 99 return 0; 100} 101 102static inline int 103param_get_byte(char *buffer, struct kernel_param *kp) 104{ 105 106 return 0; 107} 108 109 110static inline int 111param_set_short(const char *val, struct kernel_param *kp) 112{ 113 114 return 0; 115} 116 117static inline int 118param_get_short(char *buffer, struct kernel_param *kp) 119{ 120 121 return 0; 122} 123 124 125static inline int 126param_set_ushort(const char *val, struct kernel_param *kp) 127{ 128 129 return 0; 130} 131 132static inline int 133param_get_ushort(char *buffer, struct kernel_param *kp) 134{ 135 136 return 0; 137} 138 139 140static inline int 141param_set_int(const char *val, struct kernel_param *kp) 142{ 143 144 return 0; 145} 146 147static inline int 148param_get_int(char *buffer, struct kernel_param *kp) 149{ 150 151 return 0; 152} 153 154 155static inline int 156param_set_uint(const char *val, struct kernel_param *kp) 157{ 158 159 return 0; 160} 161 162static inline int 163param_get_uint(char *buffer, struct kernel_param *kp) 164{ 165 166 return 0; 167} 168 169 170static inline int 171param_set_long(const char *val, struct kernel_param *kp) 172{ 173 174 return 0; 175} 176 177static inline int 178param_get_long(char *buffer, struct kernel_param *kp) 179{ 180 181 return 0; 182} 183 184 185static inline int 186param_set_ulong(const char *val, struct kernel_param *kp) 187{ 188 189 return 0; 190} 191 192static inline int 193param_get_ulong(char *buffer, struct kernel_param *kp) 194{ 195 196 return 0; 197} 198 199 200static inline int 201param_set_charp(const char *val, struct kernel_param *kp) 202{ 203 204 return 0; 205} 206 207static inline int 208param_get_charp(char *buffer, struct kernel_param *kp) 209{ 210 211 return 0; 212} 213 214 215static inline int 216param_set_bool(const char *val, struct kernel_param *kp) 217{ 218 219 return 0; 220} 221 222static inline int 223param_get_bool(char *buffer, struct kernel_param *kp) 224{ 225 226 return 0; 227} 228 229#endif /* _LINUX_MODULEPARAM_H_ */ 230