Annotation of sys/arch/alpha/stand/prom.c, Revision 1.1
1.1 ! nbrk 1: /* $OpenBSD: prom.c,v 1.5 1997/01/24 19:58:07 niklas Exp $ */
! 2: /* $NetBSD: prom.c,v 1.2 1996/11/25 16:18:16 cgd Exp $ */
! 3:
! 4: /*
! 5: * Mach Operating System
! 6: * Copyright (c) 1992 Carnegie Mellon University
! 7: * All Rights Reserved.
! 8: *
! 9: * Permission to use, copy, modify and distribute this software and its
! 10: * documentation is hereby granted, provided that both the copyright
! 11: * notice and this permission notice appear in all copies of the
! 12: * software, derivative works or modified versions, and any portions
! 13: * thereof, and that both notices appear in supporting documentation.
! 14: *
! 15: * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
! 16: * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
! 17: * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
! 18: *
! 19: * Carnegie Mellon requests users of this software to return to
! 20: *
! 21: * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
! 22: * School of Computer Science
! 23: * Carnegie Mellon University
! 24: * Pittsburgh PA 15213-3890
! 25: *
! 26: * any improvements or extensions that they make and grant Carnegie Mellon
! 27: * the rights to redistribute these changes.
! 28: */
! 29:
! 30: #include <sys/types.h>
! 31:
! 32: #include <machine/rpb.h>
! 33: #include <machine/prom.h>
! 34:
! 35: int console;
! 36:
! 37: void
! 38: init_prom_calls()
! 39: {
! 40: extern struct prom_vec prom_dispatch_v;
! 41: struct rpb *r;
! 42: struct crb *c;
! 43: char buf[4];
! 44:
! 45: r = (struct rpb *)HWRPB_ADDR;
! 46: c = (struct crb *)((u_int8_t *)r + r->rpb_crb_off);
! 47:
! 48: prom_dispatch_v.routine_arg = c->crb_v_dispatch;
! 49: prom_dispatch_v.routine = c->crb_v_dispatch->entry_va;
! 50:
! 51: /* Look for console tty. */
! 52: prom_getenv(PROM_E_TTY_DEV, buf, 4);
! 53: console = buf[0] - '0';
! 54: }
! 55:
! 56: int
! 57: getchar()
! 58: {
! 59: prom_return_t ret;
! 60:
! 61: for (;;) {
! 62: ret.bits = prom_dispatch(PROM_R_GETC, console);
! 63: if (ret.u.status == 0 || ret.u.status == 1)
! 64: return (ret.u.retval);
! 65: }
! 66: }
! 67:
! 68: void
! 69: putchar(c)
! 70: int c;
! 71: {
! 72: prom_return_t ret;
! 73: char cbuf;
! 74:
! 75: if (c == '\r' || c == '\n') {
! 76: cbuf = '\r';
! 77: do {
! 78: ret.bits = prom_dispatch(PROM_R_PUTS, console,
! 79: &cbuf, 1);
! 80: } while ((ret.u.retval & 1) == 0);
! 81: cbuf = '\n';
! 82: } else
! 83: cbuf = c;
! 84: do {
! 85: ret.bits = prom_dispatch(PROM_R_PUTS, console, &cbuf, 1);
! 86: } while ((ret.u.retval & 1) == 0);
! 87: }
! 88:
! 89: int
! 90: prom_getenv(id, buf, len)
! 91: int id, len;
! 92: char *buf;
! 93: {
! 94: prom_return_t ret;
! 95:
! 96: ret.bits = prom_dispatch(PROM_R_GETENV, id, buf, len-1);
! 97: if (ret.u.status & 0x4)
! 98: ret.u.retval = 0;
! 99: buf[ret.u.retval] = '\0';
! 100:
! 101: return (ret.u.retval);
! 102: }
! 103:
! 104: int
! 105: prom_open(dev, len)
! 106: char *dev;
! 107: int len;
! 108: {
! 109: prom_return_t ret;
! 110:
! 111: ret.bits = prom_dispatch(PROM_R_OPEN, dev, len);
! 112: if (ret.u.status & 0x4)
! 113: return (-1);
! 114: else
! 115: return (ret.u.retval);
! 116: }
CVSweb