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

Annotation of sys/arch/sparc/dev/cgsixreg.h, Revision 1.1

1.1     ! nbrk        1: /*     $OpenBSD: cgsixreg.h,v 1.6 2003/06/02 23:27:54 millert Exp $    */
        !             2: /*     $NetBSD: cgsixreg.h,v 1.4 1996/02/27 22:09:31 thorpej Exp $ */
        !             3:
        !             4: /*
        !             5:  * Copyright (c) 2002 Jason L. Wright (jason@thought.net)
        !             6:  * All rights reserved.
        !             7:  *
        !             8:  * Redistribution and use in source and binary forms, with or without
        !             9:  * modification, are permitted provided that the following conditions
        !            10:  * are met:
        !            11:  * 1. Redistributions of source code must retain the above copyright
        !            12:  *    notice, this list of conditions and the following disclaimer.
        !            13:  * 2. Redistributions in binary form must reproduce the above copyright
        !            14:  *    notice, this list of conditions and the following disclaimer in the
        !            15:  *    documentation and/or other materials provided with the distribution.
        !            16:  *
        !            17:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
        !            18:  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
        !            19:  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
        !            20:  * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
        !            21:  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
        !            22:  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
        !            23:  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
        !            24:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
        !            25:  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
        !            26:  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
        !            27:  * POSSIBILITY OF SUCH DAMAGE.
        !            28:  */
        !            29: /*
        !            30:  * Copyright (c) 1993
        !            31:  *     The Regents of the University of California.  All rights reserved.
        !            32:  *
        !            33:  * This software was developed by the Computer Systems Engineering group
        !            34:  * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
        !            35:  * contributed to Berkeley.
        !            36:  *
        !            37:  * All advertising materials mentioning features or use of this software
        !            38:  * must display the following acknowledgement:
        !            39:  *     This product includes software developed by the University of
        !            40:  *     California, Lawrence Berkeley Laboratory.
        !            41:  *
        !            42:  * Redistribution and use in source and binary forms, with or without
        !            43:  * modification, are permitted provided that the following conditions
        !            44:  * are met:
        !            45:  * 1. Redistributions of source code must retain the above copyright
        !            46:  *    notice, this list of conditions and the following disclaimer.
        !            47:  * 2. Redistributions in binary form must reproduce the above copyright
        !            48:  *    notice, this list of conditions and the following disclaimer in the
        !            49:  *    documentation and/or other materials provided with the distribution.
        !            50:  * 3. Neither the name of the University nor the names of its contributors
        !            51:  *    may be used to endorse or promote products derived from this software
        !            52:  *    without specific prior written permission.
        !            53:  *
        !            54:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
        !            55:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
        !            56:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
        !            57:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
        !            58:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
        !            59:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
        !            60:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
        !            61:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
        !            62:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
        !            63:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
        !            64:  * SUCH DAMAGE.
        !            65:  *
        !            66:  *     @(#)cgsixreg.h  8.4 (Berkeley) 1/21/94
        !            67:  */
        !            68:
        !            69: /*
        !            70:  * CG6 display registers.
        !            71:  *
        !            72:  * The cg6 is a complicated beastie.  We have been unable to extract any
        !            73:  * documentation and most of the following are guesses based on a limited
        !            74:  * amount of reverse engineering.
        !            75:  *
        !            76:  * A cg6 is composed of numerous groups of control registers, all with TLAs:
        !            77:  *     FBC - frame buffer control?
        !            78:  *     FHC - fbc hardware configuration / control? register (32 bits)
        !            79:  *     DHC - ???
        !            80:  *     TEC - transform engine control?
        !            81:  *     THC - TEC Hardware Configuration
        !            82:  *     ROM - a 64Kbyte ROM with who knows what in it.
        !            83:  *     colormap - see below
        !            84:  *     frame buffer memory (video RAM)
        !            85:  *     possible other stuff
        !            86:  *
        !            87:  * Like the cg3, the cg6 uses a Brooktree Video DAC (see btreg.h).
        !            88:  *
        !            89:  * Various revisions of the cgsix have various hardware bugs.  So far,
        !            90:  * we have only seen rev 1 & 2.
        !            91:  */
        !            92:
        !            93: /* offsets */
        !            94: #define        CGSIX_ROM_OFFSET        0x000000
        !            95: #define        CGSIX_BT_OFFSET         0x200000
        !            96: #define        CGSIX_BT_SIZE           (sizeof(u_int32_t) * 4)
        !            97: #define        CGSIX_DHC_OFFSET        0x240000
        !            98: #define        CGSIX_ALT_OFFSET        0x280000
        !            99: #define        CGSIX_FHC_OFFSET        0x300000
        !           100: #define        CGSIX_FHC_SIZE          (sizeof(u_int32_t) * 1)
        !           101: #define        CGSIX_THC_OFFSET        0x301000
        !           102: #define        CGSIX_THC_SIZE          (sizeof(u_int32_t) * 640)
        !           103: #define        CGSIX_FBC_OFFSET        0x700000
        !           104: #define        CGSIX_FBC_SIZE          0x1000
        !           105: #define        CGSIX_TEC_OFFSET        0x701000
        !           106: #define        CGSIX_TEC_SIZE          (sizeof(u_int32_t) * 3)
        !           107: #define        CGSIX_VID_OFFSET        0x800000
        !           108: #define        CGSIX_VID_SIZE          (1024 * 1024)
        !           109:
        !           110: #define        CG6_FHC                 0x0             /* fhc register */
        !           111:
        !           112: /* bits in FHC register */
        !           113: #define        FHC_FBID_MASK           0xff000000      /* frame buffer id */
        !           114: #define        FHC_FBID_SHIFT          24
        !           115: #define        FHC_REV_MASK            0x00f00000      /* revision */
        !           116: #define        FHC_REV_SHIFT           20
        !           117: #define        FHC_FROP_DISABLE        0x00080000      /* disable fast rasterop */
        !           118: #define        FHC_ROW_DISABLE         0x00040000      /* ??? */
        !           119: #define        FHC_SRC_DISABLE         0x00020000      /* ??? */
        !           120: #define        FHC_DST_DISABLE         0x00010000      /* disable dst cache */
        !           121: #define        FHC_RESET               0x00008000      /* ??? */
        !           122: #define        FHC_LEBO                0x00002000      /* set little endian order */
        !           123: #define        FHC_RES_MASK            0x00001800      /* resolution: */
        !           124: #define        FHC_RES_1024            0x00000000      /*  1024x768 */
        !           125: #define        FHC_RES_1152            0x00000800      /*  1152x900 */
        !           126: #define        FHC_RES_1280            0x00001000      /*  1280x1024 */
        !           127: #define        FHC_RES_1600            0x00001800      /*  1600x1200 */
        !           128: #define        FHC_CPU_MASK            0x00000600      /* cpu type: */
        !           129: #define        FHC_CPU_SPARC           0x00000000      /*  sparc */
        !           130: #define        FHC_CPU_68020           0x00000200      /*  68020 */
        !           131: #define        FHC_CPU_386             0x00000400      /*  i386 */
        !           132: #define        FHC_TEST                0x00000100      /* test window */
        !           133: #define        FHC_TESTX_MASK          0x000000f0      /* test window X */
        !           134: #define        FHC_TESTX_SHIFT         4
        !           135: #define        FHC_TESTY_MASK          0x0000000f      /* test window Y */
        !           136: #define        FHC_TESTY_SHIFT         0
        !           137:
        !           138: struct cgsix_fbc {
        !           139:        u_int32_t               fbc_xxx0[1];
        !           140:        u_int32_t               fbc_mode;       /* mode setting */
        !           141:        u_int32_t               fbc_clip;       /* ??? */
        !           142:        u_int32_t               fbc_xxx1[1];
        !           143:        u_int32_t               fbc_s;          /* global status */
        !           144:        u_int32_t               fbc_draw;       /* drawing pipeline status */
        !           145:        u_int32_t               fbc_blit;       /* blitter status */
        !           146:        u_int32_t               fbc_xxx2[25];
        !           147:        u_int32_t               fbc_x0;         /* blitter, src llx */
        !           148:        u_int32_t               fbc_y0;         /* blitter, src lly */
        !           149:        u_int32_t               fbc_xxx3[2];
        !           150:        u_int32_t               fbc_x1;         /* blitter, src urx */
        !           151:        u_int32_t               fbc_y1;         /* blitter, src ury */
        !           152:        u_int32_t               fbc_xxx4[2];
        !           153:        u_int32_t               fbc_x2;         /* blitter, dst llx */
        !           154:        u_int32_t               fbc_y2;         /* blitter, dst lly */
        !           155:        u_int32_t               fbc_xxx5[2];
        !           156:        u_int32_t               fbc_x3;         /* blitter, dst urx */
        !           157:        u_int32_t               fbc_y3;         /* blitter, dst ury */
        !           158:        u_int32_t               fbc_xxx6[2];
        !           159:        u_int32_t               fbc_offx;       /* x offset for drawing */
        !           160:        u_int32_t               fbc_offy;       /* y offset for drawing */
        !           161:        u_int32_t               fbc_xxx7[6];
        !           162:        u_int32_t               fbc_clipminx;   /* clip rectangle llx */
        !           163:        u_int32_t               fbc_clipminy;   /* clip rectangle lly */
        !           164:        u_int32_t               fbc_xxx8[2];
        !           165:        u_int32_t               fbc_clipmaxx;   /* clip rectangle urx */
        !           166:        u_int32_t               fbc_clipmaxy;   /* clip rectangle ury */
        !           167:        u_int32_t               fbc_xxx9[2];
        !           168:        u_int32_t               fbc_fg;         /* fg value for rop */
        !           169:        u_int32_t               fbc_xxx10[1];
        !           170:        u_int32_t               fbc_alu;        /* operation */
        !           171:        u_int32_t               fbc_xxx11[509];
        !           172:        u_int32_t               fbc_arectx;     /* rectangle drawing, x coord */
        !           173:        u_int32_t               fbc_arecty;     /* rectangle drawing, y coord */
        !           174: };
        !           175:
        !           176: #define FBC_MODE_MASK  (                                               \
        !           177:          0x00300000 /* GX_BLIT_ALL */                                  \
        !           178:        | 0x00060000 /* GX_MODE_ALL */                                  \
        !           179:        | 0x00018000 /* GX_DRAW_ALL */                                  \
        !           180:        | 0x00006000 /* GX_BWRITE0_ALL */                               \
        !           181:        | 0x00001800 /* GX_BWRITE1_ALL */                               \
        !           182:        | 0x00000600 /* GX_BREAD_ALL */                                 \
        !           183:        | 0x00000180 /* GX_BDISP_ALL */                                 \
        !           184: )
        !           185:
        !           186: #define        FBC_MODE_VAL    (                                               \
        !           187:          0x00200000 /* GX_BLIT_SRC */                                  \
        !           188:        | 0x00020000 /* GX_MODE_COLOR8 */                               \
        !           189:        | 0x00008000 /* GX_DRAW_RENDER */                               \
        !           190:        | 0x00002000 /* GX_BWRITE0_ENABLE */                            \
        !           191:        | 0x00001000 /* GX_BWRITE1_DISABLE */                           \
        !           192:        | 0x00000200 /* GX_BREAD_0 */                                   \
        !           193:        | 0x00000080 /* GX_BDISP_0 */                                   \
        !           194: )
        !           195:
        !           196: #define        FBC_S_GXINPROGRESS      0x10000000      /* drawing in progress */
        !           197:
        !           198: #define        FBC_BLIT_UNKNOWN        0x80000000      /* ??? */
        !           199: #define        FBC_BLIT_GXFULL         0x20000000      /* queue is full */
        !           200:
        !           201: #define        FBC_DRAW_UNKNOWN        0x80000000      /* ??? */
        !           202: #define        FBC_DRAW_GXFULL         0x20000000
        !           203:
        !           204: /* Value for the alu register for screen-to-screen copies */
        !           205: #define FBC_ALU_COPY    (                                              \
        !           206:          0x80000000 /* GX_PLANE_ONES (ignore planemask register) */    \
        !           207:        | 0x20000000 /* GX_PIXEL_ONES (ignore pixelmask register) */    \
        !           208:        | 0x00800000 /* GX_ATTR_SUPP (function unknown) */              \
        !           209:        | 0x00000000 /* GX_RAST_BOOL (function unknown) */              \
        !           210:        | 0x00000000 /* GX_PLOT_PLOT (function unknown) */              \
        !           211:        | 0x08000000 /* GX_PATTERN_ONES (ignore pattern) */             \
        !           212:        | 0x01000000 /* GX_POLYG_OVERLAP (unsure - handle overlap?) */  \
        !           213:        | 0x0000cccc /* ALU = src */                                    \
        !           214: )
        !           215:
        !           216: /* Value for the alu register for region fills */
        !           217: #define FBC_ALU_FILL   (                                               \
        !           218:          0x80000000 /* GX_PLANE_ONES (ignore planemask register) */    \
        !           219:        | 0x20000000 /* GX_PIXEL_ONES (ignore pixelmask register) */    \
        !           220:        | 0x00800000 /* GX_ATTR_SUPP (function unknown) */              \
        !           221:        | 0x00000000 /* GX_RAST_BOOL (function unknown) */              \
        !           222:        | 0x00000000 /* GX_PLOT_PLOT (function unknown) */              \
        !           223:        | 0x08000000 /* GX_PATTERN_ONES (ignore pattern) */             \
        !           224:        | 0x01000000 /* GX_POLYG_OVERLAP (unsure - handle overlap?) */  \
        !           225:        | 0x0000ff00 /* ALU = fg color */                               \
        !           226: )
        !           227:
        !           228: /* Value for the alu register for toggling an area */
        !           229: #define FBC_ALU_FLIP   (                                               \
        !           230:          0x80000000 /* GX_PLANE_ONES (ignore planemask register) */    \
        !           231:        | 0x20000000 /* GX_PIXEL_ONES (ignore pixelmask register) */    \
        !           232:        | 0x00800000 /* GX_ATTR_SUPP (function unknown) */              \
        !           233:        | 0x00000000 /* GX_RAST_BOOL (function unknown) */              \
        !           234:        | 0x00000000 /* GX_PLOT_PLOT (function unknown) */              \
        !           235:        | 0x08000000 /* GX_PATTERN_ONES (ignore pattern) */             \
        !           236:        | 0x01000000 /* GX_POLYG_OVERLAP (unsure - handle overlap?) */  \
        !           237:        | 0x00005555 /* ALU = ~dst */                                   \
        !           238: )
        !           239:
        !           240: /*
        !           241:  * The layout of the THC.
        !           242:  */
        !           243: struct cgsix_thc {
        !           244:        u_int32_t       thc_xxx0[512];  /* ??? */
        !           245:        u_int32_t       thc_hsync1;     /* horizontal sync timing */
        !           246:        u_int32_t       thc_hsync2;     /* more hsync timing */
        !           247:        u_int32_t       thc_hsync3;     /* yet more hsync timing */
        !           248:        u_int32_t       thc_vsync1;     /* vertical sync timing */
        !           249:        u_int32_t       thc_vsync2;     /* only two of these */
        !           250:        u_int32_t       thc_refresh;    /* refresh counter */
        !           251:        u_int32_t       thc_misc;       /* miscellaneous control & status */
        !           252:        u_int32_t       thc_xxx1[56];   /* ??? */
        !           253:        u_int32_t       thc_cursxy;     /* cursor x,y position (16 bits each) */
        !           254:        u_int32_t       thc_cursmask[32]; /* cursor mask bits */
        !           255:        u_int32_t       thc_cursbits[32]; /* what to show where mask enabled */
        !           256: };
        !           257:
        !           258: /* cursor x/y position for 'off' */
        !           259: #define        THC_CURSOFF             ((65536-32) | ((65536-32) << 16))
        !           260:
        !           261: #define        THC_MISC_REV_M          0x000f0000      /* chip revision */
        !           262: #define        THC_MISC_REV_S          16
        !           263: #define        THC_MISC_RESET          0x00001000      /* reset */
        !           264: #define        THC_MISC_VIDEN          0x00000400      /* video enable */
        !           265: #define        THC_MISC_SYNC           0x00000200      /* not sure what ... */
        !           266: #define        THC_MISC_VSYNC          0x00000100      /* ... these really are */
        !           267: #define        THC_MISC_SYNCEN         0x00000080      /* sync enable */
        !           268: #define        THC_MISC_CURSRES        0x00000040      /* cursor resolution */
        !           269: #define        THC_MISC_INTEN          0x00000020      /* v.retrace intr enable */
        !           270: #define        THC_MISC_INTR           0x00000010      /* intr pending/ack */
        !           271: #define        THC_MISC_CYCLS          0x0000000f      /* cycles before transfer */
        !           272:
        !           273: /*
        !           274:  * Partial description of TEC (needed to get around FHC rev 1 bugs).
        !           275:  */
        !           276: struct cgsix_tec_xxx {
        !           277:        u_int32_t       tec_mv;         /* matrix stuff */
        !           278:        u_int32_t       tec_clip;       /* clipping stuff */
        !           279:        u_int32_t       tec_vdc;        /* ??? */
        !           280: };

CVSweb