From 802ae52e6916ba5cdbbd529f2bf21bccaccbb9be Mon Sep 17 00:00:00 2001 From: Thomas Ferrin Date: Sat, 27 Aug 1988 14:01:20 -0800 Subject: [PATCH] Add support for microvax 3000. 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 | 10 ++++++++-- usr/src/sys/vax/include/mtpr.h | 14 +++++++------- usr/src/sys/vax/vax/autoconf.c | 9 +++++++-- usr/src/sys/vax/vax/clock.c | 5 +++-- usr/src/sys/vax/vax/cpudata.c | 21 ++++++++++++++++++-- usr/src/sys/vax/vax/emulate.s | 4 ++-- usr/src/sys/vax/vax/genassym.c | 3 ++- usr/src/sys/vax/vax/locore.s | 35 ++++++++++++++++++++++++---------- usr/src/sys/vax/vax/machdep.c | 14 ++++++++------ 9 files changed, 81 insertions(+), 34 deletions(-) diff --git a/usr/src/sys/vax/include/cpu.h b/usr/src/sys/vax/include/cpu.h index 27d3d76758..2021cbf6ce 100644 --- a/usr/src/sys/vax/include/cpu.h +++ b/usr/src/sys/vax/include/cpu.h @@ -3,7 +3,7 @@ * 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 @@ -55,6 +55,11 @@ union cpusid { :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 /* @@ -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_650 10 /* uVAX 3000 */ -#define VAX_MAX 8 +#define VAX_MAX 10 /* * Main IO backplane types. diff --git a/usr/src/sys/vax/include/mtpr.h b/usr/src/sys/vax/include/mtpr.h index 864449031f..5b41809a78 100644 --- a/usr/src/sys/vax/include/mtpr.h +++ b/usr/src/sys/vax/include/mtpr.h @@ -3,7 +3,7 @@ * 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 */ -#if VAX8600 || VAX8200 || VAX780 || VAX750 || VAX730 +#if VAX8600 || VAX8200 || VAX780 || VAX750 || VAX730 || VAX650 #define TODR 0x1b /* time of year (day) */ #endif #if VAX750 || VAX730 @@ -49,12 +49,12 @@ #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 -#if VAX750 || VAX730 +#if VAX750 || VAX730 || VAX650 #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 -#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 */ @@ -91,7 +91,7 @@ #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 diff --git a/usr/src/sys/vax/vax/autoconf.c b/usr/src/sys/vax/vax/autoconf.c index 6e761b8628..fd2d2c3361 100644 --- a/usr/src/sys/vax/vax/autoconf.c +++ b/usr/src/sys/vax/vax/autoconf.c @@ -3,7 +3,7 @@ * 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; +#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++) @@ -218,7 +223,7 @@ probeio(pcpu) switch (iob->io_type) { -#if VAX630 +#if VAX630 || VAX650 case IO_QBUS: probeqbus((struct qbus *)iob->io_details); break; diff --git a/usr/src/sys/vax/vax/clock.c b/usr/src/sys/vax/vax/clock.c index 1c72782032..4c12207147 100644 --- a/usr/src/sys/vax/vax/clock.c +++ b/usr/src/sys/vax/vax/clock.c @@ -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. * - * @(#)clock.c 7.3 (Berkeley) %G% + * @(#)clock.c 7.4 (Berkeley) %G% */ #include "param.h" @@ -115,7 +116,7 @@ vaxstd_clkstartrt() } #endif -#if VAX8600 || VAX780 || VAX750 || VAX730 +#if VAX8600 || VAX780 || VAX750 || VAX730 || VAX650 vaxstd_clkread(base) time_t base; { diff --git a/usr/src/sys/vax/vax/cpudata.c b/usr/src/sys/vax/vax/cpudata.c index 4f277d019e..16a2540c4a 100644 --- a/usr/src/sys/vax/vax/cpudata.c +++ b/usr/src/sys/vax/vax/cpudata.c @@ -3,7 +3,7 @@ * 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" @@ -126,7 +126,7 @@ struct nexusconnect xxx730 = { }; 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 }; @@ -157,6 +157,13 @@ struct clockops ka630_clockops = { }; #endif +#if VAX650 +int ka650_clkstartrt(), vaxstd_clkread(), vaxstd_clkwrite(); +struct clockops ka650_clockops = { + ka650_clkstartrt, vaxstd_clkread, vaxstd_clkwrite +}; +#endif + /* * CPU dependent routines. */ @@ -202,6 +209,13 @@ struct cpuops ka630_ops = { }; #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 }, @@ -220,6 +234,9 @@ struct percpu percpu[] = { #endif #if VAX630 { VAX_630, 2, 1, io630, &ka630_ops }, +#endif +#if VAX650 + { VAX_650, 4, 1, io630, &ka650_ops }, #endif 0, }; diff --git a/usr/src/sys/vax/vax/emulate.s b/usr/src/sys/vax/vax/emulate.s index 8909e84f7b..e855cec0b1 100644 --- a/usr/src/sys/vax/vax/emulate.s +++ b/usr/src/sys/vax/vax/emulate.s @@ -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 diff --git a/usr/src/sys/vax/vax/genassym.c b/usr/src/sys/vax/vax/genassym.c index efcbcc986c..efe14b9de2 100644 --- a/usr/src/sys/vax/vax/genassym.c +++ b/usr/src/sys/vax/vax/genassym.c @@ -3,7 +3,7 @@ * 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 @@ -11,6 +11,7 @@ #define VAX750 1 #define VAX730 1 #define VAX630 1 +#define VAX650 1 #include "pte.h" diff --git a/usr/src/sys/vax/vax/locore.s b/usr/src/sys/vax/vax/locore.s index 39de6b6c74..5f0087a585 100644 --- a/usr/src/sys/vax/vax/locore.s +++ b/usr/src/sys/vax/vax/locore.s @@ -3,7 +3,7 @@ * 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" @@ -20,6 +20,7 @@ #include "clock.h" #include "ioa.h" #include "ka630.h" +#include "ka650.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 # 9 is ??? + .word 1f-0b # 10 is 650 5: #if defined(VAX8200) || defined(VAX750) || defined(VAX730) mtpr $0xf,$MCESR @@ -676,7 +679,7 @@ SCBVEC(ustray): POPR rei -#ifdef VAX630 +#if VAX630 || VAX650 /* * Emulation OpCode jump table: * ONLY GOES FROM 0xf8 (-8) TO 0x3B (59) @@ -775,7 +778,7 @@ segflt: */ 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 @@ -791,7 +794,7 @@ SCBVEC(emulate): rei noemulate: addl2 $48,sp # adjust stack for -#endif VAX630 +#endif .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 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. @@ -881,8 +893,8 @@ _/**/mname: .globl _/**/mname; \ #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 ) @@ -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: -#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 - bneq 1f - subl2 $4096,r7 + beql 1f + cmpb _cpu,$VAX_650 + bneq 2f 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 diff --git a/usr/src/sys/vax/vax/machdep.c b/usr/src/sys/vax/vax/machdep.c index 491a90e975..f7f2142c4e 100644 --- a/usr/src/sys/vax/vax/machdep.c +++ b/usr/src/sys/vax/vax/machdep.c @@ -3,7 +3,7 @@ * 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" @@ -72,11 +72,11 @@ startup(firstaddr) register caddr_t v; int maxbufs, base, residual; -#if VAX630 +#if VAX630 || VAX650 /* * Leave last 5k of phys. memory as console work area. */ - if (cpu == VAX_630) + if (cpu == VAX_630 || cpu == VAX_650) maxmem -= 10; #endif /* @@ -89,7 +89,7 @@ startup(firstaddr) mtpr(TBIA, 0); msgbufmapped = 1; -#if VAX630 +#ifdef QBA #include "qv.h" #if NQV > 0 /* @@ -663,12 +663,13 @@ tocons(c) 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_650: c |= TXDB_CONS; break; #endif @@ -871,12 +872,13 @@ todr() 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_650: return (mfpr(TODR)); #endif -- 2.20.1