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
26struct mm_struct;
27
28unsigned long slice_get_unmapped_area(unsigned long addr, unsigned long len,
29				      unsigned long flags, unsigned int psize,
30				      int topdown);
31
32unsigned int get_slice_psize(struct mm_struct *mm, unsigned long addr);
33
34void slice_set_range_psize(struct mm_struct *mm, unsigned long start,
35			   unsigned long len, unsigned int psize);
36
37void slice_init_new_context_exec(struct mm_struct *mm);
38void slice_setup_new_exec(void);
39
40#endif /* __ASSEMBLY__ */
41
42#endif /* _ASM_POWERPC_BOOK3S_64_SLICE_H */
43