xorg-server:

- update to xorg-server-20100309
This commit is contained in:
Stephan Raue 2010-03-19 01:02:38 +01:00
parent 3691c13b30
commit 0219a0d2c6
35 changed files with 158 additions and 1373 deletions

View File

@ -29,8 +29,7 @@ $SCRIPTS/build libfontenc
$SCRIPTS/build pixman
$SCRIPTS/build fontsproto
$SCRIPTS/build xf86bigfontproto
$SCRIPTS/build dbus
$SCRIPTS/build hal
$SCRIPTS/build udev
if [ "$XINERAMA_SUPPORT" = "yes" ]; then
$SCRIPTS/build libXinerama
@ -40,7 +39,6 @@ else
fi
cd $PKG_BUILD
autoconf
./configure --host=$TARGET_NAME \
--build=$HOST_NAME \
--prefix=/usr \
@ -61,7 +59,6 @@ autoconf
--enable-registry \
--disable-composite \
$XORG_XINERAMA \
--enable-null-root-cursor \
--enable-mitshm \
--disable-xres \
--disable-record \
@ -83,8 +80,9 @@ autoconf
--enable-dbe \
--disable-xf86bigfont \
--enable-dpms \
--enable-config-dbus \
--enable-config-hal \
--enable-config-udev \
--disable-config-dbus \
--disable-config-hal \
--enable-xfree86-utils \
--enable-xorg \
--disable-dmx \
@ -95,7 +93,6 @@ autoconf
--disable-xwin \
--disable-kdrive \
--disable-xephyr \
--disable-xsdl \
--disable-xfake \
--enable-xfbdev \
--disable-install-setuid \
@ -103,14 +100,15 @@ autoconf
--with-int10=x86emu \
--disable-ipv6 \
--with-gnu-ld \
--with-sha1=libcrypto \
--with-os-vendor="OpenELEC" \
--with-module-dir=$XORG_PATH_MODULES \
--with-xkb-path=$XORG_PATH_XKB \
--with-xkb-output=/var/cache/xkb \
--with-log-dir=/var/log \
--with-dri-driver-path=$XORG_PATH_DRI \
--with-fontdir=$XORG_PATH_FONTS \
--with-default-font-path="$XORG_PATH_FONTS/liberation,$XORG_PATH_FONTS/misc,built-ins" \
--with-fontrootdir=$XORG_PATH_FONTS \
--with-default-font-path="$XORG_PATH_FONTS/misc,built-ins"
make

View File

@ -0,0 +1,10 @@
# Collection of quirks and blacklist/whitelists for specific devices.
# Accelerometer device, posts data through ABS_X/ABS_Y, making X unusable
# http://bugs.freedesktop.org/show_bug.cgi?id=22442
Section "InputClass"
Identifier "ThinkPad HDAPS accelerometer blacklist"
MatchProduct "ThinkPad HDAPS accelerometer data"
Option "Ignore" "on"
EndSection

View File

@ -3,7 +3,7 @@
# runlevels: openelec
XORG_NVIDIA_CONF="/etc/X11/xorg-nvidia.conf"
XORG_ARGS="-s 0 -noreset -allowMouseOpenFail -nocursor -nolisten tcp"
XORG_ARGS="-s 0 -nr -noreset -allowMouseOpenFail -nocursor -nolisten tcp"
#-------------------------------------------------------------------------------
# do not change anything below
@ -13,6 +13,7 @@ XORG_ARGS="-s 0 -noreset -allowMouseOpenFail -nocursor -nolisten tcp"
if lspci -n | grep 0300 | grep -q 10de; then
XORG_ARGS="$XORG_ARGS -ignoreABI"
[ -f $XORG_NVIDIA_CONF ] && XORG_ARGS="$XORG_ARGS -config $XORG_NVIDIA_CONF"
progress "Found nVidia card, enabling NVIDIA GLX as requested"

View File

@ -13,8 +13,7 @@ $SCRIPTS/install libXv
$SCRIPTS/install libdrm
$SCRIPTS/install Mesa
$SCRIPTS/install pixman
$SCRIPTS/install dbus
$SCRIPTS/install hal
$SCRIPTS/install udev
[ "$XINERAMA_SUPPORT" = "yes" ] && $SCRIPTS/install libXinerama
@ -54,11 +53,8 @@ mkdir -p $XORG_DST/multimedia
mkdir -p $INSTALL/usr/lib/xorg
cp $PKG_BUILD/dix/protocol.txt $INSTALL/usr/lib/xorg
mkdir -p $INSTALL/etc/dbus-1/system.d
cp $PKG_BUILD/config/xorg-server.conf $INSTALL/etc/dbus-1/system.d
mkdir -p $INSTALL/usr/share/hal/fdi/policy/10osvendor/
cp $PKG_BUILD/config/x11-input.fdi $INSTALL/usr/share/hal/fdi/policy/10osvendor/10-x11-input.fdi
mkdir -p $INSTALL/etc/X11/xorg.conf.d
cp -PR $PKG_DIR/config/*.conf $INSTALL/etc/X11/xorg.conf.d
#Fonts
$SCRIPTS/install encodings
@ -76,11 +72,9 @@ mkdir -p $INSTALL/usr/share/hal/fdi/policy/10osvendor/
$SCRIPTS/install xf86-input-synaptics
$SCRIPTS/install xf86-input-wacom
get_graphicdrivers
for drv in $XORG_DRIVERS; do
$SCRIPTS/install xf86-video-$drv
done
#Tools
# Tools
$SCRIPTS/install pciutils

View File

@ -1,336 +0,0 @@
diff -Naur xorg-server-1.7.99.1/configure xorg-server-1.7.99.1.patch/configure
diff -Naur xorg-server-1.7.99.1/configure.ac xorg-server-1.7.99.1.patch/configure.ac
--- xorg-server-1.7.99.1/configure.ac 2009-10-21 18:06:54.000000000 +0200
+++ xorg-server-1.7.99.1.patch/configure.ac 2009-10-24 10:51:17.074488205 +0200
@@ -501,9 +501,9 @@
AC_ARG_WITH(xkb-path, AS_HELP_STRING([--with-xkb-path=PATH], [Path to XKB base dir (default: ${datadir}/X11/xkb)]),
[ XKBPATH="$withval" ],
[ XKBPATH="${datadir}/X11/xkb" ])
-AC_ARG_WITH(xkb-output, AS_HELP_STRING([--with-xkb-output=PATH], [Path to XKB output dir (default: ${datadir}/X11/xkb/compiled)]),
+AC_ARG_WITH(xkb-output, AS_HELP_STRING([--with-xkb-output=PATH], [Path to XKB output dir (default: ${localstatedir}/cache/xkb)]),
[ XKBOUTPUT="$withval" ],
- [ XKBOUTPUT="compiled" ])
+ [ XKBOUTPUT="${localstatedir}/cache/xkb" ])
AC_ARG_WITH(default-xkb-rules, AS_HELP_STRING([--with-default-xkb-rules=RULES],
[Keyboard ruleset (default: base/evdev)]),
[ XKB_DFLT_RULES="$withval" ],
@@ -1099,7 +1099,7 @@
dnl Make sure XKM_OUTPUT_DIR is an absolute path
XKBOUTPUT_FIRSTCHAR=`echo $XKBOUTPUT | cut -b 1`
if [[ x$XKBOUTPUT_FIRSTCHAR != x/ -a x$XKBOUTPUT_FIRSTCHAR != 'x$' ]] ; then
- XKBOUTPUT="$XKB_BASE_DIRECTORY/$XKBOUTPUT"
+ AC_MSG_ERROR([xkb-output must be an absolute path.])
fi
dnl XKM_OUTPUT_DIR (used in code) must end in / or file names get hosed
diff -Naur xorg-server-1.7.99.1/xkb/ddxLoad.c xorg-server-1.7.99.1.patch/xkb/ddxLoad.c
--- xorg-server-1.7.99.1/xkb/ddxLoad.c 2009-10-21 15:46:53.000000000 +0200
+++ xorg-server-1.7.99.1.patch/xkb/ddxLoad.c 2009-10-24 10:50:23.303364966 +0200
@@ -30,6 +30,13 @@
#include <xkb-config.h>
+#ifdef HAVE_SHA1_IN_LIBMD /* Use libmd for SHA1 */
+# include <sha1.h>
+#else /* Use OpenSSL's libcrypto */
+# include <stddef.h> /* buggy openssl/sha.h wants size_t */
+# include <openssl/sha.h>
+#endif
+
#include <stdio.h>
#include <ctype.h>
#include <X11/X.h>
@@ -43,24 +50,13 @@
#define XKBSRV_NEED_FILE_FUNCS
#include <xkbsrv.h>
#include <X11/extensions/XI.h>
+#include <errno.h>
#include "xkb.h"
#if defined(CSRG_BASED) || defined(linux) || defined(__GNU__)
#include <paths.h>
#endif
- /*
- * If XKM_OUTPUT_DIR specifies a path without a leading slash, it is
- * relative to the top-level XKB configuration directory.
- * Making the server write to a subdirectory of that directory
- * requires some work in the general case (install procedure
- * has to create links to /var or somesuch on many machines),
- * so we just compile into /usr/tmp for now.
- */
-#ifndef XKM_OUTPUT_DIR
-#define XKM_OUTPUT_DIR "compiled/"
-#endif
-
#define PRE_ERROR_MSG "\"The XKEYBOARD keymap compiler (xkbcomp) reports:\""
#define ERROR_PREFIX "\"> \""
#define POST_ERROR_MSG1 "\"Errors from xkbcomp are not fatal to the X server\""
@@ -175,6 +171,45 @@
}
static Bool
+Sha1Asc(char sha1Asc[SHA_DIGEST_LENGTH*2+1], const char * input)
+{
+ int i;
+ unsigned char sha1[SHA_DIGEST_LENGTH];
+
+#ifdef HAVE_SHA1_IN_LIBMD /* Use libmd for SHA1 */
+ SHA1_CTX ctx;
+
+ SHA1Init (&ctx);
+ SHA1Update (&ctx, input, strlen(input));
+ SHA1Final (sha1, &ctx);
+#else /* Use OpenSSL's libcrypto */
+ SHA_CTX ctx;
+ int success;
+
+ success = SHA1_Init (&ctx);
+ if (! success)
+ return BadAlloc;
+
+ success = SHA1_Update (&ctx, input, strlen(input));
+ if (! success)
+ return BadAlloc;
+
+ success = SHA1_Final (sha1, &ctx);
+ if (! success)
+ return BadAlloc;
+#endif
+
+ /* convert sha1 to sha1_asc */
+ for(i=0; i<SHA_DIGEST_LENGTH; ++i) {
+ sprintf(sha1Asc+i*2, "%02X", sha1[i]);
+ }
+
+ return Success;
+}
+
+/* call xkbcomp and compile XKB keymap, return xkm file name in
+ nameRtrn */
+static Bool
XkbDDXCompileKeymapByNames( XkbDescPtr xkb,
XkbComponentNamesPtr names,
unsigned want,
@@ -183,7 +218,11 @@
int nameRtrnLen)
{
FILE * out;
- char *buf = NULL, keymap[PATH_MAX], xkm_output_dir[PATH_MAX];
+ char * buf = NULL, xkmfile[PATH_MAX], xkm_output_dir[PATH_MAX];
+ char * tmpXkmFile = NULL;
+ char * canonicalXkmFileName = NULL;
+ char sha1Asc[SHA_DIGEST_LENGTH*2+1], xkbKeyMapBuf[100*1024];
+ int ret, result;
const char *emptystring = "";
const char *xkbbasedirflag = emptystring;
@@ -194,15 +233,69 @@
/* WIN32 has no popen. The input must be stored in a file which is
used as input for xkbcomp. xkbcomp does not read from stdin. */
char tmpname[PATH_MAX];
- const char *xkmfile = tmpname;
+ const char *xkbfile = tmpname;
#else
- const char *xkmfile = "-";
+ const char *xkbfile = "-";
+#endif
+
+ /* Write keymap source (xkbfile) to memory buffer `xkbKeyMapBuf',
+ of which SHA1 is generated and used as result xkm file name */
+ memset(xkbKeyMapBuf, 0, sizeof(xkbKeyMapBuf));
+ out = fmemopen(xkbKeyMapBuf, sizeof(xkbKeyMapBuf), "w");
+ if (NULL == out) {
+ ErrorF("[xkb] Open xkbKeyMapBuf for writing failed\n");
+ return False;
+ }
+ ret = XkbWriteXKBKeymapForNames(out, names, xkb, want, need);
+ if (fclose(out) !=0)
+ {
+ ErrorF("[xkb] XkbWriteXKBKeymapForNames error, perhaps xkbKeyMapBuf is too small\n");
+ return False;
+ }
+#ifdef DEBUG
+ if (xkbDebugFlags) {
+ ErrorF("[xkb] XkbDDXCompileKeymapByNames compiling keymap:\n");
+ fputs(xkbKeyMapBuf, stderr);
+ }
#endif
+ if (!ret) {
+ ErrorF("[xkb] Generating XKB Keymap failed, giving up compiling keymap\n");
+ return False;
+ }
- snprintf(keymap, sizeof(keymap), "server-%s", display);
+ DebugF("[xkb] computing SHA1 of keymap\n");
+ if (Success == Sha1Asc(sha1Asc, xkbKeyMapBuf)) {
+ snprintf(xkmfile, sizeof(xkmfile), "server-%s", sha1Asc);
+ }
+ else {
+ ErrorF("[xkb] Computing SHA1 of keymap failed, "
+ "using display name instead as xkm file name\n");
+ snprintf(xkmfile, sizeof(xkmfile), "server-%s", display);
+ }
OutputDirectory(xkm_output_dir, sizeof(xkm_output_dir));
+ /* set nameRtrn, fail if it's too small */
+ if ((strlen(xkmfile)+1 > nameRtrnLen) && nameRtrn) {
+ ErrorF("[xkb] nameRtrn too small to hold xkmfile name\n");
+ return False;
+ }
+ strncpy(nameRtrn, xkmfile, nameRtrnLen);
+
+ /* if the xkm file already exists, reuse it */
+ canonicalXkmFileName = Xprintf("%s%s.xkm", xkm_output_dir, xkmfile);
+ if (access(canonicalXkmFileName, R_OK) == 0) {
+ /* yes, we can reuse the old xkm file */
+ LogMessage(X_INFO, "XKB: reuse xkmfile %s\n", canonicalXkmFileName);
+ result = True;
+ goto _ret;
+ }
+ LogMessage(X_INFO, "XKB: generating xkmfile %s\n", canonicalXkmFileName);
+
+ /* continue to call xkbcomp to compile the keymap. to avoid race
+ condition, we compile it to a tmpfile then rename it to
+ xkmfile */
+
#ifdef WIN32
strcpy(tmpname, Win32TempDir());
strcat(tmpname, "\\xkb_XXXXXX");
@@ -225,19 +318,30 @@
}
}
+ if ( (tmpXkmFile = tempnam(xkm_output_dir, NULL)) == NULL ) {
+ ErrorF("[xkb] Can't generate temp xkm file name");
+ result = False;
+ goto _ret;
+ }
+
buf = Xprintf("\"%s%sxkbcomp\" -w %d %s -xkm \"%s\" "
- "-em1 %s -emp %s -eml %s \"%s%s.xkm\"",
+ "-em1 %s -emp %s -eml %s \"%s\"",
xkbbindir, xkbbindirsep,
( (xkbDebugFlags < 2) ? 1 :
((xkbDebugFlags > 10) ? 10 : (int)xkbDebugFlags) ),
- xkbbasedirflag, xkmfile,
+ xkbbasedirflag, xkbfile,
PRE_ERROR_MSG, ERROR_PREFIX, POST_ERROR_MSG1,
- xkm_output_dir, keymap);
+ tmpXkmFile);
if (xkbbasedirflag != emptystring) {
xfree(xkbbasedirflag);
}
+ /* there's a potential race condition between calling tempnam()
+ and invoking xkbcomp to write the result file (potential temp
+ file name conflicts), but since xkbcomp is a standalone
+ program, we have to live with this */
+
#ifndef WIN32
out= Popen(buf,"w");
#else
@@ -245,31 +349,43 @@
#endif
if (out!=NULL) {
-#ifdef DEBUG
- if (xkbDebugFlags) {
- ErrorF("[xkb] XkbDDXCompileKeymapByNames compiling keymap:\n");
- XkbWriteXKBKeymapForNames(stderr,names,xkb,want,need);
+ /* write XKBKeyMapBuf to xkbcomp */
+ if (EOF==fputs(xkbKeyMapBuf, out))
+ {
+ ErrorF("[xkb] Sending keymap to xkbcomp failed\n");
+ result = False;
+ goto _ret;
}
-#endif
- XkbWriteXKBKeymapForNames(out,names,xkb,want,need);
#ifndef WIN32
if (Pclose(out)==0)
#else
if (fclose(out)==0 && System(buf) >= 0)
#endif
{
+ /* xkbcomp success */
if (xkbDebugFlags)
DebugF("[xkb] xkb executes: %s\n",buf);
- if (nameRtrn) {
- strncpy(nameRtrn,keymap,nameRtrnLen);
- nameRtrn[nameRtrnLen-1]= '\0';
+
+ /* if canonicalXkmFileName already exists now, we simply
+ overwrite it, this is OK */
+ ret = rename(tmpXkmFile, canonicalXkmFileName);
+ if (0 != ret) {
+ ErrorF("[xkb] Can't rename %s to %s, error: %s\n",
+ tmpXkmFile, canonicalXkmFileName,
+ strerror(errno));
+
+ /* in case of error, don't unlink tmpXkmFile, leave it
+ for debugging */
+
+ result = False;
+ goto _ret;
}
- if (buf != NULL)
- xfree (buf);
- return True;
+
+ result = True;
+ goto _ret;
}
else
- LogMessage(X_ERROR, "Error compiling keymap (%s)\n", keymap);
+ LogMessage(X_ERROR, "Error compiling keymap (%s)\n", xkbfile);
#ifdef WIN32
/* remove the temporary file */
unlink(tmpname);
@@ -284,9 +400,17 @@
}
if (nameRtrn)
nameRtrn[0]= '\0';
+ result = False;
+
+_ret:
+ if (tmpXkmFile)
+ free(tmpXkmFile);
+ if (canonicalXkmFileName)
+ xfree(canonicalXkmFileName);
if (buf != NULL)
xfree (buf);
- return False;
+
+ return result;
}
static FILE *
@@ -370,7 +494,6 @@
DebugF("Loaded XKB keymap %s, defined=0x%x\n",fileName,(*xkbRtrn)->defined);
}
fclose(file);
- (void) unlink (fileName);
return (need|want)&(~missing);
}
diff -Naur xorg-server-1.7.99.1/xkb/README.compiled xorg-server-1.7.99.1.patch/xkb/README.compiled
--- xorg-server-1.7.99.1/xkb/README.compiled 2008-10-13 01:19:06.000000000 +0200
+++ xorg-server-1.7.99.1.patch/xkb/README.compiled 2009-10-24 10:50:28.069400854 +0200
@@ -4,10 +4,10 @@
or some other tool might destroy or replace the files in this directory,
so it is not a safe place to store compiled keymaps for long periods of
time. The default keymap for any server is usually stored in:
- X<num>-default.xkm
-where <num> is the display number of the server in question, which makes
-it possible for several servers *on the same host* to share the same
-directory.
+ server-<SHA1>.xkm
+
+where <SHA1> is the SHA1 hash of keymap source, so that compiled
+keymap of different keymap sources are stored in different files.
Unless the X server is modified, sharing this directory between servers on
different hosts could cause problems.

View File

@ -1,30 +0,0 @@
--- xorg-server.orig/exa/exa.c 2008-10-14 23:24:44.000000000 +0200
+++ xorg-server/exa/exa.c 2008-10-14 23:25:52.000000000 +0200
@@ -882,6 +882,11 @@
dixSetPrivate(&pScreen->devPrivates, exaScreenPrivateKey, pExaScr);
pExaScr->migration = ExaMigrationAlways;
+ if (pScreenInfo->flags & EXA_MIGRATION_GREEDY) {
+ pExaScr->migration = ExaMigrationGreedy;
+ LogMessage(X_INFO, "EXA(%d): Forcing greedy migration option\n",
+ pScreen->myNum);
+ }
exaDDXDriverInit(pScreen);
--- xorg-server.orig/exa/exa.h 2008-10-14 23:24:44.000000000 +0200
+++ xorg-server/exa/exa.h 2008-10-14 23:25:52.000000000 +0200
@@ -737,6 +737,13 @@
#define EXA_TWO_BITBLT_DIRECTIONS (1 << 2)
/**
+ * EXA_MIGRATION_GREEDY indicates to EXA that the driver prefers to
+ * use the "greedy" migration heuristic. This is to work around
+ * issues with EXA on the Intel 965 chipset. (LP: #177492)
+ */
+#define EXA_MIGRATION_GREEDY (1 << 3)
+
+/**
* EXA_HANDLES_PIXMAPS indicates to EXA that the driver can handle
* all pixmap addressing and migration.
*/

View File

@ -1,35 +0,0 @@
Disable damage notifications on move for manually redirected windows.
The automatic compositor needs damage notification on move, but a
compositing manager doesn't.
Index: xorg-server/composite/compwindow.c
===================================================================
--- xorg-server.orig/composite/compwindow.c 2008-06-18 10:28:16.000000000 +0300
+++ xorg-server/composite/compwindow.c 2008-06-18 12:06:20.000000000 +0300
@@ -580,12 +580,15 @@
}
else
{
+ CompWindowPtr cw = GetCompWindow (pWin);
+
ptOldOrg.x -= dx;
ptOldOrg.y -= dy;
REGION_TRANSLATE (prgnSrc, prgnSrc,
pWin->drawable.x - ptOldOrg.x,
pWin->drawable.y - ptOldOrg.y);
- DamageRegionAppend(&pWin->drawable, prgnSrc);
+ if (pWin->redirectDraw && cw->update == CompositeRedirectAutomatic)
+ DamageRegionAppend(&pWin->drawable, prgnSrc);
}
cs->CopyWindow = pScreen->CopyWindow;
pScreen->CopyWindow = compCopyWindow;
@@ -664,7 +667,8 @@
/*
* Report that as damaged so it will be redrawn
*/
- DamageRegionAppend(&pWin->drawable, &damage);
+ if (cw->update == CompositeRedirectAutomatic)
+ DamageRegionAppend(&pWin->drawable, &damage);
REGION_UNINIT (pScreen, &damage);
/*
* Save the new border clip region

View File

@ -1,22 +0,0 @@
diff -Naur xorg-server-1.6.99.902.orig/Xi/exevents.c xorg-server-1.6.99.902/Xi/exevents.c
--- xorg-server-1.6.99.902.orig/Xi/exevents.c 2009-09-26 14:12:03.000000000 +0200
+++ xorg-server-1.6.99.902/Xi/exevents.c 2009-09-26 18:55:30.000000000 +0200
@@ -195,11 +195,15 @@
static void
CopyKeyClass(DeviceIntPtr device, DeviceIntPtr master)
{
- KeyClassPtr mk = master->key;
- KeyClassPtr dk = device->key;
+ KeyClassPtr mk, dk;
int i;
- if (device == master)
+ if (device == master || device == NULL || master == NULL)
+ return;
+
+ mk = master->key;
+ dk = device->key;
+ if (dk == NULL || mk == NULL)
return;
mk->sourceid = device->id;

View File

@ -1,14 +0,0 @@
diff --git a/hw/xfree86/common/xf86VidMode.c b/hw/xfree86/common/xf86VidMode.c
index d855bd1..2af8c00 100644
--- a/hw/xfree86/common/xf86VidMode.c
+++ b/hw/xfree86/common/xf86VidMode.c
@@ -226,6 +226,9 @@ VidModeGetFirstModeline(int scrnIndex, pointer *mode, int *dotClock)
pScrn = xf86Screens[scrnIndex];
pVidMode = VMPTR(pScrn->pScreen);
+ if (pScrn->modes == NULL)
+ return FALSE;
+
pVidMode->First = pScrn->modes;
pVidMode->Next = pVidMode->First->next;

View File

@ -1,12 +0,0 @@
diff -Nurp patched/include/misc.h working/include/misc.h
--- patched/include/misc.h 2009-02-05 01:09:03.000000000 -0800
+++ working/include/misc.h 2009-02-05 02:12:57.000000000 -0800
@@ -86,7 +86,7 @@ extern unsigned long serverGeneration;
#ifndef MAXSCREENS
#define MAXSCREENS 16
#endif
-#define MAXCLIENTS 256
+#define MAXCLIENTS 512
#define MAXEXTENSIONS 128
#define MAXFORMATS 8
#define MAXDEVICES 20 /* input devices */

View File

@ -1,13 +0,0 @@
diff -Nurp patched/hw/xfree86/modes/xf86RandR12.c working/hw/xfree86/modes/xf86RandR12.c
--- patched/hw/xfree86/modes/xf86RandR12.c 2009-03-02 22:57:18.000000000 -0800
+++ working/hw/xfree86/modes/xf86RandR12.c 2009-03-02 22:57:24.000000000 -0800
@@ -944,7 +944,8 @@ xf86RandR12SetRotations (ScreenPtr pScre
for (c = 0; c < config->num_crtc; c++) {
xf86CrtcPtr crtc = config->crtc[c];
- RRCrtcSetRotations (crtc->randr_crtc, rotations);
+ if (crtc != NULL)
+ RRCrtcSetRotations (crtc->randr_crtc, rotations);
}
#endif
randrp->supported_rotations = rotations;

View File

@ -1,61 +0,0 @@
diff --git a/hw/xfree86/ddc/interpret_edid.c b/hw/xfree86/ddc/interpret_edid.c
index c0e3df9..32288f7 100644
--- a/hw/xfree86/ddc/interpret_edid.c
+++ b/hw/xfree86/ddc/interpret_edid.c
@@ -51,6 +51,15 @@ static void get_whitepoint_section(Uchar *, struct whitePoints *);
static void get_detailed_timing_section(Uchar*, struct detailed_timings *);
static Bool validate_version(int scrnIndex, struct edid_version *);
+static Bool
+is_standard_aspect_ratio(int x, int y)
+{
+ return ((x == 16 && y == 9) ||
+ (x == 16 && y == 10) ||
+ (x == 4 && y == 3) ||
+ (x == 5 && y == 4));
+}
+
static void
handle_edid_quirks(xf86MonPtr m)
{
@@ -91,10 +100,7 @@ handle_edid_quirks(xf86MonPtr m)
* try to find the largest detailed timing that matches that aspect
* ratio and use that to fill in the feature section.
*/
- if ((m->features.hsize == 16 && m->features.vsize == 9) ||
- (m->features.hsize == 16 && m->features.vsize == 10) ||
- (m->features.hsize == 4 && m->features.vsize == 3) ||
- (m->features.hsize == 5 && m->features.vsize == 4)) {
+ if (is_standard_aspect_ratio(m->features.hsize, m->features.vsize)) {
int real_hsize = 0, real_vsize = 0;
float target_aspect, timing_aspect;
@@ -130,6 +136,28 @@ handle_edid_quirks(xf86MonPtr m)
xf86Msg(X_INFO, "Quirked EDID physical size to %dx%d cm\n",
m->features.hsize, m->features.vsize);
}
+
+ /*
+ * Some monitors do the reverse, putting real size in the global block
+ * and aspect ratios in the detailed timings. Check, but only if we
+ * think we've got a real physical size.
+ */
+ if (m->features.hsize && m->features.vsize) {
+ for (i = 0; i < 4; i++) {
+ if (m->det_mon[i].type == DT) {
+ struct detailed_timings *timing;
+ timing = &m->det_mon[i].section.d_timings;
+
+ if (is_standard_aspect_ratio(timing->h_size, timing->v_size)) {
+ timing->h_size = m->features.hsize * 10;
+ timing->v_size = m->features.vsize * 10;
+ xf86Msg(X_INFO, "Quirked timing size to %dx%d mm\n",
+ timing->h_size, timing->v_size);
+
+ }
+ }
+ }
+ }
}
xf86MonPtr

View File

@ -1,30 +0,0 @@
From f0ef98d8d54f5dfa3081b62ff672e0fe992b0a01 Mon Sep 17 00:00:00 2001
From: Bryce Harrington <bryce@bryceharrington.org>
Date: Wed, 18 Mar 2009 23:28:51 -0700
Subject: [PATCH] Check for null pointer dereference to prevent crash
on non-primary Xinerama screens when key repeating.
(LP: #324465)
Signed-off-by: Bryce Harrington <bryce@bryceharrington.org>
---
mi/mipointer.c | 4 ++++
1 files changed, 4 insertions(+), 0 deletions(-)
diff --git a/mi/mipointer.c b/mi/mipointer.c
index e37316e..fe5947f 100644
--- a/mi/mipointer.c
+++ b/mi/mipointer.c
@@ -306,6 +306,10 @@ miPointerWarpCursor (DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y)
pPointer = MIPOINTER(pDev);
SetupScreen (pScreen);
+ /* Null pointer causes crash on keyrepeat with Xinerama LP: (#324465) */
+ if (pPointer == NULL)
+ return;
+
if (pPointer->pScreen != pScreen)
{
(*pScreenPriv->screenFuncs->NewEventScreen) (pDev, pScreen, TRUE);
--
1.6.0.4

View File

@ -1,13 +0,0 @@
diff -Nurp patched/hw/xfree86/common/xisb.c working/hw/xfree86/common/xisb.c
--- patched/hw/xfree86/common/xisb.c 2009-02-02 21:53:58.000000000 +0100
+++ working/hw/xfree86/common/xisb.c 2009-02-02 21:55:09.000000000 +0100
@@ -98,6 +98,9 @@ XisbRead (XISBuffer *b)
{
int ret;
+ if (b == NULL)
+ return -2;
+
if (b->current >= b->end)
{
if (b->block_duration >= 0)

View File

@ -1,107 +0,0 @@
From 179cec1d2f919d8d8096d6030b0ad9b6285dfd4d Mon Sep 17 00:00:00 2001
From: Bryce Harrington <bryce@bryceharrington.org>
Date: Mon, 23 Mar 2009 14:25:18 -0700
Subject: [PATCH] Check null pointers to not crash on keyrepeat with Xinerama LP: (#324465)
With -nvidia, when using Xinerama, holding down a key in a text field
on a non-primary screen can cause an X crash. This is caused because
the MIPOINTER(pDev) can return a NULL pointer for a non-null pDev in
some cases, and the mipointer.c code lacks checks for this condition.
MIPOINTER() is a macro #defined locally to mipointer.c, which calls into
dixLookupPrivate(), a routine which returns NULL in at least some
circumstances - such as if the memory could not be xcalloc'd for
whatever reason. Hopefully upstream can provide a better fix for this,
but for now it seems reasonable to check the return values of this macro
for NULL before usage, as a minimum.
diff -Naur xorg-server-1.6.99.902.orig/mi/mipointer.c xorg-server-1.6.99.902/mi/mipointer.c
--- xorg-server-1.6.99.902.orig/mi/mipointer.c 2009-09-26 14:12:02.000000000 +0200
+++ xorg-server-1.6.99.902/mi/mipointer.c 2009-09-26 19:02:00.000000000 +0200
@@ -139,6 +139,10 @@
if (DevHasCursor(pDev))
{
pPointer = MIPOINTER(pDev);
+ if (pPointer == NULL) {
+ ErrorF("miPointerCloseScreen: Invalid input device pointer\n");
+ return FALSE;
+ }
if (pScreen == pPointer->pScreen)
pPointer->pScreen = 0;
@@ -191,6 +195,10 @@
return FALSE;
pPointer = MIPOINTER(pDev);
+ if (pPointer == NULL) {
+ ErrorF("miPointerDisplayCursor: Invalid input device pointer\n");
+ return FALSE;
+ }
pPointer->pCursor = pCursor;
pPointer->pScreen = pScreen;
@@ -204,6 +212,10 @@
miPointerPtr pPointer;
pPointer = MIPOINTER(pDev);
+ if (pPointer == NULL) {
+ ErrorF("miPointerConstrainCursor: Invalid input device pointer\n");
+ return FALSE;
+ }
pPointer->limits = *pBox;
pPointer->confined = PointerConfinedToScreen(pDev);
@@ -305,6 +317,10 @@
SetupScreen (pScreen);
pPointer = MIPOINTER(pDev);
+ if (pPointer == NULL) {
+ ErrorF("miPointerWarpCursor: Invalid input device pointer\n");
+ return;
+ }
if (pPointer->pScreen != pScreen)
{
@@ -436,13 +452,17 @@
ScreenPtr pScreen;
miPointerPtr pPointer;
- pPointer = MIPOINTER(pDev);
-
pScreen = screenInfo.screens[screen_no];
pScreenPriv = GetScreenPrivate (pScreen);
(*pScreenPriv->screenFuncs->NewEventScreen) (pDev, pScreen, FALSE);
NewCurrentScreen (pDev, pScreen, x, y);
+ pPointer = MIPOINTER(pDev);
+ if (pPointer == NULL) {
+ ErrorF("miPointerSetScreen: Invalid input device pointer\n");
+ return;
+ }
+
pPointer->limits.x2 = pScreen->width;
pPointer->limits.y2 = pScreen->height;
}
@@ -469,6 +489,10 @@
SetupScreen(pScreen);
pPointer = MIPOINTER(pDev);
+ if (pPointer == NULL) {
+ ErrorF("miPointerMoved: Invalid input device pointer\n");
+ return;
+ }
/* Hack: We mustn't call into ->MoveCursor for anything but the
* VCP, as this may cause a non-HW rendered cursor to be rendered during
@@ -498,6 +522,11 @@
miPointerPtr pPointer;
pPointer = MIPOINTER(pDev);
+ if (pPointer == NULL) {
+ ErrorF("miPointerSetPosition: Invalid input device pointer\n");
+ return;
+ }
+
pScreen = pPointer->pScreen;
if (!pScreen)
return; /* called before ready */

View File

@ -1,39 +0,0 @@
From 7813adf66be31d8b0e8df21821e786e688f7fe78 Mon Sep 17 00:00:00 2001
From: Bryce Harrington <bryce@bryceharrington.org>
Date: Fri, 27 Mar 2009 19:01:32 -0700
Subject: [PATCH] cwGetBackingPicture can segfault when minimizing/maximizing firefox with
a flash video playing. This appears to be a race condition in which the
backing picture's data is not always fully defined.
Signed-off-by: Bryce Harrington <bryce@bryceharrington.org>
---
miext/cw/cw_render.c | 13 +++++++++----
1 files changed, 9 insertions(+), 4 deletions(-)
diff --git a/miext/cw/cw_render.c b/miext/cw/cw_render.c
index 6e0c727..fe8cba7 100644
--- a/miext/cw/cw_render.c
+++ b/miext/cw/cw_render.c
@@ -125,10 +125,15 @@ cwGetBackingPicture (PicturePtr pPicture, int *x_off, int *y_off)
WindowPtr pWindow = (WindowPtr) pDrawable;
PixmapPtr pPixmap = getCwPixmap (pWindow);
- *x_off = pDrawable->x - pPixmap->screen_x;
- *y_off = pDrawable->y - pPixmap->screen_y;
-
- return pPicturePrivate->pBackingPicture;
+ if (pDrawable && pPixmap) {
+ *x_off = pDrawable->x - pPixmap->screen_x;
+ *y_off = pDrawable->y - pPixmap->screen_y;
+
+ return pPicturePrivate->pBackingPicture;
+ } else {
+ *x_off = *y_off = 0;
+ return pPicture;
+ }
}
else
{
--
1.6.0.4

View File

@ -1,21 +0,0 @@
#
# Ubuntu: https://bugs.launchpad.net/bugs/353074
# Upstream: http://bugs.freedesktop.org/show_bug.cgi?id=21000
#
Index: xorg-server-1.6.0/hw/xfree86/modes/xf86EdidModes.c
===================================================================
--- xorg-server-1.6.0.orig/hw/xfree86/modes/xf86EdidModes.c 2009-04-01 19:45:23.000000000 +0200
+++ xorg-server-1.6.0/hw/xfree86/modes/xf86EdidModes.c 2009-04-01 19:45:32.000000000 +0200
@@ -155,6 +155,11 @@
DDC->vendor.prod_id == 13600)
return TRUE;
+ /* Bug #21000: LGPhilipsLCD LP154W01-TLAJ */
+ if (memcmp (DDC->vendor.name, "LPL", 4) == 0 &&
+ DDC->vendor.prod_id == 47360)
+ return TRUE;
+
return FALSE;
}

View File

@ -1,16 +0,0 @@
From 8663524ce398b56af596ab1e7e96b62ca45b79e9 Mon Sep 17 00:00:00 2001
From: Peter Hutterer <peter.hutterer@who-t.net>
Date: Mon, 13 Apr 2009 17:49:00 +1000
Subject: [PATCH] xfree86: don't synthesise a mouse section if synaptics devices are found.
diff -Naur xorg-server-1.6.99.902.orig/hw/xfree86/common/xf86Config.c xorg-server-1.6.99.902/hw/xfree86/common/xf86Config.c
--- xorg-server-1.6.99.902.orig/hw/xfree86/common/xf86Config.c 2009-09-26 14:12:03.000000000 +0200
+++ xorg-server-1.6.99.902/hw/xfree86/common/xf86Config.c 2009-09-26 19:05:52.000000000 +0200
@@ -2406,6 +2406,7 @@
{
if (strcmp((*dev)->driver, "kbd") == 0 ||
strcmp((*dev)->driver, "mouse") == 0 ||
+ strcmp((*dev)->driver, "synaptics") == 0 ||
strcmp((*dev)->driver, "vmmouse") == 0)
{
IDevPtr *current;

View File

@ -1,91 +0,0 @@
diff -Naur xorg-server-1.6.99.902.orig/hw/xfree86/common/xf86pciBus.c xorg-server-1.6.99.902/hw/xfree86/common/xf86pciBus.c
--- xorg-server-1.6.99.902.orig/hw/xfree86/common/xf86pciBus.c 2009-09-26 14:12:03.000000000 +0200
+++ xorg-server-1.6.99.902/hw/xfree86/common/xf86pciBus.c 2009-09-26 19:11:42.000000000 +0200
@@ -52,13 +52,7 @@
/* Bus-specific globals */
Bool pciSlotClaimed = FALSE;
-#define PCIINFOCLASSES(c) \
- ( (((c) & 0x00ff0000) == (PCI_CLASS_PREHISTORIC << 16)) \
- || (((c) & 0x00ff0000) == (PCI_CLASS_DISPLAY << 16)) \
- || ((((c) & 0x00ffff00) \
- == ((PCI_CLASS_MULTIMEDIA << 16) | (PCI_SUBCLASS_MULTIMEDIA_VIDEO << 8)))) \
- || ((((c) & 0x00ffff00) \
- == ((PCI_CLASS_PROCESSOR << 16) | (PCI_SUBCLASS_PROCESSOR_COPROC << 8)))) )
+#define PCIINFOCLASSES(c) (((c) & 0x00ffff00) == (PCI_CLASS_DISPLAY << 16))
/*
* PCI classes that have messages printed always. The others are only
@@ -85,6 +79,40 @@
sprintf(buffer, "%d@%d", busnum & 0x00ff, busnum >> 8);
}
+/* oh god what have i done */
+static Bool
+looks_like_bios_primary(struct pci_device *info)
+{
+ unsigned char *bios;
+ unsigned short vendor, device;
+ int offset;
+ Bool ret = FALSE;
+
+ bios = xf86MapVidMem(-1, VIDMEM_MMIO, 0xc0000, 0x10000);
+ if (!bios)
+ return FALSE;
+
+ if (bios[0] != 0x55 || bios[1] != 0xAA)
+ goto out;
+
+ offset = (bios[0x19] << 8) + bios[0x18];
+
+ if (bios[offset] != 'P' ||
+ bios[offset+1] != 'C' ||
+ bios[offset+2] != 'I' ||
+ bios[offset+3] != 'R')
+ goto out;
+
+ vendor = (bios[offset+5] << 8) + bios[offset+4];
+ device = (bios[offset+7] << 8) + bios[offset+6];
+
+ ret = (info->vendor_id == vendor) && (info->device_id == device);
+
+out:
+ xf86UnMapVidMem(-1, bios, 0x10000);
+ return ret;
+}
+
/*
* xf86Bus.c interface
*/
@@ -132,17 +160,25 @@
uint16_t command;
info = xf86PciVideoInfo[i];
+ if (!IS_VGA(info->device_class))
+ continue;
+
pci_device_cfg_read_u16(info, & command, 4);
- if ((command & PCI_CMD_MEM_ENABLE)
- && ((num == 1) || IS_VGA(info->device_class))) {
- if (primaryBus.type == BUS_NONE) {
+ if ((command & PCI_CMD_MEM_ENABLE)) {
+ if (num == 1) {
primaryBus.type = BUS_PCI;
primaryBus.id.pci = info;
- } else {
- xf86Msg(X_NOTICE,
+ break;
+ } else if (looks_like_bios_primary(info)) {
+ if (primaryBus.type == BUS_NONE) {
+ primaryBus.type = BUS_PCI;
+ primaryBus.id.pci = info;
+ } else {
+ xf86Msg(X_NOTICE,
"More than one possible primary device found\n");
- primaryBus.type ^= (BusType)(-1);
+ primaryBus.type ^= (BusType)(-1);
+ }
}
}
}

View File

@ -1,12 +0,0 @@
diff -Naur xorg-server-1.4.0.90/hw/xfree86/os-support/linux/lnx_apm.c xorg-server-1.4.0.90.edit/hw/xfree86/os-support/linux/lnx_apm.c
--- xorg-server-1.4.0.90/hw/xfree86/os-support/linux/lnx_apm.c 2007-12-14 00:38:23.000000000 +0100
+++ xorg-server-1.4.0.90.edit/hw/xfree86/os-support/linux/lnx_apm.c 2007-12-14 00:38:18.000000000 +0100
@@ -35,6 +35,8 @@
# define APM_SUSPEND_FAILED 0xf001
#endif
+typedef unsigned short apm_event_t;
+
static PMClose lnxAPMOpen(void);
static void lnxCloseAPM(void);
static pointer APMihPtr = NULL;

View File

@ -1,32 +0,0 @@
/* Upstream commit 56f21bda1ce95741c88c423b60bd709eef26eb12 was supposed to
* only avoid multiple scans of the PCI devices, but it actually also added
* an "optimization" based on using sysfs files instead of /proc. However,
* this code is broken, for instance because there are no ioctl handler on
* /sys/bus/pci/devices/*/config files while there some on /proc/bus/pci/*
*
* It breaks the Xserver on architectures that require such ioctls to scan
* the PCI devices and/or deal with PCI domains:
* #422077: xserver-xorg: Fatal server error on sparc: xf86MapPciMem failed
* #422095: xserver-xorg-core: fails to start on powerpc, no devices detected
*
* The following patch forces the server to behave as if we were running on
* a 2.4 kernel while scanning PCI devices, so that the sysfs code is disabled.
*
* Upstream doesn't apply this patch since they want to fix the sysfs-code.
* See https://bugs.freedesktop.org/show_bug.cgi?id=7248
*
* Thanks to Jim Watson for testing!
*/
diff -Naur xorg-server-1.5.1.orig/hw/xfree86/os-support/bus/linuxPci.c xorg-server-1.5.1/hw/xfree86/os-support/bus/linuxPci.c
--- xorg-server-1.5.1.orig/hw/xfree86/os-support/bus/linuxPci.c 2008-10-04 18:50:24.000000000 +0200
+++ xorg-server-1.5.1/hw/xfree86/os-support/bus/linuxPci.c 2008-10-04 18:52:08.000000000 +0200
@@ -131,7 +131,7 @@
static int fd = -1,is_write = 0;
char file[64];
struct stat ignored;
- static int is26 = -1;
+ static int is26 = 0;
if (dev == NULL) {
return -1;

View File

@ -1,32 +0,0 @@
Index: xorg-server/hw/xfree86/os-support/linux/lnx_init.c
===================================================================
--- xorg-server.orig/hw/xfree86/os-support/linux/lnx_init.c 2008-06-18 12:06:06.000000000 +0300
+++ xorg-server/hw/xfree86/os-support/linux/lnx_init.c 2008-06-18 12:06:25.000000000 +0300
@@ -344,10 +344,25 @@
if (VTSwitch)
{
+ struct vt_stat vts;
+
/*
- * Perform a switch back to the active VT when we were started
+ * Perform a switch back to the active VT when we were started.
+ * We cannot rely on vtSema to determine if the server was the
+ * active VT at the time of shutdown since it has already been
+ * released. Instead, we manually check the current VT and
+ * compare it with the VT we were running on.
*/
- if (activeVT >= 0) {
+ if (ioctl(xf86Info.consoleFd, VT_GETSTATE, &vts) < 0)
+ {
+ /* If this failed, fall back to old behaviour
+ * of always switching. */
+ xf86Msg(X_WARNING,"xf86OpenConsole: VT_GETSTATE failed: %s\n",
+ strerror(errno));
+ vts.v_active = xf86Info.vtno;
+ }
+
+ if (activeVT >= 0 && vts.v_active == xf86Info.vtno) {
if (ioctl(xf86Info.consoleFd, VT_ACTIVATE, activeVT) < 0)
xf86Msg(X_WARNING, "xf86CloseConsole: VT_ACTIVATE failed: %s\n",
strerror(errno));

View File

@ -0,0 +1,17 @@
diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
index 84d3cac..673612f 100644
--- a/hw/xfree86/modes/xf86Crtc.c
+++ b/hw/xfree86/modes/xf86Crtc.c
@@ -2248,10 +2248,10 @@ xf86InitialConfiguration (ScrnInfoPtr scrn, Bool canGrow)
xf86DrvMsg(i, X_INFO, "Using user preference for initial modes\n");
else if (xf86TargetPreferred(scrn, config, modes, enabled, width, height))
xf86DrvMsg(i, X_INFO, "Using exact sizes for initial modes\n");
- else if (xf86TargetAspect(scrn, config, modes, enabled, width, height))
- xf86DrvMsg(i, X_INFO, "Using fuzzy aspect match for initial modes\n");
else if (xf86TargetFallback(scrn, config, modes, enabled, width, height))
xf86DrvMsg(i, X_INFO, "Using sloppy heuristic for initial modes\n");
+ else if (xf86TargetAspect(scrn, config, modes, enabled, width, height))
+ xf86DrvMsg(i, X_INFO, "Using fuzzy aspect match for initial modes\n");
else
xf86DrvMsg(i, X_WARNING, "Unable to find initial modes\n");

View File

@ -0,0 +1,12 @@
--- xorg-server-1.6.1.901/hw/xfree86/common/xf86AutoConfig.c~ 2009-07-03 11:59:30.000000000 -0700
+++ xorg-server-1.6.1.901/hw/xfree86/common/xf86AutoConfig.c 2009-07-03 11:59:30.000000000 -0700
@@ -516,7 +516,8 @@
/* Fallback to platform default hardware */
if (i < (nmatches - 1)) {
#if defined(__i386__) || defined(__amd64__) || defined(__hurd__)
- matches[i++] = xnfstrdup("vesa");
+ if (geteuid() == 0)
+ matches[i++] = xnfstrdup("vesa");
#elif defined(__sparc__) && !defined(sun)
matches[i++] = xnfstrdup("sunffb");
#endif

View File

@ -1,6 +1,6 @@
From b4e4b980663692a3af5787eeaf2d48eb6c0188ed Mon Sep 17 00:00:00 2001
From: Fedora X Ninjas <airlied@redhat.com>
Date: Tue, 4 Aug 2009 14:45:58 +1000
From eff3bb9c6f0b71a57705885a3fe6e6469d252d2b Mon Sep 17 00:00:00 2001
From: Fedora X Ninjas <x@fedoraproject.org>
Date: Wed, 20 Jan 2010 14:46:12 +1300
Subject: [PATCH] Add nr for background=none root
---
@ -25,7 +25,7 @@ index c24a94f..907a5e8 100644
int cursorScreenDevPriv[MAXSCREENS];
diff --git a/dix/window.c b/dix/window.c
index 32e26d9..0bf1d52 100644
index caff1cb..be1d1c4 100644
--- a/dix/window.c
+++ b/dix/window.c
@@ -466,22 +466,24 @@ InitRootWindow(WindowPtr pWin)
@ -59,7 +59,7 @@ index 32e26d9..0bf1d52 100644
MapWindow(pWin, serverClient);
}
diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c
index e84da4e..2a0f47a 100644
index 6707448..776b898 100644
--- a/hw/xfree86/common/xf86Init.c
+++ b/hw/xfree86/common/xf86Init.c
@@ -77,6 +77,7 @@
@ -70,7 +70,7 @@ index e84da4e..2a0f47a 100644
#include "xf86VGAarbiter.h"
#include "globals.h"
@@ -234,6 +235,7 @@ xf86CreateRootWindow(WindowPtr pWin)
@@ -254,6 +255,7 @@ xf86CreateRootWindow(WindowPtr pWin)
int ret = TRUE;
int err = Success;
ScreenPtr pScreen = pWin->drawable.pScreen;
@ -78,7 +78,7 @@ index e84da4e..2a0f47a 100644
RootWinPropPtr pProp;
CreateWindowProcPtr CreateWindow = (CreateWindowProcPtr)
dixLookupPrivate(&pScreen->devPrivates, xf86CreateRootWindowKey);
@@ -285,6 +287,15 @@ xf86CreateRootWindow(WindowPtr pWin)
@@ -305,6 +307,15 @@ xf86CreateRootWindow(WindowPtr pWin)
}
}
@ -95,10 +95,10 @@ index e84da4e..2a0f47a 100644
return (ret);
}
diff --git a/hw/xfree86/common/xf86str.h b/hw/xfree86/common/xf86str.h
index 5c3ee44..e3c7841 100644
index de1f1b6..5c3aa00 100644
--- a/hw/xfree86/common/xf86str.h
+++ b/hw/xfree86/common/xf86str.h
@@ -516,7 +516,7 @@ typedef struct _confdrirec {
@@ -503,7 +503,7 @@ typedef struct _confdrirec {
} confDRIRec, *confDRIPtr;
/* These values should be adjusted when new fields are added to ScrnInfoRec */
@ -107,8 +107,8 @@ index 5c3ee44..e3c7841 100644
#define NUM_RESERVED_POINTERS 14
#define NUM_RESERVED_FUNCS 11
@@ -800,6 +800,9 @@ typedef struct _ScrnInfoRec {
ClockRangesPtr clockRanges;
@@ -775,6 +775,9 @@ typedef struct _ScrnInfoRec {
ClockRangePtr clockRanges;
int adjustFlags;
+ /* -nr support */
@ -130,10 +130,10 @@ index b3c7c70..fcc8c95 100644
extern _X_EXPORT Bool CoreDump;
diff --git a/os/utils.c b/os/utils.c
index 00abd63..7bfdf8b 100644
index d7c8388..40583d0 100644
--- a/os/utils.c
+++ b/os/utils.c
@@ -514,6 +514,7 @@ void UseMsg(void)
@@ -513,6 +513,7 @@ void UseMsg(void)
#endif
ErrorF("-nolisten string don't listen on protocol\n");
ErrorF("-noreset don't reset after last client exists\n");
@ -141,7 +141,7 @@ index 00abd63..7bfdf8b 100644
ErrorF("-reset reset after last client exists\n");
ErrorF("-p # screen-saver pattern duration (minutes)\n");
ErrorF("-pn accept failure to listen on all ports\n");
@@ -861,6 +862,8 @@ ProcessCommandLine(int argc, char *argv[])
@@ -856,6 +857,8 @@ ProcessCommandLine(int argc, char *argv[])
defaultBackingStore = WhenMapped;
else if ( strcmp( argv[i], "-wr") == 0)
whiteRoot = TRUE;
@ -151,5 +151,5 @@ index 00abd63..7bfdf8b 100644
if(++i < argc) {
long reqSizeArg = atol(argv[i]);
--
1.6.0.6
1.6.6

View File

@ -1,32 +0,0 @@
From dc5cedd61e00afec33cbfaa7fdfbb6c357074dbd Mon Sep 17 00:00:00 2001
From: =?utf-8?q?S=C3=B8ren=20Sandmann=20Pedersen?= <sandmann@redhat.com>
Date: Thu, 11 Sep 2008 12:51:31 -0400
Subject: [PATCH] Make room for an external monitor if we have enough video RAM
---
hw/xfree86/modes/xf86Crtc.c | 9 +++++++++
1 files changed, 9 insertions(+), 0 deletions(-)
diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
index 4de7e05..9bcf81b 100644
--- a/hw/xfree86/modes/xf86Crtc.c
+++ b/hw/xfree86/modes/xf86Crtc.c
@@ -987,6 +987,15 @@ xf86DefaultScreenLimits (ScrnInfoPtr scrn, int *widthp, int *heightp,
if (crtc_height > height)
height = crtc_height;
}
+
+ /* Make room for an external monitor if we have enough video ram */
+ if (scrn->videoRam >= 65536)
+ width += 1920;
+ else if (scrn->videoRam >= 32768)
+ width += 1280;
+ else if (scrn->videoRam >= 16384)
+ width += 1024;
+
if (config->maxWidth && width > config->maxWidth) width = config->maxWidth;
if (config->maxHeight && height > config->maxHeight) height = config->maxHeight;
if (config->minWidth && width < config->minWidth) width = config->minWidth;
--
1.6.0.1

View File

@ -1,26 +0,0 @@
From 079910986a1b8f5042e16ee2ba3ad9ed843b67ca Mon Sep 17 00:00:00 2001
From: Adam Jackson <ajax@redhat.com>
Date: Tue, 7 Oct 2008 11:09:14 -0400
Subject: [PATCH] Force ModeDebug on.
---
hw/xfree86/modes/xf86Crtc.c | 3 +--
1 files changed, 1 insertions(+), 2 deletions(-)
diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
index 9bcf81b..a953c8a 100644
--- a/hw/xfree86/modes/xf86Crtc.c
+++ b/hw/xfree86/modes/xf86Crtc.c
@@ -2084,8 +2084,7 @@ xf86InitialConfiguration (ScrnInfoPtr scrn, Bool canGrow)
xf86ProcessOptions (scrn->scrnIndex,
scrn->options,
config->options);
- config->debug_modes = xf86ReturnOptValBool (config->options,
- OPTION_MODEDEBUG, FALSE);
+ config->debug_modes = TRUE;
if (scrn->display->virtualX)
width = scrn->display->virtualX;
--
1.6.0.1

View File

@ -1,31 +0,0 @@
From a8079882f1884edc62a9de28af915bd8b65dfbbe Mon Sep 17 00:00:00 2001
From: Adam Jackson <ajax@redhat.com>
Date: Wed, 11 Mar 2009 14:02:11 -0400
Subject: [PATCH] Don't build the ACPI code.
No good can come of this.
---
configure.ac | 2 --
1 files changed, 0 insertions(+), 2 deletions(-)
diff --git a/configure.ac b/configure.ac
index 72ae67e..04716f8 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1269,13 +1269,11 @@ if test "x$XORG" = xyes; then
case $host_cpu in
ia64*)
linux_ia64=yes
- linux_acpi="yes"
;;
alpha*)
linux_alpha=yes
;;
i*86|amd64*|x86_64*)
- linux_acpi="yes"
;;
*)
;;
--
1.6.1.3

View File

@ -1,233 +0,0 @@
From 3ef4be8129f78afd5566a9e5d0fb901449dcb771 Mon Sep 17 00:00:00 2001
From: Ian Romanick <ian.d.romanick@intel.com>
Date: Tue, 29 Sep 2009 16:43:43 -0700
Subject: [PATCH] GLX: Enable GLX 1.4 on DRI2
this squashes 4 commits
(cherry picked from commit ad5c0d9efa47476ed5cf75c82265c73919e468b4)
(cherry picked from commit cb54cf1b3e8c4109541cfb698542c00f2473e731)
(cherry picked from commit 4c6bfa2c09ae2b0cffdf9211a6dfbcaefe0366b5)
(cherry picked from commit 9bf2ff4faf730913de3073f346646a8727be41d4)
---
glx/glxcmds.c | 12 ++++++++----
glx/glxdri2.c | 12 ++++++++++++
glx/glxext.c | 8 +++++++-
glx/glxscreens.c | 15 ++++++++++++---
glx/glxscreens.h | 11 +++++++++++
glx/glxserver.h | 3 +++
glx/indirect_texture_compression.c | 4 ++--
include/protocol-versions.h | 2 +-
8 files changed, 56 insertions(+), 11 deletions(-)
diff --git a/glx/glxcmds.c b/glx/glxcmds.c
index b1061a8..ba4c123 100644
--- a/glx/glxcmds.c
+++ b/glx/glxcmds.c
@@ -50,7 +50,6 @@
#include "indirect_dispatch.h"
#include "indirect_table.h"
#include "indirect_util.h"
-#include "protocol-versions.h"
static int
validGlxScreen(ClientPtr client, int screen, __GLXscreen **pGlxScreen, int *err)
@@ -739,8 +738,8 @@ int __glXDisp_QueryVersion(__GLXclientState *cl, GLbyte *pc)
** client if it wants to work with older clients; however, in this
** implementation the server just returns its version number.
*/
- reply.majorVersion = SERVER_GLX_MAJOR_VERSION;
- reply.minorVersion = SERVER_GLX_MINOR_VERSION;
+ reply.majorVersion = glxMajorVersion;
+ reply.minorVersion = glxMinorVersion;
reply.length = 0;
reply.type = X_Reply;
reply.sequenceNumber = client->sequence;
@@ -2360,6 +2359,7 @@ int __glXDisp_QueryServerString(__GLXclientState *cl, GLbyte *pc)
char *buf;
__GLXscreen *pGlxScreen;
int err;
+ char ver_str[16];
if (!validGlxScreen(client, req->screen, &pGlxScreen, &err))
return err;
@@ -2369,7 +2369,11 @@ int __glXDisp_QueryServerString(__GLXclientState *cl, GLbyte *pc)
ptr = pGlxScreen->GLXvendor;
break;
case GLX_VERSION:
- ptr = pGlxScreen->GLXversion;
+ /* Return to the server version rather than the screen version
+ * to prevent confusion when they do not match.
+ */
+ snprintf(ver_str, 16, "%d.%d", glxMajorVersion, glxMinorVersion);
+ ptr = ver_str;
break;
case GLX_EXTENSIONS:
ptr = pGlxScreen->GLXextensions;
diff --git a/glx/glxdri2.c b/glx/glxdri2.c
index ed7fb4c..ed7dc80 100644
--- a/glx/glxdri2.c
+++ b/glx/glxdri2.c
@@ -685,6 +685,18 @@ __glXDRIscreenProbe(ScreenPtr pScreen)
screen->base.GLXextensions);
}
+ /* We're going to assume (perhaps incorrectly?) that all DRI2-enabled
+ * drivers support the required extensions for GLX 1.4. The extensions
+ * we're assuming are:
+ *
+ * - GLX_SGI_make_current_read (1.3)
+ * - GLX_SGIX_fbconfig (1.3)
+ * - GLX_SGIX_pbuffer (1.3)
+ * - GLX_ARB_multisample (1.4)
+ */
+ screen->base.GLXmajor = 1;
+ screen->base.GLXminor = 4;
+
screen->enterVT = pScrn->EnterVT;
pScrn->EnterVT = glxDRIEnterVT;
screen->leaveVT = pScrn->LeaveVT;
diff --git a/glx/glxext.c b/glx/glxext.c
index 19d70d4..9f9c0ed 100644
--- a/glx/glxext.c
+++ b/glx/glxext.c
@@ -360,12 +360,18 @@ void GlxExtensionInit(void)
pScreen = screenInfo.screens[i];
for (p = __glXProviderStack; p != NULL; p = p->next) {
- if (p->screenProbe(pScreen) != NULL) {
+ __GLXscreen *glxScreen;
+
+ glxScreen = p->screenProbe(pScreen);
+ if (glxScreen != NULL) {
+ if (glxScreen->GLXminor < glxMinorVersion)
+ glxMinorVersion = glxScreen->GLXminor;
LogMessage(X_INFO,
"GLX: Initialized %s GL provider for screen %d\n",
p->name, i);
break;
}
+
}
if (!p)
diff --git a/glx/glxscreens.c b/glx/glxscreens.c
index 7d29d31..674e2c6 100644
--- a/glx/glxscreens.c
+++ b/glx/glxscreens.c
@@ -42,6 +42,7 @@
#include "glxserver.h"
#include "glxutil.h"
#include "glxext.h"
+#include "protocol-versions.h"
static int glxScreenPrivateKeyIndex;
static DevPrivateKey glxScreenPrivateKey = &glxScreenPrivateKeyIndex;
@@ -162,7 +163,8 @@ static const char GLServerExtensions[] =
** supported across all screens in a multi-screen system.
*/
static char GLXServerVendorName[] = "SGI";
-static char GLXServerVersion[] = "1.2";
+unsigned glxMajorVersion = SERVER_GLX_MAJOR_VERSION;
+unsigned glxMinorVersion = SERVER_GLX_MINOR_VERSION;
static char GLXServerExtensions[] =
"GLX_ARB_multisample "
"GLX_EXT_visual_info "
@@ -378,9 +380,17 @@ void __glXScreenInit(__GLXscreen *pGlxScreen, ScreenPtr pScreen)
pGlxScreen->pScreen = pScreen;
pGlxScreen->GLextensions = xstrdup(GLServerExtensions);
pGlxScreen->GLXvendor = xstrdup(GLXServerVendorName);
- pGlxScreen->GLXversion = xstrdup(GLXServerVersion);
pGlxScreen->GLXextensions = xstrdup(GLXServerExtensions);
+ /* All GLX providers must support all of the functionality required for at
+ * least GLX 1.2. If the provider supports a higher version, the GLXminor
+ * version can be changed in the provider's screen-probe routine. For
+ * most providers, the screen-probe routine is the caller of this
+ * function.
+ */
+ pGlxScreen->GLXmajor = 1;
+ pGlxScreen->GLXminor = 2;
+
pGlxScreen->CloseScreen = pScreen->CloseScreen;
pScreen->CloseScreen = glxCloseScreen;
pGlxScreen->DestroyWindow = pScreen->DestroyWindow;
@@ -454,7 +464,6 @@ void __glXScreenInit(__GLXscreen *pGlxScreen, ScreenPtr pScreen)
void __glXScreenDestroy(__GLXscreen *screen)
{
xfree(screen->GLXvendor);
- xfree(screen->GLXversion);
xfree(screen->GLXextensions);
xfree(screen->GLextensions);
}
diff --git a/glx/glxscreens.h b/glx/glxscreens.h
index 3c1bdd4..bff4363 100644
--- a/glx/glxscreens.h
+++ b/glx/glxscreens.h
@@ -161,6 +161,17 @@ struct __GLXscreen {
char *GLXversion;
char *GLXextensions;
+ /**
+ * \name GLX version supported by this screen.
+ *
+ * Since the GLX version advertised by the server is for the whole server,
+ * the GLX protocol code uses the minimum version supported on all screens.
+ */
+ /*@{*/
+ unsigned GLXmajor;
+ unsigned GLXminor;
+ /*@}*/
+
Bool (*CloseScreen)(int index, ScreenPtr pScreen);
Bool (*DestroyWindow)(WindowPtr pWindow);
};
diff --git a/glx/glxserver.h b/glx/glxserver.h
index 4aa8c2e..80f1b28 100644
--- a/glx/glxserver.h
+++ b/glx/glxserver.h
@@ -248,4 +248,7 @@ extern int __glXImageSize(GLenum format, GLenum type,
GLint imageHeight, GLint rowLength, GLint skipImages, GLint skipRows,
GLint alignment);
+extern unsigned glxMajorVersion;
+extern unsigned glxMinorVersion;
+
#endif /* !__GLX_server_h__ */
diff --git a/glx/indirect_texture_compression.c b/glx/indirect_texture_compression.c
index 25c6eb3..5f44d7b 100644
--- a/glx/indirect_texture_compression.c
+++ b/glx/indirect_texture_compression.c
@@ -52,7 +52,7 @@ int __glXDisp_GetCompressedTexImageARB(struct __GLXclientStateRec *cl, GLbyte *p
const GLenum target = *(GLenum *)(pc + 0);
const GLint level = *(GLint *)(pc + 4);
GLint compsize = 0;
- char *answer, answerBuffer[200];
+ char *answer = NULL, answerBuffer[200];
CALL_GetTexLevelParameteriv(GET_DISPATCH(), (target, level, GL_TEXTURE_COMPRESSED_IMAGE_SIZE, &compsize));
@@ -92,7 +92,7 @@ int __glXDispSwap_GetCompressedTexImageARB(struct __GLXclientStateRec *cl, GLbyt
const GLenum target = (GLenum) bswap_32( *(int *)(pc + 0) );
const GLint level = (GLint ) bswap_32( *(int *)(pc + 4) );
GLint compsize = 0;
- char *answer, answerBuffer[200];
+ char *answer = NULL, answerBuffer[200];
CALL_GetTexLevelParameteriv(GET_DISPATCH(), (target, level, GL_TEXTURE_COMPRESSED_IMAGE_SIZE, &compsize));
diff --git a/include/protocol-versions.h b/include/protocol-versions.h
index da9770c..d688c66 100644
--- a/include/protocol-versions.h
+++ b/include/protocol-versions.h
@@ -61,7 +61,7 @@
/* GLX */
#define SERVER_GLX_MAJOR_VERSION 1
-#define SERVER_GLX_MINOR_VERSION 2
+#define SERVER_GLX_MINOR_VERSION 4
/* Xinerama */
#define SERVER_PANORAMIX_MAJOR_VERSION 1
--
1.6.5.rc2

View File

@ -1,26 +0,0 @@
From 25a0107768c9f25e8edc5e423ca8b1d0813f2d04 Mon Sep 17 00:00:00 2001
From: Adam Jackson <ajax@redhat.com>
Date: Tue, 24 Nov 2009 13:38:46 -0500
Subject: [PATCH] Enable GLX 1.4 for swrast
---
glx/glxdriswrast.c | 3 +++
1 files changed, 3 insertions(+), 0 deletions(-)
diff --git a/glx/glxdriswrast.c b/glx/glxdriswrast.c
index 44f658f..20f9f90 100644
--- a/glx/glxdriswrast.c
+++ b/glx/glxdriswrast.c
@@ -510,6 +510,9 @@ __glXDRIscreenProbe(ScreenPtr pScreen)
__glXScreenInit(&screen->base, pScreen);
+ screen->base.GLXmajor = 1;
+ screen->base.GLXminor = 4;
+
LogMessage(X_INFO,
"AIGLX: Loaded and initialized %s\n", filename);
--
1.6.5.2

View File

@ -1,35 +0,0 @@
From 8875112f5c57ec5d575e717c5638fbc919145efb Mon Sep 17 00:00:00 2001
From: Adam Jackson <ajax@redhat.com>
Date: Mon, 16 Nov 2009 18:01:26 -0500
Subject: [PATCH] configure: Only link against libcrypto
openssl.pc will link you against libssl, which we don't need, and which
brings in another seven libraries we also don't need. This is still
bogus, we're really only trying to get a SHA1 routine, we could link it
statically and be even better off.
---
configure.ac | 6 ------
1 files changed, 0 insertions(+), 6 deletions(-)
diff --git a/configure.ac b/configure.ac
index f69f97e..254d33d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1297,14 +1297,8 @@ if test "x$SHA1_LIB" = "x" ; then
fi
if test "x$SHA1_LIB" = "x" ; then
- PKG_CHECK_EXISTS([OPENSSL], [openssl], [HAVE_OPENSSL_PKC=yes],
- [HAVE_OPENSSL_PKC=no])
- if test "x$HAVE_OPENSSL_PKC" = xyes; then
- REQUIRED_LIBS="$REQUIRED_LIBS openssl"
- else
AC_CHECK_LIB([crypto], [SHA1_Init], [SHA1_LIB="-lcrypto"],
[AC_MSG_ERROR([OpenSSL must be installed in order to build the X server.])])
- fi
fi
PKG_CHECK_MODULES([XSERVERCFLAGS], [$REQUIRED_MODULES $REQUIRED_LIBS])
--
1.6.5.2

View File

@ -0,0 +1,37 @@
From 57a188877b0472edb12bdf707b1550abbeb85af8 Mon Sep 17 00:00:00 2001
From: Fedora X Ninjas <x@fedoraproject.org>
Date: Wed, 17 Feb 2010 11:12:36 +1000
Subject: [PATCH] Stick giant warning into logfiles about udev configuration changes.
Signed-off-by: Fedora X Ninjas <x@fedoraproject.org>
---
hw/xfree86/common/xf86Config.c | 13 +++++++++++++
1 files changed, 13 insertions(+), 0 deletions(-)
diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c
index 132e8bc..b1722cd 100644
--- a/hw/xfree86/common/xf86Config.c
+++ b/hw/xfree86/common/xf86Config.c
@@ -1472,6 +1472,19 @@ checkCoreInputDevices(serverLayoutPtr servlayoutp, Bool implicitLayout)
"input devices.\n\tIf no devices become available, "
"reconfigure %s or disable AutoAddDevices.\n",
config_backend, config_backend);
+
+ xf86Msg(X_INFO, "\n"
+ "***************************************************************\n"
+ "***************************************************************\n"
+ "** OpenELEC.tv switched to udev-based device detection with **\n"
+ "** xorg-x11-server-1.7.99.901-1. Custom HAL configuration **\n"
+ "** stored in /etc/hal/fdi/policy will not be seen by this **\n"
+ "** server version. If you have such configuration you will **\n"
+ "** need to update it to the new format. **\n"
+ "** For more information, see the Fedora wiki page **\n"
+ "** https://fedoraproject.org/wiki/Input_device_configuration **\n"
+ "***************************************************************\n"
+ "***************************************************************\n");
#else
xf86Msg(X_INFO, "Hotplugging is disabled and no input devices were configured.\n"
"\tTry disabling AllowEmptyInput.\n");
--
1.6.6.1

View File

@ -1,38 +0,0 @@
diff --git a/os/log.c b/os/log.c
index 0860847..2c46f1a 100644
--- a/os/log.c
+++ b/os/log.c
@@ -255,6 +255,33 @@ LogVWrite(int verb, const char *f, va_list args)
static char tmpBuffer[1024];
int len = 0;
+ struct timeval time;
+ time_t tv_sec;
+ suseconds_t tv_usec;
+ static Bool first = TRUE;
+ static time_t start_tv_sec;
+ static suseconds_t start_usec;
+ int diff_sec, diff_usec;
+
+ gettimeofday(&time, NULL);
+ tv_sec = time.tv_sec;
+ tv_usec = time.tv_usec;
+ if (first == TRUE) {
+ start_tv_sec = tv_sec;
+ start_usec = tv_usec;
+ first = FALSE;
+ }
+ diff_sec = (int)difftime(tv_sec, start_tv_sec);
+ diff_usec = (tv_usec - start_usec);
+ if (diff_usec < 0) {
+ diff_sec--;
+ diff_usec += 1000000;
+ }
+ sprintf(tmpBuffer, "[%d sec: %06d usec]", diff_sec , diff_usec);
+ len = strlen(tmpBuffer);
+ if (logFile)
+ fwrite(tmpBuffer, len, 1, logFile);
+
/*
* Since a va_list can only be processed once, write the string to a
* buffer, and then write the buffer out to the appropriate output

View File

@ -0,0 +1,53 @@
diff --git a/hw/xfree86/os-support/linux/lnx_init.c b/hw/xfree86/os-support/linux/lnx_init.c
index 297e7a6..8671231 100644
--- a/hw/xfree86/os-support/linux/lnx_init.c
+++ b/hw/xfree86/os-support/linux/lnx_init.c
@@ -42,6 +42,7 @@ static Bool KeepTty = FALSE;
static int VTnum = -1;
static Bool VTSwitch = TRUE;
static Bool ShareVTs = FALSE;
+Bool NoHwAccess = FALSE;
static int activeVT = -1;
static int vtPermSave[4];
@@ -377,6 +378,11 @@ xf86ProcessArgument(int argc, char *argv[], int i)
ShareVTs = TRUE;
return(1);
}
+ if (!strcmp(argv[i], "-nohwaccess"))
+ {
+ NoHwAccess = TRUE;
+ return(1);
+ }
if ((argv[i][0] == 'v') && (argv[i][1] == 't'))
{
if (sscanf(argv[i], "vt%2d", &VTnum) == 0)
@@ -397,5 +403,6 @@ xf86UseMsg(void)
ErrorF("-keeptty ");
ErrorF("don't detach controlling tty (for debugging only)\n");
ErrorF("-novtswitch don't immediately switch to new VT\n");
+ ErrorF("-nohwaccess don't access hardware ports directly\n");
ErrorF("-sharevts share VTs with another X server\n");
}
diff --git a/hw/xfree86/os-support/linux/lnx_video.c b/hw/xfree86/os-support/linux/lnx_video.c
index 26a1742..c34bb85 100644
--- a/hw/xfree86/os-support/linux/lnx_video.c
+++ b/hw/xfree86/os-support/linux/lnx_video.c
@@ -50,6 +50,7 @@
#define MAP_FAILED ((void *)-1)
#endif
+extern Bool NoHwAccess;
static Bool ExtendedEnabled = FALSE;
#ifdef __ia64__
@@ -496,6 +497,9 @@ xf86EnableIO(void)
int fd;
unsigned int ioBase_phys;
#endif
+ /* Fake it... */
+ if (NoHwAccess)
+ return TRUE;
if (ExtendedEnabled)
return TRUE;

View File

@ -1 +1 @@
http://xorg.freedesktop.org/archive/individual/xserver/xorg-server-1.7.5.tar.bz2
http://sources.openelec.tv/svn/xorg-server-20100309.tar.bz2