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