History

drm/ttm: isolate dma data from ttm_tt V4

Move dma data to a superset ttm_dma_tt structure which herit from ttm_tt. This allow driver that don't use dma functionalities to not have to waste memory for it. V2 Rebase on top of no memory account changes (where/when is my delorean when i need it ?) V3 Make sure page list is initialized empty V4 typo/syntax fixes

Jerome Glisse committed 15 years ago

Commit 8e7e7051 parent 3230cfc9 files · +203 −156Browse files

Showing the changes to include/drm (2 of 9 files). Show all

Unified · Split

2 files
  1. include/drm/ttm/ttm_bo_driver.h +29 −3
  2. include/drm/ttm/ttm_page_alloc.h +2 −31
include/drm/ttm/ttm_bo_driver.h+29−3
@@ -103,8 +103,6 @@ enum ttm_caching_state { · 102 unmodified lines
103103 * @swap_storage: Pointer to shmem struct file for swap storage.
104104 * @caching_state: The current caching state of the pages.
105105 * @state: The current binding state of the pages.
106− * @dma_address: The DMA (bus) addresses of the pages (if TTM_PAGE_FLAG_DMA32)
107− * @alloc_list: used by some page allocation backend
108106 *
109107 * This is a structure holding the pages, caching- and aperture binding
110108 * status for a buffer object that isn't backed by fixed (VRAM / AGP)
@@ -127,8 +125,23 @@ struct ttm_tt { · 16 unmodified lines
127125 tt_unbound,
128126 tt_unpopulated,
129127 } state;
128+};
129+
130+/**
131+ * struct ttm_dma_tt
132+ *
133+ * @ttm: Base ttm_tt struct.
134+ * @dma_address: The DMA (bus) addresses of the pages
135+ * @pages_list: used by some page allocation backend
136+ *
137+ * This is a structure holding the pages, caching- and aperture binding
138+ * status for a buffer object that isn't backed by fixed (VRAM / AGP)
139+ * memory.
140+ */
141+struct ttm_dma_tt {
142+ struct ttm_tt ttm;
130143 dma_addr_t *dma_address;
131− struct list_head alloc_list;
144+ struct list_head pages_list;
132145 };
133146
134147 #define TTM_MEMTYPE_FLAG_FIXED (1 << 0) /* Fixed (on-card) PCI memory */
@@ -595,6 +608,19 @@ ttm_flag_masked(uint32_t *old, uint32_t new, uint32_t mask) · 460 unmodified lines
595608 extern int ttm_tt_init(struct ttm_tt *ttm, struct ttm_bo_device *bdev,
596609 unsigned long size, uint32_t page_flags,
597610 struct page *dummy_read_page);
611+extern int ttm_dma_tt_init(struct ttm_dma_tt *ttm_dma, struct ttm_bo_device *bdev,
612+ unsigned long size, uint32_t page_flags,
613+ struct page *dummy_read_page);
614+
615+/**
616+ * ttm_tt_fini
617+ *
618+ * @ttm: the ttm_tt structure.
619+ *
620+ * Free memory of ttm_tt structure
621+ */
622+extern void ttm_tt_fini(struct ttm_tt *ttm);
623+extern void ttm_dma_tt_fini(struct ttm_dma_tt *ttm_dma);
598624
599625 /**
600626 * ttm_ttm_bind:
include/drm/ttm/ttm_page_alloc.h+2−31
@@ -29,35 +29,6 @@ · 28 unmodified lines
2929 #include "ttm_bo_driver.h"
3030 #include "ttm_memory.h"
3131
32−/**
33− * Get count number of pages from pool to pages list.
34− *
35− * @pages: head of empty linked list where pages are filled.
36− * @flags: ttm flags for page allocation.
37− * @cstate: ttm caching state for the page.
38− * @count: number of pages to allocate.
39− * @dma_address: The DMA (bus) address of pages (if TTM_PAGE_FLAG_DMA32 set).
40− */
41−int ttm_get_pages(struct page **pages,
42− int flags,
43− enum ttm_caching_state cstate,
44− unsigned npages,
45− dma_addr_t *dma_address);
46−/**
47− * Put linked list of pages to pool.
48− *
49− * @pages: list of pages to free.
50− * @page_count: number of pages in the list. Zero can be passed for unknown
51− * count.
52− * @flags: ttm flags for page allocation.
53− * @cstate: ttm caching state.
54− * @dma_address: The DMA (bus) address of pages (if TTM_PAGE_FLAG_DMA32 set).
55− */
56−void ttm_put_pages(struct page **pages,
57− unsigned npages,
58− int flags,
59− enum ttm_caching_state cstate,
60− dma_addr_t *dma_address);
6132 /**
6233 * Initialize pool allocator.
6334 */
@@ -107,8 +78,8 @@ void ttm_dma_page_alloc_fini(void); · 43 unmodified lines
10778 */
10879 extern int ttm_dma_page_alloc_debugfs(struct seq_file *m, void *data);
10980
110−int ttm_dma_populate(struct ttm_tt *ttm, struct device *dev);
111−extern void ttm_dma_unpopulate(struct ttm_tt *ttm, struct device *dev);
81+extern int ttm_dma_populate(struct ttm_dma_tt *ttm_dma, struct device *dev);
82+extern void ttm_dma_unpopulate(struct ttm_dma_tt *ttm_dma, struct device *dev);
11283
11384 #else
11485 static inline int ttm_dma_page_alloc_init(struct ttm_mem_global *glob,