bostic@OKEEFFE.BERKELEY.EDU (Keith Bostic) (11/03/88)
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