Current Path : /sys/boot/ofw/libofw/ |
FreeBSD hs32.drive.ne.jp 9.1-RELEASE FreeBSD 9.1-RELEASE #1: Wed Jan 14 12:18:08 JST 2015 root@hs32.drive.ne.jp:/sys/amd64/compile/hs32 amd64 |
Current File : //sys/boot/ofw/libofw/ofw_console.c |
/* $NetBSD: prom.c,v 1.3 1997/09/06 14:03:58 drochner Exp $ */ /*- * Mach Operating System * Copyright (c) 1992 Carnegie Mellon University * All Rights Reserved. * * Permission to use, copy, modify and distribute this software and its * documentation is hereby granted, provided that both the copyright * notice and this permission notice appear in all copies of the * software, derivative works or modified versions, and any portions * thereof, and that both notices appear in supporting documentation. * * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. * * Carnegie Mellon requests users of this software to return to * * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU * School of Computer Science * Carnegie Mellon University * Pittsburgh PA 15213-3890 * * any improvements or extensions that they make and grant Carnegie Mellon * the rights to redistribute these changes. */ #include <sys/cdefs.h> __FBSDID("$FreeBSD: release/9.1.0/sys/boot/ofw/libofw/ofw_console.c 183198 2008-09-19 19:49:58Z sobomax $"); #include <sys/types.h> #include "bootstrap.h" #include "openfirm.h" static void ofw_cons_probe(struct console *cp); static int ofw_cons_init(int); void ofw_cons_putchar(int); int ofw_cons_getchar(void); int ofw_cons_poll(void); static ihandle_t stdin; static ihandle_t stdout; struct console ofwconsole = { "ofw", "Open Firmware console", 0, ofw_cons_probe, ofw_cons_init, ofw_cons_putchar, ofw_cons_getchar, ofw_cons_poll, }; static void ofw_cons_probe(struct console *cp) { OF_getprop(chosen, "stdin", &stdin, sizeof(stdin)); OF_getprop(chosen, "stdout", &stdout, sizeof(stdout)); cp->c_flags |= C_PRESENTIN|C_PRESENTOUT; } static int ofw_cons_init(int arg) { return 0; } void ofw_cons_putchar(int c) { char cbuf; if (c == '\n') { cbuf = '\r'; OF_write(stdout, &cbuf, 1); } cbuf = c; OF_write(stdout, &cbuf, 1); } static int saved_char = -1; int ofw_cons_getchar() { unsigned char ch = '\0'; int l; if (saved_char != -1) { l = saved_char; saved_char = -1; return l; } if (OF_read(stdin, &ch, 1) > 0) return (ch); return (-1); } int ofw_cons_poll() { unsigned char ch; if (saved_char != -1) return 1; if (OF_read(stdin, &ch, 1) > 0) { saved_char = ch; return 1; } return 0; }