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