ffb_regs.h revision dbbd9e4b
1dbbd9e4bSmacallan/*
2dbbd9e4bSmacallan * Acceleration for the Creator and Creator3D framebuffer - register layout.
3dbbd9e4bSmacallan *
4dbbd9e4bSmacallan * Copyright (C) 1998,1999,2000 Jakub Jelinek (jakub@redhat.com)
5dbbd9e4bSmacallan * Copyright (C) 1998 Michal Rehacek (majkl@iname.com)
6dbbd9e4bSmacallan * Copyright (C) 1999 David S. Miller (davem@redhat.com)
7dbbd9e4bSmacallan *
8dbbd9e4bSmacallan * Permission is hereby granted, free of charge, to any person obtaining a copy
9dbbd9e4bSmacallan * of this software and associated documentation files (the "Software"), to deal
10dbbd9e4bSmacallan * in the Software without restriction, including without limitation the rights
11dbbd9e4bSmacallan * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12dbbd9e4bSmacallan * copies of the Software, and to permit persons to whom the Software is
13dbbd9e4bSmacallan * furnished to do so, subject to the following conditions:
14dbbd9e4bSmacallan *
15dbbd9e4bSmacallan * The above copyright notice and this permission notice shall be included in
16dbbd9e4bSmacallan * all copies or substantial portions of the Software.
17dbbd9e4bSmacallan *
18dbbd9e4bSmacallan * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19dbbd9e4bSmacallan * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20dbbd9e4bSmacallan * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
21dbbd9e4bSmacallan * JAKUB JELINEK, MICHAL REHACEK, OR DAVID MILLER BE LIABLE FOR ANY CLAIM,
22dbbd9e4bSmacallan * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
23dbbd9e4bSmacallan * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
24dbbd9e4bSmacallan * USE OR OTHER DEALINGS IN THE SOFTWARE.
25dbbd9e4bSmacallan *
26dbbd9e4bSmacallan */
27dbbd9e4bSmacallan/* $XFree86$ */
28dbbd9e4bSmacallan
29dbbd9e4bSmacallan#ifndef FFBREGS_H
30dbbd9e4bSmacallan#define FFBREGS_H
31dbbd9e4bSmacallan
32dbbd9e4bSmacallan/* Auxilliary clips. */
33dbbd9e4bSmacallantypedef struct  {
34dbbd9e4bSmacallan	volatile unsigned int min;
35dbbd9e4bSmacallan	volatile unsigned int max;
36dbbd9e4bSmacallan} ffb_auxclip, *ffb_auxclipPtr;
37dbbd9e4bSmacallan
38dbbd9e4bSmacallan/* FFB register set. */
39dbbd9e4bSmacallantypedef struct _ffb_fbc {
40dbbd9e4bSmacallan	/* Next vertex registers, on the right we list which drawops
41dbbd9e4bSmacallan	 * use said register and the logical name the register has in
42dbbd9e4bSmacallan	 * that context.
43dbbd9e4bSmacallan	 */					/* DESCRIPTION		DRAWOP(NAME)	*/
44dbbd9e4bSmacallan/*0x00*/unsigned int		pad1[3];	/* Reserved				*/
45dbbd9e4bSmacallan/*0x0c*/volatile unsigned int	alpha;		/* ALPHA Transparency			*/
46dbbd9e4bSmacallan/*0x10*/volatile unsigned int	red;		/* RED					*/
47dbbd9e4bSmacallan/*0x14*/volatile unsigned int	green;		/* GREEN				*/
48dbbd9e4bSmacallan/*0x18*/volatile unsigned int	blue;		/* BLUE					*/
49dbbd9e4bSmacallan/*0x1c*/volatile unsigned int	z;		/* DEPTH				*/
50dbbd9e4bSmacallan/*0x20*/volatile unsigned int	y;		/* Y			triangle(DOYF)	*/
51dbbd9e4bSmacallan						/*                      aadot(DYF)	*/
52dbbd9e4bSmacallan						/*                      ddline(DYF)	*/
53dbbd9e4bSmacallan						/*                      aaline(DYF)	*/
54dbbd9e4bSmacallan/*0x24*/volatile unsigned int	x;		/* X			triangle(DOXF)	*/
55dbbd9e4bSmacallan						/*                      aadot(DXF)	*/
56dbbd9e4bSmacallan						/*                      ddline(DXF)	*/
57dbbd9e4bSmacallan						/*                      aaline(DXF)	*/
58dbbd9e4bSmacallan/*0x28*/unsigned int		pad2[2];	/* Reserved				*/
59dbbd9e4bSmacallan/*0x30*/volatile unsigned int	ryf;		/* Y (alias to DOYF)	ddline(RYF)	*/
60dbbd9e4bSmacallan						/*			aaline(RYF)	*/
61dbbd9e4bSmacallan						/*			triangle(RYF)	*/
62dbbd9e4bSmacallan/*0x34*/volatile unsigned int	rxf;		/* X			ddline(RXF)	*/
63dbbd9e4bSmacallan						/*			aaline(RXF)	*/
64dbbd9e4bSmacallan						/*			triangle(RXF)	*/
65dbbd9e4bSmacallan/*0x38*/unsigned int		pad3[2];	/* Reserved				*/
66dbbd9e4bSmacallan/*0x40*/volatile unsigned int	dmyf;		/* Y (alias to DOYF)	triangle(DMYF)	*/
67dbbd9e4bSmacallan/*0x44*/volatile unsigned int	dmxf;		/* X			triangle(DMXF)	*/
68dbbd9e4bSmacallan/*0x48*/unsigned int		pad4[2];	/* Reserved				*/
69dbbd9e4bSmacallan/*0x50*/volatile unsigned int	ebyi;		/* Y (alias to RYI)	polygon(EBYI)	*/
70dbbd9e4bSmacallan/*0x54*/volatile unsigned int	ebxi;		/* X			polygon(EBXI)	*/
71dbbd9e4bSmacallan/*0x58*/unsigned int		pad5[2];	/* Reserved				*/
72dbbd9e4bSmacallan/*0x60*/volatile unsigned int	by;		/* Y			brline(RYI)	*/
73dbbd9e4bSmacallan						/*			fastfill(OP)	*/
74dbbd9e4bSmacallan						/*			polygon(YI)	*/
75dbbd9e4bSmacallan						/*			rectangle(YI)	*/
76dbbd9e4bSmacallan						/*			bcopy(SRCY)	*/
77dbbd9e4bSmacallan						/*			vscroll(SRCY)	*/
78dbbd9e4bSmacallan/*0x64*/volatile unsigned int	bx;		/* X			brline(RXI)	*/
79dbbd9e4bSmacallan						/*			polygon(XI)	*/
80dbbd9e4bSmacallan						/*			rectangle(XI)	*/
81dbbd9e4bSmacallan						/*			bcopy(SRCX)	*/
82dbbd9e4bSmacallan						/*			vscroll(SRCX)	*/
83dbbd9e4bSmacallan						/*			fastfill(GO)	*/
84dbbd9e4bSmacallan/*0x68*/volatile unsigned int	dy;		/* destination Y	fastfill(DSTY)	*/
85dbbd9e4bSmacallan						/*			bcopy(DSRY)	*/
86dbbd9e4bSmacallan						/*			vscroll(DSRY)	*/
87dbbd9e4bSmacallan/*0x6c*/volatile unsigned int	dx;		/* destination X	fastfill(DSTX)	*/
88dbbd9e4bSmacallan						/*			bcopy(DSTX)	*/
89dbbd9e4bSmacallan						/*			vscroll(DSTX)	*/
90dbbd9e4bSmacallan/*0x70*/volatile unsigned int	bh;		/* Y (alias to RYI)	brline(DYI)	*/
91dbbd9e4bSmacallan						/*			dot(DYI)	*/
92dbbd9e4bSmacallan						/*			polygon(ETYI)	*/
93dbbd9e4bSmacallan						/* Height		fastfill(H)	*/
94dbbd9e4bSmacallan						/*			bcopy(H)	*/
95dbbd9e4bSmacallan						/*			vscroll(H)	*/
96dbbd9e4bSmacallan						/* Y count		fastfill(NY)	*/
97dbbd9e4bSmacallan/*0x74*/volatile unsigned int	bw;		/* X			dot(DXI)	*/
98dbbd9e4bSmacallan						/*			brline(DXI)	*/
99dbbd9e4bSmacallan						/*			polygon(ETXI)	*/
100dbbd9e4bSmacallan						/*			fastfill(W)	*/
101dbbd9e4bSmacallan						/*			bcopy(W)	*/
102dbbd9e4bSmacallan						/*			vscroll(W)	*/
103dbbd9e4bSmacallan						/*			fastfill(NX)	*/
104dbbd9e4bSmacallan/*0x78*/unsigned int		pad6[2];	/* Reserved				*/
105dbbd9e4bSmacallan/*0x80*/unsigned int		pad7[32];	/* Reserved				*/
106dbbd9e4bSmacallan
107dbbd9e4bSmacallan	/* Setup Unit's vertex state register */
108dbbd9e4bSmacallan/*100*/	volatile unsigned int	suvtx;
109dbbd9e4bSmacallan/*104*/	unsigned int		pad8[63];	/* Reserved				*/
110dbbd9e4bSmacallan
111dbbd9e4bSmacallan	/* Frame Buffer Control Registers */
112dbbd9e4bSmacallan/*200*/	volatile unsigned int	ppc;		/* Pixel Processor Control		*/
113dbbd9e4bSmacallan/*204*/	volatile unsigned int	wid;		/* Current WID				*/
114dbbd9e4bSmacallan/*208*/	volatile unsigned int	fg;		/* FG data				*/
115dbbd9e4bSmacallan/*20c*/	volatile unsigned int	bg;		/* BG data				*/
116dbbd9e4bSmacallan/*210*/	volatile unsigned int	consty;		/* Constant Y				*/
117dbbd9e4bSmacallan/*214*/	volatile unsigned int	constz;		/* Constant Z				*/
118dbbd9e4bSmacallan/*218*/	volatile unsigned int	xclip;		/* X Clip				*/
119dbbd9e4bSmacallan/*21c*/	volatile unsigned int	dcss;		/* Depth Cue Scale Slope		*/
120dbbd9e4bSmacallan/*220*/	volatile unsigned int	vclipmin;	/* Viewclip XY Min Bounds		*/
121dbbd9e4bSmacallan/*224*/	volatile unsigned int	vclipmax;	/* Viewclip XY Max Bounds		*/
122dbbd9e4bSmacallan/*228*/	volatile unsigned int	vclipzmin;	/* Viewclip Z Min Bounds		*/
123dbbd9e4bSmacallan/*22c*/	volatile unsigned int	vclipzmax;	/* Viewclip Z Max Bounds		*/
124dbbd9e4bSmacallan/*230*/	volatile unsigned int	dcsf;		/* Depth Cue Scale Front Bound		*/
125dbbd9e4bSmacallan/*234*/	volatile unsigned int	dcsb;		/* Depth Cue Scale Back Bound		*/
126dbbd9e4bSmacallan/*238*/	volatile unsigned int	dczf;		/* Depth Cue Z Front			*/
127dbbd9e4bSmacallan/*23c*/	volatile unsigned int	dczb;		/* Depth Cue Z Back			*/
128dbbd9e4bSmacallan/*240*/	unsigned int		pad9;		/* Reserved				*/
129dbbd9e4bSmacallan/*244*/	volatile unsigned int	blendc;		/* Alpha Blend Control			*/
130dbbd9e4bSmacallan/*248*/	volatile unsigned int	blendc1;	/* Alpha Blend Color 1			*/
131dbbd9e4bSmacallan/*24c*/	volatile unsigned int	blendc2;	/* Alpha Blend Color 2			*/
132dbbd9e4bSmacallan/*250*/	volatile unsigned int	fbramitc;	/* FB RAM Interleave Test Control	*/
133dbbd9e4bSmacallan/*254*/	volatile unsigned int	fbc;		/* Frame Buffer Control			*/
134dbbd9e4bSmacallan/*258*/	volatile unsigned int	rop;		/* Raster OPeration			*/
135dbbd9e4bSmacallan/*25c*/	volatile unsigned int	cmp;		/* Frame Buffer Compare			*/
136dbbd9e4bSmacallan/*260*/	volatile unsigned int	matchab;	/* Buffer AB Match Mask			*/
137dbbd9e4bSmacallan/*264*/	volatile unsigned int	matchc;		/* Buffer C(YZ) Match Mask		*/
138dbbd9e4bSmacallan/*268*/	volatile unsigned int	magnab;		/* Buffer AB Magnitude Mask		*/
139dbbd9e4bSmacallan/*26c*/	volatile unsigned int	magnc;		/* Buffer C(YZ) Magnitude Mask		*/
140dbbd9e4bSmacallan/*270*/	volatile unsigned int	fbcfg0;		/* Frame Buffer Config 0		*/
141dbbd9e4bSmacallan/*274*/	volatile unsigned int	fbcfg1;		/* Frame Buffer Config 1		*/
142dbbd9e4bSmacallan/*278*/	volatile unsigned int	fbcfg2;		/* Frame Buffer Config 2		*/
143dbbd9e4bSmacallan/*27c*/	volatile unsigned int	fbcfg3;		/* Frame Buffer Config 3		*/
144dbbd9e4bSmacallan/*280*/	volatile unsigned int	ppcfg;		/* Pixel Processor Config		*/
145dbbd9e4bSmacallan/*284*/	volatile unsigned int	pick;		/* Picking Control			*/
146dbbd9e4bSmacallan/*288*/	volatile unsigned int	fillmode;	/* FillMode				*/
147dbbd9e4bSmacallan/*28c*/	volatile unsigned int	fbramwac;	/* FB RAM Write Address Control		*/
148dbbd9e4bSmacallan/*290*/	volatile unsigned int	pmask;		/* RGB PlaneMask			*/
149dbbd9e4bSmacallan/*294*/	volatile unsigned int	xpmask;		/* X PlaneMask				*/
150dbbd9e4bSmacallan/*298*/	volatile unsigned int	ypmask;		/* Y PlaneMask				*/
151dbbd9e4bSmacallan/*29c*/	volatile unsigned int	zpmask;		/* Z PlaneMask				*/
152dbbd9e4bSmacallan/*2a0*/	ffb_auxclip		auxclip[4]; 	/* Auxilliary Viewport Clip		*/
153dbbd9e4bSmacallan
154dbbd9e4bSmacallan	/* New 3dRAM III support regs */
155dbbd9e4bSmacallan/*2c0*/	volatile unsigned int	rawblend2;
156dbbd9e4bSmacallan/*2c4*/	volatile unsigned int	rawpreblend;
157dbbd9e4bSmacallan/*2c8*/	volatile unsigned int	rawstencil;
158dbbd9e4bSmacallan/*2cc*/	volatile unsigned int	rawstencilctl;
159dbbd9e4bSmacallan/*2d0*/	volatile unsigned int	threedram1;
160dbbd9e4bSmacallan/*2d4*/	volatile unsigned int	threedram2;
161dbbd9e4bSmacallan/*2d8*/	volatile unsigned int	passin;
162dbbd9e4bSmacallan/*2dc*/	volatile unsigned int	rawclrdepth;
163dbbd9e4bSmacallan/*2e0*/	volatile unsigned int	rawpmask;
164dbbd9e4bSmacallan/*2e4*/	volatile unsigned int	rawcsrc;
165dbbd9e4bSmacallan/*2e8*/	volatile unsigned int	rawmatch;
166dbbd9e4bSmacallan/*2ec*/	volatile unsigned int	rawmagn;
167dbbd9e4bSmacallan/*2f0*/	volatile unsigned int	rawropblend;
168dbbd9e4bSmacallan/*2f4*/	volatile unsigned int	rawcmp;
169dbbd9e4bSmacallan/*2f8*/	volatile unsigned int	rawwac;
170dbbd9e4bSmacallan/*2fc*/	volatile unsigned int	fbramid;
171dbbd9e4bSmacallan
172dbbd9e4bSmacallan/*300*/	volatile unsigned int	drawop;		/* Draw OPeration			*/
173dbbd9e4bSmacallan/*304*/	unsigned int		pad10[2];	/* Reserved				*/
174dbbd9e4bSmacallan/*30c*/	volatile unsigned int	lpat;		/* Line Pattern control			*/
175dbbd9e4bSmacallan/*310*/	unsigned int		pad11;		/* Reserved				*/
176dbbd9e4bSmacallan/*314*/	volatile unsigned int	fontxy;		/* XY Font coordinate			*/
177dbbd9e4bSmacallan/*318*/	volatile unsigned int	fontw;		/* Font Width				*/
178dbbd9e4bSmacallan/*31c*/	volatile unsigned int	fontinc;	/* Font Increment			*/
179dbbd9e4bSmacallan/*320*/	volatile unsigned int	font;		/* Font bits				*/
180dbbd9e4bSmacallan/*324*/	unsigned int		pad12[3];	/* Reserved				*/
181dbbd9e4bSmacallan/*330*/	volatile unsigned int	blend2;
182dbbd9e4bSmacallan/*334*/	volatile unsigned int	preblend;
183dbbd9e4bSmacallan/*338*/	volatile unsigned int	stencil;
184dbbd9e4bSmacallan/*33c*/	volatile unsigned int	stencilctl;
185dbbd9e4bSmacallan
186dbbd9e4bSmacallan/*340*/	unsigned int		pad13[4];	/* Reserved				*/
187dbbd9e4bSmacallan/*350*/	volatile unsigned int	dcss1;		/* Depth Cue Scale Slope 1		*/
188dbbd9e4bSmacallan/*354*/	volatile unsigned int	dcss2;		/* Depth Cue Scale Slope 2		*/
189dbbd9e4bSmacallan/*358*/	volatile unsigned int	dcss3;		/* Depth Cue Scale Slope 3		*/
190dbbd9e4bSmacallan/*35c*/	volatile unsigned int	widpmask;
191dbbd9e4bSmacallan/*360*/	volatile unsigned int	dcs2;
192dbbd9e4bSmacallan/*364*/	volatile unsigned int	dcs3;
193dbbd9e4bSmacallan/*368*/	volatile unsigned int	dcs4;
194dbbd9e4bSmacallan/*36c*/	unsigned int		pad14;		/* Reserved				*/
195dbbd9e4bSmacallan/*370*/	volatile unsigned int	dcd2;
196dbbd9e4bSmacallan/*374*/	volatile unsigned int	dcd3;
197dbbd9e4bSmacallan/*378*/	volatile unsigned int	dcd4;
198dbbd9e4bSmacallan/*37c*/	unsigned int		pad15;		/* Reserved				*/
199dbbd9e4bSmacallan/*380*/	volatile unsigned int	pattern[32];	/* area Pattern				*/
200dbbd9e4bSmacallan/*400*/	unsigned int		pad16[8];	/* Reserved				*/
201dbbd9e4bSmacallan/*420*/	volatile unsigned int	reset;		/* chip RESET				*/
202dbbd9e4bSmacallan/*424*/	unsigned int		pad17[247];	/* Reserved				*/
203dbbd9e4bSmacallan/*800*/	volatile unsigned int	devid;		/* Device ID				*/
204dbbd9e4bSmacallan/*804*/	unsigned int		pad18[63];	/* Reserved				*/
205dbbd9e4bSmacallan/*900*/	volatile unsigned int	ucsr;		/* User Control & Status Register	*/
206dbbd9e4bSmacallan/*904*/	unsigned int		pad19[31];	/* Reserved				*/
207dbbd9e4bSmacallan/*980*/	volatile unsigned int	mer;		/* Mode Enable Register			*/
208dbbd9e4bSmacallan/*984*/	unsigned int		pad20[1439];	/* Reserved				*/
209dbbd9e4bSmacallan} ffb_fbc, *ffb_fbcPtr;
210dbbd9e4bSmacallan
211dbbd9e4bSmacallan/* Draw operations */
212dbbd9e4bSmacallan#define FFB_DRAWOP_DOT		0x00
213dbbd9e4bSmacallan#define FFB_DRAWOP_AADOT	0x01
214dbbd9e4bSmacallan#define FFB_DRAWOP_BRLINECAP	0x02
215dbbd9e4bSmacallan#define FFB_DRAWOP_BRLINEOPEN	0x03
216dbbd9e4bSmacallan#define FFB_DRAWOP_DDLINE	0x04
217dbbd9e4bSmacallan#define FFB_DRAWOP_AALINE	0x05
218dbbd9e4bSmacallan#define FFB_DRAWOP_TRIANGLE	0x06
219dbbd9e4bSmacallan#define FFB_DRAWOP_POLYGON	0x07
220dbbd9e4bSmacallan#define FFB_DRAWOP_RECTANGLE	0x08
221dbbd9e4bSmacallan#define FFB_DRAWOP_FASTFILL	0x09
222dbbd9e4bSmacallan#define FFB_DRAWOP_BCOPY	0x0a	/* Not implemented in any FFB, VIS is faster		*/
223dbbd9e4bSmacallan#define FFB_DRAWOP_VSCROLL	0x0b	/* Up to 12x faster than BCOPY, 3-4x faster than VIS	*/
224dbbd9e4bSmacallan
225dbbd9e4bSmacallan/* FastFill operation codes. */
226dbbd9e4bSmacallan#define FFB_FASTFILL_PAGE	0x01
227dbbd9e4bSmacallan#define FFB_FASTFILL_BLOCK	0x02
228dbbd9e4bSmacallan#define FFB_FASTFILL_COLOR_BLK	0x03
229dbbd9e4bSmacallan#define FFB_FASTFILL_BLOCK_X	0x04
230dbbd9e4bSmacallan
231dbbd9e4bSmacallan/* Spanfill Unit Line Pattern */
232dbbd9e4bSmacallan#define FFB_LPAT_SCALEPTR	0xf0000000
233dbbd9e4bSmacallan#define FFB_LPAT_SCALEPTR_SHIFT	28
234dbbd9e4bSmacallan#define FFB_LPAT_PATPTR		0x0f000000
235dbbd9e4bSmacallan#define FFB_LPAT_PATPTR_SHIFT	24
236dbbd9e4bSmacallan#define FFB_LPAT_SCALEVAL	0x00f00000
237dbbd9e4bSmacallan#define FFB_LPAT_SCALEVAL_SHIFT	20
238dbbd9e4bSmacallan#define FFB_LPAT_PATLEN		0x000f0000
239dbbd9e4bSmacallan#define FFB_LPAT_PATLEN_SHIFT	16
240dbbd9e4bSmacallan#define FFB_LPAT_PATTERN	0x0000ffff
241dbbd9e4bSmacallan#define FFB_LPAT_PATTERN_SHIFT	0
242dbbd9e4bSmacallan
243dbbd9e4bSmacallan/* Pixel processor control */
244dbbd9e4bSmacallan/* Force WID */
245dbbd9e4bSmacallan#define FFB_PPC_FW_DISABLE	0x800000
246dbbd9e4bSmacallan#define FFB_PPC_FW_ENABLE	0xc00000
247dbbd9e4bSmacallan#define FFB_PPC_FW_MASK		0xc00000
248dbbd9e4bSmacallan/* Auxiliary clip */
249dbbd9e4bSmacallan#define FFB_PPC_ACE_DISABLE	0x040000
250dbbd9e4bSmacallan#define FFB_PPC_ACE_AUX_SUB	0x080000
251dbbd9e4bSmacallan#define FFB_PPC_ACE_AUX_ADD	0x0c0000
252dbbd9e4bSmacallan#define FFB_PPC_ACE_MASK	0x0c0000
253dbbd9e4bSmacallan/* Depth cue */
254dbbd9e4bSmacallan#define FFB_PPC_DCE_DISABLE	0x020000
255dbbd9e4bSmacallan#define FFB_PPC_DCE_ENABLE	0x030000
256dbbd9e4bSmacallan#define FFB_PPC_DCE_MASK	0x030000
257dbbd9e4bSmacallan/* Alpha blend */
258dbbd9e4bSmacallan#define FFB_PPC_ABE_DISABLE	0x008000
259dbbd9e4bSmacallan#define FFB_PPC_ABE_ENABLE	0x00c000
260dbbd9e4bSmacallan#define FFB_PPC_ABE_MASK	0x00c000
261dbbd9e4bSmacallan/* View clip */
262dbbd9e4bSmacallan#define FFB_PPC_VCE_DISABLE	0x001000
263dbbd9e4bSmacallan#define FFB_PPC_VCE_2D		0x002000
264dbbd9e4bSmacallan#define FFB_PPC_VCE_3D		0x003000
265dbbd9e4bSmacallan#define FFB_PPC_VCE_MASK	0x003000
266dbbd9e4bSmacallan/* Area pattern */
267dbbd9e4bSmacallan#define FFB_PPC_APE_DISABLE	0x000800
268dbbd9e4bSmacallan#define FFB_PPC_APE_ENABLE	0x000c00
269dbbd9e4bSmacallan#define FFB_PPC_APE_MASK	0x000c00
270dbbd9e4bSmacallan/* Transparent background */
271dbbd9e4bSmacallan#define FFB_PPC_TBE_OPAQUE	0x000200
272dbbd9e4bSmacallan#define FFB_PPC_TBE_TRANSPARENT	0x000300
273dbbd9e4bSmacallan#define FFB_PPC_TBE_MASK	0x000300
274dbbd9e4bSmacallan/* Z source */
275dbbd9e4bSmacallan#define FFB_PPC_ZS_VAR		0x000080
276dbbd9e4bSmacallan#define FFB_PPC_ZS_CONST	0x0000c0
277dbbd9e4bSmacallan#define FFB_PPC_ZS_MASK		0x0000c0
278dbbd9e4bSmacallan/* Y source */
279dbbd9e4bSmacallan#define FFB_PPC_YS_VAR		0x000020
280dbbd9e4bSmacallan#define FFB_PPC_YS_CONST	0x000030
281dbbd9e4bSmacallan#define FFB_PPC_YS_MASK		0x000030
282dbbd9e4bSmacallan/* X source */
283dbbd9e4bSmacallan#define FFB_PPC_XS_WID		0x000004
284dbbd9e4bSmacallan#define FFB_PPC_XS_VAR		0x000008
285dbbd9e4bSmacallan#define FFB_PPC_XS_CONST	0x00000c
286dbbd9e4bSmacallan#define FFB_PPC_XS_MASK		0x00000c
287dbbd9e4bSmacallan/* Color (BGR) source */
288dbbd9e4bSmacallan#define FFB_PPC_CS_VAR		0x000002
289dbbd9e4bSmacallan#define FFB_PPC_CS_CONST	0x000003
290dbbd9e4bSmacallan#define FFB_PPC_CS_MASK		0x000003
291dbbd9e4bSmacallan
292dbbd9e4bSmacallan/* X Clip */
293dbbd9e4bSmacallan#define FFB_XCLIP_XREF		0x000000ff
294dbbd9e4bSmacallan#define FFB_XCLIP_TEST_MASK	0x00070000
295dbbd9e4bSmacallan#define FFB_XCLIP_TEST_ALWAYS	0x00000000
296dbbd9e4bSmacallan#define FFB_XCLIP_TEST_GT	0x00010000
297dbbd9e4bSmacallan#define FFB_XCLIP_TEST_EQ	0x00020000
298dbbd9e4bSmacallan#define FFB_XCLIP_TEST_GE	0x00030000
299dbbd9e4bSmacallan#define FFB_XCLIP_TEST_NEVER	0x00040000
300dbbd9e4bSmacallan#define FFB_XCLIP_TEST_LE	0x00050000
301dbbd9e4bSmacallan#define FFB_XCLIP_TEST_NE	0x00060000
302dbbd9e4bSmacallan#define FFB_XCLIP_TEST_LT	0x00070000
303dbbd9e4bSmacallan
304dbbd9e4bSmacallan/* FB Control register */
305dbbd9e4bSmacallan/* Write buffer dest */
306dbbd9e4bSmacallan#define FFB_FBC_WB_A		0x20000000
307dbbd9e4bSmacallan#define FFB_FBC_WB_B		0x40000000
308dbbd9e4bSmacallan#define FFB_FBC_WB_AB		0x60000000
309dbbd9e4bSmacallan#define FFB_FBC_WB_C		0x80000000
310dbbd9e4bSmacallan#define FFB_FBC_WB_AC		0xa0000000
311dbbd9e4bSmacallan#define FFB_FBC_WB_BC		0xc0000000
312dbbd9e4bSmacallan#define FFB_FBC_WB_ABC		0xe0000000
313dbbd9e4bSmacallan#define FFB_FBC_WB_MASK		0xe0000000
314dbbd9e4bSmacallan/* Write enable */
315dbbd9e4bSmacallan#define FFB_FBC_WE_FORCEOFF	0x00100000
316dbbd9e4bSmacallan#define FFB_FBC_WE_FORCEON	0x00200000
317dbbd9e4bSmacallan#define FFB_FBC_WE_USE_WMASK	0x00300000
318dbbd9e4bSmacallan#define FFB_FBC_WE_MASK		0x00300000
319dbbd9e4bSmacallan/* Write group mode */
320dbbd9e4bSmacallan#define FFB_FBC_WM_RSVD		0x00040000
321dbbd9e4bSmacallan#define FFB_FBC_WM_COMBINED	0x00080000
322dbbd9e4bSmacallan#define FFB_FBC_WM_SEPARATE	0x000c0000
323dbbd9e4bSmacallan#define FFB_FBC_WM_MASK		0x000c0000
324dbbd9e4bSmacallan/* Read buffer src */
325dbbd9e4bSmacallan#define FFB_FBC_RB_A		0x00004000
326dbbd9e4bSmacallan#define FFB_FBC_RB_B		0x00008000
327dbbd9e4bSmacallan#define FFB_FBC_RB_C		0x0000c000
328dbbd9e4bSmacallan#define FFB_FBC_RB_MASK		0x0000c000
329dbbd9e4bSmacallan/* Stereo buf dest */
330dbbd9e4bSmacallan#define FFB_FBC_SB_LEFT		0x00001000
331dbbd9e4bSmacallan#define FFB_FBC_SB_RIGHT	0x00002000
332dbbd9e4bSmacallan#define FFB_FBC_SB_BOTH		0x00003000
333dbbd9e4bSmacallan#define FFB_FBC_SB_MASK		0x00003000
334dbbd9e4bSmacallan/* Z plane group enable */
335dbbd9e4bSmacallan#define FFB_FBC_ZE_OFF		0x00000400
336dbbd9e4bSmacallan#define FFB_FBC_ZE_ON		0x00000800
337dbbd9e4bSmacallan#define FFB_FBC_ZE_MASK		0x00000c00
338dbbd9e4bSmacallan/* Y plane group enable */
339dbbd9e4bSmacallan#define FFB_FBC_YE_OFF		0x00000100
340dbbd9e4bSmacallan#define FFB_FBC_YE_ON		0x00000200
341dbbd9e4bSmacallan#define FFB_FBC_YE_MASK		0x00000300
342dbbd9e4bSmacallan/* X plane group enable */
343dbbd9e4bSmacallan#define FFB_FBC_XE_OFF		0x00000040
344dbbd9e4bSmacallan#define FFB_FBC_XE_ON		0x00000080
345dbbd9e4bSmacallan#define FFB_FBC_XE_MASK		0x000000c0
346dbbd9e4bSmacallan/* B plane group enable */
347dbbd9e4bSmacallan#define FFB_FBC_BE_OFF		0x00000010
348dbbd9e4bSmacallan#define FFB_FBC_BE_ON		0x00000020
349dbbd9e4bSmacallan#define FFB_FBC_BE_MASK		0x00000030
350dbbd9e4bSmacallan/* G plane group enable */
351dbbd9e4bSmacallan#define FFB_FBC_GE_OFF		0x00000004
352dbbd9e4bSmacallan#define FFB_FBC_GE_ON		0x00000008
353dbbd9e4bSmacallan#define FFB_FBC_GE_MASK		0x0000000c
354dbbd9e4bSmacallan/* R plane group enable */
355dbbd9e4bSmacallan#define FFB_FBC_RE_OFF		0x00000001
356dbbd9e4bSmacallan#define FFB_FBC_RE_ON		0x00000002
357dbbd9e4bSmacallan#define FFB_FBC_RE_MASK		0x00000003
358dbbd9e4bSmacallan/* Combined */
359dbbd9e4bSmacallan#define FFB_FBC_RGBE_OFF	0x00000015
360dbbd9e4bSmacallan#define FFB_FBC_RGBE_ON		0x0000002a
361dbbd9e4bSmacallan#define FFB_FBC_RGBE_MASK	0x0000003f
362dbbd9e4bSmacallan
363dbbd9e4bSmacallan/* Raster OP */
364dbbd9e4bSmacallan#define FFB_ROP_YZ_MASK		0x008f0000
365dbbd9e4bSmacallan#define FFB_ROP_X_MASK		0x00008f00
366dbbd9e4bSmacallan#define FFB_ROP_RGB_MASK	0x0000008f
367dbbd9e4bSmacallan
368dbbd9e4bSmacallan/* Now the rops themselves which get shifted into the
369dbbd9e4bSmacallan * above fields.
370dbbd9e4bSmacallan */
371dbbd9e4bSmacallan#define FFB_ROP_EDIT_BIT	0x80
372dbbd9e4bSmacallan#define FFB_ROP_ZERO		0x80
373dbbd9e4bSmacallan#define FFB_ROP_NEW_AND_OLD	0x81
374dbbd9e4bSmacallan#define FFB_ROP_NEW_AND_NOLD	0x82
375dbbd9e4bSmacallan#define FFB_ROP_NEW		0x83
376dbbd9e4bSmacallan#define FFB_ROP_NNEW_AND_OLD	0x84
377dbbd9e4bSmacallan#define FFB_ROP_OLD		0x85
378dbbd9e4bSmacallan#define FFB_ROP_NEW_XOR_OLD	0x86
379dbbd9e4bSmacallan#define FFB_ROP_NEW_OR_OLD	0x87
380dbbd9e4bSmacallan#define FFB_ROP_NNEW_AND_NOLD	0x88
381dbbd9e4bSmacallan#define FFB_ROP_NNEW_XOR_NOLD	0x89
382dbbd9e4bSmacallan#define FFB_ROP_NOLD		0x8a
383dbbd9e4bSmacallan#define FFB_ROP_NEW_OR_NOLD	0x8b
384dbbd9e4bSmacallan#define FFB_ROP_NNEW		0x8c
385dbbd9e4bSmacallan#define FFB_ROP_NNEW_OR_OLD	0x8d
386dbbd9e4bSmacallan#define FFB_ROP_NNEW_OR_NOLD	0x8e
387dbbd9e4bSmacallan#define FFB_ROP_ONES		0x8f
388dbbd9e4bSmacallan
389dbbd9e4bSmacallan/* FB Compare */
390dbbd9e4bSmacallan#define FFB_CMP_MATCHC_MASK	0x8f000000
391dbbd9e4bSmacallan#define FFB_CMP_MAGNC_MASK	0x00870000
392dbbd9e4bSmacallan#define FFB_CMP_MATCHAB_MASK	0x0000ff00
393dbbd9e4bSmacallan#define FFB_CMP_MAGNAB_MASK	0x000000ff
394dbbd9e4bSmacallan
395dbbd9e4bSmacallan/* Compare Match codes */
396dbbd9e4bSmacallan#define FFB_CMP_MATCH_EDIT_BIT	0x80
397dbbd9e4bSmacallan#define FFB_CMP_MATCH_ALWAYS	0x80
398dbbd9e4bSmacallan#define FFB_CMP_MATCH_NEVER	0x81
399dbbd9e4bSmacallan#define FFB_CMP_MATCH_EQ	0x82
400dbbd9e4bSmacallan#define FFB_CMP_MATCH_NE	0x83
401dbbd9e4bSmacallan#define FFB_CMP_MATCH_A_ALWAYS	0xc0
402dbbd9e4bSmacallan#define FFB_CMP_MATCH_B_ALWAYS	0xa0
403dbbd9e4bSmacallan
404dbbd9e4bSmacallan/* Compare Magnitude codes */
405dbbd9e4bSmacallan#define FFB_CMP_MAGN_EDIT_BIT	0x80
406dbbd9e4bSmacallan#define FFB_CMP_MAGN_ALWAYS	0x80
407dbbd9e4bSmacallan#define FFB_CMP_MAGN_GT		0x81
408dbbd9e4bSmacallan#define FFB_CMP_MAGN_EQ		0x82
409dbbd9e4bSmacallan#define FFB_CMP_MAGN_GE		0x83
410dbbd9e4bSmacallan#define FFB_CMP_MAGN_NEVER	0x84
411dbbd9e4bSmacallan#define FFB_CMP_MAGN_LE		0x85
412dbbd9e4bSmacallan#define FFB_CMP_MAGN_NE		0x86
413dbbd9e4bSmacallan#define FFB_CMP_MAGN_LT		0x87
414dbbd9e4bSmacallan#define FFB_CMP_MAGN_A_ALWAYS	0xc0
415dbbd9e4bSmacallan#define FFB_CMP_MAGN_B_ALWAYS	0xa0
416dbbd9e4bSmacallan
417dbbd9e4bSmacallan/* User Control and Status */
418dbbd9e4bSmacallan#define FFB_UCSR_FIFO_MASK	0x00000fff
419dbbd9e4bSmacallan#define FFB_UCSR_PICK_NO_HIT	0x00020000
420dbbd9e4bSmacallan#define FFB_UCSR_PICK_HIT	0x00030000
421dbbd9e4bSmacallan#define FFB_UCSR_PICK_DISABLE	0x00080000
422dbbd9e4bSmacallan#define FFB_UCSR_PICK_ENABLE	0x000c0000
423dbbd9e4bSmacallan#define FFB_UCSR_FB_BUSY	0x01000000
424dbbd9e4bSmacallan#define FFB_UCSR_RP_BUSY	0x02000000
425dbbd9e4bSmacallan#define FFB_UCSR_ALL_BUSY	(FFB_UCSR_RP_BUSY|FFB_UCSR_FB_BUSY)
426dbbd9e4bSmacallan#define FFB_UCSR_READ_ERR	0x40000000
427dbbd9e4bSmacallan#define FFB_UCSR_FIFO_OVFL	0x80000000
428dbbd9e4bSmacallan#define FFB_UCSR_ALL_ERRORS	(FFB_UCSR_READ_ERR|FFB_UCSR_FIFO_OVFL)
429dbbd9e4bSmacallan
430dbbd9e4bSmacallan/* Mode Enable Register */
431dbbd9e4bSmacallan#define FFB_MER_EIRA		0x00000080 /* Enable read-ahead, increasing */
432dbbd9e4bSmacallan#define FFB_MER_EDRA		0x000000c0 /* Enable read-ahead, decreasing */
433dbbd9e4bSmacallan#define FFB_MER_DRA		0x00000040 /* No read-ahead */
434dbbd9e4bSmacallan
435dbbd9e4bSmacallan/* Alpha Blend Control */
436dbbd9e4bSmacallan#define FFB_BLENDC_FORCE_ONE	0x00000010 /* Defines 0xff as 1.0 */
437dbbd9e4bSmacallan#define FFB_BLENDC_DF_MASK	0x0000000c /* Destination Frac Mask */
438dbbd9e4bSmacallan#define FFB_BLENDC_DF_ZERO	0x00000000 /* Destination Frac: 0.00 */
439dbbd9e4bSmacallan#define FFB_BLENDC_DF_ONE	0x00000004 /* Destination Frac: 1.00 */
440dbbd9e4bSmacallan#define FFB_BLENDC_DF_ONE_M_A	0x00000008 /* Destination Frac: 1.00 - Xsrc */
441dbbd9e4bSmacallan#define FFB_BLENDC_DF_A		0x0000000c /* Destination Frac: Xsrc */
442dbbd9e4bSmacallan#define FFB_BLENDC_SF_MASK	0x00000003 /* Source Frac Mask */
443dbbd9e4bSmacallan#define FFB_BLENDC_SF_ZERO	0x00000000 /* Source Frac: 0.00 */
444dbbd9e4bSmacallan#define FFB_BLENDC_SF_ONE	0x00000001 /* Source Frac: 1.00 */
445dbbd9e4bSmacallan#define FFB_BLENDC_SF_ONE_M_A	0x00000002 /* Source Frac: 1.00 - Xsrc */
446dbbd9e4bSmacallan#define FFB_BLENDC_SF_A		0x00000003 /* Source Frac: Xsrc */
447dbbd9e4bSmacallan
448dbbd9e4bSmacallan/* FBram Config 0 */
449dbbd9e4bSmacallan#define FFB_FBCFG0_RFTIME	0xff800000
450dbbd9e4bSmacallan#define FFB_FBCFG0_XMAX		0x007c0000
451dbbd9e4bSmacallan#define FFB_FBCFG0_YMAX		0x0003ffc0
452dbbd9e4bSmacallan#define FFB_FBCFG0_RES_MASK	0x00000030
453dbbd9e4bSmacallan#define FFB_FBCFG0_RES_HIGH	0x00000030 /* 1920x1360 */
454dbbd9e4bSmacallan#define FFB_FBCFG0_RES_STD	0x00000020 /* 1280x1024 */
455dbbd9e4bSmacallan#define FFB_FBCFG0_RES_STEREO	0x00000010 /* 960x580 */
456dbbd9e4bSmacallan#define FFB_FBCFG0_RES_PRTRAIT	0x00000000 /* 1280x2048 */
457dbbd9e4bSmacallan#define FFB_FBCFG0_ITRLACE	0x00000000
458dbbd9e4bSmacallan#define FFB_FBCFG0_SEQUENTIAL	0x00000008
459dbbd9e4bSmacallan#define FFB_FBCFG0_DRENA	0x00000004
460dbbd9e4bSmacallan#define FFB_FBCFG0_BPMODE	0x00000002
461dbbd9e4bSmacallan#define FFB_FBCFG0_RFRSH_RST	0x00000001
462dbbd9e4bSmacallan
463dbbd9e4bSmacallantypedef struct _ffb_dac {
464dbbd9e4bSmacallan	volatile unsigned int	cfg;
465dbbd9e4bSmacallan	volatile unsigned int	cfgdata;
466dbbd9e4bSmacallan	volatile unsigned int	cur;
467dbbd9e4bSmacallan	volatile unsigned int	curdata;
468dbbd9e4bSmacallan} ffb_dac, *ffb_dacPtr;
469dbbd9e4bSmacallan
470dbbd9e4bSmacallan/* Writing 2 32-bit registers at a time using 64-bit stores. -DaveM */
471dbbd9e4bSmacallan#if defined(__GNUC__) && defined(USE_VIS)
472dbbd9e4bSmacallan/* 64-bit register writing support.
473dbbd9e4bSmacallan * Note: "lo" means "low address".
474dbbd9e4bSmacallan */
475dbbd9e4bSmacallan#define FFB_WRITE64_COMMON(__regp, __lo32, __hi32, REG0, REG1) \
476dbbd9e4bSmacallando {	__extension__ register unsigned int __r0 __asm__(""#REG0); \
477dbbd9e4bSmacallan	__extension__ register unsigned int __r1 __asm__(""#REG1); \
478dbbd9e4bSmacallan	__r0 = (__lo32); \
479dbbd9e4bSmacallan	__r1 = (__hi32); \
480dbbd9e4bSmacallan	__asm__ __volatile__ ("sllx\t%0, 32, %%g1\n\t" \
481dbbd9e4bSmacallan			      "srl\t%1, 0, %1\n\t" \
482dbbd9e4bSmacallan			      "or\t%%g1, %1, %%g1\n\t" \
483dbbd9e4bSmacallan			      "stx\t%%g1, %2" \
484dbbd9e4bSmacallan	 : : "r" (__r0), "r" (__r1), "m" (*(__regp)) : "g1"); \
485dbbd9e4bSmacallan} while(0)
486dbbd9e4bSmacallan
487dbbd9e4bSmacallan#define FFB_WRITE64P(__regp, __srcp) \
488dbbd9e4bSmacallando {	__asm__ __volatile__ ("ldx\t%0, %%g2;" \
489dbbd9e4bSmacallan			      "stx\t%%g2, %1" \
490dbbd9e4bSmacallan	 : : "m" (*(__srcp)), "m" (*(__regp)) \
491dbbd9e4bSmacallan         : "g2"); \
492dbbd9e4bSmacallan} while(0)
493dbbd9e4bSmacallan
494dbbd9e4bSmacallan#define FFB_WRITE64(__regp, __lo32, __hi32) \
495dbbd9e4bSmacallan	FFB_WRITE64_COMMON(__regp, __lo32, __hi32, g2, g3)
496dbbd9e4bSmacallan#define FFB_WRITE64_2(__regp, __lo32, __hi32) \
497dbbd9e4bSmacallan	FFB_WRITE64_COMMON(__regp, __lo32, __hi32, g4, g5)
498dbbd9e4bSmacallan#define FFB_WRITE64_3(__regp, __lo32, __hi32) \
499dbbd9e4bSmacallan	FFB_WRITE64_COMMON(__regp, __lo32, __hi32, o4, o5)
500dbbd9e4bSmacallan
501dbbd9e4bSmacallan#else /* Do not use 64-bit writes. */
502dbbd9e4bSmacallan
503dbbd9e4bSmacallan#define FFB_WRITE64(__regp, __lo32, __hi32) \
504dbbd9e4bSmacallando {	volatile unsigned int *__p = (__regp); \
505dbbd9e4bSmacallan	*__p = (__lo32); \
506dbbd9e4bSmacallan	*(__p + 1) = (__hi32); \
507dbbd9e4bSmacallan} while(0)
508dbbd9e4bSmacallan
509dbbd9e4bSmacallan#define FFB_WRITE64P(__regp, __srcp) \
510dbbd9e4bSmacallando {	volatile unsigned int *__p = (__regp); \
511dbbd9e4bSmacallan	unsigned int *__q = (__srcp); \
512dbbd9e4bSmacallan	*__p = *__q; \
513dbbd9e4bSmacallan	*(__p + 1) = *(__q + 1); \
514dbbd9e4bSmacallan} while(0)
515dbbd9e4bSmacallan
516dbbd9e4bSmacallan#define FFB_WRITE64_2(__regp, __lo32, __hi32) \
517dbbd9e4bSmacallan	FFB_WRITE64(__regp, __lo32, __hi32)
518dbbd9e4bSmacallan#define FFB_WRITE64_3(__regp, __lo32, __hi32) \
519dbbd9e4bSmacallan	FFB_WRITE64(__regp, __lo32, __hi32)
520dbbd9e4bSmacallan#endif
521dbbd9e4bSmacallan
522dbbd9e4bSmacallan#endif /* FFBREGS_H */
523