]> pilppa.org Git - familiar-h63xx-build.git/blobdiff - org.handhelds.familiar/packages/qemu/files/pl110_rgb-r0.patch
updated to qemu 0.82 from oe.dev to familiar with patches to enable building with...
[familiar-h63xx-build.git] / org.handhelds.familiar / packages / qemu / files / pl110_rgb-r0.patch
diff --git a/org.handhelds.familiar/packages/qemu/files/pl110_rgb-r0.patch b/org.handhelds.familiar/packages/qemu/files/pl110_rgb-r0.patch
new file mode 100644 (file)
index 0000000..09e5898
--- /dev/null
@@ -0,0 +1,219 @@
+Index: qemu/hw/pl110.c
+===================================================================
+--- qemu.orig/hw/pl110.c       2006-04-11 21:49:46.000000000 +0100
++++ qemu/hw/pl110.c    2006-05-24 22:53:00.000000000 +0100
+@@ -10,6 +10,7 @@
+ #include "vl.h"
+ #define PL110_CR_EN   0x001
++#define PL110_CR_BGR  0x100
+ #define PL110_CR_BEBO 0x200
+ #define PL110_CR_BEPO 0x400
+ #define PL110_CR_PWR  0x800
+@@ -115,6 +116,7 @@
+     int first, last = 0;
+     int dirty, new_dirty;
+     int i;
++    int bpp_offset;
+     if (!pl110_enabled(s))
+         return;
+@@ -146,12 +148,17 @@
+         fprintf(stderr, "pl110: Bad color depth\n");
+         exit(1);
+     }
++    if (s->cr & PL110_CR_BGR)
++      bpp_offset = 0;
++    else
++      bpp_offset = 18;
++
+     if (s->cr & PL110_CR_BEBO)
+-      fn = fntable[s->bpp + 6];
++      fn = fntable[s->bpp + 6 + bpp_offset];
+     else if (s->cr & PL110_CR_BEPO)
+-      fn = fntable[s->bpp + 12];
++      fn = fntable[s->bpp + 12 + bpp_offset];
+     else
+-      fn = fntable[s->bpp];
++      fn = fntable[s->bpp + bpp_offset];
+     
+     src_width = s->cols;
+     switch (s->bpp) {
+Index: qemu/hw/pl110_template.h
+===================================================================
+--- qemu.orig/hw/pl110_template.h      2006-02-19 12:31:32.000000000 +0000
++++ qemu/hw/pl110_template.h   2006-05-24 23:04:03.000000000 +0100
+@@ -24,6 +24,16 @@
+ #error unknown bit depth
+ #endif
++#undef RGB
++#define BORDER bgr
++#define ORDER 0
++#include "pl110_template.h"
++#define ORDER 1
++#include "pl110_template.h"
++#define ORDER 2
++#include "pl110_template.h"
++#define RGB
++#define BORDER rgb
+ #define ORDER 0
+ #include "pl110_template.h"
+ #define ORDER 1
+@@ -33,26 +43,47 @@
+ static drawfn glue(pl110_draw_fn_,BITS)[18] =
+ {
+-    glue(pl110_draw_line1_lblp,BITS),
+-    glue(pl110_draw_line2_lblp,BITS),
+-    glue(pl110_draw_line4_lblp,BITS),
+-    glue(pl110_draw_line8_lblp,BITS),
+-    glue(pl110_draw_line16_lblp,BITS),
+-    glue(pl110_draw_line32_lblp,BITS),
+-
+-    glue(pl110_draw_line1_bbbp,BITS),
+-    glue(pl110_draw_line2_bbbp,BITS),
+-    glue(pl110_draw_line4_bbbp,BITS),
+-    glue(pl110_draw_line8_bbbp,BITS),
+-    glue(pl110_draw_line16_bbbp,BITS),
+-    glue(pl110_draw_line32_bbbp,BITS),
+-
+-    glue(pl110_draw_line1_lbbp,BITS),
+-    glue(pl110_draw_line2_lbbp,BITS),
+-    glue(pl110_draw_line4_lbbp,BITS),
+-    glue(pl110_draw_line8_lbbp,BITS),
+-    glue(pl110_draw_line16_lbbp,BITS),
+-    glue(pl110_draw_line32_lbbp,BITS)
++    glue(pl110_draw_line1_lblp_bgr,BITS),
++    glue(pl110_draw_line2_lblp_bgr,BITS),
++    glue(pl110_draw_line4_lblp_bgr,BITS),
++    glue(pl110_draw_line8_lblp_bgr,BITS),
++    glue(pl110_draw_line16_lblp_bgr,BITS),
++    glue(pl110_draw_line32_lblp_bgr,BITS),
++
++    glue(pl110_draw_line1_bbbp_bgr,BITS),
++    glue(pl110_draw_line2_bbbp_bgr,BITS),
++    glue(pl110_draw_line4_bbbp_bgr,BITS),
++    glue(pl110_draw_line8_bbbp_bgr,BITS),
++    glue(pl110_draw_line16_bbbp_bgr,BITS),
++    glue(pl110_draw_line32_bbbp_bgr,BITS),
++
++    glue(pl110_draw_line1_lbbp_bgr,BITS),
++    glue(pl110_draw_line2_lbbp_bgr,BITS),
++    glue(pl110_draw_line4_lbbp_bgr,BITS),
++    glue(pl110_draw_line8_lbbp_bgr,BITS),
++    glue(pl110_draw_line16_lbbp_bgr,BITS),
++    glue(pl110_draw_line32_lbbp_bgr,BITS),
++
++    glue(pl110_draw_line1_lblp_rgb,BITS),
++    glue(pl110_draw_line2_lblp_rgb,BITS),
++    glue(pl110_draw_line4_lblp_rgb,BITS),
++    glue(pl110_draw_line8_lblp_rgb,BITS),
++    glue(pl110_draw_line16_lblp_rgb,BITS),
++    glue(pl110_draw_line32_lblp_rgb,BITS),
++
++    glue(pl110_draw_line1_bbbp_rgb,BITS),
++    glue(pl110_draw_line2_bbbp_rgb,BITS),
++    glue(pl110_draw_line4_bbbp_rgb,BITS),
++    glue(pl110_draw_line8_bbbp_rgb,BITS),
++    glue(pl110_draw_line16_bbbp_rgb,BITS),
++    glue(pl110_draw_line32_bbbp_rgb,BITS),
++
++    glue(pl110_draw_line1_lbbp_rgb,BITS),
++    glue(pl110_draw_line2_lbbp_rgb,BITS),
++    glue(pl110_draw_line4_lbbp_rgb,BITS),
++    glue(pl110_draw_line8_lbbp_rgb,BITS),
++    glue(pl110_draw_line16_lbbp_rgb,BITS),
++    glue(pl110_draw_line32_lbbp_rgb,BITS),
+ };
+ #undef BITS
+@@ -61,18 +92,18 @@
+ #else
+ #if ORDER == 0
+-#define NAME glue(lblp, BITS)
++#define NAME glue(glue(lblp_, BORDER), BITS)
+ #ifdef WORDS_BIGENDIAN
+ #define SWAP_WORDS 1
+ #endif
+ #elif ORDER == 1
+-#define NAME glue(bbbp, BITS)
++#define NAME glue(glue(bbbp_, BORDER), BITS)
+ #ifndef WORDS_BIGENDIAN
+ #define SWAP_WORDS 1
+ #endif
+ #else
+ #define SWAP_PIXELS 1
+-#define NAME glue(lbbp, BITS)
++#define NAME glue(glue(lbbp_, BORDER), BITS)
+ #ifdef WORDS_BIGENDIAN
+ #define SWAP_WORDS 1
+ #endif
+@@ -195,27 +226,34 @@
+ #ifdef SWAP_WORDS
+         data = bswap32(data);
+ #endif
++#ifdef RGB
++#define LSB r
++#define MSB b
++#else
++#define LSB b
++#define MSB r
++#endif
+ #if 0
+-        r = data & 0x1f;
++        LSB = data & 0x1f;
+         data >>= 5;
+         g = data & 0x3f;
+         data >>= 6;
+-        b = data & 0x1f;
++        MSB = data & 0x1f;
+         data >>= 5;
+ #else
+-        r = (data & 0x1f) << 3;
++        LSB = (data & 0x1f) << 3;
+         data >>= 5;
+         g = (data & 0x3f) << 2;
+         data >>= 6;
+-        b = (data & 0x1f) << 3;
++        MSB = (data & 0x1f) << 3;
+         data >>= 5;
+ #endif
+         COPY_PIXEL(d, glue(rgb_to_pixel,BITS)(r, g, b));
+-        r = (data & 0x1f) << 3;
++        LSB = (data & 0x1f) << 3;
+         data >>= 5;
+         g = (data & 0x3f) << 2;
+         data >>= 6;
+-        b = (data & 0x1f) << 3;
++        MSB = (data & 0x1f) << 3;
+         data >>= 5;
+         COPY_PIXEL(d, glue(rgb_to_pixel,BITS)(r, g, b));
+         width -= 2;
+@@ -229,14 +267,21 @@
+     unsigned int r, g, b;
+     while (width > 0) {
+         data = *(uint32_t *)src;
++#ifdef RGB
++#define LSB r
++#define MSB b
++#else
++#define LSB b
++#define MSB r
++#endif
+ #ifdef SWAP_WORDS
+-        r = data & 0xff;
++        LSB = data & 0xff;
+         g = (data >> 8) & 0xff;
+-        b = (data >> 16) & 0xff;
++        MSB = (data >> 16) & 0xff;
+ #else
+-        r = (data >> 24) & 0xff;
++        LSB = (data >> 24) & 0xff;
+         g = (data >> 16) & 0xff;
+-        b = (data >> 8) & 0xff;
++        MSB = (data >> 8) & 0xff;
+ #endif
+         COPY_PIXEL(d, glue(rgb_to_pixel,BITS)(r, g, b));
+         width--;