linux/arch/arm/kernel/early_printk.c
<<
>>
Prefs
   1/*
   2 *  linux/arch/arm/kernel/early_printk.c
   3 *
   4 *  Copyright (C) 2009 Sascha Hauer <s.hauer@pengutronix.de>
   5 *
   6 * This program is free software; you can redistribute it and/or modify
   7 * it under the terms of the GNU General Public License version 2 as
   8 * published by the Free Software Foundation.
   9 */
  10
  11#include <linux/kernel.h>
  12#include <linux/console.h>
  13#include <linux/init.h>
  14
  15extern void printch(int);
  16
  17static void early_write(const char *s, unsigned n)
  18{
  19        while (n-- > 0) {
  20                if (*s == '\n')
  21                        printch('\r');
  22                printch(*s);
  23                s++;
  24        }
  25}
  26
  27static void early_console_write(struct console *con, const char *s, unsigned n)
  28{
  29        early_write(s, n);
  30}
  31
  32static struct console early_console = {
  33        .name =         "earlycon",
  34        .write =        early_console_write,
  35        .flags =        CON_PRINTBUFFER | CON_BOOT,
  36        .index =        -1,
  37};
  38
  39asmlinkage void early_printk(const char *fmt, ...)
  40{
  41        char buf[512];
  42        int n;
  43        va_list ap;
  44
  45        va_start(ap, fmt);
  46        n = vscnprintf(buf, sizeof(buf), fmt, ap);
  47        early_write(buf, n);
  48        va_end(ap);
  49}
  50
  51static int __init setup_early_printk(char *buf)
  52{
  53        register_console(&early_console);
  54        return 0;
  55}
  56
  57early_param("earlyprintk", setup_early_printk);
  58