OSDN Git Service

nouveau: accept both 0.0.16 and 1.x.x
authorBen Skeggs <bskeggs@redhat.com>
Wed, 18 Aug 2010 02:06:48 +0000 (12:06 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Wed, 18 Aug 2010 02:06:48 +0000 (12:06 +1000)
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
nouveau/nouveau_device.c

index c525391..f450e30 100644 (file)
 
 #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) {