mirror of https://gitee.com/openkylin/linux.git
drm/i915: move gtt handling to i915_gem_gtt.c
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>
This commit is contained in:
parent
cb16b67b5c
commit
7c2e6fdf45
|
@ -1143,6 +1143,8 @@ void i915_gem_release(struct drm_device * dev, struct drm_file *file_priv);
|
||||||
|
|
||||||
/* i915_gem_gtt.c */
|
/* i915_gem_gtt.c */
|
||||||
void i915_gem_restore_gtt_mappings(struct drm_device *dev);
|
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 */
|
/* i915_gem_evict.c */
|
||||||
int i915_gem_evict_something(struct drm_device *dev, int min_size,
|
int i915_gem_evict_something(struct drm_device *dev, int min_size,
|
||||||
|
|
|
@ -2288,8 +2288,7 @@ i915_gem_object_unbind(struct drm_gem_object *obj)
|
||||||
if (obj_priv->fence_reg != I915_FENCE_REG_NONE)
|
if (obj_priv->fence_reg != I915_FENCE_REG_NONE)
|
||||||
i915_gem_clear_fence_reg(obj);
|
i915_gem_clear_fence_reg(obj);
|
||||||
|
|
||||||
drm_unbind_agp(obj_priv->agp_mem);
|
i915_gem_gtt_unbind_object(obj);
|
||||||
drm_free_agp(obj_priv->agp_mem, obj->size / PAGE_SIZE);
|
|
||||||
|
|
||||||
i915_gem_object_put_pages_gtt(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;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Create an AGP memory structure pointing at our pages, and bind it
|
ret = i915_gem_gtt_bind_object(obj);
|
||||||
* into the GTT.
|
if (ret) {
|
||||||
*/
|
|
||||||
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) {
|
|
||||||
i915_gem_object_put_pages_gtt(obj);
|
i915_gem_object_put_pages_gtt(obj);
|
||||||
drm_mm_put_block(obj_priv->gtt_space);
|
drm_mm_put_block(obj_priv->gtt_space);
|
||||||
obj_priv->gtt_space = NULL;
|
obj_priv->gtt_space = NULL;
|
||||||
|
|
|
@ -47,3 +47,31 @@ void i915_gem_restore_gtt_mappings(struct drm_device *dev)
|
||||||
/* Be paranoid and flush the chipset cache. */
|
/* Be paranoid and flush the chipset cache. */
|
||||||
intel_gtt_chipset_flush();
|
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);
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue