[PATCH 16/37] Move DGA from extmod to built-in
Alan Hourihane
alanh at fairlite.co.uk
Tue Jun 28 12:55:40 PDT 2011
Just remembered, if --disable-dga when configuring still works, then I'm
fine :-)
Alan.
On 06/28/11 20:53, Alan Hourihane wrote:
> 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