9a20fa1f1e1ca6724f8515c8e63d2e630dda1127
[packages.git] / XOrg / server / xorg-kdrive-X11R7.2 / patches / w100.patch
1 Index: 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 +};
440 Index: 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 +}
538 Index: 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 +}
876 Index: 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_ */
1057 Index: 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 +}
1539 Index: 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_ */
1651 Index: 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_ */
1912 Index: 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 +};
2329 Index: 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 +}
2437 Index: 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)
2498 Index: 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 +
2528 Index: 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 Index: git/hw/kdrive/Makefile.am
6336 ===================================================================
6337 --- git.orig/hw/kdrive/Makefile.am      2006-09-02 12:12:13.000000000 +0200
6338 +++ git/hw/kdrive/Makefile.am   2006-09-02 12:12:14.000000000 +0200
6339 @@ -7,6 +7,10 @@
6340  FBDEV_SUBDIRS = fbdev epson
6341  endif
6342  
6343 +if KDRIVEW100
6344 +W100_SUBDIRS = w100
6345 +endif
6346 +
6347  if XSDLSERVER
6348  XSDL_SUBDIRS = sdl
6349  endif
6350 @@ -20,6 +24,7 @@
6351         linux                   \
6352         $(XSDL_SUBDIRS)         \
6353         $(FBDEV_SUBDIRS)        \
6354 +       $(W100_SUBDIRS)         \
6355         $(VESA_SUBDIRS)         \
6356         $(XEPHYR_SUBDIRS)       \
6357         fake
6358 Index: git/configure.ac
6359 ===================================================================
6360 --- git.orig/configure.ac       2006-09-02 12:12:14.000000000 +0200
6361 +++ git/configure.ac    2006-09-02 12:12:14.000000000 +0200
6362 @@ -442,6 +442,7 @@
6363  AC_ARG_ENABLE(kdrive,         AS_HELP_STRING([--enable-kdrive], [Build kdrive servers (default: no)]), [KDRIVE=$enableval], [KDRIVE=no])
6364  AC_ARG_ENABLE(xephyr,         AS_HELP_STRING([--enable-xephyr], [Build the kdrive Xephyr server (default: auto)]), [XEPHYR=$enableval], [XEPHYR=auto])
6365  AC_ARG_ENABLE(xsdl,           AS_HELP_STRING([--enable-xsdl], [Build the kdrive Xsdl server (default: auto)]), [XSDL=$enableval], [XSDL=auto])
6366 +AC_ARG_ENABLE(w100,           AS_HELP_STRING([--enable-w100], [Build the kdrive Xw100 server (default: no)]), [KDRIVEW100=$enableval], [KDRIVEW100=no])
6367  dnl xprint
6368  AC_ARG_ENABLE(freetype,       AS_HELP_STRING([ --enable-freetype], [Build Xprint FreeType backend (default: yes)]), [XP_USE_FREETYPE=$enableval],[XP_USE_FREETYPE=no])
6369  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)
6370 @@ -1519,6 +1520,10 @@
6371  AC_SUBST([XSDL_LIBS])
6372  AC_SUBST([XSDL_INCS])
6373  
6374 +AM_CONDITIONAL(KDRIVEW100, [test "x$KDRIVEW100" = xyes])
6375 +if test "x$KDRIVEW100" = xyes; then
6376 +        AC_DEFINE(KDRIVEW100, 1, [Build Xw100 server])
6377 +fi
6378  
6379  dnl these only go in xkb-config.h (which is shared by the Xorg and Xnest servers)
6380  AC_DEFINE(__XKBDEFRULES__, "xorg", [Default XKB rules])
6381 @@ -1753,6 +1758,7 @@
6382  hw/kdrive/epson/Makefile
6383  hw/kdrive/fake/Makefile
6384  hw/kdrive/fbdev/Makefile
6385 +hw/kdrive/w100/Makefile
6386  hw/kdrive/i810/Makefile
6387  hw/kdrive/linux/Makefile
6388  hw/kdrive/mach64/Makefile