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