Path: blob/master/arch/mips/sibyte/common/cfe_console.c
10820 views
#include <linux/init.h>1#include <linux/errno.h>2#include <linux/console.h>34#include <asm/sibyte/board.h>56#include <asm/fw/cfe/cfe_api.h>7#include <asm/fw/cfe/cfe_error.h>89extern int cfe_cons_handle;1011static void cfe_console_write(struct console *cons, const char *str,12unsigned int count)13{14int i, last, written;1516for (i=0, last=0; i<count; i++) {17if (!str[i])18/* XXXKW can/should this ever happen? */19return;20if (str[i] == '\n') {21do {22written = cfe_write(cfe_cons_handle, &str[last], i-last);23if (written < 0)24;25last += written;26} while (last < i);27while (cfe_write(cfe_cons_handle, "\r", 1) <= 0)28;29}30}31if (last != count) {32do {33written = cfe_write(cfe_cons_handle, &str[last], count-last);34if (written < 0)35;36last += written;37} while (last < count);38}3940}4142static int cfe_console_setup(struct console *cons, char *str)43{44char consdev[32];45/* XXXKW think about interaction with 'console=' cmdline arg */46/* If none of the console options are configured, the build will break. */47if (cfe_getenv("BOOT_CONSOLE", consdev, 32) >= 0) {48#ifdef CONFIG_SERIAL_SB1250_DUART49if (!strcmp(consdev, "uart0")) {50setleds("u0cn");51} else if (!strcmp(consdev, "uart1")) {52setleds("u1cn");53} else54#endif55#ifdef CONFIG_VGA_CONSOLE56if (!strcmp(consdev, "pcconsole0")) {57setleds("pccn");58} else59#endif60return -ENODEV;61}62return 0;63}6465static struct console sb1250_cfe_cons = {66.name = "cfe",67.write = cfe_console_write,68.setup = cfe_console_setup,69.flags = CON_PRINTBUFFER,70.index = -1,71};7273static int __init sb1250_cfe_console_init(void)74{75register_console(&sb1250_cfe_cons);76return 0;77}7879console_initcall(sb1250_cfe_console_init);808182