drm/i915: move gtt handling to i915_gem_gtt.c
authorDaniel Vetter <daniel.vetter@ffwll.ch>
Sat, 6 Nov 2010 09:10:47 +0000 (10:10 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Tue, 23 Nov 2010 20:14:47 +0000 (20:14 +0000)
No more drm_*_agp in i915_gem.c!

Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
drivers/gpu/drm/i915/i915_drv.h
drivers/gpu/drm/i915/i915_gem.c
drivers/gpu/drm/i915/i915_gem_gtt.c

index b6b5d08c9956f34944b155459564336cf5b275ee..b3bfab93e14c4d07b0344872487fa50249b4dede 100644 (file)
@@ -1143,6 +1143,8 @@ void i915_gem_release(struct drm_device * dev, struct drm_file *file_priv);
 
 /* i915_gem_gtt.c */
 void i915_gem_restore_gtt_mappings(struct drm_device *dev);
+int i915_gem_gtt_bind_object(struct drm_gem_object *obj);
+void i915_gem_gtt_unbind_object(struct drm_gem_object *obj);
 
 /* i915_gem_evict.c */
 int i915_gem_evict_something(struct drm_device *dev, int min_size,
index 07e1b25f4a8a1ce60156e2efa2113f4b335c2c9a..3cac366b3053ab794ff13b40360ebb31c24029a1 100644 (file)
@@ -2288,8 +2288,7 @@ i915_gem_object_unbind(struct drm_gem_object *obj)
        if (obj_priv->fence_reg != I915_FENCE_REG_NONE)
                i915_gem_clear_fence_reg(obj);
 
-       drm_unbind_agp(obj_priv->agp_mem);
-       drm_free_agp(obj_priv->agp_mem, obj->size / PAGE_SIZE);
+       i915_gem_gtt_unbind_object(obj);
 
        i915_gem_object_put_pages_gtt(obj);
 
@@ -2808,15 +2807,8 @@ i915_gem_object_bind_to_gtt(struct drm_gem_object *obj,
                return ret;
        }
 
-       /* Create an AGP memory structure pointing at our pages, and bind it
-        * into the GTT.
-        */
-       obj_priv->agp_mem = drm_agp_bind_pages(dev,
-                                              obj_priv->pages,
-                                              obj->size >> PAGE_SHIFT,
-                                              obj_priv->gtt_space->start,
-                                              obj_priv->agp_type);
-       if (obj_priv->agp_mem == NULL) {
+       ret = i915_gem_gtt_bind_object(obj);
+       if (ret) {
                i915_gem_object_put_pages_gtt(obj);
                drm_mm_put_block(obj_priv->gtt_space);
                obj_priv->gtt_space = NULL;
index 5f21d0a962c4600c28d88a5747a22ce1f113a3d2..f78c15f9e7f257d20b15923212fdc7b05df0b2ac 100644 (file)
@@ -47,3 +47,31 @@ void i915_gem_restore_gtt_mappings(struct drm_device *dev)
        /* Be paranoid and flush the chipset cache. */
        intel_gtt_chipset_flush();
 }
+
+int i915_gem_gtt_bind_object(struct drm_gem_object *obj)
+{
+       struct drm_device *dev = obj->dev;
+       struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);
+
+       /* Create an AGP memory structure pointing at our pages, and bind it
+        * into the GTT.
+        */
+       obj_priv->agp_mem = drm_agp_bind_pages(dev,
+                                              obj_priv->pages,
+                                              obj->size >> PAGE_SHIFT,
+                                              obj_priv->gtt_space->start,
+                                              obj_priv->agp_type);
+
+       if (obj_priv->agp_mem)
+               return 0;
+       else
+               return -ENOMEM;
+}
+
+void i915_gem_gtt_unbind_object(struct drm_gem_object *obj)
+{
+       struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);
+
+       drm_unbind_agp(obj_priv->agp_mem);
+       drm_free_agp(obj_priv->agp_mem, obj->size / PAGE_SIZE);
+}