Skip to content

Commit 546970b

Browse files
committed
param: add kerneldoc to moduleparam.h
Also reorders the macros with the most common ones at the top. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Reviewed-by: Takashi Iwai <tiwai@suse.de> Tested-by: Phil Carmody <ext-phil.2.carmody@nokia.com>
1 parent 907b29e commit 546970b

File tree

1 file changed

+95
-26
lines changed

1 file changed

+95
-26
lines changed

include/linux/moduleparam.h

Lines changed: 95 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,62 @@ struct kparam_array
7171
void *elem;
7272
};
7373

74+
/**
75+
* module_param - typesafe helper for a module/cmdline parameter
76+
* @value: the variable to alter, and exposed parameter name.
77+
* @type: the type of the parameter
78+
* @perm: visibility in sysfs.
79+
*
80+
* @value becomes the module parameter, or (prefixed by KBUILD_MODNAME and a
81+
* ".") the kernel commandline parameter. Note that - is changed to _, so
82+
* the user can use "foo-bar=1" even for variable "foo_bar".
83+
*
84+
* @perm is 0 if the the variable is not to appear in sysfs, or 0444
85+
* for world-readable, 0644 for root-writable, etc. Note that if it
86+
* is writable, you may need to use kparam_block_sysfs_write() around
87+
* accesses (esp. charp, which can be kfreed when it changes).
88+
*
89+
* The @type is simply pasted to refer to a param_ops_##type and a
90+
* param_check_##type: for convenience many standard types are provided but
91+
* you can create your own by defining those variables.
92+
*
93+
* Standard types are:
94+
* byte, short, ushort, int, uint, long, ulong
95+
* charp: a character pointer
96+
* bool: a bool, values 0/1, y/n, Y/N.
97+
* invbool: the above, only sense-reversed (N = true).
98+
*/
99+
#define module_param(name, type, perm) \
100+
module_param_named(name, name, type, perm)
101+
102+
/**
103+
* module_param_named - typesafe helper for a renamed module/cmdline parameter
104+
* @name: a valid C identifier which is the parameter name.
105+
* @value: the actual lvalue to alter.
106+
* @type: the type of the parameter
107+
* @perm: visibility in sysfs.
108+
*
109+
* Usually it's a good idea to have variable names and user-exposed names the
110+
* same, but that's harder if the variable must be non-static or is inside a
111+
* structure. This allows exposure under a different name.
112+
*/
113+
#define module_param_named(name, value, type, perm) \
114+
param_check_##type(name, &(value)); \
115+
module_param_cb(name, &param_ops_##type, &value, perm); \
116+
__MODULE_PARM_TYPE(name, #type)
117+
118+
/**
119+
* module_param_cb - general callback for a module/cmdline parameter
120+
* @name: a valid C identifier which is the parameter name.
121+
* @ops: the set & get operations for this parameter.
122+
* @perm: visibility in sysfs.
123+
*
124+
* The ops can have NULL set or get functions.
125+
*/
126+
#define module_param_cb(name, ops, arg, perm) \
127+
__module_param_call(MODULE_PARAM_PREFIX, \
128+
name, ops, arg, __same_type(*(arg), bool), perm)
129+
74130
/* On alpha, ia64 and ppc64 relocations to global data cannot go into
75131
read-only sections (which is part of respective UNIX ABI on these
76132
platforms). So 'const' makes no sense and even causes compile failures
@@ -82,9 +138,7 @@ struct kparam_array
82138
#endif
83139

84140
/* This is the fundamental function for registering boot/module
85-
parameters. perm sets the visibility in sysfs: 000 means it's
86-
not there, read bits mean it's readable, write bits mean it's
87-
writable. */
141+
parameters. */
88142
#define __module_param_call(prefix, name, ops, arg, isbool, perm) \
89143
/* Default value instead of permissions? */ \
90144
static int __param_perm_check_##name __attribute__((unused)) = \
@@ -113,23 +167,6 @@ __check_old_set_param(int (*oldset)(const char *, struct kernel_param *))
113167
return 0;
114168
}
115169

116-
#define module_param_cb(name, ops, arg, perm) \
117-
__module_param_call(MODULE_PARAM_PREFIX, \
118-
name, ops, arg, __same_type(*(arg), bool), perm)
119-
120-
/*
121-
* Helper functions: type is byte, short, ushort, int, uint, long,
122-
* ulong, charp, bool or invbool, or XXX if you define param_ops_XXX
123-
* and param_check_XXX.
124-
*/
125-
#define module_param_named(name, value, type, perm) \
126-
param_check_##type(name, &(value)); \
127-
module_param_cb(name, &param_ops_##type, &value, perm); \
128-
__MODULE_PARM_TYPE(name, #type)
129-
130-
#define module_param(name, type, perm) \
131-
module_param_named(name, name, type, perm)
132-
133170
/**
134171
* kparam_block_sysfs_write - make sure a parameter isn't written via sysfs.
135172
* @name: the name of the parameter
@@ -191,7 +228,7 @@ static inline void __kernel_param_unlock(void)
191228
* core_param - define a historical core kernel parameter.
192229
* @name: the name of the cmdline and sysfs parameter (often the same as var)
193230
* @var: the variable
194-
* @type: the type (for param_set_##type and param_get_##type)
231+
* @type: the type of the parameter
195232
* @perm: visibility in sysfs
196233
*
197234
* core_param is just like module_param(), but cannot be modular and
@@ -205,7 +242,16 @@ static inline void __kernel_param_unlock(void)
205242
&var, __same_type(var, bool), perm)
206243
#endif /* !MODULE */
207244

208-
/* Actually copy string: maxlen param is usually sizeof(string). */
245+
/**
246+
* module_param_string - a char array parameter
247+
* @name: the name of the parameter
248+
* @string: the string variable
249+
* @len: the maximum length of the string, incl. terminator
250+
* @perm: visibility in sysfs.
251+
*
252+
* This actually copies the string when it's set (unlike type charp).
253+
* @len is usually just sizeof(string).
254+
*/
209255
#define module_param_string(name, string, len, perm) \
210256
static const struct kparam_string __param_string_##name \
211257
= { len, string }; \
@@ -294,7 +340,33 @@ extern int param_set_invbool(const char *val, const struct kernel_param *kp);
294340
extern int param_get_invbool(char *buffer, const struct kernel_param *kp);
295341
#define param_check_invbool(name, p) __param_check(name, p, bool)
296342

297-
/* Comma-separated array: *nump is set to number they actually specified. */
343+
/**
344+
* module_param_array - a parameter which is an array of some type
345+
* @name: the name of the array variable
346+
* @type: the type, as per module_param()
347+
* @nump: optional pointer filled in with the number written
348+
* @perm: visibility in sysfs
349+
*
350+
* Input and output are as comma-separated values. Commas inside values
351+
* don't work properly (eg. an array of charp).
352+
*
353+
* ARRAY_SIZE(@name) is used to determine the number of elements in the
354+
* array, so the definition must be visible.
355+
*/
356+
#define module_param_array(name, type, nump, perm) \
357+
module_param_array_named(name, name, type, nump, perm)
358+
359+
/**
360+
* module_param_array_named - renamed parameter which is an array of some type
361+
* @name: a valid C identifier which is the parameter name
362+
* @array: the name of the array variable
363+
* @type: the type, as per module_param()
364+
* @nump: optional pointer filled in with the number written
365+
* @perm: visibility in sysfs
366+
*
367+
* This exposes a different name than the actual variable name. See
368+
* module_param_named() for why this might be necessary.
369+
*/
298370
#define module_param_array_named(name, array, type, nump, perm) \
299371
static const struct kparam_array __param_arr_##name \
300372
= { ARRAY_SIZE(array), nump, &param_ops_##type, \
@@ -305,9 +377,6 @@ extern int param_get_invbool(char *buffer, const struct kernel_param *kp);
305377
__same_type(array[0], bool), perm); \
306378
__MODULE_PARM_TYPE(name, "array of " #type)
307379

308-
#define module_param_array(name, type, nump, perm) \
309-
module_param_array_named(name, name, type, nump, perm)
310-
311380
extern struct kernel_param_ops param_array_ops;
312381

313382
extern struct kernel_param_ops param_ops_string;

0 commit comments

Comments
 (0)