1/* SPDX-License-Identifier: GPL-2.0 */
2#ifndef _ASM_X86_SPARSEMEM_H
3#define _ASM_X86_SPARSEMEM_H
4
5#ifdef CONFIG_SPARSEMEM
6/*
7 * generic non-linear memory support:
8 *
9 * 1) we will not split memory into more chunks than will fit into the flags
10 * field of the struct page
11 *
12 * SECTION_SIZE_BITS 2^n: size of each section
13 * MAX_PHYSADDR_BITS 2^n: max size of physical address space
14 * MAX_PHYSMEM_BITS 2^n: how much memory we can have in that space
15 *
16 */
17
18#ifdef CONFIG_X86_32
19# ifdef CONFIG_X86_PAE
20# define SECTION_SIZE_BITS 29
21# define MAX_PHYSADDR_BITS 36
22# define MAX_PHYSMEM_BITS 36
23# else
24# define SECTION_SIZE_BITS 26
25# define MAX_PHYSADDR_BITS 32
26# define MAX_PHYSMEM_BITS 32
27# endif
28#else /* CONFIG_X86_32 */
29# define SECTION_SIZE_BITS 27 /* matt - 128 is convenient right now */
30# define MAX_PHYSADDR_BITS (pgtable_l5_enabled() ? 52 : 44)
31# define MAX_PHYSMEM_BITS (pgtable_l5_enabled() ? 52 : 46)
32#endif
33
34#endif /* CONFIG_SPARSEMEM */
35#endif /* _ASM_X86_SPARSEMEM_H */
36