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