[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

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