Add support for microvax 3000.
authorThomas Ferrin <tef@ucbvax.Berkeley.EDU>
Sat, 27 Aug 1988 22:01:20 +0000 (14:01 -0800)
committerThomas Ferrin <tef@ucbvax.Berkeley.EDU>
Sat, 27 Aug 1988 22:01:20 +0000 (14:01 -0800)
SCCS-vsn: sys/vax/include/cpu.h 7.6
SCCS-vsn: sys/vax/include/mtpr.h 7.4
SCCS-vsn: sys/vax/vax/emulate.s 7.3
SCCS-vsn: sys/vax/vax/locore.s 7.13
SCCS-vsn: sys/vax/vax/autoconf.c 7.16
SCCS-vsn: sys/vax/vax/clock.c 7.4
SCCS-vsn: sys/vax/vax/cpudata.c 7.5
SCCS-vsn: sys/vax/vax/genassym.c 7.3
SCCS-vsn: sys/vax/vax/machdep.c 7.15

usr/src/sys/vax/include/cpu.h
usr/src/sys/vax/include/mtpr.h
usr/src/sys/vax/vax/autoconf.c
usr/src/sys/vax/vax/clock.c
usr/src/sys/vax/vax/cpudata.c
usr/src/sys/vax/vax/emulate.s
usr/src/sys/vax/vax/genassym.c
usr/src/sys/vax/vax/locore.s
usr/src/sys/vax/vax/machdep.c

index 27d3d76..2021cbf 100644 (file)
@@ -3,7 +3,7 @@
  * All rights reserved.  The Berkeley software License Agreement
  * specifies the terms and conditions for redistribution.
  *
  * All rights reserved.  The Berkeley software License Agreement
  * specifies the terms and conditions for redistribution.
  *
- *     @(#)cpu.h       7.5 (Berkeley) %G%
+ *     @(#)cpu.h       7.6 (Berkeley) %G%
  */
 
 #ifndef LOCORE
  */
 
 #ifndef LOCORE
@@ -55,6 +55,11 @@ union cpusid {
                        :8,
                        cp_type:8;              /* VAX_630 */
        } cpu630;
                        :8,
                        cp_type:8;              /* VAX_630 */
        } cpu630;
+       struct cpu650 {
+               u_int   cp_urev:8,              /* ucode rev level */
+                       :16,                    /* reserved */
+                       cp_type:8;              /* VAX_650 */
+       } cpu650;
 };
 #endif
 /*
 };
 #endif
 /*
@@ -70,8 +75,9 @@ union cpusid {
 #define        VAX_8500        6       /* same as 8800, 8700 */
 #define        VAX_610         7       /* uVAX I */
 #define        VAX_630         8       /* uVAX II */
 #define        VAX_8500        6       /* same as 8800, 8700 */
 #define        VAX_610         7       /* uVAX I */
 #define        VAX_630         8       /* uVAX II */
+#define        VAX_650         10      /* uVAX 3000 */
 
 
-#define        VAX_MAX         8
+#define        VAX_MAX         10
 
 /*
  * Main IO backplane types.
 
 /*
  * Main IO backplane types.
index 8644490..5b41809 100644 (file)
@@ -3,7 +3,7 @@
  * All rights reserved.  The Berkeley software License Agreement
  * specifies the terms and conditions for redistribution.
  *
  * All rights reserved.  The Berkeley software License Agreement
  * specifies the terms and conditions for redistribution.
  *
- *     @(#)mtpr.h      7.3 (Berkeley) %G%
+ *     @(#)mtpr.h      7.4 (Berkeley) %G%
  */
 
 /*
  */
 
 /*
@@ -36,7 +36,7 @@
 #define        ICCS    0x18            /* interval clock control */
 #define        NICR    0x19            /* next interval count */
 #define        ICR     0x1a            /* interval count */
 #define        ICCS    0x18            /* interval clock control */
 #define        NICR    0x19            /* next interval count */
 #define        ICR     0x1a            /* interval count */
-#if VAX8600 || VAX8200 || VAX780 || VAX750 || VAX730
+#if VAX8600 || VAX8200 || VAX780 || VAX750 || VAX730 || VAX650
 #define        TODR    0x1b            /* time of year (day) */
 #endif
 #if VAX750 || VAX730
 #define        TODR    0x1b            /* time of year (day) */
 #endif
 #if VAX750 || VAX730
 #define        RXDB    0x21            /* console receiver data buffer */
 #define        TXCS    0x22            /* console transmitter control and status */
 #define        TXDB    0x23            /* console transmitter data buffer */
 #define        RXDB    0x21            /* console receiver data buffer */
 #define        TXCS    0x22            /* console transmitter control and status */
 #define        TXDB    0x23            /* console transmitter data buffer */
-#if VAX8200 || VAX750 || VAX730
+#if VAX8200 || VAX750 || VAX730 || VAX650
 #define        TBDR    0x24            /* translation buffer disable register */
 #define        CADR    0x25            /* cache disable register */
 #define        MCESR   0x26            /* machine check error summary register */
 #endif
 #define        TBDR    0x24            /* translation buffer disable register */
 #define        CADR    0x25            /* cache disable register */
 #define        MCESR   0x26            /* machine check error summary register */
 #endif
-#if VAX750 || VAX730
+#if VAX750 || VAX730 || VAX650
 #define        CAER    0x27            /* cache error */
 #endif
 #define        ACCS    0x28            /* accelerator control and status */
 #define        CAER    0x27            /* cache error */
 #endif
 #define        ACCS    0x28            /* accelerator control and status */
@@ -77,8 +77,8 @@
 #define        SBITA   0x35            /* SBI timeout address */
 #define        SBIQC   0x36            /* SBI quadword clear */
 #endif
 #define        SBITA   0x35            /* SBI timeout address */
 #define        SBIQC   0x36            /* SBI quadword clear */
 #endif
-#if VAX750 || VAX730 || VAX630
-#define        IUR     0x37            /* init unibus (Qbus on 630) register */
+#if VAX750 || VAX730 || VAX630 || VAX650
+#define        IUR     0x37            /* init unibus (Qbus on 6x0) register */
 #endif
 #define        MAPEN   0x38            /* memory management enable */
 #define        TBIA    0x39            /* translation buffer invalidate all */
 #endif
 #define        MAPEN   0x38            /* memory management enable */
 #define        TBIA    0x39            /* translation buffer invalidate all */
@@ -91,7 +91,7 @@
 #endif
 #define        PMR     0x3d            /* performance monitor enable */
 #define        SID     0x3e            /* system identification */
 #endif
 #define        PMR     0x3d            /* performance monitor enable */
 #define        SID     0x3e            /* system identification */
-#if VAX8600 || VAX8200
+#if VAX8600 || VAX8200 || VAX650
 #define TBCHK  0x3f            /* Translation Buffer Check */
 #endif
 #if VAX8600
 #define TBCHK  0x3f            /* Translation Buffer Check */
 #endif
 #if VAX8600
index 6e761b8..fd2d2c3 100644 (file)
@@ -3,7 +3,7 @@
  * All rights reserved.  The Berkeley software License Agreement
  * specifies the terms and conditions for redistribution.
  *
  * All rights reserved.  The Berkeley software License Agreement
  * specifies the terms and conditions for redistribution.
  *
- *     @(#)autoconf.c  7.15 (Berkeley) %G%
+ *     @(#)autoconf.c  7.16 (Berkeley) %G%
  */
 
 /*
  */
 
 /*
@@ -153,6 +153,11 @@ VAX 11/78%c, serial# %d(%d), hardware ECO level %d(%d)\n",
        case VAX_630:
                printf("MicroVAX-II\n");
                break;
        case VAX_630:
                printf("MicroVAX-II\n");
                break;
+#endif
+#if VAX650
+       case VAX_650:
+               printf("MicroVAX 3000, ucode rev %d\n", cpusid.cpu650.cp_urev);
+               break;
 #endif
        }
        for (ocp = percpu; ocp->pc_cputype; ocp++)
 #endif
        }
        for (ocp = percpu; ocp->pc_cputype; ocp++)
@@ -218,7 +223,7 @@ probeio(pcpu)
 
                switch (iob->io_type) {
 
 
                switch (iob->io_type) {
 
-#if VAX630
+#if VAX630 || VAX650
                case IO_QBUS:
                        probeqbus((struct qbus *)iob->io_details);
                        break;
                case IO_QBUS:
                        probeqbus((struct qbus *)iob->io_details);
                        break;
index 1c72782..4c12207 100644 (file)
@@ -1,9 +1,10 @@
+
 /*
  * Copyright (c) 1982, 1986, 1988 Regents of the University of California.
  * All rights reserved.  The Berkeley software License Agreement
  * specifies the terms and conditions for redistribution.
  *
 /*
  * Copyright (c) 1982, 1986, 1988 Regents of the University of California.
  * All rights reserved.  The Berkeley software License Agreement
  * specifies the terms and conditions for redistribution.
  *
- *     @(#)clock.c     7.3 (Berkeley) %G%
+ *     @(#)clock.c     7.4 (Berkeley) %G%
  */
 
 #include "param.h"
  */
 
 #include "param.h"
@@ -115,7 +116,7 @@ vaxstd_clkstartrt()
 }
 #endif
 
 }
 #endif
 
-#if VAX8600 || VAX780 || VAX750 || VAX730
+#if VAX8600 || VAX780 || VAX750 || VAX730 || VAX650
 vaxstd_clkread(base)
        time_t base;
 {
 vaxstd_clkread(base)
        time_t base;
 {
index 4f277d0..16a2540 100644 (file)
@@ -3,7 +3,7 @@
  * All rights reserved.  The Berkeley software License Agreement
  * specifies the terms and conditions for redistribution.
  *
  * All rights reserved.  The Berkeley software License Agreement
  * specifies the terms and conditions for redistribution.
  *
- *     @(#)cpudata.c   7.4 (Berkeley) %G%
+ *     @(#)cpudata.c   7.5 (Berkeley) %G%
  */
 
 #include "pte.h"
  */
 
 #include "pte.h"
@@ -126,7 +126,7 @@ struct nexusconnect xxx730 = {
 };
 struct iobus io730[] = { IO_XXX730, 0, 0, (caddr_t)&xxx730 };
 #endif
 };
 struct iobus io730[] = { IO_XXX730, 0, 0, (caddr_t)&xxx730 };
 #endif
-#if VAX630
+#if VAX630 || VAX650
 struct qbus qbus630 = {
        QBA, QBAPAGES, QBAMAP630, (caddr_t)QMEM630, (caddr_t)QIOPAGE630
 };
 struct qbus qbus630 = {
        QBA, QBAPAGES, QBAMAP630, (caddr_t)QMEM630, (caddr_t)QIOPAGE630
 };
@@ -157,6 +157,13 @@ struct clockops ka630_clockops = {
 };
 #endif
 
 };
 #endif
 
+#if VAX650
+int ka650_clkstartrt(), vaxstd_clkread(), vaxstd_clkwrite();
+struct clockops ka650_clockops = {
+       ka650_clkstartrt, vaxstd_clkread, vaxstd_clkwrite
+};
+#endif
+
 /*
  * CPU dependent routines.
  */
 /*
  * CPU dependent routines.
  */
@@ -202,6 +209,13 @@ struct     cpuops ka630_ops = {
 };
 #endif
 
 };
 #endif
 
+#if VAX650
+int    ka650_memnop(), ka650_memerr(), ka650_mchk(), ka650_init();
+struct cpuops ka650_ops = {
+       &ka650_clockops, ka650_memnop, ka650_memerr, ka650_mchk, ka650_init
+};
+#endif
+
 struct percpu percpu[] = {
 #if VAX8600
        { VAX_8600, 6, 2, io8600, &ka860_ops },
 struct percpu percpu[] = {
 #if VAX8600
        { VAX_8600, 6, 2, io8600, &ka860_ops },
@@ -220,6 +234,9 @@ struct percpu percpu[] = {
 #endif
 #if VAX630
        { VAX_630, 2, 1, io630, &ka630_ops },
 #endif
 #if VAX630
        { VAX_630, 2, 1, io630, &ka630_ops },
+#endif
+#if VAX650
+       { VAX_650, 4, 1, io630, &ka650_ops },
 #endif
        0,
 };
 #endif
        0,
 };
index 8909e84..e855cec 100644 (file)
@@ -1,8 +1,8 @@
 /*
 /*
- *     @(#)emulate.s   7.2 (Berkeley) %G%
+ *     @(#)emulate.s   7.3 (Berkeley) %G%
  */
 
  */
 
-#ifdef VAX630
+#if VAX630 || VAX650
 /*
  * String instruction emulation - MicroVAX only.  These routines are called
  * from locore.s when an "emulate" fault occurs on the MicroVAX.  They are
 /*
  * String instruction emulation - MicroVAX only.  These routines are called
  * from locore.s when an "emulate" fault occurs on the MicroVAX.  They are
index efcbcc9..efe14b9 100644 (file)
@@ -3,7 +3,7 @@
  * All rights reserved.  The Berkeley software License Agreement
  * specifies the terms and conditions for redistribution.
  *
  * All rights reserved.  The Berkeley software License Agreement
  * specifies the terms and conditions for redistribution.
  *
- *     @(#)genassym.c  7.2 (Berkeley) %G%
+ *     @(#)genassym.c  7.3 (Berkeley) %G%
  */
 
 #define KERNEL
  */
 
 #define KERNEL
@@ -11,6 +11,7 @@
 #define        VAX750  1
 #define        VAX730  1
 #define        VAX630  1
 #define        VAX750  1
 #define        VAX730  1
 #define        VAX630  1
+#define        VAX650  1
 
 #include "pte.h"
 
 
 #include "pte.h"
 
index 39de6b6..5f0087a 100644 (file)
@@ -3,7 +3,7 @@
  * All rights reserved.  The Berkeley software License Agreement
  * specifies the terms and conditions for redistribution.
  *
  * All rights reserved.  The Berkeley software License Agreement
  * specifies the terms and conditions for redistribution.
  *
- *     @(#)locore.s    7.12 (Berkeley) %G%
+ *     @(#)locore.s    7.13 (Berkeley) %G%
  */
 
 #include "psl.h"
  */
 
 #include "psl.h"
@@ -20,6 +20,7 @@
 #include "clock.h"
 #include "ioa.h"
 #include "ka630.h"
 #include "clock.h"
 #include "ioa.h"
 #include "ka630.h"
+#include "ka650.h"
 #include "ka820.h"
 #include "../vaxuba/ubareg.h"
 
 #include "ka820.h"
 #include "../vaxuba/ubareg.h"
 
@@ -113,6 +114,8 @@ SCBVEC(machcheck):
        .word   1f-0b           # 6 is 8800 (unsupported)
        .word   1f-0b           # 7 is 610  (unsupported)
        .word   1f-0b           # 8 is 630
        .word   1f-0b           # 6 is 8800 (unsupported)
        .word   1f-0b           # 7 is 610  (unsupported)
        .word   1f-0b           # 8 is 630
+       .word   1f-0b           # 9 is ???
+       .word   1f-0b           # 10 is 650
 5:
 #if defined(VAX8200) || defined(VAX750) || defined(VAX730)
        mtpr    $0xf,$MCESR
 5:
 #if defined(VAX8200) || defined(VAX750) || defined(VAX730)
        mtpr    $0xf,$MCESR
@@ -676,7 +679,7 @@ SCBVEC(ustray):
        POPR
        rei
 
        POPR
        rei
 
-#ifdef VAX630
+#if VAX630 || VAX650
 /*
  * Emulation OpCode jump table:
  *     ONLY GOES FROM 0xf8 (-8) TO 0x3B (59)
 /*
  * Emulation OpCode jump table:
  *     ONLY GOES FROM 0xf8 (-8) TO 0x3B (59)
@@ -775,7 +778,7 @@ segflt:
  */
 
 SCBVEC(emulate):
  */
 
 SCBVEC(emulate):
-#ifdef VAX630
+#if VAX630 || VAX650
        movl    r11,32(sp)              # save register r11 in unused operand
        movl    r10,36(sp)              # save register r10 in unused operand
        cvtbl   (sp),r10                # get opcode
        movl    r11,32(sp)              # save register r11 in unused operand
        movl    r10,36(sp)              # save register r10 in unused operand
        cvtbl   (sp),r10                # get opcode
@@ -791,7 +794,7 @@ SCBVEC(emulate):
        rei
 noemulate:
        addl2   $48,sp                  # adjust stack for
        rei
 noemulate:
        addl2   $48,sp                  # adjust stack for
-#endif VAX630
+#endif
        .word   0xffff                  # "reserved instruction fault"
 SCBVEC(emulateFPD):
        .word   0xffff                  # "reserved instruction fault"
        .word   0xffff                  # "reserved instruction fault"
 SCBVEC(emulateFPD):
        .word   0xffff                  # "reserved instruction fault"
@@ -873,6 +876,15 @@ _/**/mname:        .globl  _/**/mname;             \
 #endif
 #if VAX630
        SYSMAP(Ka630map ,ka630cpu       ,1              )
 #endif
 #if VAX630
        SYSMAP(Ka630map ,ka630cpu       ,1              )
+#endif
+#if VAX650
+       SYSMAP(KA650MERRmap     ,ka650merr      ,1              )
+       SYSMAP(KA650CBDmap      ,ka650cbd       ,1              )
+       SYSMAP(KA650SSCmap      ,ka650ssc       ,3              )
+       SYSMAP(KA650IPCRmap     ,ka650ipcr      ,1              )
+       SYSMAP(KA650CACHEmap    ,ka650cache     ,KA650_CACHESIZE/NBPG )
+#endif
+#ifdef QBA
        /*
         * qvss and qdss can't coexist - one map will suffice
         * for either. qvss is 256K each and qdss is 64K each.
        /*
         * qvss and qdss can't coexist - one map will suffice
         * for either. qvss is 256K each and qdss is 64K each.
@@ -881,8 +893,8 @@ _/**/mname: .globl  _/**/mname;             \
 #include "qd.h"
 #if NQV > 0 || NQD > 0
        SYSMAP(QVmap    ,qvmem          ,((512*NQV)+(128*NQD)))
 #include "qd.h"
 #if NQV > 0 || NQD > 0
        SYSMAP(QVmap    ,qvmem          ,((512*NQV)+(128*NQD)))
-#endif /* NQV || NQD */
-#endif /* VAX630 */
+#endif
+#endif
        SYSMAP(UMBAend  ,umbaend        ,0              )
 
        SYSMAP(Usrptmap ,usrpt          ,USRPTSIZE+CLSIZE )
        SYSMAP(UMBAend  ,umbaend        ,0              )
 
        SYSMAP(Usrptmap ,usrpt          ,USRPTSIZE+CLSIZE )
@@ -931,12 +943,15 @@ start:
 1:     pushl   $4; pushl r7; calls $2,_badaddr; tstl r0; bneq 9f
        acbl    $MAXMEM*1024-1,$64*1024,r7,1b
 9:
 1:     pushl   $4; pushl r7; calls $2,_badaddr; tstl r0; bneq 9f
        acbl    $MAXMEM*1024-1,$64*1024,r7,1b
 9:
-#ifdef  VAX630
-/* leave an area for uVAX II console scratch pad at the top */
+#if  VAX630 || VAX650
+/* leave an area for uVAX console scratch pad at the top */
        cmpb    _cpu,$VAX_630
        cmpb    _cpu,$VAX_630
-       bneq    1f
-       subl2   $4096,r7
+       beql    1f
+       cmpb    _cpu,$VAX_650
+       bneq    2f
 1:
 1:
+       subl2   $4096,r7
+2:
 #endif
 /* clear memory from kernel bss and pages for proc 0 u. and page table */
        movab   _edata,r6; bicl2 $SYSTEM,r6
 #endif
 /* clear memory from kernel bss and pages for proc 0 u. and page table */
        movab   _edata,r6; bicl2 $SYSTEM,r6
index 491a90e..f7f2142 100644 (file)
@@ -3,7 +3,7 @@
  * All rights reserved.  The Berkeley software License Agreement
  * specifies the terms and conditions for redistribution.
  *
  * All rights reserved.  The Berkeley software License Agreement
  * specifies the terms and conditions for redistribution.
  *
- *     @(#)machdep.c   7.14 (Berkeley) %G%
+ *     @(#)machdep.c   7.15 (Berkeley) %G%
  */
 
 #include "param.h"
  */
 
 #include "param.h"
@@ -72,11 +72,11 @@ startup(firstaddr)
        register caddr_t v;
        int maxbufs, base, residual;
 
        register caddr_t v;
        int maxbufs, base, residual;
 
-#if VAX630
+#if VAX630 || VAX650
        /*
         * Leave last 5k of phys. memory as console work area.
         */
        /*
         * Leave last 5k of phys. memory as console work area.
         */
-       if (cpu == VAX_630)
+       if (cpu == VAX_630 || cpu == VAX_650)
                maxmem -= 10;
 #endif
        /*
                maxmem -= 10;
 #endif
        /*
@@ -89,7 +89,7 @@ startup(firstaddr)
        mtpr(TBIA, 0);
        msgbufmapped = 1;
 
        mtpr(TBIA, 0);
        msgbufmapped = 1;
 
-#if VAX630
+#ifdef QBA
 #include "qv.h"
 #if NQV > 0
        /*
 #include "qv.h"
 #if NQV > 0
        /*
@@ -663,12 +663,13 @@ tocons(c)
 
        switch (cpu) {
 
 
        switch (cpu) {
 
-#if VAX8200 || VAX780 || VAX750 || VAX730 || VAX630
+#if VAX8200 || VAX780 || VAX750 || VAX730 || VAX630 || VAX650
        case VAX_8200:
        case VAX_780:
        case VAX_750:
        case VAX_730:
        case VAX_630:
        case VAX_8200:
        case VAX_780:
        case VAX_750:
        case VAX_730:
        case VAX_630:
+       case VAX_650:
                c |= TXDB_CONS;
                break;
 #endif
                c |= TXDB_CONS;
                break;
 #endif
@@ -871,12 +872,13 @@ todr()
 
        switch (cpu) {
 
 
        switch (cpu) {
 
-#if VAX8600 || VAX8200 || VAX780 || VAX750 || VAX730
+#if VAX8600 || VAX8200 || VAX780 || VAX750 || VAX730 || VAX650
        case VAX_8600:
        case VAX_8200:
        case VAX_780:
        case VAX_750:
        case VAX_730:
        case VAX_8600:
        case VAX_8200:
        case VAX_780:
        case VAX_750:
        case VAX_730:
+       case VAX_650:
                return (mfpr(TODR));
 #endif
 
                return (mfpr(TODR));
 #endif