/[gxemul]/trunk/src/include/alpha_rpb.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/alpha_rpb.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 14 - (show annotations)
Mon Oct 8 16:18:51 2007 UTC (16 years, 6 months ago) by dpavlin
File MIME type: text/plain
File size: 18760 byte(s)
++ trunk/HISTORY	(local)
$Id: HISTORY,v 1.982 2005/10/07 22:45:32 debug Exp $
20050816	Some success in decoding the way the SGI O2 PROM draws graphics
		during bootup; lines/rectangles and bitmaps work, enough to
		show the bootlogo etc. :-)
		Adding more PPC instructions, and (dummy) BAT registers.
20050817	Updating the pckbc to support scancode type 3 keyboards
		(required in order to interact with the SGI O2 PROM).
		Adding more PPC instructions.
20050818	Adding more ARM instructions; general register forms.
		Importing armreg.h from NetBSD (ARM cpu ids). Adding a (dummy)
		CATS machine mode (using SA110 as the default CPU).
		Continuing on general dyntrans related stuff.
20050819	Register forms for ARM load/stores. Gaah! The Compaq C Compiler
		bug is triggered for ARM loads as well, not just PPC :-(
		Adding full support for ARM PC-relative load/stores, and load/
		stores where the PC register is the destination register.
		Adding support for ARM a.out binaries.
20050820	Continuing to add more ARM instructions, and correcting some
		bugs. Continuing on CATS emulation.
		More work on the PPC stuff.
20050821	Minor PPC and ARM updates. Adding more machine types.
20050822	All ARM "data processing instructions" are now generated
		automatically.
20050824	Beginning the work on the ARM system control coprocessor.
		Adding support for ARM halfword load/stores, and signed loads.
20050825	Fixing an important bug related to the ARM condition codes.
		OpenBSD/zaurus and NetBSD/netwinder now print some boot
		messages. :)
		Adding a dummy SH (Hitachi SuperH) cpu family.
		Beginning to add some ARM virtual address translation.
		MIPS bugfixes: unaligned PC now cause an ADEL exception (at
		least for non-bintrans execution), and ADEL/ADES (not
		TLBL/TLBS) are used if userland tries to access kernel space.
		(Thanks to Joshua Wise for making me aware of these bugs.)
20050827	More work on the ARM emulation, and various other updates.
20050828	More ARM updates.
		Finally taking the time to work on translation invalidation
		(i.e. invalidating translated code mappings when memory is
		written to). Hopefully this doesn't break anything.
20050829	Moving CPU related files from src/ to a new subdir, src/cpus/.
		Moving PROM emulation stuff from src/ to src/promemul/.
		Better debug instruction trace for ARM loads and stores.
20050830	Various ARM updates (correcting CMP flag calculation, etc).
20050831	PPC instruction updates. (Flag fixes, etc.)
20050901	Various minor PPC and ARM instruction emulation updates.
		Minor OpenFirmware emulation updates.
20050903	Adding support for adding arbitrary ARM coprocessors (with
		the i80321 I/O coprocessor as a first test).
		Various other ARM and PPC updates.
20050904	Adding some SHcompact disassembly routines.
20050907	(Re)adding a dummy HPPA CPU module, and a dummy i960 module.
20050908	Began hacking on some Apple Partition Table support.
20050909	Adding support for loading Mach-O (Darwin PPC) binaries.
20050910	Fixing an ARM bug (Carry flag was incorrectly updated for some
		data processing instructions); OpenBSD/cats and NetBSD/
		netwinder get quite a bit further now.
		Applying a patch to dev_wdc, and a one-liner to dev_pcic, to
		make them work better when emulating new versions of OpenBSD.
		(Thanks to Alexander Yurchenko for the patches.)
		Also doing some other minor updates to dev_wdc. (Some cleanup,
		and finally converting to devinit, etc.)
20050912	IRIX doesn't have u_int64_t by default (noticed by Andreas
		<avr@gnulinux.nl>); configure updated to reflect this.
		Working on ARM register bank switching, CPSR vs SPSR issues,
		and beginning the work on interrupt/exception support.
20050913	Various minor ARM updates (speeding up load/store multiple,
		and fixing a ROR bug in R(); NetBSD/cats now boots as far as
		OpenBSD/cats).
20050917	Adding a dummy Atmel AVR (8-bit) cpu family skeleton.
20050918	Various minor updates.
20050919	Symbols are now loaded from Mach-O executables.
		Continuing the work on adding ARM exception support.
20050920	More work on ARM stuff: OpenBSD/cats and NetBSD/cats reach
		userland! :-)
20050921	Some more progress on ARM interrupt specifics.
20050923	Fixing linesize for VR4121 (patch by Yurchenko). Also fixing
		linesizes/cachesizes for some other VR4xxx.
		Adding a dummy Acer Labs M1543 PCI-ISA bridge (for CATS) and a
		dummy Symphony Labs 83C553 bridge (for Netwinder), usable by 
		dev_footbridge.
20050924	Some PPC progress.
20050925	More PPC progress.
20050926	PPC progress (fixing some bugs etc); Darwin's kernel gets
		slightly further than before.
20050928	Various updates: footbridge/ISA/pciide stuff, and finally
		fixing the VGA text scroll-by-changing-the-base-offset bug.
20050930	Adding a dummy S3 ViRGE pci card for CATS emulation, which
		both NetBSD and OpenBSD detects as VGA.
		Continuing on Footbridge (timers, ISA interrupt stuff).
20051001	Continuing... there are still bugs, probably interrupt-
		related.
20051002	More work on the Footbridge (interrupt stuff).
20051003	Various minor updates. (Trying to find the bug(s).)
20051004	Continuing on the ARM stuff.
20051005	More ARM-related fixes.
20051007	FINALLY! Found and fixed 2 ARM bugs: 1 memory related, and the
		other was because of an error in the ARM manual (load multiple
		with the S-bit set should _NOT_ load usermode registers, as the
		manual says, but it should load saved registers, which may or
		may not happen to be usermode registers).
		NetBSD/cats and OpenBSD/cats seem to install fine now :-)
		except for a minor bug at the end of the OpenBSD/cats install.
		Updating the documentation, preparing for the next release.
20051008	Continuing with release testing and cleanup.

1 /* $NetBSD: rpb.h,v 1.39.18.1 2002/07/29 14:45:46 lukem Exp $ */
2
3 #include <sys/types.h>
4 #include "misc.h"
5
6 /*
7 * Copyright (c) 1994, 1995, 1996 Carnegie-Mellon University.
8 * All rights reserved.
9 *
10 * Author: Keith Bostic, Chris G. Demetriou
11 *
12 * Permission to use, copy, modify and distribute this software and
13 * its documentation is hereby granted, provided that both the copyright
14 * notice and this permission notice appear in all copies of the
15 * software, derivative works or modified versions, and any portions
16 * thereof, and that both notices appear in supporting documentation.
17 *
18 * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
19 * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
20 * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
21 *
22 * Carnegie Mellon requests users of this software to return to
23 *
24 * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
25 * School of Computer Science
26 * Carnegie Mellon University
27 * Pittsburgh PA 15213-3890
28 *
29 * any improvements or extensions that they make and grant Carnegie the
30 * rights to redistribute these changes.
31 */
32
33 /*
34 * From DEC 3000 300/400/500/600/700/800/900 System Programmer's Manual,
35 * EK-D3SYS-PM.B01.
36 */
37
38 /*
39 * HWRPB (Hardware Restart Parameter Block).
40 */
41 #define HWRPB_ADDR 0x10000000 /* virtual address, at boot */
42
43 /* GXemul: */
44 #define CTB_ADDR (HWRPB_ADDR + 0x1000)
45 #define CRB_ADDR (HWRPB_ADDR + 0x1400)
46
47 #ifndef ASSEMBLER
48 struct rpb {
49 u_int64_t rpb_phys; /* 0: HWRPB phys. address. */
50 char rpb_magic[8]; /* 8: "HWRPB" (in ASCII) */
51 u_int64_t rpb_version; /* 10 */
52 u_int64_t rpb_size; /* 18: HWRPB size in bytes */
53 u_int64_t rpb_primary_cpu_id; /* 20 */
54 u_int64_t rpb_page_size; /* 28: (8192) */
55 u_int32_t rpb_phys_addr_size; /* 30: physical address size */
56 u_int32_t rpb_extended_va_size; /* 34: extended VA size (4L) */
57 u_int64_t rpb_max_asn; /* 38: (16) */
58 char rpb_ssn[16]; /* 40: only first 10 valid */
59
60 #define ST_ADU 1 /* Alpha Demo. Unit (?) */
61 #define ST_DEC_4000 2 /* "Cobra" */
62 #define ST_DEC_7000 3 /* "Ruby" */
63 #define ST_DEC_3000_500 4 /* "Flamingo" family (TC) */
64 #define ST_DEC_2000_300 6 /* "Jensen" (EISA/ISA) */
65 #define ST_DEC_3000_300 7 /* "Pelican" (TC) */
66 #define ST_AVALON_A12 8 /* XXX Avalon Multicomputer */
67 #define ST_DEC_2100_A500 9 /* "Sable" */
68 #define ST_DEC_APXVME_64 10 /* "AXPvme" (VME) */
69 #define ST_DEC_AXPPCI_33 11 /* "NoName" (PCI/ISA) */
70 #define ST_DEC_21000 12 /* "TurboLaser" (PCI/EISA) */
71 #define ST_DEC_2100_A50 13 /* "Avanti" (PCI/ISA) */
72 #define ST_DEC_MUSTANG 14 /* "Mustang" */
73 #define ST_DEC_KN20AA 15 /* kn20aa (PCI/EISA) */
74 #define ST_DEC_1000 17 /* "Mikasa" (PCI/EISA) */
75 #define ST_EB66 19 /* EB66 (PCI/ISA?) */
76 #define ST_EB64P 20 /* EB64+ (PCI/ISA?) */
77 #define ST_ALPHABOOK1 21 /* Alphabook1 */
78 #define ST_DEC_4100 22 /* "Rawhide" (PCI/EISA) */
79 #define ST_DEC_EV45_PBP 23 /* "Lego" K2 Passive SBC */
80 #define ST_DEC_2100A_A500 24 /* "Lynx" */
81 #define ST_EB164 26 /* EB164 (PCI/ISA) */
82 #define ST_DEC_1000A 27 /* "Noritake" (PCI/EISA)*/
83 #define ST_DEC_ALPHAVME_224 28 /* "Cortex" */
84 #define ST_DEC_550 30 /* "Miata" (PCI/ISA) */
85 #define ST_DEC_EV56_PBP 32 /* "Takara" */
86 #define ST_DEC_ALPHAVME_320 33 /* "Yukon" (VME) */
87 #define ST_DEC_6600 34 /* EV6-Tsunami based systems */
88 #define ST_DEC_WILDFIRE 35 /* "Wildfire" */
89 #define ST_DEC_CUSCO 36 /* "CUSCO" */
90 #define ST_DEC_EIGER 37 /* "Eiger" */
91 #define ST_DEC_TITAN 38 /* "Titan" */
92
93 /* Alpha Processor, Inc. systypes */
94 #define ST_API_NAUTILUS 201 /* EV6-AMD 751 UP1000 */
95
96 u_int64_t rpb_type; /* 50: */
97
98 #define SV_MPCAP 0x00000001 /* multiprocessor capable */
99
100 #define SV_CONSOLE 0x0000001e /* console hardware mask */
101 #define SV_CONSOLE_DETACHED 0x00000002
102 #define SV_CONSOLE_EMBEDDED 0x00000004
103
104 #define SV_POWERFAIL 0x000000e0 /* powerfail mask */
105 #define SV_PF_UNITED 0x00000020
106 #define SV_PF_SEPARATE 0x00000040
107 #define SV_PF_BBACKUP 0x00000060
108 #define SV_PF_ACTION 0x00000100 /* powerfail restart */
109
110 #define SV_GRAPHICS 0x00000200 /* graphic engine present */
111
112 #define SV_ST_MASK 0x0000fc00 /* system type mask */
113 #define SV_ST_RESERVED 0x00000000 /* RESERVED */
114
115 /*
116 * System types for the DEC 3000/500 (Flamingo) Family
117 */
118 #define SV_ST_SANDPIPER 0x00000400 /* Sandpiper; 3000/400 */
119 #define SV_ST_FLAMINGO 0x00000800 /* Flamingo; 3000/500 */
120 #define SV_ST_HOTPINK 0x00000c00 /* "Hot Pink"; 3000/500X */
121 #define SV_ST_FLAMINGOPLUS 0x00001000 /* Flamingo+; 3000/800 */
122 #define SV_ST_ULTRA 0x00001400 /* "Ultra", aka Flamingo+ */
123 #define SV_ST_SANDPLUS 0x00001800 /* Sandpiper+; 3000/600 */
124 #define SV_ST_SANDPIPER45 0x00001c00 /* Sandpiper45; 3000/700 */
125 #define SV_ST_FLAMINGO45 0x00002000 /* Flamingo45; 3000/900 */
126
127 /*
128 * System types for ???
129 */
130 #define SV_ST_SABLE 0x00000400 /* Sable (???) */
131
132 /*
133 * System types for the DEC 3000/300 (Pelican) Family
134 */
135 #define SV_ST_PELICAN 0x00000000 /* Pelican; 3000/300 */
136 #define SV_ST_PELICA 0x00000400 /* Pelica; 3000/300L */
137 #define SV_ST_PELICANPLUS 0x00000800 /* Pelican+; 3000/300X */
138 #define SV_ST_PELICAPLUS 0x00000c00 /* Pelica+; 3000/300LX */
139
140 /*
141 * System types for the AlphaStation Family
142 */
143 #define SV_ST_AVANTI 0x00000000 /* Avanti; 400 4/233 */
144 #define SV_ST_MUSTANG2_4_166 0x00000800 /* Mustang II; 200 4/166 */
145 #define SV_ST_MUSTANG2_4_233 0x00001000 /* Mustang II; 200 4/233 */
146 #define SV_ST_AVANTI_XXX 0x00001400 /* also Avanti; 400 4/233 */
147 #define SV_ST_AVANTI_4_266 0x00002000
148 #define SV_ST_MUSTANG2_4_100 0x00002400 /* Mustang II; 200 4/100 */
149 #define SV_ST_AVANTI_4_233 0x0000a800 /* AlphaStation 255/233 */
150
151 #define SV_ST_KN20AA 0x00000400 /* AlphaStation 500/600 */
152
153 /*
154 * System types for the AXPvme Family
155 */
156 #define SV_ST_AXPVME_64 0x00000000 /* 21068, 64MHz */
157 #define SV_ST_AXPVME_160 0x00000400 /* 21066, 160MHz */
158 #define SV_ST_AXPVME_100 0x00000c00 /* 21066A, 99MHz */
159 #define SV_ST_AXPVME_230 0x00001000 /* 21066A, 231MHz */
160 #define SV_ST_AXPVME_66 0x00001400 /* 21066A, 66MHz */
161 #define SV_ST_AXPVME_166 0x00001800 /* 21066A, 165MHz */
162 #define SV_ST_AXPVME_264 0x00001c00 /* 21066A, 264MHz */
163
164 /*
165 * System types for the EB164 Family
166 */
167 #define SV_ST_EB164_266 0x00000400 /* EB164, 266MHz */
168 #define SV_ST_EB164_300 0x00000800 /* EB164, 300MHz */
169 #define SV_ST_ALPHAPC164_366 0x00000c00 /* AlphaPC164, 366MHz */
170 #define SV_ST_ALPHAPC164_400 0x00001000 /* AlphaPC164, 400MHz */
171 #define SV_ST_ALPHAPC164_433 0x00001400 /* AlphaPC164, 433MHz */
172 #define SV_ST_ALPHAPC164_466 0x00001800 /* AlphaPC164, 466MHz */
173 #define SV_ST_ALPHAPC164_500 0x00001c00 /* AlphaPC164, 500MHz */
174 #define SV_ST_ALPHAPC164LX_400 0x00002000 /* AlphaPC164LX, 400MHz */
175 #define SV_ST_ALPHAPC164LX_466 0x00002400 /* AlphaPC164LX, 466MHz */
176 #define SV_ST_ALPHAPC164LX_533 0x00002800 /* AlphaPC164LX, 533MHz */
177 #define SV_ST_ALPHAPC164LX_600 0x00002c00 /* AlphaPC164LX, 600MHz */
178 #define SV_ST_ALPHAPC164SX_400 0x00003000 /* AlphaPC164SX, 400MHz */
179 #define SV_ST_ALPHAPC164SX_466 0x00003400 /* AlphaPC164SX, 433MHz */
180 #define SV_ST_ALPHAPC164SX_533 0x00003800 /* AlphaPC164SX, 533MHz */
181 #define SV_ST_ALPHAPC164SX_600 0x00003c00 /* AlphaPC164SX, 600MHz */
182
183 /*
184 * System types for the Digital Personal Workstation (Miata) Family
185 * XXX These are not very complete!
186 */
187 #define SV_ST_MIATA_1_5 0x00004c00 /* Miata 1.5 */
188
189 u_int64_t rpb_variation; /* 58 */
190
191 char rpb_revision[8]; /* 60; only first 4 valid */
192 u_int64_t rpb_intr_freq; /* 68; scaled by 4096 */
193 u_int64_t rpb_cc_freq; /* 70: cycle cntr frequency */
194 u_int64_t rpb_vptb; /* 78: */
195 u_int64_t rpb_reserved_arch; /* 80: */
196 u_int64_t rpb_tbhint_off; /* 88: */
197 u_int64_t rpb_pcs_cnt; /* 90: */
198 u_int64_t rpb_pcs_size; /* 98; pcs size in bytes */
199 u_int64_t rpb_pcs_off; /* A0: offset to pcs info */
200 u_int64_t rpb_ctb_cnt; /* A8: console terminal */
201 u_int64_t rpb_ctb_size; /* B0: ctb size in bytes */
202 u_int64_t rpb_ctb_off; /* B8: offset to ctb */
203 u_int64_t rpb_crb_off; /* C0: offset to crb */
204 u_int64_t rpb_memdat_off; /* C8: memory data offset */
205 u_int64_t rpb_condat_off; /* D0: config data offset */
206 u_int64_t rpb_fru_off; /* D8: FRU table offset */
207 u_int64_t rpb_save_term; /* E0: terminal save */
208 u_int64_t rpb_save_term_val; /* E8: */
209 u_int64_t rpb_rest_term; /* F0: terminal restore */
210 u_int64_t rpb_rest_term_val; /* F8: */
211 u_int64_t rpb_restart; /* 100: restart */
212 u_int64_t rpb_restart_val; /* 108: */
213 u_int64_t rpb_reserve_os; /* 110: */
214 u_int64_t rpb_reserve_hw; /* 118: */
215 u_int64_t rpb_checksum; /* 120: HWRPB checksum */
216 u_int64_t rpb_rxrdy; /* 128: receive ready */
217 u_int64_t rpb_txrdy; /* 130: transmit ready */
218 u_int64_t rpb_dsrdb_off; /* 138: HWRPB + DSRDB offset */
219 u_int64_t rpb_tbhint[8]; /* 140: TB hint block */
220 };
221
222 #define LOCATE_PCS(h,cpunumber) ((struct pcs *) \
223 ((char *)(h) + (h)->rpb_pcs_off + ((cpunumber) * (h)->rpb_pcs_size)))
224
225 /*
226 * PCS: Per-CPU information.
227 */
228 struct pcs {
229 u_int8_t pcs_hwpcb[128]; /* 0: PAL dependent */
230
231 #define PCS_BIP 0x000001 /* boot in progress */
232 #define PCS_RC 0x000002 /* restart possible */
233 #define PCS_PA 0x000004 /* processor available */
234 #define PCS_PP 0x000008 /* processor present */
235 #define PCS_OH 0x000010 /* user halted */
236 #define PCS_CV 0x000020 /* context valid */
237 #define PCS_PV 0x000040 /* PALcode valid */
238 #define PCS_PMV 0x000080 /* PALcode memory valid */
239 #define PCS_PL 0x000100 /* PALcode loaded */
240
241 #define PCS_HALT_REQ 0xff0000 /* halt request mask */
242 #define PCS_HALT_DEFAULT 0x000000
243 #define PCS_HALT_SAVE_EXIT 0x010000
244 #define PCS_HALT_COLD_BOOT 0x020000
245 #define PCS_HALT_WARM_BOOT 0x030000
246 #define PCS_HALT_STAY_HALTED 0x040000
247 #define PCS_mbz 0xffffffffff000000 /* 24:63 -- must be zero */
248 u_int64_t pcs_flags; /* 80: */
249
250 u_int64_t pcs_pal_memsize; /* 88: PAL memory size */
251 u_int64_t pcs_pal_scrsize; /* 90: PAL scratch size */
252 u_int64_t pcs_pal_memaddr; /* 98: PAL memory addr */
253 u_int64_t pcs_pal_scraddr; /* A0: PAL scratch addr */
254 struct {
255 int /* TODO/NOTE: should be uint64_t */
256 minorrev : 8, /* alphabetic char 'a' - 'z' */
257 majorrev : 8, /* alphabetic char 'a' - 'z' */
258 #define PAL_TYPE_STANDARD 0
259 #define PAL_TYPE_VMS 1
260 #define PAL_TYPE_OSF1 2
261 pal_type : 8, /* PALcode type:
262 * 0 == standard
263 * 1 == OpenVMS
264 * 2 == OSF/1
265 * 3-127 DIGITAL reserv.
266 * 128-255 non-DIGITAL reserv.
267 */
268 sbz1 : 8,
269 compatibility : 16, /* Compatibility revision */
270 proc_cnt : 16; /* Processor count */
271 } pcs_pal_rev; /* A8: */
272 #define pcs_minorrev pcs_pal_rev.minorrev
273 #define pcs_majorrev pcs_pal_rev.majorrev
274 #define pcs_pal_type pcs_pal_rev.pal_type
275 #define pcs_compatibility pcs_pal_rev.compatibility
276 #define pcs_proc_cnt pcs_pal_rev.proc_cnt
277
278 u_int64_t pcs_proc_type; /* B0: processor type */
279
280 #define PCS_PROC_EV3 1 /* EV3 */
281 #define PCS_PROC_EV4 2 /* EV4: 21064 */
282 #define PCS_PROC_SIMULATION 3 /* Simulation */
283 #define PCS_PROC_LCA4 4 /* LCA4: 2106[68] */
284 #define PCS_PROC_EV5 5 /* EV5: 21164 */
285 #define PCS_PROC_EV45 6 /* EV45: 21064A */
286 #define PCS_PROC_EV56 7 /* EV56: 21164A */
287 #define PCS_PROC_EV6 8 /* EV6: 21264 */
288 #define PCS_PROC_PCA56 9 /* PCA56: 21164PC */
289 #define PCS_PROC_PCA57 10 /* PCA57: 21164?? */
290 #define PCS_PROC_EV67 11 /* EV67: 21246A */
291 #define PCS_PROC_EV68CB 12 /* EV68CB: 21264C */
292 #define PCS_PROC_EV68AL 13 /* EV68AL: 21264B */
293 #define PCS_PROC_EV68CX 14 /* EV68CX: 21264D */
294
295 #define PCS_CPU_MAJORTYPE(p) ((p)->pcs_proc_type & 0xffffffff)
296 #define PCS_CPU_MINORTYPE(p) ((p)->pcs_proc_type >> 32)
297
298 /* Minor number interpretation is processor specific. See cpu.c. */
299
300 u_int64_t pcs_proc_var; /* B8: processor variation. */
301
302 #define PCS_VAR_VAXFP 0x0000000000000001 /* VAX FP support */
303 #define PCS_VAR_IEEEFP 0x0000000000000002 /* IEEE FP support */
304 #define PCS_VAR_PE 0x0000000000000004 /* Primary Eligible */
305 #define PCS_VAR_RESERVED 0xfffffffffffffff8 /* Reserved */
306
307 char pcs_proc_revision[8]; /* C0: only first 4 valid */
308 char pcs_proc_sn[16]; /* C8: only first 10 valid */
309 u_int64_t pcs_machcheck; /* D8: mach chk phys addr. */
310 u_int64_t pcs_machcheck_len; /* E0: length in bytes */
311 u_int64_t pcs_halt_pcbb; /* E8: phys addr of halt PCB */
312 u_int64_t pcs_halt_pc; /* F0: halt PC */
313 u_int64_t pcs_halt_ps; /* F8: halt PS */
314 u_int64_t pcs_halt_r25; /* 100: halt argument list */
315 u_int64_t pcs_halt_r26; /* 108: halt return addr list */
316 u_int64_t pcs_halt_r27; /* 110: halt procedure value */
317
318 #define PCS_HALT_RESERVED 0
319 #define PCS_HALT_POWERUP 1
320 #define PCS_HALT_CONSOLE_HALT 2
321 #define PCS_HALT_CONSOLE_CRASH 3
322 #define PCS_HALT_KERNEL_MODE 4
323 #define PCS_HALT_KERNEL_STACK_INVALID 5
324 #define PCS_HALT_DOUBLE_ERROR_ABORT 6
325 #define PCS_HALT_SCBB 7
326 #define PCS_HALT_PTBR 8 /* 9-FF: reserved */
327 u_int64_t pcs_halt_reason; /* 118: */
328
329 u_int64_t pcs_reserved_soft; /* 120: preserved software */
330
331 struct { /* 128: inter-console buffers */
332 u_int iccb_rxlen;
333 u_int iccb_txlen;
334 char iccb_rxbuf[80];
335 char iccb_txbuf[80];
336 } pcs_iccb;
337
338 #define PALvar_reserved 0
339 #define PALvar_OpenVMS 1
340 #define PALvar_OSF1 2
341 u_int64_t pcs_palrevisions[16]; /* 1D0: PALcode revisions */
342
343 u_int64_t pcs_reserved_arch[6]; /* 250: reserved arch */
344 };
345
346 /*
347 * CTB: Console Terminal Block
348 */
349 struct ctb {
350 u_int64_t ctb_type; /* 0: CTB type */
351 u_int64_t ctb_unit; /* 8: */
352 u_int64_t ctb_reserved; /* 16: */
353 u_int64_t ctb_len; /* 24: bytes of info */
354 u_int64_t ctb_ipl; /* 32: console ipl level */
355 u_int64_t ctb_tintr_vec; /* 40: transmit vec (0x800) */
356 u_int64_t ctb_rintr_vec; /* 48: receive vec (0x800) */
357
358 #define CTB_NONE 0x00 /* no console present */
359 #define CTB_SERVICE 0x01 /* service processor */
360 #define CTB_PRINTERPORT 0x02 /* printer port on the SCC */
361 #define CTB_GRAPHICS 0x03 /* graphics device */
362 #define CTB_TYPE4 0x04 /* type 4 CTB */
363 #define CTB_NETWORK 0xC0 /* network device */
364 u_int64_t ctb_term_type; /* 56: terminal type */
365
366 u_int64_t ctb_keybd_type; /* 64: keyboard nationality */
367 u_int64_t ctb_keybd_trans; /* 72: trans. table addr */
368 u_int64_t ctb_keybd_map; /* 80: map table addr */
369 u_int64_t ctb_keybd_state; /* 88: keyboard flags */
370 u_int64_t ctb_keybd_last; /* 96: last key entered */
371 u_int64_t ctb_font_us; /* 104: US font table addr */
372 u_int64_t ctb_font_mcs; /* 112: MCS font table addr */
373 u_int64_t ctb_font_width; /* 120: font width, height */
374 u_int64_t ctb_font_height; /* 128: in pixels */
375 u_int64_t ctb_mon_width; /* 136: monitor width, height */
376 u_int64_t ctb_mon_height; /* 144: in pixels */
377 u_int64_t ctb_dpi; /* 152: monitor dots per inch */
378 u_int64_t ctb_planes; /* 160: # of planes */
379 u_int64_t ctb_cur_width; /* 168: cursor width, height */
380 u_int64_t ctb_cur_height; /* 176: in pixels */
381 u_int64_t ctb_head_cnt; /* 184: # of heads */
382 u_int64_t ctb_opwindow; /* 192: opwindow on screen */
383 u_int64_t ctb_head_offset; /* 200: offset to head info */
384 u_int64_t ctb_putchar; /* 208: output char to TURBO */
385 u_int64_t ctb_io_state; /* 216: I/O flags */
386 u_int64_t ctb_listen_state; /* 224: listener flags */
387 u_int64_t ctb_xaddr; /* 232: extended info addr */
388 u_int64_t ctb_turboslot; /* 248: TURBOchannel slot # */
389 u_int64_t ctb_server_off; /* 256: offset to server info */
390 u_int64_t ctb_line_off; /* 264: line parameter offset */
391 u_int8_t ctb_csd; /* 272: console specific data */
392 };
393
394 struct ctb_tt {
395 u_int64_t ctb_type; /* 0: CTB type */
396 u_int64_t ctb_unit; /* 8: console unit */
397 u_int64_t ctb_reserved; /* 16: reserved */
398 u_int64_t ctb_length; /* 24: length */
399 u_int64_t ctb_csr; /* 32: address */
400 u_int64_t ctb_tivec; /* 40: Tx intr vector */
401 u_int64_t ctb_rivec; /* 48: Rx intr vector */
402 u_int64_t ctb_baud; /* 56: baud rate */
403 u_int64_t ctb_put_sts; /* 64: PUTS status */
404 u_int64_t ctb_get_sts; /* 72: GETS status */
405 u_int64_t ctb_reserved0; /* 80: reserved */
406 };
407
408 /*
409 * Format of the Console Terminal Block Type 4 `turboslot' field:
410 *
411 * 63 40 39 32 31 24 23 16 15 8 7 0
412 * | reserved | channel | hose | bus type | bus | slot|
413 */
414 #define CTB_TURBOSLOT_CHANNEL(x) (((x) >> 32) & 0xff)
415 #define CTB_TURBOSLOT_HOSE(x) (((x) >> 24) & 0xff)
416 #define CTB_TURBOSLOT_TYPE(x) (((x) >> 16) & 0xff)
417 #define CTB_TURBOSLOT_BUS(x) (((x) >> 8) & 0xff)
418 #define CTB_TURBOSLOT_SLOT(x) ((x) & 0xff)
419
420 #define CTB_TURBOSLOT_TYPE_TC 0 /* TURBOchannel */
421 #define CTB_TURBOSLOT_TYPE_ISA 1 /* ISA */
422 #define CTB_TURBOSLOT_TYPE_EISA 2 /* EISA */
423 #define CTB_TURBOSLOT_TYPE_PCI 3 /* PCI */
424
425 /*
426 * CRD: Console Routine Descriptor
427 */
428 struct crd {
429 int64_t descriptor;
430 u_int64_t entry_va;
431 };
432
433 /*
434 * CRB: Console Routine Block
435 */
436 struct crb {
437 /* struct crd * */
438 u_int64_t crb_v_dispatch; /* 0: virtual dispatch addr */
439 u_int64_t crb_p_dispatch; /* 8: phys dispatch addr */
440 /* struct crd * */
441 u_int64_t crb_v_fixup; /* 10: virtual fixup addr */
442 u_int64_t crb_p_fixup; /* 18: phys fixup addr */
443 u_int64_t crb_map_cnt; /* 20: phys/virt map entries */
444 u_int64_t crb_page_cnt; /* 28: pages to be mapped */
445 };
446
447 /*
448 * MDDT: Memory Data Descriptor Table
449 */
450 struct mddt {
451 int64_t mddt_cksum; /* 0: 7-N checksum */
452 u_int64_t mddt_physaddr; /* 8: bank config addr
453 * IMPLEMENTATION SPECIFIC
454 */
455 u_int64_t mddt_cluster_cnt; /* 10: memory cluster count */
456 struct mddt_cluster {
457 u_int64_t mddt_pfn; /* 0: starting PFN */
458 u_int64_t mddt_pg_cnt; /* 8: 8KB page count */
459 u_int64_t mddt_pg_test; /* 10: tested page count */
460 u_int64_t mddt_v_bitaddr; /* 18: bitmap virt addr */
461 u_int64_t mddt_p_bitaddr; /* 20: bitmap phys addr */
462 int64_t mddt_bit_cksum; /* 28: bitmap checksum */
463
464 #define MDDT_NONVOLATILE 0x10 /* cluster is non-volatile */
465 #define MDDT_PALCODE 0x01 /* console and PAL only */
466 #define MDDT_SYSTEM 0x00 /* system software only */
467 #define MDDT_mbz 0xfffffffffffffffc /* 2:63 -- must be zero */
468 int64_t mddt_usage; /* 30: bitmap permissions */
469 } mddt_clusters[1]; /* variable length array */
470 };
471
472 /*
473 * DSR: Dynamic System Recognition. We're interested in the sysname
474 * offset. The data pointed to by sysname is:
475 *
476 * [8 bytes: length of system name][N bytes: system name string]
477 *
478 * The system name string is NUL-terminated.
479 */
480 struct dsrdb {
481 int64_t dsr_smm; /* 0: SMM number */
482 u_int64_t dsr_lurt_off; /* 8: LURT table offset */
483 u_int64_t dsr_sysname_off; /* 16: offset to sysname */
484 };
485
486 /*
487 * The DSR appeared in version 5 of the HWRPB.
488 */
489 #define HWRPB_DSRDB_MINVERS 5
490
491 #ifdef _KERNEL
492 extern int cputype;
493 extern struct rpb *hwrpb;
494 #endif
495
496 #endif /* ASSEMBLER */

  ViewVC Help
Powered by ViewVC 1.1.26