Hello community, here is the log from the commit of package xorg-x11-server for openSUSE:Factory checked in at Fri Mar 26 16:22:03 CET 2010. -------- --- xorg-x11-server/xorg-x11-server.changes 2010-03-24 17:06:51.000000000 +0100 +++ xorg-x11-server/xorg-x11-server.changes 2010-03-26 16:21:33.871847000 +0100 @@ -1,0 +2,7 @@ +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) + +------------------------------------------------------------------- calling whatdependson for head-i586 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ xorg-x11-server.spec ++++++ --- /var/tmp/diff_new_pack.mDUPHq/_old 2010-03-26 16:21:47.000000000 +0100 +++ /var/tmp/diff_new_pack.mDUPHq/_new 2010-03-26 16:21:47.000000000 +0100 @@ -35,7 +35,7 @@ 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 @@ %patch132 -p1 %patch143 -p0 %patch145 -p0 -%patch146 -p0 +%patch146 -p1 %patch147 -p1 %patch162 -p1 %if %moblin ++++++ xorg-server-walk_drivers.diff ++++++ --- /var/tmp/diff_new_pack.mDUPHq/_old 2010-03-26 16:21:48.000000000 +0100 +++ /var/tmp/diff_new_pack.mDUPHq/_new 2010-03-26 16:21:48.000000000 +0100 @@ -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; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Remember to have fun... -- To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-commit+help@opensuse.org
participants (1)
-
root@Hilbert.suse.de