1/* SPDX-License-Identifier: GPL-2.0 */
2#ifndef _LINUX_NUMA_H
3#define _LINUX_NUMA_H
4#include <linux/init.h>
5#include <linux/types.h>
6
7#ifdef CONFIG_NODES_SHIFT
8#define NODES_SHIFT     CONFIG_NODES_SHIFT
9#else
10#define NODES_SHIFT     0
11#endif
12
13#define MAX_NUMNODES    (1 << NODES_SHIFT)
14
15#define	NUMA_NO_NODE	(-1)
16#define	NUMA_NO_MEMBLK	(-1)
17
18/* optionally keep NUMA memory info available post init */
19#ifdef CONFIG_NUMA_KEEP_MEMINFO
20#define __initdata_or_meminfo
21#else
22#define __initdata_or_meminfo __initdata
23#endif
24
25#ifdef CONFIG_NUMA
26#include <asm/sparsemem.h>
27
28/* Generic implementation available */
29int numa_nearest_node(int node, unsigned int state);
30
31#ifndef memory_add_physaddr_to_nid
32int memory_add_physaddr_to_nid(u64 start);
33#endif
34
35#ifndef phys_to_target_node
36int phys_to_target_node(u64 start);
37#endif
38
39#ifndef numa_fill_memblks
40static inline int __init numa_fill_memblks(u64 start, u64 end)
41{
42	return NUMA_NO_MEMBLK;
43}
44#endif
45
46#else /* !CONFIG_NUMA */
47static inline int numa_nearest_node(int node, unsigned int state)
48{
49	return NUMA_NO_NODE;
50}
51
52static inline int memory_add_physaddr_to_nid(u64 start)
53{
54	return 0;
55}
56static inline int phys_to_target_node(u64 start)
57{
58	return 0;
59}
60#endif
61
62#define numa_map_to_online_node(node) numa_nearest_node(node, N_ONLINE)
63
64#ifdef CONFIG_HAVE_ARCH_NODE_DEV_GROUP
65extern const struct attribute_group arch_node_dev_group;
66#endif
67
68#endif /* _LINUX_NUMA_H */
69