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