[PATCH 16/37] Move DGA from extmod to built-in

Alan Hourihane alanh at fairlite.co.uk
Tue Jun 28 12:53:30 PDT 2011


Yack !

Do we really need to keep DGA in the core server ???

If so, then at least a build time option to turn it off.

Alan.

On 06/28/11 20:27, Daniel Stone wrote:
> Rather than leave DGA languishing in extmod, move it to be a built-in
> extension.  As it's quite specific to the Xorg DDX, just move it
> sideways to the rest of the DGA code in hw/xfree86/common, and
> initialise it from xf86ExtensionInit, rather than miinitext.
>
> Signed-off-by: Daniel Stone <daniel at fooishbar.org>
> ---
>  hw/xfree86/common/dgaproc.h           |  142 +++++
>  hw/xfree86/common/xf86DGA.c           | 1030 ++++++++++++++++++++++++++++++++
>  hw/xfree86/common/xf86Extensions.c    |   21 +
>  hw/xfree86/dixmods/extmod/Makefile.am |    7 -
>  hw/xfree86/dixmods/extmod/dgaproc.h   |  142 -----
>  hw/xfree86/dixmods/extmod/xf86dga2.c  | 1035 ---------------------------------
>  hw/xfree86/sdksyms.sh                 |    4 +-
>  7 files changed, 1195 insertions(+), 1186 deletions(-)
>  create mode 100644 hw/xfree86/common/dgaproc.h
>  delete mode 100644 hw/xfree86/dixmods/extmod/dgaproc.h
>  delete mode 100644 hw/xfree86/dixmods/extmod/xf86dga2.c
>
> diff --git a/hw/xfree86/common/dgaproc.h b/hw/xfree86/common/dgaproc.h
> new file mode 100644
> index 0000000..a13a517
> --- /dev/null
> +++ b/hw/xfree86/common/dgaproc.h
> @@ -0,0 +1,142 @@
> +
> +#ifndef __DGAPROC_H
> +#define __DGAPROC_H
> +
> +#include <X11/Xproto.h>
> +#include "pixmap.h"
> +
> +#define DGA_CONCURRENT_ACCESS	0x00000001
> +#define DGA_FILL_RECT		0x00000002
> +#define DGA_BLIT_RECT		0x00000004
> +#define DGA_BLIT_RECT_TRANS	0x00000008
> +#define DGA_PIXMAP_AVAILABLE	0x00000010
> +
> +#define DGA_INTERLACED		0x00010000
> +#define DGA_DOUBLESCAN		0x00020000
> +
> +#define DGA_FLIP_IMMEDIATE	0x00000001
> +#define DGA_FLIP_RETRACE	0x00000002
> +
> +#define DGA_COMPLETED		0x00000000
> +#define DGA_PENDING		0x00000001
> +
> +#define DGA_NEED_ROOT		0x00000001
> +
> +typedef struct {
> +   int num;		/* A unique identifier for the mode (num > 0) */
> +   char *name;		/* name of mode given in the XF86Config */
> +   int VSync_num;
> +   int VSync_den;
> +   int flags;		/* DGA_CONCURRENT_ACCESS, etc... */
> +   int imageWidth;	/* linear accessible portion (pixels) */
> +   int imageHeight;
> +   int pixmapWidth;	/* Xlib accessible portion (pixels) */
> +   int pixmapHeight;	/* both fields ignored if no concurrent access */
> +   int bytesPerScanline; 
> +   int byteOrder;	/* MSBFirst, LSBFirst */
> +   int depth;		
> +   int bitsPerPixel;
> +   unsigned long red_mask;
> +   unsigned long green_mask;
> +   unsigned long blue_mask;
> +   short visualClass;
> +   int viewportWidth;
> +   int viewportHeight;
> +   int xViewportStep;	/* viewport position granularity */
> +   int yViewportStep;
> +   int maxViewportX;	/* max viewport origin */
> +   int maxViewportY;
> +   int viewportFlags;	/* types of page flipping possible */
> +   int offset;
> +   int reserved1;
> +   int reserved2;
> +} XDGAModeRec, *XDGAModePtr;
> +
> +/* DDX interface */
> +
> +extern _X_EXPORT int
> +DGASetMode(
> +   int Index,
> +   int num,
> +   XDGAModePtr mode,
> +   PixmapPtr *pPix
> +);
> +
> +extern _X_EXPORT void
> +DGASetInputMode(
> +   int Index,
> +   Bool keyboard,
> +   Bool mouse
> +);
> +
> +extern _X_EXPORT void
> +DGASelectInput(
> +   int Index,
> +   ClientPtr client,
> +   long mask
> +);
> +
> +extern _X_EXPORT Bool DGAAvailable(int Index);
> +extern _X_EXPORT Bool DGAActive(int Index);
> +extern _X_EXPORT void DGAShutdown(void);
> +extern _X_EXPORT void DGAInstallCmap(ColormapPtr cmap);
> +extern _X_EXPORT int DGAGetViewportStatus(int Index);
> +extern _X_EXPORT int DGASync(int Index);
> +
> +extern _X_EXPORT int
> +DGAFillRect(
> +   int Index,
> +   int x, int y, int w, int h,
> +   unsigned long color
> +);
> +
> +extern _X_EXPORT int
> +DGABlitRect(
> +   int Index,
> +   int srcx, int srcy, 
> +   int w, int h, 
> +   int dstx, int dsty
> +);
> +
> +extern _X_EXPORT int
> +DGABlitTransRect(
> +   int Index,
> +   int srcx, int srcy, 
> +   int w, int h, 
> +   int dstx, int dsty,
> +   unsigned long color
> +);
> +
> +extern _X_EXPORT int
> +DGASetViewport(
> +   int Index,
> +   int x, int y,
> +   int mode
> +); 
> +
> +extern _X_EXPORT int DGAGetModes(int Index);
> +extern _X_EXPORT int DGAGetOldDGAMode(int Index);
> +
> +extern _X_EXPORT int DGAGetModeInfo(int Index, XDGAModePtr mode, int num);
> +
> +extern _X_EXPORT Bool DGAVTSwitch(void);
> +extern _X_EXPORT Bool DGAStealButtonEvent(DeviceIntPtr dev, int Index, int button,
> +                         int is_down);
> +extern _X_EXPORT Bool DGAStealMotionEvent(DeviceIntPtr dev, int Index, int dx, int dy);
> +extern _X_EXPORT Bool DGAStealKeyEvent(DeviceIntPtr dev, int Index, int key_code, int is_down);
> +	    
> +extern _X_EXPORT Bool DGAOpenFramebuffer(int Index, char **name, unsigned char **mem,
> +			int *size, int *offset, int *flags);
> +extern _X_EXPORT void DGACloseFramebuffer(int Index);
> +extern _X_EXPORT Bool DGAChangePixmapMode(int Index, int *x, int *y, int mode);
> +extern _X_EXPORT int DGACreateColormap(int Index, ClientPtr client, int id, int mode,
> +			int alloc);
> +
> +extern _X_EXPORT unsigned char DGAReqCode;
> +extern _X_EXPORT int DGAErrorBase;
> +extern _X_EXPORT int DGAEventBase;
> +extern _X_EXPORT int *XDGAEventBase;
> +
> +
> +
> +#endif /* __DGAPROC_H */
> diff --git a/hw/xfree86/common/xf86DGA.c b/hw/xfree86/common/xf86DGA.c
> index 74eb739..0e3f53d 100644
> --- a/hw/xfree86/common/xf86DGA.c
> +++ b/hw/xfree86/common/xf86DGA.c
> @@ -1,4 +1,6 @@
>  /*
> + * Copyright (c) 1995  Jon Tombs
> + * Copyright (c) 1995, 1996, 1999  XFree86 Inc
>   * Copyright (c) 1998-2002 by The XFree86 Project, Inc.
>   *
>   * Permission is hereby granted, free of charge, to any person obtaining a
> @@ -27,10 +29,20 @@
>   * Written by Mark Vojkovich
>   */
>  
> +/*
> + * This is quite literally just two files glued together:
> + * hw/xfree86/common/xf86DGA.c is the first part, and
> + * hw/xfree86/dixmods/extmod/xf86dga2.c is the second part.  One day, if
> + * someone actually cares about DGA, it'd be nice to clean this up.  But trust
> + * me, I am not that person.
> + */
> +
>  #ifdef HAVE_XORG_CONFIG_H
>  #include <xorg-config.h>
>  #endif
>  
> +#include <X11/X.h>
> +#include <X11/Xproto.h>
>  #include "xf86.h"
>  #include "xf86str.h"
>  #include "xf86Priv.h"
> @@ -51,6 +63,22 @@
>  
>  #include "mi.h"
>  
> +#include "misc.h"
> +#include "dixstruct.h"
> +#include "dixevents.h"
> +#include "extnsionst.h"
> +#include "cursorstr.h"
> +#include "scrnintstr.h"
> +#include "swaprep.h"
> +#include "dgaproc.h"
> +#include "protocol-versions.h"
> +
> +#include <string.h>
> +
> +#include "modinit.h"
> +
> +#define DGA_PROTOCOL_OLD_SUPPORT 1
> +
>  static DevPrivateKeyRec DGAScreenKeyRec;
>  #define DGAScreenKeyRegistered dixPrivateKeyRegistered(&DGAScreenKeyRec)
>  static Bool mieq_installed;
> @@ -1215,3 +1243,1005 @@ DGAHandleEvent(int screen_num, InternalEvent *ev, DeviceIntPtr device)
>  	break;
>      }
>  }
> +
> +
> +
> +static void XDGAResetProc(ExtensionEntry *extEntry);
> +
> +static void DGAClientStateChange (CallbackListPtr*, pointer, pointer);
> +
> +unsigned char DGAReqCode = 0;
> +int DGAErrorBase;
> +int DGAEventBase;
> +
> +static DevPrivateKeyRec DGAScreenPrivateKeyRec;
> +#define DGAScreenPrivateKey (&DGAScreenPrivateKeyRec)
> +#define DGAScreenPrivateKeyRegistered (DGAScreenPrivateKeyRec.initialized)
> +static DevPrivateKeyRec DGAClientPrivateKeyRec;
> +#define DGAClientPrivateKey (&DGAClientPrivateKeyRec)
> +static int DGACallbackRefCount = 0;
> +
> +/* This holds the client's version information */
> +typedef struct {
> +    int		major;
> +    int		minor;
> +} DGAPrivRec, *DGAPrivPtr;
> +
> +#define DGA_GETCLIENT(idx) ((ClientPtr) \
> +    dixLookupPrivate(&screenInfo.screens[idx]->devPrivates, DGAScreenPrivateKey))
> +#define DGA_SETCLIENT(idx,p) \
> +    dixSetPrivate(&screenInfo.screens[idx]->devPrivates, DGAScreenPrivateKey, p)
> +
> +#define DGA_GETPRIV(c) ((DGAPrivPtr) \
> +    dixLookupPrivate(&(c)->devPrivates, DGAClientPrivateKey))
> +#define DGA_SETPRIV(c,p) \
> +    dixSetPrivate(&(c)->devPrivates, DGAClientPrivateKey, p)
> +
> +
> +static void
> +XDGAResetProc (ExtensionEntry *extEntry)
> +{
> +   DeleteCallback (&ClientStateCallback, DGAClientStateChange, NULL);
> +   DGACallbackRefCount = 0;
> +}
> +
> +
> +static int
> +ProcXDGAQueryVersion(ClientPtr client)
> +{
> +    xXDGAQueryVersionReply rep;
> +
> +    REQUEST_SIZE_MATCH(xXDGAQueryVersionReq);
> +    rep.type = X_Reply;
> +    rep.length = 0;
> +    rep.sequenceNumber = client->sequence;
> +    rep.majorVersion = SERVER_XDGA_MAJOR_VERSION;
> +    rep.minorVersion = SERVER_XDGA_MINOR_VERSION;
> +
> +    WriteToClient(client, sizeof(xXDGAQueryVersionReply), (char *)&rep);
> +    return Success;
> +}
> +
> +
> +static int
> +ProcXDGAOpenFramebuffer(ClientPtr client)
> +{
> +    REQUEST(xXDGAOpenFramebufferReq);
> +    xXDGAOpenFramebufferReply rep;
> +    char *deviceName;
> +    int nameSize;
> +
> +    if (stuff->screen >= screenInfo.numScreens)
> +        return BadValue;
> +
> +    if (!DGAAvailable(stuff->screen))
> +        return DGAErrorBase + XF86DGANoDirectVideoMode;
> +
> +    REQUEST_SIZE_MATCH(xXDGAOpenFramebufferReq);
> +    rep.type = X_Reply;
> +    rep.length = 0;
> +    rep.sequenceNumber = client->sequence;
> +
> +    if(!DGAOpenFramebuffer(stuff->screen, &deviceName,
> +			(unsigned char**)(&rep.mem1),
> +			(int*)&rep.size, (int*)&rep.offset, (int*)&rep.extra))
> +    {
> +	return BadAlloc;
> +    }
> +
> +    nameSize = deviceName ? (strlen(deviceName) + 1) : 0;
> +    rep.length = bytes_to_int32(nameSize);
> +
> +    WriteToClient(client, sizeof(xXDGAOpenFramebufferReply), (char *)&rep);
> +    if(rep.length)
> +	WriteToClient(client, nameSize, deviceName);
> +
> +    return Success;
> +}
> +
> +
> +static int
> +ProcXDGACloseFramebuffer(ClientPtr client)
> +{
> +    REQUEST(xXDGACloseFramebufferReq);
> +
> +    if (stuff->screen >= screenInfo.numScreens)
> +        return BadValue;
> +
> +    if (!DGAAvailable(stuff->screen))
> +        return DGAErrorBase + XF86DGANoDirectVideoMode;
> +
> +    REQUEST_SIZE_MATCH(xXDGACloseFramebufferReq);
> +
> +    DGACloseFramebuffer(stuff->screen);
> +
> +    return Success;
> +}
> +
> +static int
> +ProcXDGAQueryModes(ClientPtr client)
> +{
> +    int i, num, size;
> +    REQUEST(xXDGAQueryModesReq);
> +    xXDGAQueryModesReply rep;
> +    xXDGAModeInfo info;
> +    XDGAModePtr mode;
> +
> +    if (stuff->screen >= screenInfo.numScreens)
> +        return BadValue;
> +
> +    REQUEST_SIZE_MATCH(xXDGAQueryModesReq);
> +    rep.type = X_Reply;
> +    rep.length = 0;
> +    rep.number = 0;
> +    rep.sequenceNumber = client->sequence;
> +
> +    if (!DGAAvailable(stuff->screen)) {
> +	rep.number = 0;
> +	rep.length = 0;
> +	WriteToClient(client, sz_xXDGAQueryModesReply, (char*)&rep);
> +	return Success;
> +    }
> +
> +    if(!(num = DGAGetModes(stuff->screen))) {
> +	WriteToClient(client, sz_xXDGAQueryModesReply, (char*)&rep);
> +	return Success;
> +    }
> +
> +    if(!(mode = (XDGAModePtr)malloc(num * sizeof(XDGAModeRec))))
> +	return BadAlloc;
> +
> +    for(i = 0; i < num; i++)
> +	DGAGetModeInfo(stuff->screen, mode + i, i + 1);
> +
> +    size = num * sz_xXDGAModeInfo;
> +    for(i = 0; i < num; i++)
> +	size += pad_to_int32(strlen(mode[i].name) + 1);  /* plus NULL */
> +
> +    rep.number = num;
> +    rep.length = bytes_to_int32(size);
> +
> +    WriteToClient(client, sz_xXDGAQueryModesReply, (char*)&rep);
> +
> +    for(i = 0; i < num; i++) {
> +	size = strlen(mode[i].name) + 1;
> +
> +	info.byte_order = mode[i].byteOrder;
> +	info.depth = mode[i].depth;
> +	info.num = mode[i].num;
> +	info.bpp = mode[i].bitsPerPixel;
> +	info.name_size = (size + 3) & ~3L;
> +	info.vsync_num = mode[i].VSync_num;
> +	info.vsync_den = mode[i].VSync_den;
> +	info.flags = mode[i].flags;
> +	info.image_width = mode[i].imageWidth;
> +	info.image_height = mode[i].imageHeight;
> +	info.pixmap_width = mode[i].pixmapWidth;
> +	info.pixmap_height = mode[i].pixmapHeight;
> +	info.bytes_per_scanline = mode[i].bytesPerScanline;
> +	info.red_mask = mode[i].red_mask;
> +	info.green_mask = mode[i].green_mask;
> +	info.blue_mask = mode[i].blue_mask;
> +	info.visual_class = mode[i].visualClass;
> +	info.viewport_width = mode[i].viewportWidth;
> +	info.viewport_height = mode[i].viewportHeight;
> +	info.viewport_xstep = mode[i].xViewportStep;
> +	info.viewport_ystep = mode[i].yViewportStep;
> + 	info.viewport_xmax = mode[i].maxViewportX;
> +	info.viewport_ymax = mode[i].maxViewportY;
> +	info.viewport_flags = mode[i].viewportFlags;
> +	info.reserved1 = mode[i].reserved1;
> +	info.reserved2 = mode[i].reserved2;
> +
> +	WriteToClient(client, sz_xXDGAModeInfo, (char*)(&info));
> +	WriteToClient(client, size, mode[i].name);
> +    }
> +
> +    free(mode);
> +
> +    return Success;
> +}
> +
> +
> +static void
> +DGAClientStateChange (
> +    CallbackListPtr* pcbl,
> +    pointer nulldata,
> +    pointer calldata
> +){
> +    NewClientInfoRec* pci = (NewClientInfoRec*) calldata;
> +    ClientPtr client = NULL;
> +    int i;
> +
> +    for(i = 0; i < screenInfo.numScreens; i++) {
> +	if(DGA_GETCLIENT(i) == pci->client) {
> +	   client = pci->client;
> +	   break;
> +	}
> +    }
> +
> +    if(client &&
> +      ((client->clientState == ClientStateGone) ||
> +       (client->clientState == ClientStateRetained))) {
> +	XDGAModeRec mode;
> +	PixmapPtr pPix;
> +
> +	DGA_SETCLIENT(i, NULL);
> +	DGASelectInput(i, NULL, 0);
> +	DGASetMode(i, 0, &mode, &pPix);
> +
> +	if(--DGACallbackRefCount == 0)
> +	    DeleteCallback(&ClientStateCallback, DGAClientStateChange, NULL);
> +    }
> +}
> +
> +static int
> +ProcXDGASetMode(ClientPtr client)
> +{
> +    REQUEST(xXDGASetModeReq);
> +    xXDGASetModeReply rep;
> +    XDGAModeRec mode;
> +    xXDGAModeInfo info;
> +    PixmapPtr pPix;
> +    ClientPtr owner;
> +    int size;
> +
> +    if (stuff->screen >= screenInfo.numScreens)
> +        return BadValue;
> +    owner = DGA_GETCLIENT(stuff->screen);
> +
> +    REQUEST_SIZE_MATCH(xXDGASetModeReq);
> +    rep.type = X_Reply;
> +    rep.length = 0;
> +    rep.offset = 0;
> +    rep.flags = 0;
> +    rep.sequenceNumber = client->sequence;
> +
> +    if (!DGAAvailable(stuff->screen))
> +        return DGAErrorBase + XF86DGANoDirectVideoMode;
> +
> +    if(owner && owner != client)
> +        return DGAErrorBase + XF86DGANoDirectVideoMode;
> +
> +    if(!stuff->mode) {
> +	if(owner) {
> +	  if(--DGACallbackRefCount == 0)
> +	    DeleteCallback(&ClientStateCallback, DGAClientStateChange, NULL);
> +	}
> +	DGA_SETCLIENT(stuff->screen, NULL);
> +	DGASelectInput(stuff->screen, NULL, 0);
> +	DGASetMode(stuff->screen, 0, &mode, &pPix);
> +	WriteToClient(client, sz_xXDGASetModeReply, (char*)&rep);
> +	return Success;
> +    }
> +
> +    if(Success != DGASetMode(stuff->screen, stuff->mode, &mode, &pPix))
> +	return BadValue;
> +
> +    if(!owner) {
> +	if(DGACallbackRefCount++ == 0)
> +	   AddCallback (&ClientStateCallback, DGAClientStateChange, NULL);
> +    }
> +
> +    DGA_SETCLIENT(stuff->screen, client);
> +
> +    if(pPix) {
> +	if(AddResource(stuff->pid, RT_PIXMAP, (pointer)(pPix))) {
> +	    pPix->drawable.id = (int)stuff->pid;
> +	    rep.flags = DGA_PIXMAP_AVAILABLE;
> +	}
> +    }
> +
> +    size = strlen(mode.name) + 1;
> +
> +    info.byte_order = mode.byteOrder;
> +    info.depth = mode.depth;
> +    info.num = mode.num;
> +    info.bpp = mode.bitsPerPixel;
> +    info.name_size = (size + 3) & ~3L;
> +    info.vsync_num = mode.VSync_num;
> +    info.vsync_den = mode.VSync_den;
> +    info.flags = mode.flags;
> +    info.image_width = mode.imageWidth;
> +    info.image_height = mode.imageHeight;
> +    info.pixmap_width = mode.pixmapWidth;
> +    info.pixmap_height = mode.pixmapHeight;
> +    info.bytes_per_scanline = mode.bytesPerScanline;
> +    info.red_mask = mode.red_mask;
> +    info.green_mask = mode.green_mask;
> +    info.blue_mask = mode.blue_mask;
> +    info.visual_class = mode.visualClass;
> +    info.viewport_width = mode.viewportWidth;
> +    info.viewport_height = mode.viewportHeight;
> +    info.viewport_xstep = mode.xViewportStep;
> +    info.viewport_ystep = mode.yViewportStep;
> +    info.viewport_xmax = mode.maxViewportX;
> +    info.viewport_ymax = mode.maxViewportY;
> +    info.viewport_flags = mode.viewportFlags;
> +    info.reserved1 = mode.reserved1;
> +    info.reserved2 = mode.reserved2;
> +
> +    rep.length = bytes_to_int32(sz_xXDGAModeInfo + info.name_size);
> +
> +    WriteToClient(client, sz_xXDGASetModeReply, (char*)&rep);
> +    WriteToClient(client, sz_xXDGAModeInfo, (char*)(&info));
> +    WriteToClient(client, size, mode.name);
> +
> +    return Success;
> +}
> +
> +static int
> +ProcXDGASetViewport(ClientPtr client)
> +{
> +    REQUEST(xXDGASetViewportReq);
> +
> +    if (stuff->screen >= screenInfo.numScreens)
> +        return BadValue;
> +
> +    if(DGA_GETCLIENT(stuff->screen) != client)
> +        return DGAErrorBase + XF86DGADirectNotActivated;
> +
> +    REQUEST_SIZE_MATCH(xXDGASetViewportReq);
> +
> +    DGASetViewport(stuff->screen, stuff->x, stuff->y, stuff->flags);
> +
> +    return Success;
> +}
> +
> +static int
> +ProcXDGAInstallColormap(ClientPtr client)
> +{
> +    ColormapPtr cmap;
> +    int rc;
> +    REQUEST(xXDGAInstallColormapReq);
> +
> +    if (stuff->screen >= screenInfo.numScreens)
> +        return BadValue;
> +
> +    if(DGA_GETCLIENT(stuff->screen) != client)
> +        return DGAErrorBase + XF86DGADirectNotActivated;
> +
> +    REQUEST_SIZE_MATCH(xXDGAInstallColormapReq);
> +
> +    rc = dixLookupResourceByType((pointer *)&cmap, stuff->cmap, RT_COLORMAP,
> +				 client, DixInstallAccess);
> +    if (rc != Success)
> +        return rc;
> +    DGAInstallCmap(cmap);
> +    return Success;
> +}
> +
> +
> +static int
> +ProcXDGASelectInput(ClientPtr client)
> +{
> +    REQUEST(xXDGASelectInputReq);
> +
> +    if (stuff->screen >= screenInfo.numScreens)
> +        return BadValue;
> +
> +    if(DGA_GETCLIENT(stuff->screen) != client)
> +        return DGAErrorBase + XF86DGADirectNotActivated;
> +
> +    REQUEST_SIZE_MATCH(xXDGASelectInputReq);
> +
> +    if(DGA_GETCLIENT(stuff->screen) == client)
> +	DGASelectInput(stuff->screen, client, stuff->mask);
> +
> +    return Success;
> +}
> +
> +
> +static int
> +ProcXDGAFillRectangle(ClientPtr client)
> +{
> +    REQUEST(xXDGAFillRectangleReq);
> +
> +    if (stuff->screen >= screenInfo.numScreens)
> +        return BadValue;
> +
> +    if(DGA_GETCLIENT(stuff->screen) != client)
> +        return DGAErrorBase + XF86DGADirectNotActivated;
> +
> +    REQUEST_SIZE_MATCH(xXDGAFillRectangleReq);
> +
> +    if(Success != DGAFillRect(stuff->screen, stuff->x, stuff->y,
> +			stuff->width, stuff->height, stuff->color))
> +	return BadMatch;
> +
> +    return Success;
> +}
> +
> +static int
> +ProcXDGACopyArea(ClientPtr client)
> +{
> +    REQUEST(xXDGACopyAreaReq);
> +
> +    if (stuff->screen >= screenInfo.numScreens)
> +        return BadValue;
> +
> +    if(DGA_GETCLIENT(stuff->screen) != client)
> +        return DGAErrorBase + XF86DGADirectNotActivated;
> +
> +    REQUEST_SIZE_MATCH(xXDGACopyAreaReq);
> +
> +    if(Success != DGABlitRect(stuff->screen, stuff->srcx, stuff->srcy,
> +		stuff->width, stuff->height, stuff->dstx, stuff->dsty))
> +	return BadMatch;
> +
> +    return Success;
> +}
> +
> +
> +static int
> +ProcXDGACopyTransparentArea(ClientPtr client)
> +{
> +    REQUEST(xXDGACopyTransparentAreaReq);
> +
> +    if (stuff->screen >= screenInfo.numScreens)
> +        return BadValue;
> +
> +    if(DGA_GETCLIENT(stuff->screen) != client)
> +        return DGAErrorBase + XF86DGADirectNotActivated;
> +
> +    REQUEST_SIZE_MATCH(xXDGACopyTransparentAreaReq);
> +
> +    if(Success != DGABlitTransRect(stuff->screen, stuff->srcx, stuff->srcy,
> +	stuff->width, stuff->height, stuff->dstx, stuff->dsty, stuff->key))
> +	return BadMatch;
> +
> +    return Success;
> +}
> +
> +
> +static int
> +ProcXDGAGetViewportStatus(ClientPtr client)
> +{
> +    REQUEST(xXDGAGetViewportStatusReq);
> +    xXDGAGetViewportStatusReply rep;
> +
> +    if (stuff->screen >= screenInfo.numScreens)
> +        return BadValue;
> +
> +    if(DGA_GETCLIENT(stuff->screen) != client)
> +        return DGAErrorBase + XF86DGADirectNotActivated;
> +
> +    REQUEST_SIZE_MATCH(xXDGAGetViewportStatusReq);
> +    rep.type = X_Reply;
> +    rep.length = 0;
> +    rep.sequenceNumber = client->sequence;
> +
> +    rep.status = DGAGetViewportStatus(stuff->screen);
> +
> +    WriteToClient(client, sizeof(xXDGAGetViewportStatusReply), (char *)&rep);
> +    return Success;
> +}
> +
> +static int
> +ProcXDGASync(ClientPtr client)
> +{
> +    REQUEST(xXDGASyncReq);
> +    xXDGASyncReply rep;
> +
> +    if (stuff->screen >= screenInfo.numScreens)
> +        return BadValue;
> +
> +    if(DGA_GETCLIENT(stuff->screen) != client)
> +        return DGAErrorBase + XF86DGADirectNotActivated;
> +
> +    REQUEST_SIZE_MATCH(xXDGASyncReq);
> +    rep.type = X_Reply;
> +    rep.length = 0;
> +    rep.sequenceNumber = client->sequence;
> +
> +    DGASync(stuff->screen);
> +
> +    WriteToClient(client, sizeof(xXDGASyncReply), (char *)&rep);
> +    return Success;
> +}
> +
> +static int
> +ProcXDGASetClientVersion(ClientPtr client)
> +{
> +    REQUEST(xXDGASetClientVersionReq);
> +
> +    DGAPrivPtr pPriv;
> +
> +    REQUEST_SIZE_MATCH(xXDGASetClientVersionReq);
> +    if ((pPriv = DGA_GETPRIV(client)) == NULL) {
> +	pPriv = malloc(sizeof(DGAPrivRec));
> +	/* XXX Need to look into freeing this */
> +	if (!pPriv)
> +	    return BadAlloc;
> +	DGA_SETPRIV(client, pPriv);
> +    }
> +    pPriv->major = stuff->major;
> +    pPriv->minor = stuff->minor;
> +
> +    return Success;
> +}
> +
> +static int
> +ProcXDGAChangePixmapMode(ClientPtr client)
> +{
> +    REQUEST(xXDGAChangePixmapModeReq);
> +    xXDGAChangePixmapModeReply rep;
> +    int x, y;
> +
> +    if (stuff->screen >= screenInfo.numScreens)
> +        return BadValue;
> +
> +    if(DGA_GETCLIENT(stuff->screen) != client)
> +        return DGAErrorBase + XF86DGADirectNotActivated;
> +
> +    REQUEST_SIZE_MATCH(xXDGAChangePixmapModeReq);
> +    rep.type = X_Reply;
> +    rep.length = 0;
> +    rep.sequenceNumber = client->sequence;
> +
> +    x = stuff->x;
> +    y = stuff->y;
> +
> +    if(!DGAChangePixmapMode(stuff->screen, &x, &y, stuff->flags))
> +	return BadMatch;
> +
> +    rep.x = x;
> +    rep.y = y;
> +    WriteToClient(client, sizeof(xXDGAChangePixmapModeReply), (char *)&rep);
> +
> +    return Success;
> +}
> +
> +
> +static int
> +ProcXDGACreateColormap(ClientPtr client)
> +{
> +    REQUEST(xXDGACreateColormapReq);
> +    int result;
> +
> +    if (stuff->screen >= screenInfo.numScreens)
> +        return BadValue;
> +
> +    if(DGA_GETCLIENT(stuff->screen) != client)
> +        return DGAErrorBase + XF86DGADirectNotActivated;
> +
> +    REQUEST_SIZE_MATCH(xXDGACreateColormapReq);
> +
> +    if(!stuff->mode)
> +	return BadValue;
> +
> +    result = DGACreateColormap(stuff->screen, client, stuff->id,
> +				stuff->mode, stuff->alloc);
> +    if(result != Success)
> +	return result;
> +
> +    return Success;
> +}
> +
> +/*
> + *
> + * Support for the old DGA protocol, used to live in xf86dga.c
> + *
> + */
> +
> +#ifdef DGA_PROTOCOL_OLD_SUPPORT
> +
> +
> +
> +static int
> +ProcXF86DGAGetVideoLL(ClientPtr client)
> +{
> +    REQUEST(xXF86DGAGetVideoLLReq);
> +    xXF86DGAGetVideoLLReply rep;
> +    XDGAModeRec mode;
> +    int num, offset, flags;
> +    char *name;
> +
> +    if (stuff->screen >= screenInfo.numScreens)
> +	return BadValue;
> +
> +    REQUEST_SIZE_MATCH(xXF86DGAGetVideoLLReq);
> +    rep.type = X_Reply;
> +    rep.length = 0;
> +    rep.sequenceNumber = client->sequence;
> +
> +    if(!DGAAvailable(stuff->screen))
> +	return DGAErrorBase + XF86DGANoDirectVideoMode;
> +
> +    if(!(num = DGAGetOldDGAMode(stuff->screen)))
> +	return DGAErrorBase + XF86DGANoDirectVideoMode;
> +
> +    /* get the parameters for the mode that best matches */
> +    DGAGetModeInfo(stuff->screen, &mode, num);
> +
> +    if(!DGAOpenFramebuffer(stuff->screen, &name,
> +			(unsigned char**)(&rep.offset),
> +			(int*)(&rep.bank_size), &offset, &flags))
> +	return BadAlloc;
> +
> +    rep.offset += mode.offset;
> +    rep.width = mode.bytesPerScanline / (mode.bitsPerPixel >> 3);
> +    rep.ram_size = rep.bank_size >> 10;
> +
> +    WriteToClient(client, SIZEOF(xXF86DGAGetVideoLLReply), (char *)&rep);
> +    return Success;
> +}
> +
> +static int
> +ProcXF86DGADirectVideo(ClientPtr client)
> +{
> +    int num;
> +    PixmapPtr pix;
> +    XDGAModeRec mode;
> +    ClientPtr owner;
> +    REQUEST(xXF86DGADirectVideoReq);
> +
> +    if (stuff->screen >= screenInfo.numScreens)
> +	return BadValue;
> +    REQUEST_SIZE_MATCH(xXF86DGADirectVideoReq);
> +
> +    if (!DGAAvailable(stuff->screen))
> +	return DGAErrorBase + XF86DGANoDirectVideoMode;
> +
> +    owner = DGA_GETCLIENT(stuff->screen);
> +
> +    if (owner && owner != client)
> +        return DGAErrorBase + XF86DGANoDirectVideoMode;
> +
> +    if (stuff->enable & XF86DGADirectGraphics) {
> +	if(!(num = DGAGetOldDGAMode(stuff->screen)))
> +	    return DGAErrorBase + XF86DGANoDirectVideoMode;
> +    } else
> +	num = 0;
> +
> +    if(Success != DGASetMode(stuff->screen, num, &mode, &pix))
> +	return DGAErrorBase + XF86DGAScreenNotActive;
> +
> +    DGASetInputMode (stuff->screen,
> +		     (stuff->enable & XF86DGADirectKeyb) != 0,
> +		     (stuff->enable & XF86DGADirectMouse) != 0);
> +
> +    /* We need to track the client and attach the teardown callback */
> +    if (stuff->enable &
> +	(XF86DGADirectGraphics | XF86DGADirectKeyb | XF86DGADirectMouse)) {
> +	if (!owner) {
> +	    if (DGACallbackRefCount++ == 0)
> +		AddCallback (&ClientStateCallback, DGAClientStateChange, NULL);
> +	}
> +
> +	DGA_SETCLIENT(stuff->screen, client);
> +    } else {
> +	if (owner) {
> +	    if (--DGACallbackRefCount == 0)
> +		DeleteCallback(&ClientStateCallback, DGAClientStateChange, NULL);
> +	}
> +
> +	DGA_SETCLIENT(stuff->screen, NULL);
> +    }
> +
> +    return Success;
> +}
> +
> +static int
> +ProcXF86DGAGetViewPortSize(ClientPtr client)
> +{
> +    int num;
> +    XDGAModeRec mode;
> +    REQUEST(xXF86DGAGetViewPortSizeReq);
> +    xXF86DGAGetViewPortSizeReply rep;
> +
> +    if (stuff->screen >= screenInfo.numScreens)
> +	return BadValue;
> +
> +    REQUEST_SIZE_MATCH(xXF86DGAGetViewPortSizeReq);
> +    rep.type = X_Reply;
> +    rep.length = 0;
> +    rep.sequenceNumber = client->sequence;
> +
> +    if (!DGAAvailable(stuff->screen))
> +	return DGAErrorBase + XF86DGANoDirectVideoMode;
> +
> +    if(!(num = DGAGetOldDGAMode(stuff->screen)))
> +	return DGAErrorBase + XF86DGANoDirectVideoMode;
> +
> +    DGAGetModeInfo(stuff->screen, &mode, num);
> +
> +    rep.width = mode.viewportWidth;
> +    rep.height = mode.viewportHeight;
> +
> +    WriteToClient(client, SIZEOF(xXF86DGAGetViewPortSizeReply), (char *)&rep);
> +    return Success;
> +}
> +
> +static int
> +ProcXF86DGASetViewPort(ClientPtr client)
> +{
> +    REQUEST(xXF86DGASetViewPortReq);
> +
> +    if (stuff->screen >= screenInfo.numScreens)
> +	return BadValue;
> +
> +    if (DGA_GETCLIENT(stuff->screen) != client)
> +        return DGAErrorBase + XF86DGADirectNotActivated;
> +
> +    REQUEST_SIZE_MATCH(xXF86DGASetViewPortReq);
> +
> +    if (!DGAAvailable(stuff->screen))
> +	return DGAErrorBase + XF86DGANoDirectVideoMode;
> +
> +    if (!DGAActive(stuff->screen))
> +	return DGAErrorBase + XF86DGADirectNotActivated;
> +
> +    if (DGASetViewport(stuff->screen, stuff->x, stuff->y, DGA_FLIP_RETRACE)
> +		!= Success)
> +	return DGAErrorBase + XF86DGADirectNotActivated;
> +
> +    return Success;
> +}
> +
> +static int
> +ProcXF86DGAGetVidPage(ClientPtr client)
> +{
> +    REQUEST(xXF86DGAGetVidPageReq);
> +    xXF86DGAGetVidPageReply rep;
> +
> +    if (stuff->screen >= screenInfo.numScreens)
> +	return BadValue;
> +
> +    REQUEST_SIZE_MATCH(xXF86DGAGetVidPageReq);
> +    rep.type = X_Reply;
> +    rep.length = 0;
> +    rep.sequenceNumber = client->sequence;
> +    rep.vpage = 0;  /* silently fail */
> +
> +    WriteToClient(client, SIZEOF(xXF86DGAGetVidPageReply), (char *)&rep);
> +    return Success;
> +}
> +
> +
> +static int
> +ProcXF86DGASetVidPage(ClientPtr client)
> +{
> +    REQUEST(xXF86DGASetVidPageReq);
> +
> +    if (stuff->screen >= screenInfo.numScreens)
> +	return BadValue;
> +
> +    REQUEST_SIZE_MATCH(xXF86DGASetVidPageReq);
> +
> +    /* silently fail */
> +
> +    return Success;
> +}
> +
> +
> +static int
> +ProcXF86DGAInstallColormap(ClientPtr client)
> +{
> +    ColormapPtr pcmp;
> +    int rc;
> +    REQUEST(xXF86DGAInstallColormapReq);
> +
> +    if (stuff->screen >= screenInfo.numScreens)
> +	return BadValue;
> +
> +    if (DGA_GETCLIENT(stuff->screen) != client)
> +        return DGAErrorBase + XF86DGADirectNotActivated;
> +
> +    REQUEST_SIZE_MATCH(xXF86DGAInstallColormapReq);
> +
> +    if (!DGAActive(stuff->screen))
> +	return DGAErrorBase + XF86DGADirectNotActivated;
> +
> +    rc = dixLookupResourceByType((pointer *)&pcmp, stuff->id, RT_COLORMAP,
> +				 client, DixInstallAccess);
> +    if (rc == Success) {
> +	DGAInstallCmap(pcmp);
> +        return Success;
> +    } else {
> +        return rc;
> +    }
> +}
> +
> +static int
> +ProcXF86DGAQueryDirectVideo(ClientPtr client)
> +{
> +    REQUEST(xXF86DGAQueryDirectVideoReq);
> +    xXF86DGAQueryDirectVideoReply rep;
> +
> +    if (stuff->screen >= screenInfo.numScreens)
> +	return BadValue;
> +
> +    REQUEST_SIZE_MATCH(xXF86DGAQueryDirectVideoReq);
> +    rep.type = X_Reply;
> +    rep.length = 0;
> +    rep.sequenceNumber = client->sequence;
> +    rep.flags = 0;
> +
> +    if (DGAAvailable(stuff->screen))
> +	rep.flags = XF86DGADirectPresent;
> +
> +    WriteToClient(client, SIZEOF(xXF86DGAQueryDirectVideoReply), (char *)&rep);
> +    return Success;
> +}
> +
> +static int
> +ProcXF86DGAViewPortChanged(ClientPtr client)
> +{
> +    REQUEST(xXF86DGAViewPortChangedReq);
> +    xXF86DGAViewPortChangedReply rep;
> +
> +    if (stuff->screen >= screenInfo.numScreens)
> +	return BadValue;
> +
> +    if (DGA_GETCLIENT(stuff->screen) != client)
> +        return DGAErrorBase + XF86DGADirectNotActivated;
> +
> +    REQUEST_SIZE_MATCH(xXF86DGAViewPortChangedReq);
> +
> +    if (!DGAActive(stuff->screen))
> +	return DGAErrorBase + XF86DGADirectNotActivated;
> +
> +    rep.type = X_Reply;
> +    rep.length = 0;
> +    rep.sequenceNumber = client->sequence;
> +    rep.result = 1;
> +
> +    WriteToClient(client, SIZEOF(xXF86DGAViewPortChangedReply), (char *)&rep);
> +    return Success;
> +}
> +
> +#endif /* DGA_PROTOCOL_OLD_SUPPORT */
> +
> +static int
> +SProcXDGADispatch (ClientPtr client)
> +{
> +   return DGAErrorBase + XF86DGAClientNotLocal;
> +}
> +
> +#if 0
> +#define DGA_REQ_DEBUG
> +#endif
> +
> +#ifdef DGA_REQ_DEBUG
> +static char *dgaMinor[] = {
> +    "QueryVersion",
> +    "GetVideoLL",
> +    "DirectVideo",
> +    "GetViewPortSize",
> +    "SetViewPort",
> +    "GetVidPage",
> +    "SetVidPage",
> +    "InstallColormap",
> +    "QueryDirectVideo",
> +    "ViewPortChanged",
> +    "10",
> +    "11",
> +    "QueryModes",
> +    "SetMode",
> +    "SetViewport",
> +    "InstallColormap",
> +    "SelectInput",
> +    "FillRectangle",
> +    "CopyArea",
> +    "CopyTransparentArea",
> +    "GetViewportStatus",
> +    "Sync",
> +    "OpenFramebuffer",
> +    "CloseFramebuffer",
> +    "SetClientVersion",
> +    "ChangePixmapMode",
> +    "CreateColormap",
> +};
> +#endif
> +
> +static int
> +ProcXDGADispatch (ClientPtr client)
> +{
> +    REQUEST(xReq);
> +
> +    if (!LocalClient(client))
> +	return DGAErrorBase + XF86DGAClientNotLocal;
> +
> +#ifdef DGA_REQ_DEBUG
> +    if (stuff->data <= X_XDGACreateColormap)
> +	fprintf (stderr, "    DGA %s\n", dgaMinor[stuff->data]);
> +#endif
> +
> +    switch (stuff->data){
> +    /*
> +     * DGA2 Protocol
> +     */
> +    case X_XDGAQueryVersion:
> +	return ProcXDGAQueryVersion(client);
> +    case X_XDGAQueryModes:
> +	return ProcXDGAQueryModes(client);
> +    case X_XDGASetMode:
> +	return ProcXDGASetMode(client);
> +    case X_XDGAOpenFramebuffer:
> +	return ProcXDGAOpenFramebuffer(client);
> +    case X_XDGACloseFramebuffer:
> +	return ProcXDGACloseFramebuffer(client);
> +    case X_XDGASetViewport:
> +	return ProcXDGASetViewport(client);
> +    case X_XDGAInstallColormap:
> +	return ProcXDGAInstallColormap(client);
> +    case X_XDGASelectInput:
> +	return ProcXDGASelectInput(client);
> +    case X_XDGAFillRectangle:
> +	return ProcXDGAFillRectangle(client);
> +    case X_XDGACopyArea:
> +	return ProcXDGACopyArea(client);
> +    case X_XDGACopyTransparentArea:
> +	return ProcXDGACopyTransparentArea(client);
> +    case X_XDGAGetViewportStatus:
> +	return ProcXDGAGetViewportStatus(client);
> +    case X_XDGASync:
> +	return ProcXDGASync(client);
> +    case X_XDGASetClientVersion:
> +	return ProcXDGASetClientVersion(client);
> +    case X_XDGAChangePixmapMode:
> +	return ProcXDGAChangePixmapMode(client);
> +    case X_XDGACreateColormap:
> +	return ProcXDGACreateColormap(client);
> +    /*
> +     * Old DGA Protocol
> +     */
> +#ifdef DGA_PROTOCOL_OLD_SUPPORT
> +    case X_XF86DGAGetVideoLL:
> +	return ProcXF86DGAGetVideoLL(client);
> +    case X_XF86DGADirectVideo:
> +	return ProcXF86DGADirectVideo(client);
> +    case X_XF86DGAGetViewPortSize:
> +	return ProcXF86DGAGetViewPortSize(client);
> +    case X_XF86DGASetViewPort:
> +	return ProcXF86DGASetViewPort(client);
> +    case X_XF86DGAGetVidPage:
> +	return ProcXF86DGAGetVidPage(client);
> +    case X_XF86DGASetVidPage:
> +	return ProcXF86DGASetVidPage(client);
> +    case X_XF86DGAInstallColormap:
> +	return ProcXF86DGAInstallColormap(client);
> +    case X_XF86DGAQueryDirectVideo:
> +	return ProcXF86DGAQueryDirectVideo(client);
> +    case X_XF86DGAViewPortChanged:
> +	return ProcXF86DGAViewPortChanged(client);
> +#endif /* DGA_PROTOCOL_OLD_SUPPORT */
> +    default:
> +	return BadRequest;
> +    }
> +}
> +
> +void
> +XFree86DGARegister(void)
> +{
> +  XDGAEventBase = &DGAEventBase;
> +}
> +
> +void
> +XFree86DGAExtensionInit(void)
> +{
> +    ExtensionEntry* extEntry;
> +
> +    if (!dixRegisterPrivateKey(&DGAClientPrivateKeyRec, PRIVATE_CLIENT, 0))
> +	return;
> +
> +    if (!dixRegisterPrivateKey(&DGAScreenPrivateKeyRec, PRIVATE_SCREEN, 0))
> +	return;
> +
> +    if ((extEntry = AddExtension(XF86DGANAME,
> +				XF86DGANumberEvents,
> +				XF86DGANumberErrors,
> +				ProcXDGADispatch,
> +				SProcXDGADispatch,
> +				XDGAResetProc,
> +				StandardMinorOpcode))) {
> +	int i;
> +
> +	DGAReqCode = (unsigned char)extEntry->base;
> +	DGAErrorBase = extEntry->errorBase;
> +	DGAEventBase = extEntry->eventBase;
> +	for (i = KeyPress; i <= MotionNotify; i++)
> +	    SetCriticalEvent (DGAEventBase + i);
> +    }
> +}
> diff --git a/hw/xfree86/common/xf86Extensions.c b/hw/xfree86/common/xf86Extensions.c
> index 5b2f631..12a8542 100644
> --- a/hw/xfree86/common/xf86Extensions.c
> +++ b/hw/xfree86/common/xf86Extensions.c
> @@ -32,11 +32,29 @@
>  
>  #include "xf86.h"
>  #include "xf86Config.h"
> +#include "xf86Module.h"
>  #include "xf86Opt.h"
>  
> +/*
> + * DDX-specific extensions.
> + */
> +static ExtensionModule extensionModules[] = {
> +#ifdef XFreeXDGA
> +    {
> +	XFree86DGAExtensionInit,
> +	XF86DGANAME,
> +	&noXFree86DGAExtension,
> +	XFree86DGARegister,
> +	NULL
> +    },
> +#endif
> +};
> +
>  void
>  xf86ExtensionInit(void)
>  {
> +    int i;
> +
>      if (xf86configptr->conf_modules) {
>          XF86LoadPtr modp = xf86configptr->conf_modules->mod_load_lst;
>          for (modp = xf86configptr->conf_modules->mod_load_lst; modp;
> @@ -72,4 +90,7 @@ xf86ExtensionInit(void)
>  #endif
>  	}
>      }
> +
> +    for (i = 0; i < ARRAY_SIZE(extensionModules); i++)
> +	LoadExtension(&extensionModules[i], TRUE);
>  }
> diff --git a/hw/xfree86/dixmods/extmod/Makefile.am b/hw/xfree86/dixmods/extmod/Makefile.am
> index 7ef1e7e..bad2270 100644
> --- a/hw/xfree86/dixmods/extmod/Makefile.am
> +++ b/hw/xfree86/dixmods/extmod/Makefile.am
> @@ -1,12 +1,6 @@
> -sdk_HEADERS = dgaproc.h
> -
>  extsmoduledir = $(moduledir)/extensions
>  extsmodule_LTLIBRARIES = libextmod.la
>  
> -if DGA
> -DGA_SRCS = xf86dga2.c dgaproc.h
> -endif
> -
>  if XF86VIDMODE
>  XF86VMODE_SRCS = xf86vmode.c
>  endif
> @@ -20,6 +14,5 @@ INCLUDES = @XORG_INCS@ \
>  libextmod_la_LDFLAGS = -avoid-version
>  libextmod_la_SOURCES = modinit.c \
>                         modinit.h \
> -                       $(DGA_SRCS) \
>                         $(XF86VMODE_SRCS)
>  libextmod_la_LIBADD = $(top_builddir)/Xext/libXextmodule.la
> diff --git a/hw/xfree86/dixmods/extmod/dgaproc.h b/hw/xfree86/dixmods/extmod/dgaproc.h
> deleted file mode 100644
> index a13a517..0000000
> --- a/hw/xfree86/dixmods/extmod/dgaproc.h
> +++ /dev/null
> @@ -1,142 +0,0 @@
> -
> -#ifndef __DGAPROC_H
> -#define __DGAPROC_H
> -
> -#include <X11/Xproto.h>
> -#include "pixmap.h"
> -
> -#define DGA_CONCURRENT_ACCESS	0x00000001
> -#define DGA_FILL_RECT		0x00000002
> -#define DGA_BLIT_RECT		0x00000004
> -#define DGA_BLIT_RECT_TRANS	0x00000008
> -#define DGA_PIXMAP_AVAILABLE	0x00000010
> -
> -#define DGA_INTERLACED		0x00010000
> -#define DGA_DOUBLESCAN		0x00020000
> -
> -#define DGA_FLIP_IMMEDIATE	0x00000001
> -#define DGA_FLIP_RETRACE	0x00000002
> -
> -#define DGA_COMPLETED		0x00000000
> -#define DGA_PENDING		0x00000001
> -
> -#define DGA_NEED_ROOT		0x00000001
> -
> -typedef struct {
> -   int num;		/* A unique identifier for the mode (num > 0) */
> -   char *name;		/* name of mode given in the XF86Config */
> -   int VSync_num;
> -   int VSync_den;
> -   int flags;		/* DGA_CONCURRENT_ACCESS, etc... */
> -   int imageWidth;	/* linear accessible portion (pixels) */
> -   int imageHeight;
> -   int pixmapWidth;	/* Xlib accessible portion (pixels) */
> -   int pixmapHeight;	/* both fields ignored if no concurrent access */
> -   int bytesPerScanline; 
> -   int byteOrder;	/* MSBFirst, LSBFirst */
> -   int depth;		
> -   int bitsPerPixel;
> -   unsigned long red_mask;
> -   unsigned long green_mask;
> -   unsigned long blue_mask;
> -   short visualClass;
> -   int viewportWidth;
> -   int viewportHeight;
> -   int xViewportStep;	/* viewport position granularity */
> -   int yViewportStep;
> -   int maxViewportX;	/* max viewport origin */
> -   int maxViewportY;
> -   int viewportFlags;	/* types of page flipping possible */
> -   int offset;
> -   int reserved1;
> -   int reserved2;
> -} XDGAModeRec, *XDGAModePtr;
> -
> -/* DDX interface */
> -
> -extern _X_EXPORT int
> -DGASetMode(
> -   int Index,
> -   int num,
> -   XDGAModePtr mode,
> -   PixmapPtr *pPix
> -);
> -
> -extern _X_EXPORT void
> -DGASetInputMode(
> -   int Index,
> -   Bool keyboard,
> -   Bool mouse
> -);
> -
> -extern _X_EXPORT void
> -DGASelectInput(
> -   int Index,
> -   ClientPtr client,
> -   long mask
> -);
> -
> -extern _X_EXPORT Bool DGAAvailable(int Index);
> -extern _X_EXPORT Bool DGAActive(int Index);
> -extern _X_EXPORT void DGAShutdown(void);
> -extern _X_EXPORT void DGAInstallCmap(ColormapPtr cmap);
> -extern _X_EXPORT int DGAGetViewportStatus(int Index);
> -extern _X_EXPORT int DGASync(int Index);
> -
> -extern _X_EXPORT int
> -DGAFillRect(
> -   int Index,
> -   int x, int y, int w, int h,
> -   unsigned long color
> -);
> -
> -extern _X_EXPORT int
> -DGABlitRect(
> -   int Index,
> -   int srcx, int srcy, 
> -   int w, int h, 
> -   int dstx, int dsty
> -);
> -
> -extern _X_EXPORT int
> -DGABlitTransRect(
> -   int Index,
> -   int srcx, int srcy, 
> -   int w, int h, 
> -   int dstx, int dsty,
> -   unsigned long color
> -);
> -
> -extern _X_EXPORT int
> -DGASetViewport(
> -   int Index,
> -   int x, int y,
> -   int mode
> -); 
> -
> -extern _X_EXPORT int DGAGetModes(int Index);
> -extern _X_EXPORT int DGAGetOldDGAMode(int Index);
> -
> -extern _X_EXPORT int DGAGetModeInfo(int Index, XDGAModePtr mode, int num);
> -
> -extern _X_EXPORT Bool DGAVTSwitch(void);
> -extern _X_EXPORT Bool DGAStealButtonEvent(DeviceIntPtr dev, int Index, int button,
> -                         int is_down);
> -extern _X_EXPORT Bool DGAStealMotionEvent(DeviceIntPtr dev, int Index, int dx, int dy);
> -extern _X_EXPORT Bool DGAStealKeyEvent(DeviceIntPtr dev, int Index, int key_code, int is_down);
> -	    
> -extern _X_EXPORT Bool DGAOpenFramebuffer(int Index, char **name, unsigned char **mem,
> -			int *size, int *offset, int *flags);
> -extern _X_EXPORT void DGACloseFramebuffer(int Index);
> -extern _X_EXPORT Bool DGAChangePixmapMode(int Index, int *x, int *y, int mode);
> -extern _X_EXPORT int DGACreateColormap(int Index, ClientPtr client, int id, int mode,
> -			int alloc);
> -
> -extern _X_EXPORT unsigned char DGAReqCode;
> -extern _X_EXPORT int DGAErrorBase;
> -extern _X_EXPORT int DGAEventBase;
> -extern _X_EXPORT int *XDGAEventBase;
> -
> -
> -
> -#endif /* __DGAPROC_H */
> diff --git a/hw/xfree86/dixmods/extmod/xf86dga2.c b/hw/xfree86/dixmods/extmod/xf86dga2.c
> deleted file mode 100644
> index e24dda0..0000000
> --- a/hw/xfree86/dixmods/extmod/xf86dga2.c
> +++ /dev/null
> @@ -1,1035 +0,0 @@
> -/*
> - * Copyright (c) 1995  Jon Tombs
> - * Copyright (c) 1995, 1996, 1999  XFree86 Inc
> - * Copyright (c) 1999 - The XFree86 Project Inc.
> - *
> - * Written by Mark Vojkovich
> - */
> -
> -
> -#ifdef HAVE_XORG_CONFIG_H
> -#include <xorg-config.h>
> -#endif
> -
> -#include <X11/X.h>
> -#include <X11/Xproto.h>
> -#include "misc.h"
> -#include "dixstruct.h"
> -#include "dixevents.h"
> -#include "pixmapstr.h"
> -#include "extnsionst.h"
> -#include "colormapst.h"
> -#include "cursorstr.h"
> -#include "scrnintstr.h"
> -#include "servermd.h"
> -#include <X11/extensions/xf86dgaproto.h>
> -#include "swaprep.h"
> -#include "dgaproc.h"
> -#include "protocol-versions.h"
> -
> -#include <string.h>
> -
> -#include "modinit.h"
> -
> -#define DGA_PROTOCOL_OLD_SUPPORT 1
> -
> -
> -static void XDGAResetProc(ExtensionEntry *extEntry);
> -
> -static void DGAClientStateChange (CallbackListPtr*, pointer, pointer);
> -
> -unsigned char DGAReqCode = 0;
> -int DGAErrorBase;
> -int DGAEventBase;
> -
> -static DevPrivateKeyRec DGAScreenPrivateKeyRec;
> -#define DGAScreenPrivateKey (&DGAScreenPrivateKeyRec)
> -#define DGAScreenPrivateKeyRegistered (DGAScreenPrivateKeyRec.initialized)
> -static DevPrivateKeyRec DGAClientPrivateKeyRec;
> -#define DGAClientPrivateKey (&DGAClientPrivateKeyRec)
> -static int DGACallbackRefCount = 0;
> -
> -/* This holds the client's version information */
> -typedef struct {
> -    int		major;
> -    int		minor;
> -} DGAPrivRec, *DGAPrivPtr;
> -
> -#define DGA_GETCLIENT(idx) ((ClientPtr) \
> -    dixLookupPrivate(&screenInfo.screens[idx]->devPrivates, DGAScreenPrivateKey))
> -#define DGA_SETCLIENT(idx,p) \
> -    dixSetPrivate(&screenInfo.screens[idx]->devPrivates, DGAScreenPrivateKey, p)
> -
> -#define DGA_GETPRIV(c) ((DGAPrivPtr) \
> -    dixLookupPrivate(&(c)->devPrivates, DGAClientPrivateKey))
> -#define DGA_SETPRIV(c,p) \
> -    dixSetPrivate(&(c)->devPrivates, DGAClientPrivateKey, p)
> -
> -
> -static void
> -XDGAResetProc (ExtensionEntry *extEntry)
> -{
> -   DeleteCallback (&ClientStateCallback, DGAClientStateChange, NULL);
> -   DGACallbackRefCount = 0;
> -}
> -
> -
> -static int
> -ProcXDGAQueryVersion(ClientPtr client)
> -{
> -    xXDGAQueryVersionReply rep;
> -
> -    REQUEST_SIZE_MATCH(xXDGAQueryVersionReq);
> -    rep.type = X_Reply;
> -    rep.length = 0;
> -    rep.sequenceNumber = client->sequence;
> -    rep.majorVersion = SERVER_XDGA_MAJOR_VERSION;
> -    rep.minorVersion = SERVER_XDGA_MINOR_VERSION;
> -
> -    WriteToClient(client, sizeof(xXDGAQueryVersionReply), (char *)&rep);
> -    return Success;
> -}
> -
> -
> -static int
> -ProcXDGAOpenFramebuffer(ClientPtr client)
> -{
> -    REQUEST(xXDGAOpenFramebufferReq);
> -    xXDGAOpenFramebufferReply rep;
> -    char *deviceName;
> -    int nameSize;
> -
> -    if (stuff->screen >= screenInfo.numScreens)
> -        return BadValue;
> -
> -    if (!DGAAvailable(stuff->screen))
> -        return DGAErrorBase + XF86DGANoDirectVideoMode;
> -
> -    REQUEST_SIZE_MATCH(xXDGAOpenFramebufferReq);
> -    rep.type = X_Reply;
> -    rep.length = 0;
> -    rep.sequenceNumber = client->sequence;
> -
> -    if(!DGAOpenFramebuffer(stuff->screen, &deviceName,
> -			(unsigned char**)(&rep.mem1),
> -			(int*)&rep.size, (int*)&rep.offset, (int*)&rep.extra))
> -    {
> -	return BadAlloc;
> -    }
> -
> -    nameSize = deviceName ? (strlen(deviceName) + 1) : 0;
> -    rep.length = bytes_to_int32(nameSize);
> -
> -    WriteToClient(client, sizeof(xXDGAOpenFramebufferReply), (char *)&rep);
> -    if(rep.length)
> -	WriteToClient(client, nameSize, deviceName);
> -
> -    return Success;
> -}
> -
> -
> -static int
> -ProcXDGACloseFramebuffer(ClientPtr client)
> -{
> -    REQUEST(xXDGACloseFramebufferReq);
> -
> -    if (stuff->screen >= screenInfo.numScreens)
> -        return BadValue;
> -
> -    if (!DGAAvailable(stuff->screen))
> -        return DGAErrorBase + XF86DGANoDirectVideoMode;
> -
> -    REQUEST_SIZE_MATCH(xXDGACloseFramebufferReq);
> -
> -    DGACloseFramebuffer(stuff->screen);
> -
> -    return Success;
> -}
> -
> -static int
> -ProcXDGAQueryModes(ClientPtr client)
> -{
> -    int i, num, size;
> -    REQUEST(xXDGAQueryModesReq);
> -    xXDGAQueryModesReply rep;
> -    xXDGAModeInfo info;
> -    XDGAModePtr mode;
> -
> -    if (stuff->screen >= screenInfo.numScreens)
> -        return BadValue;
> -
> -    REQUEST_SIZE_MATCH(xXDGAQueryModesReq);
> -    rep.type = X_Reply;
> -    rep.length = 0;
> -    rep.number = 0;
> -    rep.sequenceNumber = client->sequence;
> -
> -    if (!DGAAvailable(stuff->screen)) {
> -	rep.number = 0;
> -	rep.length = 0;
> -	WriteToClient(client, sz_xXDGAQueryModesReply, (char*)&rep);
> -	return Success;
> -    }
> -
> -    if(!(num = DGAGetModes(stuff->screen))) {
> -	WriteToClient(client, sz_xXDGAQueryModesReply, (char*)&rep);
> -	return Success;
> -    }
> -
> -    if(!(mode = (XDGAModePtr)malloc(num * sizeof(XDGAModeRec))))
> -	return BadAlloc;
> -
> -    for(i = 0; i < num; i++)
> -	DGAGetModeInfo(stuff->screen, mode + i, i + 1);
> -
> -    size = num * sz_xXDGAModeInfo;
> -    for(i = 0; i < num; i++)
> -	size += pad_to_int32(strlen(mode[i].name) + 1);  /* plus NULL */
> -
> -    rep.number = num;
> -    rep.length = bytes_to_int32(size);
> -
> -    WriteToClient(client, sz_xXDGAQueryModesReply, (char*)&rep);
> -
> -    for(i = 0; i < num; i++) {
> -	size = strlen(mode[i].name) + 1;
> -
> -	info.byte_order = mode[i].byteOrder;
> -	info.depth = mode[i].depth;
> -	info.num = mode[i].num;
> -	info.bpp = mode[i].bitsPerPixel;
> -	info.name_size = (size + 3) & ~3L;
> -	info.vsync_num = mode[i].VSync_num;
> -	info.vsync_den = mode[i].VSync_den;
> -	info.flags = mode[i].flags;
> -	info.image_width = mode[i].imageWidth;
> -	info.image_height = mode[i].imageHeight;
> -	info.pixmap_width = mode[i].pixmapWidth;
> -	info.pixmap_height = mode[i].pixmapHeight;
> -	info.bytes_per_scanline = mode[i].bytesPerScanline;
> -	info.red_mask = mode[i].red_mask;
> -	info.green_mask = mode[i].green_mask;
> -	info.blue_mask = mode[i].blue_mask;
> -	info.visual_class = mode[i].visualClass;
> -	info.viewport_width = mode[i].viewportWidth;
> -	info.viewport_height = mode[i].viewportHeight;
> -	info.viewport_xstep = mode[i].xViewportStep;
> -	info.viewport_ystep = mode[i].yViewportStep;
> - 	info.viewport_xmax = mode[i].maxViewportX;
> -	info.viewport_ymax = mode[i].maxViewportY;
> -	info.viewport_flags = mode[i].viewportFlags;
> -	info.reserved1 = mode[i].reserved1;
> -	info.reserved2 = mode[i].reserved2;
> -
> -	WriteToClient(client, sz_xXDGAModeInfo, (char*)(&info));
> -	WriteToClient(client, size, mode[i].name);
> -    }
> -
> -    free(mode);
> -
> -    return Success;
> -}
> -
> -
> -static void
> -DGAClientStateChange (
> -    CallbackListPtr* pcbl,
> -    pointer nulldata,
> -    pointer calldata
> -){
> -    NewClientInfoRec* pci = (NewClientInfoRec*) calldata;
> -    ClientPtr client = NULL;
> -    int i;
> -
> -    for(i = 0; i < screenInfo.numScreens; i++) {
> -	if(DGA_GETCLIENT(i) == pci->client) {
> -	   client = pci->client;
> -	   break;
> -	}
> -    }
> -
> -    if(client &&
> -      ((client->clientState == ClientStateGone) ||
> -       (client->clientState == ClientStateRetained))) {
> -	XDGAModeRec mode;
> -	PixmapPtr pPix;
> -
> -	DGA_SETCLIENT(i, NULL);
> -	DGASelectInput(i, NULL, 0);
> -	DGASetMode(i, 0, &mode, &pPix);
> -
> -	if(--DGACallbackRefCount == 0)
> -	    DeleteCallback(&ClientStateCallback, DGAClientStateChange, NULL);
> -    }
> -}
> -
> -static int
> -ProcXDGASetMode(ClientPtr client)
> -{
> -    REQUEST(xXDGASetModeReq);
> -    xXDGASetModeReply rep;
> -    XDGAModeRec mode;
> -    xXDGAModeInfo info;
> -    PixmapPtr pPix;
> -    ClientPtr owner;
> -    int size;
> -
> -    if (stuff->screen >= screenInfo.numScreens)
> -        return BadValue;
> -    owner = DGA_GETCLIENT(stuff->screen);
> -
> -    REQUEST_SIZE_MATCH(xXDGASetModeReq);
> -    rep.type = X_Reply;
> -    rep.length = 0;
> -    rep.offset = 0;
> -    rep.flags = 0;
> -    rep.sequenceNumber = client->sequence;
> -
> -    if (!DGAAvailable(stuff->screen))
> -        return DGAErrorBase + XF86DGANoDirectVideoMode;
> -
> -    if(owner && owner != client)
> -        return DGAErrorBase + XF86DGANoDirectVideoMode;
> -
> -    if(!stuff->mode) {
> -	if(owner) {
> -	  if(--DGACallbackRefCount == 0)
> -	    DeleteCallback(&ClientStateCallback, DGAClientStateChange, NULL);
> -	}
> -	DGA_SETCLIENT(stuff->screen, NULL);
> -	DGASelectInput(stuff->screen, NULL, 0);
> -	DGASetMode(stuff->screen, 0, &mode, &pPix);
> -	WriteToClient(client, sz_xXDGASetModeReply, (char*)&rep);
> -	return Success;
> -    }
> -
> -    if(Success != DGASetMode(stuff->screen, stuff->mode, &mode, &pPix))
> -	return BadValue;
> -
> -    if(!owner) {
> -	if(DGACallbackRefCount++ == 0)
> -	   AddCallback (&ClientStateCallback, DGAClientStateChange, NULL);
> -    }
> -
> -    DGA_SETCLIENT(stuff->screen, client);
> -
> -    if(pPix) {
> -	if(AddResource(stuff->pid, RT_PIXMAP, (pointer)(pPix))) {
> -	    pPix->drawable.id = (int)stuff->pid;
> -	    rep.flags = DGA_PIXMAP_AVAILABLE;
> -	}
> -    }
> -
> -    size = strlen(mode.name) + 1;
> -
> -    info.byte_order = mode.byteOrder;
> -    info.depth = mode.depth;
> -    info.num = mode.num;
> -    info.bpp = mode.bitsPerPixel;
> -    info.name_size = (size + 3) & ~3L;
> -    info.vsync_num = mode.VSync_num;
> -    info.vsync_den = mode.VSync_den;
> -    info.flags = mode.flags;
> -    info.image_width = mode.imageWidth;
> -    info.image_height = mode.imageHeight;
> -    info.pixmap_width = mode.pixmapWidth;
> -    info.pixmap_height = mode.pixmapHeight;
> -    info.bytes_per_scanline = mode.bytesPerScanline;
> -    info.red_mask = mode.red_mask;
> -    info.green_mask = mode.green_mask;
> -    info.blue_mask = mode.blue_mask;
> -    info.visual_class = mode.visualClass;
> -    info.viewport_width = mode.viewportWidth;
> -    info.viewport_height = mode.viewportHeight;
> -    info.viewport_xstep = mode.xViewportStep;
> -    info.viewport_ystep = mode.yViewportStep;
> -    info.viewport_xmax = mode.maxViewportX;
> -    info.viewport_ymax = mode.maxViewportY;
> -    info.viewport_flags = mode.viewportFlags;
> -    info.reserved1 = mode.reserved1;
> -    info.reserved2 = mode.reserved2;
> -
> -    rep.length = bytes_to_int32(sz_xXDGAModeInfo + info.name_size);
> -
> -    WriteToClient(client, sz_xXDGASetModeReply, (char*)&rep);
> -    WriteToClient(client, sz_xXDGAModeInfo, (char*)(&info));
> -    WriteToClient(client, size, mode.name);
> -
> -    return Success;
> -}
> -
> -static int
> -ProcXDGASetViewport(ClientPtr client)
> -{
> -    REQUEST(xXDGASetViewportReq);
> -
> -    if (stuff->screen >= screenInfo.numScreens)
> -        return BadValue;
> -
> -    if(DGA_GETCLIENT(stuff->screen) != client)
> -        return DGAErrorBase + XF86DGADirectNotActivated;
> -
> -    REQUEST_SIZE_MATCH(xXDGASetViewportReq);
> -
> -    DGASetViewport(stuff->screen, stuff->x, stuff->y, stuff->flags);
> -
> -    return Success;
> -}
> -
> -static int
> -ProcXDGAInstallColormap(ClientPtr client)
> -{
> -    ColormapPtr cmap;
> -    int rc;
> -    REQUEST(xXDGAInstallColormapReq);
> -
> -    if (stuff->screen >= screenInfo.numScreens)
> -        return BadValue;
> -
> -    if(DGA_GETCLIENT(stuff->screen) != client)
> -        return DGAErrorBase + XF86DGADirectNotActivated;
> -
> -    REQUEST_SIZE_MATCH(xXDGAInstallColormapReq);
> -
> -    rc = dixLookupResourceByType((pointer *)&cmap, stuff->cmap, RT_COLORMAP,
> -				 client, DixInstallAccess);
> -    if (rc != Success)
> -        return rc;
> -    DGAInstallCmap(cmap);
> -    return Success;
> -}
> -
> -
> -static int
> -ProcXDGASelectInput(ClientPtr client)
> -{
> -    REQUEST(xXDGASelectInputReq);
> -
> -    if (stuff->screen >= screenInfo.numScreens)
> -        return BadValue;
> -
> -    if(DGA_GETCLIENT(stuff->screen) != client)
> -        return DGAErrorBase + XF86DGADirectNotActivated;
> -
> -    REQUEST_SIZE_MATCH(xXDGASelectInputReq);
> -
> -    if(DGA_GETCLIENT(stuff->screen) == client)
> -	DGASelectInput(stuff->screen, client, stuff->mask);
> -
> -    return Success;
> -}
> -
> -
> -static int
> -ProcXDGAFillRectangle(ClientPtr client)
> -{
> -    REQUEST(xXDGAFillRectangleReq);
> -
> -    if (stuff->screen >= screenInfo.numScreens)
> -        return BadValue;
> -
> -    if(DGA_GETCLIENT(stuff->screen) != client)
> -        return DGAErrorBase + XF86DGADirectNotActivated;
> -
> -    REQUEST_SIZE_MATCH(xXDGAFillRectangleReq);
> -
> -    if(Success != DGAFillRect(stuff->screen, stuff->x, stuff->y,
> -			stuff->width, stuff->height, stuff->color))
> -	return BadMatch;
> -
> -    return Success;
> -}
> -
> -static int
> -ProcXDGACopyArea(ClientPtr client)
> -{
> -    REQUEST(xXDGACopyAreaReq);
> -
> -    if (stuff->screen >= screenInfo.numScreens)
> -        return BadValue;
> -
> -    if(DGA_GETCLIENT(stuff->screen) != client)
> -        return DGAErrorBase + XF86DGADirectNotActivated;
> -
> -    REQUEST_SIZE_MATCH(xXDGACopyAreaReq);
> -
> -    if(Success != DGABlitRect(stuff->screen, stuff->srcx, stuff->srcy,
> -		stuff->width, stuff->height, stuff->dstx, stuff->dsty))
> -	return BadMatch;
> -
> -    return Success;
> -}
> -
> -
> -static int
> -ProcXDGACopyTransparentArea(ClientPtr client)
> -{
> -    REQUEST(xXDGACopyTransparentAreaReq);
> -
> -    if (stuff->screen >= screenInfo.numScreens)
> -        return BadValue;
> -
> -    if(DGA_GETCLIENT(stuff->screen) != client)
> -        return DGAErrorBase + XF86DGADirectNotActivated;
> -
> -    REQUEST_SIZE_MATCH(xXDGACopyTransparentAreaReq);
> -
> -    if(Success != DGABlitTransRect(stuff->screen, stuff->srcx, stuff->srcy,
> -	stuff->width, stuff->height, stuff->dstx, stuff->dsty, stuff->key))
> -	return BadMatch;
> -
> -    return Success;
> -}
> -
> -
> -static int
> -ProcXDGAGetViewportStatus(ClientPtr client)
> -{
> -    REQUEST(xXDGAGetViewportStatusReq);
> -    xXDGAGetViewportStatusReply rep;
> -
> -    if (stuff->screen >= screenInfo.numScreens)
> -        return BadValue;
> -
> -    if(DGA_GETCLIENT(stuff->screen) != client)
> -        return DGAErrorBase + XF86DGADirectNotActivated;
> -
> -    REQUEST_SIZE_MATCH(xXDGAGetViewportStatusReq);
> -    rep.type = X_Reply;
> -    rep.length = 0;
> -    rep.sequenceNumber = client->sequence;
> -
> -    rep.status = DGAGetViewportStatus(stuff->screen);
> -
> -    WriteToClient(client, sizeof(xXDGAGetViewportStatusReply), (char *)&rep);
> -    return Success;
> -}
> -
> -static int
> -ProcXDGASync(ClientPtr client)
> -{
> -    REQUEST(xXDGASyncReq);
> -    xXDGASyncReply rep;
> -
> -    if (stuff->screen >= screenInfo.numScreens)
> -        return BadValue;
> -
> -    if(DGA_GETCLIENT(stuff->screen) != client)
> -        return DGAErrorBase + XF86DGADirectNotActivated;
> -
> -    REQUEST_SIZE_MATCH(xXDGASyncReq);
> -    rep.type = X_Reply;
> -    rep.length = 0;
> -    rep.sequenceNumber = client->sequence;
> -
> -    DGASync(stuff->screen);
> -
> -    WriteToClient(client, sizeof(xXDGASyncReply), (char *)&rep);
> -    return Success;
> -}
> -
> -static int
> -ProcXDGASetClientVersion(ClientPtr client)
> -{
> -    REQUEST(xXDGASetClientVersionReq);
> -
> -    DGAPrivPtr pPriv;
> -
> -    REQUEST_SIZE_MATCH(xXDGASetClientVersionReq);
> -    if ((pPriv = DGA_GETPRIV(client)) == NULL) {
> -	pPriv = malloc(sizeof(DGAPrivRec));
> -	/* XXX Need to look into freeing this */
> -	if (!pPriv)
> -	    return BadAlloc;
> -	DGA_SETPRIV(client, pPriv);
> -    }
> -    pPriv->major = stuff->major;
> -    pPriv->minor = stuff->minor;
> -
> -    return Success;
> -}
> -
> -static int
> -ProcXDGAChangePixmapMode(ClientPtr client)
> -{
> -    REQUEST(xXDGAChangePixmapModeReq);
> -    xXDGAChangePixmapModeReply rep;
> -    int x, y;
> -
> -    if (stuff->screen >= screenInfo.numScreens)
> -        return BadValue;
> -
> -    if(DGA_GETCLIENT(stuff->screen) != client)
> -        return DGAErrorBase + XF86DGADirectNotActivated;
> -
> -    REQUEST_SIZE_MATCH(xXDGAChangePixmapModeReq);
> -    rep.type = X_Reply;
> -    rep.length = 0;
> -    rep.sequenceNumber = client->sequence;
> -
> -    x = stuff->x;
> -    y = stuff->y;
> -
> -    if(!DGAChangePixmapMode(stuff->screen, &x, &y, stuff->flags))
> -	return BadMatch;
> -
> -    rep.x = x;
> -    rep.y = y;
> -    WriteToClient(client, sizeof(xXDGAChangePixmapModeReply), (char *)&rep);
> -
> -    return Success;
> -}
> -
> -
> -static int
> -ProcXDGACreateColormap(ClientPtr client)
> -{
> -    REQUEST(xXDGACreateColormapReq);
> -    int result;
> -
> -    if (stuff->screen >= screenInfo.numScreens)
> -        return BadValue;
> -
> -    if(DGA_GETCLIENT(stuff->screen) != client)
> -        return DGAErrorBase + XF86DGADirectNotActivated;
> -
> -    REQUEST_SIZE_MATCH(xXDGACreateColormapReq);
> -
> -    if(!stuff->mode)
> -	return BadValue;
> -
> -    result = DGACreateColormap(stuff->screen, client, stuff->id,
> -				stuff->mode, stuff->alloc);
> -    if(result != Success)
> -	return result;
> -
> -    return Success;
> -}
> -
> -/*
> - *
> - * Support for the old DGA protocol, used to live in xf86dga.c
> - *
> - */
> -
> -#ifdef DGA_PROTOCOL_OLD_SUPPORT
> -
> -
> -
> -static int
> -ProcXF86DGAGetVideoLL(ClientPtr client)
> -{
> -    REQUEST(xXF86DGAGetVideoLLReq);
> -    xXF86DGAGetVideoLLReply rep;
> -    XDGAModeRec mode;
> -    int num, offset, flags;
> -    char *name;
> -
> -    if (stuff->screen >= screenInfo.numScreens)
> -	return BadValue;
> -
> -    REQUEST_SIZE_MATCH(xXF86DGAGetVideoLLReq);
> -    rep.type = X_Reply;
> -    rep.length = 0;
> -    rep.sequenceNumber = client->sequence;
> -
> -    if(!DGAAvailable(stuff->screen))
> -	return DGAErrorBase + XF86DGANoDirectVideoMode;
> -
> -    if(!(num = DGAGetOldDGAMode(stuff->screen)))
> -	return DGAErrorBase + XF86DGANoDirectVideoMode;
> -
> -    /* get the parameters for the mode that best matches */
> -    DGAGetModeInfo(stuff->screen, &mode, num);
> -
> -    if(!DGAOpenFramebuffer(stuff->screen, &name,
> -			(unsigned char**)(&rep.offset),
> -			(int*)(&rep.bank_size), &offset, &flags))
> -	return BadAlloc;
> -
> -    rep.offset += mode.offset;
> -    rep.width = mode.bytesPerScanline / (mode.bitsPerPixel >> 3);
> -    rep.ram_size = rep.bank_size >> 10;
> -
> -    WriteToClient(client, SIZEOF(xXF86DGAGetVideoLLReply), (char *)&rep);
> -    return Success;
> -}
> -
> -static int
> -ProcXF86DGADirectVideo(ClientPtr client)
> -{
> -    int num;
> -    PixmapPtr pix;
> -    XDGAModeRec mode;
> -    ClientPtr owner;
> -    REQUEST(xXF86DGADirectVideoReq);
> -
> -    if (stuff->screen >= screenInfo.numScreens)
> -	return BadValue;
> -    REQUEST_SIZE_MATCH(xXF86DGADirectVideoReq);
> -
> -    if (!DGAAvailable(stuff->screen))
> -	return DGAErrorBase + XF86DGANoDirectVideoMode;
> -
> -    owner = DGA_GETCLIENT(stuff->screen);
> -
> -    if (owner && owner != client)
> -        return DGAErrorBase + XF86DGANoDirectVideoMode;
> -
> -    if (stuff->enable & XF86DGADirectGraphics) {
> -	if(!(num = DGAGetOldDGAMode(stuff->screen)))
> -	    return DGAErrorBase + XF86DGANoDirectVideoMode;
> -    } else
> -	num = 0;
> -
> -    if(Success != DGASetMode(stuff->screen, num, &mode, &pix))
> -	return DGAErrorBase + XF86DGAScreenNotActive;
> -
> -    DGASetInputMode (stuff->screen,
> -		     (stuff->enable & XF86DGADirectKeyb) != 0,
> -		     (stuff->enable & XF86DGADirectMouse) != 0);
> -
> -    /* We need to track the client and attach the teardown callback */
> -    if (stuff->enable &
> -	(XF86DGADirectGraphics | XF86DGADirectKeyb | XF86DGADirectMouse)) {
> -	if (!owner) {
> -	    if (DGACallbackRefCount++ == 0)
> -		AddCallback (&ClientStateCallback, DGAClientStateChange, NULL);
> -	}
> -
> -	DGA_SETCLIENT(stuff->screen, client);
> -    } else {
> -	if (owner) {
> -	    if (--DGACallbackRefCount == 0)
> -		DeleteCallback(&ClientStateCallback, DGAClientStateChange, NULL);
> -	}
> -
> -	DGA_SETCLIENT(stuff->screen, NULL);
> -    }
> -
> -    return Success;
> -}
> -
> -static int
> -ProcXF86DGAGetViewPortSize(ClientPtr client)
> -{
> -    int num;
> -    XDGAModeRec mode;
> -    REQUEST(xXF86DGAGetViewPortSizeReq);
> -    xXF86DGAGetViewPortSizeReply rep;
> -
> -    if (stuff->screen >= screenInfo.numScreens)
> -	return BadValue;
> -
> -    REQUEST_SIZE_MATCH(xXF86DGAGetViewPortSizeReq);
> -    rep.type = X_Reply;
> -    rep.length = 0;
> -    rep.sequenceNumber = client->sequence;
> -
> -    if (!DGAAvailable(stuff->screen))
> -	return DGAErrorBase + XF86DGANoDirectVideoMode;
> -
> -    if(!(num = DGAGetOldDGAMode(stuff->screen)))
> -	return DGAErrorBase + XF86DGANoDirectVideoMode;
> -
> -    DGAGetModeInfo(stuff->screen, &mode, num);
> -
> -    rep.width = mode.viewportWidth;
> -    rep.height = mode.viewportHeight;
> -
> -    WriteToClient(client, SIZEOF(xXF86DGAGetViewPortSizeReply), (char *)&rep);
> -    return Success;
> -}
> -
> -static int
> -ProcXF86DGASetViewPort(ClientPtr client)
> -{
> -    REQUEST(xXF86DGASetViewPortReq);
> -
> -    if (stuff->screen >= screenInfo.numScreens)
> -	return BadValue;
> -
> -    if (DGA_GETCLIENT(stuff->screen) != client)
> -        return DGAErrorBase + XF86DGADirectNotActivated;
> -
> -    REQUEST_SIZE_MATCH(xXF86DGASetViewPortReq);
> -
> -    if (!DGAAvailable(stuff->screen))
> -	return DGAErrorBase + XF86DGANoDirectVideoMode;
> -
> -    if (!DGAActive(stuff->screen))
> -	return DGAErrorBase + XF86DGADirectNotActivated;
> -
> -    if (DGASetViewport(stuff->screen, stuff->x, stuff->y, DGA_FLIP_RETRACE)
> -		!= Success)
> -	return DGAErrorBase + XF86DGADirectNotActivated;
> -
> -    return Success;
> -}
> -
> -static int
> -ProcXF86DGAGetVidPage(ClientPtr client)
> -{
> -    REQUEST(xXF86DGAGetVidPageReq);
> -    xXF86DGAGetVidPageReply rep;
> -
> -    if (stuff->screen >= screenInfo.numScreens)
> -	return BadValue;
> -
> -    REQUEST_SIZE_MATCH(xXF86DGAGetVidPageReq);
> -    rep.type = X_Reply;
> -    rep.length = 0;
> -    rep.sequenceNumber = client->sequence;
> -    rep.vpage = 0;  /* silently fail */
> -
> -    WriteToClient(client, SIZEOF(xXF86DGAGetVidPageReply), (char *)&rep);
> -    return Success;
> -}
> -
> -
> -static int
> -ProcXF86DGASetVidPage(ClientPtr client)
> -{
> -    REQUEST(xXF86DGASetVidPageReq);
> -
> -    if (stuff->screen >= screenInfo.numScreens)
> -	return BadValue;
> -
> -    REQUEST_SIZE_MATCH(xXF86DGASetVidPageReq);
> -
> -    /* silently fail */
> -
> -    return Success;
> -}
> -
> -
> -static int
> -ProcXF86DGAInstallColormap(ClientPtr client)
> -{
> -    ColormapPtr pcmp;
> -    int rc;
> -    REQUEST(xXF86DGAInstallColormapReq);
> -
> -    if (stuff->screen >= screenInfo.numScreens)
> -	return BadValue;
> -
> -    if (DGA_GETCLIENT(stuff->screen) != client)
> -        return DGAErrorBase + XF86DGADirectNotActivated;
> -
> -    REQUEST_SIZE_MATCH(xXF86DGAInstallColormapReq);
> -
> -    if (!DGAActive(stuff->screen))
> -	return DGAErrorBase + XF86DGADirectNotActivated;
> -
> -    rc = dixLookupResourceByType((pointer *)&pcmp, stuff->id, RT_COLORMAP,
> -				 client, DixInstallAccess);
> -    if (rc == Success) {
> -	DGAInstallCmap(pcmp);
> -        return Success;
> -    } else {
> -        return rc;
> -    }
> -}
> -
> -static int
> -ProcXF86DGAQueryDirectVideo(ClientPtr client)
> -{
> -    REQUEST(xXF86DGAQueryDirectVideoReq);
> -    xXF86DGAQueryDirectVideoReply rep;
> -
> -    if (stuff->screen >= screenInfo.numScreens)
> -	return BadValue;
> -
> -    REQUEST_SIZE_MATCH(xXF86DGAQueryDirectVideoReq);
> -    rep.type = X_Reply;
> -    rep.length = 0;
> -    rep.sequenceNumber = client->sequence;
> -    rep.flags = 0;
> -
> -    if (DGAAvailable(stuff->screen))
> -	rep.flags = XF86DGADirectPresent;
> -
> -    WriteToClient(client, SIZEOF(xXF86DGAQueryDirectVideoReply), (char *)&rep);
> -    return Success;
> -}
> -
> -static int
> -ProcXF86DGAViewPortChanged(ClientPtr client)
> -{
> -    REQUEST(xXF86DGAViewPortChangedReq);
> -    xXF86DGAViewPortChangedReply rep;
> -
> -    if (stuff->screen >= screenInfo.numScreens)
> -	return BadValue;
> -
> -    if (DGA_GETCLIENT(stuff->screen) != client)
> -        return DGAErrorBase + XF86DGADirectNotActivated;
> -
> -    REQUEST_SIZE_MATCH(xXF86DGAViewPortChangedReq);
> -
> -    if (!DGAActive(stuff->screen))
> -	return DGAErrorBase + XF86DGADirectNotActivated;
> -
> -    rep.type = X_Reply;
> -    rep.length = 0;
> -    rep.sequenceNumber = client->sequence;
> -    rep.result = 1;
> -
> -    WriteToClient(client, SIZEOF(xXF86DGAViewPortChangedReply), (char *)&rep);
> -    return Success;
> -}
> -
> -#endif /* DGA_PROTOCOL_OLD_SUPPORT */
> -
> -static int
> -SProcXDGADispatch (ClientPtr client)
> -{
> -   return DGAErrorBase + XF86DGAClientNotLocal;
> -}
> -
> -#if 0
> -#define DGA_REQ_DEBUG
> -#endif
> -
> -#ifdef DGA_REQ_DEBUG
> -static char *dgaMinor[] = {
> -    "QueryVersion",
> -    "GetVideoLL",
> -    "DirectVideo",
> -    "GetViewPortSize",
> -    "SetViewPort",
> -    "GetVidPage",
> -    "SetVidPage",
> -    "InstallColormap",
> -    "QueryDirectVideo",
> -    "ViewPortChanged",
> -    "10",
> -    "11",
> -    "QueryModes",
> -    "SetMode",
> -    "SetViewport",
> -    "InstallColormap",
> -    "SelectInput",
> -    "FillRectangle",
> -    "CopyArea",
> -    "CopyTransparentArea",
> -    "GetViewportStatus",
> -    "Sync",
> -    "OpenFramebuffer",
> -    "CloseFramebuffer",
> -    "SetClientVersion",
> -    "ChangePixmapMode",
> -    "CreateColormap",
> -};
> -#endif
> -
> -static int
> -ProcXDGADispatch (ClientPtr client)
> -{
> -    REQUEST(xReq);
> -
> -    if (!LocalClient(client))
> -	return DGAErrorBase + XF86DGAClientNotLocal;
> -
> -#ifdef DGA_REQ_DEBUG
> -    if (stuff->data <= X_XDGACreateColormap)
> -	fprintf (stderr, "    DGA %s\n", dgaMinor[stuff->data]);
> -#endif
> -
> -    switch (stuff->data){
> -    /*
> -     * DGA2 Protocol
> -     */
> -    case X_XDGAQueryVersion:
> -	return ProcXDGAQueryVersion(client);
> -    case X_XDGAQueryModes:
> -	return ProcXDGAQueryModes(client);
> -    case X_XDGASetMode:
> -	return ProcXDGASetMode(client);
> -    case X_XDGAOpenFramebuffer:
> -	return ProcXDGAOpenFramebuffer(client);
> -    case X_XDGACloseFramebuffer:
> -	return ProcXDGACloseFramebuffer(client);
> -    case X_XDGASetViewport:
> -	return ProcXDGASetViewport(client);
> -    case X_XDGAInstallColormap:
> -	return ProcXDGAInstallColormap(client);
> -    case X_XDGASelectInput:
> -	return ProcXDGASelectInput(client);
> -    case X_XDGAFillRectangle:
> -	return ProcXDGAFillRectangle(client);
> -    case X_XDGACopyArea:
> -	return ProcXDGACopyArea(client);
> -    case X_XDGACopyTransparentArea:
> -	return ProcXDGACopyTransparentArea(client);
> -    case X_XDGAGetViewportStatus:
> -	return ProcXDGAGetViewportStatus(client);
> -    case X_XDGASync:
> -	return ProcXDGASync(client);
> -    case X_XDGASetClientVersion:
> -	return ProcXDGASetClientVersion(client);
> -    case X_XDGAChangePixmapMode:
> -	return ProcXDGAChangePixmapMode(client);
> -    case X_XDGACreateColormap:
> -	return ProcXDGACreateColormap(client);
> -    /*
> -     * Old DGA Protocol
> -     */
> -#ifdef DGA_PROTOCOL_OLD_SUPPORT
> -    case X_XF86DGAGetVideoLL:
> -	return ProcXF86DGAGetVideoLL(client);
> -    case X_XF86DGADirectVideo:
> -	return ProcXF86DGADirectVideo(client);
> -    case X_XF86DGAGetViewPortSize:
> -	return ProcXF86DGAGetViewPortSize(client);
> -    case X_XF86DGASetViewPort:
> -	return ProcXF86DGASetViewPort(client);
> -    case X_XF86DGAGetVidPage:
> -	return ProcXF86DGAGetVidPage(client);
> -    case X_XF86DGASetVidPage:
> -	return ProcXF86DGASetVidPage(client);
> -    case X_XF86DGAInstallColormap:
> -	return ProcXF86DGAInstallColormap(client);
> -    case X_XF86DGAQueryDirectVideo:
> -	return ProcXF86DGAQueryDirectVideo(client);
> -    case X_XF86DGAViewPortChanged:
> -	return ProcXF86DGAViewPortChanged(client);
> -#endif /* DGA_PROTOCOL_OLD_SUPPORT */
> -    default:
> -	return BadRequest;
> -    }
> -}
> -
> -void
> -XFree86DGARegister(void)
> -{
> -  XDGAEventBase = &DGAEventBase;
> -}
> -
> -void
> -XFree86DGAExtensionInit(void)
> -{
> -    ExtensionEntry* extEntry;
> -
> -    if (!dixRegisterPrivateKey(&DGAClientPrivateKeyRec, PRIVATE_CLIENT, 0))
> -	return;
> -
> -    if (!dixRegisterPrivateKey(&DGAScreenPrivateKeyRec, PRIVATE_SCREEN, 0))
> -	return;
> -
> -    if ((extEntry = AddExtension(XF86DGANAME,
> -				XF86DGANumberEvents,
> -				XF86DGANumberErrors,
> -				ProcXDGADispatch,
> -				SProcXDGADispatch,
> -				XDGAResetProc,
> -				StandardMinorOpcode))) {
> -	int i;
> -
> -	DGAReqCode = (unsigned char)extEntry->base;
> -	DGAErrorBase = extEntry->errorBase;
> -	DGAEventBase = extEntry->eventBase;
> -	for (i = KeyPress; i <= MotionNotify; i++)
> -	    SetCriticalEvent (DGAEventBase + i);
> -    }
> -}
> diff --git a/hw/xfree86/sdksyms.sh b/hw/xfree86/sdksyms.sh
> index 2adf727..a3a8477 100755
> --- a/hw/xfree86/sdksyms.sh
> +++ b/hw/xfree86/sdksyms.sh
> @@ -183,9 +183,9 @@ cat > sdksyms.c << EOF
>  
>  
>  /* hw/xfree86/dixmods/extmod/Makefile.am -- module */
> -/*
> +#ifdef XFreeXDGA
>  #include "dgaproc.h"
> - */
> +#endif
>  
>  
>  /* hw/xfree86/parser/Makefile.am */



More information about the xorg-devel mailing list