summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/i915_gem_gtt.h
diff options
context:
space:
mode:
authorMika Kuoppala2015-06-25 17:35:07 +0200
committerDaniel Vetter2015-06-26 10:51:04 +0200
commit44159ddbeac3d34e5ca9037e151a242b7388df8e (patch)
tree0591f9ba7f1f3d8a84d14c6fa6fb388000efc09d /drivers/gpu/drm/i915/i915_gem_gtt.h
parentdrm/i915/gtt: Introduce i915_page_dir_dma_addr (diff)
downloadkernel-qcow2-linux-44159ddbeac3d34e5ca9037e151a242b7388df8e.tar.gz
kernel-qcow2-linux-44159ddbeac3d34e5ca9037e151a242b7388df8e.tar.xz
kernel-qcow2-linux-44159ddbeac3d34e5ca9037e151a242b7388df8e.zip
drm/i915/gtt: Introduce struct i915_page_dma
All our paging structures have struct page and dma address for that page. Add struct for page/dma address pairs and use it to make the setup and teardown for different paging structures identical. Include the page directory offset also in the struct for legacy gens. Rename it to clearly point out that it is offset into the ggtt. v2: Add comment about ggtt_offset (Michel) Signed-off-by: Mika Kuoppala <mika.kuoppala@intel.com> Reviewed-by: Michel Thierry <michel.thierry@intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm/i915/i915_gem_gtt.h')
-rw-r--r--drivers/gpu/drm/i915/i915_gem_gtt.h25
1 files changed, 16 insertions, 9 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.h b/drivers/gpu/drm/i915/i915_gem_gtt.h
index f368c7155223..c681573b4005 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.h
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.h
@@ -207,19 +207,26 @@ struct i915_vma {
#define DRM_I915_GEM_OBJECT_MAX_PIN_COUNT 0xf
};
-struct i915_page_table {
+struct i915_page_dma {
struct page *page;
- dma_addr_t daddr;
+ union {
+ dma_addr_t daddr;
+
+ /* For gen6/gen7 only. This is the offset in the GGTT
+ * where the page directory entries for PPGTT begin
+ */
+ uint32_t ggtt_offset;
+ };
+};
+
+struct i915_page_table {
+ struct i915_page_dma base;
unsigned long *used_ptes;
};
struct i915_page_directory {
- struct page *page; /* NULL for GEN6-GEN7 */
- union {
- uint32_t pd_offset;
- dma_addr_t daddr;
- };
+ struct i915_page_dma base;
unsigned long *used_pdes;
struct i915_page_table *page_table[I915_PDES]; /* PDEs */
@@ -474,8 +481,8 @@ static inline dma_addr_t
i915_page_dir_dma_addr(const struct i915_hw_ppgtt *ppgtt, const unsigned n)
{
return test_bit(n, ppgtt->pdp.used_pdpes) ?
- ppgtt->pdp.page_directory[n]->daddr :
- ppgtt->scratch_pd->daddr;
+ ppgtt->pdp.page_directory[n]->base.daddr :
+ ppgtt->scratch_pd->base.daddr;
}
int i915_gem_gtt_init(struct drm_device *dev);