]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - drivers/gpu/drm/mgag200/mgag200_main.c
drm/mgag200: Convert mgag200 driver to |struct drm_gem_vram_object|
[linux.git] / drivers / gpu / drm / mgag200 / mgag200_main.c
index 16325509977915858cfcef1368e8567ceeba2d83..59a4028a5c6c032cf8d54705921b854523e4fc94 100644 (file)
@@ -230,11 +230,13 @@ int mgag200_driver_load(struct drm_device *dev, unsigned long flags)
        }
 
        /* Make small buffers to store a hardware cursor (double buffered icon updates) */
-       mgag200_bo_create(dev, roundup(48*64, PAGE_SIZE), 0, 0,
-                                         &mdev->cursor.pixels_1);
-       mgag200_bo_create(dev, roundup(48*64, PAGE_SIZE), 0, 0,
-                                         &mdev->cursor.pixels_2);
-       if (!mdev->cursor.pixels_2 || !mdev->cursor.pixels_1) {
+       mdev->cursor.pixels_1 = drm_gem_vram_create(dev, &mdev->ttm.bdev,
+                                                   roundup(48*64, PAGE_SIZE),
+                                                   0, 0);
+       mdev->cursor.pixels_2 = drm_gem_vram_create(dev, &mdev->ttm.bdev,
+                                                   roundup(48*64, PAGE_SIZE),
+                                                   0, 0);
+       if (IS_ERR(mdev->cursor.pixels_2) || IS_ERR(mdev->cursor.pixels_1)) {
                mdev->cursor.pixels_1 = NULL;
                mdev->cursor.pixels_2 = NULL;
                dev_warn(&dev->pdev->dev,
@@ -272,7 +274,8 @@ int mgag200_gem_create(struct drm_device *dev,
                   u32 size, bool iskernel,
                   struct drm_gem_object **obj)
 {
-       struct mgag200_bo *astbo;
+       struct mga_device *mdev = dev->dev_private;
+       struct drm_gem_vram_object *gbo;
        int ret;
 
        *obj = NULL;
@@ -281,13 +284,14 @@ int mgag200_gem_create(struct drm_device *dev,
        if (size == 0)
                return -EINVAL;
 
-       ret = mgag200_bo_create(dev, size, 0, 0, &astbo);
-       if (ret) {
+       gbo = drm_gem_vram_create(dev, &mdev->ttm.bdev, size, 0, false);
+       if (IS_ERR(gbo)) {
+               ret = PTR_ERR(gbo);
                if (ret != -ERESTARTSYS)
                        DRM_ERROR("failed to allocate GEM object\n");
                return ret;
        }
-       *obj = &astbo->gem;
+       *obj = &gbo->gem;
        return 0;
 }
 
@@ -295,64 +299,8 @@ int mgag200_dumb_create(struct drm_file *file,
                    struct drm_device *dev,
                    struct drm_mode_create_dumb *args)
 {
-       int ret;
-       struct drm_gem_object *gobj;
-       u32 handle;
-
-       args->pitch = args->width * ((args->bpp + 7) / 8);
-       args->size = args->pitch * args->height;
-
-       ret = mgag200_gem_create(dev, args->size, false,
-                            &gobj);
-       if (ret)
-               return ret;
-
-       ret = drm_gem_handle_create(file, gobj, &handle);
-       drm_gem_object_put_unlocked(gobj);
-       if (ret)
-               return ret;
-
-       args->handle = handle;
-       return 0;
-}
-
-static void mgag200_bo_unref(struct mgag200_bo **bo)
-{
-       if ((*bo) == NULL)
-               return;
-       ttm_bo_put(&((*bo)->bo));
-       *bo = NULL;
-}
-
-void mgag200_gem_free_object(struct drm_gem_object *obj)
-{
-       struct mgag200_bo *mgag200_bo = gem_to_mga_bo(obj);
-
-       mgag200_bo_unref(&mgag200_bo);
-}
-
-
-static inline u64 mgag200_bo_mmap_offset(struct mgag200_bo *bo)
-{
-       return drm_vma_node_offset_addr(&bo->bo.vma_node);
-}
-
-int
-mgag200_dumb_mmap_offset(struct drm_file *file,
-                    struct drm_device *dev,
-                    uint32_t handle,
-                    uint64_t *offset)
-{
-       struct drm_gem_object *obj;
-       struct mgag200_bo *bo;
-
-       obj = drm_gem_object_lookup(file, handle);
-       if (obj == NULL)
-               return -ENOENT;
-
-       bo = gem_to_mga_bo(obj);
-       *offset = mgag200_bo_mmap_offset(bo);
+       struct mga_device *mdev = dev->dev_private;
 
-       drm_gem_object_put_unlocked(obj);
-       return 0;
+       return drm_gem_vram_fill_create_dumb(file, dev, &mdev->ttm.bdev, 0,
+                                           false, args);
 }