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