18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci#ifndef __ASM_SMP_H 38c2ecf20Sopenharmony_ci#define __ASM_SMP_H 48c2ecf20Sopenharmony_ci 58c2ecf20Sopenharmony_ci#include <linux/threads.h> 68c2ecf20Sopenharmony_ci#include <linux/cpumask.h> 78c2ecf20Sopenharmony_ci#include <linux/bitops.h> 88c2ecf20Sopenharmony_ci#include <asm/pal.h> 98c2ecf20Sopenharmony_ci 108c2ecf20Sopenharmony_ci/* HACK: Cabrio WHAMI return value is bogus if more than 8 bits used.. :-( */ 118c2ecf20Sopenharmony_ci 128c2ecf20Sopenharmony_cistatic __inline__ unsigned char 138c2ecf20Sopenharmony_ci__hard_smp_processor_id(void) 148c2ecf20Sopenharmony_ci{ 158c2ecf20Sopenharmony_ci register unsigned char __r0 __asm__("$0"); 168c2ecf20Sopenharmony_ci __asm__ __volatile__( 178c2ecf20Sopenharmony_ci "call_pal %1 #whami" 188c2ecf20Sopenharmony_ci : "=r"(__r0) 198c2ecf20Sopenharmony_ci :"i" (PAL_whami) 208c2ecf20Sopenharmony_ci : "$1", "$22", "$23", "$24", "$25"); 218c2ecf20Sopenharmony_ci return __r0; 228c2ecf20Sopenharmony_ci} 238c2ecf20Sopenharmony_ci 248c2ecf20Sopenharmony_ci#ifdef CONFIG_SMP 258c2ecf20Sopenharmony_ci 268c2ecf20Sopenharmony_ci#include <asm/irq.h> 278c2ecf20Sopenharmony_ci 288c2ecf20Sopenharmony_cistruct cpuinfo_alpha { 298c2ecf20Sopenharmony_ci unsigned long loops_per_jiffy; 308c2ecf20Sopenharmony_ci unsigned long last_asn; 318c2ecf20Sopenharmony_ci int need_new_asn; 328c2ecf20Sopenharmony_ci int asn_lock; 338c2ecf20Sopenharmony_ci unsigned long ipi_count; 348c2ecf20Sopenharmony_ci unsigned long prof_multiplier; 358c2ecf20Sopenharmony_ci unsigned long prof_counter; 368c2ecf20Sopenharmony_ci unsigned char mcheck_expected; 378c2ecf20Sopenharmony_ci unsigned char mcheck_taken; 388c2ecf20Sopenharmony_ci unsigned char mcheck_extra; 398c2ecf20Sopenharmony_ci} __attribute__((aligned(64))); 408c2ecf20Sopenharmony_ci 418c2ecf20Sopenharmony_ciextern struct cpuinfo_alpha cpu_data[NR_CPUS]; 428c2ecf20Sopenharmony_ci 438c2ecf20Sopenharmony_ci#define hard_smp_processor_id() __hard_smp_processor_id() 448c2ecf20Sopenharmony_ci#define raw_smp_processor_id() (current_thread_info()->cpu) 458c2ecf20Sopenharmony_ci 468c2ecf20Sopenharmony_ciextern int smp_num_cpus; 478c2ecf20Sopenharmony_ci 488c2ecf20Sopenharmony_ciextern void arch_send_call_function_single_ipi(int cpu); 498c2ecf20Sopenharmony_ciextern void arch_send_call_function_ipi_mask(const struct cpumask *mask); 508c2ecf20Sopenharmony_ci 518c2ecf20Sopenharmony_ci#else /* CONFIG_SMP */ 528c2ecf20Sopenharmony_ci 538c2ecf20Sopenharmony_ci#define hard_smp_processor_id() 0 548c2ecf20Sopenharmony_ci#define smp_call_function_on_cpu(func,info,wait,cpu) ({ 0; }) 558c2ecf20Sopenharmony_ci 568c2ecf20Sopenharmony_ci#endif /* CONFIG_SMP */ 578c2ecf20Sopenharmony_ci 588c2ecf20Sopenharmony_ci#define NO_PROC_ID (-1) 598c2ecf20Sopenharmony_ci 608c2ecf20Sopenharmony_ci#endif 61