fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git] / include / linux / moduleparam.h
index 685eab9..4a189da 100644 (file)
 #ifdef MODULE
 #define MODULE_PARAM_PREFIX /* empty */
 #else
-#define MODULE_PARAM_PREFIX __stringify(KBUILD_MODNAME) "."
+#define MODULE_PARAM_PREFIX KBUILD_MODNAME "."
 #endif
 
+#ifdef MODULE
+#define ___module_cat(a,b) __mod_ ## a ## b
+#define __module_cat(a,b) ___module_cat(a,b)
+#define __MODULE_INFO(tag, name, info)                                   \
+static const char __module_cat(name,__LINE__)[]                                  \
+  __attribute_used__                                                     \
+  __attribute__((section(".modinfo"),unused)) = __stringify(tag) "=" info
+#else  /* !MODULE */
+#define __MODULE_INFO(tag, name, info)
+#endif
+#define __MODULE_PARM_TYPE(name, _type)                                          \
+  __MODULE_INFO(parmtype, name##type, #name ":" _type)
+
 struct kernel_param;
 
 /* Returns 0, or -errno.  arg is in kp->arg. */
@@ -50,6 +63,9 @@ struct kparam_array
    not there, read bits mean it's readable, write bits mean it's
    writable. */
 #define __module_param_call(prefix, name, set, get, arg, perm)         \
+       /* Default value instead of permissions? */                     \
+       static int __param_perm_check_##name __attribute__((unused)) =  \
+       BUILD_BUG_ON_ZERO((perm) < 0 || (perm) > 0777 || ((perm) & 2)); \
        static char __param_str_##name[] = prefix #name;                \
        static struct kernel_param const __param_##name                 \
        __attribute_used__                                              \
@@ -65,7 +81,7 @@ struct kparam_array
 #define module_param_named(name, value, type, perm)                       \
        param_check_##type(name, &(value));                                \
        module_param_call(name, param_set_##type, param_get_##type, &value, perm); \
-       __MODULE_INFO(parmtype, name##type, #name ":" #type)
+       __MODULE_PARM_TYPE(name, #type)
 
 #define module_param(name, type, perm)                         \
        module_param_named(name, name, type, perm)
@@ -76,7 +92,7 @@ struct kparam_array
                = { len, string };                                      \
        module_param_call(name, param_set_copystring, param_get_string, \
                   &__param_string_##name, perm);                       \
-       __MODULE_INFO(parmtype, name##type, #name ":string")
+       __MODULE_PARM_TYPE(name, "string")
 
 /* Called on module insert or kernel boot */
 extern int parse_args(const char *name,
@@ -138,7 +154,7 @@ extern int param_get_invbool(char *buffer, struct kernel_param *kp);
            sizeof(array[0]), array };                                  \
        module_param_call(name, param_array_set, param_array_get,       \
                          &__param_arr_##name, perm);                   \
-       __MODULE_INFO(parmtype, name##type, #name ":array of " #type)
+       __MODULE_PARM_TYPE(name, "array of " #type)
 
 #define module_param_array(name, type, nump, perm)             \
        module_param_array_named(name, name, type, nump, perm)
@@ -149,13 +165,6 @@ extern int param_array_get(char *buffer, struct kernel_param *kp);
 extern int param_set_copystring(const char *val, struct kernel_param *kp);
 extern int param_get_string(char *buffer, struct kernel_param *kp);
 
-int param_array(const char *name,
-               const char *val,
-               unsigned int min, unsigned int max,
-               void *elem, int elemsize,
-               int (*set)(const char *, struct kernel_param *kp),
-               int *num);
-
 /* for exporting parameters in /sys/parameters */
 
 struct module;