2014-12-27 16:42:08 +01:00
|
|
|
#ifndef _LINUX_MODULE_PARAMS_H
|
|
|
|
#define _LINUX_MODULE_PARAMS_H
|
|
|
|
/* (C) Copyright 2001, 2002 Rusty Russell IBM Corporation */
|
|
|
|
#include <linux/kernel.h>
|
2016-01-20 05:19:53 +01:00
|
|
|
/**
|
|
|
|
* module_param - typesafe helper for a module/cmdline parameter
|
|
|
|
* @value: the variable to alter, and exposed parameter name.
|
|
|
|
* @type: the type of the parameter
|
|
|
|
* @perm: visibility in sysfs.
|
|
|
|
*
|
|
|
|
* @value becomes the module parameter, or (prefixed by KBUILD_MODNAME and a
|
|
|
|
* ".") the kernel commandline parameter. Note that - is changed to _, so
|
|
|
|
* the user can use "foo-bar=1" even for variable "foo_bar".
|
|
|
|
*
|
|
|
|
* @perm is 0 if the the variable is not to appear in sysfs, or 0444
|
|
|
|
* for world-readable, 0644 for root-writable, etc. Note that if it
|
|
|
|
* is writable, you may need to use kernel_param_lock() around
|
|
|
|
* accesses (esp. charp, which can be kfreed when it changes).
|
|
|
|
*
|
|
|
|
* The @type is simply pasted to refer to a param_ops_##type and a
|
|
|
|
* param_check_##type: for convenience many standard types are provided but
|
|
|
|
* you can create your own by defining those variables.
|
|
|
|
*
|
|
|
|
* Standard types are:
|
|
|
|
* byte, short, ushort, int, uint, long, ulong
|
|
|
|
* charp: a character pointer
|
|
|
|
* bool: a bool, values 0/1, y/n, Y/N.
|
|
|
|
* invbool: the above, only sense-reversed (N = true).
|
|
|
|
*/
|
|
|
|
#define module_param(name, type, perm) \
|
|
|
|
module_param_named(name, name, type, perm)
|
2012-11-12 22:22:52 +01:00
|
|
|
|
2016-01-20 05:19:53 +01:00
|
|
|
/**
|
|
|
|
* module_param_unsafe - same as module_param but taints kernel
|
|
|
|
*/
|
|
|
|
#define module_param_unsafe(name, type, perm) \
|
|
|
|
module_param_named_unsafe(name, name, type, perm)
|
|
|
|
|
|
|
|
/**
|
|
|
|
* module_param_named - typesafe helper for a renamed module/cmdline parameter
|
|
|
|
* @name: a valid C identifier which is the parameter name.
|
|
|
|
* @value: the actual lvalue to alter.
|
|
|
|
* @type: the type of the parameter
|
|
|
|
* @perm: visibility in sysfs.
|
|
|
|
*
|
|
|
|
* Usually it's a good idea to have variable names and user-exposed names the
|
|
|
|
* same, but that's harder if the variable must be non-static or is inside a
|
|
|
|
* structure. This allows exposure under a different name.
|
|
|
|
*/
|
2012-11-12 22:22:52 +01:00
|
|
|
#define module_param_named(name, value, type, perm)
|
2016-01-20 05:19:53 +01:00
|
|
|
/**
|
|
|
|
* module_param_named_unsafe - same as module_param_named but taints kernel
|
|
|
|
*/
|
|
|
|
|
2014-12-27 16:42:08 +01:00
|
|
|
#define module_param_named_unsafe(name, value, type, perm)
|
|
|
|
|
2016-01-20 05:19:53 +01:00
|
|
|
#define MODULE_PARM_DESC(_parm, desc)
|
|
|
|
|
|
|
|
#ifdef CONFIG_SYSFS
|
|
|
|
extern void kernel_param_lock(struct module *mod);
|
|
|
|
extern void kernel_param_unlock(struct module *mod);
|
|
|
|
#else
|
|
|
|
static inline void kernel_param_lock(struct module *mod)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
static inline void kernel_param_unlock(struct module *mod)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
#endif
|
2014-12-27 16:42:08 +01:00
|
|
|
#endif
|