Annotation of 43BSDReno/sys/vax/cpu.h, revision 1.1.1.1

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.6 (Berkeley) 8/27/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:        struct cpu650 {
                     59:                u_int   cp_urev:8,              /* ucode rev level */
                     60:                        :16,                    /* reserved */
                     61:                        cp_type:8;              /* VAX_650 */
                     62:        } cpu650;
                     63: };
                     64: #endif
                     65: /*
                     66:  * Vax CPU types.
                     67:  * Similar types are grouped with their earliest example.
                     68:  */
                     69: #define        VAX_780         1
                     70: #define        VAX_750         2
                     71: #define        VAX_730         3
                     72: #define        VAX_8600        4
                     73: #define        VAX_8200        5
                     74: #define        VAX_8800        6
                     75: #define        VAX_8500        6       /* same as 8800, 8700 */
                     76: #define        VAX_610         7       /* uVAX I */
                     77: #define        VAX_630         8       /* uVAX II */
                     78: #define        VAX_650         10      /* uVAX 3000 */
                     79: 
                     80: #define        VAX_MAX         10
                     81: 
                     82: /*
                     83:  * Main IO backplane types.
                     84:  * This gives us a handle on how to do autoconfiguration.
                     85:  */
                     86: #define        IO_SBI780       1
                     87: #define        IO_CMI750       2
                     88: #define        IO_XXX730       3
                     89: #define IO_ABUS                4
                     90: #define IO_QBUS                5
                     91: #define        IO_BI           6
                     92: #define        IO_NMI          7
                     93: 
                     94: #ifndef LOCORE
                     95: /*
                     96:  * CPU-dependent operations.
                     97:  */
                     98: struct clockops {
                     99:        int     (*clkstartrt)();        /* start real time clock */
                    100:        int     (*clkread)();           /* set system time from clock */
                    101:        int     (*clkwrite)();          /* reset clock from system time */
                    102: };
                    103: 
                    104: struct cpuops {
                    105:        struct  clockops *cpu_clock;    /* clock operations */
                    106:        int     (*cpu_memenable)();     /* memory error (CRD intr) enable */
                    107:        int     (*cpu_memerr)();        /* memory error handler */
                    108:        int     (*cpu_mchk)();          /* machine check handler */
                    109:        int     (*cpu_init)();          /* special initialisation, if any */
                    110: };
                    111: 
                    112: /* return values from cpu_mchk */
                    113: #define        MCHK_PANIC      -1
                    114: #define        MCHK_RECOVERED  0
                    115: 
                    116: /*
                    117:  * Per-cpu information for system.
                    118:  */
                    119: struct percpu {
                    120:        short   pc_cputype;             /* cpu type code */
                    121:        short   pc_cpuspeed;            /* relative speed of cpu */
                    122:        short   pc_nioa;                /* number of IO adaptors/nexus blocks */
                    123:        struct  iobus *pc_io;           /* descriptions of IO adaptors */
                    124:        struct  cpuops *pc_ops;         /* per-cpu operations */
                    125: };
                    126: 
                    127: /*
                    128:  * Generic description of an I/O "adaptor"
                    129:  * (any top-level I/O bus visible to software
                    130:  * and requiring autoconfiguration).
                    131:  * The remainder of the description
                    132:  * is pointed to by io_details.
                    133:  */
                    134: struct iobus {
                    135:        int     io_type;                /* io adaptor types */
                    136:        caddr_t io_addr;                /* phys address of IO adaptor */
                    137:        int     io_size;                /* size of an IO space */
                    138:        caddr_t io_details;             /* specific to adaptor types */
                    139: };
                    140: 
                    141: /*
                    142:  * Description of a main bus that maps "nexi", ala the 780 SBI.
                    143:  */
                    144: struct nexusconnect {
                    145:        short   psb_nnexus;             /* number of nexus slots */
                    146:        struct  nexus *psb_nexbase;     /* base of nexus space */
                    147:        short   psb_ubatype;            /* type of "unibus adaptor" */
                    148:        short   psb_nubabdp;            /* number of bdp's per uba */
                    149:        caddr_t *psb_umaddr;            /* unibus memory addresses */
                    150: /* the 750 has some slots which don't promise to tell you their types */
                    151: /* if this pointer is non-zero, then you get the type from this array */
                    152: /* rather than from the (much more sensible) low byte of the config register */
                    153:        short   *psb_nextype;           /* botch */
                    154: };
                    155: 
                    156: /*
                    157:  * Description of a BI bus configuration.
                    158:  */
                    159: struct bibus {
                    160:        struct  bi_node *pbi_base;      /* base of node space */
                    161:        /* that cannot possibly be all! */
                    162: };
                    163: 
                    164: /*
                    165:  * Description of a Q-bus configuration.
                    166:  */
                    167: struct qbus {
                    168:        int     qb_type;                /* type of "unibus adaptor" */
                    169:        int     qb_memsize;             /* size of (used) memory, pages */
                    170:        struct  pte *qb_map;            /* base of map registers */
                    171:        caddr_t qb_maddr;               /* "unibus" memory address */
                    172:        caddr_t qb_iopage;              /* "unibus" IO page address */
                    173: };
                    174: 
                    175: #ifdef KERNEL
                    176: int    cpu;
                    177: #if VAX8800 || VAX8200
                    178: int    mastercpu;              /* if multiple cpus, this identifies master */
                    179: #endif
                    180: struct percpu percpu[];
                    181: struct cpuops *cpuops;
                    182: #endif
                    183: 
                    184: /*
                    185:  * Enable realtime clock (always enabled).
                    186:  */
                    187: #define        enablertclock()
                    188: #endif /* LOCORE */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.