1/* SPDX-License-Identifier: GPL-2.0 */
2#ifndef _ASM_X86_SPARSEMEM_H
3#define _ASM_X86_SPARSEMEM_H
4
5#include <linux/types.h>
6
7#ifdef CONFIG_SPARSEMEM
8/*
9 * generic non-linear memory support:
10 *
11 * 1) we will not split memory into more chunks than will fit into the flags
12 *    field of the struct page
13 *
14 * SECTION_SIZE_BITS		2^n: size of each section
15 * MAX_PHYSMEM_BITS		2^n: max size of physical address space
16 *
17 */
18
19#ifdef CONFIG_X86_32
20# ifdef CONFIG_X86_PAE
21#  define SECTION_SIZE_BITS	29
22#  define MAX_PHYSMEM_BITS	36
23# else
24#  define SECTION_SIZE_BITS	26
25#  define MAX_PHYSMEM_BITS	32
26# endif
27#else /* CONFIG_X86_32 */
28# define SECTION_SIZE_BITS	27 /* matt - 128 is convenient right now */
29# define MAX_PHYSMEM_BITS	(pgtable_l5_enabled() ? 52 : 46)
30#endif
31
32#endif /* CONFIG_SPARSEMEM */
33
34#ifndef __ASSEMBLY__
35#ifdef CONFIG_NUMA_KEEP_MEMINFO
36extern int phys_to_target_node(phys_addr_t start);
37#define phys_to_target_node phys_to_target_node
38extern int memory_add_physaddr_to_nid(u64 start);
39#define memory_add_physaddr_to_nid memory_add_physaddr_to_nid
40extern int numa_fill_memblks(u64 start, u64 end);
41#define numa_fill_memblks numa_fill_memblks
42#endif
43#endif /* __ASSEMBLY__ */
44
45#endif /* _ASM_X86_SPARSEMEM_H */
46