blob: d9ac7e6408ef3196253f3c6838d111a51a1f0973 [file] [log] [blame]
David Brazdil0f672f62019-12-10 10:32:29 +00001/* SPDX-License-Identifier: GPL-2.0 */
Andrew Scullb4b6d4a2019-01-02 15:54:55 +00002// Copyright (C) 2005-2017 Andes Technology Corporation
3
4#ifndef __NDS32_CACHEFLUSH_H__
5#define __NDS32_CACHEFLUSH_H__
6
7#include <linux/mm.h>
8
9#define PG_dcache_dirty PG_arch_1
10
11void flush_icache_range(unsigned long start, unsigned long end);
12void flush_icache_page(struct vm_area_struct *vma, struct page *page);
13#ifdef CONFIG_CPU_CACHE_ALIASING
14void flush_cache_mm(struct mm_struct *mm);
15void flush_cache_dup_mm(struct mm_struct *mm);
16void flush_cache_range(struct vm_area_struct *vma,
17 unsigned long start, unsigned long end);
18void flush_cache_page(struct vm_area_struct *vma,
19 unsigned long addr, unsigned long pfn);
20void flush_cache_kmaps(void);
21void flush_cache_vmap(unsigned long start, unsigned long end);
22void flush_cache_vunmap(unsigned long start, unsigned long end);
23
24#define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 1
25void flush_dcache_page(struct page *page);
26void copy_to_user_page(struct vm_area_struct *vma, struct page *page,
27 unsigned long vaddr, void *dst, void *src, int len);
28void copy_from_user_page(struct vm_area_struct *vma, struct page *page,
29 unsigned long vaddr, void *dst, void *src, int len);
30
31#define ARCH_HAS_FLUSH_ANON_PAGE
32void flush_anon_page(struct vm_area_struct *vma,
33 struct page *page, unsigned long vaddr);
34
35#define ARCH_HAS_FLUSH_KERNEL_DCACHE_PAGE
36void flush_kernel_dcache_page(struct page *page);
37void flush_kernel_vmap_range(void *addr, int size);
38void invalidate_kernel_vmap_range(void *addr, int size);
39#define flush_dcache_mmap_lock(mapping) xa_lock_irq(&(mapping)->i_pages)
40#define flush_dcache_mmap_unlock(mapping) xa_unlock_irq(&(mapping)->i_pages)
41
42#else
43#include <asm-generic/cacheflush.h>
44#undef flush_icache_range
45#undef flush_icache_page
46#undef flush_icache_user_range
47void flush_icache_user_range(struct vm_area_struct *vma, struct page *page,
48 unsigned long addr, int len);
49#endif
50
51#endif /* __NDS32_CACHEFLUSH_H__ */