BSD 4_3 release
[unix-history] / usr / src / sys / vax / cpu.h
index db8e980..3acf3fc 100644 (file)
@@ -1,4 +1,10 @@
-/*     cpu.h   6.1     83/07/29        */
+/*
+ * Copyright (c) 1982, 1986 Regents of the University of California.
+ * All rights reserved.  The Berkeley software License Agreement
+ * specifies the terms and conditions for redistribution.
+ *
+ *     @(#)cpu.h       7.1 (Berkeley) 6/5/86
+ */
 
 #ifndef LOCORE
 /*
 
 #ifndef LOCORE
 /*
@@ -10,6 +16,12 @@ union cpusid {
                u_int   :24,
                        cp_type:8;
        } cpuany;
                u_int   :24,
                        cp_type:8;
        } cpuany;
+       struct cpu8600 {
+               u_int   cp_sno:12,              /* serial number */
+                       cp_plant:4,             /* plant number */
+                       cp_eco:8,               /* eco level */
+                       cp_type:8;              /* VAX_8600 */
+       } cpu8600;
        struct cpu780 {
                u_int   cp_sno:12,              /* serial number */
                        cp_plant:3,             /* plant number */
        struct cpu780 {
                u_int   cp_sno:12,              /* serial number */
                        cp_plant:3,             /* plant number */
@@ -22,14 +34,39 @@ union cpusid {
                        :8,
                        cp_type:8;              /* VAX_750 */
        } cpu750;
                        :8,
                        cp_type:8;              /* VAX_750 */
        } cpu750;
-       /* need structure for 730 */
+       struct cpu730 {
+               u_int   :8,                     /* reserved */
+                       cp_urev:8,              /* ucode rev level */
+                       :8,                     /* reserved */
+                       cp_type:8;              /* VAX_730 */
+       } cpu730;
+       struct cpu630 {
+               u_int   :24,                    /* reserved */
+                       cp_type:8;              /* VAX_630 */
+       } cpu630;
 };
 #endif
 };
 #endif
+/*
+ * Vax CPU types.
+ * Similar types are grouped with their earliest example.
+ */
 #define        VAX_780         1
 #define        VAX_750         2
 #define        VAX_730         3
 #define        VAX_780         1
 #define        VAX_750         2
 #define        VAX_730         3
+#define VAX_8600       4
+#define        VAX_630         8
 
 
-#define        VAX_MAX         3
+#define        VAX_MAX         8
+
+/*
+ * Main IO backplane types.
+ * This gives us a handle on how to do autoconfiguration.
+ */
+#define        IO_SBI780       1
+#define        IO_CMI750       2
+#define        IO_XXX730       3
+#define IO_ABUS                4
+#define IO_QBUS                5
 
 #ifndef LOCORE
 /*
 
 #ifndef LOCORE
 /*
@@ -37,18 +74,34 @@ union cpusid {
  */
 struct percpu {
        short   pc_cputype;             /* cpu type code */
  */
 struct percpu {
        short   pc_cputype;             /* cpu type code */
-       short   pc_nnexus;              /* number of nexus slots */
-       struct  nexus *pc_nexbase;      /* base of nexus space */
+       short   pc_cpuspeed;            /* relative speed of cpu */
+       short   pc_nioa;                /* number of IO adaptors/nexus blocks */
+       struct  iobus *pc_io;           /* descriptions of IO adaptors */
+};
+
+struct iobus {
+       int     io_type;                /* io adaptor types */
+       caddr_t io_addr;                /* phys address of IO adaptor */
+       int     io_size;                /* size of an IO space */
+       caddr_t io_details;             /* specific to adaptor types */
+};
+
+/*
+ * Description of a main bus that maps "nexi", ala the 780 SBI.
+ */
+struct nexusconnect {
+       short   psb_nnexus;             /* number of nexus slots */
+       struct  nexus *psb_nexbase;     /* base of nexus space */
 /* we should be able to have just one address for the unibus memories */
 /* and calculate successive addresses by adding to the base, but the 750 */
 /* doesn't obey the sensible rule: uba1 has a lower address than uba0! */
 /* we should be able to have just one address for the unibus memories */
 /* and calculate successive addresses by adding to the base, but the 750 */
 /* doesn't obey the sensible rule: uba1 has a lower address than uba0! */
-       caddr_t *pc_umaddr;             /* unibus memory addresses */
-       short   pc_nubabdp;             /* number of bdp's per uba */
-       short   pc_haveubasr;           /* have uba status register */
+       caddr_t *psb_umaddr;            /* unibus memory addresses */
+       short   psb_nubabdp;            /* number of bdp's per uba */
+       short   psb_haveubasr;          /* have uba status register */
 /* the 750 has some slots which don't promise to tell you their types */
 /* if this pointer is non-zero, then you get the type from this array */
 /* rather than from the (much more sensible) low byte of the config register */
 /* the 750 has some slots which don't promise to tell you their types */
 /* if this pointer is non-zero, then you get the type from this array */
 /* rather than from the (much more sensible) low byte of the config register */
-       short   *pc_nextype;            /* botch */
+       short   *psb_nextype;           /* botch */
 };
 
 #ifdef KERNEL
 };
 
 #ifdef KERNEL