early_printk.c (1600B)
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 15extern void mvme16x_cons_write(struct console *co, 16 const char *str, unsigned count); 17 18asmlinkage void __init debug_cons_nputs(const char *s, unsigned n); 19 20static 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 32static struct console early_console_instance = { 33 .name = "debug", 34 .write = debug_cons_write, 35 .flags = CON_PRINTBUFFER | CON_BOOT, 36 .index = -1 37}; 38 39static 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} 49early_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 58static 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} 65late_initcall(unregister_early_console); 66 67#endif