V1.66 (MicroVAX 3000 support)
Keith Bostic
bostic at OKEEFFE.BERKELEY.EDU
Thu Nov 3 04:59:44 AEST 1988
Subject: MicroVAX 3000 support
Index: sys 4.3BSD-tahoe
Description:
The attached shar adds support for the uVAX 3200, 3500,
and 3600 to the 4.3BSD-tahoe release. The changes were
provided by Mt. Xinu and integrated by Thomas Ferrin of
UCSF.
# This is a shell archive. Save it in a file, remove anything before
# this line, and then unpack it by entering "sh file". Note, it may
# create directories; files and directories will be owned by you and
# have default permissions.
#
# This archive contains:
#
# 3200
# 3200/vaxif
# 3200/vaxif/if_qe.c
# 3200/conf
# 3200/conf/GENERIC.vax
# 3200/conf/files.vax
# 3200/vax
# 3200/vax/autoconf.c
# 3200/vax/clock.c
# 3200/vax/cpu.h
# 3200/vax/cpudata.c
# 3200/vax/emulate.s
# 3200/vax/genassym.c
# 3200/vax/ka650.c
# 3200/vax/ka650.h
# 3200/vax/locore.s
# 3200/vax/machdep.c
# 3200/vax/mtpr.h
# 3200/vaxstand
# 3200/vaxstand/Makefile
# 3200/vaxstand/autoconf.c
# 3200/vaxstand/prf.c
# 3200/vaxstand/qdcons.c
# 3200/vaxstand/srt0.c
# 3200/vaxuba
# 3200/vaxuba/dhu.c
# 3200/vaxuba/tmscp.c
# 3200/vaxuba/ubareg.h
# 3200/vaxuba/uda.c
#
echo c - 3200
mkdir 3200 > /dev/null 2>&1
echo c - 3200/vaxif
mkdir 3200/vaxif > /dev/null 2>&1
echo x - 3200/vaxif/if_qe.c
sed 's/^X//' >3200/vaxif/if_qe.c << 'END-of-3200/vaxif/if_qe.c'
X*** /tmp/d25052 Tue Nov 1 09:39:08 1988
X--- if_qe.c Tue Nov 1 09:37:42 1988
X***************
X*** 1,8 ****
X! /* @(#)if_qe.c 7.6 (Berkeley) 5/28/88 */
X
X /* from @(#)if_qe.c 1.15 (ULTRIX) 4/16/86 */
X
X-
X /****************************************************************
X * *
X * Licensed from Digital Equipment Corporation *
X--- 1,27 ----
X! /*
X! * Copyright (c) 1988 Regents of the University of California.
X! * All rights reserved.
X! *
X! * This code is derived from software contributed to Berkeley by
X! * Digital Equipment Corp.
X! *
X! * Redistribution and use in source and binary forms are permitted
X! * provided that the above copyright notice and this paragraph are
X! * duplicated in all such forms and that any documentation,
X! * advertising materials, and other materials related to such
X! * distribution and use acknowledge that the software was developed
X! * by the University of California, Berkeley. The name of the
X! * University may not be used to endorse or promote products derived
X! * from this software without specific prior written permission.
X! * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
X! * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
X! * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
X! *
X! * @(#)if_qe.c 7.8 (Berkeley) 10/4/88
X! */
X
X /* from @(#)if_qe.c 1.15 (ULTRIX) 4/16/86 */
X
X /****************************************************************
X * *
X * Licensed from Digital Equipment Corporation *
X***************
X*** 239,244 ****
X--- 258,264 ----
X * we have to setup the interface by transmitting a setup packet.
X */
X addr->qe_csr = QE_RESET;
X+ addr->qe_csr &= ~QE_RESET;
X addr->qe_vector = (uba_hd[numuba].uh_lastiv -= 4);
X
X /*
X***************
X*** 326,333 ****
X */
X for( i=0 ; i<6 ; i++ )
X sc->setup_pkt[i][1] = sc->qe_addr[i] = addr->qe_sta_addr[i] & 0xff;
X! printf("qe%d: hardware address %s\n", ui->ui_unit,
X ether_sprintf(sc->qe_addr));
X
X /*
X * Save the vector for initialization at reset time.
X--- 346,356 ----
X */
X for( i=0 ; i<6 ; i++ )
X sc->setup_pkt[i][1] = sc->qe_addr[i] = addr->qe_sta_addr[i] & 0xff;
X! addr->qe_vector |= 1;
X! printf("qe%d: %s, hardware address %s\n", ui->ui_unit,
X! addr->qe_vector&01 ? "delqa":"deqna",
X ether_sprintf(sc->qe_addr));
X+ addr->qe_vector &= ~1;
X
X /*
X * Save the vector for initialization at reset time.
END-of-3200/vaxif/if_qe.c
echo c - 3200/conf
mkdir 3200/conf > /dev/null 2>&1
echo x - 3200/conf/GENERIC.vax
sed 's/^X//' >3200/conf/GENERIC.vax << 'END-of-3200/conf/GENERIC.vax'
X*** GENERIC.vax Mon Oct 31 20:22:15 1988
X--- GENERIC.vax Tue Aug 30 10:30:00 1988
X***************
X*** 1,5 ****
X #
X! # GENERIC VAX
X #
X machine vax
X cpu "VAX8600"
X--- 1,5 ----
X #
X! # GENERIC VAX + MicroVAX II/III
X #
X machine vax
X cpu "VAX8600"
X***************
X*** 7,12 ****
X--- 7,15 ----
X cpu "VAX780"
X cpu "VAX750"
X cpu "VAX730"
X+ cpu "VAX630"
X+ cpu "VAX650"
X+ makeoptions INLINEOPTS="-s"
X ident GENERIC
X timezone 8 dst
X maxusers 8
X***************
X*** 115,120 ****
X--- 118,126 ----
X
X device lp0 at uba? csr 0177514 vector lpintr
X
X+ device qv0 at uba0 csr 0177200 vector qvkint qvvint
X+ device qd0 at uba0 csr 0177400 vector qddint qdaint qdiint
X+
X pseudo-device pty
X pseudo-device loop
X pseudo-device ether
X***************
X*** 124,126 ****
X--- 130,133 ----
X device de0 at uba? csr 0174510 vector deintr
X device il0 at uba? csr 0164000 vector ilrint ilcint
X device ex0 at uba? csr 0164344 vector excdint
X+ device qe0 at uba? csr 0174440 vector qeintr
END-of-3200/conf/GENERIC.vax
echo x - 3200/conf/files.vax
sed 's/^X//' >3200/conf/files.vax << 'END-of-3200/conf/files.vax'
X*** /tmp/d20893 Mon Oct 31 20:20:43 1988
X--- files.vax Sat Aug 27 07:23:59 1988
X***************
X*** 7,12 ****
X--- 7,13 ----
X vax/dkbad.c standard
X vax/flp.c standard
X vax/in_cksum.c optional inet
X+ vax/ka650.c standard
X vax/ka630.c standard
X vax/ka730.c standard
X vax/ka750.c standard
END-of-3200/conf/files.vax
echo c - 3200/vax
mkdir 3200/vax > /dev/null 2>&1
echo x - 3200/vax/autoconf.c
sed 's/^X//' >3200/vax/autoconf.c << 'END-of-3200/vax/autoconf.c'
X*** /tmp/d20586 Mon Oct 31 20:12:56 1988
X--- autoconf.c Mon Oct 31 20:12:46 1988
X***************
X*** 3,9 ****
X * All rights reserved. The Berkeley software License Agreement
X * specifies the terms and conditions for redistribution.
X *
X! * @(#)autoconf.c 7.15 (Berkeley) 5/26/88
X */
X
X /*
X--- 3,9 ----
X * All rights reserved. The Berkeley software License Agreement
X * specifies the terms and conditions for redistribution.
X *
X! * @(#)autoconf.c 7.16 (Berkeley) 8/27/88
X */
X
X /*
X***************
X*** 148,153 ****
X--- 148,158 ----
X printf("MicroVAX-II\n");
X break;
X #endif
X+ #if VAX650
X+ case VAX_650:
X+ printf("MicroVAX 3000, ucode rev %d\n", cpusid.cpu650.cp_urev);
X+ break;
X+ #endif
X }
X for (ocp = percpu; ocp->pc_cputype; ocp++)
X if (ocp->pc_cputype == cpusid.cpuany.cp_type) {
X***************
X*** 212,218 ****
X
X switch (iob->io_type) {
X
X! #if VAX630
X case IO_QBUS:
X probeqbus((struct qbus *)iob->io_details);
X break;
X--- 217,223 ----
X
X switch (iob->io_type) {
X
X! #if VAX630 || VAX650
X case IO_QBUS:
X probeqbus((struct qbus *)iob->io_details);
X break;
END-of-3200/vax/autoconf.c
echo x - 3200/vax/clock.c
sed 's/^X//' >3200/vax/clock.c << 'END-of-3200/vax/clock.c'
X*** /tmp/d20567 Mon Oct 31 20:12:02 1988
X--- clock.c Sat Aug 27 07:14:44 1988
X***************
X*** 1,9 ****
X /*
X * Copyright (c) 1982, 1986, 1988 Regents of the University of California.
X * All rights reserved. The Berkeley software License Agreement
X * specifies the terms and conditions for redistribution.
X *
X! * @(#)clock.c 7.3 (Berkeley) 7/9/88
X */
X
X #include "param.h"
X--- 1,10 ----
X+
X /*
X * Copyright (c) 1982, 1986, 1988 Regents of the University of California.
X * All rights reserved. The Berkeley software License Agreement
X * specifies the terms and conditions for redistribution.
X *
X! * @(#)clock.c 7.4 (Berkeley) 8/27/88
X */
X
X #include "param.h"
X***************
X*** 115,121 ****
X }
X #endif
X
X! #if VAX8600 || VAX780 || VAX750 || VAX730
X vaxstd_clkread(base)
X time_t base;
X {
X--- 116,122 ----
X }
X #endif
X
X! #if VAX8600 || VAX780 || VAX750 || VAX730 || VAX650
X vaxstd_clkread(base)
X time_t base;
X {
END-of-3200/vax/clock.c
echo x - 3200/vax/cpu.h
sed 's/^X//' >3200/vax/cpu.h << 'END-of-3200/vax/cpu.h'
X*** /tmp/d20713 Mon Oct 31 20:15:36 1988
X--- cpu.h Sat Aug 27 07:05:19 1988
X***************
X*** 3,9 ****
X * All rights reserved. The Berkeley software License Agreement
X * specifies the terms and conditions for redistribution.
X *
X! * @(#)cpu.h 7.5 (Berkeley) 7/9/88
X */
X
X #ifndef LOCORE
X--- 3,9 ----
X * All rights reserved. The Berkeley software License Agreement
X * specifies the terms and conditions for redistribution.
X *
X! * @(#)cpu.h 7.6 (Berkeley) 8/27/88
X */
X
X #ifndef LOCORE
X***************
X*** 55,60 ****
X--- 55,65 ----
X :8,
X cp_type:8; /* VAX_630 */
X } cpu630;
X+ struct cpu650 {
X+ u_int cp_urev:8, /* ucode rev level */
X+ :16, /* reserved */
X+ cp_type:8; /* VAX_650 */
X+ } cpu650;
X };
X #endif
X /*
X***************
X*** 70,77 ****
X #define VAX_8500 6 /* same as 8800, 8700 */
X #define VAX_610 7 /* uVAX I */
X #define VAX_630 8 /* uVAX II */
X
X! #define VAX_MAX 8
X
X /*
X * Main IO backplane types.
X--- 75,83 ----
X #define VAX_8500 6 /* same as 8800, 8700 */
X #define VAX_610 7 /* uVAX I */
X #define VAX_630 8 /* uVAX II */
X+ #define VAX_650 10 /* uVAX 3000 */
X
X! #define VAX_MAX 10
X
X /*
X * Main IO backplane types.
END-of-3200/vax/cpu.h
echo x - 3200/vax/cpudata.c
sed 's/^X//' >3200/vax/cpudata.c << 'END-of-3200/vax/cpudata.c'
X*** /tmp/d20553 Mon Oct 31 20:11:42 1988
X--- cpudata.c Sat Aug 27 07:14:44 1988
X***************
X*** 3,9 ****
X * All rights reserved. The Berkeley software License Agreement
X * specifies the terms and conditions for redistribution.
X *
X! * @(#)cpudata.c 7.4 (Berkeley) 7/9/88
X */
X
X #include "pte.h"
X--- 3,9 ----
X * All rights reserved. The Berkeley software License Agreement
X * specifies the terms and conditions for redistribution.
X *
X! * @(#)cpudata.c 7.5 (Berkeley) 8/27/88
X */
X
X #include "pte.h"
X***************
X*** 126,132 ****
X };
X struct iobus io730[] = { IO_XXX730, 0, 0, (caddr_t)&xxx730 };
X #endif
X! #if VAX630
X struct qbus qbus630 = {
X QBA, QBAPAGES, QBAMAP630, (caddr_t)QMEM630, (caddr_t)QIOPAGE630
X };
X--- 126,132 ----
X };
X struct iobus io730[] = { IO_XXX730, 0, 0, (caddr_t)&xxx730 };
X #endif
X! #if VAX630 || VAX650
X struct qbus qbus630 = {
X QBA, QBAPAGES, QBAMAP630, (caddr_t)QMEM630, (caddr_t)QIOPAGE630
X };
X***************
X*** 157,162 ****
X--- 157,169 ----
X };
X #endif
X
X+ #if VAX650
X+ int ka650_clkstartrt(), vaxstd_clkread(), vaxstd_clkwrite();
X+ struct clockops ka650_clockops = {
X+ ka650_clkstartrt, vaxstd_clkread, vaxstd_clkwrite
X+ };
X+ #endif
X+
X /*
X * CPU dependent routines.
X */
X***************
X*** 202,207 ****
X--- 209,221 ----
X };
X #endif
X
X+ #if VAX650
X+ int ka650_memnop(), ka650_memerr(), ka650_mchk(), ka650_init();
X+ struct cpuops ka650_ops = {
X+ &ka650_clockops, ka650_memnop, ka650_memerr, ka650_mchk, ka650_init
X+ };
X+ #endif
X+
X struct percpu percpu[] = {
X #if VAX8600
X { VAX_8600, 6, 2, io8600, &ka860_ops },
X***************
X*** 220,225 ****
X--- 234,242 ----
X #endif
X #if VAX630
X { VAX_630, 2, 1, io630, &ka630_ops },
X+ #endif
X+ #if VAX650
X+ { VAX_650, 4, 1, io630, &ka650_ops },
X #endif
X 0,
X };
END-of-3200/vax/cpudata.c
echo x - 3200/vax/emulate.s
sed 's/^X//' >3200/vax/emulate.s << 'END-of-3200/vax/emulate.s'
X*** /tmp/d20645 Mon Oct 31 20:14:49 1988
X--- emulate.s Sat Aug 27 07:14:40 1988
X***************
X*** 1,8 ****
X /*
X! * @(#)emulate.s 7.2 (Berkeley) 1/16/87
X */
X
X! #ifdef VAX630
X /*
X * String instruction emulation - MicroVAX only. These routines are called
X * from locore.s when an "emulate" fault occurs on the MicroVAX. They are
X--- 1,8 ----
X /*
X! * @(#)emulate.s 7.3 (Berkeley) 8/27/88
X */
X
X! #if VAX630 || VAX650
X /*
X * String instruction emulation - MicroVAX only. These routines are called
X * from locore.s when an "emulate" fault occurs on the MicroVAX. They are
END-of-3200/vax/emulate.s
echo x - 3200/vax/genassym.c
sed 's/^X//' >3200/vax/genassym.c << 'END-of-3200/vax/genassym.c'
X*** /tmp/d20516 Mon Oct 31 20:10:52 1988
X--- genassym.c Mon Oct 31 20:10:38 1988
X***************
X*** 3,9 ****
X * All rights reserved. The Berkeley software License Agreement
X * specifies the terms and conditions for redistribution.
X *
X! * @(#)genassym.c 7.2 (Berkeley) 10/28/87
X */
X
X #define KERNEL
X--- 3,9 ----
X * All rights reserved. The Berkeley software License Agreement
X * specifies the terms and conditions for redistribution.
X *
X! * @(#)genassym.c 7.3 (Berkeley) 8/27/88
X */
X
X #define KERNEL
X***************
X*** 11,16 ****
X--- 11,17 ----
X #define VAX750 1
X #define VAX730 1
X #define VAX630 1
X+ #define VAX650 1
X
X #include "pte.h"
X
END-of-3200/vax/genassym.c
echo x - 3200/vax/ka650.c
sed 's/^X//' >3200/vax/ka650.c << 'END-of-3200/vax/ka650.c'
X/*
X * Copyright (c) 1988 The Regents of the University of California.
X * All rights reserved.
X *
X * Redistribution and use in source and binary forms are permitted
X * provided that the above copyright notice and this paragraph are
X * duplicated in all such forms and that any documentation,
X * advertising materials, and other materials related to such
X * distribution and use acknowledge that the software was developed
X * by the University of California, Berkeley. The name of the
X * University may not be used to endorse or promote products derived
X * from this software without specific prior written permission.
X * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
X * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
X * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
X *
X * @(#)ka650.c 7.3 (Berkeley) 10/31/88
X */
X
X#if VAX650
X
X/*
X * vax650-specific code.
X */
X
X#include "param.h"
X#include "time.h"
X#include "kernel.h"
X#include "systm.h"
X
X#include "cpu.h"
X#include "clock.h"
X#include "psl.h"
X#include "mem.h"
X#include "mtpr.h"
X#include "ka650.h"
X
X
Xka650_init()
X{
X ioaccess(KA650_MERR, KA650MERRmap, sizeof(ka650merr));
X ioaccess(KA650_CBD, KA650CBDmap, sizeof(ka650cbd));
X ioaccess(KA650_SSC, KA650SSCmap, sizeof(ka650ssc));
X ioaccess(KA650_IPCR, KA650IPCRmap, sizeof(ka650ipcr));
X ioaccess(KA650_CACHE, KA650CACHEmap, KA650_CACHESIZE);
X ka650encache();
X if (ctob(physmem) > ka650merr.merr_qbmbr) {
X printf("physmem(0x%x) > qbmbr(0x%x)\n",
X ctob(physmem), ka650merr.merr_qbmbr);
X panic("qbus map unprotected");
X }
X}
X
Xka650_clkstartrt()
X{
X mtpr(ICCS, ICCS_IE);
X}
X
Xka650_memnop()
X{
X /* void */
X}
X
Xka650_memerr()
X{
X register char *cp = (char *)0;
X register int m;
X extern u_int cache2tag;
X
X if (ka650cbd.cbd_cacr & CACR_CPE) {
X printf("cache 2 tag parity error: ");
X if (time.tv_sec - cache2tag < 7) {
X ka650discache();
X printf("cacheing disabled\n");
X } else {
X cache2tag = time.tv_sec;
X printf("flushing cache\n");
X ka650encache();
X }
X }
X m = ka650merr.merr_errstat;
X ka650merr.merr_errstat = MEM_EMASK;
X if (m & MEM_CDAL) {
X cp = "Bus Parity";
X } else if (m & MEM_RDS) {
X cp = "Hard ECC";
X } else if (m & MEM_CRD) {
X cp = "Soft ECC";
X }
X if (cp) {
X printf("%sMemory %s Error: page 0x%x\n",
X (m & MEM_DMA) ? "DMA " : "", cp,
X (m & MEM_PAGE) >> MEM_PAGESHFT);
X }
X}
X
X#define NMC650 15
Xchar *mc650[] = {
X 0, "FPA proto err", "FPA resv inst",
X "FPA Ill Stat 2", "FPA Ill Stat 1", "PTE in P0, TB miss",
X "PTE in P1, TB miss", "PTE in P0, Mod", "PTE in P1, Mod",
X "Illegal intr IPL", "MOVC state error", "bus read error",
X "SCB read error", "bus write error", "PCB write error"
X};
Xu_int cache1tag;
Xu_int cache1data;
Xu_int cdalerr;
Xu_int cache2tag;
X
Xstruct mc650frame {
X int mc65_bcnt; /* byte count == 0xc */
X int mc65_summary; /* summary parameter */
X int mc65_mrvaddr; /* most recent vad */
X int mc65_istate1; /* internal state */
X int mc65_istate2; /* internal state */
X int mc65_pc; /* trapped pc */
X int mc65_psl; /* trapped psl */
X};
X
Xka650_mchk(cmcf)
X caddr_t cmcf;
X{
X register struct mc650frame *mcf = (struct mc650frame *)cmcf;
X register u_int type = mcf->mc65_summary;
X register u_int i;
X
X printf("machine check %x: %s%s\n", type);
X if (type >= 0x80 && type <= 0x83)
X type -= (0x80 + 11);
X if (type < NMC650)
X printf("%s: ", mc650[type]);
X printf("vap %x istate1 %x istate2 %x pc %x psl %x\n",
X mcf->mc65_mrvaddr, mcf->mc65_istate1, mcf->mc65_istate2,
X mcf->mc65_pc, mcf->mc65_psl);
X printf("dmaser=0x%b qbear=0x%x dmaear=0x%x\n",
X ka650merr.merr_dser, DMASER_BITS, ka650merr.merr_qbear,
X ka650merr.merr_dear);
X ka650merr.merr_dser = DSER_CLEAR;
X
X i = mfpr(CAER);
X mtpr(CAER, CAER_MCC | CAER_DAT | CAER_TAG);
X if (i & CAER_MCC) {
X printf("cache 1 ");
X if (i & CAER_DAT) {
X printf("data");
X i = cache1data;
X cache1data = time.tv_sec;
X }
X if (i & CAER_TAG) {
X printf("tag");
X i = cache1tag;
X cache1tag = time.tv_sec;
X }
X } else if ((i & CAER_MCD) || (ka650merr.merr_errstat & MEM_CDAL)) {
X printf("CDAL");
X i = cdalerr;
X cdalerr = time.tv_sec;
X }
X if (time.tv_sec - i < 7) {
X ka650discache();
X printf(" parity error: cacheing disabled\n");
X } else {
X printf(" parity error: flushing cache\n");
X ka650encache();
X }
X /*
X * May be able to recover if type is 1-4, 0x80 or 0x81, but
X * only if FPD is set in the saved PSL, or bit VCR in Istate2
X * is clear.
X */
X if ((type > 0 && type < 5) || type == 11 || type == 12) {
X if ((mcf->mc65_psl & PSL_FPD)
X || !(mcf->mc65_istate2 & IS2_VCR)) {
X ka650_memerr();
X return (MCHK_RECOVERED);
X }
X }
X return (MCHK_PANIC);
X}
X
X/*
X * Make sure both caches are off and not in diagnostic mode. Clear the
X * 2nd level cache (by writing to each quadword entry), then enable it.
X * Enable 1st level cache too.
X */
Xka650encache()
X{
X register int i;
X
X ka650discache();
X for (i = 0; i < (KA650_CACHESIZE / sizeof(ka650cache[0])); i += 2)
X ka650cache[i] = 0;
X ka650cbd.cbd_cacr = CACR_CEN;
X mtpr(CADR, CADR_SEN2 | CADR_SEN1 | CADR_CENI | CADR_CEND);
X}
X
Xka650discache()
X{
X mtpr(CADR, 0);
X ka650cbd.cbd_cacr = CACR_CPE;
X}
X#endif
END-of-3200/vax/ka650.c
echo x - 3200/vax/ka650.h
sed 's/^X//' >3200/vax/ka650.h << 'END-of-3200/vax/ka650.h'
X/*
X * Copyright (c) 1988 Regents of the University of California.
X * All rights reserved. The Berkeley software License Agreement
X * specifies the terms and conditions for redistribution.
X *
X * @(#)ka650.h 7.2 (Berkeley) 9/22/88
X */
X
X/*
X *
X * Definitions specific to the ka650 (uVAX 3600/3602) cpu card.
X */
X
X#ifdef VAX650
X/*
X * CAER: Memory System Error Register (IPR 39)
X */
X#define CAER_DAL 0x00000040 /* CDAL or level 2 cache data parity */
X#define CAER_MCD 0x00000020 /* mcheck due to DAL parity error */
X#define CAER_MCC 0x00000010 /* mcheck due to 1st lev cache parity */
X#define CAER_DAT 0x00000002 /* data parity in 1st level cache */
X#define CAER_TAG 0x00000001 /* tag parity in 1st level cache */
X
X/*
X * CADR: Cache Disable Register (IPR 37)
X */
X#define CADR_STMASK 0x000000f0 /* 1st level cache state mask */
X#define CADR_SEN2 0x00000080 /* 1st level cache set 2 enabled */
X#define CADR_SEN1 0x00000040 /* 1st level cache set 1 enabled */
X#define CADR_CENI 0x00000020 /* 1st level I-stream caching enabled */
X#define CADR_CEND 0x00000010 /* 1st level D-stream caching enabled */
X
X/*
X * Internal State Info 2: (for mcheck recovery)
X */
X#define IS2_VCR 0x00008000 /* VAX Can't Restart flag */
X
X/*
X * DMA System Error Register (merr_dser)
X */
X#define DSER_QNXM 0x00000080 /* Q-22 Bus NXM */
X#define DSER_QPE 0x00000020 /* Q-22 Bus parity Error */
X#define DSER_MEM 0x00000010 /* Main mem err due to ext dev DMA */
X#define DSER_LOST 0x00000008 /* Lost error: DSER <7,5,4,0> set */
X#define DSER_NOGRANT 0x00000004 /* No Grant timeout on cpu demand R/W */
X#define DSER_DNXM 0x00000001 /* DMA NXM */
X#define DSER_CLEAR (DSER_QNXM | DSER_QPE | DSER_MEM | \
X DSER_LOST | DSER_NOGRANT | DSER_DNXM)
X#define DMASER_BITS \
X"\20\20BHALT\17DCNEG\10QBNXM\6QBPE\5MEMERR\4LOSTERR\3NOGRANT\1DMANXM"
X
X#ifndef LOCORE
X/*
X * Local registers (in I/O space)
X * This is done in disjoint sections. Map names are set in locore.s
X * and they are mapped in routine configcpu()
X */
X
X/*
X * memory error & configuration registers
X */
Xstruct ka650_merr {
X u_long merr_scr; /* System Config Register */
X u_long merr_dser; /* DMA System Error Register */
X u_long merr_qbear; /* QBus Error Address Register */
X u_long merr_dear; /* DMA Error Address Register */
X u_long merr_qbmbr; /* Q Bus Map Base address Register */
X u_long pad[59];
X u_long merr_csr[16]; /* Main Memory Config Regs (16 banks) */
X u_long merr_errstat; /* Main Memory Error Status */
X u_long merr_cont; /* Main Memory Control */
X};
X#define KA650_MERR 0x20080000
X
X/*
X * Main Memory Error Status Register (merr_errstat)
X */
X#define MEM_EMASK 0xe0000180 /* mask of all err bits */
X#define MEM_RDS 0x80000000 /* uncorrectable main memory */
X#define MEM_RDSHIGH 0x40000000 /* high rate RDS errors */
X#define MEM_CRD 0x20000000 /* correctable main memory */
X#define MEM_DMA 0x00000100 /* DMA read or write error */
X#define MEM_CDAL 0x00000080 /* CDAL Parity error on write */
X#define MEM_PAGE 0x1ffffe00 /* Offending Page Number */
X#define MEM_PAGESHFT 9 /* Shift to normalize page number */
X
X/*
X * Main Memory Control & Diag Status Reg (merr_cont)
X */
X#define MEM_CRDINT 0x00001000 /* CRD interrupts enabled */
X#define MEM_REFRESH 0x00000800 /* Forced memory refresh */
X#define MEM_ERRDIS 0x00000400 /* error detect disable */
X#define MEM_DIAG 0x00000080 /* Diagnostics mode */
X#define MEM_CHECK 0x0000007f /* check bits for diagnostic mode */
X
X/*
X * Main Memory Config Regs (merr_csr[0-15])
X */
X#define MEM_BNKENBLE 0x80000000 /* Bank Enable */
X#define MEM_BNKNUM 0x03c00000 /* Physical map Bank number */
X#define MEM_BNKUSAGE 0x00000003 /* Bank Usage */
X
X/*
X * Cache Control & Boot/Diag registers
X */
Xstruct ka650_cbd {
X u_char cbd_cacr; /* Low byte: Cache Enable & Parity Err detect */
X u_char cbd_cdf1; /* Cache diagnostic field (unused) */
X u_char cbd_cdf2; /* Cache diagnostic field (unused) */
X u_char pad;
X u_long cbd_bdr; /* Boot & Diagnostic Register (unused) */
X};
X#define KA650_CBD 0x20084000
X
X/*
X * CACR: Cache Control Register (2nd level cache) (cbd_cacr)
X */
X#define CACR_CEN 0x00000010 /* Cache enable */
X#define CACR_CPE 0x00000020 /* Cache Parity Error */
X
X/*
X * System Support Chip (SSC) registers
X */
Xstruct ka650_ssc {
X u_long ssc_sscbr; /* SSC Base Addr Register */
X u_long pad1[3];
X u_long ssc_ssccr; /* SSC Configuration Register */
X u_long pad2[3];
X u_long ssc_cbtcr; /* CDAL Bus Timeout Control Register */
X u_long pad3[55];
X u_long ssc_tcr0; /* timer control reg 0 */
X u_long ssc_tir0; /* timer interval reg 0 */
X u_long ssc_tnir0; /* timer next interval reg 0 */
X u_long ssc_tivr0; /* timer interrupt vector reg 0 */
X u_long ssc_tcr1; /* timer control reg 1 */
X u_long ssc_tir1; /* timer interval reg 1 */
X u_long ssc_tnir1; /* timer next interval reg 1 */
X u_long ssc_tivr1; /* timer interrupt vector reg 1 */
X u_long pad4[184];
X u_char ssc_cpmbx; /* Console Program Mail Box: Lang & Hact */
X u_char ssc_terminfo; /* TTY info: Video Dev, MCS, CRT & ROM flags */
X u_char ssc_keyboard; /* Keyboard code */
X};
X#define KA650_SSC 0x20140000
X
X/*
X * CBTCR: CDAL Bus Timeout Control Register (ssc_cbtcr)
X */
X#define CBTCR_BTO 0x80000000 /* r/w unimp IPR or unack intr */
X#define CBTCR_RWT 0x40000000 /* CDAL Bus Timeout on CPU or DMA */
X
X/*
X * TCR0/TCR1: Programable Timer Control Registers (ssc_tcr[01])
X * (The rest of the bits are the same as in the standard VAX
X * Interval timer and are defined in clock.h)
X */
X#define TCR_STP 0x00000004 /* Stop after time-out */
X
X/*
X * Flags for Console Program Mail Box
X */
X#define CPMB650_HALTACT 0x03 /* Field for halt action */
X#define CPMB650_RESTART 0x01 /* Restart */
X#define CPMB650_REBOOT 0x02 /* Reboot */
X#define CPMB650_HALT 0x03 /* Halt */
X#define CPMB650_BIP 0x04 /* Bootstrap in progress */
X#define CPMB650_RIP 0x08 /* Restart in progress */
X#define CPMB650_LANG 0xf0 /* Language field */
X
X/*
X * Inter Processor Communication Register
X * To determine if memory error was from QBUS device DMA (as opposed to cpu).
X */
Xstruct ka650_ipcr {
X u_long pad[80];
X u_short ipcr0; /* InterProcessor Comm Reg for arbiter */
X};
X#define KA650_IPCR 0x20001e00
X
X#ifndef STANDALONE
X/*
X * External declarations of the map names (declared in spt.s)
X * for the local register space.
X */
Xextern struct pte KA650MERRmap[];
Xextern struct ka650_merr ka650merr; /* mem err & mem config regs */
Xextern struct pte KA650CBDmap[];
Xextern struct ka650_cbd ka650cbd; /* cache control & boot/diag regs */
Xextern struct pte KA650SSCmap[];
Xextern struct ka650_ssc ka650ssc; /* SSC regs (& console prog mail box) */
Xextern struct pte KA650IPCRmap[];
Xextern struct ka650_ipcr ka650ipcr; /* InterProcessor Com Regs */
Xextern struct pte KA650CACHEmap[];
Xextern int ka650cache[]; /* Cache Diagnostic space (for flush) */
X#endif STANDALONE
X#endif LOCORE
X
X/*
X * Physical start address of the Qbus memory.
X * The q-bus memory size is 4 meg.
X * Physical start address of the I/O space (where the 8Kbyte I/O page is).
X */
X#define KA650_QMEM 0x30000000
X#define KA650_QMEMSIZE (512*8192)
X#define KA650_QDEVADDR 0x20000000
X
X/*
X * Mapping info for Cache Entries, including
X * Size (in bytes) of 2nd Level Cache for cache flush operation
X */
X#define KA650_CACHE 0x10000000
X#define KA650_CACHESIZE (64*1024)
X
X/*
X * Useful ROM addresses
X */
X#define KA650ROM_SIDEX 0x20060004 /* system ID extension */
X#define KA650ROM_GETC 0x20060008 /* (jsb) get character from console */
X#define KA650ROM_PUTS 0x2006000c /* (jsb) put string to console */
X#define KA650ROM_GETS 0x20060010 /* (jsb) read string with prompt */
X#define KA650_CONSTYPE 0x20140401 /* byte at which console type resides */
X#endif
END-of-3200/vax/ka650.h
echo x - 3200/vax/locore.s
sed 's/^X//' >3200/vax/locore.s << 'END-of-3200/vax/locore.s'
X*** /tmp/d20629 Mon Oct 31 20:14:11 1988
X--- locore.s Mon Oct 31 20:13:36 1988
X***************
X*** 3,9 ****
X * All rights reserved. The Berkeley software License Agreement
X * specifies the terms and conditions for redistribution.
X *
X! * @(#)locore.s 7.12 (Berkeley) 5/27/88
X */
X
X #include "psl.h"
X--- 3,9 ----
X * All rights reserved. The Berkeley software License Agreement
X * specifies the terms and conditions for redistribution.
X *
X! * @(#)locore.s 7.15 (Berkeley) 9/22/88
X */
X
X #include "psl.h"
X***************
X*** 20,25 ****
X--- 20,26 ----
X #include "clock.h"
X #include "ioa.h"
X #include "ka630.h"
X+ #include "ka650.h"
X #include "ka820.h"
X #include "../vaxuba/ubareg.h"
X
X***************
X*** 113,118 ****
X--- 114,121 ----
X .word 1f-0b # 6 is 8800 (unsupported)
X .word 1f-0b # 7 is 610 (unsupported)
X .word 1f-0b # 8 is 630
X+ .word 1f-0b # 9 is ???
X+ .word 9f-0b # 10 is 650
X 5:
X #if defined(VAX8200) || defined(VAX750) || defined(VAX730)
X mtpr $0xf,$MCESR
X***************
X*** 127,136 ****
X--- 130,147 ----
X #if VAX780
X mtpr $0,$SBIFS
X #endif
X+ brb 1f
X+ 9:
X+ #if VAX650
X+ bitl $PG_V,_KA650MERRmap
X+ beql 1f # don't bother clearing err reg if not mapped in
X+ movl $DSER_CLEAR,_ka650merr+4
X+ #endif
X 1:
X addl2 (sp)+,sp # discard mchchk trash
X movl nofault,(sp)
X rei
X+
X SCBVEC(kspnotval):
X PANIC("KSP not valid");
X SCBVEC(powfail):
X***************
X*** 676,682 ****
X POPR
X rei
X
X! #ifdef VAX630
X /*
X * Emulation OpCode jump table:
X * ONLY GOES FROM 0xf8 (-8) TO 0x3B (59)
X--- 687,693 ----
X POPR
X rei
X
X! #if VAX630 || VAX650
X /*
X * Emulation OpCode jump table:
X * ONLY GOES FROM 0xf8 (-8) TO 0x3B (59)
X***************
X*** 775,781 ****
X */
X
X SCBVEC(emulate):
X! #ifdef VAX630
X movl r11,32(sp) # save register r11 in unused operand
X movl r10,36(sp) # save register r10 in unused operand
X cvtbl (sp),r10 # get opcode
X--- 786,792 ----
X */
X
X SCBVEC(emulate):
X! #if VAX630 || VAX650
X movl r11,32(sp) # save register r11 in unused operand
X movl r10,36(sp) # save register r10 in unused operand
X cvtbl (sp),r10 # get opcode
X***************
X*** 791,797 ****
X rei
X noemulate:
X addl2 $48,sp # adjust stack for
X! #endif VAX630
X .word 0xffff # "reserved instruction fault"
X SCBVEC(emulateFPD):
X .word 0xffff # "reserved instruction fault"
X--- 802,808 ----
X rei
X noemulate:
X addl2 $48,sp # adjust stack for
X! #endif
X .word 0xffff # "reserved instruction fault"
X SCBVEC(emulateFPD):
X .word 0xffff # "reserved instruction fault"
X***************
X*** 853,859 ****
X--- 864,878 ----
X
X SYSMAP(UMBAbeg ,umbabeg ,0 )
X SYSMAP(Nexmap ,nexus ,16*MAXNNEXUS )
X+ #ifdef QBA
X+ #if (QBAPAGES+UBAIOPAGES) > (UBAPAGES+UBAIOPAGES)*NUBA
X+ SYSMAP(UMEMmap ,umem ,(QBAPAGES+UBAIOPAGES) )
X+ #else
X SYSMAP(UMEMmap ,umem ,(UBAPAGES+UBAIOPAGES)*NUBA )
X+ #endif
X+ #else /* QBA */
X+ SYSMAP(UMEMmap ,umem ,(QBAPAGES+UBAIOPAGES)*NUBA )
X+ #endif /* QBA */
X #if VAX8600
X SYSMAP(Ioamap ,ioa ,MAXNIOA*IOAMAPSIZ/NBPG )
X #endif
X***************
X*** 873,880 ****
X #endif
X #if VAX630
X SYSMAP(Ka630map ,ka630cpu ,1 )
X /*
X! * qvss and qdss can't coexist - one map will suffice
X * for either. qvss is 256K each and qdss is 64K each.
X */
X #include "qv.h"
X--- 892,908 ----
X #endif
X #if VAX630
X SYSMAP(Ka630map ,ka630cpu ,1 )
X+ #endif
X+ #if VAX650
X+ SYSMAP(KA650MERRmap ,ka650merr ,1 )
X+ SYSMAP(KA650CBDmap ,ka650cbd ,1 )
X+ SYSMAP(KA650SSCmap ,ka650ssc ,3 )
X+ SYSMAP(KA650IPCRmap ,ka650ipcr ,1 )
X+ SYSMAP(KA650CACHEmap ,ka650cache ,KA650_CACHESIZE/NBPG )
X+ #endif
X+ #ifdef QBA
X /*
X! * qvss and qdss don't coexist - one map will suffice
X * for either. qvss is 256K each and qdss is 64K each.
X */
X #include "qv.h"
X***************
X*** 881,888 ****
X #include "qd.h"
X #if NQV > 0 || NQD > 0
X SYSMAP(QVmap ,qvmem ,((512*NQV)+(128*NQD)))
X! #endif /* NQV || NQD */
X! #endif /* VAX630 */
X SYSMAP(UMBAend ,umbaend ,0 )
X
X SYSMAP(Usrptmap ,usrpt ,USRPTSIZE+CLSIZE )
X--- 909,916 ----
X #include "qd.h"
X #if NQV > 0 || NQD > 0
X SYSMAP(QVmap ,qvmem ,((512*NQV)+(128*NQD)))
X! #endif
X! #endif
X SYSMAP(UMBAend ,umbaend ,0 )
X
X SYSMAP(Usrptmap ,usrpt ,USRPTSIZE+CLSIZE )
X***************
X*** 931,942 ****
X 1: pushl $4; pushl r7; calls $2,_badaddr; tstl r0; bneq 9f
X acbl $MAXMEM*1024-1,$64*1024,r7,1b
X 9:
X! #ifdef VAX630
X! /* leave an area for uVAX II console scratch pad at the top */
X cmpb _cpu,$VAX_630
X! bneq 1f
X! subl2 $4096,r7
X 1:
X #endif
X /* clear memory from kernel bss and pages for proc 0 u. and page table */
X movab _edata,r6; bicl2 $SYSTEM,r6
X--- 959,975 ----
X 1: pushl $4; pushl r7; calls $2,_badaddr; tstl r0; bneq 9f
X acbl $MAXMEM*1024-1,$64*1024,r7,1b
X 9:
X! #if VAX630 || VAX650
X! /* reserved area at top of memory for processor specific use */
X cmpb _cpu,$VAX_630
X! beql 1f
X! cmpb _cpu,$VAX_650
X! bneq 2f
X! subl2 $32768,r7 # space for Qbus map registers
X! brb 2f
X 1:
X+ subl2 $4096,r7 # space for console scratchpad
X+ 2:
X #endif
X /* clear memory from kernel bss and pages for proc 0 u. and page table */
X movab _edata,r6; bicl2 $SYSTEM,r6
END-of-3200/vax/locore.s
echo x - 3200/vax/machdep.c
sed 's/^X//' >3200/vax/machdep.c << 'END-of-3200/vax/machdep.c'
X*** /tmp/d20446 Mon Oct 31 20:09:01 1988
X--- machdep.c Thu Sep 22 06:39:21 1988
X***************
X*** 3,9 ****
X * All rights reserved. The Berkeley software License Agreement
X * specifies the terms and conditions for redistribution.
X *
X! * @(#)machdep.c 7.14 (Berkeley) 5/26/88
X */
X
X #include "param.h"
X--- 3,9 ----
X * All rights reserved. The Berkeley software License Agreement
X * specifies the terms and conditions for redistribution.
X *
X! * @(#)machdep.c 7.17 (Berkeley) 9/22/88
X */
X
X #include "param.h"
X***************
X*** 39,44 ****
X--- 39,45 ----
X #include "mtpr.h"
X #include "rpb.h"
X #include "ka630.h"
X+ #include "ka650.h"
X
X #include "../vaxuba/ubavar.h"
X #include "../vaxuba/ubareg.h"
X***************
X*** 72,85 ****
X register caddr_t v;
X int maxbufs, base, residual;
X
X- #if VAX630
X /*
X- * Leave last 5k of phys. memory as console work area.
X- */
X- if (cpu == VAX_630)
X- maxmem -= 10;
X- #endif
X- /*
X * Initialize error message buffer (at end of core).
X */
X maxmem -= btoc(sizeof (struct msgbuf));
X--- 73,79 ----
X***************
X*** 89,95 ****
X mtpr(TBIA, 0);
X msgbufmapped = 1;
X
X! #if VAX630
X #include "qv.h"
X #if NQV > 0
X /*
X--- 83,89 ----
X mtpr(TBIA, 0);
X msgbufmapped = 1;
X
X! #ifdef QBA
X #include "qv.h"
X #if NQV > 0
X /*
X***************
X*** 603,609 ****
X--- 597,612 ----
X splx(0x1f); /* extreme priority */
X devtype = major(rootdev);
X if (howto&RB_HALT) {
X+ switch (cpu) {
X+
X /* 630 can be told to halt, but how? */
X+ #if VAX650
X+ case VAX_650:
X+ ka650ssc.ssc_cpmbx &= ~CPMB650_HALTACT;
X+ ka650ssc.ssc_cpmbx |= CPMB650_HALT;
X+ asm("halt");
X+ #endif
X+ }
X printf("halting (in tight loop); hit\n\t^P\n\tHALT\n\n");
X for (;;)
X ;
X***************
X*** 640,645 ****
X--- 643,656 ----
X break;
X #endif
X
X+ #ifdef VAX650
X+ case VAX_650:
X+ /* set boot-on-halt flag in "console mailbox" */
X+ ka650ssc.ssc_cpmbx &= ~CPMB650_HALTACT;
X+ ka650ssc.ssc_cpmbx |= CPMB650_REBOOT;
X+ break;
X+ #endif
X+
X default:
X tocons(TXDB_BOOT);
X }
X***************
X*** 680,685 ****
X--- 691,702 ----
X continue;
X break;
X #endif
X+
X+ #if VAX650
X+ case VAX_650:
X+ /* everything is a real console terminal character on ka650 */
X+ return;
X+ #endif
X }
X
X mtpr(TXDB, c);
X***************
X*** 871,882 ****
X
X switch (cpu) {
X
X! #if VAX8600 || VAX8200 || VAX780 || VAX750 || VAX730
X case VAX_8600:
X case VAX_8200:
X case VAX_780:
X case VAX_750:
X case VAX_730:
X return (mfpr(TODR));
X #endif
X
X--- 888,900 ----
X
X switch (cpu) {
X
X! #if VAX8600 || VAX8200 || VAX780 || VAX750 || VAX730 || VAX650
X case VAX_8600:
X case VAX_8200:
X case VAX_780:
X case VAX_750:
X case VAX_730:
X+ case VAX_650:
X return (mfpr(TODR));
X #endif
X
END-of-3200/vax/machdep.c
echo x - 3200/vax/mtpr.h
sed 's/^X//' >3200/vax/mtpr.h << 'END-of-3200/vax/mtpr.h'
X*** /tmp/d20693 Mon Oct 31 20:15:13 1988
X--- mtpr.h Sat Aug 27 07:14:03 1988
X***************
X*** 3,9 ****
X * All rights reserved. The Berkeley software License Agreement
X * specifies the terms and conditions for redistribution.
X *
X! * @(#)mtpr.h 7.3 (Berkeley) 5/7/88
X */
X
X /*
X--- 3,9 ----
X * All rights reserved. The Berkeley software License Agreement
X * specifies the terms and conditions for redistribution.
X *
X! * @(#)mtpr.h 7.4 (Berkeley) 8/27/88
X */
X
X /*
X***************
X*** 36,42 ****
X #define ICCS 0x18 /* interval clock control */
X #define NICR 0x19 /* next interval count */
X #define ICR 0x1a /* interval count */
X! #if VAX8600 || VAX8200 || VAX780 || VAX750 || VAX730
X #define TODR 0x1b /* time of year (day) */
X #endif
X #if VAX750 || VAX730
X--- 36,42 ----
X #define ICCS 0x18 /* interval clock control */
X #define NICR 0x19 /* next interval count */
X #define ICR 0x1a /* interval count */
X! #if VAX8600 || VAX8200 || VAX780 || VAX750 || VAX730 || VAX650
X #define TODR 0x1b /* time of year (day) */
X #endif
X #if VAX750 || VAX730
X***************
X*** 49,60 ****
X #define RXDB 0x21 /* console receiver data buffer */
X #define TXCS 0x22 /* console transmitter control and status */
X #define TXDB 0x23 /* console transmitter data buffer */
X! #if VAX8200 || VAX750 || VAX730
X #define TBDR 0x24 /* translation buffer disable register */
X #define CADR 0x25 /* cache disable register */
X #define MCESR 0x26 /* machine check error summary register */
X #endif
X! #if VAX750 || VAX730
X #define CAER 0x27 /* cache error */
X #endif
X #define ACCS 0x28 /* accelerator control and status */
X--- 49,60 ----
X #define RXDB 0x21 /* console receiver data buffer */
X #define TXCS 0x22 /* console transmitter control and status */
X #define TXDB 0x23 /* console transmitter data buffer */
X! #if VAX8200 || VAX750 || VAX730 || VAX650
X #define TBDR 0x24 /* translation buffer disable register */
X #define CADR 0x25 /* cache disable register */
X #define MCESR 0x26 /* machine check error summary register */
X #endif
X! #if VAX750 || VAX730 || VAX650
X #define CAER 0x27 /* cache error */
X #endif
X #define ACCS 0x28 /* accelerator control and status */
X***************
X*** 77,84 ****
X #define SBITA 0x35 /* SBI timeout address */
X #define SBIQC 0x36 /* SBI quadword clear */
X #endif
X! #if VAX750 || VAX730 || VAX630
X! #define IUR 0x37 /* init unibus (Qbus on 630) register */
X #endif
X #define MAPEN 0x38 /* memory management enable */
X #define TBIA 0x39 /* translation buffer invalidate all */
X--- 77,84 ----
X #define SBITA 0x35 /* SBI timeout address */
X #define SBIQC 0x36 /* SBI quadword clear */
X #endif
X! #if VAX750 || VAX730 || VAX630 || VAX650
X! #define IUR 0x37 /* init unibus (Qbus on 6x0) register */
X #endif
X #define MAPEN 0x38 /* memory management enable */
X #define TBIA 0x39 /* translation buffer invalidate all */
X***************
X*** 91,97 ****
X #endif
X #define PMR 0x3d /* performance monitor enable */
X #define SID 0x3e /* system identification */
X! #if VAX8600 || VAX8200
X #define TBCHK 0x3f /* Translation Buffer Check */
X #endif
X #if VAX8600
X--- 91,97 ----
X #endif
X #define PMR 0x3d /* performance monitor enable */
X #define SID 0x3e /* system identification */
X! #if VAX8600 || VAX8200 || VAX650
X #define TBCHK 0x3f /* Translation Buffer Check */
X #endif
X #if VAX8600
END-of-3200/vax/mtpr.h
echo c - 3200/vaxstand
mkdir 3200/vaxstand > /dev/null 2>&1
echo x - 3200/vaxstand/Makefile
sed 's/^X//' >3200/vaxstand/Makefile << 'END-of-3200/vaxstand/Makefile'
X*** /tmp/d20878 Mon Oct 31 20:20:11 1988
X--- Makefile Mon Oct 31 20:19:59 1988
X***************
X*** 14,20 ****
X # IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
X # WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
X #
X! # @(#)Makefile 7.15 (Berkeley) 7/9/88
X #
X
X DESTDIR=
X--- 14,20 ----
X # IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
X # WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
X #
X! # @(#)Makefile 7.16 (Berkeley) 8/27/88
X #
X
X DESTDIR=
X***************
X*** 22,28 ****
X INCPATH=-I. -I../stand -I../h
X VPATH= ../stand:../vax
X DEFS= ${INCPATH} -DSTANDALONE -DCOMPAT_42
X! MACH= -DVAX8600 -DVAX8200 -DVAX780 -DVAX750 -DVAX730 -DVAX630
X
X # Collections of C options:
X # COPTS device drivers/assembler, not optimized
X--- 22,28 ----
X INCPATH=-I. -I../stand -I../h
X VPATH= ../stand:../vax
X DEFS= ${INCPATH} -DSTANDALONE -DCOMPAT_42
X! MACH= -DVAX8600 -DVAX8200 -DVAX780 -DVAX750 -DVAX730 -DVAX630 -DVAX650
X
X # Collections of C options:
X # COPTS device drivers/assembler, not optimized
X***************
X*** 33,39 ****
X COPTS= ${DEFS} ${MACH}
X CFLAGS= -O ${DEFS} ${MACH}
X 730OPTS=-O ${DEFS} -DVAX730
X! SMOPTS= ${DEFS} -DSMALL -DVAX750 -DVAX630
X
X RELOC= 150000
X LIBSA= libsa.a
X--- 33,39 ----
X COPTS= ${DEFS} ${MACH}
X CFLAGS= -O ${DEFS} ${MACH}
X 730OPTS=-O ${DEFS} -DVAX730
X! SMOPTS= ${DEFS} -DSMALL -DVAX750 -DVAX630 -DVAX650
X
X RELOC= 150000
X LIBSA= libsa.a
END-of-3200/vaxstand/Makefile
echo x - 3200/vaxstand/autoconf.c
sed 's/^X//' >3200/vaxstand/autoconf.c << 'END-of-3200/vaxstand/autoconf.c'
X*** /tmp/d20850 Mon Oct 31 20:19:26 1988
X--- autoconf.c Sat Aug 27 07:22:54 1988
X***************
X*** 3,9 ****
X * All rights reserved. The Berkeley software License Agreement
X * specifies the terms and conditions for redistribution.
X *
X! * @(#)autoconf.c 7.11 (Berkeley) 7/10/88
X */
X
X #include "param.h"
X--- 3,9 ----
X * All rights reserved. The Berkeley software License Agreement
X * specifies the terms and conditions for redistribution.
X *
X! * @(#)autoconf.c 7.12 (Berkeley) 8/27/88
X */
X
X #include "param.h"
X***************
X*** 56,62 ****
X #undef UMA
X #endif
X
X! #if VAX630
X /*
X * The map registers start at 20088000 on the ka630, so
X * subtract a 2k offset to make things work.
X--- 56,62 ----
X #undef UMA
X #endif
X
X! #if VAX630 || VAX650
X /*
X * The map registers start at 20088000 on the ka630, so
X * subtract a 2k offset to make things work.
X***************
X*** 219,224 ****
X--- 219,236 ----
X nuba = 1;
X break;
X #endif
X+
X+ #if VAX650
X+ case VAX_650:
X+ #ifndef SMALL
X+ if (debug)
X+ printf("cpu: uVAX 3000\n");
X+ #endif
X+ ubaddr = ubaddr630;
X+ uioaddr = uioaddr630;
X+ nuba = 1;
X+ break;
X+ #endif
X }
X
X /*
X***************
X*** 239,246 ****
X break;
X #endif
X
X! #if VAX630
X case VAX_630:
X mtpr(IUR, 0);
X *((char *)QIOPAGE630 + QIPCR) = Q_LMEAE;
X #if !defined(SMALL)
X--- 251,259 ----
X break;
X #endif
X
X! #if VAX630 || VAX650
X case VAX_630:
X+ case VAX_650:
X mtpr(IUR, 0);
X *((char *)QIOPAGE630 + QIPCR) = Q_LMEAE;
X #if !defined(SMALL)
X***************
X*** 251,257 ****
X ;
X #endif
X break;
X! #endif /* VAX630 */
X }
X
X /* give unibus devices a chance to recover... */
X--- 264,270 ----
X ;
X #endif
X break;
X! #endif
X }
X
X /* give unibus devices a chance to recover... */
END-of-3200/vaxstand/autoconf.c
echo x - 3200/vaxstand/prf.c
sed 's/^X//' >3200/vaxstand/prf.c << 'END-of-3200/vaxstand/prf.c'
X*** /tmp/d20844 Mon Oct 31 20:19:08 1988
X--- prf.c Sat Aug 27 07:22:52 1988
X***************
X*** 3,9 ****
X * All rights reserved. The Berkeley software License Agreement
X * specifies the terms and conditions for redistribution.
X *
X! * @(#)prf.c 7.5 (Berkeley) 6/6/88
X */
X
X #include "param.h"
X--- 3,9 ----
X * All rights reserved. The Berkeley software License Agreement
X * specifies the terms and conditions for redistribution.
X *
X! * @(#)prf.c 7.6 (Berkeley) 8/27/88
X */
X
X #include "param.h"
X***************
X*** 115,121 ****
X register c;
X {
X register s, timo;
X! #if VAX630
X extern (*v_putc)();
X
X if (v_putc) {
X--- 115,121 ----
X register c;
X {
X register s, timo;
X! #if VAX630 || VAX650
X extern (*v_putc)();
X
X if (v_putc) {
X***************
X*** 147,153 ****
X getchar()
X {
X register c;
X! #if VAX630
X extern (*v_getc)();
X
X if (v_getc) {
X--- 147,153 ----
X getchar()
X {
X register c;
X! #if VAX630 || VAX650
X extern (*v_getc)();
X
X if (v_getc) {
X***************
X*** 157,163 ****
X while((mfpr(RXCS)&RXCS_DONE) == 0)
X ;
X c = mfpr(RXDB)&0177;
X! #if VAX630
X }
X #endif
X if (c=='\r')
X--- 157,163 ----
X while((mfpr(RXCS)&RXCS_DONE) == 0)
X ;
X c = mfpr(RXDB)&0177;
X! #if VAX630 || VAX650
X }
X #endif
X if (c=='\r')
END-of-3200/vaxstand/prf.c
echo x - 3200/vaxstand/qdcons.c
sed 's/^X//' >3200/vaxstand/qdcons.c << 'END-of-3200/vaxstand/qdcons.c'
X*** /tmp/d21467 Mon Oct 31 20:45:40 1988
X--- qdcons.c Mon Oct 31 20:42:06 1988
X***************
X*** 1,17 ****
X /*
X! * Copyright (c) 1982, 1986 Regents of the University of California.
X! * All rights reserved. The Berkeley software License Agreement
X! * specifies the terms and conditions for redistribution.
X *
X! * @(#)qdcons.c 1.3 Berkeley 6/29/88
X *
X * derived from: @(#)qdcons.c 4.1 (ULTRIX 11/23/87
X */
X
X /************************************************************************
X *
X * ULTRIX QDSS STANDALONE BOOT DEVICE DRIVER...
X * device driver to boot system with QDSS as console
X *
X *************************************************************************/
X /************************************************************************
X--- 1,30 ----
X /*
X! * Copyright (c) 1988 Regents of the University of California.
X! * All rights reserved.
X *
X! * Redistribution and use in source and binary forms are permitted
X! * provided that the above copyright notice and this paragraph are
X! * duplicated in all such forms and that any documentation,
X! * advertising materials, and other materials related to such
X! * distribution and use acknowledge that the software was developed
X! * by the University of California, Berkeley. The name of the
X! * University may not be used to endorse or promote products derived
X! * from this software without specific prior written permission.
X! * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
X! * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
X! * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
X *
X+ * @(#)qdcons.c 7.2 (Berkeley) 8/27/88
X+ */
X+
X+ /*
X * derived from: @(#)qdcons.c 4.1 (ULTRIX 11/23/87
X */
X
X /************************************************************************
X *
X * ULTRIX QDSS STANDALONE BOOT DEVICE DRIVER...
X * device driver to boot system with QDSS as console
X *
X *************************************************************************/
X /************************************************************************
X***************
X*** 185,204 ****
X--- 198,218 ----
X ************************************************************************/
X
X qd_init()
X {
X register char *ROM_console;
X register short *NVR;
X register int i;
X
X caddr_t qdaddr;
X struct dga *dga;
X+ extern int cpu;
X
X qdaddr = (caddr_t) QDSSCSR;
X if (badaddr(qdaddr, sizeof(short)))
X return(0);
X
X *(short *)qdaddr = (short) (QDBASE >> 16);
X
X /*----------------------------------------------------------------------
X * load qdmap struct with the physical addresses of the QDSS elements */
X
X***************
X*** 228,262 ****
X
X cursor.x = 0; /* init cursor to top left */
X cursor.y = 0;
X
X set_defaults(); /* setup the default device */
X ldfont(); /* PtoB the font into off-screen */
X
X /*--------------------------------------------------------------------
X * tell the VAX ROM that the cursor is at the bottom of the screen */
X
X! NVR = (short *) NVR_ADRS;
X
X! i = *NVR++ & 0xFF;
X! i |= (*NVR++ & 0xFF) << 8;
X! i |= (*NVR++ & 0xFF) << 16;
X! i |= (*NVR++ & 0xFF) << 24;
X
X! ROM_console = (char *) i;
X
X! ROM_console[CURRENT_COL] = ROM_console[COL_MIN];
X! ROM_console[CURRENT_ROW] = ROM_console[ROW_MAX];
X
X /*----------------------------------------------------------
X * smash system virtual console service routine addresses */
X
X v_getc = qdgetc;
X v_putc = qdputc;
X
X return(1);
X
X } /* qd_init */
X
X /*******************************************************************
X *
X * qdputc()... output a character to the QDSS screen
X--- 242,279 ----
X
X cursor.x = 0; /* init cursor to top left */
X cursor.y = 0;
X
X set_defaults(); /* setup the default device */
X ldfont(); /* PtoB the font into off-screen */
X
X /*--------------------------------------------------------------------
X * tell the VAX ROM that the cursor is at the bottom of the screen */
X
X! if (cpu == VAX_630) {
X! NVR = (short *) NVR_ADRS;
X
X! i = *NVR++ & 0xFF;
X! i |= (*NVR++ & 0xFF) << 8;
X! i |= (*NVR++ & 0xFF) << 16;
X! i |= (*NVR++ & 0xFF) << 24;
X
X! ROM_console = (char *) i;
X
X! ROM_console[CURRENT_COL] = ROM_console[COL_MIN];
X! ROM_console[CURRENT_ROW] = ROM_console[ROW_MAX];
X! }
X
X /*----------------------------------------------------------
X * smash system virtual console service routine addresses */
X
X+ printf("switching console to QDSS display...\n");
X v_getc = qdgetc;
X v_putc = qdputc;
X
X return(1);
X
X } /* qd_init */
X
X /*******************************************************************
X *
X * qdputc()... output a character to the QDSS screen
END-of-3200/vaxstand/qdcons.c
echo x - 3200/vaxstand/srt0.c
sed 's/^X//' >3200/vaxstand/srt0.c << 'END-of-3200/vaxstand/srt0.c'
X*** /tmp/d20749 Mon Oct 31 20:16:08 1988
X--- srt0.c Sat Aug 27 07:22:52 1988
X***************
X*** 3,9 ****
X * All rights reserved. The Berkeley software License Agreement
X * specifies the terms and conditions for redistribution.
X *
X! * @(#)srt0.c 7.4 (Berkeley) 1/28/88
X */
X
X #include "../vax/mtpr.h"
X--- 3,9 ----
X * All rights reserved. The Berkeley software License Agreement
X * specifies the terms and conditions for redistribution.
X *
X! * @(#)srt0.c 7.5 (Berkeley) 8/27/88
X */
X
X #include "../vax/mtpr.h"
X***************
X*** 33,42 ****
X mtpr $HIGH,$IPL # just in case
X
X #ifdef REL
X! # we need to do special stuff on microvax II
X mfpr $SID,r0
X cmpzv $24,$8,r0,$VAX_630
X! bneq 1f
X
X /*
X * Were we booted by VMB? If so, r11 is not boothowto,
X--- 33,44 ----
X mtpr $HIGH,$IPL # just in case
X
X #ifdef REL
X! # we need to do special stuff on microvaxen
X mfpr $SID,r0
X cmpzv $24,$8,r0,$VAX_630
X! beql 1f
X! cmpzv $24,$8,r0,$VAX_650
X! bneq 2f
X
X /*
X * Were we booted by VMB? If so, r11 is not boothowto,
X***************
X*** 44,57 ****
X * User's Manual, pp 3-21). These tests were devised by
X * richl at tektronix, 11/10/87.
X */
X cmpl (r11),r11 # if boothowto, r11 will be small
X! bneq 1f # and these will not fault
X cmpl 4(r11),$0
X! bneq 1f
X cmpl 8(r11),$-1
X! bneq 1f
X tstl 0xc(r11)
X! bneq 1f
X
X /*
X * Booted by VMB: get flags from extended rpb.
X--- 46,60 ----
X * User's Manual, pp 3-21). These tests were devised by
X * richl at tektronix, 11/10/87.
X */
X+ 1:
X cmpl (r11),r11 # if boothowto, r11 will be small
X! bneq 2f # and these will not fault
X cmpl 4(r11),$0
X! bneq 2f
X cmpl 8(r11),$-1
X! bneq 2f
X tstl 0xc(r11)
X! bneq 2f
X
X /*
X * Booted by VMB: get flags from extended rpb.
X***************
X*** 59,65 ****
X */
X movl 0x30(r11),r11
X movl $9,r10 # device = ra(0,0)
X! 1:
X movl $RELOC,sp
X #else
X movl $RELOC-0x2400,sp
X--- 62,68 ----
X */
X movl 0x30(r11),r11
X movl $9,r10 # device = ra(0,0)
X! 2:
X movl $RELOC,sp
X #else
X movl $RELOC-0x2400,sp
X***************
X*** 152,157 ****
X--- 155,162 ----
X .word 1f-0b # 6 is 8800
X .word 1f-0b # 7 is 610
X .word 5f-0b # 8 is 630
X+ .word 1f-0b # 9 is ???
X+ .word 5f-0b # 10 is 650
X 5:
X mtpr $0xf,$MCESR
X brb 1f
END-of-3200/vaxstand/srt0.c
echo c - 3200/vaxuba
mkdir 3200/vaxuba > /dev/null 2>&1
echo x - 3200/vaxuba/dhu.c
sed 's/^X//' >3200/vaxuba/dhu.c << 'END-of-3200/vaxuba/dhu.c'
X*** /tmp/d20344 Mon Oct 31 20:01:47 1988
X--- dhu.c Sat Aug 27 07:21:06 1988
X***************
X*** 3,9 ****
X * All rights reserved. The Berkeley software License Agreement
X * specifies the terms and conditions for redistribution.
X *
X! * @(#)dhu.c 7.2 (Berkeley) 12/19/86
X */
X
X /*
X--- 3,9 ----
X * All rights reserved. The Berkeley software License Agreement
X * specifies the terms and conditions for redistribution.
X *
X! * @(#)dhu.c 7.3 (Berkeley) 8/27/88
X */
X
X /*
X***************
X*** 307,313 ****
X register line;
X int overrun = 0;
X
X! #ifdef VAX630
X (void) spl5();
X #endif
X ui = dhuinfo[dhu];
X--- 307,313 ----
X register line;
X int overrun = 0;
X
X! #ifdef QBA
X (void) spl5();
X #endif
X ui = dhuinfo[dhu];
X***************
X*** 516,522 ****
X register int line, t;
X u_short cntr;
X
X! #ifdef VAX630
X (void) spl5();
X #endif
X ui = dhuinfo[dhu];
X--- 516,522 ----
X register int line, t;
X u_short cntr;
X
X! #ifdef QBA
X (void) spl5();
X #endif
X ui = dhuinfo[dhu];
END-of-3200/vaxuba/dhu.c
echo x - 3200/vaxuba/tmscp.c
sed 's/^X//' >3200/vaxuba/tmscp.c << 'END-of-3200/vaxuba/tmscp.c'
X*** /tmp/d20354 Mon Oct 31 20:02:24 1988
X--- tmscp.c Mon Oct 31 20:02:05 1988
X***************
X*** 1,4 ****
X! /* @(#)tmscp.c 7.4 (Berkeley) 5/27/88 */
X
X #ifndef lint
X static char *sccsid = "@(#)tmscp.c 1.24 (ULTRIX) 1/21/86";
X--- 1,4 ----
X! /* @(#)tmscp.c 7.5 (Berkeley) 8/27/88 */
X
X #ifndef lint
X static char *sccsid = "@(#)tmscp.c 1.24 (ULTRIX) 1/21/86";
X***************
X*** 323,330 ****
X if (count == DELAYTEN)
X return(0);
X
X! #ifdef VAX630
X! if (cpu == VAX_630)
X br = 0x15; /* screwy interrupt structure */
X #endif
X return(sizeof (struct tmscpdevice));
X--- 323,330 ----
X if (count == DELAYTEN)
X return(0);
X
X! #ifdef QBA
X! if (cpu == VAX_630 || cpu == VAX_650)
X br = 0x15; /* screwy interrupt structure */
X #endif
X return(sizeof (struct tmscpdevice));
END-of-3200/vaxuba/tmscp.c
echo x - 3200/vaxuba/ubareg.h
sed 's/^X//' >3200/vaxuba/ubareg.h << 'END-of-3200/vaxuba/ubareg.h'
X*** /tmp/d21374 Mon Oct 31 20:38:06 1988
X--- ubareg.h Mon Oct 31 20:37:44 1988
X***************
X*** 3,9 ****
X * All rights reserved. The Berkeley software License Agreement
X * specifies the terms and conditions for redistribution.
X *
X! * @(#)ubareg.h 7.4 (Berkeley) 5/14/88
X */
X
X /*
X--- 3,9 ----
X * All rights reserved. The Berkeley software License Agreement
X * specifies the terms and conditions for redistribution.
X *
X! * @(#)ubareg.h 7.5 (Berkeley) 8/27/88
X */
X
X /*
X***************
X*** 28,34 ****
X #define DW730 3 /* has adaptor regs, no sr: 750, 730 */
X #endif
X
X! #if VAX630
X #define QBA 4 /* 22-bit Q-bus, no adaptor regs: uVAX II */
X #endif
X
X--- 28,34 ----
X #define DW730 3 /* has adaptor regs, no sr: 750, 730 */
X #endif
X
X! #if VAX630 || VAX650
X #define QBA 4 /* 22-bit Q-bus, no adaptor regs: uVAX II */
X #endif
X
X***************
X*** 237,243 ****
X * Symbolic BUS addresses for UBAs.
X */
X
X! #if VAX630
X #define QBAMAP630 ((struct pte *)0x20088000)
X #define QMEM630 0x30000000
X #define QIOPAGE630 0x20000000
X--- 237,243 ----
X * Symbolic BUS addresses for UBAs.
X */
X
X! #if VAX630 || VAX650
X #define QBAMAP630 ((struct pte *)0x20088000)
X #define QMEM630 0x30000000
X #define QIOPAGE630 0x20000000
END-of-3200/vaxuba/ubareg.h
echo x - 3200/vaxuba/uda.c
sed 's/^X//' >3200/vaxuba/uda.c << 'END-of-3200/vaxuba/uda.c'
X*** /tmp/d20372 Mon Oct 31 20:03:37 1988
X--- uda.c Mon Oct 31 20:03:22 1988
X***************
X*** 17,23 ****
X * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
X * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
X *
X! * @(#)uda.c 7.19 (Berkeley) 7/9/88
X */
X
X /*
X--- 17,23 ----
X * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
X * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
X *
X! * @(#)uda.c 7.20 (Berkeley) 8/27/88
X */
X
X /*
X***************
X*** 330,337 ****
X goto bad;
X
X /* should have interrupted by now */
X! #ifdef VAX630
X! if (cpu == VAX_630)
X br = 0x15; /* screwy interrupt structure */
X #endif
X return (sizeof (struct udadevice));
X--- 330,337 ----
X goto bad;
X
X /* should have interrupted by now */
X! #ifdef QBA
X! if (cpu == VAX_630 || cpu == VAX_650)
X br = 0x15; /* screwy interrupt structure */
X #endif
X return (sizeof (struct udadevice));
X***************
X*** 1272,1278 ****
X register struct mscp *mp;
X register int i;
X
X! #ifdef VAX630
X (void) spl5(); /* Qbus interrupt protocol is odd */
X #endif
X sc->sc_wticks = 0; /* reset interrupt watchdog */
X--- 1272,1278 ----
X register struct mscp *mp;
X register int i;
X
X! #ifdef QBA
X (void) spl5(); /* Qbus interrupt protocol is odd */
X #endif
X sc->sc_wticks = 0; /* reset interrupt watchdog */
END-of-3200/vaxuba/uda.c
exit
More information about the Comp.bugs.4bsd.ucb-fixes
mailing list