Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / arch / mips / fw / arc / cmdline.c
diff --git a/kernel/arch/mips/fw/arc/cmdline.c b/kernel/arch/mips/fw/arc/cmdline.c
new file mode 100644 (file)
index 0000000..c0122a1
--- /dev/null
@@ -0,0 +1,104 @@
+/*
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file "COPYING" in the main directory of this archive
+ * for more details.
+ *
+ * cmdline.c: Kernel command line creation using ARCS argc/argv.
+ *
+ * Copyright (C) 1996 David S. Miller (davem@davemloft.net)
+ */
+#include <linux/bug.h>
+#include <linux/init.h>
+#include <linux/kernel.h>
+#include <linux/string.h>
+
+#include <asm/sgialib.h>
+#include <asm/bootinfo.h>
+
+#undef DEBUG_CMDLINE
+
+static char *ignored[] = {
+       "ConsoleIn=",
+       "ConsoleOut=",
+       "SystemPartition=",
+       "OSLoader=",
+       "OSLoadPartition=",
+       "OSLoadFilename=",
+       "OSLoadOptions="
+};
+
+static char *used_arc[][2] = {
+       { "OSLoadPartition=", "root=" },
+       { "OSLoadOptions=", "" }
+};
+
+static char * __init move_firmware_args(char* cp)
+{
+       char *s;
+       int actr, i;
+
+       actr = 1; /* Always ignore argv[0] */
+
+       while (actr < prom_argc) {
+               for(i = 0; i < ARRAY_SIZE(used_arc); i++) {
+                       int len = strlen(used_arc[i][0]);
+
+                       if (!strncmp(prom_argv(actr), used_arc[i][0], len)) {
+                       /* Ok, we want it. First append the replacement... */
+                               strcat(cp, used_arc[i][1]);
+                               cp += strlen(used_arc[i][1]);
+                               /* ... and now the argument */
+                               s = strchr(prom_argv(actr), '=');
+                               if (s) {
+                                       s++;
+                                       strcpy(cp, s);
+                                       cp += strlen(s);
+                               }
+                               *cp++ = ' ';
+                               break;
+                       }
+               }
+               actr++;
+       }
+
+       return cp;
+}
+
+void __init prom_init_cmdline(void)
+{
+       char *cp;
+       int actr, i;
+
+       actr = 1; /* Always ignore argv[0] */
+
+       cp = arcs_cmdline;
+       /*
+        * Move ARC variables to the beginning to make sure they can be
+        * overridden by later arguments.
+        */
+       cp = move_firmware_args(cp);
+
+       while (actr < prom_argc) {
+               for (i = 0; i < ARRAY_SIZE(ignored); i++) {
+                       int len = strlen(ignored[i]);
+
+                       if (!strncmp(prom_argv(actr), ignored[i], len))
+                               goto pic_cont;
+               }
+               /* Ok, we want it. */
+               strcpy(cp, prom_argv(actr));
+               cp += strlen(prom_argv(actr));
+               *cp++ = ' ';
+
+       pic_cont:
+               actr++;
+       }
+
+       if (cp != arcs_cmdline)         /* get rid of trailing space */
+               --cp;
+       *cp = '\0';
+
+#ifdef DEBUG_CMDLINE
+       printk(KERN_DEBUG "prom cmdline: %s\n", arcs_cmdline);
+#endif
+}