Thread View: comp.bugs.4bsd.ucb-fixes
1 messages
1 total messages
Started by Keith Bostic
Wed, 02 Nov 1988 18:59
V1.66 (MicroVAX 3000 support)
Author: Keith Bostic
Date: Wed, 02 Nov 1988 18:59
Date: Wed, 02 Nov 1988 18:59
2072 lines
58770 bytes
58770 bytes
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@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@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
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads