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
Showing the changes to include/drm (2 of 9 files). Show all
Unified · Split
| @@ -103,8 +103,6 @@ enum ttm_caching_state { · 102 unmodified lines | ||
| 103 | 103 | * @swap_storage: Pointer to shmem struct file for swap storage. |
| 104 | 104 | * @caching_state: The current caching state of the pages. |
| 105 | 105 | * @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 | |
| 108 | 106 | * |
| 109 | 107 | * This is a structure holding the pages, caching- and aperture binding |
| 110 | 108 | * status for a buffer object that isn't backed by fixed (VRAM / AGP) |
| @@ -127,8 +125,23 @@ struct ttm_tt { · 16 unmodified lines | ||
| 127 | 125 | tt_unbound, |
| 128 | 126 | tt_unpopulated, |
| 129 | 127 | } 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; | |
| 130 | 143 | dma_addr_t *dma_address; |
| 131 | − struct list_head alloc_list; | |
| 144 | + struct list_head pages_list; | |
| 132 | 145 | }; |
| 133 | 146 | |
| 134 | 147 | #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 | ||
| 595 | 608 | extern int ttm_tt_init(struct ttm_tt *ttm, struct ttm_bo_device *bdev, |
| 596 | 609 | unsigned long size, uint32_t page_flags, |
| 597 | 610 | 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); | |
| 598 | 624 | |
| 599 | 625 | /** |
| 600 | 626 | * ttm_ttm_bind: |
| @@ -29,35 +29,6 @@ · 28 unmodified lines | ||
| 29 | 29 | #include "ttm_bo_driver.h" |
| 30 | 30 | #include "ttm_memory.h" |
| 31 | 31 | |
| 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); | |
| 61 | 32 | /** |
| 62 | 33 | * Initialize pool allocator. |
| 63 | 34 | */ |
| @@ -107,8 +78,8 @@ void ttm_dma_page_alloc_fini(void); · 43 unmodified lines | ||
| 107 | 78 | */ |
| 108 | 79 | extern int ttm_dma_page_alloc_debugfs(struct seq_file *m, void *data); |
| 109 | 80 | |
| 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); | |
| 112 | 83 | |
| 113 | 84 | #else |
| 114 | 85 | static inline int ttm_dma_page_alloc_init(struct ttm_mem_global *glob, |