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