[BACK]Return to viper.h CVS log [TXT][DIR] Up to [local] / sys / arch / hppa / dev

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