/[gxemul]/trunk/src/include/dec_prom.h
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Contents of /trunk/src/include/dec_prom.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4 - (show annotations)
Mon Oct 8 16:18:00 2007 UTC (16 years, 6 months ago) by dpavlin
File MIME type: text/plain
File size: 13820 byte(s)
++ trunk/HISTORY	(local)
$Id: HISTORY,v 1.707 2005/04/27 16:37:33 debug Exp $
20050408	Some minor updates to the wdc. Linux now doesn't complain
		anymore if a disk is non-present.
20050409	Various minor fixes (a bintrans bug, and some other things).
		The wdc seems to work with Playstation2 emulation, but there
		is a _long_ annoying delay when disks are detected.
		Fixing a really important bintrans bug (when devices and RAM
		are mixed within 4KB pages), which was triggered with
		NetBSD/playstation2 kernels.
20050410	Adding a dummy dev_ps2_ether (just so that NetBSD doesn't
		complain as much during bootup).
		Symbols starting with '$' are now ignored.
		Renaming dev_ps2_ohci.c to dev_ohci.c, etc.
20050411	Moving the bintrans-cache-isolation check from cpu_mips.c to
		cpu_mips_coproc.c. (I thought this would give a speedup, but
		it's not noticable.)
		Better playstation2 sbus interrupt code.
		Skip ahead many ticks if the count register is read manually.
		(This increases the speed of delay-loops that simply read
		the count register.)
20050412	Updates to the playstation2 timer/interrupt code.
		Some other minor updates.
20050413	NetBSD/cobalt runs from a disk image :-) including userland;
		updating the documentation on how to install NetBSD/cobalt
		using NetBSD/pmax (!).
		Some minor bintrans updates (no real speed improvement) and
		other minor updates (playstation2 now uses the -o options).
20050414	Adding a dummy x86 (and AMD64) mode.
20050415	Adding some (32-bit and 16-bit) x86 instructions.
		Adding some initial support for non-SCSI, non-IDE floppy
		images. (The x86 mode can boot from these, more or less.)
		Moving the devices/ and include/ directories to src/devices/
		and src/include/, respectively.
20050416	Continuing on the x86 stuff. (Adding pc_bios.c and some simple
		support for software interrupts in 16-bit mode.)
20050417	Ripping out most of the x86 instruction decoding stuff, trying
		to rewrite it in a cleaner way.
		Disabling some of the least working CPU families in the
		configure script (sparc, x86, alpha, hppa), so that they are
		not enabled by default.
20050418	Trying to fix the bug which caused problems when turning on
		and off bintrans interactively, by flushing the bintrans cache
		whenever bintrans is manually (re)enabled.
20050419	Adding the 'lswi' ppc instruction.
		Minor updates to the x86 instruction decoding.
20050420	Renaming x86 register name indices from R_xx to X86_R_xx (this
		makes building on Tru64 nicer).
20050422	Adding a check for duplicate MIPS TLB entries on tlbwr/tlbwi.
20050427	Adding screenshots to guestoses.html.
		Some minor fixes and testing for the next release.

==============  RELEASE 0.3.2  ==============


1 /* gxemul: $Id: dec_prom.h,v 1.5 2005/03/05 12:34:02 debug Exp $ */
2 #ifndef _PMAX_DEC_PROM_H_
3 #define _PMAX_DEC_PROM_H_
4
5 #ifndef __P
6 #define __P(x) x
7 #endif
8
9 #ifndef _NO_PROM_DEFINES
10 #define _NO_PROM_DEFINES
11 #endif
12
13 /* $NetBSD: dec_prom.h,v 1.17 2001/08/24 15:33:17 mhitch Exp $ */
14
15 /*
16 * Copyright (c) 1992, 1993
17 * The Regents of the University of California. All rights reserved.
18 *
19 * This code is derived from software contributed to Berkeley by
20 * Ralph Campbell.
21 *
22 * Redistribution and use in source and binary forms, with or without
23 * modification, are permitted provided that the following conditions
24 * are met:
25 * 1. Redistributions of source code must retain the above copyright
26 * notice, this list of conditions and the following disclaimer.
27 * 2. Redistributions in binary form must reproduce the above copyright
28 * notice, this list of conditions and the following disclaimer in the
29 * documentation and/or other materials provided with the distribution.
30 * 3. All advertising materials mentioning features or use of this software
31 * must display the following acknowledgement:
32 * This product includes software developed by the University of
33 * California, Berkeley and its contributors.
34 * 4. Neither the name of the University nor the names of its contributors
35 * may be used to endorse or promote products derived from this software
36 * without specific prior written permission.
37 *
38 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
39 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
40 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
41 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
42 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
43 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
44 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
45 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
46 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
47 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
48 * SUCH DAMAGE.
49 *
50 * @(#)dec_prom.h 8.1 (Berkeley) 6/10/93
51 *
52 * machMon.h --
53 *
54 * Structures, constants and defines for access to the pmax prom.
55 *
56 * Copyright (C) 1989 Digital Equipment Corporation.
57 * Permission to use, copy, modify, and distribute this software and
58 * its documentation for any purpose and without fee is hereby granted,
59 * provided that the above copyright notice appears in all copies.
60 * Digital Equipment Corporation makes no representations about the
61 * suitability of this software for any purpose. It is provided "as is"
62 * without express or implied warranty.
63 *
64 * from: Header: /sprite/src/kernel/mach/ds3100.md/RCS/machMon.h,
65 * v 9.3 90/02/20 14:34:07 shirriff Exp SPRITE (Berkeley)
66 */
67
68 /*
69 * This file was created based on information from the document
70 * "TURBOchannel Firmware Specification" (EK-TCAAD-FS-003)
71 * by Digital Equipment Corporation.
72 */
73
74 #ifndef _LOCORE
75 #include <sys/types.h>
76 /* #include <sys/cdefs.h> */
77
78 /*
79 * Programs loaded by the new PROMs pass the following arguments:
80 * a0 argc
81 * a1 argv
82 * a2 DEC_PROM_MAGIC
83 * a3 The callback vector defined below
84 */
85
86 #define DEC_PROM_MAGIC 0x30464354
87
88 /* typedef */ struct memmap {
89 uint32_t pagesize; /* system page size */ /* was type int in netbsd */
90 u_char bitmap[15360]; /* bit for each page indicating safe to use */
91 } memmap;
92
93 typedef struct {
94 int revision; /* hardware revision level */
95 int clk_period; /* clock period in nano seconds */
96 int slot_size; /* slot size in magabytes */
97 int io_timeout; /* I/O timeout in cycles */
98 int dma_range; /* DMA address range in megabytes */
99 int max_dma_burst; /* maximum DMA burst length */
100 int parity; /* true if system module supports T.C. parity */
101 int reserved[4];
102 } tcinfo;
103
104 typedef int jmp_buf[12];
105 typedef void (*psig_t)(int);
106
107 struct callback {
108 void *(*_memcpy) __P((void *s1, void *s2, int n)); /* 00 */
109 void *(*_memset) __P((void *s1, int c, int n)); /* 04 */
110 char *(*_strcat) __P((char *s1, char *s2)); /* 08 */
111 int (*_strcmp) __P((char *s1, char *s2)); /* 0c */
112 char *(*_strcpy) __P((char *s1, char *s2)); /* 10 */
113 int (*_strlen) __P((char *s1)); /* 14 */
114 char *(*_strncat) __P((char *s1, char *s2, int n)); /* 18 */
115 char *(*_strncpy) __P((char *s1, char *s2, int n)); /* 1c */
116 int (*_strncmp) __P((char *s1, char *s2, int n)); /* 20 */
117 int (*_getchar) __P((void)); /* 24 */
118 char *(*_gets) __P((char *s)); /* 28 */
119 int (*_puts) __P((char *s)); /* 2c */
120 int (*_printf) __P((char *fmt, ...)); /* 30 */
121 int (*_sprintf) __P((char *s, char *fmt, ...)); /* 34 */
122 int (*_io_poll) __P((void)); /* 38 */
123 long (*_strtol) __P((char *s, char **endptr, int base)); /* 3c */
124 psig_t (*_signal) __P((int sig, psig_t func)); /* 40 */
125 int (*_raise) __P((int sig)); /* 44 */
126 long (*_time) __P((long *tod)); /* 48 */
127 int (*_setjmp) __P((jmp_buf env)); /* 4c */
128 void (*_longjmp) __P((jmp_buf env, int value)); /* 50 */
129 int (*_bootinit) __P((char *fname)); /* 54 */
130 int (*_bootread) __P((int b, void *buffer, int n)); /* 58 */
131 int (*_bootwrite) __P((int b, void *buffer, int n)); /* 5c */
132 int (*_setenv) __P((char *name, char *value)); /* 60 */
133 char *(*_getenv) __P((char *name)); /* 64 */
134 int (*_unsetenv) __P((char *name)); /* 68 */
135 u_long (*_slot_address) __P((int sn)); /* 6c */
136 void (*_wbflush) __P((void)); /* 70 */
137 void (*_msdelay) __P((int delay)); /* 74 */
138 void (*_leds) __P((int value)); /* 78 */
139 void (*_clear_cache) __P((char *addr, int len)); /* 7c */
140 int (*_getsysid) __P((void)); /* 80 */
141 int (*_getbitmap) __P((struct memmap *map)); /* 84 */ /* gxemul: struct memmap */
142 int (*_disableintr) __P((int sn)); /* 88 */
143 int (*_enableintr) __P((int sn)); /* 8c */
144 int (*_testintr) __P((int sn)); /* 90 */
145 void *_reserved_data; /* 94 */
146 int (*_console_init) __P((void)); /* 98 */
147 void (*_halt) __P((int *v, int cnt)); /* 9c */
148 void (*_showfault) __P((void)); /* a0 */
149 tcinfo *(*_gettcinfo) __P((void)); /*XXX* bogus proto */ /* a4 */
150 int (*_execute_cmd) __P((char *cmd)); /* a8 */
151 void (*_rex) __P((char cmd)); /* ac */
152 /* b0 to d4 reserved */
153 };
154
155 extern const struct callback *callv;
156 extern const struct callback callvec;
157
158 #if defined(_STANDALONE) && !defined(_NO_PROM_DEFINES)
159 #define memcpy (*callv -> _memcpy)
160 #define memset (*callv -> _memset)
161 #define strcat (*callv -> _strcat)
162 #define strcmp (*callv -> _strcmp)
163 #define strcpy (*callv -> _strcpy)
164 #define strlen (*callv -> _strlen)
165 #define strncat (*callv -> _strncat)
166 #define strncpy (*callv -> _strncpy)
167 #define strncmp (*callv -> _strncmp)
168 #define getchar (*callv -> _getchar)
169 #define gets (*callv -> _gets)
170 #define puts (*callv -> _puts)
171 #define printf (*callv -> _printf)
172 #define sprintf (*callv -> _sprintf)
173 #define io_poll (*callv -> _io_poll)
174 #define strtol (*callv -> _strtol)
175 #define raise (*callv -> _raise)
176 #define time (*callv -> _time)
177 #define setjmp (*callv -> _setjmp)
178 #define longjmp (*callv -> _longjmp)
179 #define bootinit (*callv -> _bootinit)
180 #define bootread (*callv -> _bootread)
181 #define bootwrite (*callv -> _bootwrite)
182 #define setenv (*callv -> _setenv)
183 #define getenv (*callv -> _getenv)
184 #define unsetenv (*callv -> _unsetenv)
185 #define wbflush (*callv -> _wbflush)
186 #define msdelay (*callv -> _msdelay)
187 #define leds (*callv -> _leds)
188 #define clear_cache (*callv -> _clear_cache)
189 #define getsysid (*callv -> _getsysid)
190 #define getbitmap (*callv -> _getbitmap)
191 #define disableintr (*callv -> _disableintr)
192 #define enableintr (*callv -> _enableintr)
193 #define testintr (*callv -> _testintr)
194 #define console_init (*callv -> _console_init)
195 #define halt (*callv -> _halt)
196 #define showfault (*callv -> _showfault)
197 #define gettcinfo (*callv -> _gettcinfo)
198 #define execute_cmd (*callv -> _execute_cmd)
199 #define rex (*callv -> _rex)
200
201 #define bzero(dst, len) memset(dst, 0, len)
202 /* XXX make sure that no calls to bcopy overlap! */
203 #define bcopy(src, dst, len) memcpy(dst, src, len)
204 #endif
205
206 /*
207 * The prom routines use the following structure to hold strings.
208 */
209 typedef struct {
210 char *argPtr[16]; /* Pointers to the strings. */
211 char strings[256]; /* Buffer for the strings. */
212 char *end; /* Pointer to end of used buf. */
213 int num; /* Number of strings used. */
214 } MachStringTable;
215
216 #endif /* _LOCORE */
217
218 /*
219 * The prom has a jump table at the beginning of it to get to its
220 * functions.
221 */
222 #define DEC_PROM_JUMP_TABLE_ADDR 0xBFC00000
223
224 /*
225 * Each entry in the jump table is 8 bytes - 4 for the jump and 4 for a nop.
226 */
227 #define DEC_PROM_FUNC_ADDR(funcNum) (DEC_PROM_JUMP_TABLE_ADDR+((funcNum)*8))
228
229 /*
230 * The functions:
231 *
232 * DEC_PROM_RESET Run diags, check bootmode, reinit.
233 * DEC_PROM_EXEC Load new program image.
234 * DEC_PROM_RESTART Re-enter monitor command loop.
235 * DEC_PROM_REINIT Re-init monitor, then cmd loop.
236 * DEC_PROM_REBOOT Check bootmode, no config.
237 * DEC_PROM_AUTOBOOT Autoboot the system.
238 *
239 * The following routines access PROM saio routines and may be used by
240 * standalone programs that would like to use PROM I/O:
241 *
242 * DEC_PROM_OPEN Open a file.
243 * DEC_PROM_READ Read from a file.
244 * DEC_PROM_WRITE Write to a file.
245 * DEC_PROM_IOCTL Iocontrol on a file.
246 * DEC_PROM_CLOSE Close a file.
247 * DEC_PROM_LSEEK Seek on a file.
248 * DEC_PROM_GETCHAR Get character from console.
249 * DEC_PROM_PUTCHAR Put character on console.
250 * DEC_PROM_SHOWCHAR Show a char visibly.
251 * DEC_PROM_GETS gets with editing.
252 * DEC_PROM_PUTS Put string to console.
253 * DEC_PROM_PRINTF Kernel style printf to console.
254 *
255 * PROM protocol entry points:
256 *
257 * DEC_PROM_INITPROTO Initialize protocol.
258 * DEC_PROM_PROTOENABLE Enable protocol mode.
259 * DEC_PROM_PROTODISABLE Disable protocol mode.
260 * DEC_PROM_GETPKT Get protocol packet.
261 * DEC_PROM_PUTPKT Put protocol packet.
262 *
263 * The following are other prom routines:
264 * DEC_PROM_FLUSHCACHE Flush entire cache ().
265 * DEC_PROM_CLEARCACHE Clear I & D cache in range (addr, len).
266 * DEC_PROM_SAVEREGS Save registers in a buffer.
267 * DEC_PROM_LOADREGS Get register back from buffer.
268 * DEC_PROM_JUMPS8 Jump to address in s8.
269 * DEC_PROM_GETENV2 Gets a string from system environment.
270 * DEC_PROM_SETENV2 Sets a string in system environment.
271 * DEC_PROM_ATONUM Converts ascii string to number.
272 * DEC_PROM_STRCMP Compares strings (strcmp).
273 * DEC_PROM_STRLEN Length of string (strlen).
274 * DEC_PROM_STRCPY Copies string (strcpy).
275 * DEC_PROM_STRCAT Appends string (strcat).
276 * DEC_PROM_GETCMD Gets a command.
277 * DEC_PROM_GETNUMS Gets numbers.
278 * DEC_PROM_ARGPARSE Parses string to argc,argv.
279 * DEC_PROM_HELP Help on prom commands.
280 * DEC_PROM_DUMP Dumps memory.
281 * DEC_PROM_SETENV Sets a string in system environment.
282 * DEC_PROM_UNSETENV Unsets a string in system environment
283 * DEC_PROM_PRINTENV Prints system environment
284 * DEC_PROM_JUMP2S8 Jumps to s8
285 * DEC_PROM_ENABLE Performs prom enable command.
286 * DEC_PROM_DISABLE Performs prom disable command.
287 * DEC_PROM_ZEROB Zeros a system buffer.
288 * DEC_PROM_HALT Handler for halt interrupt.
289 * DEC_PROM_STARTCVAX 58xx VAX Diagnostic Supervisor support.
290 */
291 #define DEC_PROM_RESET DEC_PROM_FUNC_ADDR(0)
292 #define DEC_PROM_EXEC DEC_PROM_FUNC_ADDR(1)
293 #define DEC_PROM_RESTART DEC_PROM_FUNC_ADDR(2)
294 #define DEC_PROM_REINIT DEC_PROM_FUNC_ADDR(3)
295 #define DEC_PROM_REBOOT DEC_PROM_FUNC_ADDR(4)
296 #define DEC_PROM_AUTOBOOT DEC_PROM_FUNC_ADDR(5)
297 #define DEC_PROM_OPEN DEC_PROM_FUNC_ADDR(6)
298 #define DEC_PROM_READ DEC_PROM_FUNC_ADDR(7)
299 #define DEC_PROM_WRITE DEC_PROM_FUNC_ADDR(8)
300 #define DEC_PROM_IOCTL DEC_PROM_FUNC_ADDR(9)
301 #define DEC_PROM_CLOSE DEC_PROM_FUNC_ADDR(10)
302 #define DEC_PROM_LSEEK DEC_PROM_FUNC_ADDR(11)
303 #define DEC_PROM_GETCHAR DEC_PROM_FUNC_ADDR(12)
304 #define DEC_PROM_PUTCHAR DEC_PROM_FUNC_ADDR(13)
305 #define DEC_PROM_SHOWCHAR DEC_PROM_FUNC_ADDR(14)
306 #define DEC_PROM_GETS DEC_PROM_FUNC_ADDR(15)
307 #define DEC_PROM_PUTS DEC_PROM_FUNC_ADDR(16)
308 #define DEC_PROM_PRINTF DEC_PROM_FUNC_ADDR(17)
309 #define DEC_PROM_INITPROTO DEC_PROM_FUNC_ADDR(18)
310 #define DEC_PROM_PROTOENABLE DEC_PROM_FUNC_ADDR(19)
311 #define DEC_PROM_PROTODISABLE DEC_PROM_FUNC_ADDR(20)
312 #define DEC_PROM_GETPKT DEC_PROM_FUNC_ADDR(21)
313 #define DEC_PROM_PUTPKT DEC_PROM_FUNC_ADDR(22)
314 #define DEC_PROM_FLUSHCACHE DEC_PROM_FUNC_ADDR(28)
315 #define DEC_PROM_CLEARCACHE DEC_PROM_FUNC_ADDR(29)
316 #define DEC_PROM_SAVEREGS DEC_PROM_FUNC_ADDR(30)
317 #define DEC_PROM_LOADREGS DEC_PROM_FUNC_ADDR(31)
318 #define DEC_PROM_JUMPS8 DEC_PROM_FUNC_ADDR(32)
319 #define DEC_PROM_GETENV2 DEC_PROM_FUNC_ADDR(33)
320 #define DEC_PROM_SETENV2 DEC_PROM_FUNC_ADDR(34)
321 #define DEC_PROM_ATONUM DEC_PROM_FUNC_ADDR(35)
322 #define DEC_PROM_STRCMP DEC_PROM_FUNC_ADDR(36)
323 #define DEC_PROM_STRLEN DEC_PROM_FUNC_ADDR(37)
324 #define DEC_PROM_STRCPY DEC_PROM_FUNC_ADDR(38)
325 #define DEC_PROM_STRCAT DEC_PROM_FUNC_ADDR(39)
326 #define DEC_PROM_GETCMD DEC_PROM_FUNC_ADDR(40)
327 #define DEC_PROM_GETNUMS DEC_PROM_FUNC_ADDR(41)
328 #define DEC_PROM_ARGPARSE DEC_PROM_FUNC_ADDR(42)
329 #define DEC_PROM_HELP DEC_PROM_FUNC_ADDR(43)
330 #define DEC_PROM_DUMP DEC_PROM_FUNC_ADDR(44)
331 #define DEC_PROM_SETENV DEC_PROM_FUNC_ADDR(45)
332 #define DEC_PROM_UNSETENV DEC_PROM_FUNC_ADDR(46)
333 #define DEC_PROM_PRINTENV DEC_PROM_FUNC_ADDR(47)
334 #define DEC_PROM_JUMP2S8 DEC_PROM_FUNC_ADDR(48)
335 #define DEC_PROM_ENABLE DEC_PROM_FUNC_ADDR(49)
336 #define DEC_PROM_DISABLE DEC_PROM_FUNC_ADDR(50)
337 #define DEC_PROM_ZEROB DEC_PROM_FUNC_ADDR(51)
338 #define DEC_PROM_HALT DEC_PROM_FUNC_ADDR(54)
339 #define DEC_PROM_STARTCVAX DEC_PROM_FUNC_ADDR(97)
340
341 /*
342 * The nonvolatile ram has a flag to indicate it is usable.
343 */
344 #define MACH_USE_NON_VOLATILE ((char *)0xbd0000c0)
345 #define MACH_NON_VOLATILE_FLAG 0x02
346
347 #define DEC_REX_MAGIC 0x30464354 /* REX Magic number */
348
349 #endif /* !_PMAX_DEC_PROM_H_ */

  ViewVC Help
Powered by ViewVC 1.1.26