[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

xorg-server: Changes to 'ubuntu'



 debian/changelog                                   |   10 
 debian/patches/104_psb_auto.patch                  |   30 -
 debian/patches/141_improved_driver_selection.patch |  338 +++++++++++++++++++++
 debian/patches/142_psb_auto.patch                  |   33 ++
 debian/patches/series                              |    3 
 5 files changed, 381 insertions(+), 33 deletions(-)

New commits:
commit c036f459cc805a3563b43745282008fcf623a714
Author: Timo Aaltonen <tjaalton@cc.hut.fi>
Date:   Sat Sep 6 11:17:05 2008 +0300

    141_improved_driver_selection.patch
    
    - Allow returning multiple drivers to try for a given PCI id.
      Also includes support for fallback drivers, but only when
      not using an xorg.conf.
    
    142_psb_auto.patch
    - Renamed, refreshed.

diff --git a/debian/changelog b/debian/changelog
index f3ff465..755b575 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,8 +1,14 @@
 xorg-server (2:1.5.0-1ubuntu1) UNRELEASED; urgency=low
 
   * Merge with Debian experimental.
-
- -- Timo Aaltonen <tepsipakki@ubuntu.com>  Thu, 04 Sep 2008 11:37:51 +0300
+  * 141_improved_driver_selection.patch
+    - Allow returning multiple drivers to try for a given PCI id.
+      Also includes support for fallback drivers, but only when
+      not using an xorg.conf.
+  * 142_psb_auto.patch
+    - Renamed, refreshed.
+
+ -- Timo Aaltonen <tepsipakki@ubuntu.com>  Sat, 06 Sep 2008 11:08:37 +0300
 
 xorg-server (2:1.5.0-1) experimental; urgency=low
 
diff --git a/debian/patches/104_psb_auto.patch b/debian/patches/104_psb_auto.patch
deleted file mode 100644
index d272faa..0000000
--- a/debian/patches/104_psb_auto.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-This patch adds autodetection support for the Poulsbo ("psb") driver
-needed by moblin.org for the Intel mobile chipset.  Rather than add an
-else if, I restructured things with a case statement to make it conform
-in style to the savage driver section.
-
-Bryce Harrington  23-Aug-2007
-
-Index: xorg-server/hw/xfree86/common/xf86AutoConfig.c
-===================================================================
---- xorg-server.orig/hw/xfree86/common/xf86AutoConfig.c	2008-06-18 10:28:16.000000000 +0300
-+++ xorg-server/hw/xfree86/common/xf86AutoConfig.c	2008-06-18 12:06:33.000000000 +0300
-@@ -158,9 +158,15 @@
- 	case 0x102c:		    return "chips";
- 	case 0x1013:		    return "cirrus";
- 	case 0x8086:
--	    if ((dev->device_id == 0x00d1) || (dev->device_id == 0x7800))
--		return "i740";
--	    else return "intel";
-+            switch (dev->device_id)
-+            {
-+                case 0x00d1: case 0x7800:
-+                    return "i740";
-+                case 0x8108:
-+                    return "psb";
-+                default:
-+                    return "intel";
-+            }
- 	case 0x102b:		    return "mga";
- 	case 0x10c8:		    return "neomagic";
- 	case 0x105d:		    return "i128";
diff --git a/debian/patches/141_improved_driver_selection.patch b/debian/patches/141_improved_driver_selection.patch
new file mode 100644
index 0000000..7b6fd6c
--- /dev/null
+++ b/debian/patches/141_improved_driver_selection.patch
@@ -0,0 +1,338 @@
+From: Alan Coopersmith <alan.coopersmith@sun.com>
+Date: Tue, 8 Jul 2008 00:08:01 +0000 (-0700)
+Subject: Improved driver selection when autoconfiguring driver without xorg.conf
+X-Git-Url: http://gitweb.freedesktop.org/?p=xorg/xserver.git;a=commitdiff;h=5e847c1d4fc30a0d263a861a76982660f11998cd
+
+Improved driver selection when autoconfiguring driver without xorg.conf
+
+- Allow returning multiple drivers to try for a given PCI id (for instance,
+  try "geode" then "amd" for AMD Geode hardware)
+- On Solaris, use VIS_GETIDENTIFIER ioctl as well as PCI id to choose drivers
+- Use wsfb instead of fbdev as a fallback on non-Linux SPARC platforms
+---
+
+--- a/hw/xfree86/common/xf86AutoConfig.c
++++ b/hw/xfree86/common/xf86AutoConfig.c
+@@ -41,6 +41,11 @@
+ #include "xf86_OSlib.h"
+ #include "dirent.h"
+ 
++#ifdef sun
++# include <sys/visual_io.h>
++# include <ctype.h>
++#endif
++
+ /* Sections for the default built-in configuration. */
+ 
+ #define BUILTIN_DEVICE_NAME \
+@@ -79,11 +84,8 @@
+ 
+ static const char **builtinConfig = NULL;
+ static int builtinLines = 0;
+-static const char *deviceList[] = {
+-	"fbdev",
+-	"vesa",
+-	NULL
+-};
++
++static void listPossibleVideoDrivers(char *matches[], int nmatches);
+ 
+ /*
+  * A built-in config file is stored as an array of strings, with each string
+@@ -135,87 +137,91 @@ AppendToConfig(const char *s)
+     AppendToList(s, &builtinConfig, &builtinLines);
+ }
+ 
+-static const char *
+-videoPtrToDriverName(struct pci_device *dev)
++static int
++videoPtrToDriverList(struct pci_device *dev,
++		     char *returnList[], int returnListMax)
+ {
+     /*
+      * things not handled yet:
+      * cyrix/nsc.  should be merged into geode anyway.
+      * xgi.
+      */
++    int i;
++    /* Add more entries here if we ever return more than 4 drivers for
++       any device */
++    char *driverList[5] = { NULL, NULL, NULL, NULL, NULL };
+ 
+     switch (dev->vendor_id)
+     {
+ 	case 0x1022:
+-		if (dev->device_id == 0x2081)
+-			return "geode";
+-		else
+-			return NULL;
+-	case 0x1142:		    return "apm";
+-	case 0xedd8:		    return "ark";
+-	case 0x1a03:		    return "ast";
+-	case 0x1002:		    return "ati";
+-	case 0x102c:		    return "chips";
+-	case 0x1013:		    return "cirrus";
++	    if (dev->device_id == 0x2081) {
++		driverList[0] = "geode";
++		driverList[1] = "amd";
++	    }
++	    break;
++	case 0x1142:		    driverList[0] = "apm"; break;
++	case 0xedd8:		    driverList[0] = "ark"; break;
++	case 0x1a03:		    driverList[0] = "ast"; break;
++	case 0x1002:		    driverList[0] = "ati"; break;
++	case 0x102c:		    driverList[0] = "chips"; break;
++	case 0x1013:		    driverList[0] = "cirrus"; break;
+ 	case 0x8086:
+-	    if ((dev->device_id == 0x00d1) || (dev->device_id == 0x7800))
+-		return "i740";
+-	    else return "intel";
+-	case 0x102b:		    return "mga";
+-	case 0x10c8:		    return "neomagic";
+-	case 0x105d:		    return "i128";
+-	case 0x10de: case 0x12d2:   return "nv";
+-	case 0x1163:		    return "rendition";
++	    if ((dev->device_id == 0x00d1) || (dev->device_id == 0x7800)) {
++		driverList[0] = "i740";
++	    } else {
++		driverList[0] = "intel";
++		driverList[1] = "i810";
++	    }
++	    break;
++	case 0x102b:		    driverList[0] = "mga";	break;
++	case 0x10c8:		    driverList[0] = "neomagic"; break;
++	case 0x105d:		    driverList[0] = "i128";	break;
++	case 0x10de: case 0x12d2:   driverList[0] = "nv";	break;
++	case 0x1163:		    driverList[0] = "rendition"; break;
+ 	case 0x5333:
+ 	    switch (dev->device_id)
+ 	    {
+ 		case 0x88d0: case 0x88d1: case 0x88f0: case 0x8811:
+ 		case 0x8812: case 0x8814: case 0x8901:
+-		    return "s3";
++		    driverList[0] = "s3"; break;
+ 		case 0x5631: case 0x883d: case 0x8a01: case 0x8a10:
+ 		case 0x8c01: case 0x8c03: case 0x8904: case 0x8a13:
+-		    return "s3virge";
++		    driverList[0] = "s3virge"; break;
+ 		default:
+-		    return "savage";
++		    driverList[0] = "savage"; break;
+ 	    }
+-	case 0x1039:		    return "sis";
+-	case 0x126f:		    return "siliconmotion";
++	    break;
++	case 0x1039:		    driverList[0] = "sis";	break;
++	case 0x126f:		    driverList[0] = "siliconmotion"; break;
+ 	case 0x121a:
+ 	    if (dev->device_id < 0x0003)
+-	        return "voodoo";
++	        driverList[0] = "voodoo";
+ 	    else
+-	        return "tdfx";
+-	case 0x3d3d:		    return "glint";
+-	case 0x1023:		    return "trident";
+-	case 0x100c:		    return "tseng";
+-	case 0x1106:		    return "openchrome";
+-	case 0x15ad:		    return "vmware";
++	        driverList[0] = "tdfx";
++	    break;
++	case 0x3d3d:		    driverList[0] = "glint";	break;
++	case 0x1023:		    driverList[0] = "trident"; break;
++	case 0x100c:		    driverList[0] = "tseng";	break;
++	case 0x1106:		    driverList[0] = "openchrome"; break;
++	case 0x15ad:		    driverList[0] = "vmware";	break;
+ 	default: break;
+     }
+-    return NULL;
++    for (i = 0; (i < returnListMax) && (driverList[i] != NULL); i++) {
++	returnList[i] = xnfstrdup(driverList[i]);
++    }
++    return i;	/* Number of entries added */
+ }
+ 
+ Bool
+ xf86AutoConfig(void)
+ {
+-    const char **p;
++    char *deviceList[20];
++    char **p;
++    const char **cp;
+     char buf[1024];
+-    const char *driver = NULL;
+     ConfigStatus ret;
+ 
+-    driver = chooseVideoDriver();
+-
+-    if (driver) {
+-	snprintf(buf, sizeof(buf), BUILTIN_DEVICE_SECTION_PRE,
+-		 driver, 0, driver);
+-	AppendToConfig(buf);
+-	ErrorF("New driver is \"%s\"\n", driver);
+-	buf[0] = '\t';
+-	AppendToConfig(BUILTIN_DEVICE_SECTION_POST);
+-	snprintf(buf, sizeof(buf), BUILTIN_SCREEN_SECTION,
+-		 driver, 0, driver, 0);
+-	AppendToConfig(buf);
+-    }
++    listPossibleVideoDrivers(deviceList, 20);
+ 
+     for (p = deviceList; *p; p++) {
+ 	snprintf(buf, sizeof(buf), BUILTIN_DEVICE_SECTION, *p, 0, *p);
+@@ -225,23 +231,23 @@ xf86AutoConfig(void)
+     }
+ 
+     AppendToConfig(BUILTIN_LAYOUT_SECTION_PRE);
+-    if (driver) {
+-	snprintf(buf, sizeof(buf), BUILTIN_LAYOUT_SCREEN_LINE, driver, 0);
+-	AppendToConfig(buf);
+-    }
+     for (p = deviceList; *p; p++) {
+ 	snprintf(buf, sizeof(buf), BUILTIN_LAYOUT_SCREEN_LINE, *p, 0);
+ 	AppendToConfig(buf);
+     }
+     AppendToConfig(BUILTIN_LAYOUT_SECTION_POST);
+ 
++    for (p = deviceList; *p; p++) {
++	xfree(*p);
++    }
++
+     xf86MsgVerb(X_DEFAULT, 0,
+ 		"Using default built-in configuration (%d lines)\n",
+ 		builtinLines);
+ 
+     xf86MsgVerb(X_DEFAULT, 3, "--- Start of built-in configuration ---\n");
+-    for (p = builtinConfig; *p; p++)
+-	xf86ErrorFVerb(3, "\t%s", *p);
++    for (cp = builtinConfig; *cp; cp++)
++	xf86ErrorFVerb(3, "\t%s", *cp);
+     xf86MsgVerb(X_DEFAULT, 3, "--- End of built-in configuration ---\n");
+     
+     xf86setBuiltinConfig(builtinConfig);
+@@ -416,17 +422,51 @@ matchDriverFromFiles (char** matches, ui
+ }
+ #endif /* __linux__ */
+ 
+-char*
+-chooseVideoDriver(void)
++static void
++listPossibleVideoDrivers(char *matches[], int nmatches)
+ {
+     struct pci_device * info = NULL;
+     struct pci_device_iterator *iter;
+-    char *chosen_driver = NULL;
+     int i;
+-    char *matches[20]; /* If we have more than 20 drivers we're in trouble */
+     
+-    for (i=0 ; i<20 ; i++)
++    for (i = 0 ; i < nmatches ; i++) {
+         matches[i] = NULL;
++    }
++    i = 0;
++
++#ifdef sun
++    /* Check for driver type based on /dev/fb type and if valid, use
++       it instead of PCI bus probe results */
++    if (xf86Info.consoleFd >= 0) {
++	struct vis_identifier   visid;
++	const char *cp;
++
++	if (ioctl(xf86Info.consoleFd, VIS_GETIDENTIFIER, &visid) >= 0) {
++	    xf86Msg(X_PROBED, "console driver: %s\n", visid.name);
++
++	    /* Special case from before the general case was set */
++	    if (strcmp(visid.name, "NVDAnvda") == 0) {
++		matches[i++] = xnfstrdup("nvidia");
++	    }
++
++	    /* General case - split into vendor name (initial all-caps
++	       prefix) & driver name (rest of the string). */
++	    if (strcmp(visid.name, "SUNWtext") != 0) {
++		for (cp = visid.name; (*cp != '\0') && isupper(*cp); cp++) {
++		    /* find end of all uppercase vendor section */
++		}
++		if ((cp != visid.name) && (*cp != '\0')) {
++		    char *driverName = xnfstrdup(cp);
++		    char *vendorName = xnfstrdup(visid.name);
++		    vendorName[cp - visid.name] = '\0';
++
++		    matches[i++] = vendorName;
++		    matches[i++] = driverName;
++		}
++	    }
++	}
++    }
++#endif
+ 
+     /* Find the primary device, and get some information about it. */
+     iter = pci_slot_match_iterator_create(NULL);
+@@ -447,31 +487,52 @@ chooseVideoDriver(void)
+     }
+ #endif /* __linux__ */
+ 
+-    /* TODO Handle multiple drivers claiming to support the same PCI ID */
+-    if (matches[0]) {
+-        chosen_driver = matches[0];
+-    } else {
+-	if (info != NULL)
+-	    chosen_driver = videoPtrToDriverName(info);
+-	if (chosen_driver == NULL) {
+-#if defined  __i386__ || defined __amd64__ || defined __x86_64__ || defined __hurd__
+-	    chosen_driver = "vesa";
+-#elif defined __sparc__
+-	    chosen_driver = "sunffb";
++    for (i = 0; (i < nmatches) && (matches[i]); i++) {
++	/* find end of matches list */
++    }
++
++    if ((info != NULL) && (i < nmatches)) {
++	i += videoPtrToDriverList(info, &(matches[i]), nmatches - i);
++    }
++
++    /* Fallback to platform default hardware */
++    if (i < (nmatches - 1)) {
++#if defined(__i386__) || defined(__amd64__) || defined(__hurd__)
++	matches[i++] = xnfstrdup("vesa");
++#elif defined(__sparc__) && !defined(sun)
++	matches[i++] = xnfstrdup("sunffb");
++#endif
++    }
++
++    /* Fallback to platform default frame buffer driver */
++    if (i < (nmatches - 1)) {
++#if !defined(__linux__) && defined(__sparc__)
++	matches[i++] = xnfstrdup("wsfb");
+ #else
+-	    chosen_driver = "fbdev";
++	matches[i++] = xnfstrdup("fbdev");
+ #endif
+-	}
+     }
++}
++
++char*
++chooseVideoDriver(void)
++{
++    char *chosen_driver = NULL;
++    int i;
++    char *matches[20]; /* If we have more than 20 drivers we're in trouble */
+ 
+-    xf86Msg(X_DEFAULT, "Matched %s for the autoconfigured driver\n", chosen_driver);
++    listPossibleVideoDrivers(matches, 20);
+ 
+-    i = 0;
+-    while (matches[i]) {
++    /* TODO Handle multiple drivers claiming to support the same PCI ID */
++    chosen_driver = matches[0];
++
++    xf86Msg(X_DEFAULT, "Matched %s for the autoconfigured driver\n",
++	    chosen_driver);
++
++    for (i = 0; matches[i] ; i++) {
+         if (matches[i] != chosen_driver) {
+             xfree(matches[i]);
+         }
+-        i++;
+     }
+ 
+     return chosen_driver;
diff --git a/debian/patches/142_psb_auto.patch b/debian/patches/142_psb_auto.patch
new file mode 100644
index 0000000..432f013
--- /dev/null
+++ b/debian/patches/142_psb_auto.patch
@@ -0,0 +1,33 @@
+This patch adds autodetection support for the Poulsbo ("psb") driver
+needed by moblin.org for the Intel mobile chipset.  Rather than add an
+else if, I restructured things with a case statement to make it conform
+in style to the savage driver section.
+
+Bryce Harrington  23-Aug-2007
+
+Index: xorg-server/hw/xfree86/common/xf86AutoConfig.c
+===================================================================
+--- xorg-server.orig/hw/xfree86/common/xf86AutoConfig.c	2008-09-02 10:47:16.000000000 +0300
++++ xorg-server/hw/xfree86/common/xf86AutoConfig.c	2008-09-02 10:58:57.000000000 +0300
+@@ -166,11 +166,16 @@
+ 	case 0x102c:		    driverList[0] = "chips"; break;
+ 	case 0x1013:		    driverList[0] = "cirrus"; break;
+ 	case 0x8086:
+-	    if ((dev->device_id == 0x00d1) || (dev->device_id == 0x7800)) {
+-		driverList[0] = "i740";
+-	    } else {
+-		driverList[0] = "intel";
+-		driverList[1] = "i810";
++	    switch (dev->device_id)
++	    {
++		case 0x00d1: case 0x7800:
++		    driverList[0] = "i740"; break;
++		case 0x8108:
++		    driverList[0] = "psb"; break;
++		default:
++		    driverList[0] = "intel";
++		    driverList[1] = "i810";
++		    break;
+ 	    }
+ 	    break;
+ 	case 0x102b:		    driverList[0] = "mga";	break;
diff --git a/debian/patches/series b/debian/patches/series
index e80d9be..8a54e15 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -5,7 +5,6 @@
 101_fedora_xserver-1.3.0-document-fontpath-correctly.patch
 102_ubuntu_sharevts_load_cpu.patch
 103_inputproto_1.4.3_is_fine.patch
-104_psb_auto.patch
 107_fedora_dont_backfill_bg_none.patch
 110_fedora_no_move_damage.patch
 121_only_switch_vt_when_active.diff
@@ -16,3 +15,5 @@
 138_xi_expose_enable_disabledevice.patch
 139_xi_protect_against_null_handlers.patch
 140_quell_acpi_errmsgs.patch
+141_improved_driver_selection.patch
+142_psb_auto.patch


Reply to: