diff options
author | Emil Velikov <emil.l.velikov@gmail.com> | 2012-11-02 03:57:41 +0000 |
---|---|---|
committer | Ben Skeggs <bskeggs@redhat.com> | 2012-11-05 19:19:48 +1000 |
commit | e34cfbd5bd23f7f15372af52d8a39a5715ce7310 (patch) | |
tree | 472e484d52c9ee0bc6fbc335b8941eecd3850031 | |
parent | 78f24dc3798d635fca2e20856a09012c28bbbb8b (diff) |
nouveau: Factor out common code to NVHasKMS()
As the name suggests checks if it has kernel mode setting,
prints out the interface version and checkes if the chipset
is supported
Function is used in NVPciProbe and NVPlatformProbe
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
-rw-r--r-- | src/nv_driver.c | 45 |
1 files changed, 29 insertions, 16 deletions
diff --git a/src/nv_driver.c b/src/nv_driver.c index dc4f3b2..f184cd4 100644 --- a/src/nv_driver.c +++ b/src/nv_driver.c @@ -247,19 +247,12 @@ NVInitScrn(ScrnInfoPtr pScrn, int entity_num) } static Bool -NVPciProbe(DriverPtr drv, int entity_num, struct pci_device *pci_dev, - intptr_t match_data) +NVHasKMS(struct pci_device *pci_dev) { - PciChipsets NVChipsets[] = { - { pci_dev->device_id, - (pci_dev->vendor_id << 16) | pci_dev->device_id, NULL }, - { -1, -1, NULL } - }; struct nouveau_device *dev = NULL; - ScrnInfoPtr pScrn = NULL; drmVersion *version; - int chipset, ret; char *busid; + int chipset, ret; if (!xf86LoaderCheckSymbol("DRICreatePCIBusID")) { xf86DrvMsg(-1, X_ERROR, "[drm] No DRICreatePCIBusID symbol\n"); @@ -267,10 +260,17 @@ NVPciProbe(DriverPtr drv, int entity_num, struct pci_device *pci_dev, } busid = DRICreatePCIBusID(pci_dev); + ret = drmCheckModesettingSupported(busid); + if (ret) { + xf86DrvMsg(-1, X_ERROR, "[drm] KMS not enabled\n"); + free(busid); + return FALSE; + } + ret = nouveau_device_open(busid, &dev); + free(busid); if (ret) { xf86DrvMsg(-1, X_ERROR, "[drm] failed to open device\n"); - free(busid); return FALSE; } @@ -288,12 +288,6 @@ NVPciProbe(DriverPtr drv, int entity_num, struct pci_device *pci_dev, chipset = dev->chipset; nouveau_device_del(&dev); - ret = drmCheckModesettingSupported(busid); - free(busid); - if (ret) { - xf86DrvMsg(-1, X_ERROR, "[drm] KMS not enabled\n"); - return FALSE; - } switch (chipset & 0xf0) { case 0x00: @@ -314,6 +308,22 @@ NVPciProbe(DriverPtr drv, int entity_num, struct pci_device *pci_dev, xf86DrvMsg(-1, X_ERROR, "Unknown chipset: NV%02x\n", chipset); return FALSE; } + return TRUE; +} + +static Bool +NVPciProbe(DriverPtr drv, int entity_num, struct pci_device *pci_dev, + intptr_t match_data) +{ + PciChipsets NVChipsets[] = { + { pci_dev->device_id, + (pci_dev->vendor_id << 16) | pci_dev->device_id, NULL }, + { -1, -1, NULL } + }; + ScrnInfoPtr pScrn = NULL; + + if (!NVHasKMS(pci_dev)) + return FALSE; pScrn = xf86ConfigPciEntity(pScrn, 0, entity_num, NVChipsets, NULL, NULL, NULL, NULL, NULL); @@ -336,6 +346,9 @@ NVPlatformProbe(DriverPtr driver, if (!dev->pdev) return FALSE; + if (!NVHasKMS(dev->pdev)) + return FALSE; + if (flags & PLATFORM_PROBE_GPU_SCREEN) scr_flags = XF86_ALLOCATE_GPU_SCREEN; |