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_ */ |