1193323Sed/* $NetBSD: rpb.h,v 1.45 2024/03/31 19:11:21 thorpej Exp $ */ 2193323Sed 3193323Sed/* 4193323Sed * Copyright (c) 1994, 1995, 1996 Carnegie-Mellon University. 5193323Sed * All rights reserved. 6193323Sed * 7193323Sed * Author: Keith Bostic, Chris G. Demetriou 8193323Sed * 9193323Sed * Permission to use, copy, modify and distribute this software and 10193323Sed * its documentation is hereby granted, provided that both the copyright 11193323Sed * notice and this permission notice appear in all copies of the 12193323Sed * software, derivative works or modified versions, and any portions 13193323Sed * thereof, and that both notices appear in supporting documentation. 14193323Sed * 15193323Sed * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" 16199989Srdivacky * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND 17210299Sed * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. 18193323Sed * 19193323Sed * Carnegie Mellon requests users of this software to return to 20224145Sdim * 21198090Srdivacky * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU 22193323Sed * School of Computer Science 23193323Sed * Carnegie Mellon University 24193323Sed * Pittsburgh PA 15213-3890 25193323Sed * 26193323Sed * any improvements or extensions that they make and grant Carnegie the 27193323Sed * rights to redistribute these changes. 28198892Srdivacky */ 29208599Srdivacky 30193323Sed/* 31193323Sed * From DEC 3000 300/400/500/600/700/800/900 System Programmer's Manual, 32193323Sed * EK-D3SYS-PM.B01. 33208599Srdivacky */ 34193323Sed 35193323Sed/* 36193323Sed * HWRPB (Hardware Restart Parameter Block). 37193323Sed */ 38193323Sed#define HWRPB_ADDR 0x10000000 /* virtual address, at boot */ 39193323Sed 40193323Sed#ifndef ASSEMBLER 41193323Sedstruct rpb { 42198892Srdivacky uint64_t rpb_phys; /* 0: HWRPB phys. address. */ 43193323Sed char rpb_magic[8]; /* 8: "HWRPB" (in ASCII) */ 44234353Sdim uint64_t rpb_version; /* 10 */ 45193323Sed uint64_t rpb_size; /* 18: HWRPB size in bytes */ 46193323Sed uint64_t rpb_primary_cpu_id; /* 20 */ 47193323Sed uint64_t rpb_page_size; /* 28: (8192) */ 48218893Sdim uint32_t rpb_phys_addr_size; /* 30: physical address size */ 49193323Sed uint32_t rpb_extended_va_size; /* 34: extended VA size (4L) */ 50193323Sed uint64_t rpb_max_asn; /* 38: (16) */ 51198090Srdivacky char rpb_ssn[16]; /* 40: only first 10 valid */ 52193323Sed 53198090Srdivacky#define ST_ADU 1 /* Alpha Demo. Unit (?) */ 54219077Sdim#define ST_DEC_4000 2 /* "Cobra" */ 55204792Srdivacky#define ST_DEC_7000 3 /* "Ruby" */ 56193323Sed#define ST_DEC_3000_500 4 /* "Flamingo" family (TC) */ 57193323Sed#define ST_DEC_2000_300 6 /* "Jensen" (EISA/ISA) */ 58193323Sed#define ST_DEC_3000_300 7 /* "Pelican" (TC) */ 59204792Srdivacky#define ST_AVALON_A12 8 /* XXX Avalon Multicomputer */ 60223017Sdim#define ST_DEC_2100_A500 9 /* "Sable" */ 61218893Sdim#define ST_DEC_APXVME_64 10 /* "AXPvme" (VME) */ 62218893Sdim#define ST_DEC_AXPPCI_33 11 /* "NoName" (PCI/ISA) */ 63206083Srdivacky#define ST_DEC_21000 12 /* "TurboLaser" (PCI/EISA) */ 64204792Srdivacky#define ST_DEC_2100_A50 13 /* "Avanti" (PCI/ISA) */ 65234353Sdim#define ST_DEC_MUSTANG 14 /* "Mustang" */ 66193323Sed#define ST_DEC_KN20AA 15 /* kn20aa (PCI/EISA) */ 67234353Sdim#define ST_DEC_1000 17 /* "Mikasa" (PCI/EISA) */ 68234353Sdim#define ST_EB66 19 /* EB66 (PCI/ISA?) */ 69234353Sdim#define ST_EB64P 20 /* EB64+ (PCI/ISA?) */ 70234353Sdim#define ST_ALPHABOOK1 21 /* Alphabook1 */ 71234353Sdim#define ST_DEC_4100 22 /* "Rawhide" (PCI/EISA) */ 72234353Sdim#define ST_DEC_EV45_PBP 23 /* "Lego" K2 Passive SBC */ 73234353Sdim#define ST_DEC_2100A_A500 24 /* "Lynx" */ 74234353Sdim#define ST_DEC_XL 25 /* Alpha XL */ 75234353Sdim#define ST_EB164 26 /* EB164 (PCI/ISA) */ 76234353Sdim#define ST_DEC_1000A 27 /* "Noritake" (PCI/EISA)*/ 77234353Sdim#define ST_DEC_ALPHAVME_224 28 /* "Cortex" */ 78234353Sdim#define ST_DEC_550 30 /* "Miata" (PCI/ISA) */ 79234353Sdim#define ST_DEC_XXM 31 /* XXM */ 80234353Sdim#define ST_DEC_EV56_PBP 32 /* "Takara" */ 81234353Sdim#define ST_DEC_ALPHAVME_320 33 /* "Yukon" (VME) */ 82234353Sdim#define ST_DEC_6600 34 /* EV6-Tsunami based systems */ 83234353Sdim#define ST_DEC_WILDFIRE 35 /* "Wildfire" */ 84234353Sdim#define ST_DEC_CUSCO 36 /* "CUSCO" */ 85234353Sdim#define ST_DEC_EIGER 37 /* "Eiger" */ 86234353Sdim#define ST_DEC_TITAN 38 /* "Titan" */ 87234353Sdim#define ST_DEC_MARVEL 39 /* "Marvel" */ 88234353Sdim 89234353Sdim /* DTI systypes */ 90234353Sdim#define ST_DTI_RUFFIAN 101 /* EV56-Pyxis + ARC? */ 91234353Sdim 92234353Sdim /* Alpha Processor, Inc. systypes */ 93234353Sdim#define ST_API_NAUTILUS 201 /* EV6-AMD 751 UP1000 */ 94234353Sdim 95234353Sdim uint64_t rpb_type; /* 50: */ 96234353Sdim 97234353Sdim#define SV_MPCAP 0x00000001 /* multiprocessor capable */ 98234353Sdim 99234353Sdim#define SV_CONSOLE 0x0000001e /* console hardware mask */ 100234353Sdim#define SV_CONSOLE_DETACHED 0x00000002 101234353Sdim#define SV_CONSOLE_EMBEDDED 0x00000004 102234353Sdim 103234353Sdim#define SV_POWERFAIL 0x000000e0 /* powerfail mask */ 104234353Sdim#define SV_PF_UNITED 0x00000020 105234353Sdim#define SV_PF_SEPARATE 0x00000040 106234353Sdim#define SV_PF_BBACKUP 0x00000060 107234353Sdim#define SV_PF_ACTION 0x00000100 /* powerfail restart */ 108234353Sdim 109234353Sdim#define SV_GRAPHICS 0x00000200 /* graphic engine present */ 110234353Sdim 111234353Sdim#define SV_ST_MASK 0x0000fc00 /* system type mask */ 112234353Sdim#define SV_ST_RESERVED 0x00000000 /* RESERVED */ 113234353Sdim 114234353Sdim/* 115234353Sdim * System types for the DEC 3000/500 (Flamingo) Family 116234353Sdim */ 117234353Sdim#define SV_ST_SANDPIPER 0x00000400 /* Sandpiper; 3000/400 */ 118234353Sdim#define SV_ST_FLAMINGO 0x00000800 /* Flamingo; 3000/500 */ 119234353Sdim#define SV_ST_HOTPINK 0x00000c00 /* "Hot Pink"; 3000/500X */ 120234353Sdim#define SV_ST_FLAMINGOPLUS 0x00001000 /* Flamingo+; 3000/800 */ 121234353Sdim#define SV_ST_ULTRA 0x00001400 /* "Ultra", aka Flamingo+ */ 122234353Sdim#define SV_ST_SANDPLUS 0x00001800 /* Sandpiper+; 3000/600 */ 123234353Sdim#define SV_ST_SANDPIPER45 0x00001c00 /* Sandpiper45; 3000/700 */ 124234353Sdim#define SV_ST_FLAMINGO45 0x00002000 /* Flamingo45; 3000/900 */ 125234353Sdim 126234353Sdim/* 127234353Sdim * System types for ??? 128234353Sdim */ 129234353Sdim#define SV_ST_SABLE 0x00000400 /* Sable (???) */ 130234353Sdim 131234353Sdim/* 132234353Sdim * System types for the DEC 3000/300 (Pelican) Family 133234353Sdim */ 134234353Sdim#define SV_ST_PELICAN 0x00000000 /* Pelican; 3000/300 */ 135234353Sdim#define SV_ST_PELICA 0x00000400 /* Pelica; 3000/300L */ 136234353Sdim#define SV_ST_PELICANPLUS 0x00000800 /* Pelican+; 3000/300X */ 137234353Sdim#define SV_ST_PELICAPLUS 0x00000c00 /* Pelica+; 3000/300LX */ 138234353Sdim 139234353Sdim/* 140193323Sed * System types for the AlphaStation Family 141193323Sed */ 142193323Sed#define SV_ST_AVANTI 0x00000000 /* Avanti; 400 4/233 */ 143193323Sed#define SV_ST_MUSTANG2_4_166 0x00000800 /* Mustang II; 200 4/166 */ 144193323Sed#define SV_ST_MUSTANG2_4_233 0x00001000 /* Mustang II; 200 4/233 */ 145193323Sed#define SV_ST_AVANTI_XXX 0x00001400 /* also Avanti; 400 4/233 */ 146193323Sed#define SV_ST_AVANTI_4_266 0x00002000 147224145Sdim#define SV_ST_MUSTANG2_4_100 0x00002400 /* Mustang II; 200 4/100 */ 148224145Sdim#define SV_ST_AVANTI_4_233 0x0000a800 /* AlphaStation 255/233 */ 149224145Sdim 150224145Sdim#define SV_ST_KN20AA 0x00000400 /* AlphaStation 500/600 */ 151224145Sdim 152193323Sed/* 153193323Sed * System types for the AXPvme Family 154193323Sed */ 155193323Sed#define SV_ST_AXPVME_64 0x00000000 /* 21068, 64MHz */ 156193323Sed#define SV_ST_AXPVME_160 0x00000400 /* 21066, 160MHz */ 157193323Sed#define SV_ST_AXPVME_100 0x00000c00 /* 21066A, 99MHz */ 158193323Sed#define SV_ST_AXPVME_230 0x00001000 /* 21066A, 231MHz */ 159193323Sed#define SV_ST_AXPVME_66 0x00001400 /* 21066A, 66MHz */ 160193323Sed#define SV_ST_AXPVME_166 0x00001800 /* 21066A, 165MHz */ 161193323Sed#define SV_ST_AXPVME_264 0x00001c00 /* 21066A, 264MHz */ 162193323Sed 163193323Sed/* 164193323Sed * System types for the EB164 Family 165193323Sed */ 166193323Sed#define SV_ST_EB164_266 0x00000400 /* EB164, 266MHz */ 167193323Sed#define SV_ST_EB164_300 0x00000800 /* EB164, 300MHz */ 168193323Sed#define SV_ST_ALPHAPC164_366 0x00000c00 /* AlphaPC164, 366MHz */ 169193323Sed#define SV_ST_ALPHAPC164_400 0x00001000 /* AlphaPC164, 400MHz */ 170193323Sed#define SV_ST_ALPHAPC164_433 0x00001400 /* AlphaPC164, 433MHz */ 171193323Sed#define SV_ST_ALPHAPC164_466 0x00001800 /* AlphaPC164, 466MHz */ 172193323Sed#define SV_ST_ALPHAPC164_500 0x00001c00 /* AlphaPC164, 500MHz */ 173193323Sed#define SV_ST_ALPHAPC164LX_400 0x00002000 /* AlphaPC164LX, 400MHz */ 174193323Sed#define SV_ST_ALPHAPC164LX_466 0x00002400 /* AlphaPC164LX, 466MHz */ 175193323Sed#define SV_ST_ALPHAPC164LX_533 0x00002800 /* AlphaPC164LX, 533MHz */ 176193323Sed#define SV_ST_ALPHAPC164LX_600 0x00002c00 /* AlphaPC164LX, 600MHz */ 177193323Sed#define SV_ST_ALPHAPC164SX_400 0x00003000 /* AlphaPC164SX, 400MHz */ 178193323Sed#define SV_ST_ALPHAPC164SX_466 0x00003400 /* AlphaPC164SX, 433MHz */ 179193323Sed#define SV_ST_ALPHAPC164SX_533 0x00003800 /* AlphaPC164SX, 533MHz */ 180193323Sed#define SV_ST_ALPHAPC164SX_600 0x00003c00 /* AlphaPC164SX, 600MHz */ 181193323Sed 182193323Sed/* 183193323Sed * System types for the Digital Personal Workstation (Miata) Family 184193323Sed * XXX These are not very complete! 185193323Sed */ 186193323Sed#define SV_ST_MIATA_1_5 0x00004c00 /* Miata 1.5 */ 187193323Sed 188193323Sed/* 189193323Sed * System types for the Tsunami family. 190193323Sed * XXX These are not very complete! 191193323Sed */ 192193323Sed#define SV_ST_DP264 0x00000400 /* AlphaPC DP264 */ 193193323Sed#define SV_ST_WARHOL 0x00000800 194193323Sed#define SV_ST_WINDJAMMER 0x00000c00 195193323Sed#define SV_ST_MONET 0x00001000 196193323Sed#define SV_ST_CLIPPER 0x00001400 /* AlphaServer ES40 */ 197193323Sed#define SV_ST_GOLDRUSH 0x00001800 /* AlphaServer DS20 */ 198193323Sed#define SV_ST_WEBBRICK 0x00001c00 /* AlphaServer DS10 */ 199193323Sed#define SV_ST_CATAMARAN 0x00002000 200193323Sed#define SV_ST_BRISBANE 0x00002400 201193323Sed#define SV_ST_MALBOURNE 0x00002800 202193323Sed#define SV_ST_FLYINGCLIPPER 0x00002c00 203193323Sed#define SV_ST_SHARK 0x00003000 /* AlphaServer DS20L */ 204193323Sed 205193323Sed uint64_t rpb_variation; /* 58 */ 206193323Sed 207193323Sed char rpb_revision[8]; /* 60; only first 4 valid */ 208193323Sed uint64_t rpb_intr_freq; /* 68; scaled by 4096 */ 209193323Sed uint64_t rpb_cc_freq; /* 70: cycle cntr frequency */ 210193323Sed u_long rpb_vptb; /* 78: virtual page tbl base */ 211193323Sed uint64_t rpb_reserved_arch; /* 80: */ 212193323Sed u_long rpb_tbhint_off; /* 88: */ 213193323Sed uint64_t rpb_pcs_cnt; /* 90: */ 214193323Sed uint64_t rpb_pcs_size; /* 98; pcs size in bytes */ 215193323Sed u_long rpb_pcs_off; /* A0: offset to pcs info */ 216193323Sed uint64_t rpb_ctb_cnt; /* A8: console terminal */ 217193323Sed uint64_t rpb_ctb_size; /* B0: ctb size in bytes */ 218193323Sed u_long rpb_ctb_off; /* B8: offset to ctb */ 219193323Sed u_long rpb_crb_off; /* C0: offset to crb */ 220234353Sdim u_long rpb_memdat_off; /* C8: memory data offset */ 221234353Sdim u_long rpb_condat_off; /* D0: config data offset */ 222212904Sdim u_long rpb_fru_off; /* D8: FRU table offset */ 223208599Srdivacky uint64_t rpb_save_term; /* E0: terminal save */ 224208599Srdivacky uint64_t rpb_save_term_val; /* E8: */ 225212904Sdim uint64_t rpb_rest_term; /* F0: terminal restore */ 226212904Sdim uint64_t rpb_rest_term_val; /* F8: */ 227234353Sdim uint64_t rpb_restart; /* 100: restart */ 228234353Sdim uint64_t rpb_restart_val; /* 108: */ 229212904Sdim uint64_t rpb_reserve_os; /* 110: */ 230208599Srdivacky uint64_t rpb_reserve_hw; /* 118: */ 231212904Sdim uint64_t rpb_checksum; /* 120: HWRPB checksum */ 232193323Sed uint64_t rpb_rxrdy; /* 128: receive ready */ 233193323Sed uint64_t rpb_txrdy; /* 130: transmit ready */ 234193323Sed u_long rpb_dsrdb_off; /* 138: HWRPB + DSRDB offset */ 235193323Sed uint64_t rpb_tbhint[8]; /* 149: TB hint block */ 236198892Srdivacky}; 237193323Sed 238193323Sed#define LOCATE_PCS(h,cpunumber) ((struct pcs *) \ 239198892Srdivacky ((char *)(h) + (h)->rpb_pcs_off + ((cpunumber) * (h)->rpb_pcs_size))) 240198892Srdivacky 241198892Srdivacky/* 242198892Srdivacky * PCS: Per-CPU information. 243198892Srdivacky */ 244207618Srdivackystruct pcs { 245207618Srdivacky uint8_t pcs_hwpcb[128]; /* 0: PAL dependent */ 246207618Srdivacky 247198090Srdivacky#define PCS_BIP 0x000001 /* boot in progress */ 248202375Srdivacky#define PCS_RC 0x000002 /* restart possible */ 249198892Srdivacky#define PCS_PA 0x000004 /* processor available */ 250198090Srdivacky#define PCS_PP 0x000008 /* processor present */ 251198090Srdivacky#define PCS_OH 0x000010 /* user halted */ 252198090Srdivacky#define PCS_CV 0x000020 /* context valid */ 253193323Sed#define PCS_PV 0x000040 /* PALcode valid */ 254193323Sed#define PCS_PMV 0x000080 /* PALcode memory valid */ 255226633Sdim#define PCS_PL 0x000100 /* PALcode loaded */ 256226633Sdim 257234353Sdim#define PCS_HALT_REQ 0xff0000 /* halt request mask */ 258226633Sdim#define PCS_HALT_DEFAULT 0x000000 259226633Sdim#define PCS_HALT_SAVE_EXIT 0x010000 260226633Sdim#define PCS_HALT_COLD_BOOT 0x020000 261226633Sdim#define PCS_HALT_WARM_BOOT 0x030000 262193323Sed#define PCS_HALT_STAY_HALTED 0x040000 263193323Sed#define PCS_mbz 0xffffffffff000000 /* 24:63 -- must be zero */ 264193323Sed uint64_t pcs_flags; /* 80: */ 265193323Sed 266234353Sdim uint64_t pcs_pal_memsize; /* 88: PAL memory size */ 267234353Sdim uint64_t pcs_pal_scrsize; /* 90: PAL scratch size */ 268218893Sdim u_long pcs_pal_memaddr; /* 98: PAL memory addr */ 269218893Sdim u_long pcs_pal_scraddr; /* A0: PAL scratch addr */ 270212904Sdim struct { 271193323Sed uint64_t 272234353Sdim minorrev : 8, /* alphabetic char 'a' - 'z' */ 273207618Srdivacky majorrev : 8, /* alphabetic char 'a' - 'z' */ 274193323Sed#define PAL_TYPE_STANDARD 0 275193323Sed#define PAL_TYPE_VMS 1 276218893Sdim#define PAL_TYPE_OSF1 2 277218893Sdim pal_type : 8, /* PALcode type: 278218893Sdim * 0 == standard 279224145Sdim * 1 == OpenVMS 280234353Sdim * 2 == OSF/1 281218893Sdim * 3-127 DIGITAL reserv. 282193323Sed * 128-255 non-DIGITAL reserv. 283193323Sed */ 284199989Srdivacky sbz1 : 8, 285193323Sed compatibility : 16, /* Compatibility revision */ 286193323Sed proc_cnt : 16; /* Processor count */ 287193323Sed } pcs_pal_rev; /* A8: */ 288193323Sed#define pcs_minorrev pcs_pal_rev.minorrev 289193323Sed#define pcs_majorrev pcs_pal_rev.majorrev 290193323Sed#define pcs_pal_type pcs_pal_rev.pal_type 291198090Srdivacky#define pcs_compatibility pcs_pal_rev.compatibility 292193323Sed#define pcs_proc_cnt pcs_pal_rev.proc_cnt 293198090Srdivacky 294234353Sdim uint64_t pcs_proc_type; /* B0: processor type */ 295224145Sdim 296224145Sdim#define PCS_PROC_EV3 1 /* EV3 */ 297198090Srdivacky#define PCS_PROC_EV4 2 /* EV4: 21064 */ 298193323Sed#define PCS_PROC_SIMULATION 3 /* Simulation */ 299193323Sed#define PCS_PROC_LCA4 4 /* LCA4: 2106[68] */ 300218893Sdim#define PCS_PROC_EV5 5 /* EV5: 21164 */ 301218893Sdim#define PCS_PROC_EV45 6 /* EV45: 21064A */ 302218893Sdim#define PCS_PROC_EV56 7 /* EV56: 21164A */ 303218893Sdim#define PCS_PROC_EV6 8 /* EV6: 21264 */ 304218893Sdim#define PCS_PROC_PCA56 9 /* PCA56: 21164PC */ 305218893Sdim#define PCS_PROC_PCA57 10 /* PCA57: 21164?? */ 306218893Sdim#define PCS_PROC_EV67 11 /* EV67: 21246A */ 307218893Sdim#define PCS_PROC_EV68CB 12 /* EV68CB: 21264C */ 308218893Sdim#define PCS_PROC_EV68AL 13 /* EV68AL: 21264B */ 309218893Sdim#define PCS_PROC_EV68CX 14 /* EV68CX: 21264D */ 310218893Sdim#define PCS_PROC_EV7 15 /* EV7: 21364 */ 311218893Sdim#define PCS_PROC_EV79 16 /* EV79: 21364?? */ 312218893Sdim#define PCS_PROC_EV69 17 /* EV69: 21264/EV69A */ 313218893Sdim 314218893Sdim#define PCS_CPU_MAJORTYPE(p) ((p)->pcs_proc_type & 0xffffffff) 315218893Sdim#define PCS_CPU_MINORTYPE(p) ((p)->pcs_proc_type >> 32) 316218893Sdim 317218893Sdim /* Minor number interpretation is processor specific. See cpu.c. */ 318218893Sdim 319218893Sdim uint64_t pcs_proc_var; /* B8: processor variation. */ 320218893Sdim 321218893Sdim#define PCS_VAR_VAXFP 0x0000000000000001 /* VAX FP support */ 322218893Sdim#define PCS_VAR_IEEEFP 0x0000000000000002 /* IEEE FP support */ 323218893Sdim#define PCS_VAR_PE 0x0000000000000004 /* Primary Eligible */ 324218893Sdim#define PCS_VAR_RESERVED 0xfffffffffffffff8 /* Reserved */ 325218893Sdim 326218893Sdim char pcs_proc_revision[8]; /* C0: only first 4 valid */ 327218893Sdim char pcs_proc_sn[16]; /* C8: only first 10 valid */ 328218893Sdim u_long pcs_machcheck; /* D8: mach chk phys addr. */ 329218893Sdim uint64_t pcs_machcheck_len; /* E0: length in bytes */ 330218893Sdim u_long pcs_halt_pcbb; /* E8: phys addr of halt PCB */ 331218893Sdim u_long pcs_halt_pc; /* F0: halt PC */ 332218893Sdim uint64_t pcs_halt_ps; /* F8: halt PS */ 333218893Sdim uint64_t pcs_halt_r25; /* 100: halt argument list */ 334218893Sdim uint64_t pcs_halt_r26; /* 108: halt return addr list */ 335218893Sdim uint64_t pcs_halt_r27; /* 110: halt procedure value */ 336218893Sdim 337218893Sdim#define PCS_HALT_RESERVED 0 338198090Srdivacky#define PCS_HALT_POWERUP 1 339193323Sed#define PCS_HALT_CONSOLE_HALT 2 340234353Sdim#define PCS_HALT_CONSOLE_CRASH 3 341193323Sed#define PCS_HALT_KERNEL_MODE 4 342234353Sdim#define PCS_HALT_KERNEL_STACK_INVALID 5 343193323Sed#define PCS_HALT_DOUBLE_ERROR_ABORT 6 344193323Sed#define PCS_HALT_SCBB 7 345207618Srdivacky#define PCS_HALT_PTBR 8 /* 9-FF: reserved */ 346193323Sed uint64_t pcs_halt_reason; /* 118: */ 347193323Sed 348193323Sed uint64_t pcs_reserved_soft; /* 120: preserved software */ 349207618Srdivacky 350193323Sed struct { /* 128: inter-console buffers */ 351207618Srdivacky u_int iccb_rxlen; 352234353Sdim u_int iccb_txlen; 353207618Srdivacky char iccb_rxbuf[80]; 354207618Srdivacky char iccb_txbuf[80]; 355202375Srdivacky } pcs_iccb; 356193323Sed 357218893Sdim#define PALvar_reserved 0 358218893Sdim#define PALvar_OpenVMS 1 359206274Srdivacky#define PALvar_OSF1 2 360210299Sed uint64_t pcs_palrevisions[16]; /* 1D0: PALcode revisions */ 361224145Sdim 362224145Sdim uint64_t pcs_reserved_arch[6]; /* 250: reserved arch */ 363224145Sdim}; 364224145Sdim 365224145Sdim/* 366224145Sdim * CTB: Console Terminal Block 367234353Sdim */ 368193323Sedstruct ctb { 369207618Srdivacky uint64_t ctb_type; /* 0: CTB type */ 370193323Sed uint64_t ctb_unit; /* 8: */ 371193323Sed uint64_t ctb_reserved; /* 16: */ 372193323Sed uint64_t ctb_len; /* 24: bytes of info */ 373193323Sed uint64_t ctb_ipl; /* 32: console ipl level */ 374207618Srdivacky u_long ctb_tintr_vec; /* 40: transmit vec (0x800) */ 375207618Srdivacky u_long ctb_rintr_vec; /* 48: receive vec (0x800) */ 376193323Sed 377208599Srdivacky#define CTB_NONE 0x00 /* no console present */ 378208599Srdivacky#define CTB_SERVICE 0x01 /* service processor */ 379208599Srdivacky#define CTB_PRINTERPORT 0x02 /* printer port on the SCC */ 380208599Srdivacky#define CTB_GRAPHICS 0x03 /* graphics device */ 381218893Sdim#define CTB_TYPE4 0x04 /* type 4 CTB */ 382208599Srdivacky#define CTB_NETWORK 0xC0 /* network device */ 383208599Srdivacky uint64_t ctb_term_type; /* 56: terminal type */ 384207618Srdivacky 385207618Srdivacky uint64_t ctb_keybd_type; /* 64: keyboard nationality */ 386207618Srdivacky u_long ctb_keybd_trans; /* 72: trans. table addr */ 387207618Srdivacky u_long ctb_keybd_map; /* 80: map table addr */ 388207618Srdivacky uint64_t ctb_keybd_state; /* 88: keyboard flags */ 389207618Srdivacky uint64_t ctb_keybd_last; /* 96: last key entered */ 390207618Srdivacky u_long ctb_font_us; /* 104: US font table addr */ 391207618Srdivacky u_long ctb_font_mcs; /* 112: MCS font table addr */ 392207618Srdivacky uint64_t ctb_font_width; /* 120: font width, height */ 393207618Srdivacky uint64_t ctb_font_height; /* 128: in pixels */ 394207618Srdivacky uint64_t ctb_mon_width; /* 136: monitor width, height */ 395207618Srdivacky uint64_t ctb_mon_height; /* 144: in pixels */ 396208599Srdivacky uint64_t ctb_dpi; /* 152: monitor dots per inch */ 397208599Srdivacky uint64_t ctb_planes; /* 160: # of planes */ 398208599Srdivacky uint64_t ctb_cur_width; /* 168: cursor width, height */ 399208599Srdivacky uint64_t ctb_cur_height; /* 176: in pixels */ 400208599Srdivacky uint64_t ctb_head_cnt; /* 184: # of heads */ 401208599Srdivacky uint64_t ctb_opwindow; /* 192: opwindow on screen */ 402218893Sdim u_long ctb_head_offset; /* 200: offset to head info */ 403208599Srdivacky u_long ctb_putchar; /* 208: output char to TURBO */ 404208599Srdivacky uint64_t ctb_io_state; /* 216: I/O flags */ 405208599Srdivacky uint64_t ctb_listen_state; /* 224: listener flags */ 406218893Sdim u_long ctb_xaddr; /* 232: extended info addr */ 407208599Srdivacky uint64_t ctb_turboslot; /* 248: TURBOchannel slot # */ 408208599Srdivacky uint64_t ctb_server_off; /* 256: offset to server info */ 409208599Srdivacky uint64_t ctb_line_off; /* 264: line parameter offset */ 410218893Sdim uint8_t ctb_csd; /* 272: console specific data */ 411218893Sdim}; 412218893Sdim 413218893Sdimstruct ctb_tt { 414218893Sdim uint64_t ctb_type; /* 0: CTB type */ 415218893Sdim uint64_t ctb_unit; /* 8: console unit */ 416218893Sdim uint64_t ctb_reserved; /* 16: reserved */ 417218893Sdim uint64_t ctb_length; /* 24: length */ 418218893Sdim uint64_t ctb_csr; /* 32: address */ 419218893Sdim uint64_t ctb_tivec; /* 40: Tx intr vector */ 420218893Sdim uint64_t ctb_rivec; /* 48: Rx intr vector */ 421218893Sdim uint64_t ctb_baud; /* 56: baud rate */ 422218893Sdim uint64_t ctb_put_sts; /* 64: PUTS status */ 423218893Sdim uint64_t ctb_get_sts; /* 72: GETS status */ 424218893Sdim uint64_t ctb_reserved0; /* 80: reserved */ 425218893Sdim}; 426218893Sdim 427218893Sdim/* 428218893Sdim * Format of the Console Terminal Block Type 4 `turboslot' field: 429218893Sdim * 430218893Sdim * 63 40 39 32 31 24 23 16 15 8 7 0 431234353Sdim * | reserved | channel | hose | bus type | bus | slot| 432234353Sdim */ 433218893Sdim#define CTB_TURBOSLOT_CHANNEL(x) (((x) >> 32) & 0xff) 434208599Srdivacky#define CTB_TURBOSLOT_HOSE(x) (((x) >> 24) & 0xff) 435207618Srdivacky#define CTB_TURBOSLOT_TYPE(x) (((x) >> 16) & 0xff) 436193323Sed#define CTB_TURBOSLOT_BUS(x) (((x) >> 8) & 0xff) 437208599Srdivacky#define CTB_TURBOSLOT_SLOT(x) ((x) & 0xff) 438208599Srdivacky 439208599Srdivacky#define CTB_TURBOSLOT_TYPE_TC 0 /* TURBOchannel */ 440208599Srdivacky#define CTB_TURBOSLOT_TYPE_ISA 1 /* ISA */ 441208599Srdivacky#define CTB_TURBOSLOT_TYPE_EISA 2 /* EISA */ 442208599Srdivacky#define CTB_TURBOSLOT_TYPE_PCI 3 /* PCI */ 443208599Srdivacky 444208599Srdivacky/* 445224145Sdim * CRD: Console Routine Descriptor 446210299Sed */ 447224145Sdimstruct crd { 448218893Sdim int64_t descriptor; 449208599Srdivacky uint64_t entry_va; 450208599Srdivacky}; 451208599Srdivacky 452208599Srdivacky/* 453208599Srdivacky * CRB: Console Routine Block 454208599Srdivacky */ 455208599Srdivackystruct crb { 456208599Srdivacky struct crd *crb_v_dispatch; /* 0: virtual dispatch addr */ 457208599Srdivacky u_long crb_p_dispatch; /* 8: phys dispatch addr */ 458234353Sdim struct crd *crb_v_fixup; /* 10: virtual fixup addr */ 459208599Srdivacky u_long crb_p_fixup; /* 18: phys fixup addr */ 460210299Sed uint64_t crb_map_cnt; /* 20: phys/virt map entries */ 461210299Sed uint64_t crb_page_cnt; /* 28: pages to be mapped */ 462210299Sed}; 463210299Sed 464210299Sed/* 465210299Sed * MDDT: Memory Data Descriptor Table 466210299Sed */ 467210299Sedstruct mddt { 468210299Sed int64_t mddt_cksum; /* 0: 7-N checksum */ 469210299Sed u_long mddt_physaddr; /* 8: bank config addr 470210299Sed * IMPLEMENTATION SPECIFIC 471210299Sed */ 472210299Sed uint64_t mddt_cluster_cnt; /* 10: memory cluster count */ 473210299Sed struct mddt_cluster { 474210299Sed u_long mddt_pfn; /* 0: starting PFN */ 475210299Sed uint64_t mddt_pg_cnt; /* 8: 8KB page count */ 476210299Sed uint64_t mddt_pg_test; /* 10: tested page count */ 477210299Sed u_long mddt_v_bitaddr; /* 18: bitmap virt addr */ 478210299Sed u_long mddt_p_bitaddr; /* 20: bitmap phys addr */ 479210299Sed int64_t mddt_bit_cksum; /* 28: bitmap checksum */ 480207618Srdivacky 481207618Srdivacky#define MDDT_NONVOLATILE 0x10 /* cluster is non-volatile */ 482193323Sed#define MDDT_PALCODE 0x01 /* console and PAL only */ 483193323Sed#define MDDT_SYSTEM 0x00 /* system software only */ 484193323Sed#define MDDT_mbz 0xfffffffffffffffc /* 2:63 -- must be zero */ 485193323Sed int64_t mddt_usage; /* 30: bitmap permissions */ 486193323Sed } mddt_clusters[1]; /* variable length array */ 487221345Sdim}; 488221345Sdim 489221345Sdim/* 490198090Srdivacky * DSR: Dynamic System Recognition. We're interested in the sysname 491207618Srdivacky * offset. The data pointed to by sysname is: 492207618Srdivacky * 493207618Srdivacky * [8 bytes: length of system name][N bytes: system name string] 494207618Srdivacky * 495200581Srdivacky * The system name string is NUL-terminated. 496193323Sed */ 497199989Srdivackystruct dsrdb { 498207618Srdivacky int64_t dsr_smm; /* 0: SMM number */ 499207618Srdivacky uint64_t dsr_lurt_off; /* 8: LURT table offset */ 500193323Sed uint64_t dsr_sysname_off; /* 16: offset to sysname */ 501193323Sed}; 502210299Sed 503193323Sed/* 504193323Sed * The DSR appeared in version 5 of the HWRPB. 505193323Sed */ 506193323Sed#define HWRPB_DSRDB_MINVERS 5 507193323Sed 508198090Srdivacky#ifdef _KERNEL 509193323Sedextern int cputype; 510198090Srdivackyextern struct rpb *hwrpb; 511193323Sed#endif 512193323Sed 513198090Srdivacky#endif /* ASSEMBLER */ 514202375Srdivacky