Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / arch / m68k / kernel / early_printk.c
diff --git a/kernel/arch/m68k/kernel/early_printk.c b/kernel/arch/m68k/kernel/early_printk.c
new file mode 100644 (file)
index 0000000..ff9708d
--- /dev/null
@@ -0,0 +1,67 @@
+/*
+ * 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.
+ *
+ * Copyright (c) 2014 Finn Thain
+ */
+
+#include <linux/kernel.h>
+#include <linux/console.h>
+#include <linux/init.h>
+#include <linux/string.h>
+#include <asm/setup.h>
+
+extern void mvme16x_cons_write(struct console *co,
+                              const char *str, unsigned count);
+
+asmlinkage void __init debug_cons_nputs(const char *s, unsigned n);
+
+static void __ref debug_cons_write(struct console *c,
+                                  const char *s, unsigned n)
+{
+#if !(defined(CONFIG_SUN3)   || defined(CONFIG_M68360) || \
+      defined(CONFIG_M68000) || defined(CONFIG_COLDFIRE))
+       if (MACH_IS_MVME16x)
+               mvme16x_cons_write(c, s, n);
+       else
+               debug_cons_nputs(s, n);
+#endif
+}
+
+static struct console early_console_instance = {
+       .name  = "debug",
+       .write = debug_cons_write,
+       .flags = CON_PRINTBUFFER | CON_BOOT,
+       .index = -1
+};
+
+static int __init setup_early_printk(char *buf)
+{
+       if (early_console || buf)
+               return 0;
+
+       early_console = &early_console_instance;
+       register_console(early_console);
+
+       return 0;
+}
+early_param("earlyprintk", setup_early_printk);
+
+/*
+ * debug_cons_nputs() defined in arch/m68k/kernel/head.S cannot be called
+ * after init sections are discarded (for platforms that use it).
+ */
+#if !(defined(CONFIG_SUN3)   || defined(CONFIG_M68360) || \
+      defined(CONFIG_M68000) || defined(CONFIG_COLDFIRE))
+
+static int __init unregister_early_console(void)
+{
+       if (!early_console || MACH_IS_MVME16x)
+               return 0;
+
+       return unregister_console(early_console);
+}
+late_initcall(unregister_early_console);
+
+#endif