xref: /netbsd-src/sys/arch/hppa/dev/viper.h (revision e4ebea9efd33d7fbff602d6288b15240e56427d2)
1*e4ebea9eSandvar /*	$NetBSD: viper.h,v 1.4 2024/05/14 19:00:43 andvar Exp $	*/
26d3ceb1dSskrll 
36d3ceb1dSskrll /*	$OpenBSD: viper.h,v 1.2 1999/06/29 20:56:10 mickey Exp $	*/
46d3ceb1dSskrll 
56d3ceb1dSskrll /*
66d3ceb1dSskrll  * Copyright 1996 1995 by Open Software Foundation, Inc.
76d3ceb1dSskrll  *              All Rights Reserved
86d3ceb1dSskrll  *
96d3ceb1dSskrll  * Permission to use, copy, modify, and distribute this software and
106d3ceb1dSskrll  * its documentation for any purpose and without fee is hereby granted,
116d3ceb1dSskrll  * provided that the above copyright notice appears in all copies and
126d3ceb1dSskrll  * that both the copyright notice and this permission notice appear in
136d3ceb1dSskrll  * supporting documentation.
146d3ceb1dSskrll  *
156d3ceb1dSskrll  * OSF DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE
166d3ceb1dSskrll  * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
176d3ceb1dSskrll  * FOR A PARTICULAR PURPOSE.
186d3ceb1dSskrll  *
196d3ceb1dSskrll  * IN NO EVENT SHALL OSF BE LIABLE FOR ANY SPECIAL, INDIRECT, OR
206d3ceb1dSskrll  * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
216d3ceb1dSskrll  * LOSS OF USE, DATA OR PROFITS, WHETHER IN ACTION OF CONTRACT,
226d3ceb1dSskrll  * NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
236d3ceb1dSskrll  * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
246d3ceb1dSskrll  *
256d3ceb1dSskrll  */
266d3ceb1dSskrll /*
276d3ceb1dSskrll  * Copyright (c) 1991,1994 The University of Utah and
286d3ceb1dSskrll  * the Computer Systems Laboratory (CSL).  All rights reserved.
296d3ceb1dSskrll  *
306d3ceb1dSskrll  * Permission to use, copy, modify and distribute this software is hereby
316d3ceb1dSskrll  * granted provided that (1) source code retains these copyright, permission,
326d3ceb1dSskrll  * and disclaimer notices, and (2) redistributions including binaries
336d3ceb1dSskrll  * reproduce the notices in supporting documentation, and (3) all advertising
346d3ceb1dSskrll  * materials mentioning features or use of this software display the following
356d3ceb1dSskrll  * acknowledgement: ``This product includes software developed by the
366d3ceb1dSskrll  * Computer Systems Laboratory at the University of Utah.''
376d3ceb1dSskrll  *
386d3ceb1dSskrll  * THE UNIVERSITY OF UTAH AND CSL ALLOW FREE USE OF THIS SOFTWARE IN ITS "AS
396d3ceb1dSskrll  * IS" CONDITION.  THE UNIVERSITY OF UTAH AND CSL DISCLAIM ANY LIABILITY OF
406d3ceb1dSskrll  * ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
416d3ceb1dSskrll  *
426d3ceb1dSskrll  * CSL requests users of this software to return to csl-dist@cs.utah.edu any
436d3ceb1dSskrll  * improvements that they make and grant CSL redistribution rights.
446d3ceb1dSskrll  *
456d3ceb1dSskrll  * 	Utah $Hdr: viper.h 1.8 94/12/14$
466d3ceb1dSskrll  */
476d3ceb1dSskrll 
486d3ceb1dSskrll #define VIPER_HPA 0xfffbf000
496d3ceb1dSskrll 
506d3ceb1dSskrll /*
516d3ceb1dSskrll  * Viper control register.
526d3ceb1dSskrll  *
536d3ceb1dSskrll  * With respect to arbitration preference (*_prf), only one of these may be
546d3ceb1dSskrll  * set at any one time.  "preference" means that a particular device will
556d3ceb1dSskrll  * be granted the bus on every other arbitration cycle; these bits default
566d3ceb1dSskrll  * to unset (0).  Similarly, a device may be denied the bus (*_den); these
576d3ceb1dSskrll  * bits default to *set* (1).
586d3ceb1dSskrll  *
596d3ceb1dSskrll  * The macros V_CTRL_ANYPRF or V_CTRL_ANYDEN should be used to determine
606d3ceb1dSskrll  * if any preference or deny bits are set.
616d3ceb1dSskrll  */
626d3ceb1dSskrll #define	VIPER_BITS	"\020\001eisa_den\002eisa_prf\003core_den\004core_prf" \
636d3ceb1dSskrll 			"\005sgc1_den\006sgc1_prf\007sgc0_den\010sgc0_prf" \
646d3ceb1dSskrll 			"\012cpu_prf\021lpmc_en\022ipref_en"
656d3ceb1dSskrll struct vi_ctrl {		/* (WO) */
666d3ceb1dSskrll 	u_int	vsc_tout:13,	/* VSC clocks to wait before buserr timeout */
676d3ceb1dSskrll 			: 1,
686d3ceb1dSskrll 		ipref_en: 1,	/* enable instruction prefetching */
696d3ceb1dSskrll 		lpmc_en	: 1,	/* enable Low Priority Machine Checks */
706d3ceb1dSskrll 			: 6,
716d3ceb1dSskrll 		cpu_prf	: 1,	/* CPU has arbitration preference */
726d3ceb1dSskrll 			: 1,
736d3ceb1dSskrll 		sgc0_prf: 1,	/* SGC0 has arbitration preference */
746d3ceb1dSskrll 		sgc0_den: 1,	/* SGC0 denied bus grants */
756d3ceb1dSskrll 		sgc1_prf: 1,	/* SGC1 has arbitration preference */
766d3ceb1dSskrll 		sgc1_den: 1,	/* SGC1 denied bus grants */
776d3ceb1dSskrll 		core_prf: 1,	/* CORE bus has arbitration preference */
786d3ceb1dSskrll 		core_den: 1,	/* CORE denied bus grants */
796d3ceb1dSskrll 		eisa_prf: 1,	/* EISA bus has arbitration preference */
806d3ceb1dSskrll 		eisa_den: 1;	/* EISA denied bus grants */
816d3ceb1dSskrll };
826d3ceb1dSskrll #define	VI_CTRL_ANYPRF	0x02AA
836d3ceb1dSskrll #define	VI_CTRL_ANYDEN	0x0055
846d3ceb1dSskrll #define	VI_CTRL		PAGE0->pz_Pdep.pd_Viper.v_Ctrlcpy
856d3ceb1dSskrll 
866d3ceb1dSskrll #define	VI_STAT_BITS	"\020\001grf_buserr\002cpu_buserr\003ven_tmo" \
876d3ceb1dSskrll 			"\004ven_buserr\005toc\006hardecc\007softecc\010cmdrst"
886d3ceb1dSskrll struct vi_stat {		/* (RO) */
896d3ceb1dSskrll 	u_int	hw_rev	:24,	/* Viper hardware revision (24 bits!) */
906d3ceb1dSskrll 		cmdreset: 1,	/* set if last chip reset caused by CMD_RESET */
916d3ceb1dSskrll 		softecc	: 1,	/* correctable memory error (lpmc_en set) */
926d3ceb1dSskrll 		hardecc	: 1,	/* uncorrectable memory error (HPMC) */
936d3ceb1dSskrll 		toc	: 1,	/* Transfer Of Control signaled */
946d3ceb1dSskrll 		vn_ader	: 1,	/* Venom address error (lpmc_en set) */
956d3ceb1dSskrll 		vn_vscto: 1,	/* Venom VSC timeout (lpmc_en set) */
966d3ceb1dSskrll 		cpu_ader: 1,	/* CPU address error or timeout (HPMC) */
976d3ceb1dSskrll 		grf_ader: 1;	/* Graphics address error */
986d3ceb1dSskrll };
996d3ceb1dSskrll 
1006d3ceb1dSskrll 
1016d3ceb1dSskrll /*
1026d3ceb1dSskrll  * Viper TRS.  The structures have been defined above; the remaining
1036d3ceb1dSskrll  * fields are described here.
1046d3ceb1dSskrll  *
1056d3ceb1dSskrll  *	vi_intrwd (WO)
1066d3ceb1dSskrll  *		If a high to low transition of the interrupt line occurs,
107f0a7346dSsnj  *		Viper will send this to the CPU to be or'd into its EIR.
1086d3ceb1dSskrll  *		In general, this is an ASP interrupt request.
1096d3ceb1dSskrll  *
1106d3ceb1dSskrll  *	vi_mem_ctrl (WO)
1116d3ceb1dSskrll  *		Set various DRAM attributes (row, cols, refresh, etc).
1126d3ceb1dSskrll  *
1136d3ceb1dSskrll  *	vi_mem_wrchk (WO), vi_mem_rdchk (RO)
1146d3ceb1dSskrll  *		read/write data to be for copyin/memtest.
1156d3ceb1dSskrll  *
1166d3ceb1dSskrll  *	vi_mem_limit (WO)
1176d3ceb1dSskrll  *		Set an upper limit for non-IO memory accesses; this must
1186d3ceb1dSskrll  *		be less than the actual memory size, low 22 bits ignored.
1196d3ceb1dSskrll  *
1206d3ceb1dSskrll  *	vi_merr_w0, vi_merr_w1, vi_merr_ckbyte, vi_merr_addr (RO)
1216d3ceb1dSskrll  *		If memory error detection enabled and soft/hard ECC error,
1226d3ceb1dSskrll  *		raw double word is stored here (w0: most significant word).
1236d3ceb1dSskrll  *		The raw checkbyte data is stored in "vi_merr_ckbyte".
1246d3ceb1dSskrll  *		The address of last logged error is in "vi_merr_addr".
1256d3ceb1dSskrll  *
1266d3ceb1dSskrll  */
1276d3ceb1dSskrll struct vi_trs {
1286d3ceb1dSskrll 	u_int		vi_control;	/* PAGE0->pz_Pdep.pd_Viper.v_Ctrlcpy */
1296d3ceb1dSskrll 	struct vi_stat	vi_status;
1306d3ceb1dSskrll 	u_int		vi_intrwd;
1316d3ceb1dSskrll 	u_int		vi_resv1[13];
1326d3ceb1dSskrll 	u_int		vi_mem_ctrl;
1336d3ceb1dSskrll 	u_int		vi_mem_wrchk;
1346d3ceb1dSskrll 	u_int		vi_mem_limit;
1356d3ceb1dSskrll 	u_int		vi_resv2[1];
1366d3ceb1dSskrll 	u_int		vi_merr_w1;
1376d3ceb1dSskrll 	u_int		vi_merr_w2;
1386d3ceb1dSskrll 	u_int		vi_merr_ckbyte;
1396d3ceb1dSskrll 	u_int		vi_mem_rdchk;
1406d3ceb1dSskrll 	u_int		vi_merr_addr;
1416d3ceb1dSskrll 	u_int		vi_resv3[135];
1426d3ceb1dSskrll };
1436d3ceb1dSskrll 
1446d3ceb1dSskrll 
1456d3ceb1dSskrll /*
1466d3ceb1dSskrll ** Viper also creates HPA registers for the graphics accelerator (Venom).
1474afbf579Sandvar ** Venom has two sets of registers; the User HPA contains registers that
1486d3ceb1dSskrll ** users are allowed to access, while the Supervisor HPA is only accessible
149*e4ebea9eSandvar ** by code running at the most privileged level.  Both sets of registers
1506d3ceb1dSskrll ** are defined below.
1516d3ceb1dSskrll */
1526d3ceb1dSskrll 
1536d3ceb1dSskrll #define	VENOM_USER	((struct vn_user *)0xFFFBC000)
1546d3ceb1dSskrll #define	VENOM_SUPR	((struct vn_supr *)0xFFFBD000)
1556d3ceb1dSskrll 
1566d3ceb1dSskrll /*
1576d3ceb1dSskrll  * Define bits in the Venom "User Control" register.
1586d3ceb1dSskrll  */
1596d3ceb1dSskrll struct vnu_ctl {
1606d3ceb1dSskrll 	u_int	sdt_msk	:16,	/* screen door transparancy mask */
1616d3ceb1dSskrll 		: 6,
1626d3ceb1dSskrll 		d_z_intp: 1,	/* disable Z Interpolation when set */
1636d3ceb1dSskrll 		d_c_intp: 1,	/* disable Color Interpolation when set */
1646d3ceb1dSskrll 		d_ad_inc: 1,	/* disable I/O Addr Incrementing when set */
1656d3ceb1dSskrll 		: 1,
1666d3ceb1dSskrll 		z_fast	: 1,	/* enable Fast Z Interpolation when set */
1676d3ceb1dSskrll 		c_pseudo: 1,	/* enable Pseudo Color when set (disable RG) */
1686d3ceb1dSskrll 		z_prec24: 1,	/* enable 24-bit Z integer precision (o/w 16) */
1696d3ceb1dSskrll 		cmp_intp: 3;	/* enable cond: Z intp owrites old Z (<,>,=) */
1706d3ceb1dSskrll };
1716d3ceb1dSskrll 
1726d3ceb1dSskrll /*
1736d3ceb1dSskrll  * When vnu_ctl's "z_prec24" is set, 24-bit Z integer precision is enabled
1746d3ceb1dSskrll  * (otherwise 16-bit integer precision is used).  When enabled, the format
1756d3ceb1dSskrll  * of various User Control registers is changed; `vnu_prec' (defined below)
1766d3ceb1dSskrll  * should make this format more clear.
1776d3ceb1dSskrll  */
1786d3ceb1dSskrll union vnu_prec {		/* 16 or 24 bit precision */
1796d3ceb1dSskrll 	struct {
1806d3ceb1dSskrll 		u_int	zero1;		/* must be zero */
1816d3ceb1dSskrll 		u_int	intg	:16,	/* integer part (16 bits) */
1826d3ceb1dSskrll 			frac	:12,	/* fractional part (12 bits) */
1836d3ceb1dSskrll 			zero2	: 4;	/* must be zero */
1846d3ceb1dSskrll 	} prec16;
1856d3ceb1dSskrll 	struct {
1866d3ceb1dSskrll 		u_int	frac_lo	: 4,	/* fractional part (lower 4 bits) */
1876d3ceb1dSskrll 			zero1	:28;	/* must be zero */
1886d3ceb1dSskrll 		u_int	intg	:24,	/* integer part (24 bits) */
1896d3ceb1dSskrll 			frac_hi	: 8;	/* fractional part (upper 8 bits) */
1906d3ceb1dSskrll 	} prec24;
1916d3ceb1dSskrll };
1926d3ceb1dSskrll #define	vnu_p16i	prec16.intg
1936d3ceb1dSskrll #define	vnu_p16f	prec16.frac
1946d3ceb1dSskrll #define	vnu_p24i	prec24.intg
1956d3ceb1dSskrll #define	vnu_p24f	((prec24.frac_hi << 4) | prec24.frac_lo)
1966d3ceb1dSskrll #define	vnu_p24fh	prec24.frac_hi
1976d3ceb1dSskrll #define	vnu_p24fl	prec24.frac_lo
1986d3ceb1dSskrll 
1996d3ceb1dSskrll /*
2006d3ceb1dSskrll  * Venom User HPA registers.
2016d3ceb1dSskrll  */
2026d3ceb1dSskrll struct vn_user {
2036d3ceb1dSskrll 	u_int		vnu_resv1[32];
2046d3ceb1dSskrll 	struct vnu_ctl	vnu_uctl;	/* user control */
2056d3ceb1dSskrll 	u_int		vnu_spancnt;	/* span count (13 bits, signed) */
2066d3ceb1dSskrll 	u_int		vnu_graddr;	/* graphics address (24 bits: 6-29) */
2076d3ceb1dSskrll 	u_int		vnu_resv2;
2086d3ceb1dSskrll 	union vnu_prec	vnu_zslope;	/* Z Slope */
2096d3ceb1dSskrll 	union vnu_prec	vnu_z;		/* Z */
2106d3ceb1dSskrll 	u_int		vnu_resv3[8];
2116d3ceb1dSskrll 	u_int		vnu_bslope;	/* Blue Slope (12-19:int, 20-31:fra) */
2126d3ceb1dSskrll 	u_int		vnu_bcolor;	/* Blue Color (12-19:int, 20-31:fra) */
2136d3ceb1dSskrll 	u_int		vnu_resv4[2];
2146d3ceb1dSskrll 	u_int		vnu_rslope;	/* Red Slope (12-19:int, 20-31:fra) */
2156d3ceb1dSskrll 	u_int		vnu_rcolor;	/* Red Color (12-19:int, 20-31:fra) */
2166d3ceb1dSskrll 	u_int		vnu_resv5[2];
2176d3ceb1dSskrll 	u_int		vnu_gslope;	/* Green Slope (12-19:int, 20-31:fra) */
2186d3ceb1dSskrll 	u_int		vnu_gcolor;	/* Green Color (12-19:int, 20-31:fra) */
2196d3ceb1dSskrll };
2206d3ceb1dSskrll 
2216d3ceb1dSskrll 
2226d3ceb1dSskrll /*
2236d3ceb1dSskrll  * Define bits in Venom "Supervisor Control" register.
2246d3ceb1dSskrll  */
2256d3ceb1dSskrll struct vns_ctl {
2266d3ceb1dSskrll 	u_int		: 4,
2276d3ceb1dSskrll 		ioaddr	: 2,	/* graphics addr (bits 4 & 5 of `vnu_graddr') */
2286d3ceb1dSskrll 		d_venom	: 1,	/* disable Venom operation processing */
2296d3ceb1dSskrll 			:25;
2306d3ceb1dSskrll };
2316d3ceb1dSskrll 
2326d3ceb1dSskrll /*
2336d3ceb1dSskrll  * Venom Supervisor HPA registers.
2346d3ceb1dSskrll  */
2356d3ceb1dSskrll struct vn_supr {
2366d3ceb1dSskrll 	u_int		vns_resv1[32];
2376d3ceb1dSskrll 	struct vns_ctl	vns_sctl;	/* supervisor control */
2386d3ceb1dSskrll 	u_int		vns_zaddr;	/* Z Buffer Address (RO) */
2396d3ceb1dSskrll };
2406d3ceb1dSskrll 
2416d3ceb1dSskrll void viper_setintrwnd(uint32_t);
2426d3ceb1dSskrll void viper_eisa_en(void);
2436d3ceb1dSskrll 
244