xref: /openbsd/sys/dev/sbus/cgtwelvereg.h (revision 404b540a)
1 /*	$OpenBSD: cgtwelvereg.h,v 1.2 2006/07/20 11:23:49 martin Exp $	*/
2 
3 /*
4  * Copyright (c) 2002 Miodrag Vallat.  All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the distribution.
14  *
15  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
16  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18  * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
19  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
21  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
23  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
24  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25  * POSSIBILITY OF SUCH DAMAGE.
26  */
27 
28 /*
29  * cgtwelve (GS) accelerated 24-bit framebuffer driver.
30  *
31  * Memory layout and scarce register information from SMI's cg12reg.h
32  */
33 
34 #define	CG12_HEIGHT		900
35 #define	CG12_WIDTH		1152
36 
37 #define	CG12_HEIGHT_HR		1024
38 #define	CG12_WIDTH_HR		1280
39 
40 /* offsets from the card mapping */
41 #define	CG12_OFF_DPU		0x040100
42 #define	CG12_OFF_APU		0x040200
43 #define	CG12_OFF_DAC		0x040300
44 #define	CG12_OFF_OVERLAY0	0x700000
45 #define	CG12_OFF_OVERLAY1	0x780000
46 #define	CG12_OFF_INTEN		0xc00000
47 
48 #define	CG12_OFF_OVERLAY0_HR	0xe00000
49 #define	CG12_OFF_OVERLAY1_HR	0xf00000
50 #define	CG12_OFF_INTEN_HR	0x800000
51 
52 /* sizes of various parts */
53 #define	CG12_SIZE_DPU		0x000100
54 #define	CG12_SIZE_APU		0x000100
55 #define	CG12_SIZE_DAC		0x000400
56 #define	CG12_SIZE_OVERLAY	0x020000
57 #define	CG12_SIZE_ENABLE	0x020000
58 #define	CG12_SIZE_COLOR8	0x100000
59 #define	CG12_SIZE_COLOR24	0x400000
60 
61 #define	CG12_SIZE_OVERLAY_HR	0x030000
62 #define	CG12_SIZE_ENABLE_HR	0x030000
63 #define	CG12_SIZE_COLOR8_HR	0x180000
64 #define	CG12_SIZE_COLOR24_HR	0x600000
65 
66 /*
67  * The "direct port access" register constants.
68  * All HACCESS values include noHSTXY, noHCLIP, and SWAP.
69  */
70 
71 #define	CG12_HPAGE_OVERLAY	0x00000700	/* overlay page */
72 #define	CG12_HPAGE_OVERLAY_HR	0x00000e00
73 #define	CG12_HACCESS_OVERLAY	0x00000020	/* 1bit/pixel */
74 #define	CG12_PLN_SL_OVERLAY	0x00000017	/* plane 23 */
75 #define	CG12_PLN_WR_OVERLAY	0x00800000	/* write mask */
76 #define	CG12_PLN_RD_OVERLAY	0xffffffff	/* read mask */
77 
78 #define	CG12_HPAGE_ENABLE	0x00000700	/* overlay page */
79 #define	CG12_HPAGE_ENABLE_HR	0x00000e00
80 #define	CG12_HACCESS_ENABLE	0x00000020	/* 1bit/pixel */
81 #define	CG12_PLN_SL_ENABLE	0x00000016	/* plane 22 */
82 #define	CG12_PLN_WR_ENABLE	0x00400000
83 #define	CG12_PLN_RD_ENABLE	0xffffffff
84 
85 #define	CG12_HPAGE_24BIT	0x00000500	/* intensity page */
86 #define	CG12_HPAGE_24BIT_HR	0x00000a00
87 #define	CG12_HACCESS_24BIT	0x00000025	/* 32bits/pixel */
88 #define	CG12_PLN_SL_24BIT	0x00000000	/* planes 0-31 */
89 #define	CG12_PLN_WR_24BIT	0x00ffffff
90 #define	CG12_PLN_RD_24BIT	0x00ffffff
91 
92 #define	CG12_HPAGE_8BIT		0x00000500	/* intensity page */
93 #define	CG12_HPAGE_8BIT_HR	0x00000a00
94 #define	CG12_HACCESS_8BIT	0x00000023	/* 8bits/pixel */
95 #define	CG12_PLN_SL_8BIT	0x00000000	/* planes 0-7 */
96 #define	CG12_PLN_WR_8BIT	0x00ffffff
97 #define	CG12_PLN_RD_8BIT	0x000000ff
98 
99 #define	CG12_HPAGE_WID		0x00000700	/* overlay page */
100 #define	CG12_HPAGE_WID_HR	0x00000e00
101 #define	CG12_HACCESS_WID	0x00000023	/* 8bits/pixel */
102 #define	CG12_PLN_SL_WID		0x00000010	/* planes 16-23 */
103 #define	CG12_PLN_WR_WID		0x003f0000
104 #define	CG12_PLN_RD_WID		0x003f0000
105 
106 #define	CG12_HPAGE_ZBUF		0x00000000	/* depth page */
107 #define	CG12_HPAGE_ZBUF_HR	0x00000000
108 #define	CG12_HACCESS_ZBUF	0x00000024	/* 16bits/pixel */
109 #define	CG12_PLN_SL_ZBUF	0x00000060
110 #define	CG12_PLN_WR_ZBUF	0xffffffff
111 #define	CG12_PLN_RD_ZBUF	0xffffffff
112 
113 /* Direct Port Unit */
114 struct cgtwelve_dpu {
115 	u_int32_t	r[8];
116 	u_int32_t	reload_ctl;
117 	u_int32_t	reload_stb;
118 	u_int32_t	alu_ctl;
119 	u_int32_t	blu_ctl;
120 	u_int32_t	control;
121 	u_int32_t	xleft;
122 	u_int32_t	shift0;
123 	u_int32_t	shift1;
124 	u_int32_t	zoom;
125 	u_int32_t	bsr;
126 	u_int32_t	color0;
127 	u_int32_t	color1;
128 	u_int32_t	compout;
129 	u_int32_t	pln_rd_msk_host;
130 	u_int32_t	pln_wr_msk_host;
131 	u_int32_t	pln_rd_msk_local;
132 	u_int32_t	pln_wr_msk_local;
133 	u_int32_t	scis_ctl;
134 	u_int32_t	csr;
135 	u_int32_t	pln_reg_sl;
136 	u_int32_t	pln_sl_host;
137 	u_int32_t	pln_sl_local0;
138 	u_int32_t	pln_sl_local1;
139 	u_int32_t	broadcast;
140 };
141 
142 /* APU */
143 struct cgtwelve_apu {
144 	u_int32_t	imsg0;
145 	u_int32_t	msg0;
146 	u_int32_t	imsg1;
147 	u_int32_t	msg1;
148 	u_int32_t	ien0;
149 	u_int32_t	ien1;
150 	u_int32_t	iclear;
151 	u_int32_t	istatus;
152 	u_int32_t	cfcnt;
153 	u_int32_t	cfwptr;
154 	u_int32_t	cfrptr;
155 	u_int32_t	cfilev0;
156 	u_int32_t	cfilev1;
157 	u_int32_t	rfcnt;
158 	u_int32_t	rfwptr;
159 	u_int32_t	rfrptr;
160 	u_int32_t	rfilev0;
161 	u_int32_t	rfilev1;
162 	u_int32_t	size;
163 	u_int32_t	res0;
164 	u_int32_t	res1;
165 	u_int32_t	res2;
166 	u_int32_t	haccess;
167 	u_int32_t	hpage;
168 	u_int32_t	laccess;
169 	u_int32_t	lpage;
170 	u_int32_t	maccess;
171 	u_int32_t	ppage;
172 	u_int32_t	dwg_ctl;
173 	u_int32_t	sam;
174 	u_int32_t	sgn;
175 	u_int32_t	length;
176 	u_int32_t	dwg[8];
177 	u_int32_t	reload_ctl;
178 	u_int32_t	reload_stb;
179 	u_int32_t	c_xleft;
180 	u_int32_t	c_ytop;
181 	u_int32_t	c_xright;
182 	u_int32_t	c_ybot;
183 	u_int32_t	f_xleft;
184 	u_int32_t	f_xright;
185 	u_int32_t	x_dst;
186 	u_int32_t	y_dst;
187 	u_int32_t	dst_ctl;
188 	u_int32_t	morigin;
189 	u_int32_t	vsg_ctl;
190 	u_int32_t	h_sync;
191 	u_int32_t	hblank;
192 	u_int32_t	v_sync;
193 	u_int32_t	vblank;
194 	u_int32_t	vdpyint;
195 	u_int32_t	vssyncs;
196 	u_int32_t	hdelays;
197 	u_int32_t	stdaddr;
198 	u_int32_t	hpitches;
199 	u_int32_t	zoom;
200 	u_int32_t	test;
201 };
202 
203 struct cgtwelve_dac
204 {
205 	u_int32_t	addr_lo;
206 	u_int8_t	pad1[0x100 - 4];
207 	u_int32_t	addr_hi;
208 	u_int8_t	pad2[0x100 - 4];
209 	u_int32_t	control;
210 	u_int8_t	pad3[0x100 - 4];
211 	u_int32_t	color;
212 	u_int8_t	pad4[0x100 - 4];
213 };
214