Rev 4569 | Rev 5271 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 4569 | Rev 5078 | ||
---|---|---|---|
Line 55... | Line 55... | ||
55 | ttm->pages = drm_calloc_large(ttm->num_pages, sizeof(void*)); |
55 | ttm->pages = drm_calloc_large(ttm->num_pages, sizeof(void*)); |
56 | } |
56 | } |
Line 57... | Line 57... | ||
57 | 57 | ||
58 | static void ttm_dma_tt_alloc_page_directory(struct ttm_dma_tt *ttm) |
58 | static void ttm_dma_tt_alloc_page_directory(struct ttm_dma_tt *ttm) |
59 | { |
59 | { |
60 | ttm->ttm.pages = drm_calloc_large(ttm->ttm.num_pages, sizeof(void*)); |
60 | ttm->ttm.pages = drm_calloc_large(ttm->ttm.num_pages, |
61 | ttm->dma_address = drm_calloc_large(ttm->ttm.num_pages, |
61 | sizeof(*ttm->ttm.pages) + |
- | 62 | sizeof(*ttm->dma_address) + |
|
- | 63 | sizeof(*ttm->cpu_address)); |
|
- | 64 | ttm->cpu_address = (void *) (ttm->ttm.pages + ttm->ttm.num_pages); |
|
62 | sizeof(*ttm->dma_address)); |
65 | ttm->dma_address = (void *) (ttm->cpu_address + ttm->ttm.num_pages); |
Line 63... | Line 66... | ||
63 | } |
66 | } |
64 | 67 | ||
65 | #ifdef CONFIG_X86 |
68 | #ifdef CONFIG_X86 |
Line 116... | Line 119... | ||
116 | /* Change caching but don't populate */ |
119 | /* Change caching but don't populate */ |
117 | ttm->caching_state = c_state; |
120 | ttm->caching_state = c_state; |
118 | return 0; |
121 | return 0; |
119 | } |
122 | } |
Line 120... | Line 123... | ||
120 | 123 | ||
121 | // if (ttm->caching_state == tt_cached) |
124 | if (ttm->caching_state == tt_cached) |
Line 122... | Line 125... | ||
122 | // drm_clflush_pages(ttm->pages, ttm->num_pages); |
125 | drm_clflush_pages(ttm->pages, ttm->num_pages); |
123 | 126 | ||
124 | for (i = 0; i < ttm->num_pages; ++i) { |
127 | for (i = 0; i < ttm->num_pages; ++i) { |
125 | cur_page = ttm->pages[i]; |
128 | cur_page = ttm->pages[i]; |
Line 170... | Line 173... | ||
170 | 173 | ||
171 | if (ttm->state == tt_bound) { |
174 | if (ttm->state == tt_bound) { |
172 | ttm_tt_unbind(ttm); |
175 | ttm_tt_unbind(ttm); |
Line 173... | Line 176... | ||
173 | } |
176 | } |
174 | 177 | ||
Line 175... | Line 178... | ||
175 | // if (ttm->state == tt_unbound) |
178 | if (ttm->state == tt_unbound) |
176 | // ttm_tt_unpopulate(ttm); |
179 | ttm_tt_unpopulate(ttm); |
177 | 180 | ||
Line 228... | Line 231... | ||
228 | ttm->state = tt_unpopulated; |
231 | ttm->state = tt_unpopulated; |
229 | ttm->swap_storage = NULL; |
232 | ttm->swap_storage = NULL; |
Line 230... | Line 233... | ||
230 | 233 | ||
231 | INIT_LIST_HEAD(&ttm_dma->pages_list); |
234 | INIT_LIST_HEAD(&ttm_dma->pages_list); |
232 | ttm_dma_tt_alloc_page_directory(ttm_dma); |
235 | ttm_dma_tt_alloc_page_directory(ttm_dma); |
233 | if (!ttm->pages || !ttm_dma->dma_address) { |
236 | if (!ttm->pages) { |
234 | ttm_tt_destroy(ttm); |
237 | ttm_tt_destroy(ttm); |
235 | printf("Failed allocating page table\n"); |
238 | printf("Failed allocating page table\n"); |
236 | return -ENOMEM; |
239 | return -ENOMEM; |
237 | } |
240 | } |
Line 243... | Line 246... | ||
243 | { |
246 | { |
244 | struct ttm_tt *ttm = &ttm_dma->ttm; |
247 | struct ttm_tt *ttm = &ttm_dma->ttm; |
Line 245... | Line 248... | ||
245 | 248 | ||
246 | drm_free_large(ttm->pages); |
249 | drm_free_large(ttm->pages); |
247 | ttm->pages = NULL; |
250 | ttm->pages = NULL; |
248 | drm_free_large(ttm_dma->dma_address); |
251 | ttm_dma->cpu_address = NULL; |
249 | ttm_dma->dma_address = NULL; |
252 | ttm_dma->dma_address = NULL; |
250 | } |
253 | } |
Line 251... | Line 254... | ||
251 | EXPORT_SYMBOL(ttm_dma_tt_fini); |
254 | EXPORT_SYMBOL(ttm_dma_tt_fini); |
Line 259... | Line 262... | ||
259 | BUG_ON(ret); |
262 | BUG_ON(ret); |
260 | ttm->state = tt_unbound; |
263 | ttm->state = tt_unbound; |
261 | } |
264 | } |
262 | } |
265 | } |
Line 263... | Line -... | ||
263 | - | ||
264 | #if 0 |
- | |
265 | 266 | ||
266 | int ttm_tt_bind(struct ttm_tt *ttm, struct ttm_mem_reg *bo_mem) |
267 | int ttm_tt_bind(struct ttm_tt *ttm, struct ttm_mem_reg *bo_mem) |
267 | { |
268 | { |
Line 268... | Line 269... | ||
268 | int ret = 0; |
269 | int ret = 0; |
Line 284... | Line 285... | ||
284 | ttm->state = tt_bound; |
285 | ttm->state = tt_bound; |
Line 285... | Line 286... | ||
285 | 286 | ||
286 | return 0; |
287 | return 0; |
287 | } |
288 | } |
288 | EXPORT_SYMBOL(ttm_tt_bind); |
- | |
Line 289... | Line 289... | ||
289 | #endif |
289 | EXPORT_SYMBOL(ttm_tt_bind); |
290 | 290 | ||
291 | /* |
291 | #if 0 |
292 | int ttm_tt_swapin(struct ttm_tt *ttm) |
292 | int ttm_tt_swapin(struct ttm_tt *ttm) |
293 | { |
293 | { |
294 | struct address_space *swap_space; |
294 | struct address_space *swap_space; |
Line 378... | Line 378... | ||
378 | if (!persistent_swap_storage) |
378 | if (!persistent_swap_storage) |
379 | fput(swap_storage); |
379 | fput(swap_storage); |
Line 380... | Line 380... | ||
380 | 380 | ||
381 | return ret; |
381 | return ret; |
- | 382 | } |
|
Line -... | Line 383... | ||
- | 383 | #endif |
|
382 | } |
384 | |
- | 385 | static void ttm_tt_clear_mapping(struct ttm_tt *ttm) |
|
- | 386 | { |
|
Line -... | Line 387... | ||
- | 387 | pgoff_t i; |
|
Line -... | Line 388... | ||
- | 388 | struct page **page = ttm->pages; |
|
- | 389 | ||
- | 390 | } |
|
- | 391 | ||
- | 392 | void ttm_tt_unpopulate(struct ttm_tt *ttm) |
|
- | 393 | { |
|
- | 394 | if (ttm->state == tt_unpopulated) |
|
- | 395 | return; |