xref: /openbmc/linux/arch/csky/abiv1/inc/abi/page.h (revision d0034a7a4ac7fae708146ac0059b9c47a1543f0d)
1013de2d6SGuo Ren /* SPDX-License-Identifier: GPL-2.0 */
2013de2d6SGuo Ren 
3*be819aa6SGuo Ren #include <asm/shmparam.h>
4*be819aa6SGuo Ren 
5013de2d6SGuo Ren extern void flush_dcache_page(struct page *page);
6013de2d6SGuo Ren 
pages_do_alias(unsigned long addr1,unsigned long addr2)7013de2d6SGuo Ren static inline unsigned long pages_do_alias(unsigned long addr1,
8013de2d6SGuo Ren 					   unsigned long addr2)
9013de2d6SGuo Ren {
10*be819aa6SGuo Ren 	return (addr1 ^ addr2) & (SHMLBA-1);
11013de2d6SGuo Ren }
12013de2d6SGuo Ren 
clear_user_page(void * addr,unsigned long vaddr,struct page * page)13013de2d6SGuo Ren static inline void clear_user_page(void *addr, unsigned long vaddr,
14013de2d6SGuo Ren 				   struct page *page)
15013de2d6SGuo Ren {
16013de2d6SGuo Ren 	clear_page(addr);
17013de2d6SGuo Ren 	if (pages_do_alias((unsigned long) addr, vaddr & PAGE_MASK))
18013de2d6SGuo Ren 		flush_dcache_page(page);
19013de2d6SGuo Ren }
20013de2d6SGuo Ren 
copy_user_page(void * to,void * from,unsigned long vaddr,struct page * page)21013de2d6SGuo Ren static inline void copy_user_page(void *to, void *from, unsigned long vaddr,
22013de2d6SGuo Ren 				  struct page *page)
23013de2d6SGuo Ren {
24013de2d6SGuo Ren 	copy_page(to, from);
25013de2d6SGuo Ren 	if (pages_do_alias((unsigned long) to, vaddr & PAGE_MASK))
26013de2d6SGuo Ren 		flush_dcache_page(page);
27013de2d6SGuo Ren }
28