33 lines
		
	
	
		
			623 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			33 lines
		
	
	
		
			623 B
		
	
	
	
		
			C
		
	
	
	
	
	
| // SPDX-License-Identifier: GPL-2.0
 | |
| // Copyright (C) 2018 Hangzhou C-SKY Microsystems co.,ltd.
 | |
| 
 | |
| #include <linux/syscalls.h>
 | |
| #include <asm/page.h>
 | |
| #include <asm/cacheflush.h>
 | |
| #include <asm/cachectl.h>
 | |
| 
 | |
| SYSCALL_DEFINE3(cacheflush,
 | |
| 		void __user *, addr,
 | |
| 		unsigned long, bytes,
 | |
| 		int, cache)
 | |
| {
 | |
| 	switch (cache) {
 | |
| 	case BCACHE:
 | |
| 	case DCACHE:
 | |
| 		dcache_wb_range((unsigned long)addr,
 | |
| 				(unsigned long)addr + bytes);
 | |
| 		if (cache != BCACHE)
 | |
| 			break;
 | |
| 		fallthrough;
 | |
| 	case ICACHE:
 | |
| 		flush_icache_mm_range(current->mm,
 | |
| 				(unsigned long)addr,
 | |
| 				(unsigned long)addr + bytes);
 | |
| 		break;
 | |
| 	default:
 | |
| 		return -EINVAL;
 | |
| 	}
 | |
| 
 | |
| 	return 0;
 | |
| }
 |