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