|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1982, 1986, 1988 Regents of the University of California. ! 3: * All rights reserved. The Berkeley software License Agreement ! 4: * specifies the terms and conditions for redistribution. ! 5: * ! 6: * @(#)cpu.h 7.5 (Berkeley) 7/9/88 ! 7: */ ! 8: ! 9: #ifndef LOCORE ! 10: /* ! 11: * Cpu identification, from SID register. ! 12: */ ! 13: union cpusid { ! 14: int cpusid; ! 15: struct cpuany { ! 16: u_int :24, ! 17: cp_type:8; ! 18: } cpuany; ! 19: struct cpu8600 { ! 20: u_int cp_sno:12, /* serial number */ ! 21: cp_plant:4, /* plant number */ ! 22: cp_eco:8, /* eco level */ ! 23: cp_type:8; /* VAX_8600 */ ! 24: } cpu8600; ! 25: struct cpu8200 { ! 26: u_int cp_urev:8, /* ucode rev */ ! 27: cp_secp:1, /* secondary patch? */ ! 28: cp_patch:10, /* patch number */ ! 29: cp_hrev:4, /* hardware rev */ ! 30: cp_5:1, /* true iff KA825 */ ! 31: cp_type:8; /* VAX_8200 */ ! 32: } cpu8200; ! 33: struct cpu780 { ! 34: u_int cp_sno:12, /* serial number */ ! 35: cp_plant:3, /* plant number */ ! 36: cp_eco:8, /* eco level */ ! 37: cp_5:1, /* true iff 785 */ ! 38: cp_type:8; /* VAX_780 */ ! 39: } cpu780; ! 40: struct cpu750 { ! 41: u_int cp_hrev:8, /* hardware rev level */ ! 42: cp_urev:8, /* ucode rev level */ ! 43: :8, ! 44: cp_type:8; /* VAX_750 */ ! 45: } cpu750; ! 46: struct cpu730 { ! 47: u_int :8, /* reserved */ ! 48: cp_urev:8, /* ucode rev level */ ! 49: :8, /* reserved */ ! 50: cp_type:8; /* VAX_730 */ ! 51: } cpu730; ! 52: struct cpu630 { ! 53: u_int cp_hrev:8, /* hardware rev level */ ! 54: cp_urev:8, /* ucode rev level */ ! 55: :8, ! 56: cp_type:8; /* VAX_630 */ ! 57: } cpu630; ! 58: }; ! 59: #endif ! 60: /* ! 61: * Vax CPU types. ! 62: * Similar types are grouped with their earliest example. ! 63: */ ! 64: #define VAX_780 1 ! 65: #define VAX_750 2 ! 66: #define VAX_730 3 ! 67: #define VAX_8600 4 ! 68: #define VAX_8200 5 ! 69: #define VAX_8800 6 ! 70: #define VAX_8500 6 /* same as 8800, 8700 */ ! 71: #define VAX_610 7 /* uVAX I */ ! 72: #define VAX_630 8 /* uVAX II */ ! 73: ! 74: #define VAX_MAX 8 ! 75: ! 76: /* ! 77: * Main IO backplane types. ! 78: * This gives us a handle on how to do autoconfiguration. ! 79: */ ! 80: #define IO_SBI780 1 ! 81: #define IO_CMI750 2 ! 82: #define IO_XXX730 3 ! 83: #define IO_ABUS 4 ! 84: #define IO_QBUS 5 ! 85: #define IO_BI 6 ! 86: #define IO_NMI 7 ! 87: ! 88: #ifndef LOCORE ! 89: /* ! 90: * CPU-dependent operations. ! 91: */ ! 92: struct clockops { ! 93: int (*clkstartrt)(); /* start real time clock */ ! 94: int (*clkread)(); /* set system time from clock */ ! 95: int (*clkwrite)(); /* reset clock from system time */ ! 96: }; ! 97: ! 98: struct cpuops { ! 99: struct clockops *cpu_clock; /* clock operations */ ! 100: int (*cpu_memenable)(); /* memory error (CRD intr) enable */ ! 101: int (*cpu_memerr)(); /* memory error handler */ ! 102: int (*cpu_mchk)(); /* machine check handler */ ! 103: int (*cpu_init)(); /* special initialisation, if any */ ! 104: }; ! 105: ! 106: /* return values from cpu_mchk */ ! 107: #define MCHK_PANIC -1 ! 108: #define MCHK_RECOVERED 0 ! 109: ! 110: /* ! 111: * Per-cpu information for system. ! 112: */ ! 113: struct percpu { ! 114: short pc_cputype; /* cpu type code */ ! 115: short pc_cpuspeed; /* relative speed of cpu */ ! 116: short pc_nioa; /* number of IO adaptors/nexus blocks */ ! 117: struct iobus *pc_io; /* descriptions of IO adaptors */ ! 118: struct cpuops *pc_ops; /* per-cpu operations */ ! 119: }; ! 120: ! 121: /* ! 122: * Generic description of an I/O "adaptor" ! 123: * (any top-level I/O bus visible to software ! 124: * and requiring autoconfiguration). ! 125: * The remainder of the description ! 126: * is pointed to by io_details. ! 127: */ ! 128: struct iobus { ! 129: int io_type; /* io adaptor types */ ! 130: caddr_t io_addr; /* phys address of IO adaptor */ ! 131: int io_size; /* size of an IO space */ ! 132: caddr_t io_details; /* specific to adaptor types */ ! 133: }; ! 134: ! 135: /* ! 136: * Description of a main bus that maps "nexi", ala the 780 SBI. ! 137: */ ! 138: struct nexusconnect { ! 139: short psb_nnexus; /* number of nexus slots */ ! 140: struct nexus *psb_nexbase; /* base of nexus space */ ! 141: short psb_ubatype; /* type of "unibus adaptor" */ ! 142: short psb_nubabdp; /* number of bdp's per uba */ ! 143: caddr_t *psb_umaddr; /* unibus memory addresses */ ! 144: /* the 750 has some slots which don't promise to tell you their types */ ! 145: /* if this pointer is non-zero, then you get the type from this array */ ! 146: /* rather than from the (much more sensible) low byte of the config register */ ! 147: short *psb_nextype; /* botch */ ! 148: }; ! 149: ! 150: /* ! 151: * Description of a BI bus configuration. ! 152: */ ! 153: struct bibus { ! 154: struct bi_node *pbi_base; /* base of node space */ ! 155: /* that cannot possibly be all! */ ! 156: }; ! 157: ! 158: /* ! 159: * Description of a Q-bus configuration. ! 160: */ ! 161: struct qbus { ! 162: int qb_type; /* type of "unibus adaptor" */ ! 163: int qb_memsize; /* size of (used) memory, pages */ ! 164: struct pte *qb_map; /* base of map registers */ ! 165: caddr_t qb_maddr; /* "unibus" memory address */ ! 166: caddr_t qb_iopage; /* "unibus" IO page address */ ! 167: }; ! 168: ! 169: #ifdef KERNEL ! 170: int cpu; ! 171: #if VAX8800 || VAX8200 ! 172: int mastercpu; /* if multiple cpus, this identifies master */ ! 173: #endif ! 174: struct percpu percpu[]; ! 175: struct cpuops *cpuops; ! 176: #endif ! 177: ! 178: /* ! 179: * Enable realtime clock (always enabled). ! 180: */ ! 181: #define enablertclock() ! 182: #endif /* LOCORE */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.