1
0

Updating link to change in openSUSE:Factory/xorg-x11-server revision 159.0

OBS-URL: https://build.opensuse.org/package/show/X11:XOrg/xorg-x11-server?expand=0&rev=ff0e53802bf053af91ac8295d5f61bce
This commit is contained in:
OBS User buildservice-autocommit 2010-03-26 15:22:08 +00:00 committed by Git OBS Bridge
parent b176db4551
commit 9d61579fe2
3 changed files with 109 additions and 76 deletions

View File

@ -1,97 +1,123 @@
--- hw/xfree86/common/xf86AutoConfig.c commit 4da6cffa8b6169595ea447cc53dfab857c04db04
+++ hw/xfree86/common/xf86AutoConfig.c Author: h_root <root@hilbert.suse.de>
@@ -539,34 +541,13 @@ Date: Thu Mar 25 18:32:04 2010 +0100
}
when doing driver autoconfiguration with some parts of the config
file present but no driver set (e.g. only input configuration)
fix the case that we may have multiple drivers to try.
create a screen section for each driver and let them be tried
in a row
diff --git a/hw/xfree86/common/xf86AutoConfig.c b/hw/xfree86/common/xf86AutoConfig.c
index 7f4ada8..56f7deb 100644
--- a/hw/xfree86/common/xf86AutoConfig.c
+++ b/hw/xfree86/common/xf86AutoConfig.c
@@ -546,10 +546,41 @@ chooseVideoDriver(void)
return chosen_driver;
} }
-static char* +
-chooseVideoDriver(void) +/* copy a screen section and enter the desired driver
-{ + * and insert it at i in the list of screens */
- char *chosen_driver = NULL; +static Bool
- int i; +copyScreen(confScreenPtr oscreen, GDevPtr odev, int i, char *driver)
- char *matches[20]; /* If we have more than 20 drivers we're in trouble */ +{
- + GDevPtr cptr = NULL;
- listPossibleVideoDrivers(matches, 20); +
- + xf86ConfigLayout.screens[i].screen = xnfcalloc(1, sizeof(confScreenRec));
- /* TODO Handle multiple drivers claiming to support the same PCI ID */ + if(!xf86ConfigLayout.screens[i].screen)
- chosen_driver = matches[0]; + return FALSE;
- + memcpy(xf86ConfigLayout.screens[i].screen, oscreen, sizeof(confScreenRec));
- xf86Msg(X_DEFAULT, "Matched %s for the autoconfigured driver\n", +
- chosen_driver); + cptr = xcalloc(1, sizeof(GDevRec));
- + if (!cptr)
- for (i = 0; matches[i] ; i++) { + return FALSE;
- if (matches[i] != chosen_driver) { + memcpy(cptr, odev, sizeof(GDevRec));
- xfree(matches[i]); +
- } + cptr->identifier = Xprintf("Autoconfigured Video Device %s", driver);
- } + cptr->driver = driver;
- +
- return chosen_driver; + /* now associate the new driver entry with the new screen entry */
-} + xf86ConfigLayout.screens[i].screen->device = cptr;
- + cptr->myScreenSection = xf86ConfigLayout.screens[i].screen;
+
+ return TRUE;
+}
+
GDevPtr GDevPtr
autoConfigDevice(GDevPtr preconf_device) autoConfigDevice(GDevPtr preconf_device)
{ {
- GDevPtr ptr = NULL; GDevPtr ptr = NULL;
+ GDevPtr ptr = NULL, cptr = NULL;
+ char *matches[20]; /* If we have more than 20 drivers we're in trouble */ + char *matches[20]; /* If we have more than 20 drivers we're in trouble */
+ int num_matches = 0, num_screens = 0, i; + int num_matches = 0, num_screens = 0, i;
+ screenLayoutPtr slp; + screenLayoutPtr slp;
if (!xf86configptr) { if (!xf86configptr) {
return NULL; return NULL;
@@ -589,14 +571,49 @@ @@ -573,14 +604,59 @@ autoConfigDevice(GDevPtr preconf_device)
ptr->driver = NULL; ptr->driver = NULL;
} }
if (!ptr->driver) { if (!ptr->driver) {
- ptr->driver = chooseVideoDriver(); - ptr->driver = chooseVideoDriver();
+ listPossibleVideoDrivers(matches, 20); - }
+ for (; matches[num_matches] ; num_matches++); + /* get all possible video drivers and count them */
+ slp = xf86ConfigLayout.screens; + listPossibleVideoDrivers(matches, 20);
+ if (slp) { + for (; matches[num_matches]; num_matches++) {
+ for (; slp[num_screens].screen ; num_screens++); + xf86Msg(X_DEFAULT, "Matched %s as autoconfigured driver %d\n",
+ xf86ConfigLayout.screens = xnfcalloc(1,(num_screens+num_matches+1) * sizeof(screenLayoutRec)); + matches[num_matches], num_matches);
+ xf86ConfigLayout.screens[0] = slp[0]; + }
+ } +
+ for (i=0; i<num_matches;i++) { + slp = xf86ConfigLayout.screens;
+ if (i==0) { + if (slp) {
+ ptr->driver = matches[0]; + /* count the number of screens and make space for
+ if (slp && !xf86ConfigLayout.screens[0].screen->device) { + * a new screen for each additional possible driver
+ xf86ConfigLayout.screens[0].screen->device = ptr; + * minus one for the already existing first one
+ ptr->myScreenSection = xf86ConfigLayout.screens[0].screen; + * plus one for the terminating NULL */
+ } + for (; slp[num_screens].screen; num_screens++);
+ } else { + xf86ConfigLayout.screens = xnfcalloc(num_screens + num_matches,
+ if (slp) { + sizeof(screenLayoutRec));
+ xf86ConfigLayout.screens[i].screen = xnfcalloc(1, sizeof(confScreenRec)); + xf86ConfigLayout.screens[0] = slp[0];
+ if(!xf86ConfigLayout.screens[i].screen) +
+ return NULL; + /* do the first match and set that for the original first screen */
+ memcpy(xf86ConfigLayout.screens[i].screen, slp[0].screen, sizeof(confScreenRec)); + ptr->driver = matches[0];
+ } + if (!xf86ConfigLayout.screens[0].screen->device) {
+ cptr = xcalloc(1, sizeof(GDevRec)); + xf86ConfigLayout.screens[0].screen->device = ptr;
+ if (!cptr) + ptr->myScreenSection = xf86ConfigLayout.screens[0].screen;
+ return NULL; + }
+ memcpy(cptr, ptr, sizeof(GDevRec)); +
+ cptr->identifier = xnfcalloc(1,strlen("Autoconfigured Video Device ")+strlen(matches[i])+1); + /* for each other driver found, copy the first screen, insert it
+ sprintf(cptr->identifier, "Autoconfigured Video Device %s", matches[i]); + * into the list of screens and set the driver */
+ cptr->driver = matches[i]; + i = 0;
+ if (slp) { + while (i++ < num_matches) {
+ xf86ConfigLayout.screens[i].screen->device = cptr; + if (!copyScreen(slp[0].screen, ptr, i, matches[i]))
+ cptr->myScreenSection = xf86ConfigLayout.screens[i].screen; + return NULL;
+ } + }
+ }
+ }
+ for (i=1;i<num_screens;i++) {
+ xf86ConfigLayout.screens[i+num_matches] = slp[i];
+ }
+ xf86ConfigLayout.screens[num_screens+num_matches].screen = NULL;
+ xfree(slp);
}
- /* TODO Handle multiple screen sections */ - /* TODO Handle multiple screen sections */
- if (xf86ConfigLayout.screens && !xf86ConfigLayout.screens->screen->device) { - if (xf86ConfigLayout.screens && !xf86ConfigLayout.screens->screen->device) {
- xf86ConfigLayout.screens->screen->device = ptr; - xf86ConfigLayout.screens->screen->device = ptr;
- ptr->myScreenSection = xf86ConfigLayout.screens->screen; - ptr->myScreenSection = xf86ConfigLayout.screens->screen;
- } + /* shift the rest of the original screen list
+ /* TODO Handle rest of multiple screen sections */ + * to the end of the current screen list
+ *
+ * TODO Handle rest of multiple screen sections */
+ for (i = 1; i < num_screens; i++) {
+ xf86ConfigLayout.screens[i+num_matches] = slp[i];
+ }
+ xf86ConfigLayout.screens[num_screens+num_matches-1].screen = NULL;
+ xfree(slp);
+ } else {
+ /* layout does not have any screens, not much to do */
+ ptr->driver = matches[0];
+ for (i = 1; matches[i] ; i++) {
+ if (matches[i] != matches[0]) {
+ xfree(matches[i]);
+ }
+ }
+ }
}
+
xf86Msg(X_DEFAULT, "Assigned the driver to the xf86ConfigLayout\n"); xf86Msg(X_DEFAULT, "Assigned the driver to the xf86ConfigLayout\n");
return ptr; return ptr;

View File

@ -1,3 +1,10 @@
-------------------------------------------------------------------
Fri Mar 26 02:45:15 CET 2010 - sndirsch@suse.de
- xorg-server-walk_drivers.diff:
* updated patch working more cleanly, fixed coding style, added
comments (Rüdiger Oertel)
------------------------------------------------------------------- -------------------------------------------------------------------
Wed Mar 24 17:05:53 CET 2010 - sndirsch@suse.de Wed Mar 24 17:05:53 CET 2010 - sndirsch@suse.de

View File

@ -35,7 +35,7 @@ BuildRequires: libjpeg-devel
Url: http://xorg.freedesktop.org/ Url: http://xorg.freedesktop.org/
%define EXPERIMENTAL 0 %define EXPERIMENTAL 0
Version: 7.5_%{dirsuffix} Version: 7.5_%{dirsuffix}
Release: 1 Release: 2
License: GPLv2+ ; MIT License (or similar) License: GPLv2+ ; MIT License (or similar)
BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildRoot: %{_tmppath}/%{name}-%{version}-build
Group: System/X11/Servers/XF86_4 Group: System/X11/Servers/XF86_4
@ -229,7 +229,7 @@ popd
%patch132 -p1 %patch132 -p1
%patch143 -p0 %patch143 -p0
%patch145 -p0 %patch145 -p0
%patch146 -p0 %patch146 -p1
%patch147 -p1 %patch147 -p1
%patch162 -p1 %patch162 -p1
%if %moblin %if %moblin