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
|
/* $OpenBSD: ka650.h,v 1.8 2000/04/26 03:08:41 bjc Exp $ */
/* $NetBSD: ka650.h,v 1.6 1997/07/26 10:12:43 ragge Exp $ */
/*
* Copyright (c) 1988 The Regents of the University of California.
* All rights reserved.
*
* This code is derived from software contributed to Berkeley by
* Mt. Xinu.
*
* 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.
*
* @(#)ka650.h 7.5 (Berkeley) 6/28/90
*/
/*
*
* Definitions specific to the ka650 (uVAX 3600/3602) cpu card.
*/
/*
* CAER: Memory System Error Register (IPR 39)
*/
#define CAER_DAL 0x00000040 /* CDAL or level 2 cache data parity */
#define CAER_MCD 0x00000020 /* mcheck due to DAL parity error */
#define CAER_MCC 0x00000010 /* mcheck due to 1st lev cache parity */
#define CAER_DAT 0x00000002 /* data parity in 1st level cache */
#define CAER_TAG 0x00000001 /* tag parity in 1st level cache */
/*
* CADR: Cache Disable Register (IPR 37)
*/
#define CADR_STMASK 0x000000f0 /* 1st level cache state mask */
#define CADR_SEN2 0x00000080 /* 1st level cache set 2 enabled */
#define CADR_SEN1 0x00000040 /* 1st level cache set 1 enabled */
#define CADR_CENI 0x00000020 /* 1st level I-stream caching enabled */
#define CADR_CEND 0x00000010 /* 1st level D-stream caching enabled */
/*
* Internal State Info 2: (for mcheck recovery)
*/
#define IS2_VCR 0x00008000 /* VAX Can't Restart flag */
/*
* DMA System Error Register (merr_dser)
*/
#define DSER_QNXM 0x00000080 /* Q-22 Bus NXM */
#define DSER_QPE 0x00000020 /* Q-22 Bus parity Error */
#define DSER_MEM 0x00000010 /* Main mem err due to ext dev DMA */
#define DSER_LOST 0x00000008 /* Lost error: DSER <7,5,4,0> set */
#define DSER_NOGRANT 0x00000004 /* No Grant timeout on cpu demand R/W */
#define DSER_DNXM 0x00000001 /* DMA NXM */
#define DSER_CLEAR (DSER_QNXM | DSER_QPE | DSER_MEM | \
DSER_LOST | DSER_NOGRANT | DSER_DNXM)
#define DMASER_BITS \
"\20\20BHALT\17DCNEG\10QBNXM\6QBPE\5MEMERR\4LOSTERR\3NOGRANT\1DMANXM"
#ifndef _LOCORE
/*
* Local registers (in I/O space)
* This is done in disjoint sections. Map names are set in locore.s
* and they are mapped in routine configcpu()
*/
/*
* memory error & configuration registers
*/
struct ka650_merr {
u_long merr_scr; /* System Config Register */
u_long merr_dser; /* DMA System Error Register */
u_long merr_qbear; /* QBus Error Address Register */
u_long merr_dear; /* DMA Error Address Register */
u_long merr_qbmbr; /* Q Bus Map Base address Register */
u_long pad[59];
u_long merr_csr[16]; /* Main Memory Config Regs (16 banks) */
u_long merr_errstat; /* Main Memory Error Status */
u_long merr_cont; /* Main Memory Control */
};
#define KA650_MERR 0x20080000
/*
* Main Memory Error Status Register (merr_errstat)
*/
#define MEM_EMASK 0xe0000180 /* mask of all err bits */
#define MEM_RDS 0x80000000 /* uncorrectable main memory */
#define MEM_RDSHIGH 0x40000000 /* high rate RDS errors */
#define MEM_CRD 0x20000000 /* correctable main memory */
#define MEM_DMA 0x00000100 /* DMA read or write error */
#define MEM_CDAL 0x00000080 /* CDAL Parity error on write */
#define MEM_PAGE 0x1ffffe00 /* Offending Page Number */
#define MEM_PAGESHFT 9 /* Shift to normalize page number */
/*
* Main Memory Control & Diag Status Reg (merr_cont)
*/
#define MEM_CRDINT 0x00001000 /* CRD interrupts enabled */
#define MEM_REFRESH 0x00000800 /* Forced memory refresh */
#define MEM_ERRDIS 0x00000400 /* error detect disable */
#define MEM_DIAG 0x00000080 /* Diagnostics mode */
#define MEM_CHECK 0x0000007f /* check bits for diagnostic mode */
/*
* Main Memory Config Regs (merr_csr[0-15])
*/
#define MEM_BNKENBLE 0x80000000 /* Bank Enable */
#define MEM_BNKNUM 0x03c00000 /* Physical map Bank number */
#define MEM_BNKUSAGE 0x00000003 /* Bank Usage */
/*
* Cache Control & Boot/Diag registers
*/
struct ka650_cbd {
u_char cbd_cacr; /* Low byte: Cache Enable & Parity Err detect */
u_char cbd_cdf1; /* Cache diagnostic field (unused) */
u_char cbd_cdf2; /* Cache diagnostic field (unused) */
u_char pad;
u_long cbd_bdr; /* Boot & Diagnostic Register (unused) */
};
#define KA650_CBD 0x20084000
/*
* CACR: Cache Control Register (2nd level cache) (cbd_cacr)
*/
#define CACR_CEN 0x00000010 /* Cache enable */
#define CACR_CPE 0x00000020 /* Cache Parity Error */
/*
* System Support Chip (SSC) registers
*/
struct ka650_ssc {
u_long ssc_sscbr; /* SSC Base Addr Register */
u_long pad1[3];
u_long ssc_ssccr; /* SSC Configuration Register */
u_long pad2[3];
u_long ssc_cbtcr; /* CDAL Bus Timeout Control Register */
u_long pad3[55];
u_long ssc_tcr0; /* timer control reg 0 */
u_long ssc_tir0; /* timer interval reg 0 */
u_long ssc_tnir0; /* timer next interval reg 0 */
u_long ssc_tivr0; /* timer interrupt vector reg 0 */
u_long ssc_tcr1; /* timer control reg 1 */
u_long ssc_tir1; /* timer interval reg 1 */
u_long ssc_tnir1; /* timer next interval reg 1 */
u_long ssc_tivr1; /* timer interrupt vector reg 1 */
u_long pad4[184];
u_char ssc_cpmbx; /* Console Program Mail Box: Lang & Hact */
u_char ssc_terminfo; /* TTY info: Video Dev, MCS, CRT & ROM flags */
u_char ssc_keyboard; /* Keyboard code */
};
#define KA650_SSC 0x20140000
/*
* CBTCR: CDAL Bus Timeout Control Register (ssc_cbtcr)
*/
#define CBTCR_BTO 0x80000000 /* r/w unimp IPR or unack intr */
#define CBTCR_RWT 0x40000000 /* CDAL Bus Timeout on CPU or DMA */
/*
* TCR0/TCR1: Programable Timer Control Registers (ssc_tcr[01])
* (The rest of the bits are the same as in the standard VAX
* Interval timer and are defined in clock.h)
*/
#define TCR_STP 0x00000004 /* Stop after time-out */
/*
* Flags for Console Program Mail Box
*/
#define CPMB650_HALTACT 0x03 /* Field for halt action */
#define CPMB650_RESTART 0x01 /* Restart */
#define CPMB650_REBOOT 0x02 /* Reboot */
#define CPMB650_HALT 0x03 /* Halt */
#define CPMB650_BIP 0x04 /* Bootstrap in progress */
#define CPMB650_RIP 0x08 /* Restart in progress */
#define CPMB650_DOTHIS 0x30 /* Execute sommand */
#define CPMB650_LANG 0xf0 /* Language field */
/*
* Inter Processor Communication Register
* To determine if memory error was from QBUS device DMA (as opposed to cpu).
*/
struct ka650_ipcr {
u_long pad[80];
u_short ipcr0; /* InterProcessor Comm Reg for arbiter */
};
#define KA650_IPCR 0x20001e00
#endif _LOCORE
/*
* Physical start address of the Qbus memory.
* The q-bus memory size is 4 meg.
* Physical start address of the I/O space (where the 8Kbyte I/O page is).
*/
#define KA650_QMEM 0x30000000
#define KA650_QMEMSIZE (512*8192)
#define KA650_QDEVADDR 0x20000000
/*
* Mapping info for Cache Entries, including
* Size (in bytes) of 2nd Level Cache for cache flush operation
*/
#define KA650_CACHE 0x10000000
#define KA650_CACHESIZE (64*1024)
/*
* Useful ROM addresses
*/
#define KA650ROM_SIDEX 0x20060004 /* system ID extension */
#define KA650ROM_GETC 0x20060008 /* (jsb) get character from console */
#define KA650ROM_PUTS 0x2006000c /* (jsb) put string to console */
#define KA650ROM_GETS 0x20060010 /* (jsb) read string with prompt */
#define KA650_CONSTYPE 0x20140401 /* byte at which console type resides */
/*
* Some useful macros
*/
#define GETCPUTYPE(x) ((x >> 24) & 0xff)
#define GETSYSSUBT(x) ((x >> 8) & 0xff)
#define GETFRMREV(x) ((x >> 16) & 0xff)
#define GETCODREV(x) (x & 0xff)
|