summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeert Uytterhoeven <geert@linux-m68k.org>2013-03-10 21:04:19 +0100
committerGeert Uytterhoeven <geert@linux-m68k.org>2013-04-18 13:10:26 +0200
commit5ab260317ad3b2aafff31a97df21620db52eacd1 (patch)
tree0cb9e2fa1c2855f1a987f1956ffe294fb346e39f
parent672bc5bb38918304cf68114a1112cd48651a5e83 (diff)
Xfbdev: Wire up Amiga afb4 and afb8 support
Add support for Amiga-style bitplanes, with 4 or 8 bits per pixel. Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org> Acked-by: Keith Packard <keithp@keithp.com>
-rw-r--r--hw/kdrive/fbdev/fbdev.c30
1 files changed, 29 insertions, 1 deletions
diff --git a/hw/kdrive/fbdev/fbdev.c b/hw/kdrive/fbdev/fbdev.c
index 40747fe8b..95f64cbef 100644
--- a/hw/kdrive/fbdev/fbdev.c
+++ b/hw/kdrive/fbdev/fbdev.c
@@ -319,6 +319,21 @@ fbdevWindowLinear(ScreenPtr pScreen,
return (CARD8 *) priv->fb + row * priv->fix.line_length + offset;
}
+static void *
+fbdevWindowAfb(ScreenPtr pScreen,
+ CARD32 row,
+ CARD32 offset, int mode, CARD32 *size, void *closure)
+{
+ KdScreenPriv(pScreen);
+ FbdevPriv *priv = pScreenPriv->card->driver;
+
+ if (!pScreenPriv->enabled)
+ return 0;
+ /* offset to next plane */
+ *size = priv->var.yres_virtual * priv->fix.line_length;
+ return (CARD8 *) priv->fb + row * priv->fix.line_length + offset;
+}
+
Bool
fbdevMapFramebuffer(KdScreenInfo * screen)
{
@@ -435,7 +450,20 @@ fbdevSetShadow(ScreenPtr pScreen)
break;
case FB_TYPE_PLANES:
- FatalError("Bitplanes are not yet supported\n");
+ window = fbdevWindowAfb;
+ switch (priv->var.bits_per_pixel) {
+ case 4:
+ update = shadowUpdateAfb4;
+ break;
+
+ case 8:
+ update = shadowUpdateAfb8;
+ break;
+
+ default:
+ FatalError("Bitplanes with bpp %u are not yet supported\n",
+ priv->var.bits_per_pixel);
+ }
break;
case FB_TYPE_INTERLEAVED_PLANES: