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_HUGETLB_PAGE
8 #define HAVE_ARCH_HUGETLB_UNMAPPED_AREA
9 #endif
10 #define HAVE_ARCH_UNMAPPED_AREA
11 #define HAVE_ARCH_UNMAPPED_AREA_TOPDOWN
12 
13 #define SLICE_LOW_SHIFT		28
14 #define SLICE_LOW_TOP		(0x100000000ul)
15 #define SLICE_NUM_LOW		(SLICE_LOW_TOP >> SLICE_LOW_SHIFT)
16 #define GET_LOW_SLICE_INDEX(addr)	((addr) >> SLICE_LOW_SHIFT)
17 
18 #define SLICE_HIGH_SHIFT	40
19 #define SLICE_NUM_HIGH		(H_PGTABLE_RANGE >> SLICE_HIGH_SHIFT)
20 #define GET_HIGH_SLICE_INDEX(addr)	((addr) >> SLICE_HIGH_SHIFT)
21 
22 #define SLB_ADDR_LIMIT_DEFAULT	DEFAULT_MAP_WINDOW_USER64
23 
24 struct mm_struct;
25 
26 unsigned long slice_get_unmapped_area(unsigned long addr, unsigned long len,
27 				      unsigned long flags, unsigned int psize,
28 				      int topdown);
29 
30 unsigned int get_slice_psize(struct mm_struct *mm, unsigned long addr);
31 
32 void slice_set_range_psize(struct mm_struct *mm, unsigned long start,
33 			   unsigned long len, unsigned int psize);
34 
35 void slice_init_new_context_exec(struct mm_struct *mm);
36 void slice_setup_new_exec(void);
37 
38 #endif /* __ASSEMBLY__ */
39 
40 #endif /* _ASM_POWERPC_BOOK3S_64_SLICE_H */
41