[arch-commits] CVS update of extra/x11-drivers/xf86-video-mga (2 files)
Jan de Groot
jgc at archlinux.org
Sat Jan 26 12:40:48 UTC 2008
Date: Saturday, January 26, 2008 @ 07:40:48
Author: jgc
Path: /home/cvs-extra/extra/x11-drivers/xf86-video-mga
Removed: mga-binding.patch (1.2) mga-mergedfb-xinerama.patch (1.1)
Remove old patches
-----------------------------+
mga-binding.patch | 19
mga-mergedfb-xinerama.patch | 846 ------------------------------------------
2 files changed, 865 deletions(-)
Index: extra/x11-drivers/xf86-video-mga/mga-binding.patch
diff -u extra/x11-drivers/xf86-video-mga/mga-binding.patch:1.2 extra/x11-drivers/xf86-video-mga/mga-binding.patch:removed
--- extra/x11-drivers/xf86-video-mga/mga-binding.patch:1.2 Mon Dec 25 19:49:37 2006
+++ extra/x11-drivers/xf86-video-mga/mga-binding.patch Sat Jan 26 07:40:48 2008
@@ -1,19 +0,0 @@
---- xf86-video-mga-1.4.6.1/src/binding.h 2006-11-08 17:16:44.000000000 +0000
-+++ xf86-video-mga-1.4.6.1/src/binding.h 2004-12-08 21:03:00.000000000 +0000
-@@ -210,6 +210,8 @@
- #define MGAMODEINFO_FORCE_PITCH (1L << 5)
- #define MGAMODEINFO_FORCE_DISPLAYORG (1L << 6)
- #define MGAMODEINFO_TV (1L << 7)
-+#define MGAMODEINFO_FLATPANEL1 (1L << 8)
-+#define MGAMODEINFO_FLATPANEL2 (1L << 9)
- #define MGAMODEINFO_TESTONLY 0x80000000
-
- /* Cable Type */
-@@ -243,7 +245,6 @@
- ULONG MGAGetBOARDHANDLESize(void);
- ULONG MGASetTVStandard(LPBOARDHANDLE pBoard, ULONG ulTVStandard);
- ULONG MGASetTVCableType(LPBOARDHANDLE pBoard, ULONG ulCableType);
--ULONG HALSetDisplayStart(LPBOARDHANDLE pBoard, ULONG x, ULONG y, ULONG crtc);
-
- #if defined(__cplusplus)
- }
Index: extra/x11-drivers/xf86-video-mga/mga-mergedfb-xinerama.patch
diff -u extra/x11-drivers/xf86-video-mga/mga-mergedfb-xinerama.patch:1.1 extra/x11-drivers/xf86-video-mga/mga-mergedfb-xinerama.patch:removed
--- extra/x11-drivers/xf86-video-mga/mga-mergedfb-xinerama.patch:1.1 Sat Mar 4 04:49:38 2006
+++ extra/x11-drivers/xf86-video-mga/mga-mergedfb-xinerama.patch Sat Jan 26 07:40:48 2008
@@ -1,846 +0,0 @@
---- src/mga.h 27 Jul 2004 02:50:41 -0000 1.3
-+++ src/mga.h 16 Aug 2004 17:13:11 -0000
-@@ -259,6 +259,15 @@
- #endif
-
-
-+/* ------- mergedfb support ------------- */
-+ /* Psuedo Xinerama support */
-+#define NEED_REPLIES /* ? */
-+#define EXTENSION_PROC_ARGS void *
-+#include "extnsionst.h" /* required */
-+#include "panoramiXproto.h" /* required */
-+#define MGA_XINERAMA_MAJOR_VERSION 1
-+#define MGA_XINERAMA_MINOR_VERSION 1
-+
- typedef enum {
- mgaLeftOf,
- mgaRightOf,
-@@ -267,6 +276,8 @@
- mgaClone
- } MgaScrn2Rel;
-
-+/* ------------------------------------- */
-+
- typedef struct {
- int lastInstance;
- #ifdef USEMGAHAL
-@@ -447,6 +458,7 @@
- OptionInfoPtr Options;
- /* Merged Framebuffer data */
- Bool MergedFB;
-+ MgaScrn2Rel Monitor2Pos;
-
- /* Real values specific to monitor1, since the original ones are replaced */
- DisplayModePtr M1modes; /* list of actual modes */
-@@ -458,6 +470,15 @@
-
- ScrnInfoPtr pScrn2; /*pointer to second CRTC screeninforec,
- if in merged mode */
-+ /* pseudo xinerama support for mergedfb */
-+ int maxM1_X1, maxM1_X2, maxM1_Y1, maxM1_Y2;
-+ int maxM2_X1, maxM2_X2, maxM2_Y1, maxM2_Y2;
-+ int maxClone_X1, maxClone_X2, maxClone_Y1, maxClone_Y2;
-+ ExtensionEntry *XineramaExtEntry;
-+ int MGAXineramaVX, MGAXineramaVY;
-+ Bool AtLeastOneNonClone;
-+ int MergedFBXDPI, MergedFBYDPI;
-+ Bool NoVirtual;
- /* End of Merged Framebuffer Data */
- int HALGranularityOffX, HALGranularityOffY;
- } MGARec, *MGAPtr;
---- src/mga_driver.c 9 Aug 2004 22:37:22 -0000 1.8
-+++ src/mga_driver.c 16 Aug 2004 17:13:14 -0000
-@@ -43,6 +43,9 @@
- * Fixed 32bpp hires 8MB horizontal line glitch at middle right
- * Niels Gram Jeppesen
- * Added digital screen option for first head
-+ *
-+ * Mergedfb and pseudo xinerama support added by Juerg Billeter (j at bitron.ch)
-+ * based on the radeon driver by Alex Deucher (agd5f at yahoo.com).
- */
-
- /* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/mga/mga_driver.c,v 1.244tsi Exp $ */
-@@ -136,6 +139,10 @@
-
- #include "mga_merge.h"
-
-+/* pseudo xinerama support */
-+
-+extern Bool MGAnoPanoramiXExtension;
-+
-
- /*
- * This contains the functions needed by the server after loading the
-@@ -3414,6 +3421,9 @@
- pMga->PointerMoved = pScrn->PointerMoved;
- pScrn->PointerMoved = MGAMergePointerMoved;
-
-+ /* Psuedo xinerama */
-+ MGAnoPanoramiXExtension = FALSE;
-+ MGAXineramaExtensionInit(pScrn);
- }
-
- /* Initialise default colourmap */
-@@ -3521,6 +3531,9 @@
- Bool
- MGASwitchMode(int scrnIndex, DisplayModePtr mode, int flags)
- {
-+ ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
-+ MGAPtr info = MGAPTR(pScrn);
-+ Bool ret;
- #ifdef USEMGAHAL
- char sCmdIn[256];
- char sCmdOut[256];
-@@ -3583,7 +3596,16 @@
- #endif
- return FALSE;
- } else
-- return MGAModeInit(xf86Screens[scrnIndex], mode);
-+ ret = MGAModeInit(xf86Screens[scrnIndex], mode);
-+
-+ /* Since RandR (indirectly) uses SwitchMode(), we need to
-+ * update our Xinerama info here, too, in case of resizing
-+ */
-+ if(info->MergedFB) {
-+ MGAUpdateXineramaScreenInfo(pScrn);
-+ }
-+
-+ return ret;
- }
-
- /* Adjusts coordinates to match Panning granularity.
---- src/mga_merge.c 23 Apr 2004 19:37:16 -0000 1.2
-+++ src/mga_merge.c 16 Aug 2004 17:13:15 -0000
-@@ -10,6 +10,11 @@
-
- #include "compiler.h"
-
-+#include "extnsionst.h" /* required */
-+#include "panoramiXproto.h" /* required */
-+#include "dixstruct.h"
-+#include "vbe.h"
-+
- /* Drivers for PCI hardware need this */
- #include "xf86PciInfo.h"
- #include "mga.h"
-@@ -19,6 +24,23 @@
-
- #include "fbdevhw.h"
-
-+/* pseudo xinerama support */
-+static unsigned char MGAXineramaReqCode = 0;
-+int MGAXineramaPixWidth = 0;
-+int MGAXineramaPixHeight = 0;
-+int MGAXineramaNumScreens = 0;
-+MGAXineramaData *MGAXineramadataPtr = NULL;
-+static int MGAXineramaGeneration;
-+Bool MGAnoPanoramiXExtension = TRUE;
-+
-+int MGAProcXineramaQueryVersion(ClientPtr client);
-+int MGAProcXineramaGetState(ClientPtr client);
-+int MGAProcXineramaGetScreenCount(ClientPtr client);
-+int MGAProcXineramaGetScreenSize(ClientPtr client);
-+int MGAProcXineramaIsActive(ClientPtr client);
-+int MGAProcXineramaQueryScreens(ClientPtr client);
-+int MGASProcXineramaDispatch(ClientPtr client);
-+
- static int
- StrToRanges(range* r, char* s) {
- float num=0.0;
-@@ -69,6 +91,7 @@
- CopyModeNLink(ScrnInfoPtr pScrn, DisplayModePtr dest, DisplayModePtr i, DisplayModePtr j, MgaScrn2Rel srel) {
- DisplayModePtr mode;
- int dx = 0,dy = 0;
-+ MGAPtr info = MGAPTR(pScrn);
- /* start with first node */
- mode = xalloc(sizeof(DisplayModeRec));
- memcpy(mode,i, sizeof(DisplayModeRec));
-@@ -103,6 +126,10 @@
- mode->VSyncEnd += dy;
- mode->VTotal += dy;
- mode->Clock = 0; /* Shows we're in Merge mode. */
-+
-+ if(srel != mgaClone) {
-+ info->AtLeastOneNonClone = TRUE;
-+ }
-
- mode->next = mode;
- mode->prev = mode;
-@@ -134,6 +161,7 @@
- static DisplayModePtr
- GenerateModeList(ScrnInfoPtr pScrn, char* str,
- DisplayModePtr i, DisplayModePtr j, MgaScrn2Rel srel) {
-+ MGAPtr info = MGAPTR(pScrn);
- char* strmode = str;
- char modename[256];
- Bool gotdash = FALSE;
-@@ -142,6 +170,7 @@
- DisplayModePtr mode1 = NULL;
- DisplayModePtr mode2 = NULL;
- DisplayModePtr result = NULL;
-+ info->AtLeastOneNonClone = FALSE;
- do {
- switch(*str) {
- case 0:
-@@ -237,7 +266,7 @@
- #ifdef USEMGAHAL
- ULONG status;
- #endif
-- MgaScrn2Rel Monitor2Pos;
-+ /*MgaScrn2Rel Monitor2Pos;*/
-
- xf86DrvMsg(pScrn1->scrnIndex, X_INFO, "==== Start of second screen initialization ====\n");
- pScrn = xalloc(sizeof(ScrnInfoRec));
-@@ -342,6 +371,7 @@
- pMga->OverclockMem = pMga1->OverclockMem;
- pMga->TexturedVideo = pMga1->TexturedVideo;
- pMga->MergedFB = TRUE;
-+ pMga->MergedFBXDPI = pMga->MergedFBYDPI = 0;
-
- pMga->Rotate = 0;
-
-@@ -619,29 +649,29 @@
- pMga->CurrentLayout.mode = pScrn->currentMode;
-
-
-- Monitor2Pos = mgaRightOf;
-+ pMga1->Monitor2Pos = mgaRightOf;
- if ((s = xf86GetOptValString(pMga1->Options, OPTION_MONITOR2POS))) {
- switch(s[0]) {
- case 'L': case 'l': case 'G': case 'g':
-- Monitor2Pos = mgaLeftOf;
-+ pMga1->Monitor2Pos = mgaLeftOf;
- break;
- case 'R': case 'r': case 'D': case 'd':
-- Monitor2Pos = mgaRightOf;
-+ pMga1->Monitor2Pos = mgaRightOf;
- break;
-
- case 'A': case 'a': case 'H': case 'h':
-- Monitor2Pos = mgaAbove;
-+ pMga1->Monitor2Pos = mgaAbove;
- break;
-
- case 'B': case 'b':
-- Monitor2Pos = mgaBelow;
-+ pMga1->Monitor2Pos = mgaBelow;
- break;
-
- case 'C': case 'c':
-- Monitor2Pos = mgaClone;
-+ pMga1->Monitor2Pos = mgaClone;
- break;
- default:
-- Monitor2Pos = mgaRightOf;
-+ pMga1->Monitor2Pos = mgaRightOf;
- break;
- }
- }
-@@ -652,7 +682,7 @@
- pMga1->M1currentMode = pScrn1->currentMode;
- /* make a copy of the mode list, so we can modify it. */
- if ((s = xf86GetOptValString(pMga1->Options, OPTION_METAMODES))) {
-- pScrn1->modes = GenerateModeList(pScrn,s,pMga1->M1modes,pScrn->modes,Monitor2Pos); /*FIXME: free this list*/
-+ pScrn1->modes = GenerateModeList(pScrn,s,pMga1->M1modes,pScrn->modes,pMga1->Monitor2Pos); /*FIXME: free this list*/
- if(!pScrn1->modes) {
- xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Parse Error reading MetaModes, or No modes left.\n");
- return FALSE;
-@@ -676,6 +706,578 @@
- MGADisplayPowerManagementSetCrtc2(pScrn,PowerManagementMode,flags);
- }
-
-+/* Pseudo-Xinerama extension for MergedFB mode */
-+void
-+MGAUpdateXineramaScreenInfo(ScrnInfoPtr pScrn1)
-+{
-+ MGAPtr info = MGAPTR(pScrn1);
-+ ScrnInfoPtr pScrn2 = NULL;
-+ int crt1scrnnum = 0, crt2scrnnum = 1;
-+ int x1=0, x2=0, y1=0, y2=0, h1=0, h2=0, w1=0, w2=0;
-+ DisplayModePtr currentMode, firstMode;
-+ Bool infochanged = FALSE;
-+
-+ if(!info->MergedFB) return;
-+
-+ if(MGAnoPanoramiXExtension) return;
-+
-+ if(!MGAXineramadataPtr) return;
-+
-+ pScrn2 = info->pScrn2;
-+
-+ /* Attention: Usage of RandR may lead into virtual X and Y values
-+ * actually smaller than our MetaModes! To avoid this, we calculate
-+ * the maxCRT fields here (and not somewhere else, like in CopyNLink)
-+ */
-+
-+ if((info->MGAXineramaVX != pScrn1->virtualX) || (info->MGAXineramaVY != pScrn1->virtualY)) {
-+
-+ if(!(pScrn1->modes)) {
-+ xf86DrvMsg(pScrn1->scrnIndex, X_ERROR,
-+ "Internal error: MGAUpdateXineramaScreenInfo(): pScrn->modes is NULL\n");
-+ return;
-+ }
-+
-+ info->maxM1_X1 = info->maxM1_X2 = 0;
-+ info->maxM1_Y1 = info->maxM1_Y2 = 0;
-+ info->maxM2_X1 = info->maxM2_X2 = 0;
-+ info->maxM2_Y1 = info->maxM2_Y2 = 0;
-+ info->maxClone_X1 = info->maxClone_X2 = 0;
-+ info->maxClone_Y1 = info->maxClone_Y2 = 0;
-+
-+ currentMode = firstMode = pScrn1->modes;
-+
-+ do {
-+
-+ DisplayModePtr p = currentMode->next;
-+ DisplayModePtr i = ((MergedDisplayModePtr)currentMode->Private)->Monitor1;
-+ DisplayModePtr j = ((MergedDisplayModePtr)currentMode->Private)->Monitor2;
-+ MgaScrn2Rel srel = ((MergedDisplayModePtr)currentMode->Private)->Monitor2Pos;
-+
-+ if((i->HDisplay <= pScrn1->virtualX) && (j->HDisplay <= pScrn1->virtualX) &&
-+ (i->VDisplay <= pScrn1->virtualY) && (j->VDisplay <= pScrn1->virtualY)) {
-+
-+ if(srel != mgaClone) {
-+ if(info->maxM1_X1 <= i->HDisplay) {
-+ info->maxM1_X1 = i->HDisplay; /* Largest M1 mode */
-+ if(info->maxM1_X2 < j->HDisplay) {
-+ info->maxM1_X2 = j->HDisplay; /* Largest X of M2 mode displayed with largest M1 mode */
-+ }
-+ }
-+ if(info->maxM2_X2 <= j->HDisplay) {
-+ info->maxM2_X2 = j->HDisplay; /* Largest M2 mode */
-+ if(info->maxM2_X1 < i->HDisplay) {
-+ info->maxM2_X1 = i->HDisplay; /* Largest X of M1 mode displayed with largest M2 mode */
-+ }
-+ }
-+ if(info->maxM1_Y1 <= i->VDisplay) {
-+ info->maxM1_Y1 = i->VDisplay;
-+ if(info->maxM1_Y2 < j->VDisplay) {
-+ info->maxM1_Y2 = j->VDisplay;
-+ }
-+ }
-+ if(info->maxM2_Y2 <= j->VDisplay) {
-+ info->maxM2_Y2 = j->VDisplay;
-+ if(info->maxM2_Y1 < i->VDisplay) {
-+ info->maxM2_Y1 = i->VDisplay;
-+ }
-+ }
-+ } else {
-+ if(info->maxClone_X1 < i->HDisplay) {
-+ info->maxClone_X1 = i->HDisplay;
-+ }
-+ if(info->maxClone_X2 < j->HDisplay) {
-+ info->maxClone_X2 = j->HDisplay;
-+ }
-+ if(info->maxClone_Y1 < i->VDisplay) {
-+ info->maxClone_Y1 = i->VDisplay;
-+ }
-+ if(info->maxClone_Y2 < j->VDisplay) {
-+ info->maxClone_Y2 = j->VDisplay;
-+ }
-+ }
-+ }
-+ currentMode = p;
-+
-+ } while((currentMode) && (currentMode != firstMode));
-+
-+ info->MGAXineramaVX = pScrn1->virtualX;
-+ info->MGAXineramaVY = pScrn1->virtualY;
-+ infochanged = TRUE;
-+
-+ }
-+
-+ /* leftof
-+
-+ V 1:
-+ M2: x = 0
-+ y = 0
-+ w = (maxM2 X)
-+ h = (virtual Y)
-+ M1: x = (virtual X) - (maxM1 X)
-+ y = 0
-+ w = (maxM1 X)
-+ h = (virtual Y)
-+
-+ V 2:
-+ M2: x = 0
-+ y = 0
-+ w = max M2 mode X
-+ h = virtual Y size
-+ M1: x = (max) M2 mode X von dem Metamode, wo M1 mode maximal breit ist
-+ y = 0
-+ w = max M1 mode X
-+ h = virtual Y size
-+
-+ V 3: (current)
-+ M1: x = (maxM2 X von dem MMode, wo maxM1 X)
-+ y = 0
-+ w = (virtual X) - x
-+ h = (virtual Y)
-+ M2: x = 0
-+ y = 0
-+ w = (virtual X) - (maxM1 X von dem MMode, wo maxM2 X)
-+ h = (virtual Y)
-+
-+ */
-+ switch(info->Monitor2Pos) {
-+ case mgaLeftOf: /* V 1 */
-+ x1 = min(info->maxM1_X2, pScrn1->virtualX - info->maxM1_X1); /* pScrn1->virtualX - pSiS->maxM1_X1;
-+*/
-+ if(x1 < 0) x1 = 0;
-+ y1 = 0; /* 0; */
-+ w1 = pScrn1->virtualX - x1; /* pSiS->maxM1_X1; */
-+ h1 = pScrn1->virtualY; /* pScrn1->virtualY; */
-+ x2 = 0; /* 0; */
-+ y2 = 0; /* 0; */
-+ w2 = max(info->maxM2_X2, pScrn1->virtualX - info->maxM2_X1); /* pSiS->maxM2_X2; */
-+ if(w2 > pScrn1->virtualX) w2 = pScrn1->virtualX;
-+ h2 = pScrn1->virtualY; /* pScrn1->virtualY; */
-+ break;
-+ case mgaRightOf:
-+ x1 = 0; /* 0; */
-+ y1 = 0; /* 0; */
-+ w1 = max(info->maxM1_X1, pScrn1->virtualX - info->maxM1_X2); /* pSiS->maxM1_X1; */
-+ if(w1 > pScrn1->virtualX) w1 = pScrn1->virtualX;
-+ h1 = pScrn1->virtualY; /* pScrn1->virtualY; */
-+ x2 = min(info->maxM2_X1, pScrn1->virtualX - info->maxM2_X2); /* pScrn1->virtualX - pSiS->maxM2_X2;
-+*/
-+ if(x2 < 0) x2 = 0;
-+ y2 = 0; /* 0; */
-+ w2 = pScrn1->virtualX - x2; /* pSiS->maxM2_X2; */
-+ h2 = pScrn1->virtualY; /* pScrn1->virtualY; */
-+ break;
-+ case mgaAbove:
-+ x1 = 0; /* 0; */
-+ y1 = min(info->maxM1_Y2, pScrn1->virtualY - info->maxM1_Y1); /* pScrn1->virtualY - pSiS->maxM1_Y1;
-+*/
-+ if(y1 < 0) y1 = 0;
-+ w1 = pScrn1->virtualX; /* pScrn1->virtualX; */
-+ h1 = pScrn1->virtualY - y1; /* pSiS->maxM1_Y1; */
-+ x2 = 0; /* 0; */
-+ y2 = 0; /* 0; */
-+ w2 = pScrn1->virtualX; /* pScrn1->virtualX; */
-+ h2 = max(info->maxM2_Y2, pScrn1->virtualY - info->maxM2_Y1); /* pSiS->maxM2_Y2; */
-+ if(h2 > pScrn1->virtualY) h2 = pScrn1->virtualY;
-+ break;
-+ case mgaBelow:
-+ x1 = 0; /* 0; */
-+ y1 = 0; /* 0; */
-+ w1 = pScrn1->virtualX; /* pScrn1->virtualX; */
-+ h1 = max(info->maxM1_Y1, pScrn1->virtualY - info->maxM1_Y2); /* pSiS->maxM1_Y1; */
-+ if(h1 > pScrn1->virtualY) h1 = pScrn1->virtualY;
-+ x2 = 0; /* 0; */
-+ y2 = min(info->maxM2_Y1, pScrn1->virtualY - info->maxM2_Y2); /* pScrn1->virtualY - pSiS->maxM2_Y2;
-+*/
-+ if(y2 < 0) y2 = 0;
-+ w2 = pScrn1->virtualX; /* pScrn1->virtualX; */
-+ h2 = pScrn1->virtualY - y2; /* pSiS->maxM2_Y2; */
-+ break;
-+ default:
-+ xf86DrvMsg(pScrn1->scrnIndex, X_ERROR,
-+ "Internal error: UpdateXineramaInfo(): unsupported Monitor2Pos (%d)\n",
-+ info->Monitor2Pos);
-+ }
-+ MGAXineramadataPtr[crt1scrnnum].x = x1;
-+ MGAXineramadataPtr[crt1scrnnum].y = y1;
-+ MGAXineramadataPtr[crt1scrnnum].width = w1;
-+ MGAXineramadataPtr[crt1scrnnum].height = h1;
-+ MGAXineramadataPtr[crt2scrnnum].x = x2;
-+ MGAXineramadataPtr[crt2scrnnum].y = y2;
-+ MGAXineramadataPtr[crt2scrnnum].width = w2;
-+ MGAXineramadataPtr[crt2scrnnum].height = h2;
-+
-+ if(infochanged) {
-+ xf86DrvMsg(pScrn1->scrnIndex, X_INFO,
-+ "Pseudo-Xinerama: Monitor1 (Screen %d) (%d,%d)-(%d,%d)\n",
-+ crt1scrnnum, x1, y1, w1+x1-1, h1+y1-1);
-+ xf86DrvMsg(pScrn1->scrnIndex, X_INFO,
-+ "Pseudo-Xinerama: Monitor2 (Screen %d) (%d,%d)-(%d,%d)\n",
-+ crt2scrnnum, x2, y2, w2+x2-1, h2+y2-1);
-+ }
-+
-+}
-+
-+/* Proc */
-+
-+int
-+MGAProcXineramaQueryVersion(ClientPtr client)
-+{
-+ xPanoramiXQueryVersionReply rep;
-+ register int n;
-+
-+ REQUEST_SIZE_MATCH(xPanoramiXQueryVersionReq);
-+ rep.type = X_Reply;
-+ rep.length = 0;
-+ rep.sequenceNumber = client->sequence;
-+ rep.majorVersion = MGA_XINERAMA_MAJOR_VERSION;
-+ rep.minorVersion = MGA_XINERAMA_MINOR_VERSION;
-+ if(client->swapped) {
-+ swaps(&rep.sequenceNumber, n);
-+ swapl(&rep.length, n);
-+ swaps(&rep.majorVersion, n);
-+ swaps(&rep.minorVersion, n);
-+ }
-+ WriteToClient(client, sizeof(xPanoramiXQueryVersionReply), (char *)&rep);
-+ return (client->noClientException);
-+}
-+
-+int
-+MGAProcXineramaGetState(ClientPtr client)
-+{
-+ REQUEST(xPanoramiXGetStateReq);
-+ WindowPtr pWin;
-+ xPanoramiXGetStateReply rep;
-+ register int n;
-+
-+ REQUEST_SIZE_MATCH(xPanoramiXGetStateReq);
-+ pWin = LookupWindow(stuff->window, client);
-+ if(!pWin) return BadWindow;
-+
-+ rep.type = X_Reply;
-+ rep.length = 0;
-+ rep.sequenceNumber = client->sequence;
-+ rep.state = !MGAnoPanoramiXExtension;
-+ if(client->swapped) {
-+ swaps (&rep.sequenceNumber, n);
-+ swapl (&rep.length, n);
-+ swaps (&rep.state, n);
-+ }
-+ WriteToClient(client, sizeof(xPanoramiXGetStateReply), (char *)&rep);
-+ return client->noClientException;
-+}
-+
-+int
-+MGAProcXineramaGetScreenCount(ClientPtr client)
-+{
-+ REQUEST(xPanoramiXGetScreenCountReq);
-+ WindowPtr pWin;
-+ xPanoramiXGetScreenCountReply rep;
-+ register int n;
-+
-+ REQUEST_SIZE_MATCH(xPanoramiXGetScreenCountReq);
-+ pWin = LookupWindow(stuff->window, client);
-+ if(!pWin) return BadWindow;
-+
-+ rep.type = X_Reply;
-+ rep.length = 0;
-+ rep.sequenceNumber = client->sequence;
-+ rep.ScreenCount = MGAXineramaNumScreens;
-+ if(client->swapped) {
-+ swaps(&rep.sequenceNumber, n);
-+ swapl(&rep.length, n);
-+ swaps(&rep.ScreenCount, n);
-+ }
-+ WriteToClient(client, sizeof(xPanoramiXGetScreenCountReply), (char *)&rep);
-+ return client->noClientException;
-+}
-+
-+int
-+MGAProcXineramaGetScreenSize(ClientPtr client)
-+{
-+ REQUEST(xPanoramiXGetScreenSizeReq);
-+ WindowPtr pWin;
-+ xPanoramiXGetScreenSizeReply rep;
-+ register int n;
-+
-+ REQUEST_SIZE_MATCH(xPanoramiXGetScreenSizeReq);
-+ pWin = LookupWindow (stuff->window, client);
-+ if(!pWin) return BadWindow;
-+
-+ rep.type = X_Reply;
-+ rep.length = 0;
-+ rep.sequenceNumber = client->sequence;
-+ rep.width = MGAXineramadataPtr[stuff->screen].width;
-+ rep.height = MGAXineramadataPtr[stuff->screen].height;
-+ if(client->swapped) {
-+ swaps(&rep.sequenceNumber, n);
-+ swapl(&rep.length, n);
-+ swaps(&rep.width, n);
-+ swaps(&rep.height, n);
-+ }
-+ WriteToClient(client, sizeof(xPanoramiXGetScreenSizeReply), (char *)&rep);
-+ return client->noClientException;
-+}
-+
-+int
-+MGAProcXineramaIsActive(ClientPtr client)
-+{
-+ xXineramaIsActiveReply rep;
-+
-+ REQUEST_SIZE_MATCH(xXineramaIsActiveReq);
-+
-+ rep.type = X_Reply;
-+ rep.length = 0;
-+ rep.sequenceNumber = client->sequence;
-+ rep.state = !MGAnoPanoramiXExtension;
-+ if(client->swapped) {
-+ register int n;
-+ swaps(&rep.sequenceNumber, n);
-+ swapl(&rep.length, n);
-+ swapl(&rep.state, n);
-+ }
-+ WriteToClient(client, sizeof(xXineramaIsActiveReply), (char *) &rep);
-+ return client->noClientException;
-+}
-+
-+int
-+MGAProcXineramaQueryScreens(ClientPtr client)
-+{
-+ xXineramaQueryScreensReply rep;
-+
-+ REQUEST_SIZE_MATCH(xXineramaQueryScreensReq);
-+
-+ rep.type = X_Reply;
-+ rep.sequenceNumber = client->sequence;
-+ rep.number = (MGAnoPanoramiXExtension) ? 0 : MGAXineramaNumScreens;
-+ rep.length = rep.number * sz_XineramaScreenInfo >> 2;
-+ if(client->swapped) {
-+ register int n;
-+ swaps(&rep.sequenceNumber, n);
-+ swapl(&rep.length, n);
-+ swapl(&rep.number, n);
-+ }
-+ WriteToClient(client, sizeof(xXineramaQueryScreensReply), (char *)&rep);
-+
-+ if(!MGAnoPanoramiXExtension) {
-+ xXineramaScreenInfo scratch;
-+ int i;
-+
-+ for(i = 0; i < MGAXineramaNumScreens; i++) {
-+ scratch.x_org = MGAXineramadataPtr[i].x;
-+ scratch.y_org = MGAXineramadataPtr[i].y;
-+ scratch.width = MGAXineramadataPtr[i].width;
-+ scratch.height = MGAXineramadataPtr[i].height;
-+ if(client->swapped) {
-+ register int n;
-+ swaps(&scratch.x_org, n);
-+ swaps(&scratch.y_org, n);
-+ swaps(&scratch.width, n);
-+ swaps(&scratch.height, n);
-+ }
-+ WriteToClient(client, sz_XineramaScreenInfo, (char *)&scratch);
-+ }
-+ }
-+
-+ return client->noClientException;
-+}
-+
-+static int
-+MGAProcXineramaDispatch(ClientPtr client)
-+{
-+ REQUEST(xReq);
-+ switch (stuff->data)
-+ {
-+ case X_PanoramiXQueryVersion:
-+ return MGAProcXineramaQueryVersion(client);
-+ case X_PanoramiXGetState:
-+ return MGAProcXineramaGetState(client);
-+ case X_PanoramiXGetScreenCount:
-+ return MGAProcXineramaGetScreenCount(client);
-+ case X_PanoramiXGetScreenSize:
-+ return MGAProcXineramaGetScreenSize(client);
-+ case X_XineramaIsActive:
-+ return MGAProcXineramaIsActive(client);
-+ case X_XineramaQueryScreens:
-+ return MGAProcXineramaQueryScreens(client);
-+ }
-+ return BadRequest;
-+}
-+
-+/* SProc */
-+
-+static int
-+MGASProcXineramaQueryVersion (ClientPtr client)
-+{
-+ REQUEST(xPanoramiXQueryVersionReq);
-+ register int n;
-+ swaps(&stuff->length,n);
-+ REQUEST_SIZE_MATCH (xPanoramiXQueryVersionReq);
-+ return MGAProcXineramaQueryVersion(client);
-+}
-+
-+static int
-+MGASProcXineramaGetState(ClientPtr client)
-+{
-+ REQUEST(xPanoramiXGetStateReq);
-+ register int n;
-+ swaps (&stuff->length, n);
-+ REQUEST_SIZE_MATCH(xPanoramiXGetStateReq);
-+ return MGAProcXineramaGetState(client);
-+}
-+
-+static int
-+MGASProcXineramaGetScreenCount(ClientPtr client)
-+{
-+ REQUEST(xPanoramiXGetScreenCountReq);
-+ register int n;
-+ swaps (&stuff->length, n);
-+ REQUEST_SIZE_MATCH(xPanoramiXGetScreenCountReq);
-+ return MGAProcXineramaGetScreenCount(client);
-+}
-+
-+static int
-+MGASProcXineramaGetScreenSize(ClientPtr client)
-+{
-+ REQUEST(xPanoramiXGetScreenSizeReq);
-+ register int n;
-+ swaps (&stuff->length, n);
-+ REQUEST_SIZE_MATCH(xPanoramiXGetScreenSizeReq);
-+ return MGAProcXineramaGetScreenSize(client);
-+}
-+
-+static int
-+MGASProcXineramaIsActive(ClientPtr client)
-+{
-+ REQUEST(xXineramaIsActiveReq);
-+ register int n;
-+ swaps (&stuff->length, n);
-+ REQUEST_SIZE_MATCH(xXineramaIsActiveReq);
-+ return MGAProcXineramaIsActive(client);
-+}
-+
-+static int
-+MGASProcXineramaQueryScreens(ClientPtr client)
-+{
-+ REQUEST(xXineramaQueryScreensReq);
-+ register int n;
-+ swaps (&stuff->length, n);
-+ REQUEST_SIZE_MATCH(xXineramaQueryScreensReq);
-+ return MGAProcXineramaQueryScreens(client);
-+}
-+
-+int
-+MGASProcXineramaDispatch(ClientPtr client)
-+{
-+ REQUEST(xReq);
-+ switch (stuff->data) {
-+ case X_PanoramiXQueryVersion:
-+ return MGASProcXineramaQueryVersion(client);
-+ case X_PanoramiXGetState:
-+ return MGASProcXineramaGetState(client);
-+ case X_PanoramiXGetScreenCount:
-+ return MGASProcXineramaGetScreenCount(client);
-+ case X_PanoramiXGetScreenSize:
-+ return MGASProcXineramaGetScreenSize(client);
-+ case X_XineramaIsActive:
-+ return MGASProcXineramaIsActive(client);
-+ case X_XineramaQueryScreens:
-+ return MGASProcXineramaQueryScreens(client);
-+ }
-+ return BadRequest;
-+}
-+
-+static void
-+MGAXineramaResetProc(ExtensionEntry* extEntry)
-+{
-+ if(MGAXineramadataPtr) {
-+ Xfree(MGAXineramadataPtr);
-+ MGAXineramadataPtr = NULL;
-+ }
-+}
-+
-+void
-+MGAXineramaExtensionInit(ScrnInfoPtr pScrn)
-+{
-+ MGAPtr info = MGAPTR(pScrn);
-+ Bool success = FALSE;
-+
-+ if(!(MGAXineramadataPtr)) {
-+
-+ if(!info->MergedFB) {
-+ MGAnoPanoramiXExtension = TRUE;
-+ return;
-+ }
-+
-+ if(!noPanoramiXExtension) {
-+ xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-+ "Xinerama active, not initializing MGA Pseudo-Xinerama\n");
-+ MGAnoPanoramiXExtension = TRUE;
-+ return;
-+ }
-+
-+ if(MGAnoPanoramiXExtension) {
-+ xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-+ "MGA Pseudo-Xinerama disabled\n");
-+ return;
-+ }
-+
-+ if(info->Monitor2Pos == mgaClone) {
-+ xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-+ "Running MergedFB in Clone mode, MGA Pseudo-Xinerama disabled\n");
-+ MGAnoPanoramiXExtension = TRUE;
-+ return;
-+ }
-+
-+xf86DrvMsg(pScrn->scrnIndex, X_INFO, "%s:%d, mgaptr=%d\n", __FILE__, __LINE__, info);
-+ if(!(MGAPTR(info->pScrn2)->AtLeastOneNonClone)) {
-+ xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-+ "Only Clone modes defined, MGA Pseudo-Xinerama disabled\n");
-+ MGAnoPanoramiXExtension = TRUE;
-+ return;
-+ }
-+
-+ MGAXineramaNumScreens = 2;
-+
-+ while(MGAXineramaGeneration != serverGeneration) {
-+
-+ info->XineramaExtEntry = AddExtension(PANORAMIX_PROTOCOL_NAME, 0,0,
-+ MGAProcXineramaDispatch,
-+ MGASProcXineramaDispatch,
-+ MGAXineramaResetProc,
-+ StandardMinorOpcode);
-+
-+ if(!info->XineramaExtEntry) break;
-+
-+ MGAXineramaReqCode = (unsigned char)info->XineramaExtEntry->base;
-+
-+ if(!(MGAXineramadataPtr = (MGAXineramaData *)
-+ xcalloc(MGAXineramaNumScreens, sizeof(MGAXineramaData)))) break;
-+
-+ MGAXineramaGeneration = serverGeneration;
-+ success = TRUE;
-+ }
-+
-+ if(!success) {
-+ xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
-+ "Failed to initialize MGA Pseudo-Xinerama extension\n");
-+ MGAnoPanoramiXExtension = TRUE;
-+ return;
-+ }
-+
-+ xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-+ "Initialized MGA Pseudo-Xinerama extension\n");
-+
-+ info->MGAXineramaVX = 0;
-+ info->MGAXineramaVY = 0;
-+
-+ }
-+
-+ MGAUpdateXineramaScreenInfo(pScrn);
-+
-+}
-+/* End of PseudoXinerama */
-+
- typedef struct _region {
- int x0,x1,y0,y1;
- } region;
---- src/mga_merge.h 14 Nov 2003 16:48:55 -0000 1.1.1.1
-+++ src/mga_merge.h 16 Aug 2004 17:13:15 -0000
-@@ -16,4 +16,16 @@
- MgaScrn2Rel Monitor2Pos;
- } MergedDisplayModeRec, *MergedDisplayModePtr;
-
-+typedef struct _MGAXineramaData {
-+ int x;
-+ int y;
-+ int width;
-+ int height;
-+} MGAXineramaData;
-+
- #define MDMPTR(x) ((MergedDisplayModePtr)(x->currentMode->Private))
-+
-+extern void
-+MGAXineramaExtensionInit(ScrnInfoPtr pScrn);
-+extern void
-+MGAUpdateXineramaScreenInfo(ScrnInfoPtr pScrn1);
More information about the arch-commits
mailing list