1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _ASM_POWERPC_BOOK3S_64_SLICE_H
3 #define _ASM_POWERPC_BOOK3S_64_SLICE_H
4 
5 #ifndef __ASSEMBLY__
6 
7 #ifdef CONFIG_PPC_64S_HASH_MMU
8 #ifdef CONFIG_HUGETLB_PAGE
9 #define HAVE_ARCH_HUGETLB_UNMAPPED_AREA
10 #endif
11 #define HAVE_ARCH_UNMAPPED_AREA
12 #define HAVE_ARCH_UNMAPPED_AREA_TOPDOWN
13 #endif
14 
15 #define SLICE_LOW_SHIFT		28
16 #define SLICE_LOW_TOP		(0x100000000ul)
17 #define SLICE_NUM_LOW		(SLICE_LOW_TOP >> SLICE_LOW_SHIFT)
18 #define GET_LOW_SLICE_INDEX(addr)	((addr) >> SLICE_LOW_SHIFT)
19 
20 #define SLICE_HIGH_SHIFT	40
21 #define SLICE_NUM_HIGH		(H_PGTABLE_RANGE >> SLICE_HIGH_SHIFT)
22 #define GET_HIGH_SLICE_INDEX(addr)	((addr) >> SLICE_HIGH_SHIFT)
23 
24 #define SLB_ADDR_LIMIT_DEFAULT	DEFAULT_MAP_WINDOW_USER64
25 
26 struct mm_struct;
27 
28 unsigned long slice_get_unmapped_area(unsigned long addr, unsigned long len,
29 				      unsigned long flags, unsigned int psize,
30 				      int topdown);
31 
32 unsigned int get_slice_psize(struct mm_struct *mm, unsigned long addr);
33 
34 void slice_set_range_psize(struct mm_struct *mm, unsigned long start,
35 			   unsigned long len, unsigned int psize);
36 
37 void slice_init_new_context_exec(struct mm_struct *mm);
38 void slice_setup_new_exec(void);
39 
40 #endif /* __ASSEMBLY__ */
41 
42 #endif /* _ASM_POWERPC_BOOK3S_64_SLICE_H */
43