viper.h revision 1.4 1 1.4 andvar /* $NetBSD: viper.h,v 1.4 2024/05/14 19:00:43 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.4 andvar ** by code running at the most privileged 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