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