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