1 /* $NetBSD: prom.h,v 1.12 2000/06/08 03:10:06 thorpej Exp $ */ 2 3 /* 4 * Copyright (c) 1994, 1995, 1996 Carnegie-Mellon University. 5 * All rights reserved. 6 * 7 * Author: Keith Bostic, Chris G. Demetriou 8 * 9 * Permission to use, copy, modify and distribute this software and 10 * its 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 17 * FOR 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 the 27 * rights to redistribute these changes. 28 */ 29 30 #ifndef ASSEMBLER 31 struct prom_vec { 32 u_int64_t routine; 33 void *routine_arg; 34 }; 35 36 /* The return value from a prom call. */ 37 typedef union { 38 struct { 39 u_int64_t 40 retval : 32, /* return value. */ 41 unit : 8, 42 mbz : 8, 43 error : 13, 44 status : 3; 45 } u; 46 u_int64_t bits; 47 } prom_return_t; 48 49 #ifdef _STANDALONE 50 int getchar(void); 51 void putchar(int); 52 #endif 53 54 void prom_halt(int) __attribute__((__noreturn__)); 55 int prom_getenv(int, char *, int); 56 57 void hwrpb_primary_init(void); 58 void hwrpb_restart_setup(void); 59 #endif 60 61 /* Prom operation values. */ 62 #define PROM_R_CLOSE 0x11 63 #define PROM_R_GETC 0x01 64 #define PROM_R_GETENV 0x22 65 #define PROM_R_OPEN 0x10 66 #define PROM_R_PUTS 0x02 67 #define PROM_R_READ 0x13 68 #define PROM_R_WRITE 0x14 69 #define PROM_R_IOCTL 0x12 70 71 /* Prom IOCTL operation subcodes */ 72 #define PROM_I_SKIP2IRG 1 73 #define PROM_I_SKIP2MARK 2 74 #define PROM_I_REWIND 3 75 #define PROM_I_WRITEMARK 4 76 77 /* Environment variable values. */ 78 #define PROM_E_BOOTED_DEV 0x4 79 #define PROM_E_BOOTED_FILE 0x6 80 #define PROM_E_BOOTED_OSFLAGS 0x8 81 #define PROM_E_TTY_DEV 0xf 82 #define PROM_E_SCSIID 0x42 83 #define PROM_E_SCSIFAST 0x43 84 85 #if defined(_STANDALONE) || defined(ENABLEPROM) 86 /* 87 * These can't be called from the kernel without great care. 88 * 89 * There have to be stub routines to do the copying that ensures that the 90 * PROM doesn't get called with an address larger than 32 bits. Calls that 91 * either don't need to copy anything, or don't need the copy because it's 92 * already being done elsewhere, are defined here. 93 */ 94 #define prom_open(dev, len) \ 95 prom_dispatch(PROM_R_OPEN, (dev), (len), 0, 0) 96 #define prom_close(chan) \ 97 prom_dispatch(PROM_R_CLOSE, chan, 0, 0, 0) 98 #define prom_read(chan, len, buf, blkno) \ 99 prom_dispatch(PROM_R_READ, chan, len, (u_int64_t)buf, blkno) 100 #define prom_write(chan, len, buf, blkno) \ 101 prom_dispatch(PROM_R_WRITE, chan, len, (u_int64_t)buf, blkno) 102 #define prom_ioctl(chan, op, count) \ 103 prom_dispatch(PROM_R_IOCTL, chan, op, (int64_t)count, 0, 0) 104 #define prom_putstr(chan, str, len) \ 105 prom_dispatch(PROM_R_PUTS, chan, (u_int64_t)str, len, 0) 106 #define prom_getc(chan) \ 107 prom_dispatch(PROM_R_GETC, chan, 0, 0, 0) 108 #define prom_getenv_disp(id, buf, len) \ 109 prom_dispatch(PROM_R_GETENV, id, (u_int64_t)buf, len, 0) 110 #endif 111 112 #ifndef ASSEMBLER 113 #ifdef _KERNEL 114 int prom_enter(void); 115 void prom_leave(int); 116 117 void promcnputc(dev_t, int); 118 int promcngetc(dev_t); 119 int promcnlookc(dev_t, char *); 120 121 u_int64_t prom_dispatch(u_int64_t, u_int64_t, u_int64_t, u_int64_t, 122 u_int64_t); 123 #endif /* _KERNEL */ 124 #endif /* ASSEMBLER */ 125