static Bool VMWAREProbe(DriverPtr drv, int flags) { int numDevSections, numUsed; GDevPtr *devSections; int *usedChips; int i; Bool foundScreen = FALSE; char buildString[sizeof(VMWAREBuildStr)]; RewriteTagString(VMWAREBuildStr, buildString, sizeof(VMWAREBuildStr)); xf86MsgVerb(X_PROBED, 4, "%s", buildString); numDevSections = xf86MatchDevice(VMWARE_DRIVER_NAME, &devSections); if (numDevSections <= 0) { #ifdef DEBUG xf86MsgVerb(X_ERROR, 0, "No vmware driver section\n"); #endif return FALSE; } if (xf86GetPciVideoInfo()) { VmwareLog(("Some PCI Video Info Exists\n")); numUsed = xf86MatchPciInstances(VMWARE_NAME, PCI_VENDOR_ID_VMWARE, VMWAREChipsets, VMWAREPciChipsets, devSections, numDevSections, drv, &usedChips); free(devSections); if (numUsed <= 0) return FALSE; if (flags & PROBE_DETECT) foundScreen = TRUE; else for (i = 0; i < numUsed; i++) { ScrnInfoPtr pScrn = NULL; VmwareLog(("Even some VMware SVGA PCI instances exists\n")); pScrn = xf86ConfigPciEntity(pScrn, flags, usedChips[i], VMWAREPciChipsets, NULL, NULL, NULL, NULL, NULL); if (pScrn) { VmwareLog(("And even configuration suceeded\n")); pScrn->driverVersion = VMWARE_DRIVER_VERSION; pScrn->driverName = VMWARE_DRIVER_NAME; pScrn->name = VMWARE_NAME; pScrn->Probe = VMWAREProbe; #ifdef BUILD_VMWGFX vmwgfx_hookup(pScrn); #else vmwlegacy_hookup(pScrn); #endif /* defined(BUILD_VMWGFX) */ pScrn->driverPrivate = pScrn->PreInit; pScrn->PreInit = VMwarePreinitStub; foundScreen = TRUE; } } free(usedChips); } return foundScreen; }
/* Return TRUE if chipset is present; FALSE otherwise. */ static Bool RADEONProbe(DriverPtr drv, int flags) { int numUsed; int numDevSections; int *usedChips; GDevPtr *devSections; Bool foundScreen = FALSE; int i; if (!xf86GetPciVideoInfo()) return FALSE; numDevSections = xf86MatchDevice(RADEON_NAME, &devSections); if (!numDevSections) return FALSE; numUsed = xf86MatchPciInstances(RADEON_NAME, PCI_VENDOR_ATI, RADEONChipsets, RADEONPciChipsets, devSections, numDevSections, drv, &usedChips); if (numUsed <= 0) return FALSE; if (flags & PROBE_DETECT) { foundScreen = TRUE; } else { for (i = 0; i < numUsed; i++) { if (radeon_get_scrninfo(usedChips[i], NULL)) foundScreen = TRUE; } } free(usedChips); free(devSections); return foundScreen; }
static Bool NscProbe(DriverPtr drv, int flags) { Bool foundScreen = FALSE; int numDevSections, numUsed; GDevPtr *devSections = NULL; int *usedChips = NULL; int i; GeodeDebug(("NscProbe: Probing for supported devices!\n")); /* * * Find the config file Device sections that match this * * driver, and return if there are none. */ if ((numDevSections = xf86MatchDevice(NSC_NAME, &devSections)) <= 0) { GeodeDebug(("NscProbe: failed 1!\n")); return FALSE; } GeodeDebug(("NscProbe: Before MatchPciInstances!\n")); /* PCI BUS */ if (xf86GetPciVideoInfo()) { numUsed = xf86MatchPciInstances(NSC_NAME, PCI_VENDOR_ID_NS, GeodeChipsets, GeodePCIchipsets, devSections, numDevSections, drv, &usedChips); if (numUsed <= 0) { /* Check for old CYRIX vendor ID (5530) */ numUsed = xf86MatchPciInstances(NSC_NAME, PCI_VENDOR_ID_CYRIX, GeodeChipsets, GeodePCIchipsets, devSections, numDevSections, drv, &usedChips); } GeodeDebug(("NscProbe: MatchPCI (%d)!\n", numUsed)); if (numUsed > 0) { if (flags & PROBE_DETECT) foundScreen = TRUE; else { /* Durango only supports one instance, */ /* so take the first one */ for (i = 0; i < numUsed; i++) { /* Allocate a ScrnInfoRec */ ScrnInfoPtr pScrn = xf86AllocateScreen(drv, 0); EntityInfoPtr pEnt = xf86GetEntityInfo(usedChips[i]); PciChipsets *p_id; for (p_id = GeodePCIchipsets; p_id->numChipset != -1; p_id++) { if (pEnt->chipset == p_id->numChipset) { CPUDetected = GX1; if (pEnt->chipset == PCI_CHIP_REDCLOUD) CPUDetected = GX2; break; } } xfree(pEnt); GeodeDebug(("NscProbe: CPUDetected %d!\n", CPUDetected)); pScrn->driverName = NSC_DRIVER_NAME; pScrn->name = NSC_NAME; pScrn->Probe = NscProbe; if (CPUDetected == GX1) { GX1SetupChipsetFPtr(pScrn); } else { /* GX2 */ GX2SetupChipsetFPtr(pScrn); } foundScreen = TRUE; xf86ConfigActivePciEntity(pScrn, usedChips[i], GeodePCIchipsets, NULL, NULL, NULL, NULL, NULL); } } } } if (usedChips) xfree(usedChips); if (devSections) xfree(devSections); GeodeDebug(("NscProbe: result (%d)!\n", foundScreen)); return foundScreen; }
/* Mandatory */ static Bool VoodooProbe(DriverPtr drv, int flags) { int i, numDevSections, numUsed, *usedChips; GDevPtr *devSections; Bool foundScreen = FALSE; /* * Look for config file Device sections with this driver specified. */ if ((numDevSections = xf86MatchDevice(VOODOO_DRIVER_NAME, &devSections)) <= 0) { #ifdef DEBUG xf86ErrorFVerb(3,"%s: No Device section found.\n",VOODOO_NAME); #endif /* * There's no matching device section in the config file, so quit * now. */ return FALSE; } /* PCI BUS */ #ifndef XSERVER_LIBPCIACCESS if (xf86GetPciVideoInfo() ) #endif { numUsed = xf86MatchPciInstances(VOODOO_NAME, PCI_VENDOR_3DFX, VoodooChipsets, VoodooPCIChipsets, devSections,numDevSections, drv, &usedChips); if (numUsed > 0) { if (flags & PROBE_DETECT) foundScreen = TRUE; else for (i = 0; i < numUsed; i++) { ScrnInfoPtr pScrn = NULL; EntityInfoPtr pEnt; /* Allocate a ScrnInfoRec and claim the slot */ if ((pScrn = xf86ConfigPciEntity(pScrn, 0, usedChips[i], VoodooPCIChipsets,NULL, NULL, NULL, NULL, NULL))) { pScrn->driverVersion = VOODOO_VERSION; pScrn->driverName = VOODOO_DRIVER_NAME; pScrn->name = VOODOO_NAME; pScrn->Probe = VoodooProbe; pScrn->PreInit = VoodooPreInit; pScrn->ScreenInit = VoodooScreenInit; pScrn->SwitchMode = VoodooSwitchMode; pScrn->EnterVT = VoodooEnterVT; pScrn->LeaveVT = VoodooLeaveVT; pScrn->FreeScreen = VoodooFreeScreen; foundScreen = TRUE; } pEnt = xf86GetEntityInfo(usedChips[i]); } free(usedChips); } } free(devSections); return foundScreen; }
static Bool CIRProbe(DriverPtr drv, int flags) { int i; GDevPtr *devSections; pciVideoPtr pPci; int *usedChips; int numDevSections; int numUsed; Bool foundScreen = FALSE; ScrnInfoPtr (*subProbe)(int entity); ScrnInfoPtr pScrn; ModuleDescPtr pMod; #ifdef CIR_DEBUG ErrorF("CirProbe\n"); #endif /* * For PROBE_DETECT, make sure both sub-modules are loaded before * calling xf86MatchPciInstances(), because the AvailableOptions() * functions may be called before xf86MatchPciInstances() returns. */ if (flags & PROBE_DETECT) { if (!lg_loaded) { if ((pMod = xf86LoadDrvSubModule(drv, "cirrus_laguna"))) { xf86LoaderModReqSymLists(pMod, lgSymbols, NULL); lg_loaded = TRUE; } } if (!alp_loaded) { if ((pMod = xf86LoadDrvSubModule(drv, "cirrus_alpine"))) { xf86LoaderModReqSymLists(pMod, alpSymbols, NULL); alp_loaded = TRUE; } } } if ((numDevSections = xf86MatchDevice(CIR_DRIVER_NAME, &devSections)) <= 0) { return FALSE; } if (xf86GetPciVideoInfo() == NULL) { /* * We won't let anything in the config file override finding no * PCI video cards at all. This seems reasonable now, but we'll see. */ return FALSE; } numUsed = xf86MatchPciInstances(CIR_NAME, PCI_VENDOR_CIRRUS, CIRChipsets, CIRPciChipsets, devSections, numDevSections, drv, &usedChips); /* Free it since we don't need that list after this */ xfree(devSections); if (numUsed <= 0) return FALSE; if (flags & PROBE_DETECT) foundScreen = TRUE; else for (i = 0; i < numUsed; i++) { /* The Laguna family of chips is so different from the Alpine family that we won't share even the highest-level of functions. But, the Laguna chips /are/ Cirrus chips, so they should be handled in this driver (as opposed to their own driver). */ pPci = xf86GetPciInfoForEntity(usedChips[i]); if (pPci && (pPci->chipType == PCI_CHIP_GD5462 || pPci->chipType == PCI_CHIP_GD5464 || pPci->chipType == PCI_CHIP_GD5464BD || pPci->chipType == PCI_CHIP_GD5465)) { if (!lg_loaded) { if (!(pMod = xf86LoadDrvSubModule(drv, "cirrus_laguna"))) continue; xf86LoaderModReqSymLists(pMod, lgSymbols, NULL); lg_loaded = TRUE; } subProbe = LgProbe; } else { if (!alp_loaded) { if (!(pMod = xf86LoadDrvSubModule(drv, "cirrus_alpine"))) continue; xf86LoaderModReqSymLists(pMod, alpSymbols, NULL); alp_loaded = TRUE; } subProbe = AlpProbe; } pScrn = NULL; if ((pScrn = subProbe(usedChips[i]))) { foundScreen = TRUE; /* Fill in what we can of the ScrnInfoRec */ pScrn->driverVersion = VERSION; pScrn->driverName = CIR_DRIVER_NAME; pScrn->name = CIR_NAME; pScrn->Probe = NULL; } } xfree(usedChips); return foundScreen; }
static Bool AmdProbe(DriverPtr drv, int flags) { Bool foundScreen = FALSE; int numDevSections, numUsed; GDevPtr *devSections = NULL; int *usedChips = NULL; int i; void (*drvr_setup) (ScrnInfoPtr pScrni) = NULL; int CPUDetected; DEBUGMSG(1, (0, X_INFO, "AmdProbe: Probing for supported devices!\n")); /* * * Find the config file Device sections that match this * * driver, and return if there are none. */ if ((numDevSections = xf86MatchDevice(GEODE_NAME, &devSections)) <= 0) { DEBUGMSG(1, (0, X_INFO, "AmdProbe: failed 1!\n")); return FALSE; } DEBUGMSG(1, (0, X_INFO, "AmdProbe: Before MatchPciInstances!\n")); /* PCI BUS */ if (xf86GetPciVideoInfo()) { numUsed = xf86MatchPciInstances(GEODE_NAME, PCI_VENDOR_ID_NS, GeodeChipsets, GeodePCIchipsets, devSections, numDevSections, drv, &usedChips); if (numUsed <= 0) numUsed = xf86MatchPciInstances(GEODE_NAME, PCI_VENDOR_ID_AMD, GeodeChipsets, GeodePCIchipsets, devSections, numDevSections, drv, &usedChips); DEBUGMSG(1, (0, X_INFO, "AmdProbe: MatchPCI (%d)!\n", numUsed)); if (numUsed > 0) { if (flags & PROBE_DETECT) foundScreen = TRUE; else { /* Durango only supports one instance, */ /* so take the first one */ for (i = 0; i < numUsed; i++) { /* Allocate a ScrnInfoRec */ ScrnInfoPtr pScrni = NULL; EntityInfoPtr pEnt = xf86GetEntityInfo(usedChips[i]); PciChipsets *p_id; pScrni = xf86ConfigPciEntity(pScrni, 0, usedChips[i], GeodePCIchipsets, NULL, NULL, NULL, NULL, NULL); for (p_id = GeodePCIchipsets; p_id->numChipset != -1; p_id++) { if (pEnt->chipset == p_id->numChipset) { switch (pEnt->chipset) { #ifdef HAVE_LX case PCI_CHIP_GEODELX: CPUDetected = LX; drvr_setup = &LXSetupChipsetFPtr; break; #endif #ifdef HAVE_GX case PCI_CHIP_GEODEGX: CPUDetected = GX; drvr_setup = &GXSetupChipsetFPtr; break; #endif default: break; } break; } } free(pEnt); if (drvr_setup == NULL) return FALSE; DEBUGMSG(1, (0, X_INFO, "AmdProbe: CPUDetected %d!\n", CPUDetected)); pScrni->driverName = GEODE_DRIVER_NAME; pScrni->driverVersion = GEODE_VERSION; pScrni->name = GEODE_NAME; pScrni->Probe = AmdProbe; drvr_setup(pScrni); foundScreen = TRUE; } } } } if (usedChips) free(usedChips); if (devSections) free(devSections); DEBUGMSG(1, (0, X_INFO, "AmdProbe: result (%d)!\n", foundScreen)); return foundScreen; }