1 /* $Id: ffb_drv.h,v 1.1 2000/06/01 04:24:39 davem Exp $
2 * ffb_drv.h: Creator/Creator3D direct rendering driver.
4 * Copyright (C) 2000 David S. Miller (davem@redhat.com)
7 /* Auxilliary clips. */
9 volatile unsigned int min
;
10 volatile unsigned int max
;
11 } ffb_auxclip
, *ffb_auxclipPtr
;
13 /* FFB register set. */
14 typedef struct _ffb_fbc
{
15 /* Next vertex registers, on the right we list which drawops
16 * use said register and the logical name the register has in
18 */ /* DESCRIPTION DRAWOP(NAME) */
19 /*0x00*/unsigned int pad1
[3]; /* Reserved */
20 /*0x0c*/volatile unsigned int alpha
; /* ALPHA Transparency */
21 /*0x10*/volatile unsigned int red
; /* RED */
22 /*0x14*/volatile unsigned int green
; /* GREEN */
23 /*0x18*/volatile unsigned int blue
; /* BLUE */
24 /*0x1c*/volatile unsigned int z
; /* DEPTH */
25 /*0x20*/volatile unsigned int y
; /* Y triangle(DOYF) */
29 /*0x24*/volatile unsigned int x
; /* X triangle(DOXF) */
33 /*0x28*/unsigned int pad2
[2]; /* Reserved */
34 /*0x30*/volatile unsigned int ryf
; /* Y (alias to DOYF) ddline(RYF) */
37 /*0x34*/volatile unsigned int rxf
; /* X ddline(RXF) */
40 /*0x38*/unsigned int pad3
[2]; /* Reserved */
41 /*0x40*/volatile unsigned int dmyf
; /* Y (alias to DOYF) triangle(DMYF) */
42 /*0x44*/volatile unsigned int dmxf
; /* X triangle(DMXF) */
43 /*0x48*/unsigned int pad4
[2]; /* Reserved */
44 /*0x50*/volatile unsigned int ebyi
; /* Y (alias to RYI) polygon(EBYI) */
45 /*0x54*/volatile unsigned int ebxi
; /* X polygon(EBXI) */
46 /*0x58*/unsigned int pad5
[2]; /* Reserved */
47 /*0x60*/volatile unsigned int by
; /* Y brline(RYI) */
53 /*0x64*/volatile unsigned int bx
; /* X brline(RXI) */
59 /*0x68*/volatile unsigned int dy
; /* destination Y fastfill(DSTY) */
62 /*0x6c*/volatile unsigned int dx
; /* destination X fastfill(DSTX) */
65 /*0x70*/volatile unsigned int bh
; /* Y (alias to RYI) brline(DYI) */
68 /* Height fastfill(H) */
71 /* Y count fastfill(NY) */
72 /*0x74*/volatile unsigned int bw
; /* X dot(DXI) */
79 /*0x78*/unsigned int pad6
[2]; /* Reserved */
80 /*0x80*/unsigned int pad7
[32]; /* Reserved */
82 /* Setup Unit's vertex state register */
83 /*100*/ volatile unsigned int suvtx
;
84 /*104*/ unsigned int pad8
[63]; /* Reserved */
86 /* Frame Buffer Control Registers */
87 /*200*/ volatile unsigned int ppc
; /* Pixel Processor Control */
88 /*204*/ volatile unsigned int wid
; /* Current WID */
89 /*208*/ volatile unsigned int fg
; /* FG data */
90 /*20c*/ volatile unsigned int bg
; /* BG data */
91 /*210*/ volatile unsigned int consty
; /* Constant Y */
92 /*214*/ volatile unsigned int constz
; /* Constant Z */
93 /*218*/ volatile unsigned int xclip
; /* X Clip */
94 /*21c*/ volatile unsigned int dcss
; /* Depth Cue Scale Slope */
95 /*220*/ volatile unsigned int vclipmin
; /* Viewclip XY Min Bounds */
96 /*224*/ volatile unsigned int vclipmax
; /* Viewclip XY Max Bounds */
97 /*228*/ volatile unsigned int vclipzmin
; /* Viewclip Z Min Bounds */
98 /*22c*/ volatile unsigned int vclipzmax
; /* Viewclip Z Max Bounds */
99 /*230*/ volatile unsigned int dcsf
; /* Depth Cue Scale Front Bound */
100 /*234*/ volatile unsigned int dcsb
; /* Depth Cue Scale Back Bound */
101 /*238*/ volatile unsigned int dczf
; /* Depth Cue Z Front */
102 /*23c*/ volatile unsigned int dczb
; /* Depth Cue Z Back */
103 /*240*/ unsigned int pad9
; /* Reserved */
104 /*244*/ volatile unsigned int blendc
; /* Alpha Blend Control */
105 /*248*/ volatile unsigned int blendc1
; /* Alpha Blend Color 1 */
106 /*24c*/ volatile unsigned int blendc2
; /* Alpha Blend Color 2 */
107 /*250*/ volatile unsigned int fbramitc
; /* FB RAM Interleave Test Control */
108 /*254*/ volatile unsigned int fbc
; /* Frame Buffer Control */
109 /*258*/ volatile unsigned int rop
; /* Raster OPeration */
110 /*25c*/ volatile unsigned int cmp
; /* Frame Buffer Compare */
111 /*260*/ volatile unsigned int matchab
; /* Buffer AB Match Mask */
112 /*264*/ volatile unsigned int matchc
; /* Buffer C(YZ) Match Mask */
113 /*268*/ volatile unsigned int magnab
; /* Buffer AB Magnitude Mask */
114 /*26c*/ volatile unsigned int magnc
; /* Buffer C(YZ) Magnitude Mask */
115 /*270*/ volatile unsigned int fbcfg0
; /* Frame Buffer Config 0 */
116 /*274*/ volatile unsigned int fbcfg1
; /* Frame Buffer Config 1 */
117 /*278*/ volatile unsigned int fbcfg2
; /* Frame Buffer Config 2 */
118 /*27c*/ volatile unsigned int fbcfg3
; /* Frame Buffer Config 3 */
119 /*280*/ volatile unsigned int ppcfg
; /* Pixel Processor Config */
120 /*284*/ volatile unsigned int pick
; /* Picking Control */
121 /*288*/ volatile unsigned int fillmode
; /* FillMode */
122 /*28c*/ volatile unsigned int fbramwac
; /* FB RAM Write Address Control */
123 /*290*/ volatile unsigned int pmask
; /* RGB PlaneMask */
124 /*294*/ volatile unsigned int xpmask
; /* X PlaneMask */
125 /*298*/ volatile unsigned int ypmask
; /* Y PlaneMask */
126 /*29c*/ volatile unsigned int zpmask
; /* Z PlaneMask */
127 /*2a0*/ ffb_auxclip auxclip
[4]; /* Auxilliary Viewport Clip */
129 /* New 3dRAM III support regs */
130 /*2c0*/ volatile unsigned int rawblend2
;
131 /*2c4*/ volatile unsigned int rawpreblend
;
132 /*2c8*/ volatile unsigned int rawstencil
;
133 /*2cc*/ volatile unsigned int rawstencilctl
;
134 /*2d0*/ volatile unsigned int threedram1
;
135 /*2d4*/ volatile unsigned int threedram2
;
136 /*2d8*/ volatile unsigned int passin
;
137 /*2dc*/ volatile unsigned int rawclrdepth
;
138 /*2e0*/ volatile unsigned int rawpmask
;
139 /*2e4*/ volatile unsigned int rawcsrc
;
140 /*2e8*/ volatile unsigned int rawmatch
;
141 /*2ec*/ volatile unsigned int rawmagn
;
142 /*2f0*/ volatile unsigned int rawropblend
;
143 /*2f4*/ volatile unsigned int rawcmp
;
144 /*2f8*/ volatile unsigned int rawwac
;
145 /*2fc*/ volatile unsigned int fbramid
;
147 /*300*/ volatile unsigned int drawop
; /* Draw OPeration */
148 /*304*/ unsigned int pad10
[2]; /* Reserved */
149 /*30c*/ volatile unsigned int lpat
; /* Line Pattern control */
150 /*310*/ unsigned int pad11
; /* Reserved */
151 /*314*/ volatile unsigned int fontxy
; /* XY Font coordinate */
152 /*318*/ volatile unsigned int fontw
; /* Font Width */
153 /*31c*/ volatile unsigned int fontinc
; /* Font Increment */
154 /*320*/ volatile unsigned int font
; /* Font bits */
155 /*324*/ unsigned int pad12
[3]; /* Reserved */
156 /*330*/ volatile unsigned int blend2
;
157 /*334*/ volatile unsigned int preblend
;
158 /*338*/ volatile unsigned int stencil
;
159 /*33c*/ volatile unsigned int stencilctl
;
161 /*340*/ unsigned int pad13
[4]; /* Reserved */
162 /*350*/ volatile unsigned int dcss1
; /* Depth Cue Scale Slope 1 */
163 /*354*/ volatile unsigned int dcss2
; /* Depth Cue Scale Slope 2 */
164 /*358*/ volatile unsigned int dcss3
; /* Depth Cue Scale Slope 3 */
165 /*35c*/ volatile unsigned int widpmask
;
166 /*360*/ volatile unsigned int dcs2
;
167 /*364*/ volatile unsigned int dcs3
;
168 /*368*/ volatile unsigned int dcs4
;
169 /*36c*/ unsigned int pad14
; /* Reserved */
170 /*370*/ volatile unsigned int dcd2
;
171 /*374*/ volatile unsigned int dcd3
;
172 /*378*/ volatile unsigned int dcd4
;
173 /*37c*/ unsigned int pad15
; /* Reserved */
174 /*380*/ volatile unsigned int pattern
[32]; /* area Pattern */
175 /*400*/ unsigned int pad16
[8]; /* Reserved */
176 /*420*/ volatile unsigned int reset
; /* chip RESET */
177 /*424*/ unsigned int pad17
[247]; /* Reserved */
178 /*800*/ volatile unsigned int devid
; /* Device ID */
179 /*804*/ unsigned int pad18
[63]; /* Reserved */
180 /*900*/ volatile unsigned int ucsr
; /* User Control & Status Register */
181 /*904*/ unsigned int pad19
[31]; /* Reserved */
182 /*980*/ volatile unsigned int mer
; /* Mode Enable Register */
183 /*984*/ unsigned int pad20
[1439]; /* Reserved */
184 } ffb_fbc
, *ffb_fbcPtr
;
186 struct ffb_hw_context
{
197 unsigned int vclipmin
;
198 unsigned int vclipmax
;
199 unsigned int vclipzmin
;
200 unsigned int vclipzmax
;
206 unsigned int blendc1
;
207 unsigned int blendc2
;
211 unsigned int matchab
;
219 unsigned int auxclip0min
;
220 unsigned int auxclip0max
;
221 unsigned int auxclip1min
;
222 unsigned int auxclip1max
;
223 unsigned int auxclip2min
;
224 unsigned int auxclip2max
;
225 unsigned int auxclip3min
;
226 unsigned int auxclip3max
;
231 unsigned int fontinc
;
232 unsigned int area_pattern
[32];
234 unsigned int stencil
;
235 unsigned int stencilctl
;
248 #define FFB_MAX_CTXS 32
251 ffb1_prototype
= 0, /* Early pre-FCS FFB */
252 ffb1_standard
, /* First FCS FFB, 100Mhz UPA, 66MHz gclk */
253 ffb1_speedsort
, /* Second FCS FFB, 100Mhz UPA, 75MHz gclk */
254 ffb2_prototype
, /* Early pre-FCS vertical FFB2 */
255 ffb2_vertical
, /* First FCS FFB2/vertical, 100Mhz UPA, 100MHZ gclk,
256 75(SingleBuffer)/83(DoubleBuffer) MHz fclk */
257 ffb2_vertical_plus
, /* Second FCS FFB2/vertical, same timings */
258 ffb2_horizontal
, /* First FCS FFB2/horizontal, same timings as FFB2/vert */
259 ffb2_horizontal_plus
, /* Second FCS FFB2/horizontal, same timings */
260 afb_m3
, /* FCS Elite3D, 3 float chips */
261 afb_m6
/* FCS Elite3D, 6 float chips */
264 typedef struct ffb_dev_priv
{
265 /* Misc software state. */
267 enum ffb_chip_type ffb_type
;
269 struct miscdevice miscdev
;
271 /* Controller registers. */
275 struct ffb_hw_context
*hw_state
[FFB_MAX_CTXS
];
278 extern unsigned long ffb_get_unmapped_area(struct file
*filp
,
282 unsigned long flags
);
283 extern void ffb_set_context_ioctls(void);
284 extern drm_ioctl_desc_t
DRM(ioctls
)[];
286 extern int ffb_driver_context_switch(drm_device_t
*dev
, int old
, int new);