162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci/* smp.h: Sparc64 specific SMP stuff. 362306a36Sopenharmony_ci * 462306a36Sopenharmony_ci * Copyright (C) 1996, 2008 David S. Miller (davem@davemloft.net) 562306a36Sopenharmony_ci */ 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci#ifndef _SPARC64_SMP_H 862306a36Sopenharmony_ci#define _SPARC64_SMP_H 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#include <linux/threads.h> 1162306a36Sopenharmony_ci#include <asm/asi.h> 1262306a36Sopenharmony_ci#include <asm/starfire.h> 1362306a36Sopenharmony_ci#include <asm/spitfire.h> 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ci#ifndef __ASSEMBLY__ 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci#include <linux/cpumask.h> 1862306a36Sopenharmony_ci#include <linux/cache.h> 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci#endif /* !(__ASSEMBLY__) */ 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ci#ifdef CONFIG_SMP 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci#ifndef __ASSEMBLY__ 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_ci/* 2762306a36Sopenharmony_ci * Private routines/data 2862306a36Sopenharmony_ci */ 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_ci#include <linux/bitops.h> 3162306a36Sopenharmony_ci#include <linux/atomic.h> 3262306a36Sopenharmony_ci#include <asm/percpu.h> 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ciDECLARE_PER_CPU(cpumask_t, cpu_sibling_map); 3562306a36Sopenharmony_ciextern cpumask_t cpu_core_map[NR_CPUS]; 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_civoid smp_init_cpu_poke(void); 3862306a36Sopenharmony_civoid scheduler_poke(void); 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_civoid arch_send_call_function_single_ipi(int cpu); 4162306a36Sopenharmony_civoid arch_send_call_function_ipi_mask(const struct cpumask *mask); 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_ci/* 4462306a36Sopenharmony_ci * General functions that each host system must provide. 4562306a36Sopenharmony_ci */ 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ciint hard_smp_processor_id(void); 4862306a36Sopenharmony_ci#define raw_smp_processor_id() (current_thread_info()->cpu) 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_civoid smp_fill_in_cpu_possible_map(void); 5162306a36Sopenharmony_civoid smp_fill_in_sib_core_maps(void); 5262306a36Sopenharmony_civoid __noreturn cpu_play_dead(void); 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_civoid smp_fetch_global_regs(void); 5562306a36Sopenharmony_civoid smp_fetch_global_pmu(void); 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_cistruct seq_file; 5862306a36Sopenharmony_civoid smp_bogo(struct seq_file *); 5962306a36Sopenharmony_civoid smp_info(struct seq_file *); 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_civoid smp_callin(void); 6262306a36Sopenharmony_civoid cpu_panic(void); 6362306a36Sopenharmony_civoid smp_synchronize_tick_client(void); 6462306a36Sopenharmony_civoid smp_capture(void); 6562306a36Sopenharmony_civoid smp_release(void); 6662306a36Sopenharmony_ci 6762306a36Sopenharmony_ci#ifdef CONFIG_HOTPLUG_CPU 6862306a36Sopenharmony_ciint __cpu_disable(void); 6962306a36Sopenharmony_civoid __cpu_die(unsigned int cpu); 7062306a36Sopenharmony_ci#endif 7162306a36Sopenharmony_ci 7262306a36Sopenharmony_ci#endif /* !(__ASSEMBLY__) */ 7362306a36Sopenharmony_ci 7462306a36Sopenharmony_ci#else 7562306a36Sopenharmony_ci 7662306a36Sopenharmony_ci#define hard_smp_processor_id() 0 7762306a36Sopenharmony_ci#define smp_fill_in_sib_core_maps() do { } while (0) 7862306a36Sopenharmony_ci#define smp_fetch_global_regs() do { } while (0) 7962306a36Sopenharmony_ci#define smp_fetch_global_pmu() do { } while (0) 8062306a36Sopenharmony_ci#define smp_fill_in_cpu_possible_map() do { } while (0) 8162306a36Sopenharmony_ci#define smp_init_cpu_poke() do { } while (0) 8262306a36Sopenharmony_ci#define scheduler_poke() do { } while (0) 8362306a36Sopenharmony_ci 8462306a36Sopenharmony_ci#endif /* !(CONFIG_SMP) */ 8562306a36Sopenharmony_ci 8662306a36Sopenharmony_ci#endif /* !(_SPARC64_SMP_H) */ 87