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 extern void mvme16x_cons_write(struct console *co, 16 const char *str, unsigned count); 17 18 asmlinkage void __init debug_cons_nputs(const char *s, unsigned n); 19 20 static void __ref debug_cons_write(struct console *c, 21 const char *s, unsigned n) 22 { 23 #if !(defined(CONFIG_SUN3) || defined(CONFIG_M68000) || \ 24 defined(CONFIG_COLDFIRE)) 25 if (MACH_IS_MVME16x) 26 mvme16x_cons_write(c, s, n); 27 else 28 debug_cons_nputs(s, n); 29 #endif 30 } 31 32 static struct console early_console_instance = { 33 .name = "debug", 34 .write = debug_cons_write, 35 .flags = CON_PRINTBUFFER | CON_BOOT, 36 .index = -1 37 }; 38 39 static int __init setup_early_printk(char *buf) 40 { 41 if (early_console || buf) 42 return 0; 43 44 early_console = &early_console_instance; 45 register_console(early_console); 46 47 return 0; 48 } 49 early_param("earlyprintk", setup_early_printk); 50 51 /* 52 * debug_cons_nputs() defined in arch/m68k/kernel/head.S cannot be called 53 * after init sections are discarded (for platforms that use it). 54 */ 55 #if !(defined(CONFIG_SUN3) || defined(CONFIG_M68000) || \ 56 defined(CONFIG_COLDFIRE)) 57 58 static int __init unregister_early_console(void) 59 { 60 if (!early_console || MACH_IS_MVME16x) 61 return 0; 62 63 return unregister_console(early_console); 64 } 65 late_initcall(unregister_early_console); 66 67 #endif 68