[PATCH 10/10] xfree86: remove PCI dependency from InitOutput

Tiago Vignatti tiago.vignatti at nokia.com
Fri May 7 05:44:05 PDT 2010


All functions that touch PCI and BUS were moved to their own files, organizing
the mess inside the InitOutput. Now, inside InitOutput, mostly accesses to
buses are coordinated by the new xf86BusConfig.

Two PCI probe functions just changed the name and a procedure to receive the
isolate devices parameters was created also, named xf86PciIsolateDevice.

Signed-off-by: Tiago Vignatti <tiago.vignatti at nokia.com>
---
 hw/xfree86/common/xf86Bus.c    |  134 +++++++++++++++++
 hw/xfree86/common/xf86Init.c   |  310 +---------------------------------------
 hw/xfree86/common/xf86Priv.h   |    1 +
 hw/xfree86/common/xf86pciBus.c |  160 +++++++++++++++++++++
 hw/xfree86/common/xf86pciBus.h |    3 +
 5 files changed, 303 insertions(+), 305 deletions(-)

diff --git a/hw/xfree86/common/xf86Bus.c b/hw/xfree86/common/xf86Bus.c
index 465d474..4d862bf 100644
--- a/hw/xfree86/common/xf86Bus.c
+++ b/hw/xfree86/common/xf86Bus.c
@@ -58,6 +58,140 @@ static int xf86EntityPrivateCount = 0;
 
 BusRec primaryBus = { BUS_NONE, { 0 } };
 
+/**
+ * Call the driver's correct probe function.
+ *
+ * If the driver implements the \c DriverRec::PciProbe entry-point and an
+ * appropriate PCI device (with matching Device section in the xorg.conf file)
+ * is found, it is called.  If \c DriverRec::PciProbe or no devices can be
+ * successfully probed with it (e.g., only non-PCI devices are available),
+ * the driver's \c DriverRec::Probe function is called.
+ *
+ * \param drv   Driver to probe
+ *
+ * \return
+ * If a device can be successfully probed by the driver, \c TRUE is
+ * returned.  Otherwise, \c FALSE is returned.
+ */
+Bool
+xf86CallDriverProbe( DriverPtr drv, Bool detect_only )
+{
+    Bool     foundScreen = FALSE;
+
+    if ( drv->PciProbe != NULL ) {
+    if ( xf86DoConfigure && xf86DoConfigurePass1 ) {
+        assert( detect_only );
+        foundScreen = xf86PciAddMatchingDev(drv);
+    }
+    else {
+        assert( ! detect_only );
+        foundScreen = xf86PciProbeDev(drv);
+    }
+    }
+
+    if ( ! foundScreen && (drv->Probe != NULL) ) {
+    xf86Msg( X_WARNING, "Falling back to old probe method for %s\n",
+         drv->driverName );
+    foundScreen = (*drv->Probe)( drv, (detect_only) ? PROBE_DETECT
+                     : PROBE_DEFAULT );
+    }
+
+    return foundScreen;
+}
+
+/**
+ * @return TRUE if all buses are configured and set up correctly and FALSE
+ * otherwise.
+ */
+Bool
+xf86BusConfig(void)
+{
+    screenLayoutPtr layout;
+    int i, j;
+
+    /* Enable full I/O access */
+    if (xorgHWAccess)
+        xorgHWAccess = xf86EnableIO();
+
+    /* Locate bus slot that had register IO enabled at server startup */
+    if (xorgHWAccess)
+        xf86FindPrimaryDevice();
+
+    /*
+     * Now call each of the Probe functions.  Each successful probe will
+     * result in an extra entry added to the xf86Screens[] list for each
+     * instance of the hardware found.
+     */
+    for (i = 0; i < xf86NumDrivers; i++) {
+    xorgHWFlags flags;
+    if (!xorgHWAccess) {
+        if (!xf86DriverList[i]->driverFunc
+        || !xf86DriverList[i]->driverFunc(NULL,
+                         GET_REQUIRED_HW_INTERFACES,
+                          &flags)
+        || NEED_IO_ENABLED(flags))
+        continue;
+    }
+
+    xf86CallDriverProbe(xf86DriverList[i], FALSE);
+    }
+
+    /* If nothing was detected, return now */
+    if (xf86NumScreens == 0) {
+      xf86Msg(X_ERROR, "No devices detected.\n");
+      return FALSE;
+    }
+
+    xf86VGAarbiterInit();
+
+    /*
+     * Match up the screens found by the probes against those specified
+     * in the config file.  Remove the ones that won't be used.  Sort
+     * them in the order specified.
+     *
+     * What is the best way to do this?
+     *
+     * For now, go through the screens allocated by the probes, and
+     * look for screen config entry which refers to the same device
+     * section as picked out by the probe.
+     *
+     */
+    for (i = 0; i < xf86NumScreens; i++) {
+        for (layout = xf86ConfigLayout.screens; layout->screen != NULL; layout++) {
+      Bool found = FALSE;
+      for (j = 0; j < xf86Screens[i]->numEntities; j++) {
+
+          GDevPtr dev =
+        xf86GetDevFromEntity(xf86Screens[i]->entityList[j],
+                     xf86Screens[i]->entityInstanceList[j]);
+
+          if (dev == layout->screen->device) {
+          /* A match has been found */
+          xf86Screens[i]->confScreen = layout->screen;
+          found = TRUE;
+          break;
+          }
+      }
+      if (found) break;
+      }
+      if (layout->screen == NULL) {
+    /* No match found */
+    xf86Msg(X_ERROR,
+        "Screen %d deleted because of no matching config section.\n", i);
+        xf86DeleteScreen(i--, 0);
+      }
+    }
+
+    /* If no screens left, return now.  */
+    if (xf86NumScreens == 0) {
+        xf86Msg(X_ERROR,
+        "Device(s) detected, but none match those in the config file.\n");
+        return FALSE;
+    }
+
+    return TRUE;
+}
+
 /*
  * Call the bus probes relevant to the architecture.
  *
diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c
index fc223e3..c7b7474 100644
--- a/hw/xfree86/common/xf86Init.c
+++ b/hw/xfree86/common/xf86Init.c
@@ -76,6 +76,7 @@
 #include "xf86InPriv.h"
 #include "picturestr.h"
 
+#include "xf86Bus.h"
 #include "xf86VGAarbiter.h"
 #include "globals.h"
 
@@ -83,16 +84,8 @@
 #include <X11/extensions/dpmsconst.h>
 #include "dpmsproc.h"
 #endif
-
-#include <pciaccess.h>
-#include "Pci.h"
-#include "xf86Bus.h"
-
 #include <hotplug.h>
 
-/* forward declarations */
-static Bool probe_devices_from_device_sections(DriverPtr drvp);
-static Bool add_matching_devices_to_configure_list(DriverPtr drvp);
 
 #ifdef XF86PM
 void (*xf86OSPMClose)(void) = NULL;
@@ -335,201 +328,6 @@ InstallSignalHandlers(void)
     }
 }
 
-
-#define END_OF_MATCHES(m) \
-    (((m).vendor_id == 0) && ((m).device_id == 0) && ((m).subvendor_id == 0))
-
-Bool
-probe_devices_from_device_sections(DriverPtr drvp)
-{
-    int i, j;
-    struct pci_device * pPci;
-    Bool foundScreen = FALSE;
-    const struct pci_id_match * const devices = drvp->supported_devices;
-    GDevPtr *devList;
-    const unsigned numDevs = xf86MatchDevice(drvp->driverName, & devList);
-
-
-    for ( i = 0 ; i < numDevs ; i++ ) {
-	struct pci_device_iterator *iter;
-	unsigned device_id;
-
-
-	/* Find the pciVideoRec associated with this device section.
-	 */
-	iter = pci_id_match_iterator_create(NULL);
-	while ((pPci = pci_device_next(iter)) != NULL) {
-	    if (devList[i]->busID && *devList[i]->busID) {
-		if (xf86ComparePciBusString(devList[i]->busID,
-					    ((pPci->domain << 8)
-					     | pPci->bus),
-					    pPci->dev,
-					    pPci->func)) {
-		    break;
-		}
-	    }
-	    else if (xf86IsPrimaryPci(pPci)) {
-		break;
-	    }
-	}
-
-	pci_iterator_destroy(iter);
-
-	if (pPci == NULL) {
-	    continue;
-	}
-
-	device_id = (devList[i]->chipID > 0)
-	  ? devList[i]->chipID : pPci->device_id;
-
-
-	/* Once the pciVideoRec is found, determine if the device is supported
-	 * by the driver.  If it is, probe it!
-	 */
-	for ( j = 0 ; ! END_OF_MATCHES( devices[j] ) ; j++ ) {
-	    if ( PCI_ID_COMPARE( devices[j].vendor_id, pPci->vendor_id )
-		 && PCI_ID_COMPARE( devices[j].device_id, device_id )
-		 && ((devices[j].device_class_mask & pPci->device_class)
-		      == devices[j].device_class) ) {
-		int  entry;
-
-		/* Allow the same entity to be used more than once for
-		 * devices with multiple screens per entity.  This assumes
-		 * implicitly that there will be a screen == 0 instance.
-		 *
-		 * FIXME Need to make sure that two different drivers don't
-		 * FIXME claim the same screen > 0 instance.
-		 */
-		if ( (devList[i]->screen == 0) && !xf86CheckPciSlot( pPci ) )
-		  continue;
-
-		DebugF("%s: card at %d:%d:%d is claimed by a Device section\n",
-		       drvp->driverName, pPci->bus, pPci->dev, pPci->func);
-
-		/* Allocate an entry in the lists to be returned */
-		entry = xf86ClaimPciSlot(pPci, drvp, device_id,
-					  devList[i], devList[i]->active);
-
-		if ((entry == -1) && (devList[i]->screen > 0)) {
-		    unsigned k;
-
-		    for ( k = 0; k < xf86NumEntities; k++ ) {
-			EntityPtr pEnt = xf86Entities[k];
-			if (pEnt->bus.type != BUS_PCI)
-			  continue;
-
-			if (pEnt->bus.id.pci == pPci) {
-			    entry = k;
-			    xf86AddDevToEntity(k, devList[i]);
-			    break;
-			}
-		    }
-		}
-
-		if (entry != -1) {
-		    if ((*drvp->PciProbe)(drvp, entry, pPci,
-					  devices[j].match_data)) {
-			foundScreen = TRUE;
-		    } else
-			xf86UnclaimPciSlot(pPci);
-		}
-
-		break;
-	    }
-	}
-    }
-    xfree(devList);
-
-    return foundScreen;
-}
-
-
-Bool
-add_matching_devices_to_configure_list(DriverPtr drvp)
-{
-    const struct pci_id_match * const devices = drvp->supported_devices;
-    int j;
-    struct pci_device *pPci;
-    struct pci_device_iterator *iter;
-    int numFound = 0;
-
-
-    iter = pci_id_match_iterator_create(NULL);
-    while ((pPci = pci_device_next(iter)) != NULL) {
-	/* Determine if this device is supported by the driver.  If it is,
-	 * add it to the list of devices to configure.
-	 */
-	for (j = 0 ; ! END_OF_MATCHES(devices[j]) ; j++) {
-	    if ( PCI_ID_COMPARE( devices[j].vendor_id, pPci->vendor_id )
-		 && PCI_ID_COMPARE( devices[j].device_id, pPci->device_id )
-		 && ((devices[j].device_class_mask & pPci->device_class)
-		     == devices[j].device_class) ) {
-		if (xf86CheckPciSlot(pPci)) {
-		    GDevPtr pGDev = xf86AddBusDeviceToConfigure(
-					drvp->driverName, BUS_PCI, pPci, -1);
-		    if (pGDev != NULL) {
-			/* After configure pass 1, chipID and chipRev are
-			 * treated as over-rides, so clobber them here.
-			 */
-			pGDev->chipID = -1;
-			pGDev->chipRev = -1;
-		    }
-
-		    numFound++;
-		}
-
-		break;
-	    }
-	}
-    }
-
-    pci_iterator_destroy(iter);
-
-
-    return (numFound != 0);
-}
-
-/**
- * Call the driver's correct probe function.
- *
- * If the driver implements the \c DriverRec::PciProbe entry-point and an
- * appropriate PCI device (with matching Device section in the xorg.conf file)
- * is found, it is called.  If \c DriverRec::PciProbe or no devices can be
- * successfully probed with it (e.g., only non-PCI devices are available),
- * the driver's \c DriverRec::Probe function is called.
- *
- * \param drv   Driver to probe
- *
- * \return
- * If a device can be successfully probed by the driver, \c TRUE is
- * returned.  Otherwise, \c FALSE is returned.
- */
-Bool
-xf86CallDriverProbe( DriverPtr drv, Bool detect_only )
-{
-    Bool     foundScreen = FALSE;
-
-    if ( drv->PciProbe != NULL ) {
-	if ( xf86DoConfigure && xf86DoConfigurePass1 ) {
-	    assert( detect_only );
-	    foundScreen = add_matching_devices_to_configure_list( drv );
-	}
-	else {
-	    assert( ! detect_only );
-	    foundScreen = probe_devices_from_device_sections( drv );
-	}
-    }
-
-    if ( ! foundScreen && (drv->Probe != NULL) ) {
-	xf86Msg( X_WARNING, "Falling back to old probe method for %s\n",
-		 drv->driverName );
-	foundScreen = (*drv->Probe)( drv, (detect_only) ? PROBE_DETECT
-				     : PROBE_DEFAULT );
-    }
-
-    return foundScreen;
-}
-
 /*
  * InitOutput --
  *	Initialize screenInfo for all actually accessible framebuffers.
@@ -542,7 +340,6 @@ InitOutput(ScreenInfo *pScreenInfo, int argc, char **argv)
   int                    i, j, k, scr_index;
   char                   **modulelist;
   pointer                *optionlist;
-  screenLayoutPtr	 layout;
   Pix24Flags		 screenpix24, pix24;
   MessageType		 pix24From = X_DEFAULT;
   Bool			 pix24Fail = FALSE;
@@ -693,97 +490,8 @@ InitOutput(ScreenInfo *pScreenInfo, int argc, char **argv)
     else
 	xf86Info.dontVTSwitch = TRUE;
 
-    /* Enable full I/O access */
-    if (xorgHWAccess)
-	xorgHWAccess = xf86EnableIO();
-
-    /*
-     * Locate bus slot that had register IO enabled at server startup
-     */
-    if (xorgHWAccess)
-        xf86FindPrimaryDevice();
-    /*
-     * Now call each of the Probe functions.  Each successful probe will
-     * result in an extra entry added to the xf86Screens[] list for each
-     * instance of the hardware found.
-     */
-
-    for (i = 0; i < xf86NumDrivers; i++) {
-	xorgHWFlags flags;
-	if (!xorgHWAccess) {
-	    if (!xf86DriverList[i]->driverFunc
-		|| !xf86DriverList[i]->driverFunc(NULL,
-						 GET_REQUIRED_HW_INTERFACES,
-						  &flags)
-		|| NEED_IO_ENABLED(flags))
-		continue;
-	}
-
-	xf86CallDriverProbe( xf86DriverList[i], FALSE );
-    }
-
-    /*
-     * If nothing was detected, return now.
-     */
-
-    if (xf86NumScreens == 0) {
-      xf86Msg(X_ERROR, "No devices detected.\n");
-      return;
-    }
-
-    xf86VGAarbiterInit();
-
-    /*
-     * Match up the screens found by the probes against those specified
-     * in the config file.  Remove the ones that won't be used.  Sort
-     * them in the order specified.
-     */
-
-    /*
-     * What is the best way to do this?
-     *
-     * For now, go through the screens allocated by the probes, and
-     * look for screen config entry which refers to the same device
-     * section as picked out by the probe.
-     *
-     */
-
-    for (i = 0; i < xf86NumScreens; i++) {
-      for (layout = xf86ConfigLayout.screens; layout->screen != NULL;
-	   layout++) {
-	  Bool found = FALSE;
-	  for (j = 0; j < xf86Screens[i]->numEntities; j++) {
-
-	      GDevPtr dev =
-		xf86GetDevFromEntity(xf86Screens[i]->entityList[j],
-				     xf86Screens[i]->entityInstanceList[j]);
-
-	      if (dev == layout->screen->device) {
-		  /* A match has been found */
-		  xf86Screens[i]->confScreen = layout->screen;
-		  found = TRUE;
-		  break;
-	      }
-	  }
-	  if (found) break;
-      }
-      if (layout->screen == NULL) {
-	/* No match found */
-	xf86Msg(X_ERROR,
-	    "Screen %d deleted because of no matching config section.\n", i);
-        xf86DeleteScreen(i--, 0);
-      }
-    }
-
-    /*
-     * If no screens left, return now.
-     */
-
-    if (xf86NumScreens == 0) {
-      xf86Msg(X_ERROR,
-	      "Device(s) detected, but none match those in the config file.\n");
-      return;
-    }
+    if (xf86BusConfig() == FALSE)
+        return;
 
     xf86PostProbe();
 
@@ -1632,20 +1340,12 @@ ddxProcessArgument(int argc, char **argv, int i)
   }
   if (!strcmp(argv[i], "-isolateDevice"))
   {
-    int bus, device, func;
     CHECK_FOR_REQUIRED_ARGUMENT();
     if (strncmp(argv[++i], "PCI:", 4)) {
        FatalError("Bus types other than PCI not yet isolable\n");
     }
-    if (sscanf(argv[i], "PCI:%d:%d:%d", &bus, &device, &func) == 3) {
-       xf86IsolateDevice.domain = PCI_DOM_FROM_BUS(bus);
-       xf86IsolateDevice.bus = PCI_BUS_NO_DOMAIN(bus);
-       xf86IsolateDevice.dev = device;
-       xf86IsolateDevice.func = func;
-       return 2;
-    } else {
-       FatalError("Invalid isolated device specification\n");
-    }
+    xf86PciIsolateDevice(argv[i]);
+    return 2;
   }
   /* Notice cmdline xkbdir, but pass to dix as well */
   if (!strcmp(argv[i], "-xkbdir"))
diff --git a/hw/xfree86/common/xf86Priv.h b/hw/xfree86/common/xf86Priv.h
index a8169e9..d2073ae 100644
--- a/hw/xfree86/common/xf86Priv.h
+++ b/hw/xfree86/common/xf86Priv.h
@@ -111,6 +111,7 @@ extern _X_EXPORT  RootWinPropPtr *xf86RegisteredPropertiesTable;
 
 /* xf86Bus.c */
 
+extern _X_EXPORT Bool xf86BusConfig(void);
 extern _X_EXPORT void xf86BusProbe(void);
 extern _X_EXPORT void xf86AccessEnter(void);
 extern _X_EXPORT void xf86AccessLeave(void);
diff --git a/hw/xfree86/common/xf86pciBus.c b/hw/xfree86/common/xf86pciBus.c
index ac018e7..b88ed01 100644
--- a/hw/xfree86/common/xf86pciBus.c
+++ b/hw/xfree86/common/xf86pciBus.c
@@ -420,4 +420,164 @@ xf86CheckPciSlot(const struct pci_device *d)
     return TRUE;
 }
 
+#define END_OF_MATCHES(m) \
+    (((m).vendor_id == 0) && ((m).device_id == 0) && ((m).subvendor_id == 0))
 
+Bool
+xf86PciAddMatchingDev(DriverPtr drvp)
+{
+    const struct pci_id_match * const devices = drvp->supported_devices;
+    int j;
+    struct pci_device *pPci;
+    struct pci_device_iterator *iter;
+    int numFound = 0;
+
+
+    iter = pci_id_match_iterator_create(NULL);
+    while ((pPci = pci_device_next(iter)) != NULL) {
+    /* Determine if this device is supported by the driver.  If it is,
+     * add it to the list of devices to configure.
+     */
+    for (j = 0 ; ! END_OF_MATCHES(devices[j]) ; j++) {
+        if ( PCI_ID_COMPARE( devices[j].vendor_id, pPci->vendor_id )
+         && PCI_ID_COMPARE( devices[j].device_id, pPci->device_id )
+         && ((devices[j].device_class_mask & pPci->device_class)
+             == devices[j].device_class) ) {
+        if (xf86CheckPciSlot(pPci)) {
+            GDevPtr pGDev = xf86AddBusDeviceToConfigure(
+                    drvp->driverName, BUS_PCI, pPci, -1);
+            if (pGDev != NULL) {
+            /* After configure pass 1, chipID and chipRev are
+             * treated as over-rides, so clobber them here.
+             */
+            pGDev->chipID = -1;
+            pGDev->chipRev = -1;
+            }
+
+            numFound++;
+        }
+
+        break;
+        }
+    }
+    }
+
+    pci_iterator_destroy(iter);
+
+    return (numFound != 0);
+}
+
+Bool
+xf86PciProbeDev(DriverPtr drvp)
+{
+    int i, j;
+    struct pci_device * pPci;
+    Bool foundScreen = FALSE;
+    const struct pci_id_match * const devices = drvp->supported_devices;
+    GDevPtr *devList;
+    const unsigned numDevs = xf86MatchDevice(drvp->driverName, & devList);
+
+    for ( i = 0 ; i < numDevs ; i++ ) {
+       struct pci_device_iterator *iter;
+       unsigned device_id;
+
+
+       /* Find the pciVideoRec associated with this device section.
+        */
+       iter = pci_id_match_iterator_create(NULL);
+       while ((pPci = pci_device_next(iter)) != NULL) {
+           if (devList[i]->busID && *devList[i]->busID) {
+               if (xf86ComparePciBusString(devList[i]->busID,
+                                           ((pPci->domain << 8)
+                                            | pPci->bus),
+                                           pPci->dev,
+                                           pPci->func)) {
+                   break;
+               }
+           }
+           else if (xf86IsPrimaryPci(pPci)) {
+               break;
+           }
+       }
+
+       pci_iterator_destroy(iter);
+
+       if (pPci == NULL) {
+           continue;
+       }
+       device_id = (devList[i]->chipID > 0)
+         ? devList[i]->chipID : pPci->device_id;
+
+
+       /* Once the pciVideoRec is found, determine if the device is supported
+        * by the driver.  If it is, probe it!
+        */
+       for ( j = 0 ; ! END_OF_MATCHES( devices[j] ) ; j++ ) {
+           if ( PCI_ID_COMPARE( devices[j].vendor_id, pPci->vendor_id )
+                && PCI_ID_COMPARE( devices[j].device_id, device_id )
+                && ((devices[j].device_class_mask & pPci->device_class)
+                     == devices[j].device_class) ) {
+               int  entry;
+
+               /* Allow the same entity to be used more than once for
+                * devices with multiple screens per entity.  This assumes
+                * implicitly that there will be a screen == 0 instance.
+                *
+                * FIXME Need to make sure that two different drivers don't
+                * FIXME claim the same screen > 0 instance.
+                */
+               if ((devList[i]->screen == 0) && !xf86CheckPciSlot(pPci))
+                   continue;
+
+               DebugF("%s: card at %d:%d:%d is claimed by a Device section\n",
+                      drvp->driverName, pPci->bus, pPci->dev, pPci->func);
+
+               /* Allocate an entry in the lists to be returned */
+               entry = xf86ClaimPciSlot(pPci, drvp, device_id,
+                                         devList[i], devList[i]->active);
+
+               if ((entry == -1) && (devList[i]->screen > 0)) {
+                   unsigned k;
+
+                   for (k = 0; k < xf86NumEntities; k++ ) {
+                       EntityPtr pEnt = xf86Entities[k];
+                       if (pEnt->bus.type != BUS_PCI)
+                           continue;
+                       if (pEnt->bus.id.pci == pPci) {
+                           entry = k;
+                           xf86AddDevToEntity(k, devList[i]);
+                           break;
+                       }
+                   }
+               }
+
+               if (entry != -1) {
+                   if ((*drvp->PciProbe)(drvp, entry, pPci,
+                                         devices[j].match_data)) {
+                       foundScreen = TRUE;
+                   } else
+                       xf86UnclaimPciSlot(pPci);
+               }
+
+               break;
+           }
+       }
+    }
+    xfree(devList);
+
+    return foundScreen;
+}
+
+void
+xf86PciIsolateDevice(char *argument)
+{
+    int bus, device, func;
+
+    if (sscanf(argument, "PCI:%d:%d:%d", &bus, &device, &func) == 3) {
+        xf86IsolateDevice.domain = PCI_DOM_FROM_BUS(bus);
+        xf86IsolateDevice.bus = PCI_BUS_NO_DOMAIN(bus);
+        xf86IsolateDevice.dev = device;
+        xf86IsolateDevice.func = func;
+    } else
+        FatalError("Invalid isolated device specification\n");
+}
diff --git a/hw/xfree86/common/xf86pciBus.h b/hw/xfree86/common/xf86pciBus.h
index 3125e0d..69c005a 100644
--- a/hw/xfree86/common/xf86pciBus.h
+++ b/hw/xfree86/common/xf86pciBus.h
@@ -34,5 +34,8 @@
 #define _XF86_PCI_BUS_H
 
 void xf86PciProbe(void);
+Bool xf86PciAddMatchingDev(DriverPtr drvp);
+Bool xf86PciProbeDev(DriverPtr drvp);
+void xf86PciIsolateDevice(char *argument);
 
 #endif /* _XF86_PCI_BUS_H */
-- 
1.6.0.4



More information about the xorg-devel mailing list