forked from pool/xorg-x11-server
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:
parent
b176db4551
commit
9d61579fe2
@ -1,97 +1,123 @@
|
||||
--- hw/xfree86/common/xf86AutoConfig.c
|
||||
+++ hw/xfree86/common/xf86AutoConfig.c
|
||||
@@ -539,34 +541,13 @@
|
||||
}
|
||||
commit 4da6cffa8b6169595ea447cc53dfab857c04db04
|
||||
Author: h_root <root@hilbert.suse.de>
|
||||
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)
|
||||
-{
|
||||
- char *chosen_driver = NULL;
|
||||
- int i;
|
||||
- char *matches[20]; /* If we have more than 20 drivers we're in trouble */
|
||||
-
|
||||
- listPossibleVideoDrivers(matches, 20);
|
||||
-
|
||||
- /* 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]);
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- return chosen_driver;
|
||||
-}
|
||||
-
|
||||
+
|
||||
+/* copy a screen section and enter the desired driver
|
||||
+ * and insert it at i in the list of screens */
|
||||
+static Bool
|
||||
+copyScreen(confScreenPtr oscreen, GDevPtr odev, int i, char *driver)
|
||||
+{
|
||||
+ GDevPtr cptr = NULL;
|
||||
+
|
||||
+ xf86ConfigLayout.screens[i].screen = xnfcalloc(1, sizeof(confScreenRec));
|
||||
+ if(!xf86ConfigLayout.screens[i].screen)
|
||||
+ return FALSE;
|
||||
+ memcpy(xf86ConfigLayout.screens[i].screen, oscreen, sizeof(confScreenRec));
|
||||
+
|
||||
+ cptr = xcalloc(1, sizeof(GDevRec));
|
||||
+ if (!cptr)
|
||||
+ return FALSE;
|
||||
+ memcpy(cptr, odev, sizeof(GDevRec));
|
||||
+
|
||||
+ cptr->identifier = Xprintf("Autoconfigured Video Device %s", driver);
|
||||
+ cptr->driver = 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
|
||||
autoConfigDevice(GDevPtr preconf_device)
|
||||
{
|
||||
- GDevPtr ptr = NULL;
|
||||
+ GDevPtr ptr = NULL, cptr = NULL;
|
||||
GDevPtr ptr = NULL;
|
||||
+ char *matches[20]; /* If we have more than 20 drivers we're in trouble */
|
||||
+ int num_matches = 0, num_screens = 0, i;
|
||||
+ screenLayoutPtr slp;
|
||||
|
||||
if (!xf86configptr) {
|
||||
return NULL;
|
||||
@@ -589,14 +571,49 @@
|
||||
@@ -573,14 +604,59 @@ autoConfigDevice(GDevPtr preconf_device)
|
||||
ptr->driver = NULL;
|
||||
}
|
||||
if (!ptr->driver) {
|
||||
- ptr->driver = chooseVideoDriver();
|
||||
+ listPossibleVideoDrivers(matches, 20);
|
||||
+ for (; matches[num_matches] ; num_matches++);
|
||||
+ slp = xf86ConfigLayout.screens;
|
||||
+ if (slp) {
|
||||
+ for (; slp[num_screens].screen ; num_screens++);
|
||||
+ xf86ConfigLayout.screens = xnfcalloc(1,(num_screens+num_matches+1) * sizeof(screenLayoutRec));
|
||||
+ xf86ConfigLayout.screens[0] = slp[0];
|
||||
+ }
|
||||
+ for (i=0; i<num_matches;i++) {
|
||||
+ if (i==0) {
|
||||
+ ptr->driver = matches[0];
|
||||
+ if (slp && !xf86ConfigLayout.screens[0].screen->device) {
|
||||
+ xf86ConfigLayout.screens[0].screen->device = ptr;
|
||||
+ ptr->myScreenSection = xf86ConfigLayout.screens[0].screen;
|
||||
+ }
|
||||
+ } else {
|
||||
+ if (slp) {
|
||||
+ xf86ConfigLayout.screens[i].screen = xnfcalloc(1, sizeof(confScreenRec));
|
||||
+ if(!xf86ConfigLayout.screens[i].screen)
|
||||
+ return NULL;
|
||||
+ memcpy(xf86ConfigLayout.screens[i].screen, slp[0].screen, sizeof(confScreenRec));
|
||||
+ }
|
||||
+ cptr = xcalloc(1, sizeof(GDevRec));
|
||||
+ if (!cptr)
|
||||
+ return NULL;
|
||||
+ memcpy(cptr, ptr, sizeof(GDevRec));
|
||||
+ cptr->identifier = xnfcalloc(1,strlen("Autoconfigured Video Device ")+strlen(matches[i])+1);
|
||||
+ sprintf(cptr->identifier, "Autoconfigured Video Device %s", matches[i]);
|
||||
+ cptr->driver = matches[i];
|
||||
+ if (slp) {
|
||||
+ xf86ConfigLayout.screens[i].screen->device = cptr;
|
||||
+ cptr->myScreenSection = xf86ConfigLayout.screens[i].screen;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ for (i=1;i<num_screens;i++) {
|
||||
+ xf86ConfigLayout.screens[i+num_matches] = slp[i];
|
||||
+ }
|
||||
+ xf86ConfigLayout.screens[num_screens+num_matches].screen = NULL;
|
||||
+ xfree(slp);
|
||||
}
|
||||
- }
|
||||
+ /* get all possible video drivers and count them */
|
||||
+ listPossibleVideoDrivers(matches, 20);
|
||||
+ for (; matches[num_matches]; num_matches++) {
|
||||
+ xf86Msg(X_DEFAULT, "Matched %s as autoconfigured driver %d\n",
|
||||
+ matches[num_matches], num_matches);
|
||||
+ }
|
||||
+
|
||||
+ slp = xf86ConfigLayout.screens;
|
||||
+ if (slp) {
|
||||
+ /* count the number of screens and make space for
|
||||
+ * a new screen for each additional possible driver
|
||||
+ * minus one for the already existing first one
|
||||
+ * plus one for the terminating NULL */
|
||||
+ for (; slp[num_screens].screen; num_screens++);
|
||||
+ xf86ConfigLayout.screens = xnfcalloc(num_screens + num_matches,
|
||||
+ sizeof(screenLayoutRec));
|
||||
+ xf86ConfigLayout.screens[0] = slp[0];
|
||||
+
|
||||
+ /* do the first match and set that for the original first screen */
|
||||
+ ptr->driver = matches[0];
|
||||
+ if (!xf86ConfigLayout.screens[0].screen->device) {
|
||||
+ xf86ConfigLayout.screens[0].screen->device = ptr;
|
||||
+ ptr->myScreenSection = xf86ConfigLayout.screens[0].screen;
|
||||
+ }
|
||||
+
|
||||
+ /* for each other driver found, copy the first screen, insert it
|
||||
+ * into the list of screens and set the driver */
|
||||
+ i = 0;
|
||||
+ while (i++ < num_matches) {
|
||||
+ if (!copyScreen(slp[0].screen, ptr, i, matches[i]))
|
||||
+ return NULL;
|
||||
+ }
|
||||
|
||||
- /* TODO Handle multiple screen sections */
|
||||
- if (xf86ConfigLayout.screens && !xf86ConfigLayout.screens->screen->device) {
|
||||
- xf86ConfigLayout.screens->screen->device = ptr;
|
||||
- ptr->myScreenSection = xf86ConfigLayout.screens->screen;
|
||||
- }
|
||||
+ /* TODO Handle rest of multiple screen sections */
|
||||
+ /* shift the rest of the original screen list
|
||||
+ * 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");
|
||||
|
||||
return ptr;
|
||||
|
@ -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
|
||||
|
||||
|
@ -35,7 +35,7 @@ BuildRequires: libjpeg-devel
|
||||
Url: http://xorg.freedesktop.org/
|
||||
%define EXPERIMENTAL 0
|
||||
Version: 7.5_%{dirsuffix}
|
||||
Release: 1
|
||||
Release: 2
|
||||
License: GPLv2+ ; MIT License (or similar)
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||
Group: System/X11/Servers/XF86_4
|
||||
@ -229,7 +229,7 @@ popd
|
||||
%patch132 -p1
|
||||
%patch143 -p0
|
||||
%patch145 -p0
|
||||
%patch146 -p0
|
||||
%patch146 -p1
|
||||
%patch147 -p1
|
||||
%patch162 -p1
|
||||
%if %moblin
|
||||
|
Loading…
Reference in New Issue
Block a user