Home | History | Annotate | Line # | Download | only in dev
viper.h revision 1.3
      1  1.3  andvar /*	$NetBSD: viper.h,v 1.3 2023/05/06 22:17:28 andvar Exp $	*/
      2  1.1   skrll 
      3  1.1   skrll /*	$OpenBSD: viper.h,v 1.2 1999/06/29 20:56:10 mickey Exp $	*/
      4  1.1   skrll 
      5  1.1   skrll /*
      6  1.1   skrll  * Copyright 1996 1995 by Open Software Foundation, Inc.
      7  1.1   skrll  *              All Rights Reserved
      8  1.1   skrll  *
      9  1.1   skrll  * Permission to use, copy, modify, and distribute this software and
     10  1.1   skrll  * its documentation for any purpose and without fee is hereby granted,
     11  1.1   skrll  * provided that the above copyright notice appears in all copies and
     12  1.1   skrll  * that both the copyright notice and this permission notice appear in
     13  1.1   skrll  * supporting documentation.
     14  1.1   skrll  *
     15  1.1   skrll  * OSF DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE
     16  1.1   skrll  * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
     17  1.1   skrll  * FOR A PARTICULAR PURPOSE.
     18  1.1   skrll  *
     19  1.1   skrll  * IN NO EVENT SHALL OSF BE LIABLE FOR ANY SPECIAL, INDIRECT, OR
     20  1.1   skrll  * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
     21  1.1   skrll  * LOSS OF USE, DATA OR PROFITS, WHETHER IN ACTION OF CONTRACT,
     22  1.1   skrll  * NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
     23  1.1   skrll  * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
     24  1.1   skrll  *
     25  1.1   skrll  */
     26  1.1   skrll /*
     27  1.1   skrll  * Copyright (c) 1991,1994 The University of Utah and
     28  1.1   skrll  * the Computer Systems Laboratory (CSL).  All rights reserved.
     29  1.1   skrll  *
     30  1.1   skrll  * Permission to use, copy, modify and distribute this software is hereby
     31  1.1   skrll  * granted provided that (1) source code retains these copyright, permission,
     32  1.1   skrll  * and disclaimer notices, and (2) redistributions including binaries
     33  1.1   skrll  * reproduce the notices in supporting documentation, and (3) all advertising
     34  1.1   skrll  * materials mentioning features or use of this software display the following
     35  1.1   skrll  * acknowledgement: ``This product includes software developed by the
     36  1.1   skrll  * Computer Systems Laboratory at the University of Utah.''
     37  1.1   skrll  *
     38  1.1   skrll  * THE UNIVERSITY OF UTAH AND CSL ALLOW FREE USE OF THIS SOFTWARE IN ITS "AS
     39  1.1   skrll  * IS" CONDITION.  THE UNIVERSITY OF UTAH AND CSL DISCLAIM ANY LIABILITY OF
     40  1.1   skrll  * ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
     41  1.1   skrll  *
     42  1.1   skrll  * CSL requests users of this software to return to csl-dist (at) cs.utah.edu any
     43  1.1   skrll  * improvements that they make and grant CSL redistribution rights.
     44  1.1   skrll  *
     45  1.1   skrll  * 	Utah $Hdr: viper.h 1.8 94/12/14$
     46  1.1   skrll  */
     47  1.1   skrll 
     48  1.1   skrll #define VIPER_HPA 0xfffbf000
     49  1.1   skrll 
     50  1.1   skrll /*
     51  1.1   skrll  * Viper control register.
     52  1.1   skrll  *
     53  1.1   skrll  * With respect to arbitration preference (*_prf), only one of these may be
     54  1.1   skrll  * set at any one time.  "preference" means that a particular device will
     55  1.1   skrll  * be granted the bus on every other arbitration cycle; these bits default
     56  1.1   skrll  * to unset (0).  Similarly, a device may be denied the bus (*_den); these
     57  1.1   skrll  * bits default to *set* (1).
     58  1.1   skrll  *
     59  1.1   skrll  * The macros V_CTRL_ANYPRF or V_CTRL_ANYDEN should be used to determine
     60  1.1   skrll  * if any preference or deny bits are set.
     61  1.1   skrll  */
     62  1.1   skrll #define	VIPER_BITS	"\020\001eisa_den\002eisa_prf\003core_den\004core_prf" \
     63  1.1   skrll 			"\005sgc1_den\006sgc1_prf\007sgc0_den\010sgc0_prf" \
     64  1.1   skrll 			"\012cpu_prf\021lpmc_en\022ipref_en"
     65  1.1   skrll struct vi_ctrl {		/* (WO) */
     66  1.1   skrll 	u_int	vsc_tout:13,	/* VSC clocks to wait before buserr timeout */
     67  1.1   skrll 			: 1,
     68  1.1   skrll 		ipref_en: 1,	/* enable instruction prefetching */
     69  1.1   skrll 		lpmc_en	: 1,	/* enable Low Priority Machine Checks */
     70  1.1   skrll 			: 6,
     71  1.1   skrll 		cpu_prf	: 1,	/* CPU has arbitration preference */
     72  1.1   skrll 			: 1,
     73  1.1   skrll 		sgc0_prf: 1,	/* SGC0 has arbitration preference */
     74  1.1   skrll 		sgc0_den: 1,	/* SGC0 denied bus grants */
     75  1.1   skrll 		sgc1_prf: 1,	/* SGC1 has arbitration preference */
     76  1.1   skrll 		sgc1_den: 1,	/* SGC1 denied bus grants */
     77  1.1   skrll 		core_prf: 1,	/* CORE bus has arbitration preference */
     78  1.1   skrll 		core_den: 1,	/* CORE denied bus grants */
     79  1.1   skrll 		eisa_prf: 1,	/* EISA bus has arbitration preference */
     80  1.1   skrll 		eisa_den: 1;	/* EISA denied bus grants */
     81  1.1   skrll };
     82  1.1   skrll #define	VI_CTRL_ANYPRF	0x02AA
     83  1.1   skrll #define	VI_CTRL_ANYDEN	0x0055
     84  1.1   skrll #define	VI_CTRL		PAGE0->pz_Pdep.pd_Viper.v_Ctrlcpy
     85  1.1   skrll 
     86  1.1   skrll #define	VI_STAT_BITS	"\020\001grf_buserr\002cpu_buserr\003ven_tmo" \
     87  1.1   skrll 			"\004ven_buserr\005toc\006hardecc\007softecc\010cmdrst"
     88  1.1   skrll struct vi_stat {		/* (RO) */
     89  1.1   skrll 	u_int	hw_rev	:24,	/* Viper hardware revision (24 bits!) */
     90  1.1   skrll 		cmdreset: 1,	/* set if last chip reset caused by CMD_RESET */
     91  1.1   skrll 		softecc	: 1,	/* correctable memory error (lpmc_en set) */
     92  1.1   skrll 		hardecc	: 1,	/* uncorrectable memory error (HPMC) */
     93  1.1   skrll 		toc	: 1,	/* Transfer Of Control signaled */
     94  1.1   skrll 		vn_ader	: 1,	/* Venom address error (lpmc_en set) */
     95  1.1   skrll 		vn_vscto: 1,	/* Venom VSC timeout (lpmc_en set) */
     96  1.1   skrll 		cpu_ader: 1,	/* CPU address error or timeout (HPMC) */
     97  1.1   skrll 		grf_ader: 1;	/* Graphics address error */
     98  1.1   skrll };
     99  1.1   skrll 
    100  1.1   skrll 
    101  1.1   skrll /*
    102  1.1   skrll  * Viper TRS.  The structures have been defined above; the remaining
    103  1.1   skrll  * fields are described here.
    104  1.1   skrll  *
    105  1.1   skrll  *	vi_intrwd (WO)
    106  1.1   skrll  *		If a high to low transition of the interrupt line occurs,
    107  1.2     snj  *		Viper will send this to the CPU to be or'd into its EIR.
    108  1.1   skrll  *		In general, this is an ASP interrupt request.
    109  1.1   skrll  *
    110  1.1   skrll  *	vi_mem_ctrl (WO)
    111  1.1   skrll  *		Set various DRAM attributes (row, cols, refresh, etc).
    112  1.1   skrll  *
    113  1.1   skrll  *	vi_mem_wrchk (WO), vi_mem_rdchk (RO)
    114  1.1   skrll  *		read/write data to be for copyin/memtest.
    115  1.1   skrll  *
    116  1.1   skrll  *	vi_mem_limit (WO)
    117  1.1   skrll  *		Set an upper limit for non-IO memory accesses; this must
    118  1.1   skrll  *		be less than the actual memory size, low 22 bits ignored.
    119  1.1   skrll  *
    120  1.1   skrll  *	vi_merr_w0, vi_merr_w1, vi_merr_ckbyte, vi_merr_addr (RO)
    121  1.1   skrll  *		If memory error detection enabled and soft/hard ECC error,
    122  1.1   skrll  *		raw double word is stored here (w0: most significant word).
    123  1.1   skrll  *		The raw checkbyte data is stored in "vi_merr_ckbyte".
    124  1.1   skrll  *		The address of last logged error is in "vi_merr_addr".
    125  1.1   skrll  *
    126  1.1   skrll  */
    127  1.1   skrll struct vi_trs {
    128  1.1   skrll 	u_int		vi_control;	/* PAGE0->pz_Pdep.pd_Viper.v_Ctrlcpy */
    129  1.1   skrll 	struct vi_stat	vi_status;
    130  1.1   skrll 	u_int		vi_intrwd;
    131  1.1   skrll 	u_int		vi_resv1[13];
    132  1.1   skrll 	u_int		vi_mem_ctrl;
    133  1.1   skrll 	u_int		vi_mem_wrchk;
    134  1.1   skrll 	u_int		vi_mem_limit;
    135  1.1   skrll 	u_int		vi_resv2[1];
    136  1.1   skrll 	u_int		vi_merr_w1;
    137  1.1   skrll 	u_int		vi_merr_w2;
    138  1.1   skrll 	u_int		vi_merr_ckbyte;
    139  1.1   skrll 	u_int		vi_mem_rdchk;
    140  1.1   skrll 	u_int		vi_merr_addr;
    141  1.1   skrll 	u_int		vi_resv3[135];
    142  1.1   skrll };
    143  1.1   skrll 
    144  1.1   skrll 
    145  1.1   skrll /*
    146  1.1   skrll ** Viper also creates HPA registers for the graphics accelerator (Venom).
    147  1.3  andvar ** Venom has two sets of registers; the User HPA contains registers that
    148  1.1   skrll ** users are allowed to access, while the Supervisor HPA is only accessible
    149  1.1   skrll ** by code running at the most priviliged level.  Both sets of registers
    150  1.1   skrll ** are defined below.
    151  1.1   skrll */
    152  1.1   skrll 
    153  1.1   skrll #define	VENOM_USER	((struct vn_user *)0xFFFBC000)
    154  1.1   skrll #define	VENOM_SUPR	((struct vn_supr *)0xFFFBD000)
    155  1.1   skrll 
    156  1.1   skrll /*
    157  1.1   skrll  * Define bits in the Venom "User Control" register.
    158  1.1   skrll  */
    159  1.1   skrll struct vnu_ctl {
    160  1.1   skrll 	u_int	sdt_msk	:16,	/* screen door transparancy mask */
    161  1.1   skrll 		: 6,
    162  1.1   skrll 		d_z_intp: 1,	/* disable Z Interpolation when set */
    163  1.1   skrll 		d_c_intp: 1,	/* disable Color Interpolation when set */
    164  1.1   skrll 		d_ad_inc: 1,	/* disable I/O Addr Incrementing when set */
    165  1.1   skrll 		: 1,
    166  1.1   skrll 		z_fast	: 1,	/* enable Fast Z Interpolation when set */
    167  1.1   skrll 		c_pseudo: 1,	/* enable Pseudo Color when set (disable RG) */
    168  1.1   skrll 		z_prec24: 1,	/* enable 24-bit Z integer precision (o/w 16) */
    169  1.1   skrll 		cmp_intp: 3;	/* enable cond: Z intp owrites old Z (<,>,=) */
    170  1.1   skrll };
    171  1.1   skrll 
    172  1.1   skrll /*
    173  1.1   skrll  * When vnu_ctl's "z_prec24" is set, 24-bit Z integer precision is enabled
    174  1.1   skrll  * (otherwise 16-bit integer precision is used).  When enabled, the format
    175  1.1   skrll  * of various User Control registers is changed; `vnu_prec' (defined below)
    176  1.1   skrll  * should make this format more clear.
    177  1.1   skrll  */
    178  1.1   skrll union vnu_prec {		/* 16 or 24 bit precision */
    179  1.1   skrll 	struct {
    180  1.1   skrll 		u_int	zero1;		/* must be zero */
    181  1.1   skrll 		u_int	intg	:16,	/* integer part (16 bits) */
    182  1.1   skrll 			frac	:12,	/* fractional part (12 bits) */
    183  1.1   skrll 			zero2	: 4;	/* must be zero */
    184  1.1   skrll 	} prec16;
    185  1.1   skrll 	struct {
    186  1.1   skrll 		u_int	frac_lo	: 4,	/* fractional part (lower 4 bits) */
    187  1.1   skrll 			zero1	:28;	/* must be zero */
    188  1.1   skrll 		u_int	intg	:24,	/* integer part (24 bits) */
    189  1.1   skrll 			frac_hi	: 8;	/* fractional part (upper 8 bits) */
    190  1.1   skrll 	} prec24;
    191  1.1   skrll };
    192  1.1   skrll #define	vnu_p16i	prec16.intg
    193  1.1   skrll #define	vnu_p16f	prec16.frac
    194  1.1   skrll #define	vnu_p24i	prec24.intg
    195  1.1   skrll #define	vnu_p24f	((prec24.frac_hi << 4) | prec24.frac_lo)
    196  1.1   skrll #define	vnu_p24fh	prec24.frac_hi
    197  1.1   skrll #define	vnu_p24fl	prec24.frac_lo
    198  1.1   skrll 
    199  1.1   skrll /*
    200  1.1   skrll  * Venom User HPA registers.
    201  1.1   skrll  */
    202  1.1   skrll struct vn_user {
    203  1.1   skrll 	u_int		vnu_resv1[32];
    204  1.1   skrll 	struct vnu_ctl	vnu_uctl;	/* user control */
    205  1.1   skrll 	u_int		vnu_spancnt;	/* span count (13 bits, signed) */
    206  1.1   skrll 	u_int		vnu_graddr;	/* graphics address (24 bits: 6-29) */
    207  1.1   skrll 	u_int		vnu_resv2;
    208  1.1   skrll 	union vnu_prec	vnu_zslope;	/* Z Slope */
    209  1.1   skrll 	union vnu_prec	vnu_z;		/* Z */
    210  1.1   skrll 	u_int		vnu_resv3[8];
    211  1.1   skrll 	u_int		vnu_bslope;	/* Blue Slope (12-19:int, 20-31:fra) */
    212  1.1   skrll 	u_int		vnu_bcolor;	/* Blue Color (12-19:int, 20-31:fra) */
    213  1.1   skrll 	u_int		vnu_resv4[2];
    214  1.1   skrll 	u_int		vnu_rslope;	/* Red Slope (12-19:int, 20-31:fra) */
    215  1.1   skrll 	u_int		vnu_rcolor;	/* Red Color (12-19:int, 20-31:fra) */
    216  1.1   skrll 	u_int		vnu_resv5[2];
    217  1.1   skrll 	u_int		vnu_gslope;	/* Green Slope (12-19:int, 20-31:fra) */
    218  1.1   skrll 	u_int		vnu_gcolor;	/* Green Color (12-19:int, 20-31:fra) */
    219  1.1   skrll };
    220  1.1   skrll 
    221  1.1   skrll 
    222  1.1   skrll /*
    223  1.1   skrll  * Define bits in Venom "Supervisor Control" register.
    224  1.1   skrll  */
    225  1.1   skrll struct vns_ctl {
    226  1.1   skrll 	u_int		: 4,
    227  1.1   skrll 		ioaddr	: 2,	/* graphics addr (bits 4 & 5 of `vnu_graddr') */
    228  1.1   skrll 		d_venom	: 1,	/* disable Venom operation processing */
    229  1.1   skrll 			:25;
    230  1.1   skrll };
    231  1.1   skrll 
    232  1.1   skrll /*
    233  1.1   skrll  * Venom Supervisor HPA registers.
    234  1.1   skrll  */
    235  1.1   skrll struct vn_supr {
    236  1.1   skrll 	u_int		vns_resv1[32];
    237  1.1   skrll 	struct vns_ctl	vns_sctl;	/* supervisor control */
    238  1.1   skrll 	u_int		vns_zaddr;	/* Z Buffer Address (RO) */
    239  1.1   skrll };
    240  1.1   skrll 
    241  1.1   skrll void viper_setintrwnd(uint32_t);
    242  1.1   skrll void viper_eisa_en(void);
    243  1.1   skrll 
    244