summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2012-11-07 14:45:14 +1000
committerDave Airlie <airlied@redhat.com>2012-11-07 15:00:39 +1000
commitb1a630b48210d6a3c44994fce1b73273000ace5c (patch)
treed1a3d8b8a3123b0a4b597a3be2770c4322007081
parent27a1a0616304e9b9f0ae842899b7d614f1026578 (diff)
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.c56
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;
}