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

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

1.1     ! nbrk        1: /*     $OpenBSD: cgtworeg.h,v 1.3 2006/07/20 11:23:49 martin Exp $     */
        !             2: /*     $NetBSD: cgtworeg.h,v 1.3 1995/10/04 00:21:27 pk Exp $ */
        !             3:
        !             4: /*
        !             5:  * Copyright (c) 1994 Dennis Ferguson
        !             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 WARRANTIES
        !            19:  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
        !            20:  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
        !            21:  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
        !            22:  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
        !            23:  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
        !            24:  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
        !            25:  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
        !            26:  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
        !            27:  */
        !            28:
        !            29: /* cgtworeg.h - CG2 colour frame buffer definitions
        !            30:  *
        !            31:  * The mapped memory looks like:
        !            32:  *
        !            33:  *  offset     contents
        !            34:  * 0x000000  bit plane map - 1st (of 8) plane used by the X server in -mono mode
        !            35:  * 0x100000  pixel map - used by the X server in color mode
        !            36:  * 0x200000  raster op mode memory map - unused by X server
        !            37:  * 0x300000  random control registers (lots of spaces in between)
        !            38:  * 0x310000  shadow colour map
        !            39:  */
        !            40:
        !            41: /* Frame buffer memory size and depth */
        !            42: #define        CG2_FBSIZE      (1024 * 1024)
        !            43: #define        CG2_N_PLANE     8
        !            44:
        !            45: /* Screen dimensions */
        !            46: #define        CG2_WIDTH       1152
        !            47: #define        CG2_HEIGHT      900
        !            48:
        !            49: /* Colourmap size */
        !            50: #define CG2_CMSIZE     256
        !            51:
        !            52: #define CG2_BITPLANE_OFF       0
        !            53: #define CG2_BITPLANE_SIZE      0x100000
        !            54: #define CG2_PIXMAP_OFF         (CG2_BITPLANE_OFF + CG2_BITPLANE_SIZE)
        !            55: #define CG2_PIXMAP_SIZE                0x100000
        !            56: #define CG2_ROPMEM_OFF         (CG2_PIXMAP_OFF + CG2_PIXMAP_SIZE)
        !            57: #define CG2_ROPMEM_SIZE                0x100000
        !            58: #define CG2_CTLREG_OFF         (CG2_ROPMEM_OFF + CG2_ROPMEM_SIZE)
        !            59: #define CG2_CTLREG_SIZE                0x010600
        !            60: #define CG2_MAPPED_SIZE                (CG2_CTLREG_OFF + CG2_CTLREG_SIZE)
        !            61:
        !            62:
        !            63: /* arrangement of bit plane mode memory */
        !            64: union bitplane {
        !            65:        u_short word[CG2_HEIGHT][CG2_WIDTH/(CG2_N_PLANE * sizeof(u_short))];
        !            66:        u_short plane[CG2_FBSIZE/(CG2_N_PLANE * sizeof(u_short))];
        !            67: };
        !            68:
        !            69: /* arrangement of pixel mode memory */
        !            70: union byteplane {
        !            71:        u_char pixel[CG2_HEIGHT][CG2_WIDTH];
        !            72:        u_char frame[CG2_FBSIZE];
        !            73: };
        !            74:
        !            75:
        !            76: /*
        !            77:  * Structure describing the first two megabytes of the frame buffer.
        !            78:  * Normal memory maps in bit plane and pixel modes
        !            79:  */
        !            80: struct cg2memfb {
        !            81:        union bitplane memplane[CG2_N_PLANE];   /* bit plane map */
        !            82:        union byteplane pixplane;               /* pixel map */
        !            83: };
        !            84:
        !            85:
        !            86: /*
        !            87:  * Control/status register.  The X server only appears to use update_cmap
        !            88:  * and video_enab.
        !            89:  */
        !            90: struct cg2statusreg {
        !            91:        u_int reserved : 2;     /* not used */
        !            92:         u_int fastread : 1;    /* r/o: has some feature I don't understand */
        !            93:         u_int id : 1;          /* r/o: ext status and ID registers exist */
        !            94:         u_int resolution : 4;  /* screen resolution, 0 means 1152x900 */
        !            95:         u_int retrace : 1;     /* r/o: retrace in progress */
        !            96:         u_int inpend : 1;      /* r/o: interrupt request */
        !            97:         u_int ropmode : 3;     /* ?? */
        !            98:         u_int inten : 1;       /* interrupt enable (for end of retrace) */
        !            99:         u_int update_cmap : 1; /* copy/use shadow colour map */
        !           100:         u_int video_enab : 1;  /* enable video */
        !           101: };
        !           102:
        !           103:
        !           104: /*
        !           105:  * Extended status register.  Unused by X server
        !           106:  */
        !           107: struct cg2_extstatus {
        !           108:        u_int gpintreq : 1;     /* interrupt request */
        !           109:        u_int gpintdis : 1;     /* interrupt disable */
        !           110:        u_int reserved : 13;    /* unused */
        !           111:        u_int gpbus : 1;        /* bus enabled */
        !           112: };
        !           113:
        !           114:
        !           115: /*
        !           116:  * Double buffer control register.  It appears that (some of?) the
        !           117:  * cg2 cards support a pair of memory sets, referred to as `A' and
        !           118:  * `B', which can be swapped to allow atomic screen updates.  This
        !           119:  * controls them.
        !           120:  */
        !           121: struct dblbufreg {
        !           122:        u_int display_b : 1;    /* display memory B (set) or A (reset) */
        !           123:        u_int read_b : 1;       /* access memory B (set) or A (reset) */
        !           124:        u_int nowrite_b : 1;    /* when set, writes don't update memory B */
        !           125:        u_int nowrite_a : 1;    /* when set, writes don't update memory A */
        !           126:        u_int read_ecmap : 1;   /* copy from(clear)/to(set) shadow colour map */
        !           127:        u_int fast_read : 1;    /* fast reads, but wrong data */
        !           128:        u_int wait : 1;         /* when set, remains so to end up v. retrace */
        !           129:        u_int update_ecmap : 1; /* copy/use shadow colour map */
        !           130:         u_int reserved : 8;
        !           131: };
        !           132:
        !           133:
        !           134: /*
        !           135:  * Zoom register, apparently present on Sun-2 colour boards only.  See
        !           136:  * the Sun documentation, I don't know anyone who still has a Sun-2.
        !           137:  */
        !           138: struct cg2_zoom {
        !           139:        union {
        !           140:                u_short reg;
        !           141:                u_char reg_pad[4096];
        !           142:        } wordpan;
        !           143:        union {
        !           144:                struct {
        !           145:                        u_int unused  : 8;
        !           146:                        u_int lineoff : 4;
        !           147:                        u_int pixzoom : 4;
        !           148:                } reg;
        !           149:                u_short word;
        !           150:                u_char reg_pad[4096];
        !           151:        } zoom;
        !           152:         union {
        !           153:                struct {
        !           154:                        u_int unused   : 8;
        !           155:                        u_int lorigin  : 4;
        !           156:                        u_int pixeloff : 4;
        !           157:                } reg;
        !           158:                u_short word;
        !           159:                u_char reg_pad[4096];
        !           160:        } pixpan;
        !           161:        union {
        !           162:                u_short reg;
        !           163:                u_char reg_pad[4096];
        !           164:        } varzoom;
        !           165: };
        !           166:
        !           167:
        !           168: /*
        !           169:  * Miscellany.  On the Sun-3 these registers exist in place of the above.
        !           170:  */
        !           171: struct cg2_nozoom {
        !           172:        union {                         /* double buffer register (see above) */
        !           173:                struct dblbufreg reg;
        !           174:                u_short word;
        !           175:                u_char reg_pad[4096];
        !           176:        } dblbuf;
        !           177:        union {                         /* start of dma window */
        !           178:                u_short reg;
        !           179:                u_char reg_pad[4096];
        !           180:        } dmabase;
        !           181:        union {                         /* dma window size */
        !           182:                u_short reg;            /* actually 8 bits.  reg*16 == size */
        !           183:                u_char reg_pad[4096];
        !           184:        } dmawidth;
        !           185:        union {                         /* frame count */
        !           186:                u_short reg;            /* actually 8 bits only. r/o */
        !           187:                u_char reg_pad[4096];
        !           188:        } framecnt;
        !           189: };
        !           190:
        !           191:
        !           192: /*
        !           193:  * Raster op control registers.  X doesn't use this, but documented here
        !           194:  * for future reference.
        !           195:  */
        !           196: struct memropc {
        !           197:        u_short mrc_dest;
        !           198:        u_short mrc_source1;
        !           199:        u_short mrc_source2;
        !           200:        u_short mrc_pattern;
        !           201:        u_short mrc_mask1;
        !           202:        u_short mrc_mask2;
        !           203:        u_short mrc_shift;
        !           204:        u_short mrc_op;
        !           205:        u_short mrc_width;
        !           206:        u_short mrc_opcount;
        !           207:        u_short mrc_decoderout;
        !           208:        u_short mrc_x11;
        !           209:        u_short mrc_x12;
        !           210:        u_short mrc_x13;
        !           211:        u_short mrc_x14;
        !           212:        u_short mrc_x15;
        !           213: };
        !           214:
        !           215:
        !           216: /*
        !           217:  * Last chunk of the frame buffer (i.e. from offset 0x200000 and above).
        !           218:  * Exists separately from struct cg2memfb apparently because Sun software
        !           219:  * avoids mapping the latter, though X uses it.
        !           220:  */
        !           221: struct cg2fb {
        !           222:        union {                 /* raster op mode frame memory */
        !           223:                union bitplane ropplane[CG2_N_PLANE];
        !           224:                union byteplane roppixel;
        !           225:        } ropio;
        !           226:        union {                 /* raster op control unit (1 per plane) */
        !           227:                struct memropc ropregs;
        !           228:                struct {
        !           229:                        u_char pad[2048];
        !           230:                        struct memropc ropregs;
        !           231:                } prime;
        !           232:                u_char reg_pad[4096];
        !           233:        } ropcontrol[9];
        !           234:        union {                 /* status register */
        !           235:                struct cg2statusreg reg;
        !           236:                u_short word;
        !           237:                u_char reg_pad[4096];
        !           238:        } status;
        !           239:        union {                 /* per-plane mask register */
        !           240:                u_short reg;    /* 8 bit mask register - set means plane r/w */
        !           241:                u_char reg_pad[4096];
        !           242:        } ppmask;
        !           243:        union {                 /* miscellaneous registers */
        !           244:                struct cg2_zoom zoom;
        !           245:                struct cg2_nozoom nozoom;
        !           246:        } misc;
        !           247:        union {                 /* interrupt vector */
        !           248:                u_short reg;
        !           249:                u_char reg_pad[32];
        !           250:        } intrptvec;
        !           251:        union {                  /* board ID */
        !           252:                u_short reg;
        !           253:                u_char reg_pad[16];
        !           254:        } id;
        !           255:        union {                  /* extended status */
        !           256:                struct cg2_extstatus reg;
        !           257:                u_short word;
        !           258:                u_char reg_pad[16];
        !           259:        } extstatus;
        !           260:        union {                  /* auxiliary raster op mode register (?)*/
        !           261:                u_short reg;
        !           262:                u_char reg_pad[4032];
        !           263:        } ropmode;
        !           264:        u_short redmap[CG2_CMSIZE];     /* shadow colour maps */
        !           265:        u_short greenmap[CG2_CMSIZE];
        !           266:        u_short bluemap[CG2_CMSIZE];
        !           267: };

CVSweb