debian/patches/188_revert_dga_removal.patch |  239 ++++++++++++++++++++++++++++
 1 file changed, 239 insertions(+)

New commits:
commit fbeb480b975cb32af14623bfea83bfe622ac04e5
Author: Bryce Harrington <br...@bryceharrington.org>
Date:   Fri Oct 9 11:34:32 2009 -0700

    Patch for reverting the dga removal change.
    
    Not sure if I'm going to go with this or not, but may as well get it
    into version control so we can keep track of it.

diff --git a/debian/patches/188_revert_dga_removal.patch 
b/debian/patches/188_revert_dga_removal.patch
new file mode 100644
index 0000000..03b1273
--- /dev/null
+++ b/debian/patches/188_revert_dga_removal.patch
@@ -0,0 +1,239 @@
+commit 507e57381fea6334f7dc8da6925e53d2c76fddcb
+Author: Keith Packard <kei...@keithp.com>
+Date:   Fri Sep 18 21:12:17 2009 -0700
+
+    xfree86/modes: Remove all framebuffer support from DGA
+    
+    This removes all rendering and mapping code from xf86DiDGA, leaving
+    just mode setting and raw input device access. The mapping code didn't
+    have the offset within /dev/mem for the frame buffer and the pixmap
+    support assumed that the framebuffer was never reallocated.
+    (cherry picked from 0b7c6c728c2e2d8433a188315cc591308a89cd85)
+    
+    Signed-off-by: Keith Packard <kei...@keithp.com>
+    Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net>
+
+diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
+index e9bde36..899cea5 100644
++-- a/hw/xfree86/modes/xf86Crtc.c
+-++ b/hw/xfree86/modes/xf86Crtc.c
+@@ -769,6 +769,9 @@ xf86CrtcScreenInit (ScreenPtr screen)
+     config->CloseScreen = screen->CloseScreen;
+     screen->CloseScreen = xf86CrtcCloseScreen;
+     
+-#ifdef XFreeXDGA
+-    xf86DiDGAInit(screen, 0);
+-#endif
+ #ifdef RANDR_13_INTERFACE
+     return RANDR_INTERFACE_VERSION;
+ #else
+@@ -1882,6 +1885,10 @@ xf86SetScrnInfoModes (ScrnInfoPtr scrn)
+       }
+     }
+     scrn->currentMode = scrn->modes;
+-#ifdef XFreeXDGA
+-    if (scrn->pScreen)
+-          xf86DiDGAReInit(scrn->pScreen);
+-#endif
+ }
+ 
+ static void
+diff --git a/hw/xfree86/modes/xf86DiDGA.c b/hw/xfree86/modes/xf86DiDGA.c
+index f40d0ab..3992c09 100644
++-- a/hw/xfree86/modes/xf86DiDGA.c
+-++ b/hw/xfree86/modes/xf86DiDGA.c
+@@ -72,8 +72,7 @@ xf86_dga_get_modes (ScreenPtr pScreen)
+       mode = modes + num++;
+ 
+       mode->mode = display_mode;
++      mode->flags = DGA_CONCURRENT_ACCESS | DGA_PIXMAP_AVAILABLE;
++        mode->flags |= DGA_FILL_RECT | DGA_BLIT_RECT;
+-      mode->flags = DGA_CONCURRENT_ACCESS;
+       if (display_mode->Flags & V_DBLSCAN)
+           mode->flags |= DGA_DOUBLESCAN;
+       if (display_mode->Flags & V_INTERLACE)
+@@ -91,14 +90,14 @@ xf86_dga_get_modes (ScreenPtr pScreen)
+       mode->yViewportStep = 1;
+       mode->viewportFlags = DGA_FLIP_RETRACE;
+       mode->offset = 0;
++      mode->address = (unsigned char *) xf86_config->dga_address;
++      mode->bytesPerScanline = xf86_config->dga_stride;
++      mode->imageWidth = xf86_config->dga_width;
++      mode->imageHeight = xf86_config->dga_height;
+-      mode->address = 0;
+-      mode->imageWidth = mode->viewportWidth;
+-      mode->imageHeight = mode->viewportHeight;
+-      mode->bytesPerScanline = (mode->imageWidth * scrn->bitsPerPixel) >> 3;
+       mode->pixmapWidth = mode->imageWidth;
+       mode->pixmapHeight = mode->imageHeight;
++      mode->maxViewportX = mode->imageWidth - mode->viewportWidth;
++      mode->maxViewportY = mode->imageHeight - mode->viewportHeight;
+-      mode->maxViewportX = 0;
+-      mode->maxViewportY = 0;
+ 
+       display_mode = display_mode->next;
+       if (display_mode == scrn->modes)
+@@ -149,93 +148,11 @@ xf86_dga_set_viewport(ScrnInfoPtr scrn, int x, int y, 
int flags)
+ }
+ 
+ static Bool
++xf86_dga_get_drawable_and_gc (ScrnInfoPtr scrn, DrawablePtr *ppDrawable, 
GCPtr *ppGC)
++{
++    ScreenPtr         pScreen = scrn->pScreen;
++    xf86CrtcConfigPtr   xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
++    PixmapPtr         pPixmap;
++    GCPtr             pGC;
++    
++    pPixmap = GetScratchPixmapHeader (pScreen, xf86_config->dga_width, 
xf86_config->dga_height,
++                                    scrn->depth, scrn->bitsPerPixel, 
xf86_config->dga_stride, 
++                                    (char *) scrn->memPhysBase + 
scrn->fbOffset);
++    if (!pPixmap)
++      return FALSE;
++    pGC  = GetScratchGC (scrn->depth, pScreen);
++    if (!pGC)
++    {
++      FreeScratchPixmapHeader (pPixmap);
++      return FALSE;
++    }
++    *ppDrawable = &pPixmap->drawable;
++    *ppGC = pGC;
++    return TRUE;
++}
++
++static void
++xf86_dga_release_drawable_and_gc (ScrnInfoPtr scrn, DrawablePtr pDrawable, 
GCPtr pGC)
++{
++    FreeScratchGC (pGC);
++    FreeScratchPixmapHeader ((PixmapPtr) pDrawable);
++}
++
++static void
++xf86_dga_fill_rect(ScrnInfoPtr scrn, int x, int y, int w, int h, unsigned 
long color)
++{
++    GCPtr             pGC;
++    DrawablePtr               pDrawable;
++    XID                       vals[1];
++    xRectangle                r;
++
++    if (!xf86_dga_get_drawable_and_gc (scrn, &pDrawable, &pGC))
++      return;
++    vals[0] = color;
++    ChangeGC (pGC, GCForeground, vals);
++    ValidateGC (pDrawable, pGC);
++    r.x = x;
++    r.y = y;
++    r.width = w;
++    r.height = h;
++    pGC->ops->PolyFillRect (pDrawable, pGC, 1, &r);
++    xf86_dga_release_drawable_and_gc (scrn, pDrawable, pGC);
++}
++
++static void
++xf86_dga_sync(ScrnInfoPtr scrn)
++{
++    ScreenPtr pScreen = scrn->pScreen;
++    WindowPtr pRoot = WindowTable [pScreen->myNum];
++    char      buffer[4];
++
++    pScreen->GetImage (&pRoot->drawable, 0, 0, 1, 1, ZPixmap, ~0L, buffer);
++}
++
++static void
++xf86_dga_blit_rect(ScrnInfoPtr scrn, int srcx, int srcy, int w, int h, int 
dstx, int dsty)
++{
++    DrawablePtr       pDrawable;
++    GCPtr     pGC;
++
++    if (!xf86_dga_get_drawable_and_gc (scrn, &pDrawable, &pGC))
++      return;
++    ValidateGC (pDrawable, pGC);
++    pGC->ops->CopyArea (pDrawable, pDrawable, pGC, srcx, srcy, w, h, dstx, 
dsty);
++    xf86_dga_release_drawable_and_gc (scrn, pDrawable, pGC);
++}
++
++static Bool
+ xf86_dga_open_framebuffer(ScrnInfoPtr scrn,
+                         char **name,
+                         unsigned char **mem, int *size, int *offset, int 
*flags)
+ {
++    xf86CrtcConfigPtr   xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
++    
++    *size = xf86_config->dga_stride * xf86_config->dga_height;
++    *mem = (unsigned char *) (xf86_config->dga_address);
++    *offset = 0;
++    *flags = DGA_NEED_ROOT;
++
++    return TRUE;
+-    return FALSE;
+ }
+ 
+ static void
+@@ -249,9 +166,9 @@ static DGAFunctionRec xf86_dga_funcs = {
+    xf86_dga_set_mode,
+    xf86_dga_set_viewport,
+    xf86_dga_get_viewport,
++   xf86_dga_sync,
++   xf86_dga_fill_rect,
++   xf86_dga_blit_rect,
+-   NULL,
+-   NULL,
+-   NULL,
+    NULL
+ };
+ 
+@@ -261,6 +178,9 @@ xf86DiDGAReInit (ScreenPtr pScreen)
+     ScrnInfoPtr               scrn = xf86Screens[pScreen->myNum];
+     xf86CrtcConfigPtr   xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
+     
+-    if (!DGAAvailable(pScreen->myNum))
+-      return TRUE;
+-
+     if (!xf86_dga_get_modes (pScreen))
+       return FALSE;
+     
+@@ -273,11 +193,14 @@ xf86DiDGAInit (ScreenPtr pScreen, unsigned long 
dga_address)
+     ScrnInfoPtr               scrn = xf86Screens[pScreen->myNum];
+     xf86CrtcConfigPtr   xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
+ 
+-    if (DGAAvailable(pScreen->myNum))
+-      return TRUE;
+-
+     xf86_config->dga_flags = 0;
++    xf86_config->dga_address = dga_address;
++    xf86_config->dga_width = scrn->virtualX;
++    xf86_config->dga_height = scrn->virtualY;
++    xf86_config->dga_stride = scrn->displayWidth * scrn->bitsPerPixel >> 3;
+-    xf86_config->dga_address = 0;
+-    xf86_config->dga_width = 0;
+-    xf86_config->dga_height = 0;
+-    xf86_config->dga_stride = 0;
+     
+     if (!xf86_dga_get_modes (pScreen))
+       return FALSE;
+diff --git a/hw/xfree86/modes/xf86RandR12.c b/hw/xfree86/modes/xf86RandR12.c
+index 4546492..0637ed5 100644
++-- a/hw/xfree86/modes/xf86RandR12.c
+-++ b/hw/xfree86/modes/xf86RandR12.c
+@@ -1,5 +1,5 @@
+ /*
++ * Copyright � 2002 Keith Packard, member of The XFree86 Project, Inc.
+- * Copyright © 2002 Keith Packard, member of The XFree86 Project, Inc.
+  *
+  * Permission to use, copy, modify, distribute, and sell this software and its
+  * documentation for any purpose is hereby granted without fee, provided that
+@@ -460,7 +460,6 @@ xf86RandR12GetInfo (ScreenPtr pScreen, Rotation *rotations)
+     {
+       xf86ProbeOutputModes (scrp, 0, 0);
+       xf86SetScrnInfoModes (scrp);
++      xf86DiDGAReInit (pScreen);
+     }
+ 
+     for (mode = scrp->modes; ; mode = mode->next)
+@@ -1481,7 +1480,6 @@ xf86RandR12GetInfo12 (ScreenPtr pScreen, Rotation 
*rotations)
+       return TRUE;
+     xf86ProbeOutputModes (pScrn, 0, 0);
+     xf86SetScrnInfoModes (pScrn);
++    xf86DiDGAReInit (pScreen);
+     return xf86RandR12SetInfo12 (pScreen);
+ }
+ 


-- 
To UNSUBSCRIBE, email to debian-x-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org

Reply via email to