11.13Sandvar/*	$NetBSD: ka650.h,v 1.13 2022/04/08 10:17:54 andvar Exp $	*/
21.1Sragge/*
31.1Sragge * Copyright (c) 1988 The Regents of the University of California.
41.1Sragge * All rights reserved.
51.1Sragge *
61.1Sragge * This code is derived from software contributed to Berkeley by
71.1Sragge * Mt. Xinu.
81.1Sragge *
91.1Sragge * Redistribution and use in source and binary forms, with or without
101.1Sragge * modification, are permitted provided that the following conditions
111.1Sragge * are met:
121.1Sragge * 1. Redistributions of source code must retain the above copyright
131.1Sragge *    notice, this list of conditions and the following disclaimer.
141.1Sragge * 2. Redistributions in binary form must reproduce the above copyright
151.1Sragge *    notice, this list of conditions and the following disclaimer in the
161.1Sragge *    documentation and/or other materials provided with the distribution.
171.10Sagc * 3. Neither the name of the University nor the names of its contributors
181.1Sragge *    may be used to endorse or promote products derived from this software
191.1Sragge *    without specific prior written permission.
201.1Sragge *
211.1Sragge * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
221.1Sragge * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
231.1Sragge * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
241.1Sragge * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
251.1Sragge * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
261.1Sragge * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
271.1Sragge * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
281.1Sragge * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
291.1Sragge * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
301.1Sragge * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
311.1Sragge * SUCH DAMAGE.
321.1Sragge *
331.1Sragge *	@(#)ka650.h	7.5 (Berkeley) 6/28/90
341.1Sragge */
351.1Sragge
361.9Smatt#ifndef _VAX_KA650_H_
371.9Smatt#define _VAX_KA650_H_
381.9Smatt
391.1Sragge/*
401.1Sragge *
411.11Swiz * Definitions specific to the ka650 (uVAX 3600/3602) CPU card.
421.1Sragge */
431.1Sragge
441.1Sragge/*
451.1Sragge * CAER: Memory System Error Register (IPR 39)
461.1Sragge */
471.1Sragge#define CAER_DAL	0x00000040	/* CDAL or level 2 cache data parity */
481.1Sragge#define CAER_MCD	0x00000020	/* mcheck due to DAL parity error */
491.1Sragge#define CAER_MCC	0x00000010	/* mcheck due to 1st lev cache parity */
501.1Sragge#define CAER_DAT	0x00000002	/* data parity in 1st level cache */
511.1Sragge#define CAER_TAG	0x00000001	/* tag parity in 1st level cache */
521.1Sragge
531.1Sragge/*
541.1Sragge * CADR: Cache Disable Register (IPR 37)
551.1Sragge */
561.1Sragge#define CADR_STMASK	0x000000f0	/* 1st level cache state mask */
571.1Sragge#define CADR_SEN2	0x00000080	/* 1st level cache set 2 enabled */
581.1Sragge#define CADR_SEN1	0x00000040	/* 1st level cache set 1 enabled */
591.1Sragge#define CADR_CENI	0x00000020	/* 1st level I-stream caching enabled */
601.1Sragge#define CADR_CEND	0x00000010	/* 1st level D-stream caching enabled */
611.1Sragge
621.1Sragge/*
631.1Sragge * Internal State Info 2: (for mcheck recovery)
641.1Sragge */
651.1Sragge#define IS2_VCR		0x00008000	/* VAX Can't Restart flag */
661.1Sragge
671.1Sragge/*
681.1Sragge * DMA System Error Register (merr_dser)
691.1Sragge */
701.1Sragge#define DSER_QNXM	0x00000080	/* Q-22 Bus NXM */
711.1Sragge#define DSER_QPE	0x00000020	/* Q-22 Bus parity Error */
721.1Sragge#define DSER_MEM	0x00000010	/* Main mem err due to ext dev DMA */
731.1Sragge#define DSER_LOST	0x00000008	/* Lost error: DSER <7,5,4,0> set */
741.11Swiz#define DSER_NOGRANT	0x00000004	/* No Grant timeout on CPU demand R/W */
751.1Sragge#define DSER_DNXM	0x00000001	/* DMA NXM */
761.1Sragge#define DSER_CLEAR 	(DSER_QNXM | DSER_QPE | DSER_MEM |  \
771.1Sragge			 DSER_LOST | DSER_NOGRANT | DSER_DNXM)
781.1Sragge#define DMASER_BITS \
791.1Sragge"\20\20BHALT\17DCNEG\10QBNXM\6QBPE\5MEMERR\4LOSTERR\3NOGRANT\1DMANXM"
801.1Sragge
811.2Smycroft#ifndef _LOCORE
821.1Sragge/*
831.1Sragge * Local registers (in I/O space)
841.1Sragge * This is done in disjoint sections.  Map names are set in locore.s
851.1Sragge * and they are mapped in routine configcpu()
861.1Sragge */
871.1Sragge
881.1Sragge/*
891.1Sragge * memory error & configuration registers
901.1Sragge */
911.1Sraggestruct ka650_merr {
921.1Sragge	u_long	merr_scr;	/* System Config Register */
931.1Sragge	u_long	merr_dser;	/* DMA System Error Register */
941.1Sragge	u_long	merr_qbear;	/* QBus Error Address Register */
951.1Sragge	u_long	merr_dear;	/* DMA Error Address Register */
961.1Sragge	u_long	merr_qbmbr;	/* Q Bus Map Base address Register */
971.1Sragge	u_long	pad[59];
981.1Sragge	u_long	merr_csr[16];	/* Main Memory Config Regs (16 banks) */
991.1Sragge	u_long	merr_errstat;	/* Main Memory Error Status */
1001.1Sragge	u_long	merr_cont;	/* Main Memory Control */
1011.1Sragge};
1021.1Sragge#define KA650_MERR	0x20080000
1031.1Sragge
1041.1Sragge/*
1051.1Sragge * Main Memory Error Status Register (merr_errstat)
1061.1Sragge */
1071.1Sragge#define MEM_EMASK	0xe0000180	/* mask of all err bits */
1081.1Sragge#define MEM_RDS		0x80000000	/* uncorrectable main memory */
1091.1Sragge#define MEM_RDSHIGH	0x40000000	/* high rate RDS errors */
1101.1Sragge#define MEM_CRD		0x20000000	/* correctable main memory */
1111.1Sragge#define MEM_DMA		0x00000100	/* DMA read or write error */
1121.1Sragge#define MEM_CDAL	0x00000080	/* CDAL Parity error on write */
1131.1Sragge#define MEM_PAGE	0x1ffffe00	/* Offending Page Number */
1141.1Sragge#define MEM_PAGESHFT	9		/* Shift to normalize page number */
1151.1Sragge
1161.1Sragge/*
1171.1Sragge * Main Memory Control & Diag Status Reg (merr_cont)
1181.1Sragge */
1191.1Sragge#define MEM_CRDINT	0x00001000	/* CRD interrupts enabled */
1201.1Sragge#define MEM_REFRESH	0x00000800	/* Forced memory refresh */
1211.1Sragge#define MEM_ERRDIS	0x00000400	/* error detect disable	*/
1221.1Sragge#define MEM_DIAG	0x00000080	/* Diagnostics mode */
1231.1Sragge#define MEM_CHECK	0x0000007f	/* check bits for diagnostic mode */
1241.1Sragge
1251.1Sragge/*
1261.1Sragge * Main Memory Config Regs (merr_csr[0-15])
1271.1Sragge */
1281.1Sragge#define MEM_BNKENBLE	0x80000000	/* Bank Enable */
1291.1Sragge#define MEM_BNKNUM	0x03c00000	/* Physical map Bank number */
1301.1Sragge#define MEM_BNKUSAGE	0x00000003	/* Bank Usage */
1311.1Sragge
1321.1Sragge/*
1331.1Sragge * Cache Control & Boot/Diag registers
1341.1Sragge */
1351.1Sraggestruct ka650_cbd {
1361.1Sragge	u_char	cbd_cacr;	/* Low byte: Cache Enable & Parity Err detect */
1371.1Sragge	u_char	cbd_cdf1;	/* Cache diagnostic field (unused) */
1381.1Sragge	u_char	cbd_cdf2;	/* Cache diagnostic field (unused) */
1391.1Sragge	u_char	pad;
1401.1Sragge	u_long	cbd_bdr;	/* Boot & Diagnostic Register (unused) */
1411.1Sragge};
1421.1Sragge#define KA650_CBD	0x20084000
1431.1Sragge
1441.1Sragge/*
1451.1Sragge * CACR: Cache Control Register (2nd level cache) (cbd_cacr)
1461.1Sragge */
1471.1Sragge#define CACR_CEN	0x00000010	/* Cache enable */
1481.1Sragge#define CACR_CPE	0x00000020	/* Cache Parity Error */
1491.1Sragge
1501.1Sragge/*
1511.1Sragge * System Support Chip (SSC) registers
1521.1Sragge */
1531.1Sraggestruct ka650_ssc {
1541.1Sragge	u_long	ssc_sscbr;	/* SSC Base Addr Register */
1551.1Sragge	u_long	pad1[3];
1561.1Sragge	u_long	ssc_ssccr;	/* SSC Configuration Register */
1571.1Sragge	u_long	pad2[3];
1581.1Sragge	u_long	ssc_cbtcr;	/* CDAL Bus Timeout Control Register */
1591.1Sragge	u_long	pad3[55];
1601.1Sragge	u_long	ssc_tcr0;	/* timer control reg 0 */
1611.1Sragge	u_long	ssc_tir0;	/* timer interval reg 0 */
1621.1Sragge	u_long	ssc_tnir0;	/* timer next interval reg 0 */
1631.1Sragge	u_long	ssc_tivr0;	/* timer interrupt vector reg 0 */
1641.1Sragge	u_long	ssc_tcr1;	/* timer control reg 1 */
1651.1Sragge	u_long	ssc_tir1;	/* timer interval reg 1 */
1661.1Sragge	u_long	ssc_tnir1;	/* timer next interval reg 1 */
1671.1Sragge	u_long	ssc_tivr1;	/* timer interrupt vector reg 1 */
1681.1Sragge	u_long	pad4[184];
1691.1Sragge	u_char	ssc_cpmbx;	/* Console Program Mail Box: Lang & Hact */
1701.1Sragge	u_char	ssc_terminfo;	/* TTY info: Video Dev, MCS, CRT & ROM flags */
1711.1Sragge	u_char	ssc_keyboard;	/* Keyboard code */
1721.1Sragge};
1731.1Sragge#define KA650_SSC	0x20140000
1741.1Sragge
1751.1Sragge/*
1761.1Sragge * CBTCR: CDAL Bus Timeout Control Register (ssc_cbtcr)
1771.1Sragge */
1781.1Sragge#define CBTCR_BTO	0x80000000	/* r/w unimp IPR or unack intr */
1791.1Sragge#define CBTCR_RWT	0x40000000	/* CDAL Bus Timeout on CPU or DMA */
1801.1Sragge
1811.1Sragge/*
1821.13Sandvar * TCR0/TCR1: Programmable Timer Control Registers (ssc_tcr[01])
1831.1Sragge * (The rest of the bits are the same as in the standard VAX
1841.1Sragge *	Interval timer and are defined in clock.h)
1851.1Sragge */
1861.1Sragge#define TCR_STP		0x00000004	/* Stop after time-out */
1871.1Sragge
1881.1Sragge/*
1891.1Sragge * Flags for Console Program Mail Box
1901.1Sragge */
1911.1Sragge#define CPMB650_HALTACT	0x03	/* Field for halt action */
1921.1Sragge#define CPMB650_RESTART	0x01	/* Restart */
1931.1Sragge#define CPMB650_REBOOT	0x02	/* Reboot */
1941.1Sragge#define CPMB650_HALT	0x03	/* Halt */
1951.1Sragge#define CPMB650_BIP	0x04	/* Bootstrap in progress */
1961.1Sragge#define CPMB650_RIP	0x08	/* Restart in progress */
1971.6Sragge#define	CPMB650_DOTHIS	0x30	/* Execute sommand */
1981.1Sragge#define CPMB650_LANG	0xf0	/* Language field */
1991.1Sragge
2001.1Sragge/*
2011.1Sragge * Inter Processor Communication Register
2021.11Swiz * To determine if memory error was from QBUS device DMA (as opposed to CPU).
2031.1Sragge */
2041.1Sraggestruct ka650_ipcr {
2051.1Sragge	u_long	pad[80];
2061.1Sragge	u_short	ipcr0;		/* InterProcessor Comm Reg for arbiter */
2071.1Sragge};
2081.1Sragge#define KA650_IPCR	0x20001e00
2091.1Sragge
2101.8Ssimonb#endif	/* _LOCORE */
2111.1Sragge
2121.1Sragge/*
2131.1Sragge * Physical start address of the Qbus memory.
2141.1Sragge * The q-bus memory size is 4 meg.
2151.1Sragge * Physical start address of the I/O space (where the 8Kbyte I/O page is).
2161.1Sragge */
2171.1Sragge#define KA650_QMEM	0x30000000
2181.1Sragge#define KA650_QMEMSIZE	(512*8192)
2191.1Sragge#define KA650_QDEVADDR	0x20000000
2201.1Sragge
2211.1Sragge/*
2221.1Sragge * Mapping info for Cache Entries, including
2231.1Sragge * Size (in bytes) of 2nd Level Cache for cache flush operation
2241.1Sragge */
2251.1Sragge#define KA650_CACHE	0x10000000
2261.1Sragge#define KA650_CACHESIZE	(64*1024)
2271.1Sragge
2281.1Sragge/*
2291.1Sragge * Useful ROM addresses
2301.1Sragge */
2311.1Sragge#define	KA650ROM_SIDEX	0x20060004	/* system ID extension */
2321.1Sragge#define	KA650ROM_GETC	0x20060008	/* (jsb) get character from console */
2331.1Sragge#define	KA650ROM_PUTS	0x2006000c	/* (jsb) put string to console */
2341.1Sragge#define	KA650ROM_GETS	0x20060010	/* (jsb) read string with prompt */
2351.1Sragge#define KA650_CONSTYPE	0x20140401	/* byte at which console type resides */
2361.5Sragge
2371.5Sragge/*
2381.5Sragge * Some useful macros
2391.5Sragge */
2401.5Sragge#define	GETCPUTYPE(x)	((x >> 24) & 0xff)
2411.5Sragge#define	GETSYSSUBT(x)	((x >> 8) & 0xff)
2421.5Sragge#define	GETFRMREV(x)	((x >> 16) & 0xff)
2431.5Sragge#define	GETCODREV(x)	(x & 0xff)
2441.9Smatt
2451.9Smatt#endif /* _VAX_KA650_H_ */
246