コード例 #1
0
ファイル: proc-l4.c プロジェクト: Ksys-labs/l4linux
void __glue(_CACHE, _dma_map_area)(const void *start, size_t sz, int direction)
{
	if (direction == DMA_FROM_DEVICE)
		l4_cache_inv_data((unsigned long)start,
		                  (unsigned long)start + sz);
	else
		l4_cache_clean_data((unsigned long)start,
		                    (unsigned long)start + sz);
}
コード例 #2
0
void __glue(_CACHE, _coherent_user_range)(unsigned long start, unsigned long end)
{
	pgd_t *pgd;

	if (current->mm)
		pgd = (pgd_t *)current->mm->pgd;
	else if (current->active_mm)
		pgd = (pgd_t *)current->active_mm->pgd;
	else {
		printk("active_mm: No mm... %lx-%lx\n", start, end);
		return;
	}

	for (start &= PAGE_MASK; start < end; start += PAGE_SIZE) {
		pte_t *ptep = lookup_pte(pgd, start);
		if (ptep && pte_present(*ptep) && pte_mapped(*ptep)) {
			unsigned long k = pte_pfn(*ptep) << PAGE_SHIFT;
			unsigned long e = k + PAGE_SIZE;
			l4_cache_clean_data(k, e);
		}
	}
}
コード例 #3
0
ファイル: proc-l4.c プロジェクト: Ksys-labs/l4linux
void cpu_dcache_clean_area(void *addr, int sz)
{ l4_cache_clean_data((unsigned long)addr, (unsigned long)addr + sz - 1); }
コード例 #4
0
ファイル: proc-l4.c プロジェクト: Ksys-labs/l4linux
void __glue(_CACHE, _flush_kern_dcache_area)(void *x, size_t size)
{
	l4_cache_clean_data((unsigned long)x,
	                    (unsigned long)x + size - 1);
}