summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--meta/packages/xorg-xserver/xserver-kdrive-glamo/fbdev-not-fix.patch14
-rw-r--r--meta/packages/xorg-xserver/xserver-kdrive-glamo/fix-picturestr-include-order.patch15
-rw-r--r--meta/packages/xorg-xserver/xserver-kdrive-glamo/fix_default_mode.patch26
-rw-r--r--meta/packages/xorg-xserver/xserver-kdrive-glamo/gumstix-kmode.patch23
-rw-r--r--meta/packages/xorg-xserver/xserver-kdrive-glamo/kdrive-1.3-18bpp.patch419
-rw-r--r--meta/packages/xorg-xserver/xserver-kdrive-glamo/kmode-palm.patch34
-rw-r--r--meta/packages/xorg-xserver/xserver-kdrive-glamo/kmode.patch28
-rw-r--r--meta/packages/xorg-xserver/xserver-kdrive-glamo/w100-autofoo.patch54
-rw-r--r--meta/packages/xorg-xserver/xserver-kdrive-glamo/w100-fix-offscreen-bmp.patch15
-rw-r--r--meta/packages/xorg-xserver/xserver-kdrive-glamo/w100-new-input-world-order.patch28
-rw-r--r--meta/packages/xorg-xserver/xserver-kdrive-glamo/w100.patch6335
-rw-r--r--meta/packages/xorg-xserver/xserver-kdrive-glamo_1.3.0.0+git.bb64
12 files changed, 7055 insertions, 0 deletions
diff --git a/meta/packages/xorg-xserver/xserver-kdrive-glamo/fbdev-not-fix.patch b/meta/packages/xorg-xserver/xserver-kdrive-glamo/fbdev-not-fix.patch
new file mode 100644
index 0000000000..f87e7cc2cd
--- /dev/null
+++ b/meta/packages/xorg-xserver/xserver-kdrive-glamo/fbdev-not-fix.patch
@@ -0,0 +1,14 @@
1--- xserver/hw/kdrive/fbdev/fbdev.c~ 2004-09-15 00:08:10.000000000 +0100
2+++ xserver/hw/kdrive/fbdev/fbdev.c 2004-11-13 17:47:02.000000000 +0000
3@@ -198,6 +198,11 @@
4 return FALSE;
5 }
6
7+ /* Re-get the "fixed" parameters since they might have changed */
8+ k = ioctl (priv->fd, FBIOGET_FSCREENINFO, &priv->fix);
9+ if (k < 0)
10+ perror ("FBIOGET_FSCREENINFO");
11+
12 /* Now get the new screeninfo */
13 ioctl (priv->fd, FBIOGET_VSCREENINFO, &priv->var);
14 depth = priv->var.bits_per_pixel;
diff --git a/meta/packages/xorg-xserver/xserver-kdrive-glamo/fix-picturestr-include-order.patch b/meta/packages/xorg-xserver/xserver-kdrive-glamo/fix-picturestr-include-order.patch
new file mode 100644
index 0000000000..3da235e1e1
--- /dev/null
+++ b/meta/packages/xorg-xserver/xserver-kdrive-glamo/fix-picturestr-include-order.patch
@@ -0,0 +1,15 @@
1# Reverse include order in render/picturestr.h to be able to compile against renderproto >= 0.9.3
2Index: xorg-server-1.2.0/render/picturestr.h
3===================================================================
4--- xorg-server-1.2.0.orig/render/picturestr.h 2008-02-09 22:54:46.000000000 +0100
5+++ xorg-server-1.2.0/render/picturestr.h 2008-02-09 22:54:50.000000000 +0100
6@@ -26,8 +26,8 @@
7 #ifndef _PICTURESTR_H_
8 #define _PICTURESTR_H_
9
10-#include "glyphstr.h"
11 #include "scrnintstr.h"
12+#include "glyphstr.h"
13 #include "resource.h"
14
15 typedef struct _DirectFormat {
diff --git a/meta/packages/xorg-xserver/xserver-kdrive-glamo/fix_default_mode.patch b/meta/packages/xorg-xserver/xserver-kdrive-glamo/fix_default_mode.patch
new file mode 100644
index 0000000000..edc5146302
--- /dev/null
+++ b/meta/packages/xorg-xserver/xserver-kdrive-glamo/fix_default_mode.patch
@@ -0,0 +1,26 @@
1---
2 hw/kdrive/src/kmode.c | 4 ++--
3 1 file changed, 2 insertions(+), 2 deletions(-)
4
5Index: xorg-server-1.3.0.0/hw/kdrive/src/kmode.c
6===================================================================
7--- xorg-server-1.3.0.0.orig/hw/kdrive/src/kmode.c 2007-05-16 10:30:29.000000000 +0100
8+++ xorg-server-1.3.0.0/hw/kdrive/src/kmode.c 2007-05-16 10:31:08.000000000 +0100
9@@ -106,6 +106,8 @@ const KdMonitorTiming kdMonitorTimings[
10 16, 120, 176, KdSyncNegative, /* 37.861 */
11 1, 20, 24, KdSyncNegative, /* 72.809 */
12 },
13+ /* DEFAULT */
14+#define MONITOR_TIMING_DEFAULT 13
15 { 640, 480, 60, 25175, /* VESA */
16 16, 48, 160, KdSyncNegative, /* 31.469 */
17 10, 33, 45, KdSyncNegative, /* 59.940 */
18@@ -127,8 +129,6 @@ const KdMonitorTiming kdMonitorTimings[
19 16, 160, 256, KdSyncPositive, /* 46.875 */
20 1, 21, 25, KdSyncPositive, /* 75.000 */
21 },
22- /* DEFAULT */
23-#define MONITOR_TIMING_DEFAULT 9
24 { 800, 600, 72, 50000, /* VESA */
25 56, 64, 240, KdSyncPositive, /* 48.077 */
26 37, 23, 66, KdSyncPositive, /* 72.188 */
diff --git a/meta/packages/xorg-xserver/xserver-kdrive-glamo/gumstix-kmode.patch b/meta/packages/xorg-xserver/xserver-kdrive-glamo/gumstix-kmode.patch
new file mode 100644
index 0000000000..56817a7001
--- /dev/null
+++ b/meta/packages/xorg-xserver/xserver-kdrive-glamo/gumstix-kmode.patch
@@ -0,0 +1,23 @@
1--- /tmp/kmode.c 2007-10-07 11:49:52.000000000 +0200
2+++ xorg-server-1.3.0.0/hw/kdrive/src/kmode.c 2007-10-07 11:51:57.962045000 +0200
3@@ -119,7 +119,19 @@
4 0, 0, 0, KdSyncNegative, /* 59.940 */
5 },
6
7-
8+
9+/* gumstix console-vx */
10+ { 480, 272, 60, 0, /* VESA */
11+ 0, 0, 0, KdSyncNegative, /* 31.469 */
12+ 0, 0, 0, KdSyncNegative, /* 59.940 */
13+ },
14+
15+ { 272, 480, 60, 0, /* VESA */
16+ 0, 0, 0, KdSyncNegative, /* 31.469 */
17+ 0, 0, 0, KdSyncNegative, /* 59.940 */
18+ },
19+
20+
21 /* 800x600 modes */
22 { 800, 600, 85, 56250, /* VESA */
23 32, 152, 248, KdSyncPositive, /* 53.674 */
diff --git a/meta/packages/xorg-xserver/xserver-kdrive-glamo/kdrive-1.3-18bpp.patch b/meta/packages/xorg-xserver/xserver-kdrive-glamo/kdrive-1.3-18bpp.patch
new file mode 100644
index 0000000000..714536934c
--- /dev/null
+++ b/meta/packages/xorg-xserver/xserver-kdrive-glamo/kdrive-1.3-18bpp.patch
@@ -0,0 +1,419 @@
1diff -Nurd xorg-server-1.3.0.0/hw/kdrive/fbdev/fbdev.c xorg-server-1.3.0.0.patched/hw/kdrive/fbdev/fbdev.c
2--- xorg-server-1.3.0.0/hw/kdrive/fbdev/fbdev.c 2006-11-16 19:01:23.000000000 +0100
3+++ xorg-server-1.3.0.0.patched/hw/kdrive/fbdev/fbdev.c 2007-09-15 16:53:20.152045000 +0200
4@@ -213,6 +213,24 @@
5
6 /* Now get the new screeninfo */
7 ioctl (priv->fd, FBIOGET_VSCREENINFO, &priv->var);
8+ /* Special treatment of 18bpp */
9+ if ((priv->var.red.length == 6) && (priv->var.green.length == 6) &&
10+ (priv->var.blue.length == 6))
11+ {
12+ priv->var.red.length = 8;
13+ if (priv->var.red.offset != 0)
14+ priv->var.red.offset = 16;
15+ priv->var.green.length = 8;
16+ priv->var.green.offset = 8;
17+ priv->var.blue.length = 8;
18+ if (priv->var.blue.offset != 0)
19+ priv->var.blue.offset = 16;
20+ priv->var.bits_per_pixel = 32;
21+ priv->Have18Bpp = TRUE;
22+ }
23+ else
24+ priv->Have18Bpp = FALSE;
25+
26 depth = priv->var.bits_per_pixel;
27 gray = priv->var.grayscale;
28
29@@ -334,7 +352,7 @@
30 KdMouseMatrix m;
31 FbdevPriv *priv = screen->card->driver;
32
33- if (scrpriv->randr != RR_Rotate_0)
34+ if (scrpriv->randr != RR_Rotate_0 || priv->Have18Bpp)
35 scrpriv->shadow = TRUE;
36 else
37 scrpriv->shadow = FALSE;
38@@ -398,6 +416,354 @@
39 return TRUE;
40 }
41
42+void
43+shadowUpdatePacked18 (ScreenPtr pScreen,
44+ shadowBufPtr pBuf)
45+{
46+ RegionPtr damage = shadowDamage (pBuf);
47+ PixmapPtr pShadow = pBuf->pPixmap;
48+ int nbox = REGION_NUM_RECTS (damage);
49+ BoxPtr pbox = REGION_RECTS (damage);
50+ FbBits *shaBase, *shaLine, *sha;
51+ FbStride shaStride;
52+ int scrBase, scrLine, scr;
53+ int shaBpp;
54+ int shaXoff, shaYoff; /* XXX assumed to be zero */
55+ int x, y, w, h, width;
56+ int i;
57+ char *winBase = NULL, *win;
58+ CARD32 winSize;
59+
60+ fbGetDrawable (&pShadow->drawable, shaBase, shaStride, shaBpp, shaXoff, shaYoff);
61+ while (nbox--)
62+ {
63+ x = pbox->x1 * shaBpp;
64+ y = pbox->y1;
65+ w = (pbox->x2 - pbox->x1) * shaBpp;
66+ h = pbox->y2 - pbox->y1;
67+
68+ scrLine = (x >> FB_SHIFT);
69+ shaLine = shaBase + y * shaStride + (x >> FB_SHIFT);
70+
71+ x &= FB_MASK;
72+ w = (w + x + FB_MASK) >> FB_SHIFT;
73+
74+ while (h--)
75+ {
76+ winSize = 0;
77+ scrBase = 0;
78+ width = w;
79+ scr = scrLine;
80+ sha = shaLine;
81+ while (width) {
82+ /* how much remains in this window */
83+ i = scrBase + winSize - scr;
84+ if (i <= 0 || scr < scrBase)
85+ {
86+ winBase = (char *) (*pBuf->window) (pScreen,
87+ y,
88+ scr * 3,
89+ SHADOW_WINDOW_WRITE,
90+ &winSize,
91+ pBuf->closure);
92+ if(!winBase)
93+ return;
94+ scrBase = scr;
95+ winSize /= 3;
96+ i = winSize;
97+ }
98+ win = winBase + (scr - scrBase);
99+ if (i > width)
100+ i = width;
101+ width -= i;
102+ scr += i;
103+#define PickBit(a,i) (((a) >> (i)) & 1)
104+ while (i--)
105+ {
106+ FbBits bits = *sha++;
107+ *win++ = ((bits & 0xFC) >> 2) |
108+ ((bits & 0xC00) >> 4);
109+ *win++ = ((bits & 0xF000) >> 12) |
110+ ((bits & 0x3C0000) >> 14);
111+ *win++ = (bits & 0xC00000) >> 22;
112+ }
113+ }
114+ shaLine += shaStride;
115+ y++;
116+ }
117+ pbox++;
118+ }
119+}
120+
121+#define LEFT_TO_RIGHT 1
122+#define RIGHT_TO_LEFT -1
123+#define TOP_TO_BOTTOM 2
124+#define BOTTOM_TO_TOP -2
125+
126+void
127+shadowUpdateRotatePacked18 (ScreenPtr pScreen,
128+ shadowBufPtr pBuf)
129+{
130+ RegionPtr damage = shadowDamage (pBuf);
131+ PixmapPtr pShadow = pBuf->pPixmap;
132+ int nbox = REGION_NUM_RECTS (damage);
133+ BoxPtr pbox = REGION_RECTS (damage);
134+ FbBits *shaBits;
135+ FbStride shaStride;
136+ int shaBpp;
137+ int shaXoff, shaYoff;
138+ int box_x1, box_x2, box_y1, box_y2;
139+ int sha_x1 = 0, sha_y1 = 0;
140+ int scr_x1 = 0, scr_x2 = 0, scr_y1 = 0, scr_y2 = 0, scr_w, scr_h;
141+ int scr_x, scr_y;
142+ int w;
143+ int pixelsPerBits;
144+ int pixelsMask;
145+ FbStride shaStepOverY = 0, shaStepDownY = 0;
146+ FbStride shaStepOverX = 0, shaStepDownX = 0;
147+ FbBits *shaLine, *sha;
148+ int shaHeight = pShadow->drawable.height;
149+ int shaWidth = pShadow->drawable.width;
150+ FbBits shaMask;
151+ int shaFirstShift, shaShift;
152+ int o_x_dir;
153+ int o_y_dir;
154+ int x_dir;
155+ int y_dir;
156+
157+ fbGetDrawable (&pShadow->drawable, shaBits, shaStride, shaBpp, shaXoff, shaYoff);
158+ pixelsPerBits = (sizeof (FbBits) * 8) / shaBpp;
159+ pixelsMask = ~(pixelsPerBits - 1);
160+ shaMask = FbBitsMask (FB_UNIT-shaBpp, shaBpp);
161+ /*
162+ * Compute rotation related constants to walk the shadow
163+ */
164+ o_x_dir = LEFT_TO_RIGHT;
165+ o_y_dir = TOP_TO_BOTTOM;
166+ if (pBuf->randr & SHADOW_REFLECT_X)
167+ o_x_dir = -o_x_dir;
168+ if (pBuf->randr & SHADOW_REFLECT_Y)
169+ o_y_dir = -o_y_dir;
170+ switch (pBuf->randr & (SHADOW_ROTATE_ALL)) {
171+ case SHADOW_ROTATE_0: /* upper left shadow -> upper left screen */
172+ default:
173+ x_dir = o_x_dir;
174+ y_dir = o_y_dir;
175+ break;
176+ case SHADOW_ROTATE_90: /* upper right shadow -> upper left screen */
177+ x_dir = o_y_dir;
178+ y_dir = -o_x_dir;
179+ break;
180+ case SHADOW_ROTATE_180: /* lower right shadow -> upper left screen */
181+ x_dir = -o_x_dir;
182+ y_dir = -o_y_dir;
183+ break;
184+ case SHADOW_ROTATE_270: /* lower left shadow -> upper left screen */
185+ x_dir = -o_y_dir;
186+ y_dir = o_x_dir;
187+ break;
188+ }
189+ switch (x_dir) {
190+ case LEFT_TO_RIGHT:
191+ shaStepOverX = shaBpp;
192+ shaStepOverY = 0;
193+ break;
194+ case TOP_TO_BOTTOM:
195+ shaStepOverX = 0;
196+ shaStepOverY = shaStride;
197+ break;
198+ case RIGHT_TO_LEFT:
199+ shaStepOverX = -shaBpp;
200+ shaStepOverY = 0;
201+ break;
202+ case BOTTOM_TO_TOP:
203+ shaStepOverX = 0;
204+ shaStepOverY = -shaStride;
205+ break;
206+ }
207+ switch (y_dir) {
208+ case TOP_TO_BOTTOM:
209+ shaStepDownX = 0;
210+ shaStepDownY = shaStride;
211+ break;
212+ case RIGHT_TO_LEFT:
213+ shaStepDownX = -shaBpp;
214+ shaStepDownY = 0;
215+ break;
216+ case BOTTOM_TO_TOP:
217+ shaStepDownX = 0;
218+ shaStepDownY = -shaStride;
219+ break;
220+ case LEFT_TO_RIGHT:
221+ shaStepDownX = shaBpp;
222+ shaStepDownY = 0;
223+ break;
224+ }
225+
226+ while (nbox--)
227+ {
228+ box_x1 = pbox->x1;
229+ box_y1 = pbox->y1;
230+ box_x2 = pbox->x2;
231+ box_y2 = pbox->y2;
232+ pbox++;
233+
234+ /*
235+ * Compute screen and shadow locations for this box
236+ */
237+ switch (x_dir) {
238+ case LEFT_TO_RIGHT:
239+ scr_x1 = box_x1 & pixelsMask;
240+ scr_x2 = (box_x2 + pixelsPerBits - 1) & pixelsMask;
241+
242+ sha_x1 = scr_x1;
243+ break;
244+ case TOP_TO_BOTTOM:
245+ scr_x1 = box_y1 & pixelsMask;
246+ scr_x2 = (box_y2 + pixelsPerBits - 1) & pixelsMask;
247+
248+ sha_y1 = scr_x1;
249+ break;
250+ case RIGHT_TO_LEFT:
251+ scr_x1 = (shaWidth - box_x2) & pixelsMask;
252+ scr_x2 = (shaWidth - box_x1 + pixelsPerBits - 1) & pixelsMask;
253+
254+ sha_x1 = (shaWidth - scr_x1 - 1);
255+ break;
256+ case BOTTOM_TO_TOP:
257+ scr_x1 = (shaHeight - box_y2) & pixelsMask;
258+ scr_x2 = (shaHeight - box_y1 + pixelsPerBits - 1) & pixelsMask;
259+
260+ sha_y1 = (shaHeight - scr_x1 - 1);
261+ break;
262+ }
263+ switch (y_dir) {
264+ case TOP_TO_BOTTOM:
265+ scr_y1 = box_y1;
266+ scr_y2 = box_y2;
267+
268+ sha_y1 = scr_y1;
269+ break;
270+ case RIGHT_TO_LEFT:
271+ scr_y1 = (shaWidth - box_x2);
272+ scr_y2 = (shaWidth - box_x1);
273+
274+ sha_x1 = box_x2 - 1;
275+ break;
276+ case BOTTOM_TO_TOP:
277+ scr_y1 = shaHeight - box_y2;
278+ scr_y2 = shaHeight - box_y1;
279+
280+ sha_y1 = box_y2 - 1;
281+ break;
282+ case LEFT_TO_RIGHT:
283+ scr_y1 = box_x1;
284+ scr_y2 = box_x2;
285+
286+ sha_x1 = box_x1;
287+ break;
288+ }
289+ scr_w = ((scr_x2 - scr_x1) * shaBpp) >> FB_SHIFT;
290+ scr_h = scr_y2 - scr_y1;
291+ scr_y = scr_y1;
292+
293+ /* shift amount for first pixel on screen */
294+ shaFirstShift = FB_UNIT - ((sha_x1 * shaBpp) & FB_MASK) - shaBpp;
295+
296+ /* pointer to shadow data first placed on screen */
297+ shaLine = (shaBits +
298+ sha_y1 * shaStride +
299+ ((sha_x1 * shaBpp) >> FB_SHIFT));
300+
301+ /*
302+ * Copy the bits, always write across the physical frame buffer
303+ * to take advantage of write combining.
304+ */
305+ while (scr_h--)
306+ {
307+ int p;
308+ FbBits bits;
309+ char *win;
310+ int i;
311+ CARD32 winSize;
312+
313+ sha = shaLine;
314+ shaShift = shaFirstShift;
315+ w = scr_w;
316+ scr_x = scr_x1 * shaBpp >> FB_SHIFT;
317+
318+ while (w)
319+ {
320+ /*
321+ * Map some of this line
322+ */
323+ win = (char *) (*pBuf->window) (pScreen,
324+ scr_y,
325+ scr_x * 3,
326+ SHADOW_WINDOW_WRITE,
327+ &winSize,
328+ pBuf->closure);
329+ i = winSize / 3;
330+ if (i > w)
331+ i = w;
332+ w -= i;
333+ scr_x += i;
334+ /*
335+ * Copy the portion of the line mapped
336+ */
337+ while (i--)
338+ {
339+ bits = 0;
340+ p = pixelsPerBits;
341+ /*
342+ * Build one word of output from multiple inputs
343+ *
344+ * Note that for 90/270 rotations, this will walk
345+ * down the shadow hitting each scanline once.
346+ * This is probably not very efficient.
347+ */
348+ while (p--)
349+ {
350+ bits = FbScrLeft(bits, shaBpp);
351+ bits |= FbScrRight (*sha, shaShift) & shaMask;
352+
353+ shaShift -= shaStepOverX;
354+ if (shaShift >= FB_UNIT)
355+ {
356+ shaShift -= FB_UNIT;
357+ sha--;
358+ }
359+ else if (shaShift < 0)
360+ {
361+ shaShift += FB_UNIT;
362+ sha++;
363+ }
364+ sha += shaStepOverY;
365+ }
366+ *win++ = ((bits & 0xFC) >> 2) |
367+ ((bits & 0xC00) >> 4);
368+ *win++ = ((bits & 0xF000) >> 12) |
369+ ((bits & 0x3C0000) >> 14);
370+ *win++ = (bits & 0xC00000) >> 22;
371+ }
372+ }
373+ scr_y++;
374+ shaFirstShift -= shaStepDownX;
375+ if (shaFirstShift >= FB_UNIT)
376+ {
377+ shaFirstShift -= FB_UNIT;
378+ shaLine--;
379+ }
380+ else if (shaFirstShift < 0)
381+ {
382+ shaFirstShift += FB_UNIT;
383+ shaLine++;
384+ }
385+ shaLine += shaStepDownY;
386+ }
387+ }
388+}
389+
390 Bool
391 fbdevSetShadow (ScreenPtr pScreen)
392 {
393@@ -418,7 +784,14 @@
394
395 window = fbdevWindowLinear;
396 update = 0;
397- if (scrpriv->randr)
398+ if (priv->Have18Bpp)
399+ {
400+ if (scrpriv->randr != RR_Rotate_0)
401+ update = shadowUpdateRotatePacked18;
402+ else
403+ update = shadowUpdatePacked18;
404+ }
405+ else if (scrpriv->randr)
406 if (priv->var.bits_per_pixel == 16) {
407 switch (scrpriv->randr) {
408 case RR_Rotate_90:
409diff -Nurd xorg-server-1.3.0.0/hw/kdrive/fbdev/fbdev.h xorg-server-1.3.0.0.patched/hw/kdrive/fbdev/fbdev.h
410--- xorg-server-1.3.0.0/hw/kdrive/fbdev/fbdev.h 2006-09-18 08:04:17.000000000 +0200
411+++ xorg-server-1.3.0.0.patched/hw/kdrive/fbdev/fbdev.h 2007-09-15 16:45:07.362045000 +0200
412@@ -44,6 +44,7 @@
413 int fd;
414 char *fb;
415 char *fb_base;
416+ Bool Have18Bpp;
417 } FbdevPriv;
418
419 typedef struct _fbdevScrPriv {
diff --git a/meta/packages/xorg-xserver/xserver-kdrive-glamo/kmode-palm.patch b/meta/packages/xorg-xserver/xserver-kdrive-glamo/kmode-palm.patch
new file mode 100644
index 0000000000..255e707b55
--- /dev/null
+++ b/meta/packages/xorg-xserver/xserver-kdrive-glamo/kmode-palm.patch
@@ -0,0 +1,34 @@
1--- kmode.c 2006-05-03 19:48:42.000000000 +0200
2+++ xserver/hw/kdrive/src/kmode.c 2006-05-03 19:50:43.000000000 +0200
3@@ -32,6 +32,31 @@
4 /* H V Hz KHz */
5 /* FP BP BLANK POLARITY */
6
7+ /* Treo 650 */
8+
9+ { 320, 320, 64, 16256,
10+ 17, 12, 32, KdSyncNegative,
11+ 1, 11, 14, KdSyncNegative,
12+ },
13+
14+ { 320, 320, 64, 0,
15+ 0, 0, 0, KdSyncNegative,
16+ 0, 0, 0, KdSyncNegative,
17+ },
18+
19+ /* LifeDrive/T3/TX modes */
20+
21+ { 320, 480, 64, 16256,
22+ 17, 12, 32, KdSyncNegative,
23+ 1, 11, 14, KdSyncNegative,
24+ },
25+
26+ { 480, 320, 64, 0,
27+ 0, 0, 0, KdSyncNegative,
28+ 0, 0, 0, KdSyncNegative,
29+ },
30+
31+
32 /* IPAQ modeline:
33 *
34 * Modeline "320x240" 5.7222 320 337 340 352 240 241 244 254"
diff --git a/meta/packages/xorg-xserver/xserver-kdrive-glamo/kmode.patch b/meta/packages/xorg-xserver/xserver-kdrive-glamo/kmode.patch
new file mode 100644
index 0000000000..5ad3e4e277
--- /dev/null
+++ b/meta/packages/xorg-xserver/xserver-kdrive-glamo/kmode.patch
@@ -0,0 +1,28 @@
1--- /tmp/kmode.c 2005-06-27 14:46:19.716843288 +0200
2+++ xserver/hw/kdrive/src/kmode.c 2005-06-27 14:46:30.070269328 +0200
3@@ -41,6 +41,11 @@
4 1, 11, 14, KdSyncNegative,
5 },
6
7+ { 240, 320, 64, 0,
8+ 0, 0, 0, KdSyncNegative,
9+ 0, 0, 0, KdSyncNegative,
10+ },
11+
12 /* Other VESA modes */
13 { 640, 350, 85, 31500, /* VESA */
14 32, 96, 192, KdSyncPositive, /* 26.413 */
15@@ -80,6 +85,13 @@
16 16, 48, 160, KdSyncNegative, /* 31.469 */
17 10, 33, 45, KdSyncNegative, /* 59.940 */
18 },
19+
20+
21+ { 480, 640, 60, 0, /* VESA */
22+ 0, 0, 0, KdSyncNegative, /* 31.469 */
23+ 0, 0, 0, KdSyncNegative, /* 59.940 */
24+ },
25+
26
27 /* 800x600 modes */
28 { 800, 600, 85, 56250, /* VESA */
diff --git a/meta/packages/xorg-xserver/xserver-kdrive-glamo/w100-autofoo.patch b/meta/packages/xorg-xserver/xserver-kdrive-glamo/w100-autofoo.patch
new file mode 100644
index 0000000000..b53e327dae
--- /dev/null
+++ b/meta/packages/xorg-xserver/xserver-kdrive-glamo/w100-autofoo.patch
@@ -0,0 +1,54 @@
1Index: git/hw/kdrive/Makefile.am
2===================================================================
3--- git.orig/hw/kdrive/Makefile.am 2006-09-02 12:12:13.000000000 +0200
4+++ git/hw/kdrive/Makefile.am 2006-09-02 12:12:14.000000000 +0200
5@@ -7,6 +7,10 @@
6 FBDEV_SUBDIRS = fbdev epson
7 endif
8
9+if KDRIVEW100
10+W100_SUBDIRS = w100
11+endif
12+
13 if XSDLSERVER
14 XSDL_SUBDIRS = sdl
15 endif
16@@ -20,6 +24,7 @@
17 linux \
18 $(XSDL_SUBDIRS) \
19 $(FBDEV_SUBDIRS) \
20+ $(W100_SUBDIRS) \
21 $(VESA_SUBDIRS) \
22 $(XEPHYR_SUBDIRS) \
23 fake
24Index: git/configure.ac
25===================================================================
26--- git.orig/configure.ac 2006-09-02 12:12:14.000000000 +0200
27+++ git/configure.ac 2006-09-02 12:12:14.000000000 +0200
28@@ -442,6 +442,7 @@
29 AC_ARG_ENABLE(kdrive, AS_HELP_STRING([--enable-kdrive], [Build kdrive servers (default: no)]), [KDRIVE=$enableval], [KDRIVE=no])
30 AC_ARG_ENABLE(xephyr, AS_HELP_STRING([--enable-xephyr], [Build the kdrive Xephyr server (default: auto)]), [XEPHYR=$enableval], [XEPHYR=auto])
31 AC_ARG_ENABLE(xsdl, AS_HELP_STRING([--enable-xsdl], [Build the kdrive Xsdl server (default: auto)]), [XSDL=$enableval], [XSDL=auto])
32+AC_ARG_ENABLE(w100, AS_HELP_STRING([--enable-w100], [Build the kdrive Xw100 server (default: no)]), [KDRIVEW100=$enableval], [KDRIVEW100=no])
33 dnl xprint
34 AC_ARG_ENABLE(freetype, AS_HELP_STRING([ --enable-freetype], [Build Xprint FreeType backend (default: yes)]), [XP_USE_FREETYPE=$enableval],[XP_USE_FREETYPE=no])
35 AC_ARG_WITH(freetype-config, AS_HELP_STRING([ --with-freetype-config=PROG], [Use FreeType configuration program PROG (default: auto)]), freetype_config=$withval, freetype_config=auto)
36@@ -1519,6 +1520,10 @@
37 AC_SUBST([XSDL_LIBS])
38 AC_SUBST([XSDL_INCS])
39
40+AM_CONDITIONAL(KDRIVEW100, [test "x$KDRIVEW100" = xyes])
41+if test "x$KDRIVEW100" = xyes; then
42+ AC_DEFINE(KDRIVEW100, 1, [Build Xw100 server])
43+fi
44
45 dnl these only go in xkb-config.h (which is shared by the Xorg and Xnest servers)
46 AC_DEFINE(__XKBDEFRULES__, "xorg", [Default XKB rules])
47@@ -1753,6 +1758,7 @@
48 hw/kdrive/epson/Makefile
49 hw/kdrive/fake/Makefile
50 hw/kdrive/fbdev/Makefile
51+hw/kdrive/w100/Makefile
52 hw/kdrive/i810/Makefile
53 hw/kdrive/linux/Makefile
54 hw/kdrive/mach64/Makefile
diff --git a/meta/packages/xorg-xserver/xserver-kdrive-glamo/w100-fix-offscreen-bmp.patch b/meta/packages/xorg-xserver/xserver-kdrive-glamo/w100-fix-offscreen-bmp.patch
new file mode 100644
index 0000000000..39bc22c6b3
--- /dev/null
+++ b/meta/packages/xorg-xserver/xserver-kdrive-glamo/w100-fix-offscreen-bmp.patch
@@ -0,0 +1,15 @@
1Patch suggested by Manuel Teira to actually enable offscreen pixmap
2acceleration in Xw100. Value 16 is empirical, works well on hx4700,
3but in case of issues, consider double it (other accelerated drivers
4use bigger values than 16).
5
6--- xorg-server-1.2.0/hw/kdrive/w100/ati_draw.c.org 2007-04-04 10:28:57.000000000 +0000
7+++ xorg-server-1.2.0/hw/kdrive/w100/ati_draw.c 2007-04-06 14:43:40.000000000 +0000
8@@ -433,6 +433,7 @@
9 * or kaaPixmapUseScreen. But this is probably caused by some bug in this
10 * driver... */
11 atis->kaa.flags |= KAA_OFFSCREEN_PIXMAPS;
12+ atis->kaa.pitchAlign = 16;
13 if (!kaaDrawInit(pScreen, &atis->kaa))
14 return FALSE;
15
diff --git a/meta/packages/xorg-xserver/xserver-kdrive-glamo/w100-new-input-world-order.patch b/meta/packages/xorg-xserver/xserver-kdrive-glamo/w100-new-input-world-order.patch
new file mode 100644
index 0000000000..239ae0bb67
--- /dev/null
+++ b/meta/packages/xorg-xserver/xserver-kdrive-glamo/w100-new-input-world-order.patch
@@ -0,0 +1,28 @@
1Index: xorg-server-1.4/hw/kdrive/w100/ati_stub.c
2===================================================================
3--- xorg-server-1.4.orig/hw/kdrive/w100/ati_stub.c 2007-09-08 21:40:26.000000000 +0200
4+++ xorg-server-1.4/hw/kdrive/w100/ati_stub.c 2007-09-08 22:04:27.000000000 +0200
5@@ -74,10 +74,20 @@
6 void
7 InitInput(int argc, char **argv)
8 {
9- KdInitInput(&LinuxMouseFuncs, &LinuxKeyboardFuncs);
10-#ifdef TOUCHSCREEN
11- KdAddMouseDriver(&TsFuncs);
12+ KdKeyboardInfo *ki;
13+
14+ KdAddKeyboardDriver (&LinuxKeyboardDriver);
15+ KdAddPointerDriver (&LinuxMouseDriver);
16+ KdAddKeyboardDriver (&LinuxEvdevKeyboardDriver);
17+ KdAddPointerDriver (&LinuxEvdevMouseDriver);
18+#ifdef TSLIB
19+ KdAddPointerDriver (&TsDriver);
20 #endif
21+
22+ ki = KdParseKeyboard ("keyboard");
23+ KdAddKeyboard(ki);
24+
25+ KdInitInput ();
26 }
27
28 void
diff --git a/meta/packages/xorg-xserver/xserver-kdrive-glamo/w100.patch b/meta/packages/xorg-xserver/xserver-kdrive-glamo/w100.patch
new file mode 100644
index 0000000000..1bb6f357c6
--- /dev/null
+++ b/meta/packages/xorg-xserver/xserver-kdrive-glamo/w100.patch
@@ -0,0 +1,6335 @@
1Index: git/hw/kdrive/w100/ati.c
2===================================================================
3--- /dev/null 1970-01-01 00:00:00.000000000 +0000
4+++ git/hw/kdrive/w100/ati.c 2006-09-02 12:12:14.000000000 +0200
5@@ -0,0 +1,434 @@
6+/*
7+ * Copyright © 2006 Alberto Mardegan <mardy@users.sourceforge.net>
8+ *
9+ * Permission to use, copy, modify, distribute, and sell this software and its
10+ * documentation for any purpose is hereby granted without fee, provided that
11+ * the above copyright notice appear in all copies and that both that
12+ * copyright notice and this permission notice appear in supporting
13+ * documentation, and that the name of Alberto Mardegan not be used in
14+ * advertising or publicity pertaining to distribution of the software without
15+ * specific, written prior permission. Alberto Mardegan makes no
16+ * representations about the suitability of this software for any purpose. It
17+ * is provided "as is" without express or implied warranty.
18+ *
19+ * ALBERTO MARDEGAN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
20+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
21+ * EVENT SHALL ALBERTO MARDEGAN BE LIABLE FOR ANY SPECIAL, INDIRECT OR
22+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
23+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
24+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
25+ * PERFORMANCE OF THIS SOFTWARE.
26+ */
27+
28+#ifdef HAVE_CONFIG_H
29+#include <kdrive-config.h>
30+#endif
31+#include "ati.h"
32+#include "w100_regs.h"
33+
34+
35+struct pci_id_entry ati_pci_ids[] = {
36+ {0x1002, 0x5644, 0, "ATI Imageon 3200"},
37+ {0x1002, 0x5741, 0, "ATI Imageon 100"},
38+ {0x1002, 0x5744, 0, "ATI Imageon 3220"},
39+ {0, 0, 0, NULL}
40+};
41+
42+
43+static Bool
44+ATICardInit(KdCardInfo * card)
45+{
46+ ATICardInfo *atic;
47+ int i;
48+ Bool initialized = FALSE;
49+
50+ atic = xcalloc(sizeof(ATICardInfo), 1);
51+ if (atic == NULL)
52+ return FALSE;
53+
54+#ifdef KDRIVEFBDEV
55+ if (!initialized && fbdevInitialize(card, &atic->backend_priv.fbdev)) {
56+ atic->use_fbdev = TRUE;
57+ initialized = TRUE;
58+ atic->backend_funcs.cardfini = fbdevCardFini;
59+ atic->backend_funcs.scrfini = fbdevScreenFini;
60+ atic->backend_funcs.initScreen = fbdevInitScreen;
61+ atic->backend_funcs.finishInitScreen = fbdevFinishInitScreen;
62+ atic->backend_funcs.createRes = fbdevCreateResources;
63+ atic->backend_funcs.preserve = fbdevPreserve;
64+ atic->backend_funcs.restore = fbdevRestore;
65+ atic->backend_funcs.dpms = fbdevDPMS;
66+ atic->backend_funcs.enable = fbdevEnable;
67+ atic->backend_funcs.disable = fbdevDisable;
68+ atic->backend_funcs.getColors = fbdevGetColors;
69+ atic->backend_funcs.putColors = fbdevPutColors;
70+#ifdef RANDR
71+ atic->backend_funcs.randrSetConfig = fbdevRandRSetConfig;
72+#endif
73+ }
74+#endif
75+#ifdef KDRIVEVESA
76+ if (!initialized && vesaInitialize(card, &atic->backend_priv.vesa)) {
77+ atic->use_vesa = TRUE;
78+ initialized = TRUE;
79+ atic->backend_funcs.cardfini = vesaCardFini;
80+ atic->backend_funcs.scrfini = vesaScreenFini;
81+ atic->backend_funcs.initScreen = vesaInitScreen;
82+ atic->backend_funcs.finishInitScreen = vesaFinishInitScreen;
83+ atic->backend_funcs.createRes = vesaCreateResources;
84+ atic->backend_funcs.preserve = vesaPreserve;
85+ atic->backend_funcs.restore = vesaRestore;
86+ atic->backend_funcs.dpms = vesaDPMS;
87+ atic->backend_funcs.enable = vesaEnable;
88+ atic->backend_funcs.disable = vesaDisable;
89+ atic->backend_funcs.getColors = vesaGetColors;
90+ atic->backend_funcs.putColors = vesaPutColors;
91+#ifdef RANDR
92+ atic->backend_funcs.randrSetConfig = vesaRandRSetConfig;
93+#endif
94+ }
95+#endif
96+
97+ if (!initialized || !ATIMap(card, atic)) {
98+ xfree(atic);
99+ return FALSE;
100+ }
101+
102+ card->driver = atic;
103+
104+ for (i = 0; ati_pci_ids[i].name != NULL; i++) {
105+ if (ati_pci_ids[i].device == card->attr.deviceID) {
106+ atic->pci_id = &ati_pci_ids[i];
107+ break;
108+ }
109+ }
110+
111+ ErrorF("Using ATI card: %s\n", atic->pci_id->name);
112+
113+ return TRUE;
114+}
115+
116+static void
117+ATICardFini(KdCardInfo * card)
118+{
119+ ATICardInfo *atic = (ATICardInfo *) card->driver;
120+
121+ ATIUnmap(card, atic);
122+ atic->backend_funcs.cardfini(card);
123+}
124+
125+/*
126+ * Once screen->off_screen_base is set, this function
127+ * allocates the remaining memory appropriately
128+ */
129+
130+static void
131+ATISetOffscreen(KdScreenInfo * screen)
132+{
133+ ATICardInfo(screen);
134+ int screen_size;
135+ char *mmio = atic->reg_base;
136+
137+ /* check (and adjust) pitch */
138+ if (mmio) {
139+ int byteStride = screen->fb[0].byteStride;
140+ int bitStride;
141+ int pixelStride;
142+ int bpp = screen->fb[0].bitsPerPixel;
143+
144+ /*
145+ * Ensure frame buffer is correctly aligned
146+ */
147+ if (byteStride & 0x3f) {
148+ byteStride = (byteStride + 0x3f) & ~0x3f;
149+ bitStride = byteStride * 8;
150+ pixelStride = bitStride / bpp;
151+
152+ screen->fb[0].byteStride = byteStride;
153+ screen->fb[0].pixelStride = pixelStride;
154+ }
155+ }
156+
157+ screen_size = screen->fb[0].byteStride * screen->height;
158+
159+ screen->off_screen_base = screen_size;
160+
161+}
162+
163+static Bool
164+ATIScreenInit(KdScreenInfo * screen)
165+{
166+ ATIScreenInfo *atis;
167+ ATICardInfo(screen);
168+ Bool success = FALSE;
169+
170+ atis = xcalloc(sizeof(ATIScreenInfo), 1);
171+ if (atis == NULL)
172+ return FALSE;
173+
174+ atis->atic = atic;
175+ atis->screen = screen;
176+ screen->driver = atis;
177+
178+ if (screen->fb[0].depth == 0)
179+ screen->fb[0].depth = 16;
180+#ifdef KDRIVEFBDEV
181+ if (atic->use_fbdev) {
182+ success = fbdevScreenInitialize(screen, &atis->backend_priv.fbdev);
183+ }
184+#endif
185+#ifdef KDRIVEVESA
186+ if (atic->use_vesa) {
187+ success = vesaScreenInitialize(screen, &atis->backend_priv.vesa);
188+ }
189+#endif
190+
191+ if (!success) {
192+ screen->driver = NULL;
193+ xfree(atis);
194+ return FALSE;
195+ }
196+
197+ ErrorF
198+ ("Offscreen memory at offset %08x, memory base %08x, size %08x\n",
199+ screen->off_screen_base, screen->memory_base,
200+ screen->memory_size);
201+ ATISetOffscreen(screen);
202+
203+ return TRUE;
204+}
205+
206+#ifdef RANDR
207+static Bool
208+ATIRandRSetConfig(ScreenPtr pScreen,
209+ Rotation randr, int rate, RRScreenSizePtr pSize)
210+{
211+ KdScreenPriv(pScreen);
212+ KdScreenInfo *screen = pScreenPriv->screen;
213+ ATICardInfo *atic = screen->card->driver;
214+ Bool ret;
215+
216+ ATIDrawDisable(pScreen);
217+ ret = atic->backend_funcs.randrSetConfig(pScreen, randr, rate, pSize);
218+ ATISetOffscreen(screen);
219+ /*
220+ * Set frame buffer mapping
221+ */
222+ (*pScreen->ModifyPixmapHeader) (fbGetScreenPixmap(pScreen),
223+ pScreen->width,
224+ pScreen->height,
225+ screen->fb[0].depth,
226+ screen->fb[0].bitsPerPixel,
227+ screen->fb[0].byteStride,
228+ screen->fb[0].frameBuffer);
229+
230+ ATIDrawEnable(pScreen);
231+ return ret;
232+}
233+
234+static Bool
235+ATIRandRInit(ScreenPtr pScreen)
236+{
237+ rrScrPrivPtr pScrPriv;
238+
239+ pScrPriv = rrGetScrPriv(pScreen);
240+ pScrPriv->rrSetConfig = ATIRandRSetConfig;
241+ return TRUE;
242+}
243+#endif
244+
245+static void
246+ATIScreenFini(KdScreenInfo * screen)
247+{
248+ ATIScreenInfo *atis = (ATIScreenInfo *) screen->driver;
249+ ATICardInfo *atic = screen->card->driver;
250+
251+ atic->backend_funcs.scrfini(screen);
252+ xfree(atis);
253+ screen->driver = 0;
254+}
255+
256+Bool
257+ATIMap(KdCardInfo * card, ATICardInfo * atic)
258+{
259+ atic->mem_base = (CARD8 *) KdMapDevice(ATI_MEM_BASE(card),
260+ ATI_MEM_SIZE(card));
261+
262+ if (atic->mem_base == NULL)
263+ return FALSE;
264+ atic->reg_base = atic->mem_base + 0x10000; /* XXX */
265+
266+ KdSetMappedMode(ATI_MEM_BASE(card), ATI_MEM_SIZE(card),
267+ KD_MAPPED_MODE_REGISTERS);
268+
269+ return TRUE;
270+}
271+
272+void
273+ATIUnmap(KdCardInfo * card, ATICardInfo * atic)
274+{
275+ if (atic->reg_base) {
276+ KdResetMappedMode(ATI_REG_BASE(card), ATI_REG_SIZE(card),
277+ KD_MAPPED_MODE_REGISTERS);
278+ KdUnmapDevice((void *) atic->reg_base, ATI_REG_SIZE(card));
279+ atic->reg_base = 0;
280+ }
281+}
282+
283+static Bool
284+ATIInitScreen(ScreenPtr pScreen)
285+{
286+ KdScreenPriv(pScreen);
287+ ATICardInfo(pScreenPriv);
288+
289+ return atic->backend_funcs.initScreen(pScreen);
290+}
291+
292+static Bool
293+ATIFinishInitScreen(ScreenPtr pScreen)
294+{
295+ KdScreenPriv(pScreen);
296+ ATICardInfo(pScreenPriv);
297+
298+ if (!atic->backend_funcs.finishInitScreen(pScreen))
299+ return FALSE;
300+#ifdef RANDR
301+ if (!ATIRandRInit(pScreen))
302+ return FALSE;
303+#endif
304+ return TRUE;
305+}
306+
307+static Bool
308+ATICreateResources(ScreenPtr pScreen)
309+{
310+ KdScreenPriv(pScreen);
311+ ATICardInfo(pScreenPriv);
312+
313+ return atic->backend_funcs.createRes(pScreen);
314+}
315+
316+static void
317+ATIPreserve(KdCardInfo * card)
318+{
319+ ATICardInfo *atic = card->driver;
320+
321+ atic->backend_funcs.preserve(card);
322+}
323+
324+static void
325+ATIRestore(KdCardInfo * card)
326+{
327+ ATICardInfo *atic = card->driver;
328+
329+ ATIUnmap(card, atic);
330+
331+ atic->backend_funcs.restore(card);
332+}
333+
334+static Bool
335+ATIDPMS(ScreenPtr pScreen, int mode)
336+{
337+ KdScreenPriv(pScreen);
338+ ATICardInfo(pScreenPriv);
339+
340+ return atic->backend_funcs.dpms(pScreen, mode);
341+}
342+
343+static Bool
344+ATIEnable(ScreenPtr pScreen)
345+{
346+ KdScreenPriv(pScreen);
347+ ATICardInfo(pScreenPriv);
348+ mc_ext_mem_location_u eml;
349+ char *mmio;
350+
351+ if (!atic->backend_funcs.enable(pScreen))
352+ return FALSE;
353+
354+ if ((atic->reg_base == NULL)
355+ && !ATIMap(pScreenPriv->screen->card, atic))
356+ return FALSE;
357+
358+ mmio = atic->reg_base;
359+ eml.val = MMIO_IN32(mmio, mmMC_EXT_MEM_LOCATION);
360+ atic->ext_mem_location = eml.f.mc_ext_mem_start << 8;
361+ ATISetOffscreen(pScreenPriv->screen);
362+
363+ return TRUE;
364+}
365+
366+static void
367+ATIDisable(ScreenPtr pScreen)
368+{
369+ KdScreenPriv(pScreen);
370+ ATICardInfo(pScreenPriv);
371+
372+ ATIUnmap(pScreenPriv->card, atic);
373+
374+ atic->backend_funcs.disable(pScreen);
375+}
376+
377+static void
378+ATIGetColors(ScreenPtr pScreen, int fb, int n, xColorItem * pdefs)
379+{
380+ KdScreenPriv(pScreen);
381+ ATICardInfo(pScreenPriv);
382+
383+ atic->backend_funcs.getColors(pScreen, fb, n, pdefs);
384+}
385+
386+static void
387+ATIPutColors(ScreenPtr pScreen, int fb, int n, xColorItem * pdefs)
388+{
389+ KdScreenPriv(pScreen);
390+ ATICardInfo(pScreenPriv);
391+
392+ atic->backend_funcs.putColors(pScreen, fb, n, pdefs);
393+}
394+
395+/* Compute log base 2 of val. */
396+int
397+ATILog2(int val)
398+{
399+ int bits;
400+
401+ for (bits = 0; val != 0; val >>= 1, ++bits);
402+ return bits - 1;
403+}
404+
405+
406+
407+KdCardFuncs ATIFuncs = {
408+ ATICardInit, /* cardinit */
409+ ATIScreenInit, /* scrinit */
410+ ATIInitScreen, /* initScreen */
411+ ATIFinishInitScreen, /* finishInitScreen */
412+ ATICreateResources, /* createRes */
413+ ATIPreserve, /* preserve */
414+ ATIEnable, /* enable */
415+ ATIDPMS, /* dpms */
416+ ATIDisable, /* disable */
417+ ATIRestore, /* restore */
418+ ATIScreenFini, /* scrfini */
419+ ATICardFini, /* cardfini */
420+
421+#define ATICursorInit 0
422+#define ATICursorEnable 0
423+#define ATICursorDisable 0
424+#define ATICursorFini 0
425+#define ATIRecolorCursor 0
426+ ATICursorInit, /* initCursor */
427+ ATICursorEnable, /* enableCursor */
428+ ATICursorDisable, /* disableCursor */
429+ ATICursorFini, /* finiCursor */
430+ ATIRecolorCursor, /* recolorCursor */
431+
432+ ATIDrawInit, /* initAccel */
433+ ATIDrawEnable, /* enableAccel */
434+ ATIDrawDisable, /* disableAccel */
435+ ATIDrawFini, /* finiAccel */
436+
437+ ATIGetColors, /* getColors */
438+ ATIPutColors, /* putColors */
439+};
440Index: git/hw/kdrive/w100/ati_cursor.c
441===================================================================
442--- /dev/null 1970-01-01 00:00:00.000000000 +0000
443+++ git/hw/kdrive/w100/ati_cursor.c 2006-09-02 12:12:14.000000000 +0200
444@@ -0,0 +1,93 @@
445+/*
446+ * Copyright © 2006 Alberto Mardegan <mardy@users.sourceforge.net>
447+ *
448+ * Permission to use, copy, modify, distribute, and sell this software and its
449+ * documentation for any purpose is hereby granted without fee, provided that
450+ * the above copyright notice appear in all copies and that both that
451+ * copyright notice and this permission notice appear in supporting
452+ * documentation, and that the name of Alberto Mardegan not be used in
453+ * advertising or publicity pertaining to distribution of the software without
454+ * specific, written prior permission. Alberto Mardegan makes no
455+ * representations about the suitability of this software for any purpose. It
456+ * is provided "as is" without express or implied warranty.
457+ *
458+ * ALBERTO MARDEGAN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
459+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
460+ * EVENT SHALL ALBERTO MARDEGAN BE LIABLE FOR ANY SPECIAL, INDIRECT OR
461+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
462+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
463+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
464+ * PERFORMANCE OF THIS SOFTWARE.
465+ */
466+
467+#ifdef HAVE_CONFIG_H
468+#include <kdrive-config.h>
469+#endif
470+#include "ati.h"
471+#include "cursorstr.h"
472+#include "ati_draw.h"
473+
474+static void
475+ATIMoveCursor(ScreenPtr pScreen, int x, int y)
476+{
477+}
478+
479+
480+static Bool
481+ATIRealizeCursor(ScreenPtr pScreen, CursorPtr pCursor)
482+{
483+ return FALSE;
484+}
485+
486+
487+static Bool
488+ATIUnrealizeCursor(ScreenPtr pScreen, CursorPtr pCursor)
489+{
490+ return TRUE;
491+}
492+
493+
494+static void
495+ATISetCursor(ScreenPtr pScreen, CursorPtr pCursor, int x, int y)
496+{
497+}
498+
499+
500+miPointerSpriteFuncRec ATIPointerSpriteFuncs = {
501+ ATIRealizeCursor,
502+ ATIUnrealizeCursor,
503+ ATISetCursor,
504+ ATIMoveCursor,
505+};
506+
507+
508+void
509+ATICursorEnable(ScreenPtr pScreen)
510+{
511+}
512+
513+
514+void
515+ATICursorDisable(ScreenPtr pScreen)
516+{
517+}
518+
519+
520+Bool
521+ATICursorInit(ScreenPtr pScreen)
522+{
523+ return FALSE;
524+}
525+
526+
527+void
528+ATIRecolorCursor(ScreenPtr pScreen, int ndef, xColorItem * pdef)
529+{
530+ return;
531+}
532+
533+
534+void
535+ATICursorFini(ScreenPtr pScreen)
536+{
537+}
538Index: git/hw/kdrive/w100/ati_dma.c
539===================================================================
540--- /dev/null 1970-01-01 00:00:00.000000000 +0000
541+++ git/hw/kdrive/w100/ati_dma.c 2006-09-02 12:12:14.000000000 +0200
542@@ -0,0 +1,333 @@
543+/*
544+ * Copyright © 2006 Alberto Mardegan <mardy@users.sourceforge.net>
545+ *
546+ * Permission to use, copy, modify, distribute, and sell this software and its
547+ * documentation for any purpose is hereby granted without fee, provided that
548+ * the above copyright notice appear in all copies and that both that
549+ * copyright notice and this permission notice appear in supporting
550+ * documentation, and that the name of Alberto Mardegan not be used in
551+ * advertising or publicity pertaining to distribution of the software without
552+ * specific, written prior permission. Alberto Mardegan makes no
553+ * representations about the suitability of this software for any purpose. It
554+ * is provided "as is" without express or implied warranty.
555+ *
556+ * ALBERTO MARDEGAN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
557+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
558+ * EVENT SHALL ALBERTO MARDEGAN BE LIABLE FOR ANY SPECIAL, INDIRECT OR
559+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
560+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
561+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
562+ * PERFORMANCE OF THIS SOFTWARE.
563+ */
564+
565+#include <sys/time.h>
566+
567+#include "ati.h"
568+#include "w100_regs.h"
569+#include "w100_const.h"
570+#include "ati_dma.h"
571+#include "ati_draw.h"
572+
573+
574+#define DEBUG_FIFO 0
575+
576+extern CARD32 w100_microcode[][2];
577+
578+#if DEBUG_FIFO
579+static void
580+ATIDebugFifo(ATIScreenInfo * atis)
581+{
582+ ATICardInfo *atic = atis->atic;
583+ char *mmio = atic->reg_base;
584+
585+ ErrorF("mmCP_CSQ_CNTL: 0x%08x\n", MMIO_IN32(mmio, mmCP_CSQ_CNTL));
586+ ErrorF("mmCP_CSQ_STAT: 0x%08x\n", MMIO_IN32(mmio, mmCP_CSQ_STAT));
587+ ErrorF("mmRBBM_STATUS: 0x%08x\n", MMIO_IN32(mmio, mmRBBM_STATUS));
588+}
589+#endif
590+
591+static void
592+ATIUploadMicrocode(ATIScreenInfo * atis)
593+{
594+ ATICardInfo *atic = atis->atic;
595+ char *mmio = atic->reg_base;
596+ int i;
597+
598+ MMIO_OUT32(mmio, mmCP_ME_RAM_ADDR, 0);
599+ for (i = 0; i < 256; i++) {
600+ MMIO_OUT32(mmio, mmCP_ME_RAM_DATAH, w100_microcode[i][1]);
601+ MMIO_OUT32(mmio, mmCP_ME_RAM_DATAL, w100_microcode[i][0]);
602+ }
603+}
604+
605+/* Required when reading from video memory after acceleration to make sure all
606+ * data has been flushed to video memory from the pixel cache.
607+ */
608+static void
609+ATIFlushPixelCache(ATIScreenInfo * atis)
610+{
611+ ATICardInfo *atic = atis->atic;
612+ char *mmio = atic->reg_base;
613+ rbbm_status_u rs;
614+ TIMEOUT_LOCALS;
615+
616+ WHILE_NOT_TIMEOUT(.2) {
617+ rs.val = MMIO_IN32(mmio, mmRBBM_STATUS);
618+ if (!rs.f.gui_active)
619+ break;
620+ }
621+ if (TIMEDOUT())
622+ ErrorF("Timeout flushing pixel cache.\n");
623+}
624+
625+static void
626+ATIEngineReset(ATIScreenInfo * atis)
627+{
628+ ATICardInfo *atic = atis->atic;
629+ char *mmio = atic->reg_base;
630+ CARD32 sclk_cntl;
631+ sclk_cntl_u sc;
632+ rbbm_soft_reset_u rsr;
633+
634+#if DEBUG_FIFO
635+ ErrorF("Engine Reset!\n");
636+ ATIDebugFifo(atis);
637+#endif
638+
639+ ATIFlushPixelCache(atis);
640+
641+ sc.val = sclk_cntl = MMIO_IN32(mmio, mmSCLK_CNTL);
642+ sc.f.sclk_force_e2 = sc.f.sclk_force_e3 = sc.f.sclk_force_idct = 1;
643+ MMIO_OUT32(mmio, mmSCLK_CNTL, sc.val);
644+
645+ rsr.val = 0;
646+ rsr.f.soft_reset_e2 = 1;
647+ MMIO_OUT32(mmio, mmRBBM_SOFT_RESET, rsr.val);
648+ MMIO_OUT32(mmio, mmRBBM_SOFT_RESET, 0);
649+
650+ MMIO_OUT32(mmio, mmSCLK_CNTL, sclk_cntl);
651+}
652+
653+inline void
654+ATIWaitAvailMMIO(ATIScreenInfo * atis, int n)
655+{
656+ ATICardInfo *atic = atis->atic;
657+ char *mmio = atic->reg_base;
658+ rbbm_status_u rs;
659+ TIMEOUT_LOCALS;
660+
661+ if (atis->mmio_avail >= n) {
662+ atis->mmio_avail -= n;
663+ return;
664+ }
665+ WHILE_NOT_TIMEOUT(.2) {
666+ rs.val = MMIO_IN32(mmio, mmRBBM_STATUS);
667+ atis->mmio_avail = rs.f.cmdfifo_avail;
668+ if (atis->mmio_avail >= n)
669+ break;
670+ ErrorF("Available %d slots.\n", atis->mmio_avail);
671+ }
672+ if (TIMEDOUT()) {
673+ ErrorF("Timeout waiting for %d MMIO slots.\n", n);
674+ ATIEngineReset(atis);
675+ ATIDrawSetup(atis->screen->pScreen);
676+ }
677+ atis->mmio_avail -= n;
678+}
679+
680+
681+void
682+ATIWaitIdle(ATIScreenInfo * atis)
683+{
684+ ATICardInfo *atic = atis->atic;
685+ char *mmio = atic->reg_base;
686+ rbbm_status_u rs;
687+ TIMEOUT_LOCALS;
688+
689+ /* Empty the fifo */
690+ ATIWaitAvailMMIO(atis, 16);
691+
692+ WHILE_NOT_TIMEOUT(.2) {
693+ rs.val = MMIO_IN32(mmio, mmRBBM_STATUS);
694+ if (!rs.f.gui_active)
695+ break;
696+#if DEBUG_FIFO
697+ ATIDebugFifo(atis);
698+#endif
699+ /* don't know if this is needed, but it's in aticore */
700+ MMIO_IN32(mmio, mmCP_RB_RPTR);
701+ }
702+ if (TIMEDOUT()) {
703+ ErrorF("Timeout idling accelerator, resetting...\n");
704+ ATIEngineReset(atis);
705+ ATIDrawSetup(atis->screen->pScreen);
706+ }
707+
708+ ATIFlushPixelCache(atis);
709+
710+#if DEBUG_FIFO
711+ ErrorF("Idle?\n");
712+ ATIDebugFifo(atis);
713+#endif
714+}
715+
716+
717+static Bool
718+ATIDMAInit(ScreenPtr pScreen, Bool use_agp)
719+{
720+ KdScreenPriv(pScreen);
721+ ATIScreenInfo(pScreenPriv);
722+ ATICardInfo(pScreenPriv);
723+ char *mmio = atic->reg_base;
724+ int dma_offset, rbsize = 10;
725+ wrap_start_dir_u wsd;
726+ wrap_buf_a_u wba;
727+ cp_rb_cntl_u rc;
728+ cp_csq_cntl_u cc;
729+ CARD32 mem_offset;
730+
731+ /* with rbsize = 10, DMA buffer will be of 0x2000 (8192) bytes */
732+ atis->ring_count = 1 << (rbsize + 1);
733+ atis->ring_mask = atis->ring_count - 1;
734+ atis->ring_len = atis->ring_count * 4;
735+ atis->dma_space = KdOffscreenAlloc(pScreen, atis->ring_len,
736+ 16, TRUE, NULL, NULL);
737+ if (atis->dma_space == NULL)
738+ return FALSE;
739+
740+ wsd.val = MMIO_IN32(mmio, mmWRAP_START_DIR);
741+ atis->ring_addr =
742+ (CARD32 *) (atic->mem_base + (wsd.f.start_addr << 1));
743+ dma_offset = atis->dma_space->offset;
744+
745+ ATIUploadMicrocode(atis);
746+ ATIEngineReset(atis);
747+
748+ atis->ring_read = 0;
749+ atis->ring_write = 0;
750+ atis->ring_free = atis->ring_count;
751+
752+ mem_offset = atic->ext_mem_location + atis->dma_space->offset;
753+ MMIO_OUT32(mmio, mmCP_RB_BASE, mem_offset);
754+ MMIO_OUT32(mmio, mmCP_RB_WPTR, atis->ring_write);
755+ MMIO_OUT32(mmio, mmCP_RB_RPTR, atis->ring_read);
756+ MMIO_OUT32(mmio, mmCP_RB_RPTR_ADDR, 0);
757+
758+ wba.val = 0;
759+ wba.f.offset_addr_a = mem_offset;
760+ switch (rbsize) {
761+ case 9:
762+ wba.f.block_size_a = WB_BLOCK_SIZE_A_0;
763+ break;
764+ case 10:
765+ wba.f.block_size_a = WB_BLOCK_SIZE_A_1;
766+ break;
767+ case 11:
768+ wba.f.block_size_a = WB_BLOCK_SIZE_A_2;
769+ break;
770+ case 12:
771+ wba.f.block_size_a = WB_BLOCK_SIZE_A_3;
772+ break;
773+ case 13:
774+ wba.f.block_size_a = WB_BLOCK_SIZE_A_4;
775+ break;
776+ }
777+ MMIO_OUT32(mmio, mmWRAP_BUF_A, wba.val);
778+
779+ rc.val = 0;
780+ rc.f.rb_no_update = 1;
781+ rc.f.rb_bufsz = rbsize;
782+ MMIO_OUT32(mmio, mmCP_RB_CNTL, rc.val);
783+
784+ cc.val = 0;
785+ cc.f.csq_mode = CSQ_CNTL_MODE_FREERUN;
786+ MMIO_OUT32(mmio, mmCP_CSQ_CNTL, cc.val);
787+
788+ return TRUE;
789+}
790+
791+static Bool
792+ATIDMAFini(ScreenPtr pScreen)
793+{
794+ KdScreenPriv(pScreen);
795+ ATIScreenInfo(pScreenPriv);
796+ ATICardInfo(pScreenPriv);
797+ char *mmio = atic->reg_base;
798+
799+ MMIO_OUT32(mmio, mmCP_CSQ_CNTL, 0);
800+
801+ ATIEngineReset(atis);
802+
803+ //KdOffscreenFree(pScreen, atis->dma_space);
804+
805+ return TRUE;
806+}
807+
808+void
809+ATIDMASetup(ScreenPtr pScreen)
810+{
811+ KdScreenPriv(pScreen);
812+ ATIScreenInfo(pScreenPriv);
813+
814+ atis->using_dma = FALSE;
815+ atis->using_pio = FALSE;
816+ if (ATIDMAInit(pScreen, FALSE))
817+ atis->using_dma = TRUE;
818+
819+ if (atis->using_dma)
820+ ErrorF("Initialized DMA\n");
821+}
822+
823+void
824+ATIDMATeardown(ScreenPtr pScreen)
825+{
826+ KdScreenPriv(pScreen);
827+ ATIScreenInfo(pScreenPriv);
828+
829+ ATIWaitIdle(atis);
830+
831+ if (atis->using_dma)
832+ ATIDMAFini(pScreen);
833+
834+ atis->using_pio = FALSE;
835+ atis->using_dma = FALSE;
836+}
837+
838+
839+CARD32 *
840+ATIRequestEntries(ATIScreenInfo * atis, int n)
841+{
842+ char *mmio = atis->atic->reg_base;
843+ CARD32 *ptr;
844+ TIMEOUT_LOCALS;
845+
846+ WHILE_NOT_TIMEOUT(1) {
847+ if (atis->ring_free > n) {
848+ ptr = atis->ring_addr + atis->ring_write;
849+ return ptr;
850+ }
851+ atis->ring_read = MMIO_IN32(mmio, mmCP_RB_RPTR);
852+ atis->ring_write = MMIO_IN32(mmio, mmCP_RB_WPTR);
853+
854+ if (atis->ring_read == atis->ring_write) {
855+ atis->ring_free = atis->ring_count;
856+ } else {
857+ atis->ring_free =
858+ (atis->ring_count +
859+ atis->ring_read - atis->ring_write) & atis->ring_mask;
860+ }
861+ }
862+ if (TIMEDOUT())
863+ ErrorF("Timeout waiting for %d entries.\n", n);
864+ return NULL;
865+}
866+
867+void
868+ATISubmitEntries(ATIScreenInfo * atis, int n)
869+{
870+ char *mmio = atis->atic->reg_base;
871+ atis->ring_free -= n;
872+ atis->ring_write += n;
873+ atis->ring_write &= atis->ring_mask;
874+ MMIO_OUT32(mmio, mmCP_RB_WPTR, atis->ring_write);
875+}
876Index: git/hw/kdrive/w100/ati_dma.h
877===================================================================
878--- /dev/null 1970-01-01 00:00:00.000000000 +0000
879+++ git/hw/kdrive/w100/ati_dma.h 2006-09-02 12:12:14.000000000 +0200
880@@ -0,0 +1,176 @@
881+/*
882+ * Copyright © 2004 Eric Anholt
883+ *
884+ * Permission to use, copy, modify, distribute, and sell this software and its
885+ * documentation for any purpose is hereby granted without fee, provided that
886+ * the above copyright notice appear in all copies and that both that
887+ * copyright notice and this permission notice appear in supporting
888+ * documentation, and that the name of Eric Anholt not be used in
889+ * advertising or publicity pertaining to distribution of the software without
890+ * specific, written prior permission. Eric Anholt makes no
891+ * representations about the suitability of this software for any purpose. It
892+ * is provided "as is" without express or implied warranty.
893+ *
894+ * ERIC ANHOLT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
895+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
896+ * EVENT SHALL ERIC ANHOLT BE LIABLE FOR ANY SPECIAL, INDIRECT OR
897+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
898+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
899+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
900+ * PERFORMANCE OF THIS SOFTWARE.
901+ */
902+/* $Header: /cvs/xserver/xserver/hw/kdrive/ati/ati_dma.h,v 1.5 2005-01-27 05:25:57 anholt Exp $ */
903+
904+#ifndef _ATI_DMA_H_
905+#define _ATI_DMA_H_
906+
907+#define CCE_DEBUG 1
908+
909+/* CCE packet defines */
910+
911+#define ATI_CCE_PACKETTYPE_MASK 0xc0000000
912+#define ATI_CCE_PACKET0 0x00000000
913+#define ATI_CCE_PACKET0_COUNT_MASK 0x3fff0000
914+#define ATI_CCE_PACKET0_ONE_REG_WR 0x00008000
915+#define ATI_CCE_PACKET0_REG_MASK 0x000007ff
916+#define ATI_CCE_PACKET1 0x40000000
917+#define ATI_CCE_PACKET1_REG_1 0x000007ff
918+#define ATI_CCE_PACKET1_REG_2 0x003ff800
919+#define ATI_CCE_PACKET1_REG_2_SHIFT 10
920+#define ATI_CCE_PACKET2 0x80000000
921+#define ATI_CCE_PACKET3 0xc0000000
922+#define ATI_CCE_PACKET3_COUNT_MASK 0x3fff0000
923+#define ATI_CCE_PACKET3_IT_OPCODE_MASK 0x0000ff00
924+
925+
926+#if !CCE_DEBUG
927+#define DMA_PACKET0(reg, count) \
928+ (ATI_CCE_PACKET0 | (((count) - 1) << 16) | ((reg) >> 2))
929+#else
930+#define DMA_PACKET0(reg, count) \
931+ (__packet0count = (count), __reg = (reg), \
932+ ATI_CCE_PACKET0 | (((count) - 1) << 16) | ((reg) >> 2))
933+#endif
934+#define DMA_PACKET1(reg1, reg2) \
935+ (ATI_CCE_PACKET1 | \
936+ (((reg2) >> 2) << ATI_CCE_PACKET1_REG_2_SHIFT) | ((reg1) >> 2))
937+#define DMA_PACKET3(type, count) \
938+ ((type) | (((count) - 1) << 16))
939+
940+
941+
942+#ifdef USE_DMA
943+
944+#if !CCE_DEBUG
945+
946+#define RING_LOCALS \
947+ CARD32 *__head; int __count
948+#define BEGIN_DMA(n) \
949+do { \
950+ __head = ATIRequestEntries(atis, n); \
951+ __count = 0; \
952+} while (0)
953+#define END_DMA() do { \
954+ ATISubmitEntries(atis, __count); \
955+} while (0)
956+
957+#else /* CCE_DEBUG */
958+#define RING_LOCALS \
959+ CARD32 *__head; int __count, __total, __reg, __packet0count
960+#define BEGIN_DMA(n) \
961+do { \
962+ __head = ATIRequestEntries(atis, n); \
963+ __count = 0; \
964+ __total = n; \
965+ __reg = 0; \
966+ __packet0count = 0; \
967+} while (0)
968+#define END_DMA() do { \
969+ if (__count != __total) \
970+ FatalError("count != total (%d vs %d) at %s:%d\n", \
971+ __count, __total, __FILE__, __LINE__); \
972+ ATISubmitEntries(atis, __count); \
973+} while (0)
974+
975+#endif /* CCE_DEBUG */
976+
977+#define BEGIN_DMA_REG(n) BEGIN_DMA(n * 2)
978+#define END_DMA_REG() END_DMA()
979+
980+#define OUT_REG(reg, val) \
981+do { \
982+ OUT_RING(DMA_PACKET0(reg, 1)); \
983+ OUT_RING(val); \
984+} while (0)
985+
986+
987+#else /* USE_DMA */
988+
989+
990+#define RING_LOCALS char *__mmio = atis->atic->reg_base
991+#define BEGIN_DMA_REG(n) \
992+do { \
993+ ATIWaitAvailMMIO(atis, n); \
994+} while (0)
995+#define END_DMA_REG() do {} while (0)
996+#define OUT_REG(reg, val) MMIO_OUT32(__mmio, reg, val)
997+#endif /* USE_DMA */
998+
999+
1000+#define OUT_RING(val) do { \
1001+ __head[__count++] = (val); \
1002+} while (0)
1003+
1004+#define OUT_RING_REG(reg, val) do { \
1005+ if (__reg != reg) \
1006+ FatalError("unexpected reg (0x%x vs 0x%x) at %s:%d\n", \
1007+ reg, __reg, __FILE__, __LINE__); \
1008+ if (__packet0count-- <= 0) \
1009+ FatalError("overrun of packet0 at %s:%d\n", \
1010+ __FILE__, __LINE__); \
1011+ __head[__count++] = (val); \
1012+ __reg += 4; \
1013+} while (0)
1014+
1015+#define OUT_RING_F(x) OUT_RING(GET_FLOAT_BITS(x))
1016+
1017+#define TIMEOUT_LOCALS struct timeval _target, _curtime
1018+
1019+static inline Bool
1020+tv_le(struct timeval *tv1, struct timeval *tv2)
1021+{
1022+ if (tv1->tv_sec < tv2->tv_sec ||
1023+ (tv1->tv_sec == tv2->tv_sec && tv1->tv_usec < tv2->tv_usec))
1024+ return TRUE;
1025+ else
1026+ return FALSE;
1027+}
1028+
1029+#define WHILE_NOT_TIMEOUT(_timeout) \
1030+ gettimeofday(&_target, NULL); \
1031+ _target.tv_usec += ((_timeout) * 1000000); \
1032+ _target.tv_sec += _target.tv_usec / 1000000; \
1033+ _target.tv_usec = _target.tv_usec % 1000000; \
1034+ while (gettimeofday(&_curtime, NULL), tv_le(&_curtime, &_target))
1035+
1036+#define TIMEDOUT() (!tv_le(&_curtime, &_target))
1037+
1038+
1039+void
1040+ATIFlushIndirect(ATIScreenInfo *atis, Bool discard);
1041+
1042+void
1043+ATIDMASetup(ScreenPtr pScreen);
1044+
1045+void
1046+ATIDMATeardown(ScreenPtr pScreen);
1047+
1048+CARD32 *
1049+ATIRequestEntries(ATIScreenInfo *atis, int n);
1050+
1051+void
1052+ATISubmitEntries(ATIScreenInfo *atis, int n);
1053+
1054+inline void
1055+ATIWaitAvailMMIO(ATIScreenInfo *atis, int n);
1056+#endif /* _ATI_DMA_H_ */
1057Index: git/hw/kdrive/w100/ati_draw.c
1058===================================================================
1059--- /dev/null 1970-01-01 00:00:00.000000000 +0000
1060+++ git/hw/kdrive/w100/ati_draw.c 2006-09-02 12:12:14.000000000 +0200
1061@@ -0,0 +1,477 @@
1062+/*
1063+ * Copyright © 2006 Alberto Mardegan <mardy@users.sourceforge.net>
1064+ *
1065+ * Permission to use, copy, modify, distribute, and sell this software and its
1066+ * documentation for any purpose is hereby granted without fee, provided that
1067+ * the above copyright notice appear in all copies and that both that
1068+ * copyright notice and this permission notice appear in supporting
1069+ * documentation, and that the name of Alberto Mardegan not be used in
1070+ * advertising or publicity pertaining to distribution of the software without
1071+ * specific, written prior permission. Alberto Mardegan makes no
1072+ * representations about the suitability of this software for any purpose. It
1073+ * is provided "as is" without express or implied warranty.
1074+ *
1075+ * ALBERTO MARDEGAN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
1076+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
1077+ * EVENT SHALL ALBERTO MARDEGAN BE LIABLE FOR ANY SPECIAL, INDIRECT OR
1078+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
1079+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
1080+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
1081+ * PERFORMANCE OF THIS SOFTWARE.
1082+ */
1083+
1084+#define USE_DMA
1085+#define DRAW_USING_PACKET3
1086+
1087+#ifdef HAVE_CONFIG_H
1088+#include <kdrive-config.h>
1089+#endif
1090+#include "ati.h"
1091+#include "w100_regs.h"
1092+#include "w100_const.h"
1093+#include "ati_dma.h"
1094+#include "ati_draw.h"
1095+#include "kaa.h"
1096+
1097+
1098+CARD8 ATISolidRop[16] = {
1099+ /* GXclear */ 0x00,
1100+ /* 0 */
1101+ /* GXand */ 0xa0,
1102+ /* src AND dst */
1103+ /* GXandReverse */ 0x50,
1104+ /* src AND NOT dst */
1105+ /* GXcopy */ 0xf0,
1106+ /* src */
1107+ /* GXandInverted */ 0x0a,
1108+ /* NOT src AND dst */
1109+ /* GXnoop */ 0xaa,
1110+ /* dst */
1111+ /* GXxor */ 0x5a,
1112+ /* src XOR dst */
1113+ /* GXor */ 0xfa,
1114+ /* src OR dst */
1115+ /* GXnor */ 0x05,
1116+ /* NOT src AND NOT dst */
1117+ /* GXequiv */ 0xa5,
1118+ /* NOT src XOR dst */
1119+ /* GXinvert */ 0x55,
1120+ /* NOT dst */
1121+ /* GXorReverse */ 0xf5,
1122+ /* src OR NOT dst */
1123+ /* GXcopyInverted */ 0x0f,
1124+ /* NOT src */
1125+ /* GXorInverted */ 0xaf,
1126+ /* NOT src OR dst */
1127+ /* GXnand */ 0x5f,
1128+ /* NOT src OR NOT dst */
1129+ /* GXset */ 0xff,
1130+ /* 1 */
1131+};
1132+
1133+CARD8 ATIBltRop[16] = {
1134+ /* GXclear */ 0x00,
1135+ /* 0 */
1136+ /* GXand */ 0x88,
1137+ /* src AND dst */
1138+ /* GXandReverse */ 0x44,
1139+ /* src AND NOT dst */
1140+ /* GXcopy */ 0xcc,
1141+ /* src */
1142+ /* GXandInverted */ 0x22,
1143+ /* NOT src AND dst */
1144+ /* GXnoop */ 0xaa,
1145+ /* dst */
1146+ /* GXxor */ 0x66,
1147+ /* src XOR dst */
1148+ /* GXor */ 0xee,
1149+ /* src OR dst */
1150+ /* GXnor */ 0x11,
1151+ /* NOT src AND NOT dst */
1152+ /* GXequiv */ 0x99,
1153+ /* NOT src XOR dst */
1154+ /* GXinvert */ 0x55,
1155+ /* NOT dst */
1156+ /* GXorReverse */ 0xdd,
1157+ /* src OR NOT dst */
1158+ /* GXcopyInverted */ 0x33,
1159+ /* NOT src */
1160+ /* GXorInverted */ 0xbb,
1161+ /* NOT src OR dst */
1162+ /* GXnand */ 0x77,
1163+ /* NOT src OR NOT dst */
1164+ /* GXset */ 0xff,
1165+ /* 1 */
1166+};
1167+
1168+static int copydx, copydy;
1169+static ATIScreenInfo *accel_atis;
1170+static char *accel_mmio;
1171+
1172+
1173+void
1174+ATIDrawSetup(ScreenPtr pScreen)
1175+{
1176+ KdScreenPriv(pScreen);
1177+ ATIScreenInfo(pScreenPriv);
1178+ default_sc_bottom_right_u dsbr;
1179+ RING_LOCALS;
1180+
1181+ dsbr.val = 0;
1182+ dsbr.f.default_sc_right = dsbr.f.default_sc_bottom = W100_MAXINT;
1183+
1184+ BEGIN_DMA_REG(2);
1185+ OUT_REG(mmDEFAULT_SC_BOTTOM_RIGHT, dsbr.val);
1186+ OUT_REG(mmSRC_SC_BOTTOM_RIGHT, dsbr.val);
1187+ END_DMA_REG();
1188+}
1189+
1190+static void
1191+ATIWaitMarker(ScreenPtr pScreen, int marker)
1192+{
1193+ KdScreenPriv(pScreen);
1194+ ATIScreenInfo(pScreenPriv);
1195+
1196+ ENTER_DRAW(0);
1197+ ATIWaitIdle(atis);
1198+ LEAVE_DRAW(0);
1199+}
1200+
1201+
1202+#if ATI_TRACE_DRAW
1203+void
1204+ATIEnterDraw(PixmapPtr pPix, const char *function)
1205+{
1206+ if (pPix != NULL) {
1207+ KdScreenPriv(pPix->drawable.pScreen);
1208+ CARD32 offset;
1209+
1210+ offset = ((CARD8 *) pPix->devPrivate.ptr -
1211+ pScreenPriv->screen->memory_base);
1212+
1213+ ErrorF("Enter %s 0x%x (%dx%dx%d/%d)\n", function, offset,
1214+ pPix->drawable.width, pPix->drawable.height,
1215+ pPix->drawable.depth, pPix->drawable.bitsPerPixel);
1216+ } else
1217+ ErrorF("Enter %s\n", function);
1218+}
1219+
1220+void
1221+ATILeaveDraw(PixmapPtr pPix, const char *function)
1222+{
1223+ if (pPix != NULL) {
1224+ KdScreenPriv(pPix->drawable.pScreen);
1225+ CARD32 offset;
1226+
1227+ offset = ((CARD8 *) pPix->devPrivate.ptr -
1228+ pScreenPriv->screen->memory_base);
1229+
1230+ ErrorF("Leave %s 0x%x\n", function, offset);
1231+ } else
1232+ ErrorF("Leave %s\n", function);
1233+}
1234+#endif
1235+
1236+/* Assumes that depth 15 and 16 can be used as depth 16, which is okay since we
1237+ * require src and dest datatypes to be equal.
1238+ */
1239+static Bool
1240+ATIGetDatatypeBpp(int bpp, CARD32 * type)
1241+{
1242+ switch (bpp) {
1243+ case 8:
1244+ *type = DATATYPE_8BPP;
1245+ return TRUE;
1246+ case 16:
1247+ *type = DATATYPE_ARGB1555;
1248+ return TRUE;
1249+ default:
1250+ ATI_FALLBACK(("Unsupported bpp: %d\n", bpp));
1251+ return FALSE;
1252+ }
1253+}
1254+
1255+
1256+Bool
1257+ATIGetPixmapOffsetPitch(PixmapPtr pPix, CARD32 * pitch, CARD32 * offset)
1258+{
1259+ KdScreenPriv(pPix->drawable.pScreen);
1260+ ATICardInfo(pScreenPriv);
1261+
1262+ /* XXX this only works for surfaces allocated in external memory */
1263+ *offset = ((CARD8 *) pPix->devPrivate.ptr -
1264+ pScreenPriv->screen->memory_base) + atic->ext_mem_location;
1265+ *pitch = pPix->devKind >> 1;
1266+
1267+ return TRUE;
1268+}
1269+
1270+
1271+static Bool
1272+ATIPrepareSolid(PixmapPtr pPix, int alu, Pixel pm, Pixel fg)
1273+{
1274+ KdScreenPriv(pPix->drawable.pScreen);
1275+ ATIScreenInfo(pScreenPriv);
1276+ ATICardInfo(pScreenPriv);
1277+ CARD32 datatype, dst_pitch, dst_offset;
1278+ dp_gui_master_cntl_u gmc;
1279+ dp_cntl_u dp_cntl;
1280+ RING_LOCALS;
1281+
1282+ accel_atis = atis;
1283+ accel_mmio = atic->reg_base;
1284+
1285+ if (!ATIGetDatatypeBpp(pPix->drawable.bitsPerPixel, &datatype))
1286+ return FALSE;
1287+ if (!ATIGetPixmapOffsetPitch(pPix, &dst_pitch, &dst_offset))
1288+ return FALSE;
1289+
1290+ ENTER_DRAW(pPix);
1291+
1292+ gmc.val = 0;
1293+ gmc.f.gmc_dst_pitch_offset_cntl = 1;
1294+ gmc.f.gmc_dst_clipping = 1;
1295+ gmc.f.gmc_brush_datatype = BRUSH_SOLIDCOLOR;
1296+ gmc.f.gmc_dst_datatype = datatype;
1297+ gmc.f.gmc_src_datatype = datatype;
1298+ gmc.f.gmc_byte_pix_order = 1;
1299+ gmc.f.gmc_rop3 = ATISolidRop[alu];
1300+ gmc.f.gmc_dp_src_source = SOURCE_MEM_RECTANGULAR;
1301+ gmc.f.gmc_clr_cmp_fcn_dis = 1;
1302+ gmc.f.gmc_dp_op = OP_ROP;
1303+
1304+ dp_cntl.val = 0;
1305+ dp_cntl.f.dst_x_dir = 1;
1306+ dp_cntl.f.dst_y_dir = 1;
1307+
1308+ BEGIN_DMA_REG(6);
1309+ OUT_REG(mmDST_PITCH, dst_pitch);
1310+ OUT_REG(mmDST_OFFSET, dst_offset);
1311+ OUT_REG(mmDP_GUI_MASTER_CNTL, gmc.val);
1312+ OUT_REG(mmDP_BRUSH_FRGD_CLR, fg);
1313+ OUT_REG(mmDP_WRITE_MSK, pm);
1314+ OUT_REG(mmDP_CNTL, dp_cntl.val);
1315+ END_DMA_REG();
1316+
1317+ LEAVE_DRAW(pPix);
1318+ return TRUE;
1319+}
1320+
1321+static void
1322+ATISolid(int x1, int y1, int x2, int y2)
1323+{
1324+ ENTER_DRAW(0);
1325+ ATIScreenInfo *atis = accel_atis;
1326+ RING_LOCALS;
1327+
1328+#ifdef DRAW_USING_PACKET3
1329+ BEGIN_DMA(3);
1330+ OUT_RING(DMA_PACKET3(W100_CCE_PACKET3_PAINT_MULTI, 2));
1331+ OUT_RING((x1 << 16) | y1);
1332+ OUT_RING(((x2 - x1) << 16) | (y2 - y1));
1333+ END_DMA();
1334+#elif defined DRAW_USING_PACKET0
1335+ BEGIN_DMA(3);
1336+ OUT_RING(DMA_PACKET0(mmDST_Y_X, 2));
1337+ OUT_RING_REG(mmDST_Y_X, (y1 << 16) | x1);
1338+ OUT_RING_REG(mmDST_HEIGHT_WIDTH, ((y2 - y1) << 16) | (x2 - x1));
1339+ END_DMA();
1340+#else
1341+ BEGIN_DMA_REG(2);
1342+ OUT_REG(mmDST_Y_X, (y1 << 16) | x1);
1343+ OUT_REG(mmDST_HEIGHT_WIDTH, ((y2 - y1) << 16) | (x2 - x1));
1344+ END_DMA_REG();
1345+#endif
1346+ LEAVE_DRAW(0);
1347+}
1348+
1349+
1350+static void
1351+ATIDoneSolid(void)
1352+{
1353+ ENTER_DRAW(0);
1354+ LEAVE_DRAW(0);
1355+}
1356+
1357+
1358+static Bool
1359+ATIPrepareCopy(PixmapPtr pSrc, PixmapPtr pDst, int dx, int dy, int alu,
1360+ Pixel pm)
1361+{
1362+ KdScreenPriv(pDst->drawable.pScreen);
1363+ ATIScreenInfo(pScreenPriv);
1364+ ATICardInfo(pScreenPriv);
1365+ CARD32 datatype, src_pitch, src_offset, dst_pitch, dst_offset;
1366+ dp_gui_master_cntl_u gmc;
1367+ dp_cntl_u dp_cntl;
1368+ dp_datatype_u dpdt;
1369+ RING_LOCALS;
1370+
1371+ accel_mmio = atic->reg_base;
1372+ copydx = dx;
1373+ copydy = dy;
1374+ accel_atis = atis;
1375+
1376+ if (!ATIGetDatatypeBpp(pDst->drawable.bitsPerPixel, &datatype))
1377+ return FALSE;
1378+ if (!ATIGetPixmapOffsetPitch(pSrc, &src_pitch, &src_offset))
1379+ return FALSE;
1380+ if (!ATIGetPixmapOffsetPitch(pDst, &dst_pitch, &dst_offset))
1381+ return FALSE;
1382+
1383+ ENTER_DRAW(pDst);
1384+
1385+ gmc.val = 0;
1386+ gmc.f.gmc_src_pitch_offset_cntl = 1;
1387+ gmc.f.gmc_dst_pitch_offset_cntl = 1;
1388+ gmc.f.gmc_src_clipping = 1;
1389+ gmc.f.gmc_dst_clipping = 1;
1390+ gmc.f.gmc_brush_datatype = BRUSH_NONE;
1391+ gmc.f.gmc_dst_datatype = datatype;
1392+ gmc.f.gmc_src_datatype = datatype;
1393+ gmc.f.gmc_byte_pix_order = 1;
1394+ gmc.f.gmc_rop3 = ATIBltRop[alu];
1395+ gmc.f.gmc_dp_src_source = SOURCE_MEM_RECTANGULAR;
1396+ gmc.f.gmc_clr_cmp_fcn_dis = 1;
1397+ gmc.f.gmc_dp_op = OP_ROP;
1398+
1399+ dp_cntl.val = 0;
1400+ if (dx >= 0)
1401+ dp_cntl.f.dst_x_dir = 1;
1402+ if (dy >= 0)
1403+ dp_cntl.f.dst_y_dir = 1;
1404+
1405+ dpdt.val = 0;
1406+ dpdt.f.dp_dst_datatype = datatype;
1407+ dpdt.f.dp_src_datatype = datatype;
1408+ dpdt.f.dp_byte_pix_order = 1;
1409+
1410+ BEGIN_DMA_REG(8);
1411+ OUT_REG(mmSRC_PITCH, src_pitch);
1412+ OUT_REG(mmSRC_OFFSET, src_offset);
1413+ OUT_REG(mmDST_PITCH, dst_pitch);
1414+ OUT_REG(mmDST_OFFSET, dst_offset);
1415+ OUT_REG(mmDP_GUI_MASTER_CNTL, gmc.val);
1416+ OUT_REG(mmDP_WRITE_MSK, pm);
1417+ OUT_REG(mmDP_CNTL, dp_cntl.val);
1418+ OUT_REG(mmDP_DATATYPE, dpdt.val);
1419+ END_DMA_REG();
1420+
1421+ LEAVE_DRAW(pDst);
1422+ return TRUE;
1423+}
1424+
1425+static void
1426+ATICopy(int srcX, int srcY, int dstX, int dstY, int w, int h)
1427+{
1428+ ATIScreenInfo *atis = accel_atis;
1429+ RING_LOCALS;
1430+
1431+ ENTER_DRAW(0);
1432+#ifndef DRAW_USING_PACKET3
1433+ if (copydx < 0) {
1434+ srcX += w - 1;
1435+ dstX += w - 1;
1436+ }
1437+ if (copydy < 0) {
1438+ srcY += h - 1;
1439+ dstY += h - 1;
1440+ }
1441+#endif
1442+
1443+#ifdef DRAW_USING_PACKET3
1444+ BEGIN_DMA(4);
1445+ OUT_RING(DMA_PACKET3(W100_CCE_PACKET3_BITBLT_MULTI, 3));
1446+ OUT_RING((srcX << 16) | srcY);
1447+ OUT_RING((dstX << 16) | dstY);
1448+ OUT_RING((w << 16) | h);
1449+ END_DMA();
1450+#elif defined DRAW_USING_PACKET0
1451+ BEGIN_DMA(4);
1452+ OUT_RING(DMA_PACKET0(mmSRC_Y_X, 3));
1453+ OUT_RING_REG(mmSRC_Y_X, (srcY << 16) | srcX);
1454+ OUT_RING_REG(mmDST_Y_X, (dstY << 16) | dstX);
1455+ OUT_RING_REG(mmDST_HEIGHT_WIDTH, (h << 16) | w);
1456+ END_DMA();
1457+#else
1458+ BEGIN_DMA_REG(3);
1459+ OUT_REG(mmSRC_Y_X, (srcY << 16) | srcX);
1460+ OUT_REG(mmDST_Y_X, (dstY << 16) | dstX);
1461+ OUT_REG(mmDST_HEIGHT_WIDTH, (h << 16) | w);
1462+ END_DMA_REG();
1463+#endif
1464+ LEAVE_DRAW(0);
1465+}
1466+
1467+
1468+static void
1469+ATIDoneCopy(void)
1470+{
1471+ ENTER_DRAW(0);
1472+ LEAVE_DRAW(0);
1473+}
1474+
1475+
1476+Bool
1477+ATIDrawInit(ScreenPtr pScreen)
1478+{
1479+ KdScreenPriv(pScreen);
1480+ ATIScreenInfo(pScreenPriv);
1481+
1482+ ErrorF("Screen: %d/%d depth/bpp\n", pScreenPriv->screen->fb[0].depth,
1483+ pScreenPriv->screen->fb[0].bitsPerPixel);
1484+
1485+ memset(&atis->kaa, 0, sizeof(KaaScreenInfoRec));
1486+ atis->kaa.waitMarker = ATIWaitMarker;
1487+ atis->kaa.PrepareSolid = ATIPrepareSolid;
1488+ atis->kaa.Solid = ATISolid;
1489+ atis->kaa.DoneSolid = ATIDoneSolid;
1490+ atis->kaa.PrepareCopy = ATIPrepareCopy;
1491+ atis->kaa.Copy = ATICopy;
1492+ atis->kaa.DoneCopy = ATIDoneCopy;
1493+ /* XXX if this flag isn't specified, Kdrive crashes in kaaPixmapUseMemory
1494+ * or kaaPixmapUseScreen. But this is probably caused by some bug in this
1495+ * driver... */
1496+ atis->kaa.flags |= KAA_OFFSCREEN_PIXMAPS;
1497+ if (!kaaDrawInit(pScreen, &atis->kaa))
1498+ return FALSE;
1499+
1500+ return TRUE;
1501+}
1502+
1503+
1504+void
1505+ATIDrawEnable(ScreenPtr pScreen)
1506+{
1507+ KdScreenPriv(pScreen);
1508+ ATIScreenInfo(pScreenPriv);
1509+
1510+ ATIDMASetup(pScreen);
1511+ ATIDrawSetup(pScreen);
1512+
1513+ atis->scratch_area = NULL;
1514+ atis->kaa.PrepareBlend = NULL;
1515+ atis->kaa.Blend = NULL;
1516+ atis->kaa.DoneBlend = NULL;
1517+ atis->kaa.CheckComposite = NULL;
1518+ atis->kaa.PrepareComposite = NULL;
1519+ atis->kaa.Composite = NULL;
1520+ atis->kaa.DoneComposite = NULL;
1521+ atis->kaa.UploadToScreen = NULL;
1522+ atis->kaa.UploadToScratch = NULL;
1523+
1524+
1525+ kaaMarkSync(pScreen);
1526+}
1527+
1528+void
1529+ATIDrawDisable(ScreenPtr pScreen)
1530+{
1531+ ATIDMATeardown(pScreen);
1532+}
1533+
1534+void
1535+ATIDrawFini(ScreenPtr pScreen)
1536+{
1537+ kaaDrawFini(pScreen);
1538+}
1539Index: git/hw/kdrive/w100/ati_draw.h
1540===================================================================
1541--- /dev/null 1970-01-01 00:00:00.000000000 +0000
1542+++ git/hw/kdrive/w100/ati_draw.h 2006-09-02 12:12:14.000000000 +0200
1543@@ -0,0 +1,107 @@
1544+/*
1545+ * Copyright © 2004 Eric Anholt
1546+ *
1547+ * Permission to use, copy, modify, distribute, and sell this software and its
1548+ * documentation for any purpose is hereby granted without fee, provided that
1549+ * the above copyright notice appear in all copies and that both that
1550+ * copyright notice and this permission notice appear in supporting
1551+ * documentation, and that the name of Eric Anholt not be used in
1552+ * advertising or publicity pertaining to distribution of the software without
1553+ * specific, written prior permission. Eric Anholt makes no
1554+ * representations about the suitability of this software for any purpose. It
1555+ * is provided "as is" without express or implied warranty.
1556+ *
1557+ * ERIC ANHOLT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
1558+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
1559+ * EVENT SHALL ERIC ANHOLT BE LIABLE FOR ANY SPECIAL, INDIRECT OR
1560+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
1561+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
1562+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
1563+ * PERFORMANCE OF THIS SOFTWARE.
1564+ */
1565+/* $Header: /cvs/xserver/xserver/hw/kdrive/ati/ati_draw.h,v 1.9 2005-02-21 03:44:10 anholt Exp $ */
1566+
1567+#ifndef _ATI_DRAW_H_
1568+#define _ATI_DRAW_H_
1569+
1570+Bool ATIGetOffsetPitch(ATIScreenInfo *atis, int bpp, CARD32 *pitch_offset,
1571+ int offset, int pitch);
1572+Bool ATIGetPixmapOffsetPitch(PixmapPtr pPix, CARD32 *pitch, CARD32 *offset);
1573+
1574+Bool R128CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskPicture,
1575+ PicturePtr pDstPicture);
1576+Bool R128PrepareComposite(int op, PicturePtr pSrcPicture,
1577+ PicturePtr pMaskPicture, PicturePtr pDstPicture, PixmapPtr pSrc,
1578+ PixmapPtr pMask, PixmapPtr pDst);
1579+void R128Composite(int srcX, int srcY, int maskX, int maskY, int dstX, int dstY,
1580+ int w, int h);
1581+void R128DoneComposite(void);
1582+
1583+Bool R128PrepareTrapezoids(PicturePtr pDstPicture, PixmapPtr pDst);
1584+void R128Trapezoids(KaaTrapezoid *traps, int ntraps);
1585+void R128DoneTrapezoids(void);
1586+
1587+Bool R100CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskPicture,
1588+ PicturePtr pDstPicture);
1589+Bool R100PrepareComposite(int op, PicturePtr pSrcPicture,
1590+ PicturePtr pMaskPicture, PicturePtr pDstPicture, PixmapPtr pSrc,
1591+ PixmapPtr pMask, PixmapPtr pDst);
1592+Bool R200CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskPicture,
1593+ PicturePtr pDstPicture);
1594+Bool R200PrepareComposite(int op, PicturePtr pSrcPicture,
1595+ PicturePtr pMaskPicture, PicturePtr pDstPicture, PixmapPtr pSrc,
1596+ PixmapPtr pMask, PixmapPtr pDst);
1597+void RadeonComposite(int srcX, int srcY, int maskX, int maskY, int dstX,
1598+ int dstY, int w, int h);
1599+void RadeonDoneComposite(void);
1600+
1601+Bool RadeonPrepareTrapezoids(PicturePtr pDstPicture, PixmapPtr pDst);
1602+void RadeonTrapezoids(KaaTrapezoid *traps, int ntraps);
1603+void RadeonDoneTrapezoids(void);
1604+
1605+void RadeonSwitchTo2D(ATIScreenInfo *atis);
1606+void RadeonSwitchTo3D(ATIScreenInfo *atis);
1607+void ATIWaitIdle(ATIScreenInfo *atis);
1608+
1609+#define ATI_TRACE_FALL 0
1610+#define ATI_TRACE_DRAW 1
1611+
1612+#if ATI_TRACE_FALL
1613+#define ATI_FALLBACK(x) \
1614+do { \
1615+ ErrorF("%s: ", __FUNCTION__); \
1616+ ErrorF x; \
1617+ return FALSE; \
1618+} while (0)
1619+#else
1620+#define ATI_FALLBACK(x) return FALSE
1621+#endif
1622+
1623+#if ATI_TRACE_DRAW
1624+#define ENTER_DRAW(pix) ATIEnterDraw(pix, __FUNCTION__)
1625+#define LEAVE_DRAW(pix) ATILeaveDraw(pix, __FUNCTION__)
1626+
1627+void
1628+ATIEnterDraw (PixmapPtr pPixmap, const char *function);
1629+
1630+void
1631+ATILeaveDraw (PixmapPtr pPixmap, const char *function);
1632+#else /* ATI_TRACE */
1633+#define ENTER_DRAW(pix)
1634+#define LEAVE_DRAW(pix)
1635+#endif /* !ATI_TRACE */
1636+
1637+#ifndef USE_DMA
1638+/* if DMA is not going to be used, drawing using PACKET3 or PACKET0 won't
1639+ * be possible */
1640+#ifdef DRAW_USING_PACKET3
1641+#undef DRAW_USING_PACKET3
1642+#endif
1643+
1644+#ifdef DRAW_USING_PACKET0
1645+#undef DRAW_USING_PACKET0
1646+#endif
1647+
1648+#endif /* USE_DMA */
1649+
1650+#endif /* _ATI_DRAW_H_ */
1651Index: git/hw/kdrive/w100/ati.h
1652===================================================================
1653--- /dev/null 1970-01-01 00:00:00.000000000 +0000
1654+++ git/hw/kdrive/w100/ati.h 2006-09-02 12:12:14.000000000 +0200
1655@@ -0,0 +1,256 @@
1656+/*
1657+ * $Id: ati.h,v 1.18 2005-06-10 02:14:44 anholt Exp $
1658+ *
1659+ * Copyright © 2003 Eric Anholt
1660+ *
1661+ * Permission to use, copy, modify, distribute, and sell this software and its
1662+ * documentation for any purpose is hereby granted without fee, provided that
1663+ * the above copyright notice appear in all copies and that both that
1664+ * copyright notice and this permission notice appear in supporting
1665+ * documentation, and that the name of Eric Anholt not be used in
1666+ * advertising or publicity pertaining to distribution of the software without
1667+ * specific, written prior permission. Eric Anholt makes no
1668+ * representations about the suitability of this software for any purpose. It
1669+ * is provided "as is" without express or implied warranty.
1670+ *
1671+ * ERIC ANHOLT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
1672+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
1673+ * EVENT SHALL ERIC ANHOLT BE LIABLE FOR ANY SPECIAL, INDIRECT OR
1674+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
1675+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
1676+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
1677+ * PERFORMANCE OF THIS SOFTWARE.
1678+ */
1679+/* $Header: /cvs/xserver/xserver/hw/kdrive/ati/ati.h,v 1.18 2005-06-10 02:14:44 anholt Exp $ */
1680+
1681+#ifndef _ATI_H_
1682+#define _ATI_H_
1683+
1684+#ifdef HAVE_CONFIG_H
1685+#include <kdrive-config.h>
1686+#endif
1687+
1688+#ifdef KDRIVEFBDEV
1689+#include <fbdev.h>
1690+#endif
1691+#ifdef KDRIVEVESA
1692+#include <vesa.h>
1693+#endif
1694+
1695+#include "kxv.h"
1696+
1697+
1698+#define ATI_MEM_BASE(c) (0x08000000)
1699+#define ATI_MEM_SIZE(c) (0x01000000)
1700+#define ATI_REG_BASE(c) (ATI_MEM_BASE(c) + 0x10000) /* the 0x08000000 must be obtained from /proc/iomem, the 0x10000 from ReadCfgReg(cfgREG_BASE) << 16) & 0xff0000 */
1701+#define ATI_REG_SIZE(c) (0x2000)
1702+
1703+#ifdef __powerpc__
1704+
1705+static __inline__ void
1706+MMIO_OUT32(__volatile__ void *base, const unsigned long offset,
1707+ const unsigned int val)
1708+{
1709+ __asm__ __volatile__(
1710+ "stwbrx %1,%2,%3\n\t"
1711+ "eieio"
1712+ : "=m" (*((volatile unsigned char *)base+offset))
1713+ : "r" (val), "b" (base), "r" (offset));
1714+}
1715+
1716+static __inline__ CARD32
1717+MMIO_IN32(__volatile__ void *base, const unsigned long offset)
1718+{
1719+ register unsigned int val;
1720+ __asm__ __volatile__(
1721+ "lwbrx %0,%1,%2\n\t"
1722+ "eieio"
1723+ : "=r" (val)
1724+ : "b" (base), "r" (offset),
1725+ "m" (*((volatile unsigned char *)base+offset)));
1726+ return val;
1727+}
1728+
1729+#else
1730+
1731+#define MMIO_OUT32(mmio, a, v) (*(VOL32 *)((mmio) + (a)) = (v))
1732+#define MMIO_IN32(mmio, a) (*(VOL32 *)((mmio) + (a)))
1733+
1734+#endif
1735+
1736+#define MMIO_OUT8(mmio, a, v) (*(VOL8 *)((mmio) + (a)) = (v))
1737+#define MMIO_IN8(mmio, a, v) (*(VOL8 *)((mmio) + (a)))
1738+
1739+
1740+typedef volatile CARD8 VOL8;
1741+typedef volatile CARD16 VOL16;
1742+typedef volatile CARD32 VOL32;
1743+
1744+struct pci_id_entry {
1745+ CARD16 vendor;
1746+ CARD16 device;
1747+ CARD8 caps;
1748+ char *name;
1749+};
1750+
1751+struct backend_funcs {
1752+ void (*cardfini)(KdCardInfo *);
1753+ void (*scrfini)(KdScreenInfo *);
1754+ Bool (*initScreen)(ScreenPtr);
1755+ Bool (*finishInitScreen)(ScreenPtr pScreen);
1756+ Bool (*createRes)(ScreenPtr);
1757+ void (*preserve)(KdCardInfo *);
1758+ void (*restore)(KdCardInfo *);
1759+ Bool (*dpms)(ScreenPtr, int);
1760+ Bool (*enable)(ScreenPtr);
1761+ void (*disable)(ScreenPtr);
1762+ void (*getColors)(ScreenPtr, int, int, xColorItem *);
1763+ void (*putColors)(ScreenPtr, int, int, xColorItem *);
1764+#ifdef RANDR
1765+ Bool (*randrSetConfig) (ScreenPtr, Rotation, int, RRScreenSizePtr);
1766+#endif
1767+};
1768+
1769+typedef struct _ATICardInfo {
1770+ union {
1771+#ifdef KDRIVEFBDEV
1772+ FbdevPriv fbdev;
1773+#endif
1774+#ifdef KDRIVEVESA
1775+ VesaCardPrivRec vesa;
1776+#endif
1777+ } backend_priv;
1778+ struct backend_funcs backend_funcs;
1779+
1780+ struct pci_id_entry *pci_id;
1781+ CARD8 *mem_base;
1782+ CARD8 *reg_base;
1783+ CARD32 fb_location;
1784+ CARD32 ext_mem_location;
1785+ Bool use_fbdev, use_vesa;
1786+} ATICardInfo;
1787+
1788+#define getATICardInfo(kd) ((ATICardInfo *) ((kd)->card->driver))
1789+#define ATICardInfo(kd) ATICardInfo *atic = getATICardInfo(kd)
1790+
1791+typedef struct _ATICursor {
1792+ int width, height;
1793+ int xhot, yhot;
1794+
1795+ Bool has_cursor;
1796+ CursorPtr pCursor;
1797+ Pixel source, mask;
1798+ KdOffscreenArea *area;
1799+} ATICursor;
1800+
1801+typedef struct _ATIPortPriv {
1802+ int brightness;
1803+ int saturation;
1804+ RegionRec clip;
1805+ CARD32 size;
1806+ KdOffscreenArea *off_screen;
1807+ DrawablePtr pDraw;
1808+ PixmapPtr pPixmap;
1809+
1810+ CARD32 src_offset;
1811+ CARD32 src_pitch;
1812+ CARD8 *src_addr;
1813+
1814+ int id;
1815+ int src_x1, src_y1, src_x2, src_y2;
1816+ int dst_x1, dst_y1, dst_x2, dst_y2;
1817+ int src_w, src_h, dst_w, dst_h;
1818+} ATIPortPrivRec, *ATIPortPrivPtr;
1819+
1820+typedef struct _ATIScreenInfo {
1821+ union {
1822+#ifdef KDRIVEFBDEV
1823+ FbdevScrPriv fbdev;
1824+#endif
1825+#ifdef KDRIVEVESA
1826+ VesaScreenPrivRec vesa;
1827+#endif
1828+ } backend_priv;
1829+ KaaScreenInfoRec kaa;
1830+
1831+ ATICardInfo *atic;
1832+ KdScreenInfo *screen;
1833+
1834+ int scratch_offset;
1835+ int scratch_next;
1836+ KdOffscreenArea *scratch_area;
1837+
1838+ ATICursor cursor;
1839+
1840+ KdVideoAdaptorPtr pAdaptor;
1841+ int num_texture_ports;
1842+
1843+ Bool using_pio; /* If we use decode DMA packets to MMIO. */
1844+ Bool using_dma; /* If we use non-DRI DMA to submit packets. */
1845+
1846+ KdOffscreenArea *dma_space; /* For "DMA" from framebuffer. */
1847+ CARD32 *ring_addr; /* Beginning of ring buffer. */
1848+ int ring_write; /* Index of write ptr in ring. */
1849+ int ring_read; /* Index of read ptr in ring. */
1850+ int ring_len;
1851+ int ring_mask;
1852+ int ring_count;
1853+ int ring_free;
1854+
1855+
1856+ int mmio_avail;
1857+} ATIScreenInfo;
1858+
1859+#define getATIScreenInfo(kd) ((ATIScreenInfo *) ((kd)->screen->driver))
1860+#define ATIScreenInfo(kd) ATIScreenInfo *atis = getATIScreenInfo(kd)
1861+
1862+typedef union { float f; CARD32 i; } fi_type;
1863+
1864+
1865+/* ati.c */
1866+Bool
1867+ATIMap(KdCardInfo *card, ATICardInfo *atic);
1868+
1869+void
1870+ATIUnmap(KdCardInfo *card, ATICardInfo *atic);
1871+
1872+/* ati_draw.c */
1873+void
1874+ATIDrawSetup(ScreenPtr pScreen);
1875+
1876+Bool
1877+ATIDrawInit(ScreenPtr pScreen);
1878+
1879+void
1880+ATIDrawEnable(ScreenPtr pScreen);
1881+
1882+void
1883+ATIDrawDisable(ScreenPtr pScreen);
1884+
1885+void
1886+ATIDrawFini(ScreenPtr pScreen);
1887+
1888+
1889+/* ati_cursor.c */
1890+Bool
1891+ATICursorInit(ScreenPtr pScreen);
1892+
1893+void
1894+ATICursorEnable(ScreenPtr pScreen);
1895+
1896+void
1897+ATICursorDisable(ScreenPtr pScreen);
1898+
1899+void
1900+ATICursorFini(ScreenPtr pScreen);
1901+
1902+void
1903+ATIRecolorCursor(ScreenPtr pScreen, int ndef, xColorItem *pdef);
1904+
1905+int
1906+ATILog2(int val);
1907+
1908+
1909+extern KdCardFuncs ATIFuncs;
1910+
1911+#endif /* _ATI_H_ */
1912Index: git/hw/kdrive/w100/ati_microcode.c
1913===================================================================
1914--- /dev/null 1970-01-01 00:00:00.000000000 +0000
1915+++ git/hw/kdrive/w100/ati_microcode.c 2006-09-02 12:12:14.000000000 +0200
1916@@ -0,0 +1,412 @@
1917+/*
1918+ * Copyright © 2006 Alberto Mardegan <mardy@users.sourceforge.net>
1919+ *
1920+ * Permission to use, copy, modify, distribute, and sell this software and its
1921+ * documentation for any purpose is hereby granted without fee, provided that
1922+ * the above copyright notice appear in all copies and that both that
1923+ * copyright notice and this permission notice appear in supporting
1924+ * documentation, and that the name of Alberto Mardegan not be used in
1925+ * advertising or publicity pertaining to distribution of the software without
1926+ * specific, written prior permission. Alberto Mardegan makes no
1927+ * representations about the suitability of this software for any purpose. It
1928+ * is provided "as is" without express or implied warranty.
1929+ *
1930+ * ALBERTO MARDEGAN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
1931+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
1932+ * EVENT SHALL ALBERTO MARDEGAN BE LIABLE FOR ANY SPECIAL, INDIRECT OR
1933+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
1934+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
1935+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
1936+ * PERFORMANCE OF THIS SOFTWARE.
1937+ */
1938+
1939+/* CCE microcode (from ATI) */
1940+
1941+#include "ati.h"
1942+
1943+
1944+CARD32 w100_microcode[][2] = {
1945+ {0x21007000, 0x00000000}
1946+ ,
1947+ {0x20007000, 0x00000000}
1948+ ,
1949+ {0x00000098, 0x00000004}
1950+ ,
1951+ {0x0000009c, 0x00000004}
1952+ ,
1953+ {0x66544a49, 0x00000000}
1954+ ,
1955+ {0x49494174, 0x00000000}
1956+ ,
1957+ {0x54517d83, 0x00000000}
1958+ ,
1959+ {0x498d8b64, 0x00000000}
1960+ ,
1961+ {0x49494949, 0x00000000}
1962+ ,
1963+ {0x49b6493c, 0x00000000}
1964+ ,
1965+ {0x49494949, 0x00000000}
1966+ ,
1967+ {0x49494949, 0x00000000}
1968+ ,
1969+ {0x49490d10, 0x00000000}
1970+ ,
1971+ {0x000f0000, 0x00000016}
1972+ ,
1973+ {0x30292027, 0x00000000}
1974+ ,
1975+ {0x00000012, 0x00000004}
1976+ ,
1977+ {0x000f0000, 0x00000016}
1978+ ,
1979+ {0x30292427, 0x00000000}
1980+ ,
1981+ {0x0000730f, 0x00000002}
1982+ , /* mmIDCT_CONTROL */
1983+ {0x00061000, 0x00000002}
1984+ ,
1985+ {0x0000001d, 0x0000001a}
1986+ ,
1987+ {0x00004000, 0x0000001e}
1988+ ,
1989+ {0x00061000, 0x00000002}
1990+ ,
1991+ {0x0000001d, 0x0000001a}
1992+ ,
1993+ {0x00004000, 0x0000001e}
1994+ ,
1995+ {0x00061000, 0x00000002}
1996+ ,
1997+ {0x0000001d, 0x0000001a}
1998+ ,
1999+ {0x00004000, 0x0000001e}
2000+ ,
2001+ {0x00000013, 0x00000004}
2002+ ,
2003+ {0x0003803a, 0x00000002}
2004+ ,
2005+ {0x04006300, 0x00000002}
2006+ , /* mmIDCT_RUNS */
2007+ {0x00000013, 0x00000004}
2008+ ,
2009+ {0x00007300, 0x00000002}
2010+ , /* mmIDCT_RUNS */
2011+ {0x00065000, 0x00000002}
2012+ ,
2013+ {0x00003301, 0x00000002}
2014+ , /* mmIDCT_LEVELS */
2015+ {0x04006301, 0x00000006}
2016+ , /* mmIDCT_LEVELS */
2017+ {0x00007300, 0x00000002}
2018+ , /* mmIDCT_RUNS */
2019+ {0x00007301, 0x00000002}
2020+ , /* mmIDCT_LEVELS */
2021+ {0x00007301, 0x00000006}
2022+ , /* mmIDCT_LEVELS */
2023+ {0x0003803a, 0x00000002}
2024+ ,
2025+ {0x04006300, 0x00000006}
2026+ , /* mmIDCT_RUNS */
2027+ {0x00a05000, 0x00000002}
2028+ ,
2029+ {0x00000039, 0x0000000c}
2030+ ,
2031+ {0x00000000, 0x00000002}
2032+ ,
2033+ {0x00007300, 0x00000002}
2034+ , /* mmIDCT_RUNS */
2035+ {0x00007301, 0x00000002}
2036+ , /* mmIDCT_LEVELS */
2037+ {0x00007301, 0x00000002}
2038+ , /* mmIDCT_LEVELS */
2039+ {0x0060002a, 0x00000004}
2040+ ,
2041+ {0x00007488, 0x00000002}
2042+ , /* mmE2_ARITHMETIC_CNTL */
2043+ {0x0003803b, 0x00000002}
2044+ ,
2045+ {0x00098000, 0x00000002}
2046+ ,
2047+ {0x00200000, 0x00000002}
2048+ ,
2049+ {0x00000039, 0x0000000c}
2050+ ,
2051+ {0x00007465, 0x00000002}
2052+ , /* mmDST_X_Y */
2053+ {0x00007464, 0x00000002}
2054+ , /* mmSRC_X_Y */
2055+ {0x00007478, 0x00000002}
2056+ , /* mmMVC_CNTL_START */
2057+ {0x00600034, 0x00000004}
2058+ ,
2059+ {0x00000000, 0x00000006}
2060+ ,
2061+ {0xffffffff, 0x00000000}
2062+ ,
2063+ {0x00000006, 0x00000000}
2064+ ,
2065+ {0x01605000, 0x00000002}
2066+ ,
2067+ {0x00065000, 0x00000002}
2068+ ,
2069+ {0x00098000, 0x00000002}
2070+ ,
2071+ {0x00061000, 0x00000002}
2072+ ,
2073+ {0x64c0603d, 0x00000004}
2074+ ,
2075+ {0x00080000, 0x00000016}
2076+ ,
2077+ {0x00000000, 0x00000000}
2078+ ,
2079+ {0x0400241d, 0x00000002}
2080+ , /* mmBRUSH_Y_X */
2081+ {0x00007424, 0x00000002}
2082+ , /* mmDST_LINE_START */
2083+ {0x00067425, 0x00000002}
2084+ , /* mmDST_LINE_END */
2085+ {0x04002424, 0x00000002}
2086+ , /* mmDST_LINE_START */
2087+ {0x00067425, 0x00000002}
2088+ , /* mmDST_LINE_END */
2089+ {0x00000046, 0x00000004}
2090+ ,
2091+ {0x00005000, 0x00000000}
2092+ ,
2093+ {0x00061000, 0x00000002}
2094+ ,
2095+ {0x0000740e, 0x00000002}
2096+ , /* mmDST_Y_X */
2097+ {0x00019000, 0x00000002}
2098+ ,
2099+ {0x00011050, 0x00000014}
2100+ ,
2101+ {0x00000050, 0x00000012}
2102+ ,
2103+ {0x0400240f, 0x00000002}
2104+ , /* mmDST_HEIGHT_WIDTH */
2105+ {0x0000504a, 0x00000004}
2106+ ,
2107+ {0x00007465, 0x00000002}
2108+ , /* mmDST_X_Y */
2109+ {0x00007466, 0x00000002}
2110+ , /* mmDST_WIDTH_HEIGHT */
2111+ {0x00000051, 0x00000004}
2112+ ,
2113+ {0x01e65473, 0x00000002}
2114+ , /* mmDP_CNTL_DST_DIR */
2115+ {0x4401b0b9, 0x00000002}
2116+ ,
2117+ {0x01c110b9, 0x00000002}
2118+ ,
2119+ {0x2666705d, 0x00000018}
2120+ ,
2121+ {0x040c2465, 0x00000002}
2122+ , /* mmDST_X_Y */
2123+ {0x0000005d, 0x00000018}
2124+ ,
2125+ {0x04002464, 0x00000002}
2126+ , /* mmSRC_X_Y */
2127+ {0x00007466, 0x00000002}
2128+ , /* mmDST_WIDTH_HEIGHT */
2129+ {0x00000054, 0x00000004}
2130+ ,
2131+ {0x00401060, 0x00000008}
2132+ ,
2133+ {0x00101000, 0x00000002}
2134+ ,
2135+ {0x000d80ff, 0x00000002}
2136+ ,
2137+ {0x00800063, 0x00000008}
2138+ ,
2139+ {0x000f9000, 0x00000002}
2140+ ,
2141+ {0x000e00ff, 0x00000002}
2142+ ,
2143+ {0x00000000, 0x00000006}
2144+ ,
2145+ {0x00000080, 0x00000018}
2146+ ,
2147+ {0x00000054, 0x00000004}
2148+ ,
2149+ {0x00007490, 0x00000002}
2150+ , /* mmDP_SRC_FRGD_CLR */
2151+ {0x00065000, 0x00000002}
2152+ ,
2153+ {0x00009000, 0x00000002}
2154+ ,
2155+ {0x00041000, 0x00000002}
2156+ ,
2157+ {0x0c00340e, 0x00000002}
2158+ , /* mmDST_Y_X */
2159+ {0x00049000, 0x00000002}
2160+ ,
2161+ {0x00051000, 0x00000002}
2162+ ,
2163+ {0x01e784f8, 0x00000002}
2164+ ,
2165+ {0x00200000, 0x00000002}
2166+ ,
2167+ {0x00600073, 0x0000000c}
2168+ ,
2169+ {0x00007463, 0x00000002}
2170+ , /* mmDST_HEIGHT_WIDTH_8 */
2171+ {0x006074f0, 0x00000021}
2172+ , /* mmHOST_DATA0 */
2173+ {0x20007068, 0x00000004}
2174+ ,
2175+ {0x00005068, 0x00000004}
2176+ ,
2177+ {0x00007490, 0x00000002}
2178+ , /* mmDP_SRC_FRGD_CLR */
2179+ {0x00007491, 0x00000002}
2180+ , /* mmDP_SRC_BKGD_CLR */
2181+ {0x0000740e, 0x00000002}
2182+ , /* mmDST_Y_X */
2183+ {0x0000740f, 0x00000002}
2184+ , /* mmDST_HEIGHT_WIDTH */
2185+ {0x00a05000, 0x00000002}
2186+ ,
2187+ {0x00600076, 0x0000000c}
2188+ ,
2189+ {0x006074f0, 0x00000021}
2190+ , /* mmHOST_DATA0 */
2191+ {0x000074f8, 0x00000002}
2192+ , /* mmHOST_DATA_LAST */
2193+ {0x00000076, 0x00000004}
2194+ ,
2195+ {0x000a740e, 0x00000002}
2196+ , /* mmDST_Y_X */
2197+ {0x0020740f, 0x00000002}
2198+ , /* mmDST_HEIGHT_WIDTH */
2199+ {0x00600079, 0x00000004}
2200+ ,
2201+ {0x0000748c, 0x00000002}
2202+ , /* mmCLR_CMP_CNTL */
2203+ {0x0000748d, 0x00000002}
2204+ , /* mmCLR_CMP_CLR_SRC */
2205+ {0x0000748e, 0x00000006}
2206+ , /* mmCLR_CMP_CLR_DST */
2207+ {0x00005000, 0x00000002}
2208+ ,
2209+ {0x00a05000, 0x00000002}
2210+ ,
2211+ {0x00007468, 0x00000002}
2212+ , /* mmDST_HEIGHT_Y */
2213+ {0x00061000, 0x00000002}
2214+ ,
2215+ {0x00000084, 0x0000000c}
2216+ ,
2217+ {0x00058000, 0x00000002}
2218+ ,
2219+ {0x0c607462, 0x00000002}
2220+ , /* mmDST_WIDTH_X */
2221+ {0x00000086, 0x00000004}
2222+ ,
2223+ {0x00600085, 0x00000004}
2224+ ,
2225+ {0x400070ba, 0x00000000}
2226+ ,
2227+ {0x000380ba, 0x00000002}
2228+ ,
2229+ {0x00000093, 0x0000001c}
2230+ ,
2231+ {0x00065095, 0x00000018}
2232+ ,
2233+ {0x0400246f, 0x00000002}
2234+ , /* mmSC_TOP_LEFT */
2235+ {0x00061096, 0x00000018}
2236+ ,
2237+ {0x04007470, 0x00000000}
2238+ , /* mmSC_BOTTOM_RIGHT */
2239+ {0x0000746f, 0x00000002}
2240+ , /* mmSC_TOP_LEFT */
2241+ {0x00007470, 0x00000000}
2242+ , /* mmSC_BOTTOM_RIGHT */
2243+ {0x00090000, 0x00000006}
2244+ ,
2245+ {0x00090000, 0x00000002}
2246+ ,
2247+ {0x000d8002, 0x00000006}
2248+ ,
2249+ {0x01200000, 0x00000002}
2250+ ,
2251+ {0x20077000, 0x00000002}
2252+ ,
2253+ {0x01200000, 0x00000002}
2254+ ,
2255+ {0x20007000, 0x00000002}
2256+ ,
2257+ {0x00061000, 0x00000002}
2258+ ,
2259+ {0x0120741b, 0x00000002}
2260+ , /* mmDP_GUI_MASTER_CNTL */
2261+ {0x8040740a, 0x00000002}
2262+ , /* mmSRC_PITCH_OFFSET */
2263+ {0x8040740b, 0x00000002}
2264+ , /* mmDST_PITCH_OFFSET */
2265+ {0x00110000, 0x00000002}
2266+ ,
2267+ {0x000380ba, 0x00000002}
2268+ ,
2269+ {0x000000aa, 0x0000001c}
2270+ ,
2271+ {0x00061096, 0x00000018}
2272+ ,
2273+ {0x84407471, 0x00000002}
2274+ , /* mmSRC_SC_BOTTOM_RIGHT */
2275+ {0x00061095, 0x00000018}
2276+ ,
2277+ {0x8400746f, 0x00000002}
2278+ , /* mmSC_TOP_LEFT */
2279+ {0x00061096, 0x00000018}
2280+ ,
2281+ {0x84407470, 0x00000002}
2282+ , /* mmSC_BOTTOM_RIGHT */
2283+ {0x000000ad, 0x00000004}
2284+ ,
2285+ {0x80407471, 0x00000002}
2286+ , /* mmSRC_SC_BOTTOM_RIGHT */
2287+ {0x8000746f, 0x00000002}
2288+ , /* mmSC_TOP_LEFT */
2289+ {0x80407470, 0x00000002}
2290+ , /* mmSC_BOTTOM_RIGHT */
2291+ {0x00108000, 0x00000002}
2292+ ,
2293+ {0x01400000, 0x00000002}
2294+ ,
2295+ {0x006000b1, 0x0000000c}
2296+ ,
2297+ {0x20c07000, 0x00000020}
2298+ ,
2299+ {0x000000b3, 0x00000012}
2300+ ,
2301+ {0x00800000, 0x00000006}
2302+ ,
2303+ {0x0080741d, 0x00000006}
2304+ , /* mmBRUSH_Y_X */
2305+ {0x00000000, 0x00000000}
2306+ ,
2307+ {0x00000001, 0x00000000}
2308+ ,
2309+ {0x000380b5, 0x00000002}
2310+ ,
2311+ {0x04002054, 0x00000002}
2312+ , /* mmNQWAIT_UNTIL */
2313+ {0x00005000, 0x00000000}
2314+ ,
2315+ {0x00000000, 0x00000000}
2316+ ,
2317+ {0x00000000, 0x00000000}
2318+ ,
2319+ {0x00000000, 0x00000000}
2320+ ,
2321+ {0x00000000, 0x00000000}
2322+ ,
2323+ {0x00000000, 0x00000000}
2324+ ,
2325+ {0x00000000, 0x00000000}
2326+ ,
2327+ {0x00000000, 0x00000000}
2328+};
2329Index: git/hw/kdrive/w100/ati_stub.c
2330===================================================================
2331--- /dev/null 1970-01-01 00:00:00.000000000 +0000
2332+++ git/hw/kdrive/w100/ati_stub.c 2006-09-02 12:12:14.000000000 +0200
2333@@ -0,0 +1,103 @@
2334+/*
2335+ * Copyright © 2006 Alberto Mardegan <mardy@users.sourceforge.net>
2336+ *
2337+ * Permission to use, copy, modify, distribute, and sell this software and its
2338+ * documentation for any purpose is hereby granted without fee, provided that
2339+ * the above copyright notice appear in all copies and that both that
2340+ * copyright notice and this permission notice appear in supporting
2341+ * documentation, and that the name of Alberto Mardegan not be used in
2342+ * advertising or publicity pertaining to distribution of the software without
2343+ * specific, written prior permission. Alberto Mardegan makes no
2344+ * representations about the suitability of this software for any purpose. It
2345+ * is provided "as is" without express or implied warranty.
2346+ *
2347+ * ALBERTO MARDEGAN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
2348+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
2349+ * EVENT SHALL ALBERTO MARDEGAN BE LIABLE FOR ANY SPECIAL, INDIRECT OR
2350+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
2351+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
2352+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
2353+ * PERFORMANCE OF THIS SOFTWARE.
2354+ */
2355+
2356+#ifdef HAVE_CONFIG_H
2357+#include <kdrive-config.h>
2358+#endif
2359+#include "ati.h"
2360+#include "w100_regs.h"
2361+#include "klinux.h"
2362+
2363+extern struct pci_id_entry ati_pci_ids[];
2364+
2365+static Bool
2366+FindW100(CARD16 vendor, CARD16 device, CARD32 count, KdCardAttr * attr)
2367+{
2368+ char *mmio;
2369+ CARD32 chip_id;
2370+ Bool found = FALSE;
2371+
2372+ mmio = KdMapDevice(ATI_REG_BASE(0), ATI_REG_SIZE(0));
2373+ KdSetMappedMode((CARD32) mmio, ATI_REG_SIZE(0),
2374+ KD_MAPPED_MODE_REGISTERS);
2375+
2376+ chip_id = MMIO_IN32(mmio, mmCHIP_ID);
2377+ if ((vendor | (device << 16)) == chip_id) {
2378+ ErrorF("Found Chip ID: %08x\n\n", chip_id);
2379+ attr->deviceID = device;
2380+ attr->vendorID = vendor;
2381+ found = TRUE;
2382+ }
2383+ KdUnmapDevice(mmio, ATI_REG_SIZE(0));
2384+ return found;
2385+}
2386+
2387+
2388+void
2389+InitCard(char *name)
2390+{
2391+ struct pci_id_entry *id;
2392+ KdCardAttr attr;
2393+
2394+ for (id = ati_pci_ids; id->name != NULL; id++) {
2395+ int j = 0;
2396+ if (FindW100(id->vendor, id->device, j++, &attr))
2397+ KdCardInfoAdd(&ATIFuncs, &attr, 0);
2398+ }
2399+}
2400+
2401+void
2402+InitOutput(ScreenInfo * pScreenInfo, int argc, char **argv)
2403+{
2404+ KdInitOutput(pScreenInfo, argc, argv);
2405+}
2406+
2407+void
2408+InitInput(int argc, char **argv)
2409+{
2410+ KdInitInput(&LinuxMouseFuncs, &LinuxKeyboardFuncs);
2411+#ifdef TOUCHSCREEN
2412+ KdAddMouseDriver(&TsFuncs);
2413+#endif
2414+}
2415+
2416+void
2417+ddxUseMsg(void)
2418+{
2419+ KdUseMsg();
2420+#ifdef KDRIVEVESA
2421+ vesaUseMsg();
2422+#endif
2423+}
2424+
2425+int
2426+ddxProcessArgument(int argc, char **argv, int i)
2427+{
2428+ int ret;
2429+
2430+#ifdef KDRIVEVESA
2431+ if (!(ret = vesaProcessArgument(argc, argv, i)))
2432+#endif
2433+ ret = KdProcessArgument(argc, argv, i);
2434+
2435+ return ret;
2436+}
2437Index: git/hw/kdrive/w100/Makefile.am
2438===================================================================
2439--- /dev/null 1970-01-01 00:00:00.000000000 +0000
2440+++ git/hw/kdrive/w100/Makefile.am 2006-09-02 12:42:38.000000000 +0200
2441@@ -0,0 +1,56 @@
2442+if KDRIVEFBDEV
2443+FBDEV_INCLUDES =-I$(top_srcdir)/hw/kdrive/fbdev
2444+FBDEV_LIBS = $(top_builddir)/hw/kdrive/fbdev/libfbdev.a
2445+endif
2446+
2447+if KDRIVEVESA
2448+VESA_INCLUDES = -I$(top_srcdir)/hw/kdrive/vesa
2449+VESA_LIBS = $(top_builddir)/hw/kdrive/vesa/libvesa.a
2450+endif
2451+
2452+INCLUDES = \
2453+ @KDRIVE_INCS@ \
2454+ $(FBDEV_INCLUDES) \
2455+ $(VESA_INCLUDES) \
2456+ @KDRIVE_CFLAGS@
2457+
2458+bin_PROGRAMS = Xw100
2459+
2460+if TSLIB
2461+TSLIB_FLAG = -lts
2462+endif
2463+
2464+noinst_LIBRARIES = libw100.a
2465+
2466+libw100_a_SOURCES = \
2467+ ati_cursor.c \
2468+ ati_dma.c \
2469+ ati_dma.h \
2470+ ati_draw.c \
2471+ ati_draw.h \
2472+ ati_microcode.c \
2473+ ati.c \
2474+ ati.h \
2475+ w100_regs.h \
2476+ w100_const.h
2477+
2478+Xw100_SOURCES = \
2479+ ati_stub.c
2480+
2481+W100_LIBS = \
2482+ libw100.a \
2483+ $(FBDEV_LIBS) \
2484+ $(VESA_LIBS) \
2485+ $(DRI_LIBS) \
2486+ @KDRIVE_LIBS@
2487+
2488+Xw100_LDADD = \
2489+ $(W100_LIBS) \
2490+ @XSERVER_LIBS@ \
2491+ $(TSLIB_FLAG)
2492+
2493+
2494+Xw100_DEPENDENCIES = \
2495+ libw100.a \
2496+ $(FBDEV_LIBS) \
2497+ $(VESA_LIBS)
2498Index: git/hw/kdrive/w100/w100_const.h
2499===================================================================
2500--- /dev/null 1970-01-01 00:00:00.000000000 +0000
2501+++ git/hw/kdrive/w100/w100_const.h 2006-09-02 12:12:14.000000000 +0200
2502@@ -0,0 +1,25 @@
2503+#define CSQ_CNTL_MODE_FREERUN 0x8
2504+
2505+#define WB_BLOCK_SIZE_A_0 0
2506+#define WB_BLOCK_SIZE_A_1 1
2507+#define WB_BLOCK_SIZE_A_2 2
2508+#define WB_BLOCK_SIZE_A_3 3
2509+#define WB_BLOCK_SIZE_A_4 4
2510+
2511+#define DATATYPE_8BPP 2
2512+#define DATATYPE_ARGB1555 3
2513+#define DATATYPE_ARGB4444 5
2514+
2515+#define BRUSH_SOLIDCOLOR 13
2516+#define BRUSH_NONE 15
2517+
2518+#define OP_ROP 0
2519+#define OP_ARITHMETIC 1
2520+
2521+#define SOURCE_MEM_RECTANGULAR 2
2522+
2523+#define W100_MAXINT 0x1fff
2524+
2525+#define W100_CCE_PACKET3_PAINT_MULTI 0xc0001a00
2526+#define W100_CCE_PACKET3_BITBLT_MULTI 0xc0001b00
2527+
2528Index: git/hw/kdrive/w100/w100_regs.h
2529===================================================================
2530--- /dev/null 1970-01-01 00:00:00.000000000 +0000
2531+++ git/hw/kdrive/w100/w100_regs.h 2006-09-02 12:12:14.000000000 +0200
2532@@ -0,0 +1,3802 @@
2533+#ifndef _W100_REGS_H_
2534+#define _W100_REGS_H_
2535+
2536+/* Block CIF Start: */
2537+#define mmCHIP_ID 0x0000
2538+#define mmREVISION_ID 0x0004
2539+#define mmWRAP_BUF_A 0x0008
2540+#define mmWRAP_BUF_B 0x000C
2541+#define mmWRAP_TOP_DIR 0x0010
2542+#define mmWRAP_START_DIR 0x0014
2543+#define mmCIF_CNTL 0x0018
2544+#define mmCFGREG_BASE 0x001C
2545+#define mmCIF_IO 0x0020
2546+#define mmCIF_READ_DBG 0x0024
2547+#define mmCIF_WRITE_DBG 0x0028
2548+#define cfgIND_ADDR_A_0 0x0000
2549+#define cfgIND_ADDR_A_1 0x0001
2550+#define cfgIND_ADDR_A_2 0x0002
2551+#define cfgIND_DATA_A 0x0003
2552+#define cfgREG_BASE 0x0004
2553+#define cfgINTF_CNTL 0x0005
2554+#define cfgSTATUS 0x0006
2555+#define cfgCPU_DEFAULTS 0x0007
2556+#define cfgIND_ADDR_B_0 0x0008
2557+#define cfgIND_ADDR_B_1 0x0009
2558+#define cfgIND_ADDR_B_2 0x000A
2559+#define cfgIND_DATA_B 0x000B
2560+#define cfgPM4_RPTR 0x000C
2561+#define cfgSCRATCH 0x000D
2562+#define cfgPM4_WRPTR_0 0x000E
2563+#define cfgPM4_WRPTR_1 0x000F
2564+/* Block CIF End: */
2565+
2566+/* Block CP Start: */
2567+#define mmCP_RB_CNTL 0x0210
2568+#define mmCP_RB_BASE 0x0214
2569+#define mmCP_RB_RPTR_ADDR 0x0218
2570+#define mmCP_RB_RPTR 0x021C
2571+#define mmCP_RB_RPTR_WR 0x02F8
2572+#define mmCP_RB_WPTR 0x0220
2573+#define mmCP_IB_BASE 0x0228
2574+#define mmCP_IB_BUFSZ 0x022C
2575+#define mmCP_CSQ_CNTL 0x0230
2576+#define mmCP_CSQ_APER_PRIMARY 0x0300
2577+#define mmCP_CSQ_APER_INDIRECT 0x0340
2578+#define mmCP_ME_CNTL 0x0240
2579+#define mmCP_ME_RAM_ADDR 0x0244
2580+#define mmCP_ME_RAM_RADDR 0x0248
2581+#define mmCP_ME_RAM_DATAH 0x024C
2582+#define mmCP_ME_RAM_DATAL 0x0250
2583+#define mmCP_DEBUG 0x025C
2584+#define mmSCRATCH_REG0 0x0260
2585+#define mmSCRATCH_REG1 0x0264
2586+#define mmSCRATCH_REG2 0x0268
2587+#define mmSCRATCH_REG3 0x026C
2588+#define mmSCRATCH_REG4 0x0270
2589+#define mmSCRATCH_REG5 0x0274
2590+#define mmSCRATCH_UMSK 0x0280
2591+#define mmSCRATCH_ADDR 0x0284
2592+#define mmCP_CSQ_ADDR 0x02E4
2593+#define mmCP_CSQ_DATA 0x02E8
2594+#define mmCP_CSQ_STAT 0x02EC
2595+#define mmCP_STAT 0x02F0
2596+#define mmGEN_INT_CNTL 0x0200
2597+#define mmGEN_INT_STATUS 0x0204
2598+/* Block CP End: */
2599+
2600+/* Block DISPLAY Start: */
2601+#define mmLCD_FORMAT 0x0410
2602+#define mmGRAPHIC_CTRL 0x0414
2603+#define mmGRAPHIC_OFFSET 0x0418
2604+#define mmGRAPHIC_PITCH 0x041C
2605+#define mmCRTC_TOTAL 0x0420
2606+#define mmACTIVE_H_DISP 0x0424
2607+#define mmACTIVE_V_DISP 0x0428
2608+#define mmGRAPHIC_H_DISP 0x042C
2609+#define mmGRAPHIC_V_DISP 0x0430
2610+#define mmVIDEO_CTRL 0x0434
2611+#define mmGRAPHIC_KEY 0x0438
2612+#define mmVIDEO_Y_OFFSET 0x043C
2613+#define mmVIDEO_Y_PITCH 0x0440
2614+#define mmVIDEO_U_OFFSET 0x0444
2615+#define mmVIDEO_U_PITCH 0x0448
2616+#define mmVIDEO_V_OFFSET 0x044C
2617+#define mmVIDEO_V_PITCH 0x0450
2618+#define mmVIDEO_H_POS 0x0454
2619+#define mmVIDEO_V_POS 0x0458
2620+#define mmBRIGHTNESS_CNTL 0x045C
2621+#define mmCURSOR1_OFFSET 0x0460
2622+#define mmCURSOR1_H_POS 0x0464
2623+#define mmCURSOR1_V_POS 0x0468
2624+#define mmCURSOR1_COLOR0 0x046C
2625+#define mmCURSOR1_COLOR1 0x0470
2626+#define mmCURSOR2_OFFSET 0x0474
2627+#define mmCURSOR2_H_POS 0x0478
2628+#define mmCURSOR2_V_POS 0x047C
2629+#define mmCURSOR2_COLOR0 0x0480
2630+#define mmCURSOR2_COLOR1 0x0484
2631+#define mmDISP_INT_CNTL 0x0488
2632+#define mmCRTC_SS 0x048C
2633+#define mmCRTC_LS 0x0490
2634+#define mmCRTC_REV 0x0494
2635+#define mmCRTC_DCLK 0x049C
2636+#define mmCRTC_GS 0x04A0
2637+#define mmCRTC_VPOS_GS 0x04A4
2638+#define mmCRTC_GCLK 0x04A8
2639+#define mmCRTC_GOE 0x04AC
2640+#define mmCRTC_FRAME 0x04B0
2641+#define mmCRTC_FRAME_VPOS 0x04B4
2642+#define mmGPIO_DATA 0x04B8
2643+#define mmGPIO_CNTL1 0x04BC
2644+#define mmGPIO_CNTL2 0x04C0
2645+#define mmLCDD_CNTL1 0x04C4
2646+#define mmLCDD_CNTL2 0x04C8
2647+#define mmGENLCD_CNTL1 0x04CC
2648+#define mmGENLCD_CNTL2 0x04D0
2649+#define mmDISP_DEBUG 0x04D4
2650+#define mmDISP_DB_BUF_CNTL 0x04D8
2651+#define mmDISP_CRC_SIG 0x04DC
2652+#define mmCRTC_DEFAULT_COUNT 0x04E0
2653+#define mmLCD_BACKGROUND_COLOR 0x04E4
2654+#define mmCRTC_PS2 0x04E8
2655+#define mmCRTC_PS2_VPOS 0x04EC
2656+#define mmCRTC_PS1_ACTIVE 0x04F0
2657+#define mmCRTC_PS1_NACTIVE 0x04F4
2658+#define mmCRTC_GCLK_EXT 0x04F8
2659+#define mmCRTC_ALW 0x04FC
2660+#define mmCRTC_ALW_VPOS 0x0500
2661+#define mmCRTC_PSK 0x0504
2662+#define mmCRTC_PSK_HPOS 0x0508
2663+#define mmCRTC_CV4_START 0x050C
2664+#define mmCRTC_CV4_END 0x0510
2665+#define mmCRTC_CV4_HPOS 0x0514
2666+#define mmCRTC_ECK 0x051C
2667+#define mmREFRESH_CNTL 0x0520
2668+#define mmGENLCD_CNTL3 0x0524
2669+#define mmGPIO_DATA2 0x0528
2670+#define mmGPIO_CNTL3 0x052C
2671+#define mmGPIO_CNTL4 0x0530
2672+#define mmCHIP_STRAP 0x0534
2673+#define mmDISP_DEBUG2 0x0538
2674+#define mmDEBUG_BUS_CNTL 0x053C
2675+#define mmGAMMA_VALUE1 0x0540
2676+#define mmGAMMA_VALUE2 0x0544
2677+#define mmGAMMA_SLOPE 0x0548
2678+#define mmGEN_STATUS 0x054C
2679+#define mmHW_INT 0x0550
2680+/* Block DISPLAY End: */
2681+
2682+/* Block GFX Start: */
2683+#define mmDST_OFFSET 0x1004
2684+#define mmDST_PITCH 0x1008
2685+#define mmDST_PITCH_OFFSET 0x102C
2686+#define mmDST_X 0x101C
2687+#define mmDST_Y 0x1020
2688+#define mmDST_X_Y 0x1194
2689+#define mmDST_Y_X 0x1038
2690+#define mmDST_WIDTH 0x100C
2691+#define mmDST_HEIGHT 0x1010
2692+#define mmDST_WIDTH_HEIGHT 0x1198
2693+#define mmDST_HEIGHT_WIDTH 0x103C
2694+#define mmDST_HEIGHT_WIDTH_8 0x118C
2695+#define mmDST_HEIGHT_Y 0x11A0
2696+#define mmDST_WIDTH_X 0x1188
2697+#define mmDST_WIDTH_X_INCY 0x119C
2698+#define mmDST_LINE_START 0x1090
2699+#define mmDST_LINE_END 0x1094
2700+#define mmBRUSH_OFFSET 0x108C
2701+#define mmBRUSH_Y_X 0x1074
2702+#define mmDP_BRUSH_FRGD_CLR 0x107C
2703+#define mmDP_BRUSH_BKGD_CLR 0x1078
2704+#define mmSRC2_OFFSET 0x1060
2705+#define mmSRC2_PITCH 0x1064
2706+#define mmSRC2_PITCH_OFFSET 0x1068
2707+#define mmSRC2_X 0x1050
2708+#define mmSRC2_Y 0x1054
2709+#define mmSRC2_X_Y 0x1058
2710+#define mmSRC2_WIDTH 0x1080
2711+#define mmSRC2_HEIGHT 0x1084
2712+#define mmSRC2_INC 0x1088
2713+#define mmSRC_OFFSET 0x11AC
2714+#define mmSRC_PITCH 0x11B0
2715+#define mmSRC_PITCH_OFFSET 0x1028
2716+#define mmSRC_X 0x1014
2717+#define mmSRC_Y 0x1018
2718+#define mmSRC_X_Y 0x1190
2719+#define mmSRC_Y_X 0x1034
2720+#define mmSRC_WIDTH 0x1040
2721+#define mmSRC_HEIGHT 0x1044
2722+#define mmSRC_INC 0x1048
2723+#define mmHOST_DATA0 0x13C0
2724+#define mmHOST_DATA1 0x13C4
2725+#define mmHOST_DATA2 0x13C8
2726+#define mmHOST_DATA3 0x13CC
2727+#define mmHOST_DATA4 0x13D0
2728+#define mmHOST_DATA5 0x13D4
2729+#define mmHOST_DATA6 0x13D8
2730+#define mmHOST_DATA7 0x13DC
2731+#define mmHOST_DATA_LAST 0x13E0
2732+#define mmDP_SRC_FRGD_CLR 0x1240
2733+#define mmDP_SRC_BKGD_CLR 0x1244
2734+#define mmSC_LEFT 0x1140
2735+#define mmSC_RIGHT 0x1144
2736+#define mmSC_TOP 0x1148
2737+#define mmSC_BOTTOM 0x114C
2738+#define mmSRC_SC_RIGHT 0x1154
2739+#define mmSRC_SC_BOTTOM 0x115C
2740+#define mmDP_CNTL 0x11C8
2741+#define mmDP_CNTL_DST_DIR 0x11CC
2742+#define mmDP_DATATYPE 0x12C4
2743+#define mmDP_MIX 0x12C8
2744+#define mmDP_WRITE_MSK 0x12CC
2745+#define mmCLR_CMP_CLR_SRC 0x1234
2746+#define mmCLR_CMP_CLR_DST 0x1238
2747+#define mmCLR_CMP_CNTL 0x1230
2748+#define mmCLR_CMP_MSK 0x123C
2749+#define mmDEFAULT_PITCH_OFFSET 0x10A0
2750+#define mmDEFAULT_SC_BOTTOM_RIGHT 0x10A8
2751+#define mmDEFAULT2_SC_BOTTOM_RIGHT 0x10AC
2752+#define mmREF1_PITCH_OFFSET 0x10B8
2753+#define mmREF2_PITCH_OFFSET 0x10BC
2754+#define mmREF3_PITCH_OFFSET 0x10C0
2755+#define mmREF4_PITCH_OFFSET 0x10C4
2756+#define mmREF5_PITCH_OFFSET 0x10C8
2757+#define mmREF6_PITCH_OFFSET 0x10CC
2758+#define mmDP_GUI_MASTER_CNTL 0x106C
2759+#define mmSC_TOP_LEFT 0x11BC
2760+#define mmSC_BOTTOM_RIGHT 0x11C0
2761+#define mmSRC_SC_BOTTOM_RIGHT 0x11C4
2762+#define mmGLOBAL_ALPHA 0x1210
2763+#define mmFILTER_COEF 0x1214
2764+#define mmMVC_CNTL_START 0x11E0
2765+#define mmE2_ARITHMETIC_CNTL 0x1220
2766+#define mmDEBUG0 0x1280
2767+#define mmDEBUG1 0x1284
2768+#define mmDEBUG2 0x1288
2769+#define mmDEBUG3 0x128C
2770+#define mmDEBUG4 0x1290
2771+#define mmDEBUG5 0x1294
2772+#define mmDEBUG6 0x1298
2773+#define mmDEBUG7 0x129C
2774+#define mmDEBUG8 0x12A0
2775+#define mmDEBUG9 0x12A4
2776+#define mmDEBUG10 0x12A8
2777+#define mmDEBUG11 0x12AC
2778+#define mmDEBUG12 0x12B0
2779+#define mmDEBUG13 0x12B4
2780+#define mmDEBUG14 0x12B8
2781+#define mmDEBUG15 0x12BC
2782+#define mmENG_CNTL 0x13E8
2783+#define mmENG_PERF_CNT 0x13F0
2784+/* Block GFX End: */
2785+
2786+/* Block IDCT Start: */
2787+#define mmIDCT_RUNS 0x0C00
2788+#define mmIDCT_LEVELS 0x0C04
2789+#define mmIDCT_CONTROL 0x0C3C
2790+#define mmIDCT_AUTH_CONTROL 0x0C08
2791+#define mmIDCT_AUTH 0x0C0C
2792+/* Block IDCT End: */
2793+
2794+/* Block MC Start: */
2795+#define mmMEM_CNTL 0x0180
2796+#define mmMEM_ARB 0x0184
2797+#define mmMC_FB_LOCATION 0x0188
2798+#define mmMEM_EXT_CNTL 0x018C
2799+#define mmMC_EXT_MEM_LOCATION 0x0190
2800+#define mmMEM_EXT_TIMING_CNTL 0x0194
2801+#define mmMEM_SDRAM_MODE_REG 0x0198
2802+#define mmMEM_IO_CNTL 0x019C
2803+#define mmMC_DEBUG 0x01A0
2804+#define mmMC_BIST_CTRL 0x01A4
2805+#define mmMC_BIST_COLLAR_READ 0x01A8
2806+#define mmTC_MISMATCH 0x01AC
2807+#define mmMC_PERF_MON_CNTL 0x01B0
2808+#define mmMC_PERF_COUNTERS 0x01B4
2809+/* Block MC End: */
2810+
2811+/* Block RBBM Start: */
2812+#define mmWAIT_UNTIL 0x1400
2813+#define mmISYNC_CNTL 0x1404
2814+#define mmRBBM_GUICNTL 0x1408
2815+#define mmRBBM_STATUS 0x0140
2816+#define mmRBBM_STATUS_alt_1 0x140C
2817+#define mmRBBM_CNTL 0x0144
2818+#define mmRBBM_SOFT_RESET 0x0148
2819+#define mmNQWAIT_UNTIL 0x0150
2820+#define mmRBBM_DEBUG 0x016C
2821+#define mmRBBM_CMDFIFO_ADDR 0x0170
2822+#define mmRBBM_CMDFIFO_DATAL 0x0174
2823+#define mmRBBM_CMDFIFO_DATAH 0x0178
2824+#define mmRBBM_CMDFIFO_STAT 0x017C
2825+/* Block RBBM End: */
2826+
2827+/* Block CG Start: */
2828+#define mmCLK_PIN_CNTL 0x0080
2829+#define mmPLL_REF_FB_DIV 0x0084
2830+#define mmPLL_CNTL 0x0088
2831+#define mmSCLK_CNTL 0x008C
2832+#define mmPCLK_CNTL 0x0090
2833+#define mmCLK_TEST_CNTL 0x0094
2834+#define mmPWRMGT_CNTL 0x0098
2835+#define mmPWRMGT_STATUS 0x009C
2836+/* Block CG End: */
2837+
2838+
2839+/* data structure definitions */
2840+
2841+typedef struct _chip_id_t {
2842+ unsigned long vendor_id : 16;
2843+ unsigned long device_id : 16;
2844+ } chip_id_t;
2845+
2846+typedef union {
2847+ unsigned long val : 32;
2848+ chip_id_t f;
2849+} chip_id_u;
2850+
2851+typedef struct _revision_id_t {
2852+ unsigned long minor_rev_id : 4;
2853+ unsigned long major_rev_id : 4;
2854+ unsigned long : 24;
2855+ } revision_id_t;
2856+
2857+typedef union {
2858+ unsigned long val : 32;
2859+ revision_id_t f;
2860+} revision_id_u;
2861+
2862+typedef struct _wrap_buf_a_t {
2863+ unsigned long offset_addr_a : 24;
2864+ unsigned long block_size_a : 3;
2865+ unsigned long : 5;
2866+ } wrap_buf_a_t;
2867+
2868+typedef union {
2869+ unsigned long val : 32;
2870+ wrap_buf_a_t f;
2871+} wrap_buf_a_u;
2872+
2873+typedef struct _wrap_buf_b_t {
2874+ unsigned long offset_addr_b : 24;
2875+ unsigned long block_size_b : 3;
2876+ unsigned long : 5;
2877+ } wrap_buf_b_t;
2878+
2879+typedef union {
2880+ unsigned long val : 32;
2881+ wrap_buf_b_t f;
2882+} wrap_buf_b_u;
2883+
2884+typedef struct _wrap_top_dir_t {
2885+ unsigned long top_addr : 23;
2886+ unsigned long : 9;
2887+ } wrap_top_dir_t;
2888+
2889+typedef union {
2890+ unsigned long val : 32;
2891+ wrap_top_dir_t f;
2892+} wrap_top_dir_u;
2893+
2894+typedef struct _wrap_start_dir_t {
2895+ unsigned long start_addr : 23;
2896+ unsigned long : 9;
2897+ } wrap_start_dir_t;
2898+
2899+typedef union {
2900+ unsigned long val : 32;
2901+ wrap_start_dir_t f;
2902+} wrap_start_dir_u;
2903+
2904+typedef struct _cif_cntl_t {
2905+ unsigned long swap_reg : 2;
2906+ unsigned long swap_fbuf_1 : 2;
2907+ unsigned long swap_fbuf_2 : 2;
2908+ unsigned long swap_fbuf_3 : 2;
2909+ unsigned long pmi_int_disable : 1;
2910+ unsigned long pmi_schmen_disable : 1;
2911+ unsigned long intb_oe : 1;
2912+ unsigned long en_wait_to_compensate_dq_prop_dly : 1;
2913+ unsigned long compensate_wait_rd_size : 2;
2914+ unsigned long wait_asserted_timeout_val : 2;
2915+ unsigned long wait_masked_val : 2;
2916+ unsigned long en_wait_timeout : 1;
2917+ unsigned long en_one_clk_setup_before_wait : 1;
2918+ unsigned long interrupt_active_high : 1;
2919+ unsigned long en_overwrite_straps : 1;
2920+ unsigned long strap_wait_active_hi : 1;
2921+ unsigned long lat_busy_count : 2;
2922+ unsigned long lat_rd_pm4_sclk_busy : 1;
2923+ unsigned long dis_system_bits : 1;
2924+ unsigned long dis_mr : 1;
2925+ unsigned long cif_spare_1 : 4;
2926+ } cif_cntl_t;
2927+
2928+typedef union {
2929+ unsigned long val : 32;
2930+ cif_cntl_t f;
2931+} cif_cntl_u;
2932+
2933+typedef struct _cfgreg_base_t {
2934+ unsigned long cfgreg_base : 24;
2935+ unsigned long : 8;
2936+ } cfgreg_base_t;
2937+
2938+typedef union {
2939+ unsigned long val : 32;
2940+ cfgreg_base_t f;
2941+} cfgreg_base_u;
2942+
2943+typedef struct _cif_io_t {
2944+ unsigned long dq_srp : 1;
2945+ unsigned long dq_srn : 1;
2946+ unsigned long dq_sp : 4;
2947+ unsigned long dq_sn : 4;
2948+ unsigned long waitb_srp : 1;
2949+ unsigned long waitb_srn : 1;
2950+ unsigned long waitb_sp : 4;
2951+ unsigned long waitb_sn : 4;
2952+ unsigned long intb_srp : 1;
2953+ unsigned long intb_srn : 1;
2954+ unsigned long intb_sp : 4;
2955+ unsigned long intb_sn : 4;
2956+ unsigned long : 2;
2957+ } cif_io_t;
2958+
2959+typedef union {
2960+ unsigned long val : 32;
2961+ cif_io_t f;
2962+} cif_io_u;
2963+
2964+typedef struct _cif_read_dbg_t {
2965+ unsigned long unpacker_pre_fetch_trig_gen : 2;
2966+ unsigned long dly_second_rd_fetch_trig : 1;
2967+ unsigned long rst_rd_burst_id : 1;
2968+ unsigned long dis_rd_burst_id : 1;
2969+ unsigned long en_block_rd_when_packer_is_not_emp : 1;
2970+ unsigned long dis_pre_fetch_cntl_sm : 1;
2971+ unsigned long rbbm_chrncy_dis : 1;
2972+ unsigned long rbbm_rd_after_wr_lat : 2;
2973+ unsigned long dis_be_during_rd : 1;
2974+ unsigned long one_clk_invalidate_pulse : 1;
2975+ unsigned long dis_chnl_priority : 1;
2976+ unsigned long rst_read_path_a_pls : 1;
2977+ unsigned long rst_read_path_b_pls : 1;
2978+ unsigned long dis_reg_rd_fetch_trig : 1;
2979+ unsigned long dis_rd_fetch_trig_from_ind_addr : 1;
2980+ unsigned long dis_rd_same_byte_to_trig_fetch : 1;
2981+ unsigned long dis_dir_wrap : 1;
2982+ unsigned long dis_ring_buf_to_force_dec : 1;
2983+ unsigned long dis_addr_comp_in_16bit : 1;
2984+ unsigned long clr_w : 1;
2985+ unsigned long err_rd_tag_is_3 : 1;
2986+ unsigned long err_load_when_ful_a : 1;
2987+ unsigned long err_load_when_ful_b : 1;
2988+ unsigned long : 7;
2989+ } cif_read_dbg_t;
2990+
2991+typedef union {
2992+ unsigned long val : 32;
2993+ cif_read_dbg_t f;
2994+} cif_read_dbg_u;
2995+
2996+typedef struct _cif_write_dbg_t {
2997+ unsigned long packer_timeout_count : 2;
2998+ unsigned long en_upper_load_cond : 1;
2999+ unsigned long en_chnl_change_cond : 1;
3000+ unsigned long dis_addr_comp_cond : 1;
3001+ unsigned long dis_load_same_byte_addr_cond : 1;
3002+ unsigned long dis_timeout_cond : 1;
3003+ unsigned long dis_timeout_during_rbbm : 1;
3004+ unsigned long dis_packer_ful_during_rbbm_timeout : 1;
3005+ unsigned long en_dword_split_to_rbbm : 1;
3006+ unsigned long en_dummy_val : 1;
3007+ unsigned long dummy_val_sel : 1;
3008+ unsigned long mask_pm4_wrptr_dec : 1;
3009+ unsigned long dis_mc_clean_cond : 1;
3010+ unsigned long err_two_reqi_during_ful : 1;
3011+ unsigned long err_reqi_during_idle_clk : 1;
3012+ unsigned long err_global : 1;
3013+ unsigned long en_wr_buf_dbg_load : 1;
3014+ unsigned long en_wr_buf_dbg_path : 1;
3015+ unsigned long sel_wr_buf_byte : 3;
3016+ unsigned long dis_rd_flush_wr : 1;
3017+ unsigned long dis_packer_ful_cond : 1;
3018+ unsigned long dis_invalidate_by_ops_chnl : 1;
3019+ unsigned long en_halt_when_reqi_err : 1;
3020+ unsigned long cif_spare_2 : 5;
3021+ unsigned long : 1;
3022+ } cif_write_dbg_t;
3023+
3024+typedef union {
3025+ unsigned long val : 32;
3026+ cif_write_dbg_t f;
3027+} cif_write_dbg_u;
3028+
3029+typedef struct _ind_addr_a_0_t {
3030+ unsigned char ind_addr_a_0 : 8;
3031+ } ind_addr_a_0_t;
3032+
3033+typedef union {
3034+ unsigned char val : 8;
3035+ ind_addr_a_0_t f;
3036+} ind_addr_a_0_u;
3037+
3038+typedef struct _ind_addr_a_1_t {
3039+ unsigned char ind_addr_a_1 : 8;
3040+ } ind_addr_a_1_t;
3041+
3042+typedef union {
3043+ unsigned char val : 8;
3044+ ind_addr_a_1_t f;
3045+} ind_addr_a_1_u;
3046+
3047+typedef struct _ind_addr_a_2_t {
3048+ unsigned char ind_addr_a_2 : 8;
3049+ } ind_addr_a_2_t;
3050+
3051+typedef union {
3052+ unsigned char val : 8;
3053+ ind_addr_a_2_t f;
3054+} ind_addr_a_2_u;
3055+
3056+typedef struct _ind_data_a_t {
3057+ unsigned char ind_data_a : 8;
3058+ } ind_data_a_t;
3059+
3060+typedef union {
3061+ unsigned char val : 8;
3062+ ind_data_a_t f;
3063+} ind_data_a_u;
3064+
3065+typedef struct _reg_base_t {
3066+ unsigned char reg_base : 8;
3067+ } reg_base_t;
3068+
3069+typedef union {
3070+ unsigned char val : 8;
3071+ reg_base_t f;
3072+} reg_base_u;
3073+
3074+typedef struct _intf_cntl_t {
3075+ unsigned char ad_inc_a : 1;
3076+ unsigned char ring_buf_a : 1;
3077+ unsigned char rd_fetch_trigger_a : 1;
3078+ unsigned char rd_data_rdy_a : 1;
3079+ unsigned char ad_inc_b : 1;
3080+ unsigned char ring_buf_b : 1;
3081+ unsigned char rd_fetch_trigger_b : 1;
3082+ unsigned char rd_data_rdy_b : 1;
3083+ } intf_cntl_t;
3084+
3085+typedef union {
3086+ unsigned char val : 8;
3087+ intf_cntl_t f;
3088+} intf_cntl_u;
3089+
3090+typedef struct _status_t {
3091+ unsigned char wr_fifo_available_space : 2;
3092+ unsigned char fbuf_wr_pipe_emp : 1;
3093+ unsigned char soft_reset : 1;
3094+ unsigned char system_pwm_mode : 2;
3095+ unsigned char mem_access_dis : 1;
3096+ unsigned char en_pre_fetch : 1;
3097+ } status_t;
3098+
3099+typedef union {
3100+ unsigned char val : 8;
3101+ status_t f;
3102+} status_u;
3103+
3104+typedef struct _cpu_defaults_t {
3105+ unsigned char unpack_rd_data : 1;
3106+ unsigned char access_ind_addr_a : 1;
3107+ unsigned char access_ind_addr_b : 1;
3108+ unsigned char access_scratch_reg : 1;
3109+ unsigned char pack_wr_data : 1;
3110+ unsigned char transition_size : 1;
3111+ unsigned char en_read_buf_mode : 1;
3112+ unsigned char rd_fetch_scratch : 1;
3113+ } cpu_defaults_t;
3114+
3115+typedef union {
3116+ unsigned char val : 8;
3117+ cpu_defaults_t f;
3118+} cpu_defaults_u;
3119+
3120+typedef struct _ind_addr_b_0_t {
3121+ unsigned char ind_addr_b_0 : 8;
3122+ } ind_addr_b_0_t;
3123+
3124+typedef union {
3125+ unsigned char val : 8;
3126+ ind_addr_b_0_t f;
3127+} ind_addr_b_0_u;
3128+
3129+typedef struct _ind_addr_b_1_t {
3130+ unsigned char ind_addr_b_1 : 8;
3131+ } ind_addr_b_1_t;
3132+
3133+typedef union {
3134+ unsigned char val : 8;
3135+ ind_addr_b_1_t f;
3136+} ind_addr_b_1_u;
3137+
3138+typedef struct _ind_addr_b_2_t {
3139+ unsigned char ind_addr_b_2 : 8;
3140+ } ind_addr_b_2_t;
3141+
3142+typedef union {
3143+ unsigned char val : 8;
3144+ ind_addr_b_2_t f;
3145+} ind_addr_b_2_u;
3146+
3147+typedef struct _ind_data_b_t {
3148+ unsigned char ind_data_b : 8;
3149+ } ind_data_b_t;
3150+
3151+typedef union {
3152+ unsigned char val : 8;
3153+ ind_data_b_t f;
3154+} ind_data_b_u;
3155+
3156+typedef struct _pm4_rptr_t {
3157+ unsigned char pm4_rptr : 8;
3158+ } pm4_rptr_t;
3159+
3160+typedef union {
3161+ unsigned char val : 8;
3162+ pm4_rptr_t f;
3163+} pm4_rptr_u;
3164+
3165+typedef struct _scratch_t {
3166+ unsigned char scratch : 8;
3167+ } scratch_t;
3168+
3169+typedef union {
3170+ unsigned char val : 8;
3171+ scratch_t f;
3172+} scratch_u;
3173+
3174+typedef struct _pm4_wrptr_0_t {
3175+ unsigned char pm4_wrptr_0 : 8;
3176+ } pm4_wrptr_0_t;
3177+
3178+typedef union {
3179+ unsigned char val : 8;
3180+ pm4_wrptr_0_t f;
3181+} pm4_wrptr_0_u;
3182+
3183+typedef struct _pm4_wrptr_1_t {
3184+ unsigned char pm4_wrptr_1 : 6;
3185+ unsigned char rd_fetch_pm4_rptr : 1;
3186+ unsigned char wrptr_atomic_update_w : 1;
3187+ } pm4_wrptr_1_t;
3188+
3189+typedef union {
3190+ unsigned char val : 8;
3191+ pm4_wrptr_1_t f;
3192+} pm4_wrptr_1_u;
3193+
3194+typedef struct _cp_rb_cntl_t {
3195+ unsigned long rb_bufsz : 6;
3196+ unsigned long : 2;
3197+ unsigned long rb_blksz : 6;
3198+ unsigned long : 2;
3199+ unsigned long buf_swap : 2;
3200+ unsigned long max_fetch : 2;
3201+ unsigned long : 7;
3202+ unsigned long rb_no_update : 1;
3203+ unsigned long : 3;
3204+ unsigned long rb_rptr_wr_ena : 1;
3205+ } cp_rb_cntl_t;
3206+
3207+typedef union {
3208+ unsigned long val : 32;
3209+ cp_rb_cntl_t f;
3210+} cp_rb_cntl_u;
3211+
3212+typedef struct _cp_rb_base_t {
3213+ unsigned long : 2;
3214+ unsigned long rb_base : 22;
3215+ unsigned long : 8;
3216+ } cp_rb_base_t;
3217+
3218+typedef union {
3219+ unsigned long val : 32;
3220+ cp_rb_base_t f;
3221+} cp_rb_base_u;
3222+
3223+typedef struct _cp_rb_rptr_addr_t {
3224+ unsigned long rb_rptr_swap : 2;
3225+ unsigned long rb_rptr_addr : 22;
3226+ unsigned long : 8;
3227+ } cp_rb_rptr_addr_t;
3228+
3229+typedef union {
3230+ unsigned long val : 32;
3231+ cp_rb_rptr_addr_t f;
3232+} cp_rb_rptr_addr_u;
3233+
3234+typedef struct _cp_rb_rptr_t {
3235+ unsigned long rb_rptr : 23;
3236+ unsigned long : 9;
3237+ } cp_rb_rptr_t;
3238+
3239+typedef union {
3240+ unsigned long val : 32;
3241+ cp_rb_rptr_t f;
3242+} cp_rb_rptr_u;
3243+
3244+typedef struct _cp_rb_rptr_wr_t {
3245+ unsigned long rb_rptr_wr : 23;
3246+ unsigned long : 9;
3247+ } cp_rb_rptr_wr_t;
3248+
3249+typedef union {
3250+ unsigned long val : 32;
3251+ cp_rb_rptr_wr_t f;
3252+} cp_rb_rptr_wr_u;
3253+
3254+typedef struct _cp_rb_wptr_t {
3255+ unsigned long rb_wptr : 23;
3256+ unsigned long : 9;
3257+ } cp_rb_wptr_t;
3258+
3259+typedef union {
3260+ unsigned long val : 32;
3261+ cp_rb_wptr_t f;
3262+} cp_rb_wptr_u;
3263+
3264+typedef struct _cp_ib_base_t {
3265+ unsigned long : 2;
3266+ unsigned long ib_base : 22;
3267+ unsigned long : 8;
3268+ } cp_ib_base_t;
3269+
3270+typedef union {
3271+ unsigned long val : 32;
3272+ cp_ib_base_t f;
3273+} cp_ib_base_u;
3274+
3275+typedef struct _cp_ib_bufsz_t {
3276+ unsigned long ib_bufsz : 23;
3277+ unsigned long : 9;
3278+ } cp_ib_bufsz_t;
3279+
3280+typedef union {
3281+ unsigned long val : 32;
3282+ cp_ib_bufsz_t f;
3283+} cp_ib_bufsz_u;
3284+
3285+typedef struct _cp_csq_cntl_t {
3286+ unsigned long csq_cnt_primary : 8;
3287+ unsigned long csq_cnt_indirect : 8;
3288+ unsigned long : 12;
3289+ unsigned long csq_mode : 4;
3290+ } cp_csq_cntl_t;
3291+
3292+typedef union {
3293+ unsigned long val : 32;
3294+ cp_csq_cntl_t f;
3295+} cp_csq_cntl_u;
3296+
3297+typedef struct _cp_csq_aper_primary_t {
3298+ unsigned long cp_csq_aper_primary : 32;
3299+ } cp_csq_aper_primary_t;
3300+
3301+typedef union {
3302+ unsigned long val : 32;
3303+ cp_csq_aper_primary_t f;
3304+} cp_csq_aper_primary_u;
3305+
3306+typedef struct _cp_csq_aper_indirect_t {
3307+ unsigned long cp_csq_aper_indirect : 32;
3308+ } cp_csq_aper_indirect_t;
3309+
3310+typedef union {
3311+ unsigned long val : 32;
3312+ cp_csq_aper_indirect_t f;
3313+} cp_csq_aper_indirect_u;
3314+
3315+typedef struct _cp_me_cntl_t {
3316+ unsigned long me_stat : 16;
3317+ unsigned long me_statmux : 5;
3318+ unsigned long : 8;
3319+ unsigned long me_busy : 1;
3320+ unsigned long me_mode : 1;
3321+ unsigned long me_step : 1;
3322+ } cp_me_cntl_t;
3323+
3324+typedef union {
3325+ unsigned long val : 32;
3326+ cp_me_cntl_t f;
3327+} cp_me_cntl_u;
3328+
3329+typedef struct _cp_me_ram_addr_t {
3330+ unsigned long me_ram_addr : 8;
3331+ unsigned long : 24;
3332+ } cp_me_ram_addr_t;
3333+
3334+typedef union {
3335+ unsigned long val : 32;
3336+ cp_me_ram_addr_t f;
3337+} cp_me_ram_addr_u;
3338+
3339+typedef struct _cp_me_ram_raddr_t {
3340+ unsigned long me_ram_raddr : 8;
3341+ unsigned long : 24;
3342+ } cp_me_ram_raddr_t;
3343+
3344+typedef union {
3345+ unsigned long val : 32;
3346+ cp_me_ram_raddr_t f;
3347+} cp_me_ram_raddr_u;
3348+
3349+typedef struct _cp_me_ram_datah_t {
3350+ unsigned long me_ram_datah : 6;
3351+ unsigned long : 26;
3352+ } cp_me_ram_datah_t;
3353+
3354+typedef union {
3355+ unsigned long val : 32;
3356+ cp_me_ram_datah_t f;
3357+} cp_me_ram_datah_u;
3358+
3359+typedef struct _cp_me_ram_datal_t {
3360+ unsigned long me_ram_datal : 32;
3361+ } cp_me_ram_datal_t;
3362+
3363+typedef union {
3364+ unsigned long val : 32;
3365+ cp_me_ram_datal_t f;
3366+} cp_me_ram_datal_u;
3367+
3368+typedef struct _cp_debug_t {
3369+ unsigned long cp_debug : 32;
3370+ } cp_debug_t;
3371+
3372+typedef union {
3373+ unsigned long val : 32;
3374+ cp_debug_t f;
3375+} cp_debug_u;
3376+
3377+typedef struct _scratch_reg0_t {
3378+ unsigned long scratch_reg0 : 32;
3379+ } scratch_reg0_t;
3380+
3381+typedef union {
3382+ unsigned long val : 32;
3383+ scratch_reg0_t f;
3384+} scratch_reg0_u;
3385+
3386+typedef struct _scratch_reg1_t {
3387+ unsigned long scratch_reg1 : 32;
3388+ } scratch_reg1_t;
3389+
3390+typedef union {
3391+ unsigned long val : 32;
3392+ scratch_reg1_t f;
3393+} scratch_reg1_u;
3394+
3395+typedef struct _scratch_reg2_t {
3396+ unsigned long scratch_reg2 : 32;
3397+ } scratch_reg2_t;
3398+
3399+typedef union {
3400+ unsigned long val : 32;
3401+ scratch_reg2_t f;
3402+} scratch_reg2_u;
3403+
3404+typedef struct _scratch_reg3_t {
3405+ unsigned long scratch_reg3 : 32;
3406+ } scratch_reg3_t;
3407+
3408+typedef union {
3409+ unsigned long val : 32;
3410+ scratch_reg3_t f;
3411+} scratch_reg3_u;
3412+
3413+typedef struct _scratch_reg4_t {
3414+ unsigned long scratch_reg4 : 32;
3415+ } scratch_reg4_t;
3416+
3417+typedef union {
3418+ unsigned long val : 32;
3419+ scratch_reg4_t f;
3420+} scratch_reg4_u;
3421+
3422+typedef struct _scratch_reg5_t {
3423+ unsigned long scratch_reg5 : 32;
3424+ } scratch_reg5_t;
3425+
3426+typedef union {
3427+ unsigned long val : 32;
3428+ scratch_reg5_t f;
3429+} scratch_reg5_u;
3430+
3431+typedef struct _scratch_umsk_t {
3432+ unsigned long scratch_umsk : 6;
3433+ unsigned long : 10;
3434+ unsigned long scratch_swap : 2;
3435+ unsigned long : 14;
3436+ } scratch_umsk_t;
3437+
3438+typedef union {
3439+ unsigned long val : 32;
3440+ scratch_umsk_t f;
3441+} scratch_umsk_u;
3442+
3443+typedef struct _scratch_addr_t {
3444+ unsigned long : 5;
3445+ unsigned long scratch_addr : 27;
3446+ } scratch_addr_t;
3447+
3448+typedef union {
3449+ unsigned long val : 32;
3450+ scratch_addr_t f;
3451+} scratch_addr_u;
3452+
3453+typedef struct _cp_csq_addr_t {
3454+ unsigned long : 2;
3455+ unsigned long csq_addr : 8;
3456+ unsigned long : 22;
3457+ } cp_csq_addr_t;
3458+
3459+typedef union {
3460+ unsigned long val : 32;
3461+ cp_csq_addr_t f;
3462+} cp_csq_addr_u;
3463+
3464+typedef struct _cp_csq_data_t {
3465+ unsigned long csq_data : 32;
3466+ } cp_csq_data_t;
3467+
3468+typedef union {
3469+ unsigned long val : 32;
3470+ cp_csq_data_t f;
3471+} cp_csq_data_u;
3472+
3473+typedef struct _cp_csq_stat_t {
3474+ unsigned long csq_rptr_primary : 8;
3475+ unsigned long csq_wptr_primary : 8;
3476+ unsigned long csq_rptr_indirect : 8;
3477+ unsigned long csq_wptr_indirect : 8;
3478+ } cp_csq_stat_t;
3479+
3480+typedef union {
3481+ unsigned long val : 32;
3482+ cp_csq_stat_t f;
3483+} cp_csq_stat_u;
3484+
3485+typedef struct _cp_stat_t {
3486+ unsigned long mru_busy : 1;
3487+ unsigned long mwu_busy : 1;
3488+ unsigned long rsiu_busy : 1;
3489+ unsigned long rciu_busy : 1;
3490+ unsigned long : 5;
3491+ unsigned long csf_primary_busy : 1;
3492+ unsigned long csf_indirect_busy : 1;
3493+ unsigned long csq_primary_busy : 1;
3494+ unsigned long csq_indirect_busy : 1;
3495+ unsigned long csi_busy : 1;
3496+ unsigned long : 14;
3497+ unsigned long guidma_busy : 1;
3498+ unsigned long viddma_busy : 1;
3499+ unsigned long cmdstrm_busy : 1;
3500+ unsigned long cp_busy : 1;
3501+ } cp_stat_t;
3502+
3503+typedef union {
3504+ unsigned long val : 32;
3505+ cp_stat_t f;
3506+} cp_stat_u;
3507+
3508+typedef struct _gen_int_cntl_t {
3509+ unsigned long crtc_vblank_mask : 1;
3510+ unsigned long crtc_vline_mask : 1;
3511+ unsigned long crtc_hwint1_mask : 1;
3512+ unsigned long crtc_hwint2_mask : 1;
3513+ unsigned long : 15;
3514+ unsigned long gui_idle_mask : 1;
3515+ unsigned long : 8;
3516+ unsigned long pm4_idle_int_mask : 1;
3517+ unsigned long dvi_i2c_int_mask : 1;
3518+ unsigned long : 2;
3519+ } gen_int_cntl_t;
3520+
3521+typedef union {
3522+ unsigned long val : 32;
3523+ gen_int_cntl_t f;
3524+} gen_int_cntl_u;
3525+
3526+typedef struct _gen_int_status_rd_t {
3527+ unsigned long crtc_vblank_stat : 1;
3528+ unsigned long crtc_vline_stat : 1;
3529+ unsigned long crtc_hwint1_stat : 1;
3530+ unsigned long crtc_hwint2_stat : 1;
3531+ unsigned long : 15;
3532+ unsigned long gui_idle_stat : 1;
3533+ unsigned long : 8;
3534+ unsigned long pm4_idle_int_stat : 1;
3535+ unsigned long dvi_i2c_int_stat : 1;
3536+ unsigned long : 2;
3537+ } gen_int_status_rd_t;
3538+
3539+typedef union {
3540+ unsigned long val : 32;
3541+ gen_int_status_rd_t f;
3542+} gen_int_status_rd_u;
3543+
3544+typedef struct _gen_int_status_wr_t {
3545+ unsigned long crtc_vblank_stat_ak : 1;
3546+ unsigned long crtc_vline_stat_ak : 1;
3547+ unsigned long crtc_hwint1_stat_ak : 1;
3548+ unsigned long crtc_hwint2_stat_ak : 1;
3549+ unsigned long : 15;
3550+ unsigned long gui_idle_stat_ak : 1;
3551+ unsigned long : 8;
3552+ unsigned long pm4_idle_int_ak : 1;
3553+ unsigned long dvi_i2c_int_ak : 1;
3554+ unsigned long : 2;
3555+ } gen_int_status_wr_t;
3556+
3557+typedef union {
3558+ unsigned long val : 32;
3559+ gen_int_status_wr_t f;
3560+} gen_int_status_wr_u;
3561+
3562+typedef struct _lcd_format_t {
3563+ unsigned long lcd_type : 4;
3564+ unsigned long color_to_mono : 1;
3565+ unsigned long data_inv : 1;
3566+ unsigned long stn_fm : 2;
3567+ unsigned long tft_fm : 2;
3568+ unsigned long scan_lr_en : 1;
3569+ unsigned long scan_ud_en : 1;
3570+ unsigned long pol_inv : 1;
3571+ unsigned long rst_fm : 1;
3572+ unsigned long yuv_to_rgb : 1;
3573+ unsigned long hr_tft : 1;
3574+ unsigned long ulc_panel : 1;
3575+ unsigned long : 15;
3576+ } lcd_format_t;
3577+
3578+typedef union {
3579+ unsigned long val : 32;
3580+ lcd_format_t f;
3581+} lcd_format_u;
3582+
3583+typedef struct _graphic_ctrl_t {
3584+ unsigned long color_depth : 3;
3585+ unsigned long portrait_mode : 2;
3586+ unsigned long low_power_on : 1;
3587+ unsigned long req_freq : 4;
3588+ unsigned long en_crtc : 1;
3589+ unsigned long en_graphic_req : 1;
3590+ unsigned long en_graphic_crtc : 1;
3591+ unsigned long total_req_graphic : 9;
3592+ unsigned long lcd_pclk_on : 1;
3593+ unsigned long lcd_sclk_on : 1;
3594+ unsigned long pclk_running : 1;
3595+ unsigned long sclk_running : 1;
3596+ unsigned long : 6;
3597+ } graphic_ctrl_t;
3598+
3599+typedef union {
3600+ unsigned long val : 32;
3601+ graphic_ctrl_t f;
3602+} graphic_ctrl_u;
3603+
3604+typedef struct _graphic_offset_t {
3605+ unsigned long graphic_offset : 24;
3606+ unsigned long : 8;
3607+ } graphic_offset_t;
3608+
3609+typedef union {
3610+ unsigned long val : 32;
3611+ graphic_offset_t f;
3612+} graphic_offset_u;
3613+
3614+typedef struct _graphic_pitch_t {
3615+ unsigned long graphic_pitch : 11;
3616+ unsigned long : 21;
3617+ } graphic_pitch_t;
3618+
3619+typedef union {
3620+ unsigned long val : 32;
3621+ graphic_pitch_t f;
3622+} graphic_pitch_u;
3623+
3624+typedef struct _crtc_total_t {
3625+ unsigned long crtc_h_total : 10;
3626+ unsigned long : 6;
3627+ unsigned long crtc_v_total : 10;
3628+ unsigned long : 6;
3629+ } crtc_total_t;
3630+
3631+typedef union {
3632+ unsigned long val : 32;
3633+ crtc_total_t f;
3634+} crtc_total_u;
3635+
3636+typedef struct _active_h_disp_t {
3637+ unsigned long active_h_start : 10;
3638+ unsigned long : 6;
3639+ unsigned long active_h_end : 10;
3640+ unsigned long : 6;
3641+ } active_h_disp_t;
3642+
3643+typedef union {
3644+ unsigned long val : 32;
3645+ active_h_disp_t f;
3646+} active_h_disp_u;
3647+
3648+typedef struct _active_v_disp_t {
3649+ unsigned long active_v_start : 10;
3650+ unsigned long : 6;
3651+ unsigned long active_v_end : 10;
3652+ unsigned long : 6;
3653+ } active_v_disp_t;
3654+
3655+typedef union {
3656+ unsigned long val : 32;
3657+ active_v_disp_t f;
3658+} active_v_disp_u;
3659+
3660+typedef struct _graphic_h_disp_t {
3661+ unsigned long graphic_h_start : 10;
3662+ unsigned long : 6;
3663+ unsigned long graphic_h_end : 10;
3664+ unsigned long : 6;
3665+ } graphic_h_disp_t;
3666+
3667+typedef union {
3668+ unsigned long val : 32;
3669+ graphic_h_disp_t f;
3670+} graphic_h_disp_u;
3671+
3672+typedef struct _graphic_v_disp_t {
3673+ unsigned long graphic_v_start : 10;
3674+ unsigned long : 6;
3675+ unsigned long graphic_v_end : 10;
3676+ unsigned long : 6;
3677+ } graphic_v_disp_t;
3678+
3679+typedef union {
3680+ unsigned long val : 32;
3681+ graphic_v_disp_t f;
3682+} graphic_v_disp_u;
3683+
3684+typedef struct _video_ctrl_t {
3685+ unsigned long video_mode : 1;
3686+ unsigned long keyer_en : 1;
3687+ unsigned long en_video_req : 1;
3688+ unsigned long en_graphic_req_video : 1;
3689+ unsigned long en_video_crtc : 1;
3690+ unsigned long video_hor_exp : 2;
3691+ unsigned long video_ver_exp : 2;
3692+ unsigned long uv_combine : 1;
3693+ unsigned long total_req_video : 9;
3694+ unsigned long video_ch_sel : 1;
3695+ unsigned long video_portrait : 2;
3696+ unsigned long yuv2rgb_en : 1;
3697+ unsigned long yuv2rgb_option : 1;
3698+ unsigned long video_inv_hor : 1;
3699+ unsigned long video_inv_ver : 1;
3700+ unsigned long gamma_sel : 2;
3701+ unsigned long dis_limit : 1;
3702+ unsigned long en_uv_hblend : 1;
3703+ unsigned long rgb_gamma_sel : 2;
3704+ } video_ctrl_t;
3705+
3706+typedef union {
3707+ unsigned long val : 32;
3708+ video_ctrl_t f;
3709+} video_ctrl_u;
3710+
3711+typedef struct _graphic_key_t {
3712+ unsigned long keyer_color : 16;
3713+ unsigned long keyer_mask : 16;
3714+ } graphic_key_t;
3715+
3716+typedef union {
3717+ unsigned long val : 32;
3718+ graphic_key_t f;
3719+} graphic_key_u;
3720+
3721+typedef struct _video_y_offset_t {
3722+ unsigned long y_offset : 24;
3723+ unsigned long : 8;
3724+ } video_y_offset_t;
3725+
3726+typedef union {
3727+ unsigned long val : 32;
3728+ video_y_offset_t f;
3729+} video_y_offset_u;
3730+
3731+typedef struct _video_y_pitch_t {
3732+ unsigned long y_pitch : 11;
3733+ unsigned long : 21;
3734+ } video_y_pitch_t;
3735+
3736+typedef union {
3737+ unsigned long val : 32;
3738+ video_y_pitch_t f;
3739+} video_y_pitch_u;
3740+
3741+typedef struct _video_u_offset_t {
3742+ unsigned long u_offset : 24;
3743+ unsigned long : 8;
3744+ } video_u_offset_t;
3745+
3746+typedef union {
3747+ unsigned long val : 32;
3748+ video_u_offset_t f;
3749+} video_u_offset_u;
3750+
3751+typedef struct _video_u_pitch_t {
3752+ unsigned long u_pitch : 11;
3753+ unsigned long : 21;
3754+ } video_u_pitch_t;
3755+
3756+typedef union {
3757+ unsigned long val : 32;
3758+ video_u_pitch_t f;
3759+} video_u_pitch_u;
3760+
3761+typedef struct _video_v_offset_t {
3762+ unsigned long v_offset : 24;
3763+ unsigned long : 8;
3764+ } video_v_offset_t;
3765+
3766+typedef union {
3767+ unsigned long val : 32;
3768+ video_v_offset_t f;
3769+} video_v_offset_u;
3770+
3771+typedef struct _video_v_pitch_t {
3772+ unsigned long v_pitch : 11;
3773+ unsigned long : 21;
3774+ } video_v_pitch_t;
3775+
3776+typedef union {
3777+ unsigned long val : 32;
3778+ video_v_pitch_t f;
3779+} video_v_pitch_u;
3780+
3781+typedef struct _video_h_pos_t {
3782+ unsigned long video_h_start : 10;
3783+ unsigned long : 6;
3784+ unsigned long video_h_end : 10;
3785+ unsigned long : 6;
3786+ } video_h_pos_t;
3787+
3788+typedef union {
3789+ unsigned long val : 32;
3790+ video_h_pos_t f;
3791+} video_h_pos_u;
3792+
3793+typedef struct _video_v_pos_t {
3794+ unsigned long video_v_start : 10;
3795+ unsigned long : 6;
3796+ unsigned long video_v_end : 10;
3797+ unsigned long : 6;
3798+ } video_v_pos_t;
3799+
3800+typedef union {
3801+ unsigned long val : 32;
3802+ video_v_pos_t f;
3803+} video_v_pos_u;
3804+
3805+typedef struct _brightness_cntl_t {
3806+ unsigned long brightness : 7;
3807+ unsigned long : 25;
3808+ } brightness_cntl_t;
3809+
3810+typedef union {
3811+ unsigned long val : 32;
3812+ brightness_cntl_t f;
3813+} brightness_cntl_u;
3814+
3815+typedef struct _cursor1_offset_t {
3816+ unsigned long cur1_offset : 24;
3817+ unsigned long cur1_x_offset : 4;
3818+ unsigned long cur1_y_offset : 4;
3819+ } cursor1_offset_t;
3820+
3821+typedef union {
3822+ unsigned long val : 32;
3823+ cursor1_offset_t f;
3824+} cursor1_offset_u;
3825+
3826+typedef struct _cursor1_h_pos_t {
3827+ unsigned long cur1_h_start : 10;
3828+ unsigned long : 6;
3829+ unsigned long cur1_h_end : 10;
3830+ unsigned long : 5;
3831+ unsigned long cur1_en : 1;
3832+ } cursor1_h_pos_t;
3833+
3834+typedef union {
3835+ unsigned long val : 32;
3836+ cursor1_h_pos_t f;
3837+} cursor1_h_pos_u;
3838+
3839+typedef struct _cursor1_v_pos_t {
3840+ unsigned long cur1_v_start : 10;
3841+ unsigned long : 6;
3842+ unsigned long cur1_v_end : 10;
3843+ unsigned long : 6;
3844+ } cursor1_v_pos_t;
3845+
3846+typedef union {
3847+ unsigned long val : 32;
3848+ cursor1_v_pos_t f;
3849+} cursor1_v_pos_u;
3850+
3851+typedef struct _cursor1_color0_t {
3852+ unsigned long cur1_color0_r : 8;
3853+ unsigned long cur1_color0_g : 8;
3854+ unsigned long cur1_color0_b : 8;
3855+ unsigned long : 8;
3856+ } cursor1_color0_t;
3857+
3858+typedef union {
3859+ unsigned long val : 32;
3860+ cursor1_color0_t f;
3861+} cursor1_color0_u;
3862+
3863+typedef struct _cursor1_color1_t {
3864+ unsigned long cur1_color1_r : 8;
3865+ unsigned long cur1_color1_g : 8;
3866+ unsigned long cur1_color1_b : 8;
3867+ unsigned long : 8;
3868+ } cursor1_color1_t;
3869+
3870+typedef union {
3871+ unsigned long val : 32;
3872+ cursor1_color1_t f;
3873+} cursor1_color1_u;
3874+
3875+typedef struct _cursor2_offset_t {
3876+ unsigned long cur2_offset : 24;
3877+ unsigned long cur2_x_offset : 4;
3878+ unsigned long cur2_y_offset : 4;
3879+ } cursor2_offset_t;
3880+
3881+typedef union {
3882+ unsigned long val : 32;
3883+ cursor2_offset_t f;
3884+} cursor2_offset_u;
3885+
3886+typedef struct _cursor2_h_pos_t {
3887+ unsigned long cur2_h_start : 10;
3888+ unsigned long : 6;
3889+ unsigned long cur2_h_end : 10;
3890+ unsigned long : 5;
3891+ unsigned long cur2_en : 1;
3892+ } cursor2_h_pos_t;
3893+
3894+typedef union {
3895+ unsigned long val : 32;
3896+ cursor2_h_pos_t f;
3897+} cursor2_h_pos_u;
3898+
3899+typedef struct _cursor2_v_pos_t {
3900+ unsigned long cur2_v_start : 10;
3901+ unsigned long : 6;
3902+ unsigned long cur2_v_end : 10;
3903+ unsigned long : 6;
3904+ } cursor2_v_pos_t;
3905+
3906+typedef union {
3907+ unsigned long val : 32;
3908+ cursor2_v_pos_t f;
3909+} cursor2_v_pos_u;
3910+
3911+typedef struct _cursor2_color0_t {
3912+ unsigned long cur2_color0_r : 8;
3913+ unsigned long cur2_color0_g : 8;
3914+ unsigned long cur2_color0_b : 8;
3915+ unsigned long : 8;
3916+ } cursor2_color0_t;
3917+
3918+typedef union {
3919+ unsigned long val : 32;
3920+ cursor2_color0_t f;
3921+} cursor2_color0_u;
3922+
3923+typedef struct _cursor2_color1_t {
3924+ unsigned long cur2_color1_r : 8;
3925+ unsigned long cur2_color1_g : 8;
3926+ unsigned long cur2_color1_b : 8;
3927+ unsigned long : 8;
3928+ } cursor2_color1_t;
3929+
3930+typedef union {
3931+ unsigned long val : 32;
3932+ cursor2_color1_t f;
3933+} cursor2_color1_u;
3934+
3935+typedef struct _disp_int_cntl_t {
3936+ unsigned long vline_int_pos : 10;
3937+ unsigned long : 6;
3938+ unsigned long hpos_int_pos : 10;
3939+ unsigned long : 4;
3940+ unsigned long vblank_int_pol : 1;
3941+ unsigned long frame_int_pol : 1;
3942+ } disp_int_cntl_t;
3943+
3944+typedef union {
3945+ unsigned long val : 32;
3946+ disp_int_cntl_t f;
3947+} disp_int_cntl_u;
3948+
3949+typedef struct _crtc_ss_t {
3950+ unsigned long ss_start : 10;
3951+ unsigned long : 6;
3952+ unsigned long ss_end : 10;
3953+ unsigned long : 2;
3954+ unsigned long ss_align : 1;
3955+ unsigned long ss_pol : 1;
3956+ unsigned long ss_run_mode : 1;
3957+ unsigned long ss_en : 1;
3958+ } crtc_ss_t;
3959+
3960+typedef union {
3961+ unsigned long val : 32;
3962+ crtc_ss_t f;
3963+} crtc_ss_u;
3964+
3965+typedef struct _crtc_ls_t {
3966+ unsigned long ls_start : 10;
3967+ unsigned long : 6;
3968+ unsigned long ls_end : 10;
3969+ unsigned long : 2;
3970+ unsigned long ls_align : 1;
3971+ unsigned long ls_pol : 1;
3972+ unsigned long ls_run_mode : 1;
3973+ unsigned long ls_en : 1;
3974+ } crtc_ls_t;
3975+
3976+typedef union {
3977+ unsigned long val : 32;
3978+ crtc_ls_t f;
3979+} crtc_ls_u;
3980+
3981+typedef struct _crtc_rev_t {
3982+ unsigned long rev_pos : 10;
3983+ unsigned long : 6;
3984+ unsigned long rev_align : 1;
3985+ unsigned long rev_freq_nref : 5;
3986+ unsigned long rev_en : 1;
3987+ unsigned long : 9;
3988+ } crtc_rev_t;
3989+
3990+typedef union {
3991+ unsigned long val : 32;
3992+ crtc_rev_t f;
3993+} crtc_rev_u;
3994+
3995+typedef struct _crtc_dclk_t {
3996+ unsigned long dclk_start : 10;
3997+ unsigned long : 6;
3998+ unsigned long dclk_end : 10;
3999+ unsigned long : 1;
4000+ unsigned long dclk_run_mode : 2;
4001+ unsigned long dclk_pol : 1;
4002+ unsigned long dclk_align : 1;
4003+ unsigned long dclk_en : 1;
4004+ } crtc_dclk_t;
4005+
4006+typedef union {
4007+ unsigned long val : 32;
4008+ crtc_dclk_t f;
4009+} crtc_dclk_u;
4010+
4011+typedef struct _crtc_gs_t {
4012+ unsigned long gs_start : 10;
4013+ unsigned long : 6;
4014+ unsigned long gs_end : 10;
4015+ unsigned long : 3;
4016+ unsigned long gs_align : 1;
4017+ unsigned long gs_pol : 1;
4018+ unsigned long gs_en : 1;
4019+ } crtc_gs_t;
4020+
4021+typedef union {
4022+ unsigned long val : 32;
4023+ crtc_gs_t f;
4024+} crtc_gs_u;
4025+
4026+typedef struct _crtc_vpos_gs_t {
4027+ unsigned long gs_vpos_start : 10;
4028+ unsigned long : 6;
4029+ unsigned long gs_vpos_end : 10;
4030+ unsigned long : 6;
4031+ } crtc_vpos_gs_t;
4032+
4033+typedef union {
4034+ unsigned long val : 32;
4035+ crtc_vpos_gs_t f;
4036+} crtc_vpos_gs_u;
4037+
4038+typedef struct _crtc_gclk_t {
4039+ unsigned long gclk_start : 10;
4040+ unsigned long : 6;
4041+ unsigned long gclk_end : 10;
4042+ unsigned long : 3;
4043+ unsigned long gclk_align : 1;
4044+ unsigned long gclk_pol : 1;
4045+ unsigned long gclk_en : 1;
4046+ } crtc_gclk_t;
4047+
4048+typedef union {
4049+ unsigned long val : 32;
4050+ crtc_gclk_t f;
4051+} crtc_gclk_u;
4052+
4053+typedef struct _crtc_goe_t {
4054+ unsigned long goe_start : 10;
4055+ unsigned long : 6;
4056+ unsigned long goe_end : 10;
4057+ unsigned long : 3;
4058+ unsigned long goe_align : 1;
4059+ unsigned long goe_pol : 1;
4060+ unsigned long goe_en : 1;
4061+ } crtc_goe_t;
4062+
4063+typedef union {
4064+ unsigned long val : 32;
4065+ crtc_goe_t f;
4066+} crtc_goe_u;
4067+
4068+typedef struct _crtc_frame_t {
4069+ unsigned long crtc_fr_start : 10;
4070+ unsigned long : 6;
4071+ unsigned long crtc_fr_end : 10;
4072+ unsigned long : 4;
4073+ unsigned long crtc_frame_en : 1;
4074+ unsigned long crtc_frame_align : 1;
4075+ } crtc_frame_t;
4076+
4077+typedef union {
4078+ unsigned long val : 32;
4079+ crtc_frame_t f;
4080+} crtc_frame_u;
4081+
4082+typedef struct _crtc_frame_vpos_t {
4083+ unsigned long crtc_fr_vpos : 10;
4084+ unsigned long : 22;
4085+ } crtc_frame_vpos_t;
4086+
4087+typedef union {
4088+ unsigned long val : 32;
4089+ crtc_frame_vpos_t f;
4090+} crtc_frame_vpos_u;
4091+
4092+typedef struct _gpio_data_t {
4093+ unsigned long gio_out : 16;
4094+ unsigned long gio_in : 16;
4095+ } gpio_data_t;
4096+
4097+typedef union {
4098+ unsigned long val : 32;
4099+ gpio_data_t f;
4100+} gpio_data_u;
4101+
4102+typedef struct _gpio_cntl1_t {
4103+ unsigned long gio_pd : 16;
4104+ unsigned long gio_schmen : 16;
4105+ } gpio_cntl1_t;
4106+
4107+typedef union {
4108+ unsigned long val : 32;
4109+ gpio_cntl1_t f;
4110+} gpio_cntl1_u;
4111+
4112+typedef struct _gpio_cntl2_t {
4113+ unsigned long gio_oe : 16;
4114+ unsigned long gio_srp : 1;
4115+ unsigned long gio_srn : 1;
4116+ unsigned long gio_sp : 4;
4117+ unsigned long gio_sn : 4;
4118+ unsigned long : 6;
4119+ } gpio_cntl2_t;
4120+
4121+typedef union {
4122+ unsigned long val : 32;
4123+ gpio_cntl2_t f;
4124+} gpio_cntl2_u;
4125+
4126+typedef struct _lcdd_cntl1_t {
4127+ unsigned long lcdd_pd : 18;
4128+ unsigned long lcdd_srp : 1;
4129+ unsigned long lcdd_srn : 1;
4130+ unsigned long lcdd_sp : 4;
4131+ unsigned long lcdd_sn : 4;
4132+ unsigned long lcdd_align : 1;
4133+ unsigned long : 3;
4134+ } lcdd_cntl1_t;
4135+
4136+typedef union {
4137+ unsigned long val : 32;
4138+ lcdd_cntl1_t f;
4139+} lcdd_cntl1_u;
4140+
4141+typedef struct _lcdd_cntl2_t {
4142+ unsigned long lcdd_oe : 18;
4143+ unsigned long : 14;
4144+ } lcdd_cntl2_t;
4145+
4146+typedef union {
4147+ unsigned long val : 32;
4148+ lcdd_cntl2_t f;
4149+} lcdd_cntl2_u;
4150+
4151+typedef struct _genlcd_cntl1_t {
4152+ unsigned long dclk_oe : 1;
4153+ unsigned long dclk_pd : 1;
4154+ unsigned long dclk_srp : 1;
4155+ unsigned long dclk_srn : 1;
4156+ unsigned long dclk_sp : 4;
4157+ unsigned long dclk_sn : 4;
4158+ unsigned long ss_oe : 1;
4159+ unsigned long ss_pd : 1;
4160+ unsigned long ls_oe : 1;
4161+ unsigned long ls_pd : 1;
4162+ unsigned long gs_oe : 1;
4163+ unsigned long gs_pd : 1;
4164+ unsigned long goe_oe : 1;
4165+ unsigned long goe_pd : 1;
4166+ unsigned long rev_oe : 1;
4167+ unsigned long rev_pd : 1;
4168+ unsigned long frame_oe : 1;
4169+ unsigned long frame_pd : 1;
4170+ unsigned long : 8;
4171+ } genlcd_cntl1_t;
4172+
4173+typedef union {
4174+ unsigned long val : 32;
4175+ genlcd_cntl1_t f;
4176+} genlcd_cntl1_u;
4177+
4178+typedef struct _genlcd_cntl2_t {
4179+ unsigned long gclk_oe : 1;
4180+ unsigned long gclk_pd : 1;
4181+ unsigned long gclk_srp : 1;
4182+ unsigned long gclk_srn : 1;
4183+ unsigned long gclk_sp : 4;
4184+ unsigned long gclk_sn : 4;
4185+ unsigned long genlcd_srp : 1;
4186+ unsigned long genlcd_srn : 1;
4187+ unsigned long genlcd_sp : 4;
4188+ unsigned long genlcd_sn : 4;
4189+ unsigned long : 10;
4190+ } genlcd_cntl2_t;
4191+
4192+typedef union {
4193+ unsigned long val : 32;
4194+ genlcd_cntl2_t f;
4195+} genlcd_cntl2_u;
4196+
4197+typedef struct _disp_debug_t {
4198+ unsigned long disp_debug : 32;
4199+ } disp_debug_t;
4200+
4201+typedef union {
4202+ unsigned long val : 32;
4203+ disp_debug_t f;
4204+} disp_debug_u;
4205+
4206+typedef struct _disp_db_buf_cntl_rd_t {
4207+ unsigned long en_db_buf : 1;
4208+ unsigned long update_db_buf_done : 1;
4209+ unsigned long db_buf_cntl : 6;
4210+ unsigned long : 24;
4211+ } disp_db_buf_cntl_rd_t;
4212+
4213+typedef union {
4214+ unsigned long val : 32;
4215+ disp_db_buf_cntl_rd_t f;
4216+} disp_db_buf_cntl_rd_u;
4217+
4218+typedef struct _disp_db_buf_cntl_wr_t {
4219+ unsigned long en_db_buf : 1;
4220+ unsigned long update_db_buf : 1;
4221+ unsigned long db_buf_cntl : 6;
4222+ unsigned long : 24;
4223+ } disp_db_buf_cntl_wr_t;
4224+
4225+typedef union {
4226+ unsigned long val : 32;
4227+ disp_db_buf_cntl_wr_t f;
4228+} disp_db_buf_cntl_wr_u;
4229+
4230+typedef struct _disp_crc_sig_t {
4231+ unsigned long crc_sig_r : 6;
4232+ unsigned long crc_sig_g : 6;
4233+ unsigned long crc_sig_b : 6;
4234+ unsigned long crc_cont_en : 1;
4235+ unsigned long crc_en : 1;
4236+ unsigned long crc_mask_en : 1;
4237+ unsigned long crc_sig_cntl : 6;
4238+ unsigned long : 5;
4239+ } disp_crc_sig_t;
4240+
4241+typedef union {
4242+ unsigned long val : 32;
4243+ disp_crc_sig_t f;
4244+} disp_crc_sig_u;
4245+
4246+typedef struct _crtc_default_count_t {
4247+ unsigned long crtc_hcount_def : 10;
4248+ unsigned long : 6;
4249+ unsigned long crtc_vcount_def : 10;
4250+ unsigned long : 6;
4251+ } crtc_default_count_t;
4252+
4253+typedef union {
4254+ unsigned long val : 32;
4255+ crtc_default_count_t f;
4256+} crtc_default_count_u;
4257+
4258+typedef struct _lcd_background_color_t {
4259+ unsigned long lcd_bg_red : 8;
4260+ unsigned long lcd_bg_green : 8;
4261+ unsigned long lcd_bg_blue : 8;
4262+ unsigned long : 8;
4263+ } lcd_background_color_t;
4264+
4265+typedef union {
4266+ unsigned long val : 32;
4267+ lcd_background_color_t f;
4268+} lcd_background_color_u;
4269+
4270+typedef struct _crtc_ps2_t {
4271+ unsigned long ps2_start : 10;
4272+ unsigned long : 6;
4273+ unsigned long ps2_end : 10;
4274+ unsigned long : 4;
4275+ unsigned long ps2_pol : 1;
4276+ unsigned long ps2_en : 1;
4277+ } crtc_ps2_t;
4278+
4279+typedef union {
4280+ unsigned long val : 32;
4281+ crtc_ps2_t f;
4282+} crtc_ps2_u;
4283+
4284+typedef struct _crtc_ps2_vpos_t {
4285+ unsigned long ps2_vpos_start : 10;
4286+ unsigned long : 6;
4287+ unsigned long ps2_vpos_end : 10;
4288+ unsigned long : 6;
4289+ } crtc_ps2_vpos_t;
4290+
4291+typedef union {
4292+ unsigned long val : 32;
4293+ crtc_ps2_vpos_t f;
4294+} crtc_ps2_vpos_u;
4295+
4296+typedef struct _crtc_ps1_active_t {
4297+ unsigned long ps1_h_start : 10;
4298+ unsigned long : 6;
4299+ unsigned long ps1_h_end : 10;
4300+ unsigned long : 3;
4301+ unsigned long ps1_pol : 1;
4302+ unsigned long ps1_en : 1;
4303+ unsigned long ps1_use_nactive : 1;
4304+ } crtc_ps1_active_t;
4305+
4306+typedef union {
4307+ unsigned long val : 32;
4308+ crtc_ps1_active_t f;
4309+} crtc_ps1_active_u;
4310+
4311+typedef struct _crtc_ps1_nactive_t {
4312+ unsigned long ps1_h_start_na : 10;
4313+ unsigned long : 6;
4314+ unsigned long ps1_h_end_na : 10;
4315+ unsigned long : 5;
4316+ unsigned long ps1_en_na : 1;
4317+ } crtc_ps1_nactive_t;
4318+
4319+typedef union {
4320+ unsigned long val : 32;
4321+ crtc_ps1_nactive_t f;
4322+} crtc_ps1_nactive_u;
4323+
4324+typedef struct _crtc_gclk_ext_t {
4325+ unsigned long gclk_alter_start : 10;
4326+ unsigned long : 6;
4327+ unsigned long gclk_alter_width : 2;
4328+ unsigned long gclk_en_alter : 1;
4329+ unsigned long gclk_db_width : 2;
4330+ unsigned long : 11;
4331+ } crtc_gclk_ext_t;
4332+
4333+typedef union {
4334+ unsigned long val : 32;
4335+ crtc_gclk_ext_t f;
4336+} crtc_gclk_ext_u;
4337+
4338+typedef struct _crtc_alw_t {
4339+ unsigned long alw_hstart : 10;
4340+ unsigned long : 6;
4341+ unsigned long alw_hend : 10;
4342+ unsigned long : 4;
4343+ unsigned long alw_delay : 1;
4344+ unsigned long alw_en : 1;
4345+ } crtc_alw_t;
4346+
4347+typedef union {
4348+ unsigned long val : 32;
4349+ crtc_alw_t f;
4350+} crtc_alw_u;
4351+
4352+typedef struct _crtc_alw_vpos_t {
4353+ unsigned long alw_vstart : 10;
4354+ unsigned long : 6;
4355+ unsigned long alw_vend : 10;
4356+ unsigned long : 6;
4357+ } crtc_alw_vpos_t;
4358+
4359+typedef union {
4360+ unsigned long val : 32;
4361+ crtc_alw_vpos_t f;
4362+} crtc_alw_vpos_u;
4363+
4364+typedef struct _crtc_psk_t {
4365+ unsigned long psk_vstart : 10;
4366+ unsigned long : 6;
4367+ unsigned long psk_vend : 10;
4368+ unsigned long : 4;
4369+ unsigned long psk_pol : 1;
4370+ unsigned long psk_en : 1;
4371+ } crtc_psk_t;
4372+
4373+typedef union {
4374+ unsigned long val : 32;
4375+ crtc_psk_t f;
4376+} crtc_psk_u;
4377+
4378+typedef struct _crtc_psk_hpos_t {
4379+ unsigned long psk_hstart : 10;
4380+ unsigned long : 6;
4381+ unsigned long psk_hend : 10;
4382+ unsigned long : 6;
4383+ } crtc_psk_hpos_t;
4384+
4385+typedef union {
4386+ unsigned long val : 32;
4387+ crtc_psk_hpos_t f;
4388+} crtc_psk_hpos_u;
4389+
4390+typedef struct _crtc_cv4_start_t {
4391+ unsigned long cv4_vstart : 10;
4392+ unsigned long : 20;
4393+ unsigned long cv4_pol : 1;
4394+ unsigned long cv4_en : 1;
4395+ } crtc_cv4_start_t;
4396+
4397+typedef union {
4398+ unsigned long val : 32;
4399+ crtc_cv4_start_t f;
4400+} crtc_cv4_start_u;
4401+
4402+typedef struct _crtc_cv4_end_t {
4403+ unsigned long cv4_vend1 : 10;
4404+ unsigned long : 6;
4405+ unsigned long cv4_vend2 : 10;
4406+ unsigned long : 6;
4407+ } crtc_cv4_end_t;
4408+
4409+typedef union {
4410+ unsigned long val : 32;
4411+ crtc_cv4_end_t f;
4412+} crtc_cv4_end_u;
4413+
4414+typedef struct _crtc_cv4_hpos_t {
4415+ unsigned long cv4_hstart : 10;
4416+ unsigned long : 6;
4417+ unsigned long cv4_hend : 10;
4418+ unsigned long : 6;
4419+ } crtc_cv4_hpos_t;
4420+
4421+typedef union {
4422+ unsigned long val : 32;
4423+ crtc_cv4_hpos_t f;
4424+} crtc_cv4_hpos_u;
4425+
4426+typedef struct _crtc_eck_t {
4427+ unsigned long eck_freq1 : 3;
4428+ unsigned long eck_en : 1;
4429+ unsigned long : 28;
4430+ } crtc_eck_t;
4431+
4432+typedef union {
4433+ unsigned long val : 32;
4434+ crtc_eck_t f;
4435+} crtc_eck_u;
4436+
4437+typedef struct _refresh_cntl_t {
4438+ unsigned long ref_frame : 3;
4439+ unsigned long nref_frame : 5;
4440+ unsigned long ref_cntl : 1;
4441+ unsigned long stop_sm_nref : 1;
4442+ unsigned long stop_req_nref : 1;
4443+ unsigned long : 21;
4444+ } refresh_cntl_t;
4445+
4446+typedef union {
4447+ unsigned long val : 32;
4448+ refresh_cntl_t f;
4449+} refresh_cntl_u;
4450+
4451+typedef struct _genlcd_cntl3_t {
4452+ unsigned long ps1_oe : 1;
4453+ unsigned long ps1_pd : 1;
4454+ unsigned long ps2_oe : 1;
4455+ unsigned long ps2_pd : 1;
4456+ unsigned long rev2_oe : 1;
4457+ unsigned long rev2_pd : 1;
4458+ unsigned long awl_oe : 1;
4459+ unsigned long awl_pd : 1;
4460+ unsigned long dinv_oe : 1;
4461+ unsigned long dinv_pd : 1;
4462+ unsigned long psk_out : 1;
4463+ unsigned long psd_out : 1;
4464+ unsigned long eck_out : 1;
4465+ unsigned long cv4_out : 1;
4466+ unsigned long ps1_out : 1;
4467+ unsigned long ps2_out : 1;
4468+ unsigned long rev_out : 1;
4469+ unsigned long rev2_out : 1;
4470+ unsigned long : 14;
4471+ } genlcd_cntl3_t;
4472+
4473+typedef union {
4474+ unsigned long val : 32;
4475+ genlcd_cntl3_t f;
4476+} genlcd_cntl3_u;
4477+
4478+typedef struct _gpio_data2_t {
4479+ unsigned long gio2_out : 16;
4480+ unsigned long gio2_in : 16;
4481+ } gpio_data2_t;
4482+
4483+typedef union {
4484+ unsigned long val : 32;
4485+ gpio_data2_t f;
4486+} gpio_data2_u;
4487+
4488+typedef struct _gpio_cntl3_t {
4489+ unsigned long gio2_pd : 16;
4490+ unsigned long gio2_schmen : 16;
4491+ } gpio_cntl3_t;
4492+
4493+typedef union {
4494+ unsigned long val : 32;
4495+ gpio_cntl3_t f;
4496+} gpio_cntl3_u;
4497+
4498+typedef struct _gpio_cntl4_t {
4499+ unsigned long gio2_oe : 16;
4500+ unsigned long : 16;
4501+ } gpio_cntl4_t;
4502+
4503+typedef union {
4504+ unsigned long val : 32;
4505+ gpio_cntl4_t f;
4506+} gpio_cntl4_u;
4507+
4508+typedef struct _chip_strap_t {
4509+ unsigned long config_strap : 8;
4510+ unsigned long pkg_strap : 1;
4511+ unsigned long : 23;
4512+ } chip_strap_t;
4513+
4514+typedef union {
4515+ unsigned long val : 32;
4516+ chip_strap_t f;
4517+} chip_strap_u;
4518+
4519+typedef struct _disp_debug2_t {
4520+ unsigned long disp_debug2 : 32;
4521+ } disp_debug2_t;
4522+
4523+typedef union {
4524+ unsigned long val : 32;
4525+ disp_debug2_t f;
4526+} disp_debug2_u;
4527+
4528+typedef struct _debug_bus_cntl_t {
4529+ unsigned long debug_testmux : 4;
4530+ unsigned long debug_testsel : 4;
4531+ unsigned long debug_gioa_sel : 2;
4532+ unsigned long debug_giob_sel : 2;
4533+ unsigned long debug_clk_sel : 1;
4534+ unsigned long debug_clk_inv : 1;
4535+ unsigned long : 2;
4536+ unsigned long debug_bus : 16;
4537+ } debug_bus_cntl_t;
4538+
4539+typedef union {
4540+ unsigned long val : 32;
4541+ debug_bus_cntl_t f;
4542+} debug_bus_cntl_u;
4543+
4544+typedef struct _gamma_value1_t {
4545+ unsigned long gamma1 : 8;
4546+ unsigned long gamma2 : 8;
4547+ unsigned long gamma3 : 8;
4548+ unsigned long gamma4 : 8;
4549+ } gamma_value1_t;
4550+
4551+typedef union {
4552+ unsigned long val : 32;
4553+ gamma_value1_t f;
4554+} gamma_value1_u;
4555+
4556+typedef struct _gamma_value2_t {
4557+ unsigned long gamma5 : 8;
4558+ unsigned long gamma6 : 8;
4559+ unsigned long gamma7 : 8;
4560+ unsigned long gamma8 : 8;
4561+ } gamma_value2_t;
4562+
4563+typedef union {
4564+ unsigned long val : 32;
4565+ gamma_value2_t f;
4566+} gamma_value2_u;
4567+
4568+typedef struct _gamma_slope_t {
4569+ unsigned long slope1 : 3;
4570+ unsigned long slope2 : 3;
4571+ unsigned long slope3 : 3;
4572+ unsigned long slope4 : 3;
4573+ unsigned long slope5 : 3;
4574+ unsigned long slope6 : 3;
4575+ unsigned long slope7 : 3;
4576+ unsigned long slope8 : 3;
4577+ unsigned long : 8;
4578+ } gamma_slope_t;
4579+
4580+typedef union {
4581+ unsigned long val : 32;
4582+ gamma_slope_t f;
4583+} gamma_slope_u;
4584+
4585+typedef struct _gen_status_t {
4586+ unsigned long status : 16;
4587+ unsigned long : 16;
4588+ } gen_status_t;
4589+
4590+typedef union {
4591+ unsigned long val : 32;
4592+ gen_status_t f;
4593+} gen_status_u;
4594+
4595+typedef struct _hw_int_t {
4596+ unsigned long hwint1_pos : 5;
4597+ unsigned long hwint2_pos : 5;
4598+ unsigned long hwint1_pol : 1;
4599+ unsigned long hwint2_pol : 1;
4600+ unsigned long hwint1_en_db : 1;
4601+ unsigned long hwint2_en_db : 1;
4602+ unsigned long : 18;
4603+ } hw_int_t;
4604+
4605+typedef union {
4606+ unsigned long val : 32;
4607+ hw_int_t f;
4608+} hw_int_u;
4609+
4610+typedef struct _dst_offset_t {
4611+ unsigned long dst_offset : 24;
4612+ unsigned long : 8;
4613+ } dst_offset_t;
4614+
4615+typedef union {
4616+ unsigned long val : 32;
4617+ dst_offset_t f;
4618+} dst_offset_u;
4619+
4620+typedef struct _dst_pitch_t {
4621+ unsigned long dst_pitch : 14;
4622+ unsigned long mc_dst_pitch_mul : 2;
4623+ unsigned long : 16;
4624+ } dst_pitch_t;
4625+
4626+typedef union {
4627+ unsigned long val : 32;
4628+ dst_pitch_t f;
4629+} dst_pitch_u;
4630+
4631+typedef struct _dst_pitch_offset_t {
4632+ unsigned long dst_offset : 20;
4633+ unsigned long dst_pitch : 10;
4634+ unsigned long mc_dst_pitch_mul : 2;
4635+ } dst_pitch_offset_t;
4636+
4637+typedef union {
4638+ unsigned long val : 32;
4639+ dst_pitch_offset_t f;
4640+} dst_pitch_offset_u;
4641+
4642+typedef struct _dst_x_t {
4643+ unsigned long dst_x : 14;
4644+ unsigned long : 18;
4645+ } dst_x_t;
4646+
4647+typedef union {
4648+ unsigned long val : 32;
4649+ dst_x_t f;
4650+} dst_x_u;
4651+
4652+typedef struct _dst_y_t {
4653+ unsigned long dst_y : 14;
4654+ unsigned long : 18;
4655+ } dst_y_t;
4656+
4657+typedef union {
4658+ unsigned long val : 32;
4659+ dst_y_t f;
4660+} dst_y_u;
4661+
4662+typedef struct _dst_x_y_t {
4663+ unsigned long dst_y : 14;
4664+ unsigned long : 2;
4665+ unsigned long dst_x : 14;
4666+ unsigned long : 2;
4667+ } dst_x_y_t;
4668+
4669+typedef union {
4670+ unsigned long val : 32;
4671+ dst_x_y_t f;
4672+} dst_x_y_u;
4673+
4674+typedef struct _dst_y_x_t {
4675+ unsigned long dst_x : 14;
4676+ unsigned long : 2;
4677+ unsigned long dst_y : 14;
4678+ unsigned long : 2;
4679+ } dst_y_x_t;
4680+
4681+typedef union {
4682+ unsigned long val : 32;
4683+ dst_y_x_t f;
4684+} dst_y_x_u;
4685+
4686+typedef struct _dst_width_t {
4687+ unsigned long dst_width_b0 : 8;
4688+ unsigned long dst_width_b1 : 6;
4689+ unsigned long : 18;
4690+ } dst_width_t;
4691+
4692+typedef union {
4693+ unsigned long val : 32;
4694+ dst_width_t f;
4695+} dst_width_u;
4696+
4697+typedef struct _dst_height_t {
4698+ unsigned long dst_height : 14;
4699+ unsigned long : 18;
4700+ } dst_height_t;
4701+
4702+typedef union {
4703+ unsigned long val : 32;
4704+ dst_height_t f;
4705+} dst_height_u;
4706+
4707+typedef struct _dst_width_height_t {
4708+ unsigned long dst_height : 14;
4709+ unsigned long : 2;
4710+ unsigned long dst_width_b0 : 8;
4711+ unsigned long dst_width_b1 : 6;
4712+ unsigned long : 2;
4713+ } dst_width_height_t;
4714+
4715+typedef union {
4716+ unsigned long val : 32;
4717+ dst_width_height_t f;
4718+} dst_width_height_u;
4719+
4720+typedef struct _dst_height_width_t {
4721+ unsigned long dst_width_b0 : 8;
4722+ unsigned long dst_width_b1 : 6;
4723+ unsigned long : 2;
4724+ unsigned long dst_height : 14;
4725+ unsigned long : 2;
4726+ } dst_height_width_t;
4727+
4728+typedef union {
4729+ unsigned long val : 32;
4730+ dst_height_width_t f;
4731+} dst_height_width_u;
4732+
4733+typedef struct _dst_height_width_8_t {
4734+ unsigned long : 16;
4735+ unsigned long dst_width_b0 : 8;
4736+ unsigned long dst_height : 8;
4737+ } dst_height_width_8_t;
4738+
4739+typedef union {
4740+ unsigned long val : 32;
4741+ dst_height_width_8_t f;
4742+} dst_height_width_8_u;
4743+
4744+typedef struct _dst_height_y_t {
4745+ unsigned long dst_y : 14;
4746+ unsigned long : 2;
4747+ unsigned long dst_height : 14;
4748+ unsigned long : 2;
4749+ } dst_height_y_t;
4750+
4751+typedef union {
4752+ unsigned long val : 32;
4753+ dst_height_y_t f;
4754+} dst_height_y_u;
4755+
4756+typedef struct _dst_width_x_t {
4757+ unsigned long dst_x : 14;
4758+ unsigned long : 2;
4759+ unsigned long dst_width_b0 : 8;
4760+ unsigned long dst_width_b1 : 6;
4761+ unsigned long : 2;
4762+ } dst_width_x_t;
4763+
4764+typedef union {
4765+ unsigned long val : 32;
4766+ dst_width_x_t f;
4767+} dst_width_x_u;
4768+
4769+typedef struct _dst_width_x_incy_t {
4770+ unsigned long dst_x : 14;
4771+ unsigned long : 2;
4772+ unsigned long dst_width_b0 : 8;
4773+ unsigned long dst_width_b1 : 6;
4774+ unsigned long : 2;
4775+ } dst_width_x_incy_t;
4776+
4777+typedef union {
4778+ unsigned long val : 32;
4779+ dst_width_x_incy_t f;
4780+} dst_width_x_incy_u;
4781+
4782+typedef struct _dst_line_start_t {
4783+ unsigned long dst_start_x : 14;
4784+ unsigned long : 2;
4785+ unsigned long dst_start_y : 14;
4786+ unsigned long : 2;
4787+ } dst_line_start_t;
4788+
4789+typedef union {
4790+ unsigned long val : 32;
4791+ dst_line_start_t f;
4792+} dst_line_start_u;
4793+
4794+typedef struct _dst_line_end_t {
4795+ unsigned long dst_end_x : 14;
4796+ unsigned long : 2;
4797+ unsigned long dst_end_y_b0 : 8;
4798+ unsigned long dst_end_y_b1 : 6;
4799+ unsigned long : 2;
4800+ } dst_line_end_t;
4801+
4802+typedef union {
4803+ unsigned long val : 32;
4804+ dst_line_end_t f;
4805+} dst_line_end_u;
4806+
4807+typedef struct _brush_offset_t {
4808+ unsigned long brush_offset : 24;
4809+ unsigned long : 8;
4810+ } brush_offset_t;
4811+
4812+typedef union {
4813+ unsigned long val : 32;
4814+ brush_offset_t f;
4815+} brush_offset_u;
4816+
4817+typedef struct _brush_y_x_t {
4818+ unsigned long brush_x : 5;
4819+ unsigned long : 3;
4820+ unsigned long brush_y : 3;
4821+ unsigned long : 21;
4822+ } brush_y_x_t;
4823+
4824+typedef union {
4825+ unsigned long val : 32;
4826+ brush_y_x_t f;
4827+} brush_y_x_u;
4828+
4829+typedef struct _dp_brush_frgd_clr_t {
4830+ unsigned long dp_brush_frgd_clr : 32;
4831+ } dp_brush_frgd_clr_t;
4832+
4833+typedef union {
4834+ unsigned long val : 32;
4835+ dp_brush_frgd_clr_t f;
4836+} dp_brush_frgd_clr_u;
4837+
4838+typedef struct _dp_brush_bkgd_clr_t {
4839+ unsigned long dp_brush_bkgd_clr : 32;
4840+ } dp_brush_bkgd_clr_t;
4841+
4842+typedef union {
4843+ unsigned long val : 32;
4844+ dp_brush_bkgd_clr_t f;
4845+} dp_brush_bkgd_clr_u;
4846+
4847+typedef struct _src2_offset_t {
4848+ unsigned long src2_offset : 24;
4849+ unsigned long : 8;
4850+ } src2_offset_t;
4851+
4852+typedef union {
4853+ unsigned long val : 32;
4854+ src2_offset_t f;
4855+} src2_offset_u;
4856+
4857+typedef struct _src2_pitch_t {
4858+ unsigned long src2_pitch : 14;
4859+ unsigned long src2_pitch_mul : 2;
4860+ unsigned long : 16;
4861+ } src2_pitch_t;
4862+
4863+typedef union {
4864+ unsigned long val : 32;
4865+ src2_pitch_t f;
4866+} src2_pitch_u;
4867+
4868+typedef struct _src2_pitch_offset_t {
4869+ unsigned long src2_offset : 20;
4870+ unsigned long : 2;
4871+ unsigned long src2_pitch : 8;
4872+ unsigned long src2_pitch_mul : 2;
4873+ } src2_pitch_offset_t;
4874+
4875+typedef union {
4876+ unsigned long val : 32;
4877+ src2_pitch_offset_t f;
4878+} src2_pitch_offset_u;
4879+
4880+typedef struct _src2_x_t {
4881+ unsigned long src_x : 14;
4882+ unsigned long : 18;
4883+ } src2_x_t;
4884+
4885+typedef union {
4886+ unsigned long val : 32;
4887+ src2_x_t f;
4888+} src2_x_u;
4889+
4890+typedef struct _src2_y_t {
4891+ unsigned long src_y : 14;
4892+ unsigned long : 18;
4893+ } src2_y_t;
4894+
4895+typedef union {
4896+ unsigned long val : 32;
4897+ src2_y_t f;
4898+} src2_y_u;
4899+
4900+typedef struct _src2_x_y_t {
4901+ unsigned long src_y : 14;
4902+ unsigned long : 2;
4903+ unsigned long src_x : 14;
4904+ unsigned long : 2;
4905+ } src2_x_y_t;
4906+
4907+typedef union {
4908+ unsigned long val : 32;
4909+ src2_x_y_t f;
4910+} src2_x_y_u;
4911+
4912+typedef struct _src2_width_t {
4913+ unsigned long src2_width : 14;
4914+ unsigned long : 18;
4915+ } src2_width_t;
4916+
4917+typedef union {
4918+ unsigned long val : 32;
4919+ src2_width_t f;
4920+} src2_width_u;
4921+
4922+typedef struct _src2_height_t {
4923+ unsigned long src2_height : 14;
4924+ unsigned long : 18;
4925+ } src2_height_t;
4926+
4927+typedef union {
4928+ unsigned long val : 32;
4929+ src2_height_t f;
4930+} src2_height_u;
4931+
4932+typedef struct _src2_inc_t {
4933+ unsigned long src2_xinc : 6;
4934+ unsigned long : 2;
4935+ unsigned long src2_yinc : 6;
4936+ unsigned long : 18;
4937+ } src2_inc_t;
4938+
4939+typedef union {
4940+ unsigned long val : 32;
4941+ src2_inc_t f;
4942+} src2_inc_u;
4943+
4944+typedef struct _src_offset_t {
4945+ unsigned long src_offset : 24;
4946+ unsigned long : 8;
4947+ } src_offset_t;
4948+
4949+typedef union {
4950+ unsigned long val : 32;
4951+ src_offset_t f;
4952+} src_offset_u;
4953+
4954+typedef struct _src_pitch_t {
4955+ unsigned long src_pitch : 14;
4956+ unsigned long src_pitch_mul : 2;
4957+ unsigned long : 16;
4958+ } src_pitch_t;
4959+
4960+typedef union {
4961+ unsigned long val : 32;
4962+ src_pitch_t f;
4963+} src_pitch_u;
4964+
4965+typedef struct _src_pitch_offset_t {
4966+ unsigned long src_offset : 20;
4967+ unsigned long src_pitch : 10;
4968+ unsigned long src_pitch_mul : 2;
4969+ } src_pitch_offset_t;
4970+
4971+typedef union {
4972+ unsigned long val : 32;
4973+ src_pitch_offset_t f;
4974+} src_pitch_offset_u;
4975+
4976+typedef struct _src_x_t {
4977+ unsigned long src_x : 14;
4978+ unsigned long : 18;
4979+ } src_x_t;
4980+
4981+typedef union {
4982+ unsigned long val : 32;
4983+ src_x_t f;
4984+} src_x_u;
4985+
4986+typedef struct _src_y_t {
4987+ unsigned long src_y : 14;
4988+ unsigned long : 18;
4989+ } src_y_t;
4990+
4991+typedef union {
4992+ unsigned long val : 32;
4993+ src_y_t f;
4994+} src_y_u;
4995+
4996+typedef struct _src_x_y_t {
4997+ unsigned long src_y : 14;
4998+ unsigned long : 2;
4999+ unsigned long src_x : 14;
5000+ unsigned long : 2;
5001+ } src_x_y_t;
5002+
5003+typedef union {
5004+ unsigned long val : 32;
5005+ src_x_y_t f;
5006+} src_x_y_u;
5007+
5008+typedef struct _src_y_x_t {
5009+ unsigned long src_x : 14;
5010+ unsigned long : 2;
5011+ unsigned long src_y : 14;
5012+ unsigned long : 2;
5013+ } src_y_x_t;
5014+
5015+typedef union {
5016+ unsigned long val : 32;
5017+ src_y_x_t f;
5018+} src_y_x_u;
5019+
5020+typedef struct _src_width_t {
5021+ unsigned long src_width : 14;
5022+ unsigned long : 18;
5023+ } src_width_t;
5024+
5025+typedef union {
5026+ unsigned long val : 32;
5027+ src_width_t f;
5028+} src_width_u;
5029+
5030+typedef struct _src_height_t {
5031+ unsigned long src_height : 14;
5032+ unsigned long : 18;
5033+ } src_height_t;
5034+
5035+typedef union {
5036+ unsigned long val : 32;
5037+ src_height_t f;
5038+} src_height_u;
5039+
5040+typedef struct _src_inc_t {
5041+ unsigned long src_xinc : 6;
5042+ unsigned long : 2;
5043+ unsigned long src_yinc : 6;
5044+ unsigned long : 18;
5045+ } src_inc_t;
5046+
5047+typedef union {
5048+ unsigned long val : 32;
5049+ src_inc_t f;
5050+} src_inc_u;
5051+
5052+typedef struct _host_data0_t {
5053+ unsigned long host_data : 32;
5054+ } host_data0_t;
5055+
5056+typedef union {
5057+ unsigned long val : 32;
5058+ host_data0_t f;
5059+} host_data0_u;
5060+
5061+typedef struct _host_data1_t {
5062+ unsigned long host_data : 32;
5063+ } host_data1_t;
5064+
5065+typedef union {
5066+ unsigned long val : 32;
5067+ host_data1_t f;
5068+} host_data1_u;
5069+
5070+typedef struct _host_data2_t {
5071+ unsigned long host_data : 32;
5072+ } host_data2_t;
5073+
5074+typedef union {
5075+ unsigned long val : 32;
5076+ host_data2_t f;
5077+} host_data2_u;
5078+
5079+typedef struct _host_data3_t {
5080+ unsigned long host_data : 32;
5081+ } host_data3_t;
5082+
5083+typedef union {
5084+ unsigned long val : 32;
5085+ host_data3_t f;
5086+} host_data3_u;
5087+
5088+typedef struct _host_data4_t {
5089+ unsigned long host_data : 32;
5090+ } host_data4_t;
5091+
5092+typedef union {
5093+ unsigned long val : 32;
5094+ host_data4_t f;
5095+} host_data4_u;
5096+
5097+typedef struct _host_data5_t {
5098+ unsigned long host_data : 32;
5099+ } host_data5_t;
5100+
5101+typedef union {
5102+ unsigned long val : 32;
5103+ host_data5_t f;
5104+} host_data5_u;
5105+
5106+typedef struct _host_data6_t {
5107+ unsigned long host_data : 32;
5108+ } host_data6_t;
5109+
5110+typedef union {
5111+ unsigned long val : 32;
5112+ host_data6_t f;
5113+} host_data6_u;
5114+
5115+typedef struct _host_data7_t {
5116+ unsigned long host_data : 32;
5117+ } host_data7_t;
5118+
5119+typedef union {
5120+ unsigned long val : 32;
5121+ host_data7_t f;
5122+} host_data7_u;
5123+
5124+typedef struct _host_data_last_t {
5125+ unsigned long host_data_last : 32;
5126+ } host_data_last_t;
5127+
5128+typedef union {
5129+ unsigned long val : 32;
5130+ host_data_last_t f;
5131+} host_data_last_u;
5132+
5133+typedef struct _dp_src_frgd_clr_t {
5134+ unsigned long dp_src_frgd_clr : 32;
5135+ } dp_src_frgd_clr_t;
5136+
5137+typedef union {
5138+ unsigned long val : 32;
5139+ dp_src_frgd_clr_t f;
5140+} dp_src_frgd_clr_u;
5141+
5142+typedef struct _dp_src_bkgd_clr_t {
5143+ unsigned long dp_src_bkgd_clr : 32;
5144+ } dp_src_bkgd_clr_t;
5145+
5146+typedef union {
5147+ unsigned long val : 32;
5148+ dp_src_bkgd_clr_t f;
5149+} dp_src_bkgd_clr_u;
5150+
5151+typedef struct _sc_left_t {
5152+ unsigned long sc_left : 14;
5153+ unsigned long : 18;
5154+ } sc_left_t;
5155+
5156+typedef union {
5157+ unsigned long val : 32;
5158+ sc_left_t f;
5159+} sc_left_u;
5160+
5161+typedef struct _sc_right_t {
5162+ unsigned long sc_right : 14;
5163+ unsigned long : 18;
5164+ } sc_right_t;
5165+
5166+typedef union {
5167+ unsigned long val : 32;
5168+ sc_right_t f;
5169+} sc_right_u;
5170+
5171+typedef struct _sc_top_t {
5172+ unsigned long sc_top : 14;
5173+ unsigned long : 18;
5174+ } sc_top_t;
5175+
5176+typedef union {
5177+ unsigned long val : 32;
5178+ sc_top_t f;
5179+} sc_top_u;
5180+
5181+typedef struct _sc_bottom_t {
5182+ unsigned long sc_bottom : 14;
5183+ unsigned long : 18;
5184+ } sc_bottom_t;
5185+
5186+typedef union {
5187+ unsigned long val : 32;
5188+ sc_bottom_t f;
5189+} sc_bottom_u;
5190+
5191+typedef struct _src_sc_right_t {
5192+ unsigned long sc_right : 14;
5193+ unsigned long : 18;
5194+ } src_sc_right_t;
5195+
5196+typedef union {
5197+ unsigned long val : 32;
5198+ src_sc_right_t f;
5199+} src_sc_right_u;
5200+
5201+typedef struct _src_sc_bottom_t {
5202+ unsigned long sc_bottom : 14;
5203+ unsigned long : 18;
5204+ } src_sc_bottom_t;
5205+
5206+typedef union {
5207+ unsigned long val : 32;
5208+ src_sc_bottom_t f;
5209+} src_sc_bottom_u;
5210+
5211+typedef struct _dp_cntl_t {
5212+ unsigned long dst_x_dir : 1;
5213+ unsigned long dst_y_dir : 1;
5214+ unsigned long src_x_dir : 1;
5215+ unsigned long src_y_dir : 1;
5216+ unsigned long dst_major_x : 1;
5217+ unsigned long src_major_x : 1;
5218+ unsigned long : 26;
5219+ } dp_cntl_t;
5220+
5221+typedef union {
5222+ unsigned long val : 32;
5223+ dp_cntl_t f;
5224+} dp_cntl_u;
5225+
5226+typedef struct _dp_cntl_dst_dir_t {
5227+ unsigned long : 15;
5228+ unsigned long dst_y_dir : 1;
5229+ unsigned long : 15;
5230+ unsigned long dst_x_dir : 1;
5231+ } dp_cntl_dst_dir_t;
5232+
5233+typedef union {
5234+ unsigned long val : 32;
5235+ dp_cntl_dst_dir_t f;
5236+} dp_cntl_dst_dir_u;
5237+
5238+typedef struct _dp_datatype_t {
5239+ unsigned long dp_dst_datatype : 4;
5240+ unsigned long : 4;
5241+ unsigned long dp_brush_datatype : 4;
5242+ unsigned long dp_src2_type : 1;
5243+ unsigned long dp_src2_datatype : 3;
5244+ unsigned long dp_src_datatype : 3;
5245+ unsigned long : 11;
5246+ unsigned long dp_byte_pix_order : 1;
5247+ unsigned long : 1;
5248+ } dp_datatype_t;
5249+
5250+typedef union {
5251+ unsigned long val : 32;
5252+ dp_datatype_t f;
5253+} dp_datatype_u;
5254+
5255+typedef struct _dp_mix_t {
5256+ unsigned long : 8;
5257+ unsigned long dp_src_source : 3;
5258+ unsigned long dp_src2_source : 3;
5259+ unsigned long : 2;
5260+ unsigned long dp_rop3 : 8;
5261+ unsigned long dp_op : 1;
5262+ unsigned long : 7;
5263+ } dp_mix_t;
5264+
5265+typedef union {
5266+ unsigned long val : 32;
5267+ dp_mix_t f;
5268+} dp_mix_u;
5269+
5270+typedef struct _dp_write_msk_t {
5271+ unsigned long dp_write_msk : 32;
5272+ } dp_write_msk_t;
5273+
5274+typedef union {
5275+ unsigned long val : 32;
5276+ dp_write_msk_t f;
5277+} dp_write_msk_u;
5278+
5279+typedef struct _clr_cmp_clr_src_t {
5280+ unsigned long clr_cmp_clr_src : 32;
5281+ } clr_cmp_clr_src_t;
5282+
5283+typedef union {
5284+ unsigned long val : 32;
5285+ clr_cmp_clr_src_t f;
5286+} clr_cmp_clr_src_u;
5287+
5288+typedef struct _clr_cmp_clr_dst_t {
5289+ unsigned long clr_cmp_clr_dst : 32;
5290+ } clr_cmp_clr_dst_t;
5291+
5292+typedef union {
5293+ unsigned long val : 32;
5294+ clr_cmp_clr_dst_t f;
5295+} clr_cmp_clr_dst_u;
5296+
5297+typedef struct _clr_cmp_cntl_t {
5298+ unsigned long clr_cmp_fcn_src : 3;
5299+ unsigned long : 5;
5300+ unsigned long clr_cmp_fcn_dst : 3;
5301+ unsigned long : 13;
5302+ unsigned long clr_cmp_src : 2;
5303+ unsigned long : 6;
5304+ } clr_cmp_cntl_t;
5305+
5306+typedef union {
5307+ unsigned long val : 32;
5308+ clr_cmp_cntl_t f;
5309+} clr_cmp_cntl_u;
5310+
5311+typedef struct _clr_cmp_msk_t {
5312+ unsigned long clr_cmp_msk : 32;
5313+ } clr_cmp_msk_t;
5314+
5315+typedef union {
5316+ unsigned long val : 32;
5317+ clr_cmp_msk_t f;
5318+} clr_cmp_msk_u;
5319+
5320+typedef struct _default_pitch_offset_t {
5321+ unsigned long default_offset : 20;
5322+ unsigned long default_pitch : 10;
5323+ unsigned long : 2;
5324+ } default_pitch_offset_t;
5325+
5326+typedef union {
5327+ unsigned long val : 32;
5328+ default_pitch_offset_t f;
5329+} default_pitch_offset_u;
5330+
5331+typedef struct _default_sc_bottom_right_t {
5332+ unsigned long default_sc_right : 14;
5333+ unsigned long : 2;
5334+ unsigned long default_sc_bottom : 14;
5335+ unsigned long : 2;
5336+ } default_sc_bottom_right_t;
5337+
5338+typedef union {
5339+ unsigned long val : 32;
5340+ default_sc_bottom_right_t f;
5341+} default_sc_bottom_right_u;
5342+
5343+typedef struct _default2_sc_bottom_right_t {
5344+ unsigned long default_sc_right : 14;
5345+ unsigned long : 2;
5346+ unsigned long default_sc_bottom : 14;
5347+ unsigned long : 2;
5348+ } default2_sc_bottom_right_t;
5349+
5350+typedef union {
5351+ unsigned long val : 32;
5352+ default2_sc_bottom_right_t f;
5353+} default2_sc_bottom_right_u;
5354+
5355+typedef struct _ref1_pitch_offset_t {
5356+ unsigned long offset : 20;
5357+ unsigned long : 2;
5358+ unsigned long pitch : 8;
5359+ unsigned long : 2;
5360+ } ref1_pitch_offset_t;
5361+
5362+typedef union {
5363+ unsigned long val : 32;
5364+ ref1_pitch_offset_t f;
5365+} ref1_pitch_offset_u;
5366+
5367+typedef struct _ref2_pitch_offset_t {
5368+ unsigned long offset : 20;
5369+ unsigned long : 2;
5370+ unsigned long pitch : 8;
5371+ unsigned long : 2;
5372+ } ref2_pitch_offset_t;
5373+
5374+typedef union {
5375+ unsigned long val : 32;
5376+ ref2_pitch_offset_t f;
5377+} ref2_pitch_offset_u;
5378+
5379+typedef struct _ref3_pitch_offset_t {
5380+ unsigned long offset : 20;
5381+ unsigned long : 2;
5382+ unsigned long pitch : 8;
5383+ unsigned long : 2;
5384+ } ref3_pitch_offset_t;
5385+
5386+typedef union {
5387+ unsigned long val : 32;
5388+ ref3_pitch_offset_t f;
5389+} ref3_pitch_offset_u;
5390+
5391+typedef struct _ref4_pitch_offset_t {
5392+ unsigned long offset : 20;
5393+ unsigned long : 2;
5394+ unsigned long pitch : 8;
5395+ unsigned long : 2;
5396+ } ref4_pitch_offset_t;
5397+
5398+typedef union {
5399+ unsigned long val : 32;
5400+ ref4_pitch_offset_t f;
5401+} ref4_pitch_offset_u;
5402+
5403+typedef struct _ref5_pitch_offset_t {
5404+ unsigned long offset : 20;
5405+ unsigned long : 2;
5406+ unsigned long pitch : 8;
5407+ unsigned long : 2;
5408+ } ref5_pitch_offset_t;
5409+
5410+typedef union {
5411+ unsigned long val : 32;
5412+ ref5_pitch_offset_t f;
5413+} ref5_pitch_offset_u;
5414+
5415+typedef struct _ref6_pitch_offset_t {
5416+ unsigned long offset : 20;
5417+ unsigned long : 2;
5418+ unsigned long pitch : 8;
5419+ unsigned long : 2;
5420+ } ref6_pitch_offset_t;
5421+
5422+typedef union {
5423+ unsigned long val : 32;
5424+ ref6_pitch_offset_t f;
5425+} ref6_pitch_offset_u;
5426+
5427+typedef struct _dp_gui_master_cntl_t {
5428+ unsigned long gmc_src_pitch_offset_cntl : 1;
5429+ unsigned long gmc_dst_pitch_offset_cntl : 1;
5430+ unsigned long gmc_src_clipping : 1;
5431+ unsigned long gmc_dst_clipping : 1;
5432+ unsigned long gmc_brush_datatype : 4;
5433+ unsigned long gmc_dst_datatype : 4;
5434+ unsigned long gmc_src_datatype : 3;
5435+ unsigned long gmc_byte_pix_order : 1;
5436+ unsigned long gmc_default_sel : 1;
5437+ unsigned long gmc_rop3 : 8;
5438+ unsigned long gmc_dp_src_source : 3;
5439+ unsigned long gmc_clr_cmp_fcn_dis : 1;
5440+ unsigned long : 1;
5441+ unsigned long gmc_wr_msk_dis : 1;
5442+ unsigned long gmc_dp_op : 1;
5443+ } dp_gui_master_cntl_t;
5444+
5445+typedef union {
5446+ unsigned long val : 32;
5447+ dp_gui_master_cntl_t f;
5448+} dp_gui_master_cntl_u;
5449+
5450+typedef struct _sc_top_left_t {
5451+ unsigned long sc_left : 14;
5452+ unsigned long : 2;
5453+ unsigned long sc_top : 14;
5454+ unsigned long : 2;
5455+ } sc_top_left_t;
5456+
5457+typedef union {
5458+ unsigned long val : 32;
5459+ sc_top_left_t f;
5460+} sc_top_left_u;
5461+
5462+typedef struct _sc_bottom_right_t {
5463+ unsigned long sc_right : 14;
5464+ unsigned long : 2;
5465+ unsigned long sc_bottom : 14;
5466+ unsigned long : 2;
5467+ } sc_bottom_right_t;
5468+
5469+typedef union {
5470+ unsigned long val : 32;
5471+ sc_bottom_right_t f;
5472+} sc_bottom_right_u;
5473+
5474+typedef struct _src_sc_top_left_t {
5475+ unsigned short sc_left;
5476+ unsigned short sc_top;
5477+} src_sc_top_left_t;
5478+
5479+typedef union {
5480+ unsigned long val : 32;
5481+ src_sc_top_left_t f;
5482+} src_sc_top_left_u;
5483+
5484+typedef struct _src_sc_bottom_right_t {
5485+ unsigned long sc_right : 14;
5486+ unsigned long : 2;
5487+ unsigned long sc_bottom : 14;
5488+ unsigned long : 2;
5489+ } src_sc_bottom_right_t;
5490+
5491+typedef union {
5492+ unsigned long val : 32;
5493+ src_sc_bottom_right_t f;
5494+} src_sc_bottom_right_u;
5495+
5496+typedef struct _global_alpha_t {
5497+ unsigned long alpha_r : 8;
5498+ unsigned long alpha_g : 8;
5499+ unsigned long alpha_b : 8;
5500+ unsigned long alpha_a : 8;
5501+} global_alpha_t;
5502+
5503+typedef union {
5504+ unsigned long val : 32;
5505+ global_alpha_t f;
5506+} global_alpha_u;
5507+
5508+typedef struct _filter_coef_t {
5509+ unsigned long c_4 : 4;
5510+ unsigned long c_3 : 4;
5511+ unsigned long c_2 : 4;
5512+ unsigned long c_1 : 4;
5513+ unsigned long c1 : 4;
5514+ unsigned long c2 : 4;
5515+ unsigned long c3 : 4;
5516+ unsigned long c4 : 4;
5517+} filter_coef_t;
5518+
5519+typedef union {
5520+ unsigned long val : 32;
5521+ filter_coef_t f;
5522+} filter_coef_u;
5523+
5524+typedef struct _mvc_cntl_start_t {
5525+ unsigned long mc_cntl_src_1_index : 4;
5526+ unsigned long mc_cntl_dst_offset : 20;
5527+ unsigned long mc_dst_pitch_mul : 2;
5528+ unsigned long mc_cntl_src_2_index : 3;
5529+ unsigned long mc_cntl_width_height_sel : 3;
5530+} mvc_cntl_start_t;
5531+
5532+typedef union {
5533+ unsigned long val : 32;
5534+ mvc_cntl_start_t f;
5535+} mvc_cntl_start_u;
5536+
5537+typedef struct _e2_arithmetic_cntl_t {
5538+ unsigned long opcode : 5;
5539+ unsigned long shiftright : 4;
5540+ unsigned long clamp : 1;
5541+ unsigned long rounding : 2;
5542+ unsigned long filter_n : 3;
5543+ unsigned long : 1;
5544+ unsigned long srcblend_inv : 1;
5545+ unsigned long srcblend : 4;
5546+ unsigned long : 3;
5547+ unsigned long dstblend_inv : 1;
5548+ unsigned long dstblend : 4;
5549+ unsigned long dst_signed : 1;
5550+ unsigned long autoinc : 1;
5551+ unsigned long : 1;
5552+} e2_arithmetic_cntl_t;
5553+
5554+typedef union {
5555+ unsigned long val : 32;
5556+ e2_arithmetic_cntl_t f;
5557+} e2_arithmetic_cntl_u;
5558+
5559+typedef struct _debug0_t {
5560+ unsigned long debug0_r : 8;
5561+ unsigned long : 8;
5562+ unsigned long debug0_rw : 8;
5563+ unsigned long : 8;
5564+} debug0_t;
5565+
5566+typedef union {
5567+ unsigned long val : 32;
5568+ debug0_t f;
5569+} debug0_u;
5570+
5571+typedef struct _debug1_t {
5572+ unsigned long debug1_r : 8;
5573+ unsigned long : 8;
5574+ unsigned long debug1_rw : 8;
5575+ unsigned long : 8;
5576+} debug1_t;
5577+
5578+typedef union {
5579+ unsigned long val : 32;
5580+ debug1_t f;
5581+} debug1_u;
5582+
5583+typedef struct _debug2_t {
5584+ unsigned long debug2_r : 8;
5585+ unsigned long : 8;
5586+ unsigned long debug2_rw : 8;
5587+ unsigned long : 8;
5588+} debug2_t;
5589+
5590+typedef union {
5591+ unsigned long val : 32;
5592+ debug2_t f;
5593+} debug2_u;
5594+
5595+typedef struct _debug3_t {
5596+ unsigned long : 32;
5597+} debug3_t;
5598+
5599+typedef union {
5600+ unsigned long val : 32;
5601+ debug3_t f;
5602+} debug3_u;
5603+
5604+typedef struct _debug4_t {
5605+ unsigned long : 32;
5606+} debug4_t;
5607+
5608+typedef union {
5609+ unsigned long val : 32;
5610+ debug4_t f;
5611+} debug4_u;
5612+
5613+typedef struct _debug5_t {
5614+ unsigned long : 32;
5615+} debug5_t;
5616+
5617+typedef union {
5618+ unsigned long val : 32;
5619+ debug5_t f;
5620+} debug5_u;
5621+
5622+typedef struct _debug6_t {
5623+ unsigned long : 32;
5624+} debug6_t;
5625+
5626+typedef union {
5627+ unsigned long val : 32;
5628+ debug6_t f;
5629+} debug6_u;
5630+
5631+typedef struct _debug7_t {
5632+ unsigned long : 32;
5633+} debug7_t;
5634+
5635+typedef union {
5636+ unsigned long val : 32;
5637+ debug7_t f;
5638+} debug7_u;
5639+
5640+typedef struct _debug8_t {
5641+ unsigned long : 32;
5642+} debug8_t;
5643+
5644+typedef union {
5645+ unsigned long val : 32;
5646+ debug8_t f;
5647+} debug8_u;
5648+
5649+typedef struct _debug9_t {
5650+ unsigned long : 32;
5651+} debug9_t;
5652+
5653+typedef union {
5654+ unsigned long val : 32;
5655+ debug9_t f;
5656+} debug9_u;
5657+
5658+typedef struct _debug10_t {
5659+ unsigned long : 32;
5660+ } debug10_t;
5661+
5662+typedef union {
5663+ unsigned long val : 32;
5664+ debug10_t f;
5665+} debug10_u;
5666+
5667+typedef struct _debug11_t {
5668+ unsigned long : 32;
5669+ } debug11_t;
5670+
5671+typedef union {
5672+ unsigned long val : 32;
5673+ debug11_t f;
5674+} debug11_u;
5675+
5676+typedef struct _debug12_t {
5677+ unsigned long : 32;
5678+ } debug12_t;
5679+
5680+typedef union {
5681+ unsigned long val : 32;
5682+ debug12_t f;
5683+} debug12_u;
5684+
5685+typedef struct _debug13_t {
5686+ unsigned long : 32;
5687+ } debug13_t;
5688+
5689+typedef union {
5690+ unsigned long val : 32;
5691+ debug13_t f;
5692+} debug13_u;
5693+
5694+typedef struct _debug14_t {
5695+ unsigned long : 32;
5696+ } debug14_t;
5697+
5698+typedef union {
5699+ unsigned long val : 32;
5700+ debug14_t f;
5701+} debug14_u;
5702+
5703+typedef struct _debug15_t {
5704+ unsigned long : 32;
5705+ } debug15_t;
5706+
5707+typedef union {
5708+ unsigned long val : 32;
5709+ debug15_t f;
5710+} debug15_u;
5711+
5712+typedef struct _eng_cntl_t {
5713+ unsigned long erc_reg_rd_ws : 1;
5714+ unsigned long erc_reg_wr_ws : 1;
5715+ unsigned long erc_idle_reg_wr : 1;
5716+ unsigned long dis_engine_triggers : 1;
5717+ unsigned long dis_rop_src_uses_dst_w_h : 1;
5718+ unsigned long dis_src_uses_dst_dirmaj : 1;
5719+ unsigned long : 6;
5720+ unsigned long force_3dclk_when_2dclk : 1;
5721+ unsigned long : 19;
5722+ } eng_cntl_t;
5723+
5724+typedef union {
5725+ unsigned long val : 32;
5726+ eng_cntl_t f;
5727+} eng_cntl_u;
5728+
5729+typedef struct _eng_perf_cnt_t {
5730+ unsigned long perf_cnt : 20;
5731+ unsigned long perf_sel : 4;
5732+ unsigned long perf_en : 1;
5733+ unsigned long : 3;
5734+ unsigned long perf_clr : 1;
5735+ unsigned long : 3;
5736+ } eng_perf_cnt_t;
5737+
5738+typedef union {
5739+ unsigned long val : 32;
5740+ eng_perf_cnt_t f;
5741+} eng_perf_cnt_u;
5742+
5743+typedef struct _idct_runs_t {
5744+ unsigned long idct_runs_3 : 8;
5745+ unsigned long idct_runs_2 : 8;
5746+ unsigned long idct_runs_1 : 8;
5747+ unsigned long idct_runs_0 : 8;
5748+ } idct_runs_t;
5749+
5750+typedef union {
5751+ unsigned long val : 32;
5752+ idct_runs_t f;
5753+} idct_runs_u;
5754+
5755+typedef struct _idct_levels_t {
5756+ unsigned long idct_level_hi : 16;
5757+ unsigned long idct_level_lo : 16;
5758+ } idct_levels_t;
5759+
5760+typedef union {
5761+ unsigned long val : 32;
5762+ idct_levels_t f;
5763+} idct_levels_u;
5764+
5765+typedef struct _idct_control_t {
5766+ unsigned long idct_ctl_luma_rd_format : 2;
5767+ unsigned long idct_ctl_chroma_rd_format : 2;
5768+ unsigned long idct_ctl_scan_pattern : 1;
5769+ unsigned long idct_ctl_intra : 1;
5770+ unsigned long idct_ctl_flush : 1;
5771+ unsigned long idct_ctl_passthru : 1;
5772+ unsigned long idct_ctl_sw_reset : 1;
5773+ unsigned long idct_ctl_constreq : 1;
5774+ unsigned long idct_ctl_scramble : 1;
5775+ unsigned long idct_ctl_alt_scan : 1;
5776+ unsigned long : 20;
5777+ } idct_control_t;
5778+
5779+typedef union {
5780+ unsigned long val : 32;
5781+ idct_control_t f;
5782+} idct_control_u;
5783+
5784+typedef struct _idct_auth_control_t {
5785+ unsigned long control_bits : 32;
5786+ } idct_auth_control_t;
5787+
5788+typedef union {
5789+ unsigned long val : 32;
5790+ idct_auth_control_t f;
5791+} idct_auth_control_u;
5792+
5793+typedef struct _idct_auth_t {
5794+ unsigned long auth : 32;
5795+ } idct_auth_t;
5796+
5797+typedef union {
5798+ unsigned long val : 32;
5799+ idct_auth_t f;
5800+} idct_auth_u;
5801+
5802+typedef struct _mem_cntl_t {
5803+ unsigned long : 1;
5804+ unsigned long en_mem_ch1 : 1;
5805+ unsigned long en_mem_ch2 : 1;
5806+ unsigned long int_mem_mapping : 1;
5807+ unsigned long : 28;
5808+ } mem_cntl_t;
5809+
5810+typedef union {
5811+ unsigned long val : 32;
5812+ mem_cntl_t f;
5813+} mem_cntl_u;
5814+
5815+typedef struct _mem_arb_t {
5816+ unsigned long disp_time_slot : 4;
5817+ unsigned long disp_timer : 4;
5818+ unsigned long arb_option : 1;
5819+ unsigned long : 23;
5820+ } mem_arb_t;
5821+
5822+typedef union {
5823+ unsigned long val : 32;
5824+ mem_arb_t f;
5825+} mem_arb_u;
5826+
5827+typedef struct _mc_fb_location_t {
5828+ unsigned long mc_fb_start : 16;
5829+ unsigned long mc_fb_top : 16;
5830+ } mc_fb_location_t;
5831+
5832+typedef union {
5833+ unsigned long val : 32;
5834+ mc_fb_location_t f;
5835+} mc_fb_location_u;
5836+
5837+typedef struct _mem_ext_cntl_t {
5838+ unsigned long mem_ext_enable : 1;
5839+ unsigned long mem_ap_enable : 1;
5840+ unsigned long mem_addr_mapping : 2;
5841+ unsigned long mem_wdoe_cntl : 2;
5842+ unsigned long mem_wdoe_extend : 1;
5843+ unsigned long : 1;
5844+ unsigned long mem_page_timer : 8;
5845+ unsigned long mem_dynamic_cke : 1;
5846+ unsigned long mem_sdram_tri_en : 1;
5847+ unsigned long mem_self_refresh_en : 1;
5848+ unsigned long mem_power_down : 1;
5849+ unsigned long mem_hw_power_down_en : 1;
5850+ unsigned long mem_power_down_stat : 1;
5851+ unsigned long : 3;
5852+ unsigned long mem_pd_mck : 1;
5853+ unsigned long mem_pd_ma : 1;
5854+ unsigned long mem_pd_mdq : 1;
5855+ unsigned long mem_tristate_mck : 1;
5856+ unsigned long mem_tristate_ma : 1;
5857+ unsigned long mem_tristate_mcke : 1;
5858+ unsigned long mem_invert_mck : 1;
5859+ } mem_ext_cntl_t;
5860+
5861+typedef union {
5862+ unsigned long val : 32;
5863+ mem_ext_cntl_t f;
5864+} mem_ext_cntl_u;
5865+
5866+typedef struct _mc_ext_mem_location_t {
5867+ unsigned long mc_ext_mem_start : 16;
5868+ unsigned long mc_ext_mem_top : 16;
5869+ } mc_ext_mem_location_t;
5870+
5871+typedef union {
5872+ unsigned long val : 32;
5873+ mc_ext_mem_location_t f;
5874+} mc_ext_mem_location_u;
5875+
5876+typedef struct _mem_ext_timing_cntl_t {
5877+ unsigned long mem_trp : 2;
5878+ unsigned long mem_trcd : 2;
5879+ unsigned long mem_tras : 3;
5880+ unsigned long : 1;
5881+ unsigned long mem_trrd : 2;
5882+ unsigned long mem_tr2w : 2;
5883+ unsigned long mem_twr : 2;
5884+ unsigned long : 4;
5885+ unsigned long mem_twr_mode : 1;
5886+ unsigned long : 1;
5887+ unsigned long mem_refresh_dis : 1;
5888+ unsigned long : 3;
5889+ unsigned long mem_refresh_rate : 8;
5890+ } mem_ext_timing_cntl_t;
5891+
5892+typedef union {
5893+ unsigned long val : 32;
5894+ mem_ext_timing_cntl_t f;
5895+} mem_ext_timing_cntl_u;
5896+
5897+typedef struct _mem_sdram_mode_reg_t {
5898+ unsigned long mem_mode_reg : 14;
5899+ unsigned long : 2;
5900+ unsigned long mem_read_latency : 2;
5901+ unsigned long mem_schmen_latency : 2;
5902+ unsigned long mem_cas_latency : 2;
5903+ unsigned long mem_schmen_extend : 1;
5904+ unsigned long : 8;
5905+ unsigned long mem_sdram_reset : 1;
5906+ } mem_sdram_mode_reg_t;
5907+
5908+typedef union {
5909+ unsigned long val : 32;
5910+ mem_sdram_mode_reg_t f;
5911+} mem_sdram_mode_reg_u;
5912+
5913+typedef struct _mem_io_cntl_t {
5914+ unsigned long mem_sn_mck : 4;
5915+ unsigned long mem_sn_ma : 4;
5916+ unsigned long mem_sn_mdq : 4;
5917+ unsigned long mem_srn_mck : 1;
5918+ unsigned long mem_srn_ma : 1;
5919+ unsigned long mem_srn_mdq : 1;
5920+ unsigned long : 1;
5921+ unsigned long mem_sp_mck : 4;
5922+ unsigned long mem_sp_ma : 4;
5923+ unsigned long mem_sp_mdq : 4;
5924+ unsigned long mem_srp_mck : 1;
5925+ unsigned long mem_srp_ma : 1;
5926+ unsigned long mem_srp_mdq : 1;
5927+ unsigned long : 1;
5928+ } mem_io_cntl_t;
5929+
5930+typedef union {
5931+ unsigned long val : 32;
5932+ mem_io_cntl_t f;
5933+} mem_io_cntl_u;
5934+
5935+typedef struct _mc_debug_t {
5936+ unsigned long mc_debug : 32;
5937+ } mc_debug_t;
5938+
5939+typedef union {
5940+ unsigned long val : 32;
5941+ mc_debug_t f;
5942+} mc_debug_u;
5943+
5944+typedef struct _mc_bist_ctrl_t {
5945+ unsigned long mc_bist_ctrl : 32;
5946+ } mc_bist_ctrl_t;
5947+
5948+typedef union {
5949+ unsigned long val : 32;
5950+ mc_bist_ctrl_t f;
5951+} mc_bist_ctrl_u;
5952+
5953+typedef struct _mc_bist_collar_read_t {
5954+ unsigned long mc_bist_collar_read : 32;
5955+ } mc_bist_collar_read_t;
5956+
5957+typedef union {
5958+ unsigned long val : 32;
5959+ mc_bist_collar_read_t f;
5960+} mc_bist_collar_read_u;
5961+
5962+typedef struct _tc_mismatch_t {
5963+ unsigned long tc_mismatch : 24;
5964+ unsigned long : 8;
5965+ } tc_mismatch_t;
5966+
5967+typedef union {
5968+ unsigned long val : 32;
5969+ tc_mismatch_t f;
5970+} tc_mismatch_u;
5971+
5972+typedef struct _mc_perf_mon_cntl_t {
5973+ unsigned long clr_perf : 1;
5974+ unsigned long en_perf : 1;
5975+ unsigned long : 2;
5976+ unsigned long perf_op_a : 2;
5977+ unsigned long perf_op_b : 2;
5978+ unsigned long : 8;
5979+ unsigned long monitor_period : 8;
5980+ unsigned long perf_count_a_overflow : 1;
5981+ unsigned long perf_count_b_overflow : 1;
5982+ unsigned long : 6;
5983+ } mc_perf_mon_cntl_t;
5984+
5985+typedef union {
5986+ unsigned long val : 32;
5987+ mc_perf_mon_cntl_t f;
5988+} mc_perf_mon_cntl_u;
5989+
5990+typedef struct _mc_perf_counters_t {
5991+ unsigned long mc_perf_counter_a : 16;
5992+ unsigned long mc_perf_counter_b : 16;
5993+ } mc_perf_counters_t;
5994+
5995+typedef union {
5996+ unsigned long val : 32;
5997+ mc_perf_counters_t f;
5998+} mc_perf_counters_u;
5999+
6000+typedef struct _wait_until_t {
6001+ unsigned long wait_crtc_pflip : 1;
6002+ unsigned long wait_re_crtc_vline : 1;
6003+ unsigned long wait_fe_crtc_vline : 1;
6004+ unsigned long wait_crtc_vline : 1;
6005+ unsigned long wait_dma_viph0_idle : 1;
6006+ unsigned long wait_dma_viph1_idle : 1;
6007+ unsigned long wait_dma_viph2_idle : 1;
6008+ unsigned long wait_dma_viph3_idle : 1;
6009+ unsigned long wait_dma_vid_idle : 1;
6010+ unsigned long wait_dma_gui_idle : 1;
6011+ unsigned long wait_cmdfifo : 1;
6012+ unsigned long wait_ov0_flip : 1;
6013+ unsigned long wait_ov0_slicedone : 1;
6014+ unsigned long : 1;
6015+ unsigned long wait_2d_idle : 1;
6016+ unsigned long wait_3d_idle : 1;
6017+ unsigned long wait_2d_idleclean : 1;
6018+ unsigned long wait_3d_idleclean : 1;
6019+ unsigned long wait_host_idleclean : 1;
6020+ unsigned long wait_extern_sig : 1;
6021+ unsigned long cmdfifo_entries : 7;
6022+ unsigned long : 3;
6023+ unsigned long wait_both_crtc_pflip : 1;
6024+ unsigned long eng_display_select : 1;
6025+ } wait_until_t;
6026+
6027+typedef union {
6028+ unsigned long val : 32;
6029+ wait_until_t f;
6030+} wait_until_u;
6031+
6032+typedef struct _isync_cntl_t {
6033+ unsigned long isync_any2d_idle3d : 1;
6034+ unsigned long isync_any3d_idle2d : 1;
6035+ unsigned long isync_trig2d_idle3d : 1;
6036+ unsigned long isync_trig3d_idle2d : 1;
6037+ unsigned long isync_wait_idlegui : 1;
6038+ unsigned long isync_cpscratch_idlegui : 1;
6039+ unsigned long : 26;
6040+ } isync_cntl_t;
6041+
6042+typedef union {
6043+ unsigned long val : 32;
6044+ isync_cntl_t f;
6045+} isync_cntl_u;
6046+
6047+typedef struct _rbbm_guicntl_t {
6048+ unsigned long host_data_swap : 2;
6049+ unsigned long : 30;
6050+ } rbbm_guicntl_t;
6051+
6052+typedef union {
6053+ unsigned long val : 32;
6054+ rbbm_guicntl_t f;
6055+} rbbm_guicntl_u;
6056+
6057+typedef struct _rbbm_status_t {
6058+ unsigned long cmdfifo_avail : 7;
6059+ unsigned long : 1;
6060+ unsigned long hirq_on_rbb : 1;
6061+ unsigned long cprq_on_rbb : 1;
6062+ unsigned long cfrq_on_rbb : 1;
6063+ unsigned long hirq_in_rtbuf : 1;
6064+ unsigned long cprq_in_rtbuf : 1;
6065+ unsigned long cfrq_in_rtbuf : 1;
6066+ unsigned long cf_pipe_busy : 1;
6067+ unsigned long eng_ev_busy : 1;
6068+ unsigned long cp_cmdstrm_busy : 1;
6069+ unsigned long e2_busy : 1;
6070+ unsigned long rb2d_busy : 1;
6071+ unsigned long rb3d_busy : 1;
6072+ unsigned long se_busy : 1;
6073+ unsigned long re_busy : 1;
6074+ unsigned long tam_busy : 1;
6075+ unsigned long tdm_busy : 1;
6076+ unsigned long pb_busy : 1;
6077+ unsigned long : 6;
6078+ unsigned long gui_active : 1;
6079+ } rbbm_status_t;
6080+
6081+typedef union {
6082+ unsigned long val : 32;
6083+ rbbm_status_t f;
6084+} rbbm_status_u;
6085+
6086+typedef struct _rbbm_cntl_t {
6087+ unsigned long rb_settle : 4;
6088+ unsigned long abortclks_hi : 3;
6089+ unsigned long : 1;
6090+ unsigned long abortclks_cp : 3;
6091+ unsigned long : 1;
6092+ unsigned long abortclks_cfifo : 3;
6093+ unsigned long : 2;
6094+ unsigned long cpq_data_swap : 1;
6095+ unsigned long : 3;
6096+ unsigned long no_abort_idct : 1;
6097+ unsigned long no_abort_bios : 1;
6098+ unsigned long no_abort_fb : 1;
6099+ unsigned long no_abort_cp : 1;
6100+ unsigned long no_abort_hi : 1;
6101+ unsigned long no_abort_hdp : 1;
6102+ unsigned long no_abort_mc : 1;
6103+ unsigned long no_abort_aic : 1;
6104+ unsigned long no_abort_vip : 1;
6105+ unsigned long no_abort_disp : 1;
6106+ unsigned long no_abort_cg : 1;
6107+ } rbbm_cntl_t;
6108+
6109+typedef union {
6110+ unsigned long val : 32;
6111+ rbbm_cntl_t f;
6112+} rbbm_cntl_u;
6113+
6114+typedef struct _rbbm_soft_reset_t {
6115+ unsigned long soft_reset_cp : 1;
6116+ unsigned long soft_reset_hi : 1;
6117+ unsigned long reserved3 : 3;
6118+ unsigned long soft_reset_e2 : 1;
6119+ unsigned long reserved2 : 2;
6120+ unsigned long soft_reset_mc : 1;
6121+ unsigned long reserved1 : 2;
6122+ unsigned long soft_reset_disp : 1;
6123+ unsigned long soft_reset_cg : 1;
6124+ unsigned long : 19;
6125+ } rbbm_soft_reset_t;
6126+
6127+typedef union {
6128+ unsigned long val : 32;
6129+ rbbm_soft_reset_t f;
6130+} rbbm_soft_reset_u;
6131+
6132+typedef struct _nqwait_until_t {
6133+ unsigned long wait_gui_idle : 1;
6134+ unsigned long : 31;
6135+ } nqwait_until_t;
6136+
6137+typedef union {
6138+ unsigned long val : 32;
6139+ nqwait_until_t f;
6140+} nqwait_until_u;
6141+
6142+typedef struct _rbbm_debug_t {
6143+ unsigned long rbbm_debug : 32;
6144+ } rbbm_debug_t;
6145+
6146+typedef union {
6147+ unsigned long val : 32;
6148+ rbbm_debug_t f;
6149+} rbbm_debug_u;
6150+
6151+typedef struct _rbbm_cmdfifo_addr_t {
6152+ unsigned long cmdfifo_addr : 6;
6153+ unsigned long : 26;
6154+ } rbbm_cmdfifo_addr_t;
6155+
6156+typedef union {
6157+ unsigned long val : 32;
6158+ rbbm_cmdfifo_addr_t f;
6159+} rbbm_cmdfifo_addr_u;
6160+
6161+typedef struct _rbbm_cmdfifo_datal_t {
6162+ unsigned long cmdfifo_datal : 32;
6163+ } rbbm_cmdfifo_datal_t;
6164+
6165+typedef union {
6166+ unsigned long val : 32;
6167+ rbbm_cmdfifo_datal_t f;
6168+} rbbm_cmdfifo_datal_u;
6169+
6170+typedef struct _rbbm_cmdfifo_datah_t {
6171+ unsigned long cmdfifo_datah : 12;
6172+ unsigned long : 20;
6173+ } rbbm_cmdfifo_datah_t;
6174+
6175+typedef union {
6176+ unsigned long val : 32;
6177+ rbbm_cmdfifo_datah_t f;
6178+} rbbm_cmdfifo_datah_u;
6179+
6180+typedef struct _rbbm_cmdfifo_stat_t {
6181+ unsigned long cmdfifo_rptr : 6;
6182+ unsigned long : 2;
6183+ unsigned long cmdfifo_wptr : 6;
6184+ unsigned long : 18;
6185+ } rbbm_cmdfifo_stat_t;
6186+
6187+typedef union {
6188+ unsigned long val : 32;
6189+ rbbm_cmdfifo_stat_t f;
6190+} rbbm_cmdfifo_stat_u;
6191+
6192+typedef struct _clk_pin_cntl_t {
6193+ unsigned long osc_en : 1;
6194+ unsigned long osc_gain : 5;
6195+ unsigned long dont_use_xtalin : 1;
6196+ unsigned long xtalin_pm_en : 1;
6197+ unsigned long xtalin_dbl_en : 1;
6198+ unsigned long : 7;
6199+ unsigned long cg_debug : 16;
6200+ } clk_pin_cntl_t;
6201+
6202+typedef union {
6203+ unsigned long val : 32;
6204+ clk_pin_cntl_t f;
6205+} clk_pin_cntl_u;
6206+
6207+typedef struct _pll_ref_fb_div_t {
6208+ unsigned long pll_ref_div : 4;
6209+ unsigned long : 4;
6210+ unsigned long pll_fb_div_int : 6;
6211+ unsigned long : 2;
6212+ unsigned long pll_fb_div_frac : 3;
6213+ unsigned long : 1;
6214+ unsigned long pll_reset_time : 4;
6215+ unsigned long pll_lock_time : 8;
6216+ } pll_ref_fb_div_t;
6217+
6218+typedef union {
6219+ unsigned long val : 32;
6220+ pll_ref_fb_div_t f;
6221+} pll_ref_fb_div_u;
6222+
6223+typedef struct _pll_cntl_t {
6224+ unsigned long pll_pwdn : 1;
6225+ unsigned long pll_reset : 1;
6226+ unsigned long pll_pm_en : 1;
6227+ unsigned long pll_mode : 1;
6228+ unsigned long pll_refclk_sel : 1;
6229+ unsigned long pll_fbclk_sel : 1;
6230+ unsigned long pll_tcpoff : 1;
6231+ unsigned long pll_pcp : 3;
6232+ unsigned long pll_pvg : 3;
6233+ unsigned long pll_vcofr : 1;
6234+ unsigned long pll_ioffset : 2;
6235+ unsigned long pll_pecc_mode : 2;
6236+ unsigned long pll_pecc_scon : 2;
6237+ unsigned long pll_dactal : 4;
6238+ unsigned long pll_cp_clip : 2;
6239+ unsigned long pll_conf : 3;
6240+ unsigned long pll_mbctrl : 2;
6241+ unsigned long pll_ring_off : 1;
6242+ } pll_cntl_t;
6243+
6244+typedef union {
6245+ unsigned long val : 32;
6246+ pll_cntl_t f;
6247+} pll_cntl_u;
6248+
6249+typedef struct _sclk_cntl_t {
6250+ unsigned long sclk_src_sel : 2;
6251+ unsigned long : 2;
6252+ unsigned long sclk_post_div_fast : 4;
6253+ unsigned long sclk_clkon_hys : 3;
6254+ unsigned long sclk_post_div_slow : 4;
6255+ unsigned long disp_cg_ok2switch_en : 1;
6256+ unsigned long sclk_force_reg : 1;
6257+ unsigned long sclk_force_disp : 1;
6258+ unsigned long sclk_force_mc : 1;
6259+ unsigned long sclk_force_extmc : 1;
6260+ unsigned long sclk_force_cp : 1;
6261+ unsigned long sclk_force_e2 : 1;
6262+ unsigned long sclk_force_e3 : 1;
6263+ unsigned long sclk_force_idct : 1;
6264+ unsigned long sclk_force_bist : 1;
6265+ unsigned long busy_extend_cp : 1;
6266+ unsigned long busy_extend_e2 : 1;
6267+ unsigned long busy_extend_e3 : 1;
6268+ unsigned long busy_extend_idct : 1;
6269+ unsigned long : 3;
6270+ } sclk_cntl_t;
6271+
6272+typedef union {
6273+ unsigned long val : 32;
6274+ sclk_cntl_t f;
6275+} sclk_cntl_u;
6276+
6277+typedef struct _pclk_cntl_t {
6278+ unsigned long pclk_src_sel : 2;
6279+ unsigned long : 2;
6280+ unsigned long pclk_post_div : 4;
6281+ unsigned long : 8;
6282+ unsigned long pclk_force_disp : 1;
6283+ unsigned long : 15;
6284+ } pclk_cntl_t;
6285+
6286+typedef union {
6287+ unsigned long val : 32;
6288+ pclk_cntl_t f;
6289+} pclk_cntl_u;
6290+
6291+typedef struct _clk_test_cntl_t {
6292+ unsigned long testclk_sel : 4;
6293+ unsigned long : 3;
6294+ unsigned long start_check_freq : 1;
6295+ unsigned long tstcount_rst : 1;
6296+ unsigned long : 15;
6297+ unsigned long test_count : 8;
6298+ } clk_test_cntl_t;
6299+
6300+typedef union {
6301+ unsigned long val : 32;
6302+ clk_test_cntl_t f;
6303+} clk_test_cntl_u;
6304+
6305+typedef struct _pwrmgt_cntl_t {
6306+ unsigned long pwm_enable : 1;
6307+ unsigned long : 1;
6308+ unsigned long pwm_mode_req : 2;
6309+ unsigned long pwm_wakeup_cond : 2;
6310+ unsigned long pwm_fast_noml_hw_en : 1;
6311+ unsigned long pwm_noml_fast_hw_en : 1;
6312+ unsigned long pwm_fast_noml_cond : 4;
6313+ unsigned long pwm_noml_fast_cond : 4;
6314+ unsigned long pwm_idle_timer : 8;
6315+ unsigned long pwm_busy_timer : 8;
6316+ } pwrmgt_cntl_t;
6317+
6318+typedef union {
6319+ unsigned long val : 32;
6320+ pwrmgt_cntl_t f;
6321+} pwrmgt_cntl_u;
6322+
6323+typedef struct _pwrmgt_status_t {
6324+ unsigned long pwm_mode : 2;
6325+ unsigned long : 30;
6326+ } pwrmgt_status_t;
6327+
6328+typedef union {
6329+ unsigned long val : 32;
6330+ pwrmgt_status_t f;
6331+} pwrmgt_status_u;
6332+
6333+
6334+#endif //_W100_REGS_H_
6335
diff --git a/meta/packages/xorg-xserver/xserver-kdrive-glamo_1.3.0.0+git.bb b/meta/packages/xorg-xserver/xserver-kdrive-glamo_1.3.0.0+git.bb
new file mode 100644
index 0000000000..6fce2bd5ca
--- /dev/null
+++ b/meta/packages/xorg-xserver/xserver-kdrive-glamo_1.3.0.0+git.bb
@@ -0,0 +1,64 @@
1DESCRIPTION = "X server for glamo chip in GTA02"
2SECTION = "x11/base"
3LICENSE = "MIT"
4DEPENDS = "compositeproto damageproto fixesproto recordproto resourceproto \
5 scrnsaverproto xineramaproto videoproto xextproto xproto \
6 libxau libxext libxdmcp libxfont libxrandr tslib virtual/libx11 \
7 xtrans libxkbfile libxcalibrate"
8DEPENDS += "libxkbfile libxcalibrate"
9RDEPENDS_${PN} = "xserver-kdrive"
10PROVIDES = "virtual/xserver"
11PE = "1"
12PR = "r6"
13PV = "1.3.0.0+git${SRCREV}"
14
15SRC_URI = "git://people.freedesktop.org/~dodji/xglamo;protocol=git \
16 file://kmode.patch;patch=1 \
17 file://disable-apm.patch;patch=1 \
18 file://no-serial-probing.patch;patch=1 \
19 file://fbdev-not-fix.patch;patch=1 \
20 file://optional-xkb.patch;patch=1 \
21 file://enable-tslib.patch;patch=1 \
22 file://kmode-palm.patch;patch=1 \
23 file://enable-epson.patch;patch=1 \
24 file://enable-builtin-fonts.patch;patch=1 \
25 file://kdrive-evdev.patch;patch=1 \
26 file://kdrive-use-evdev.patch;patch=1 \
27 file://disable-xf86-dga-xorgcfg.patch;patch=1 \
28 file://fix_default_mode.patch;patch=1 \
29 file://enable-xcalibrate.patch;patch=1 \
30 file://hide-cursor-and-ppm-root.patch;patch=1 \
31 file://xcalibrate_coords.patch;patch=1 \
32 file://w100.patch;patch=1 \
33 file://w100-autofoo.patch;patch=1 \
34 file://w100-fix-offscreen-bmp.patch;patch=1 \
35 file://kdrive-1.3-18bpp.patch;patch=1 \
36 file://gumstix-kmode.patch;patch=1 \
37 file://fix-picturestr-include-order.patch;patch=1 \
38"
39
40FILESPATH = "${FILE_DIRNAME}/xserver-kdrive-glamo:${FILE_DIRNAME}/xserver-kdrive-1.3.0.0:${FILE_DIRNAME}/xserver-kdrive:${FILE_DIRNAME}/files"
41
42S = "${WORKDIR}/git"
43
44inherit autotools pkgconfig
45
46EXTRA_OECONF = "--enable-composite --enable-kdrive \
47 --disable-dga --disable-dri --disable-xinerama \
48 --disable-xf86misc --disable-xf86vidmode \
49 --disable-xorg --disable-xorgcfg \
50 --disable-xkb --disable-xnest --disable-xvfb \
51 --disable-xevie --disable-xprint --disable-xtrap \
52 --disable-dmx \
53 --with-default-font-path=built-ins \
54 --enable-tslib --enable-xcalibrate \
55 ac_cv_file__usr_share_sgml_X11_defs_ent=no"
56
57do_configure_prepend() {
58 sed -i -e 's/tslib-0.0/tslib-1.0/' ${S}/configure.ac
59}
60
61FILES_${PN} = "${bindir}/Xglamo"
62FILES_${PN}-dbg = "${bindir}/.debug/Xglamo"
63
64ARM_INSTRUCTION_SET = "arm"