rpb.h revision 1.1 1 1.1 cgd /* $NetBSD: rpb.h,v 1.1 1995/02/13 23:07:54 cgd Exp $ */
2 1.1 cgd
3 1.1 cgd /*
4 1.1 cgd * Copyright (c) 1994, 1995 Carnegie-Mellon University.
5 1.1 cgd * All rights reserved.
6 1.1 cgd *
7 1.1 cgd * Author: Keith Bostic, Chris G. Demetriou
8 1.1 cgd *
9 1.1 cgd * Permission to use, copy, modify and distribute this software and
10 1.1 cgd * its documentation is hereby granted, provided that both the copyright
11 1.1 cgd * notice and this permission notice appear in all copies of the
12 1.1 cgd * software, derivative works or modified versions, and any portions
13 1.1 cgd * thereof, and that both notices appear in supporting documentation.
14 1.1 cgd *
15 1.1 cgd * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
16 1.1 cgd * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
17 1.1 cgd * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
18 1.1 cgd *
19 1.1 cgd * Carnegie Mellon requests users of this software to return to
20 1.1 cgd *
21 1.1 cgd * Software Distribution Coordinator or Software.Distribution (at) CS.CMU.EDU
22 1.1 cgd * School of Computer Science
23 1.1 cgd * Carnegie Mellon University
24 1.1 cgd * Pittsburgh PA 15213-3890
25 1.1 cgd *
26 1.1 cgd * any improvements or extensions that they make and grant Carnegie the
27 1.1 cgd * rights to redistribute these changes.
28 1.1 cgd */
29 1.1 cgd
30 1.1 cgd /*
31 1.1 cgd * From DEC 3000 300/400/500/600/800 System Programmer's Manual,
32 1.1 cgd * EK-D3SYS-PM.A01.
33 1.1 cgd */
34 1.1 cgd
35 1.1 cgd /*
36 1.1 cgd * HWRPB (Hardware Restart Parameter Block).
37 1.1 cgd */
38 1.1 cgd #define HWRPB_ADDR 0x10000000 /* virtual address, at boot */
39 1.1 cgd
40 1.1 cgd #ifndef ASSEMBLER
41 1.1 cgd struct rpb {
42 1.1 cgd struct restart_blk *rpb; /* 0: HWRPB phys. address. */
43 1.1 cgd char rpb_magic[8]; /* 8: "HWRPB" (in ASCII) */
44 1.1 cgd u_int64_t rpb_version; /* 10 */
45 1.1 cgd u_int64_t rpb_size; /* 18: HWRPB size in bytes */
46 1.1 cgd u_int64_t rpb_primary_cpu_id; /* 20 */
47 1.1 cgd u_int64_t rpb_page_size; /* 28: (8192) */
48 1.1 cgd u_int64_t rpb_phys_addr_size; /* 30: (34) */
49 1.1 cgd u_int64_t rpb_max_asn; /* 38: (16) */
50 1.1 cgd char rpb_ssn[16]; /* 40: only first 10 valid */
51 1.1 cgd
52 1.1 cgd #define ST_ADU 1
53 1.1 cgd #define ST_DEC_4000 2
54 1.1 cgd #define ST_DEC_7000 3
55 1.1 cgd #define ST_DEC_3000_500 4
56 1.1 cgd #define ST_DEC_2000_300 6
57 1.1 cgd #define ST_DEC_3000_300 7
58 1.1 cgd u_int64_t rpb_type; /* 50: */
59 1.1 cgd
60 1.1 cgd #define SYSTEM_VAR_MPCAP 0x0001 /* multiprocessor */
61 1.1 cgd
62 1.1 cgd #define SYSTEM_VAR_CONSOLE 0x001e /* console hardware mask */
63 1.1 cgd #define SYSTEM_VAR_CNSL_DETACHED 0x0002
64 1.1 cgd #define SYSTEM_VAR_CNSL_EMBEDDED 0x0004
65 1.1 cgd
66 1.1 cgd #define SYSTEM_VAR_POWERFAIL 0x00e0 /* powerfail mask */
67 1.1 cgd #define SYSTEM_VAR_PF_UNITED 0x0020
68 1.1 cgd #define SYSTEM_VAR_PF_SEPARATE 0x0040
69 1.1 cgd #define SYSTEM_VAR_PF_BBACKUP 0x0060
70 1.1 cgd #define SYSTEM_VAR_PF_ACTION 0x0100 /* 1 -> restart all processors
71 1.1 cgd * on powerfail
72 1.1 cgd * 0 -> only primary
73 1.1 cgd */
74 1.1 cgd #define SYSTEM_VAR_GRAPHICS 0x0200 /* graphic engine present */
75 1.1 cgd #define SYSTEM_VAR_mbz 0xfffffffffffffc00 /* 10:64 -- must be zero */
76 1.1 cgd u_int64_t rpb_variation; /* 58 */
77 1.1 cgd
78 1.1 cgd char rpb_revision[8]; /* 60; only first 4 valid */
79 1.1 cgd u_int64_t rpb_intr_freq; /* 68; scaled by 4096 */
80 1.1 cgd u_int64_t rpb_cc_freq; /* 70: cycle cntr frequency */
81 1.1 cgd vm_offset_t rpb_vptb; /* 78: */
82 1.1 cgd u_int64_t rpb_reserved_arch; /* 80: */
83 1.1 cgd vm_offset_t rpb_tbhint_off; /* 88: */
84 1.1 cgd u_int64_t rpb_pcs_cnt; /* 90: */
85 1.1 cgd u_int64_t rpb_pcs_size; /* 98; pcs size in bytes */
86 1.1 cgd vm_offset_t rpb_pcs_off; /* A0: offset to pcs info */
87 1.1 cgd u_int64_t rpb_ctb_cnt; /* A8: console terminal */
88 1.1 cgd u_int64_t rpb_ctb_size; /* B0: ctb size in bytes */
89 1.1 cgd vm_offset_t rpb_ctb_off; /* B8: offset to ctb */
90 1.1 cgd vm_offset_t rpb_crb_off; /* C0: offset to crb */
91 1.1 cgd vm_offset_t rpb_memdat_off; /* C8: memory data offset */
92 1.1 cgd vm_offset_t rpb_condat_off; /* D0: config data offset */
93 1.1 cgd vm_offset_t rpb_fru_off; /* D8: FRU table offset */
94 1.1 cgd long (*rpb_save_term)(); /* E0: terminal save */
95 1.1 cgd long rpb_save_term_val; /* E8: */
96 1.1 cgd long (*rpb_rest_term)(); /* F0: terminal restore */
97 1.1 cgd long rpb_rest_term_val; /* F8: */
98 1.1 cgd long (*rpb_restart)(); /* 100: restart */
99 1.1 cgd long rpb_restart_val; /* 108: */
100 1.1 cgd u_int64_t rpb_reserve_os; /* 110: */
101 1.1 cgd u_int64_t rpb_reserve_hw; /* 118: */
102 1.1 cgd u_int64_t rpb_checksum; /* 120: HWRPB checksum */
103 1.1 cgd u_int64_t rpb_rxrdy; /* 128: receive ready */
104 1.1 cgd u_int64_t rpb_txrdy; /* 130: transmit ready */
105 1.1 cgd vm_offset_t rpb_dsrdb_off; /* 138: HWRPB + DSRDB offset */
106 1.1 cgd u_int64_t rpb_tbhint[8]; /* 149: TB hint block */
107 1.1 cgd };
108 1.1 cgd
109 1.1 cgd #ifdef KERNEL
110 1.1 cgd extern struct rpb *hwrpb;
111 1.1 cgd #endif
112 1.1 cgd
113 1.1 cgd /*
114 1.1 cgd * PCS: Per-CPU information.
115 1.1 cgd */
116 1.1 cgd struct pcs {
117 1.1 cgd u_int8_t pcs_hwpcb[128]; /* 0: PAL dependent */
118 1.1 cgd
119 1.1 cgd #define PCS_BIP 0x000001 /* boot in progress */
120 1.1 cgd #define PCS_RIP 0x000002 /* restart in progress */
121 1.1 cgd #define PCS_PA 0x000004 /* processor available */
122 1.1 cgd #define PCS_PP 0x000008 /* processor present */
123 1.1 cgd #define PCS_OH 0x000010 /* user halted */
124 1.1 cgd #define PCS_CV 0x000020 /* context valid */
125 1.1 cgd #define PCS_PV 0x000040 /* PALcode valid */
126 1.1 cgd #define PCS_PMV 0x000080 /* PALcode memory valid */
127 1.1 cgd #define PCS_PL 0x000100 /* PALcode loaded */
128 1.1 cgd #define PCS_PE 0x000200 /* primary eligible (SMP) */
129 1.1 cgd
130 1.1 cgd #define PCS_HALT_REQ 0xff0000 /* halt request mask */
131 1.1 cgd #define PCS_HALT_DEFAULT 0x000000
132 1.1 cgd #define PCS_HALT_SAVE_EXIT 0x010000
133 1.1 cgd #define PCS_HALT_COLD_BOOT 0x020000
134 1.1 cgd #define PCS_HALT_WARM_BOOT 0x030000
135 1.1 cgd #define PCS_HALT_STAY_HALTED 0x040000
136 1.1 cgd #define PCS_mbz 0xffffffffff000000 /* 24:63 -- must be zero */
137 1.1 cgd u_int64_t pcs_flags; /* 80: */
138 1.1 cgd
139 1.1 cgd u_int64_t pcs_pal_memsize; /* 88: PAL memory size */
140 1.1 cgd u_int64_t pcs_pal_scrsize; /* 90: PAL scratch size */
141 1.1 cgd vm_offset_t pcs_pal_memaddr; /* 98: PAL memory addr */
142 1.1 cgd vm_offset_t pcs_pal_scraddr; /* A0: PAL scratch addr */
143 1.1 cgd struct {
144 1.1 cgd u_int64_t
145 1.1 cgd pcs_alpha : 8, /* alphabetic char 'a' - 'z' */
146 1.1 cgd #define PAL_TYPE_STANDARD 0
147 1.1 cgd #define PAL_TYPE_ULTRIX 1
148 1.1 cgd pcs_pal_type : 8, /* PALcode type:
149 1.1 cgd * 0 == standard
150 1.1 cgd * 1 == Ultrix
151 1.1 cgd * 2-127 DIGITAL reserv.
152 1.1 cgd * 128-255 non-DIGITAL reserv.
153 1.1 cgd */
154 1.1 cgd sbz1 : 16,
155 1.1 cgd pcs_proc_cnt : 7, /* Processor count */
156 1.1 cgd sbz2 : 25;
157 1.1 cgd } pcs_pal_rev; /* A8: */
158 1.1 cgd #define pcs_alpha pcs_pal_rev.alpha
159 1.1 cgd #define pcs_pal_type pcs_pal_rev.pal_type
160 1.1 cgd #define pcs_proc_cnt pcs_pal_rev.proc_cnt
161 1.1 cgd
162 1.1 cgd u_int64_t pcs_proc_type; /* B0: (always 2) */
163 1.1 cgd struct {
164 1.1 cgd u_int64_t
165 1.1 cgd pcs_vaxfp : 1, /* Vax floating point */
166 1.1 cgd pcs_ieeefp : 1, /* IEEE floating point */
167 1.1 cgd pcs_reserved : 62;
168 1.1 cgd } pcs_proc_var; /* B8: */
169 1.1 cgd #define pcs_vaxfp pcs_proc_var.pcs_vaxfp
170 1.1 cgd #define pcs_ieeefp pcs_proc_var.pcs_ieeefp
171 1.1 cgd
172 1.1 cgd char pcs_proc_revision[8]; /* C0: only first 4 valid */
173 1.1 cgd char pcs_proc_sn[16]; /* C8: only first 10 valid */
174 1.1 cgd vm_offset_t pcs_machcheck; /* D8: mach chk phys addr. */
175 1.1 cgd u_int64_t pcs_machcheck_len; /* E0: length in bytes */
176 1.1 cgd vm_offset_t pcs_halt_pcbb; /* E8: phys addr of halt PCB */
177 1.1 cgd vm_offset_t pcs_halt_pc; /* F0: halt PC */
178 1.1 cgd u_int64_t pcs_halt_ps; /* F8: halt PS */
179 1.1 cgd u_int64_t pcs_halt_r25; /* 100: halt argument list */
180 1.1 cgd u_int64_t pcs_halt_r26; /* 108: halt return addr list */
181 1.1 cgd u_int64_t pcs_halt_r27; /* 110: halt procedure value */
182 1.1 cgd
183 1.1 cgd #define PCS_HALT_RESERVED 0
184 1.1 cgd #define PCS_HALT_POWERUP 1
185 1.1 cgd #define PCS_HALT_CONSOLE_HALT 2
186 1.1 cgd #define PCS_HALT_CONSOLE_CRASH 3
187 1.1 cgd #define PCS_HALT_KERNEL_MODE 4
188 1.1 cgd #define PCS_HALT_KERNEL_STACK_INVALID 5
189 1.1 cgd #define PCS_HALT_DOUBLE_ERROR_ABORT 6
190 1.1 cgd #define PCS_HALT_SCBB 7
191 1.1 cgd #define PCS_HALT_PTBR 8 /* 9-FF: reserved */
192 1.1 cgd u_int64_t pcs_halt_reason; /* 118: */
193 1.1 cgd
194 1.1 cgd u_int64_t pcs_reserved_soft; /* 120: preserved software */
195 1.1 cgd u_int64_t pcs_buffer[21]; /* 128: console buffers */
196 1.1 cgd
197 1.1 cgd #define PALvar_reserved 0
198 1.1 cgd #define PALvar_OpenVMS 1
199 1.1 cgd #define PALvar_OSF1 2
200 1.1 cgd u_int64_t pcs_palrevisions[16]; /* 1D0: PALcode revisions */
201 1.1 cgd
202 1.1 cgd u_int64_t pcs_reserved_arch[6]; /* 250: reserved arch */
203 1.1 cgd };
204 1.1 cgd
205 1.1 cgd /*
206 1.1 cgd * CTB: Console Terminal Block
207 1.1 cgd */
208 1.1 cgd struct ctb {
209 1.1 cgd u_int64_t ctb_type; /* 0: always 4 */
210 1.1 cgd u_int64_t ctb_unit; /* 8: */
211 1.1 cgd u_int64_t ctb_reserved; /* 16: */
212 1.1 cgd u_int64_t ctb_len; /* 24: bytes of info */
213 1.1 cgd u_int64_t ctb_ipl; /* 32: console ipl level */
214 1.1 cgd vm_offset_t ctb_tintr_vec; /* 40: transmit vec (0x800) */
215 1.1 cgd vm_offset_t ctb_rintr_vec; /* 48: receive vec (0x800) */
216 1.1 cgd
217 1.1 cgd #define CTB_GRAPHICS 3 /* graphics device */
218 1.1 cgd #define CTB_NETWORK 0xC0 /* network device */
219 1.1 cgd #define CTB_PRINTERPORT 2 /* printer port on the SCC */
220 1.1 cgd u_int64_t ctb_term_type; /* 56: terminal type */
221 1.1 cgd
222 1.1 cgd u_int64_t ctb_keybd_type; /* 64: keyboard nationality */
223 1.1 cgd vm_offset_t ctb_keybd_trans; /* 72: trans. table addr */
224 1.1 cgd vm_offset_t ctb_keybd_map; /* 80: map table addr */
225 1.1 cgd u_int64_t ctb_keybd_state; /* 88: keyboard flags */
226 1.1 cgd u_int64_t ctb_keybd_last; /* 96: last key entered */
227 1.1 cgd vm_offset_t ctb_font_us; /* 104: US font table addr */
228 1.1 cgd vm_offset_t ctb_font_mcs; /* 112: MCS font table addr */
229 1.1 cgd u_int64_t ctb_font_width; /* 120: font width, height */
230 1.1 cgd u_int64_t ctb_font_height; /* 128: in pixels */
231 1.1 cgd u_int64_t ctb_mon_width; /* 136: monitor width, height */
232 1.1 cgd u_int64_t ctb_mon_height; /* 144: in pixels */
233 1.1 cgd u_int64_t ctb_dpi; /* 152: monitor dots per inch */
234 1.1 cgd u_int64_t ctb_planes; /* 160: # of planes */
235 1.1 cgd u_int64_t ctb_cur_width; /* 168: cursor width, height */
236 1.1 cgd u_int64_t ctb_cur_height; /* 176: in pixels */
237 1.1 cgd u_int64_t ctb_head_cnt; /* 184: # of heads */
238 1.1 cgd u_int64_t ctb_opwindow; /* 192: opwindow on screen */
239 1.1 cgd vm_offset_t ctb_head_offset; /* 200: offset to head info */
240 1.1 cgd vm_offset_t ctb_putchar; /* 208: output char to TURBO */
241 1.1 cgd u_int64_t ctb_io_state; /* 216: I/O flags */
242 1.1 cgd u_int64_t ctb_listen_state; /* 224: listener flags */
243 1.1 cgd vm_offset_t ctb_xaddr; /* 232: extended info addr */
244 1.1 cgd u_int64_t ctb_turboslot; /* 248: TURBOchannel slot # */
245 1.1 cgd u_int64_t ctb_server_off; /* 256: offset to server info */
246 1.1 cgd u_int64_t ctb_line_off; /* 264: line parameter offset */
247 1.1 cgd u_int8_t ctb_csd; /* 272: console specific data */
248 1.1 cgd };
249 1.1 cgd
250 1.1 cgd /*
251 1.1 cgd * CRD: Console Routine Descriptor
252 1.1 cgd */
253 1.1 cgd struct crd {
254 1.1 cgd int64_t descriptor;
255 1.1 cgd int (*code)();
256 1.1 cgd };
257 1.1 cgd
258 1.1 cgd /*
259 1.1 cgd * CRB: Console Routine Block
260 1.1 cgd */
261 1.1 cgd struct crb {
262 1.1 cgd struct crd *crb_v_dispatch; /* 0: virtual dispatch addr */
263 1.1 cgd vm_offset_t crb_p_dispatch; /* 8: phys dispatch addr */
264 1.1 cgd struct crd *crb_v_fixup; /* 10: virtual fixup addr */
265 1.1 cgd vm_offset_t crb_p_fixup; /* 18: phys fixup addr */
266 1.1 cgd u_int64_t crb_map_cnt; /* 20: phys/virt map entries */
267 1.1 cgd u_int64_t crb_page_cnt; /* 28: pages to be mapped */
268 1.1 cgd };
269 1.1 cgd
270 1.1 cgd /*
271 1.1 cgd * MDDT: Memory Data Descriptor Table
272 1.1 cgd */
273 1.1 cgd struct mddt {
274 1.1 cgd int64_t mddt_cksum; /* 0: 7-N checksum */
275 1.1 cgd vm_offset_t mddt_physaddr; /* 8: bank config addr
276 1.1 cgd * IMPLEMENTATION SPECIFIC
277 1.1 cgd */
278 1.1 cgd u_int64_t mddt_cluster_cnt; /* 10: memory cluster count */
279 1.1 cgd struct {
280 1.1 cgd vm_offset_t mddt_pfn; /* 0: starting PFN */
281 1.1 cgd u_int64_t mddt_pg_cnt; /* 8: 8KB page count */
282 1.1 cgd u_int64_t mddt_pg_test; /* 10: tested page count */
283 1.1 cgd vm_offset_t mddt_v_bitaddr; /* 18: bitmap virt addr */
284 1.1 cgd vm_offset_t mddt_p_bitaddr; /* 20: bitmap phys addr */
285 1.1 cgd int64_t mddt_bit_cksum; /* 28: bitmap checksum */
286 1.1 cgd
287 1.1 cgd #define MDDT_PALCODE 0x01 /* console and PAL only */
288 1.1 cgd #define MDDT_SYSTEM 0x00 /* system software only */
289 1.1 cgd #define MDDT_mbz 0xfffffffffffffffe /* 1:63 -- must be zero */
290 1.1 cgd int64_t mddt_usage; /* 30: bitmap permissions */
291 1.1 cgd } mddt_clusters[1]; /* variable length array */
292 1.1 cgd };
293 1.1 cgd #endif /* ASSEMBLER */
294