req->value = 1;
                return 0;
        case DRM_CAP_PRIME:
-               req->value |= dev->driver->prime_fd_to_handle ? DRM_PRIME_CAP_IMPORT : 0;
-               req->value |= dev->driver->prime_handle_to_fd ? DRM_PRIME_CAP_EXPORT : 0;
+               req->value = DRM_PRIME_CAP_IMPORT | DRM_PRIME_CAP_EXPORT;
                return 0;
        case DRM_CAP_SYNCOBJ:
                req->value = drm_core_check_feature(dev, DRIVER_SYNCOBJ);
 
 {
        struct drm_prime_handle *args = data;
 
-       if (!dev->driver->prime_fd_to_handle)
-               return -ENOSYS;
+       if (dev->driver->prime_fd_to_handle) {
+               return dev->driver->prime_fd_to_handle(dev, file_priv, args->fd,
+                                                      &args->handle);
+       }
 
-       return dev->driver->prime_fd_to_handle(dev, file_priv,
-                       args->fd, &args->handle);
+       return drm_gem_prime_fd_to_handle(dev, file_priv, args->fd, &args->handle);
 }
 
 static struct dma_buf *export_and_register_object(struct drm_device *dev,
 {
        struct drm_prime_handle *args = data;
 
-       if (!dev->driver->prime_handle_to_fd)
-               return -ENOSYS;
-
        /* check flags are valid */
        if (args->flags & ~(DRM_CLOEXEC | DRM_RDWR))
                return -EINVAL;
 
-       return dev->driver->prime_handle_to_fd(dev, file_priv,
-                       args->handle, args->flags, &args->fd);
+       if (dev->driver->prime_handle_to_fd) {
+               return dev->driver->prime_handle_to_fd(dev, file_priv,
+                                                      args->handle, args->flags,
+                                                      &args->fd);
+       }
+       return drm_gem_prime_handle_to_fd(dev, file_priv, args->handle,
+                                         args->flags, &args->fd);
 }
 
 /**
 
        /**
         * @prime_handle_to_fd:
         *
-        * Main PRIME export function. Should be implemented with
-        * drm_gem_prime_handle_to_fd() for GEM based drivers.
-        *
-        * For an in-depth discussion see :ref:`PRIME buffer sharing
-        * documentation <prime_buffer_sharing>`.
+        * PRIME export function. Only used by vmwgfx.
         */
        int (*prime_handle_to_fd)(struct drm_device *dev, struct drm_file *file_priv,
                                uint32_t handle, uint32_t flags, int *prime_fd);
        /**
         * @prime_fd_to_handle:
         *
-        * Main PRIME import function. Should be implemented with
-        * drm_gem_prime_fd_to_handle() for GEM based drivers.
-        *
-        * For an in-depth discussion see :ref:`PRIME buffer sharing
-        * documentation <prime_buffer_sharing>`.
+        * PRIME import function. Only used by vmwgfx.
         */
        int (*prime_fd_to_handle)(struct drm_device *dev, struct drm_file *file_priv,
                                int prime_fd, uint32_t *handle);