162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci#ifndef _ASM_X86_NUMA_H
362306a36Sopenharmony_ci#define _ASM_X86_NUMA_H
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci#include <linux/nodemask.h>
662306a36Sopenharmony_ci#include <linux/errno.h>
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci#include <asm/topology.h>
962306a36Sopenharmony_ci#include <asm/apicdef.h>
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci#ifdef CONFIG_NUMA
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci#define NR_NODE_MEMBLKS		(MAX_NUMNODES*2)
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ciextern int numa_off;
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ci/*
1862306a36Sopenharmony_ci * __apicid_to_node[] stores the raw mapping between physical apicid and
1962306a36Sopenharmony_ci * node and is used to initialize cpu_to_node mapping.
2062306a36Sopenharmony_ci *
2162306a36Sopenharmony_ci * The mapping may be overridden by apic->numa_cpu_node() on 32bit and thus
2262306a36Sopenharmony_ci * should be accessed by the accessors - set_apicid_to_node() and
2362306a36Sopenharmony_ci * numa_cpu_node().
2462306a36Sopenharmony_ci */
2562306a36Sopenharmony_ciextern s16 __apicid_to_node[MAX_LOCAL_APIC];
2662306a36Sopenharmony_ciextern nodemask_t numa_nodes_parsed __initdata;
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ciextern int __init numa_add_memblk(int nodeid, u64 start, u64 end);
2962306a36Sopenharmony_ciextern void __init numa_set_distance(int from, int to, int distance);
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_cistatic inline void set_apicid_to_node(int apicid, s16 node)
3262306a36Sopenharmony_ci{
3362306a36Sopenharmony_ci	__apicid_to_node[apicid] = node;
3462306a36Sopenharmony_ci}
3562306a36Sopenharmony_ci
3662306a36Sopenharmony_ciextern int numa_cpu_node(int cpu);
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_ci#else	/* CONFIG_NUMA */
3962306a36Sopenharmony_cistatic inline void set_apicid_to_node(int apicid, s16 node)
4062306a36Sopenharmony_ci{
4162306a36Sopenharmony_ci}
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_cistatic inline int numa_cpu_node(int cpu)
4462306a36Sopenharmony_ci{
4562306a36Sopenharmony_ci	return NUMA_NO_NODE;
4662306a36Sopenharmony_ci}
4762306a36Sopenharmony_ci#endif	/* CONFIG_NUMA */
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_ci#ifdef CONFIG_X86_32
5062306a36Sopenharmony_ci# include <asm/numa_32.h>
5162306a36Sopenharmony_ci#endif
5262306a36Sopenharmony_ci
5362306a36Sopenharmony_ci#ifdef CONFIG_NUMA
5462306a36Sopenharmony_ciextern void numa_set_node(int cpu, int node);
5562306a36Sopenharmony_ciextern void numa_clear_node(int cpu);
5662306a36Sopenharmony_ciextern void __init init_cpu_to_node(void);
5762306a36Sopenharmony_ciextern void numa_add_cpu(int cpu);
5862306a36Sopenharmony_ciextern void numa_remove_cpu(int cpu);
5962306a36Sopenharmony_ciextern void init_gi_nodes(void);
6062306a36Sopenharmony_ci#else	/* CONFIG_NUMA */
6162306a36Sopenharmony_cistatic inline void numa_set_node(int cpu, int node)	{ }
6262306a36Sopenharmony_cistatic inline void numa_clear_node(int cpu)		{ }
6362306a36Sopenharmony_cistatic inline void init_cpu_to_node(void)		{ }
6462306a36Sopenharmony_cistatic inline void numa_add_cpu(int cpu)		{ }
6562306a36Sopenharmony_cistatic inline void numa_remove_cpu(int cpu)		{ }
6662306a36Sopenharmony_cistatic inline void init_gi_nodes(void)			{ }
6762306a36Sopenharmony_ci#endif	/* CONFIG_NUMA */
6862306a36Sopenharmony_ci
6962306a36Sopenharmony_ci#ifdef CONFIG_DEBUG_PER_CPU_MAPS
7062306a36Sopenharmony_civoid debug_cpumask_set_cpu(int cpu, int node, bool enable);
7162306a36Sopenharmony_ci#endif
7262306a36Sopenharmony_ci
7362306a36Sopenharmony_ci#ifdef CONFIG_NUMA_EMU
7462306a36Sopenharmony_ci#define FAKE_NODE_MIN_SIZE	((u64)32 << 20)
7562306a36Sopenharmony_ci#define FAKE_NODE_MIN_HASH_MASK	(~(FAKE_NODE_MIN_SIZE - 1UL))
7662306a36Sopenharmony_ciint numa_emu_cmdline(char *str);
7762306a36Sopenharmony_ci#else /* CONFIG_NUMA_EMU */
7862306a36Sopenharmony_cistatic inline int numa_emu_cmdline(char *str)
7962306a36Sopenharmony_ci{
8062306a36Sopenharmony_ci	return -EINVAL;
8162306a36Sopenharmony_ci}
8262306a36Sopenharmony_ci#endif /* CONFIG_NUMA_EMU */
8362306a36Sopenharmony_ci
8462306a36Sopenharmony_ci#endif	/* _ASM_X86_NUMA_H */
85