162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci#ifndef _ASM_SPARC64_TOPOLOGY_H
362306a36Sopenharmony_ci#define _ASM_SPARC64_TOPOLOGY_H
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci#ifdef CONFIG_NUMA
662306a36Sopenharmony_ci
762306a36Sopenharmony_ci#include <asm/mmzone.h>
862306a36Sopenharmony_ci
962306a36Sopenharmony_cistatic inline int cpu_to_node(int cpu)
1062306a36Sopenharmony_ci{
1162306a36Sopenharmony_ci	return numa_cpu_lookup_table[cpu];
1262306a36Sopenharmony_ci}
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci#define cpumask_of_node(node) ((node) == -1 ?				\
1562306a36Sopenharmony_ci			       cpu_all_mask :				\
1662306a36Sopenharmony_ci			       &numa_cpumask_lookup_table[node])
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_cistruct pci_bus;
1962306a36Sopenharmony_ci#ifdef CONFIG_PCI
2062306a36Sopenharmony_ciint pcibus_to_node(struct pci_bus *pbus);
2162306a36Sopenharmony_ci#else
2262306a36Sopenharmony_cistatic inline int pcibus_to_node(struct pci_bus *pbus)
2362306a36Sopenharmony_ci{
2462306a36Sopenharmony_ci	return -1;
2562306a36Sopenharmony_ci}
2662306a36Sopenharmony_ci#endif
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci#define cpumask_of_pcibus(bus)	\
2962306a36Sopenharmony_ci	(pcibus_to_node(bus) == -1 ? \
3062306a36Sopenharmony_ci	 cpu_all_mask : \
3162306a36Sopenharmony_ci	 cpumask_of_node(pcibus_to_node(bus)))
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_ciint __node_distance(int, int);
3462306a36Sopenharmony_ci#define node_distance(a, b) __node_distance(a, b)
3562306a36Sopenharmony_ci
3662306a36Sopenharmony_ci#else /* CONFIG_NUMA */
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_ci#include <asm-generic/topology.h>
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_ci#endif /* !(CONFIG_NUMA) */
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_ci#ifdef CONFIG_SMP
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_ci#include <asm/cpudata.h>
4562306a36Sopenharmony_ci
4662306a36Sopenharmony_ci#define topology_physical_package_id(cpu)	(cpu_data(cpu).proc_id)
4762306a36Sopenharmony_ci#define topology_core_id(cpu)			(cpu_data(cpu).core_id)
4862306a36Sopenharmony_ci#define topology_core_cpumask(cpu)		(&cpu_core_sib_map[cpu])
4962306a36Sopenharmony_ci#define topology_core_cache_cpumask(cpu)	(&cpu_core_sib_cache_map[cpu])
5062306a36Sopenharmony_ci#define topology_sibling_cpumask(cpu)		(&per_cpu(cpu_sibling_map, cpu))
5162306a36Sopenharmony_ci#endif /* CONFIG_SMP */
5262306a36Sopenharmony_ci
5362306a36Sopenharmony_ciextern cpumask_t cpu_core_map[NR_CPUS];
5462306a36Sopenharmony_ciextern cpumask_t cpu_core_sib_map[NR_CPUS];
5562306a36Sopenharmony_ciextern cpumask_t cpu_core_sib_cache_map[NR_CPUS];
5662306a36Sopenharmony_ci
5762306a36Sopenharmony_ci/**
5862306a36Sopenharmony_ci * Return cores that shares the last level cache.
5962306a36Sopenharmony_ci */
6062306a36Sopenharmony_cistatic inline const struct cpumask *cpu_coregroup_mask(int cpu)
6162306a36Sopenharmony_ci{
6262306a36Sopenharmony_ci	return &cpu_core_sib_cache_map[cpu];
6362306a36Sopenharmony_ci}
6462306a36Sopenharmony_ci
6562306a36Sopenharmony_ci#endif /* _ASM_SPARC64_TOPOLOGY_H */
66