1 /* 2 * This file is subject to the terms and conditions of the GNU General Public 3 * License. See the file "COPYING" in the main directory of this archive 4 * for more details. 5 * 6 * Copyright (c) 2014 Finn Thain 7 */ 8 9 #include <linux/kernel.h> 10 #include <linux/console.h> 11 #include <linux/init.h> 12 #include <linux/string.h> 13 #include <asm/setup.h> 14 15 16 #include "../mvme147/mvme147.h" 17 #include "../mvme16x/mvme16x.h" 18 19 asmlinkage void __init debug_cons_nputs(const char *s, unsigned n); 20 21 static void __ref debug_cons_write(struct console *c, 22 const char *s, unsigned n) 23 { 24 #if !(defined(CONFIG_SUN3) || defined(CONFIG_M68000) || \ 25 defined(CONFIG_COLDFIRE)) 26 if (MACH_IS_MVME147) 27 mvme147_scc_write(c, s, n); 28 else if (MACH_IS_MVME16x) 29 mvme16x_cons_write(c, s, n); 30 else 31 debug_cons_nputs(s, n); 32 #endif 33 } 34 35 static struct console early_console_instance = { 36 .name = "debug", 37 .write = debug_cons_write, 38 .flags = CON_PRINTBUFFER | CON_BOOT, 39 .index = -1 40 }; 41 42 static int __init setup_early_printk(char *buf) 43 { 44 if (early_console || buf) 45 return 0; 46 47 early_console = &early_console_instance; 48 register_console(early_console); 49 50 return 0; 51 } 52 early_param("earlyprintk", setup_early_printk); 53 54 /* 55 * debug_cons_nputs() defined in arch/m68k/kernel/head.S cannot be called 56 * after init sections are discarded (for platforms that use it). 57 */ 58 #if !(defined(CONFIG_SUN3) || defined(CONFIG_M68000) || \ 59 defined(CONFIG_COLDFIRE)) 60 61 static int __init unregister_early_console(void) 62 { 63 if (!early_console || MACH_IS_MVME16x) 64 return 0; 65 66 return unregister_console(early_console); 67 } 68 late_initcall(unregister_early_console); 69 70 #endif 71