[S390] xpram module parameter parsing.
[powerpc.git] / drivers / s390 / block / xpram.c
index 4c1e56b..4cd879c 100644 (file)
@@ -71,11 +71,11 @@ static int xpram_devs;
 /*
  * Parameter parsing functions.
  */
-static int devs = XPRAM_DEVS;
-static unsigned int sizes[XPRAM_MAX_DEVS];
+static int __initdata devs = XPRAM_DEVS;
+static char __initdata *sizes[XPRAM_MAX_DEVS];
 
 module_param(devs, int, 0);
-module_param_array(sizes, int, NULL, 0);
+module_param_array(sizes, charp, NULL, 0);
 
 MODULE_PARM_DESC(devs, "number of devices (\"partitions\"), " \
                 "the default is " __MODULE_STRING(XPRAM_DEVS) "\n");
@@ -86,59 +86,6 @@ MODULE_PARM_DESC(sizes, "list of device (partition) sizes " \
                 "claimed by explicit sizes\n");
 MODULE_LICENSE("GPL");
 
-#ifndef MODULE
-/*
- * Parses the kernel parameters given in the kernel parameter line.
- * The expected format is
- *           <number_of_partitions>[","<partition_size>]*
- * where
- *           devices is a positive integer that initializes xpram_devs
- *           each size is a non-negative integer possibly followed by a
- *           magnitude (k,K,m,M,g,G), the list of sizes initialises
- *           xpram_sizes
- *
- * Arguments
- *           str: substring of kernel parameter line that contains xprams
- *                kernel parameters.
- *
- * Result    0 on success, -EINVAL else -- only for Version > 2.3
- *
- * Side effects
- *           the global variabls devs is set to the value of
- *           <number_of_partitions> and sizes[i] is set to the i-th
- *           partition size (if provided). A parsing error of a value
- *           results in this value being set to -EINVAL.
- */
-static int __init xpram_setup (char *str)
-{
-       char *cp;
-       int i;
-
-       devs = simple_strtoul(str, &cp, 10);
-       if (cp <= str || devs > XPRAM_MAX_DEVS)
-               return 0;
-       for (i = 0; (i < devs) && (*cp++ == ','); i++) {
-               sizes[i] = simple_strtoul(cp, &cp, 10);
-               if (*cp == 'g' || *cp == 'G') {
-                       sizes[i] <<= 20;
-                       cp++;
-               } else if (*cp == 'm' || *cp == 'M') {
-                       sizes[i] <<= 10;
-                       cp++;
-               } else if (*cp == 'k' || *cp == 'K')
-                       cp++;
-               while (isspace(*cp)) cp++;
-       }
-       if (*cp == ',' && i >= devs)
-               PRINT_WARN("partition sizes list has too many entries.\n");
-       else if (*cp != 0)
-               PRINT_WARN("ignored '%s' at end of parameter string.\n", cp);
-       return 1;
-}
-
-__setup("xpram_parts=", xpram_setup);
-#endif
-
 /*
  * Copy expanded memory page (4kB) into main memory                  
  * Arguments                                                         
@@ -374,7 +321,9 @@ static int __init xpram_setup_sizes(unsigned long pages)
        mem_needed = 0;
        mem_auto_no = 0;
        for (i = 0; i < xpram_devs; i++) {
-               xpram_sizes[i] = (sizes[i] + 3) & -4UL;
+               if (sizes[i])
+                       xpram_sizes[i] =
+                               (memparse(sizes[i], &sizes[i]) + 3) & -4UL;
                if (xpram_sizes[i])
                        mem_needed += xpram_sizes[i];
                else