18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci#ifndef _ASM_X86_NUMA_H
38c2ecf20Sopenharmony_ci#define _ASM_X86_NUMA_H
48c2ecf20Sopenharmony_ci
58c2ecf20Sopenharmony_ci#include <linux/nodemask.h>
68c2ecf20Sopenharmony_ci#include <linux/errno.h>
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_ci#include <asm/topology.h>
98c2ecf20Sopenharmony_ci#include <asm/apicdef.h>
108c2ecf20Sopenharmony_ci
118c2ecf20Sopenharmony_ci#ifdef CONFIG_NUMA
128c2ecf20Sopenharmony_ci
138c2ecf20Sopenharmony_ci#define NR_NODE_MEMBLKS		(MAX_NUMNODES*2)
148c2ecf20Sopenharmony_ci
158c2ecf20Sopenharmony_ciextern int numa_off;
168c2ecf20Sopenharmony_ci
178c2ecf20Sopenharmony_ci/*
188c2ecf20Sopenharmony_ci * __apicid_to_node[] stores the raw mapping between physical apicid and
198c2ecf20Sopenharmony_ci * node and is used to initialize cpu_to_node mapping.
208c2ecf20Sopenharmony_ci *
218c2ecf20Sopenharmony_ci * The mapping may be overridden by apic->numa_cpu_node() on 32bit and thus
228c2ecf20Sopenharmony_ci * should be accessed by the accessors - set_apicid_to_node() and
238c2ecf20Sopenharmony_ci * numa_cpu_node().
248c2ecf20Sopenharmony_ci */
258c2ecf20Sopenharmony_ciextern s16 __apicid_to_node[MAX_LOCAL_APIC];
268c2ecf20Sopenharmony_ciextern nodemask_t numa_nodes_parsed __initdata;
278c2ecf20Sopenharmony_ci
288c2ecf20Sopenharmony_ciextern int __init numa_add_memblk(int nodeid, u64 start, u64 end);
298c2ecf20Sopenharmony_ciextern void __init numa_set_distance(int from, int to, int distance);
308c2ecf20Sopenharmony_ci
318c2ecf20Sopenharmony_cistatic inline void set_apicid_to_node(int apicid, s16 node)
328c2ecf20Sopenharmony_ci{
338c2ecf20Sopenharmony_ci	__apicid_to_node[apicid] = node;
348c2ecf20Sopenharmony_ci}
358c2ecf20Sopenharmony_ci
368c2ecf20Sopenharmony_ciextern int numa_cpu_node(int cpu);
378c2ecf20Sopenharmony_ci
388c2ecf20Sopenharmony_ci#else	/* CONFIG_NUMA */
398c2ecf20Sopenharmony_cistatic inline void set_apicid_to_node(int apicid, s16 node)
408c2ecf20Sopenharmony_ci{
418c2ecf20Sopenharmony_ci}
428c2ecf20Sopenharmony_ci
438c2ecf20Sopenharmony_cistatic inline int numa_cpu_node(int cpu)
448c2ecf20Sopenharmony_ci{
458c2ecf20Sopenharmony_ci	return NUMA_NO_NODE;
468c2ecf20Sopenharmony_ci}
478c2ecf20Sopenharmony_ci#endif	/* CONFIG_NUMA */
488c2ecf20Sopenharmony_ci
498c2ecf20Sopenharmony_ci#ifdef CONFIG_X86_32
508c2ecf20Sopenharmony_ci# include <asm/numa_32.h>
518c2ecf20Sopenharmony_ci#endif
528c2ecf20Sopenharmony_ci
538c2ecf20Sopenharmony_ci#ifdef CONFIG_NUMA
548c2ecf20Sopenharmony_ciextern void numa_set_node(int cpu, int node);
558c2ecf20Sopenharmony_ciextern void numa_clear_node(int cpu);
568c2ecf20Sopenharmony_ciextern void __init init_cpu_to_node(void);
578c2ecf20Sopenharmony_ciextern void numa_add_cpu(int cpu);
588c2ecf20Sopenharmony_ciextern void numa_remove_cpu(int cpu);
598c2ecf20Sopenharmony_ciextern void init_gi_nodes(void);
608c2ecf20Sopenharmony_ci#else	/* CONFIG_NUMA */
618c2ecf20Sopenharmony_cistatic inline void numa_set_node(int cpu, int node)	{ }
628c2ecf20Sopenharmony_cistatic inline void numa_clear_node(int cpu)		{ }
638c2ecf20Sopenharmony_cistatic inline void init_cpu_to_node(void)		{ }
648c2ecf20Sopenharmony_cistatic inline void numa_add_cpu(int cpu)		{ }
658c2ecf20Sopenharmony_cistatic inline void numa_remove_cpu(int cpu)		{ }
668c2ecf20Sopenharmony_cistatic inline void init_gi_nodes(void)			{ }
678c2ecf20Sopenharmony_ci#endif	/* CONFIG_NUMA */
688c2ecf20Sopenharmony_ci
698c2ecf20Sopenharmony_ci#ifdef CONFIG_DEBUG_PER_CPU_MAPS
708c2ecf20Sopenharmony_civoid debug_cpumask_set_cpu(int cpu, int node, bool enable);
718c2ecf20Sopenharmony_ci#endif
728c2ecf20Sopenharmony_ci
738c2ecf20Sopenharmony_ci#ifdef CONFIG_NUMA_EMU
748c2ecf20Sopenharmony_ci#define FAKE_NODE_MIN_SIZE	((u64)32 << 20)
758c2ecf20Sopenharmony_ci#define FAKE_NODE_MIN_HASH_MASK	(~(FAKE_NODE_MIN_SIZE - 1UL))
768c2ecf20Sopenharmony_ciint numa_emu_cmdline(char *str);
778c2ecf20Sopenharmony_ci#else /* CONFIG_NUMA_EMU */
788c2ecf20Sopenharmony_cistatic inline int numa_emu_cmdline(char *str)
798c2ecf20Sopenharmony_ci{
808c2ecf20Sopenharmony_ci	return -EINVAL;
818c2ecf20Sopenharmony_ci}
828c2ecf20Sopenharmony_ci#endif /* CONFIG_NUMA_EMU */
838c2ecf20Sopenharmony_ci
848c2ecf20Sopenharmony_ci#endif	/* _ASM_X86_NUMA_H */
85