linux/arch/mips/sibyte/common/cfe_console.c
<<
>>
Prefs
   1#include <linux/init.h>
   2#include <linux/errno.h>
   3#include <linux/console.h>
   4
   5#include <asm/sibyte/board.h>
   6
   7#include <asm/fw/cfe/cfe_api.h>
   8#include <asm/fw/cfe/cfe_error.h>
   9
  10extern int cfe_cons_handle;
  11
  12static void cfe_console_write(struct console *cons, const char *str,
  13                       unsigned int count)
  14{
  15        int i, last, written;
  16
  17        for (i=0, last=0; i<count; i++) {
  18                if (!str[i])
  19                        /* XXXKW can/should this ever happen? */
  20                        return;
  21                if (str[i] == '\n') {
  22                        do {
  23                                written = cfe_write(cfe_cons_handle, &str[last], i-last);
  24                                if (written < 0)
  25                                        ;
  26                                last += written;
  27                        } while (last < i);
  28                        while (cfe_write(cfe_cons_handle, "\r", 1) <= 0)
  29                                ;
  30                }
  31        }
  32        if (last != count) {
  33                do {
  34                        written = cfe_write(cfe_cons_handle, &str[last], count-last);
  35                        if (written < 0)
  36                                ;
  37                        last += written;
  38                } while (last < count);
  39        }
  40
  41}
  42
  43static int cfe_console_setup(struct console *cons, char *str)
  44{
  45        char consdev[32];
  46        /* XXXKW think about interaction with 'console=' cmdline arg */
  47        /* If none of the console options are configured, the build will break. */
  48        if (cfe_getenv("BOOT_CONSOLE", consdev, 32) >= 0) {
  49#ifdef CONFIG_SERIAL_SB1250_DUART
  50                if (!strcmp(consdev, "uart0")) {
  51                        setleds("u0cn");
  52                } else if (!strcmp(consdev, "uart1")) {
  53                        setleds("u1cn");
  54                } else
  55#endif
  56#ifdef CONFIG_VGA_CONSOLE
  57                       if (!strcmp(consdev, "pcconsole0")) {
  58                                setleds("pccn");
  59                } else
  60#endif
  61                        return -ENODEV;
  62        }
  63        return 0;
  64}
  65
  66static struct console sb1250_cfe_cons = {
  67        .name           = "cfe",
  68        .write          = cfe_console_write,
  69        .setup          = cfe_console_setup,
  70        .flags          = CON_PRINTBUFFER,
  71        .index          = -1,
  72};
  73
  74static int __init sb1250_cfe_console_init(void)
  75{
  76        register_console(&sb1250_cfe_cons);
  77        return 0;
  78}
  79
  80console_initcall(sb1250_cfe_console_init);
  81