From b61e81a191d3a5c269c5f7c40199aebc9ebc034c Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Wed, 18 Aug 2010 12:06:48 +1000 Subject: nouveau: accept both 0.0.16 and 1.x.x Signed-off-by: Ben Skeggs --- nouveau/nouveau_device.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) (limited to 'nouveau/nouveau_device.c') diff --git a/nouveau/nouveau_device.c b/nouveau/nouveau_device.c index c5253914..f450e303 100644 --- a/nouveau/nouveau_device.c +++ b/nouveau/nouveau_device.c @@ -26,10 +26,6 @@ #include "nouveau_private.h" -#if NOUVEAU_DRM_HEADER_PATCHLEVEL != 16 -#error nouveau_drm.h does not match expected patchlevel, update libdrm. -#endif - int nouveau_device_open_existing(struct nouveau_device **dev, int close, int fd, drm_context_t ctx) @@ -42,11 +38,6 @@ nouveau_device_open_existing(struct nouveau_device **dev, int close, if (!dev || *dev) return -EINVAL; - ver = drmGetVersion(fd); - if (!ver || ver->version_patchlevel != NOUVEAU_DRM_HEADER_PATCHLEVEL) - return -EINVAL; - drmFreeVersion(ver); - nvdev = calloc(1, sizeof(*nvdev)); if (!nvdev) return -ENOMEM; @@ -54,6 +45,18 @@ nouveau_device_open_existing(struct nouveau_device **dev, int close, nvdev->ctx = ctx; nvdev->needs_close = close; + ver = drmGetVersion(fd); + if (!ver) + return -EINVAL; + + if ((ver->version_major == 0 && ver->version_patchlevel != 16) && + ver->version_major != 1) { + nouveau_device_close((void *)&nvdev); + return -EINVAL; + } + + drmFreeVersion(ver); + ret = nouveau_device_get_param(&nvdev->base, NOUVEAU_GETPARAM_VM_VRAM_BASE, &value); if (ret) { -- cgit v1.2.3