diff options
author | Dave Airlie <airlied@redhat.com> | 2012-11-07 14:45:14 +1000 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2012-11-07 15:00:39 +1000 |
commit | b1a630b48210d6a3c44994fce1b73273000ace5c (patch) | |
tree | d1a3d8b8a3123b0a4b597a3be2770c4322007081 | |
parent | 27a1a0616304e9b9f0ae842899b7d614f1026578 (diff) | |
download | xorg-driver-xf86-video-nouveau-b1a630b48210d6a3c44994fce1b73273000ace5c.tar.gz |
nouveau: drop DRI1 device open interface.
this is a DRI1 left over, the driver is meant to open the device itself now.
this old interface did crazy stuff like drmAddMap.
Reviewed-by: Ben Skeggs <bskeggs@redhat.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
-rw-r--r-- | src/nv_driver.c | 56 |
1 files changed, 43 insertions, 13 deletions
diff --git a/src/nv_driver.c b/src/nv_driver.c index ea4a018..de09f53 100644 --- a/src/nv_driver.c +++ b/src/nv_driver.c @@ -680,39 +680,69 @@ nouveau_setup_capabilities(ScrnInfoPtr pScrn) #endif } +static Bool NVOpenDRMMaster(ScrnInfoPtr pScrn) +{ + NVPtr pNv = NVPTR(pScrn); + struct pci_device *dev = pNv->PciInfo; + char *busid; + drmSetVersion sv; + int err; + int ret; + +#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1,9,99,901,0) + XNFasprintf(&busid, "pci:%04x:%02x:%02x.%d", + dev->domain, dev->bus, dev->dev, dev->func); +#else + busid = XNFprintf("pci:%04x:%02x:%02x.%d", + dev->domain, dev->bus, dev->dev, dev->func); +#endif + + ret = nouveau_device_open(busid, &pNv->dev); + if (ret) { + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "[drm] Failed to open DRM device for %s: %d\n", + busid, ret); + free(busid); + return FALSE; + } + free(busid); + + sv.drm_di_major = 1; + sv.drm_di_minor = 1; + sv.drm_dd_major = -1; + sv.drm_dd_minor = -1; + err = drmSetInterfaceVersion(pNv->dev->fd, &sv); + if (err != 0) { + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "[drm] failed to set drm interface version.\n"); + nouveau_device_del(&pNv->dev); + return FALSE; + } + return TRUE; +} + static Bool NVPreInitDRM(ScrnInfoPtr pScrn) { NVPtr pNv = NVPTR(pScrn); - char *bus_id; int ret; if (!NVDRIGetVersion(pScrn)) return FALSE; /* Load the kernel module, and open the DRM */ - bus_id = DRICreatePCIBusID(pNv->PciInfo); - ret = DRIOpenDRMMaster(pScrn, SAREA_MAX, bus_id, "nouveau"); - free(bus_id); + ret = NVOpenDRMMaster(pScrn); if (!ret) { xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "[drm] error opening the drm\n"); return FALSE; } - /* Initialise libdrm_nouveau */ - ret = nouveau_device_wrap(DRIMasterFD(pScrn), 1, &pNv->dev); - if (ret) { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, - "[drm] error creating device\n"); - return FALSE; - } - ret = nouveau_client_new(pNv->dev, &pNv->client); if (ret) return FALSE; - pNv->drm_device_name = drmGetDeviceNameFromFd(DRIMasterFD(pScrn)); + pNv->drm_device_name = drmGetDeviceNameFromFd(pNv->dev->fd); return TRUE; } |