Subversion Repositories Kolibri OS

Rev

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;