xref: /openbmc/linux/arch/sparc/include/asm/smp_64.h (revision 8536e02e912a46aa1c100bb1f5ccdca42e4e1ad2)
1a439fe51SSam Ravnborg /* smp.h: Sparc64 specific SMP stuff.
2a439fe51SSam Ravnborg  *
3a439fe51SSam Ravnborg  * Copyright (C) 1996, 2008 David S. Miller (davem@davemloft.net)
4a439fe51SSam Ravnborg  */
5a439fe51SSam Ravnborg 
6a439fe51SSam Ravnborg #ifndef _SPARC64_SMP_H
7a439fe51SSam Ravnborg #define _SPARC64_SMP_H
8a439fe51SSam Ravnborg 
9a439fe51SSam Ravnborg #include <linux/threads.h>
10a439fe51SSam Ravnborg #include <asm/asi.h>
11a439fe51SSam Ravnborg #include <asm/starfire.h>
12a439fe51SSam Ravnborg #include <asm/spitfire.h>
13a439fe51SSam Ravnborg 
14a439fe51SSam Ravnborg #ifndef __ASSEMBLY__
15a439fe51SSam Ravnborg 
16a439fe51SSam Ravnborg #include <linux/cpumask.h>
17a439fe51SSam Ravnborg #include <linux/cache.h>
18a439fe51SSam Ravnborg 
19a439fe51SSam Ravnborg #endif /* !(__ASSEMBLY__) */
20a439fe51SSam Ravnborg 
21a439fe51SSam Ravnborg #ifdef CONFIG_SMP
22a439fe51SSam Ravnborg 
23a439fe51SSam Ravnborg #ifndef __ASSEMBLY__
24a439fe51SSam Ravnborg 
25a439fe51SSam Ravnborg /*
26a439fe51SSam Ravnborg  *	Private routines/data
27a439fe51SSam Ravnborg  */
28a439fe51SSam Ravnborg 
29a439fe51SSam Ravnborg #include <linux/bitops.h>
3060063497SArun Sharma #include <linux/atomic.h>
31a439fe51SSam Ravnborg #include <asm/percpu.h>
32a439fe51SSam Ravnborg 
33a439fe51SSam Ravnborg DECLARE_PER_CPU(cpumask_t, cpu_sibling_map);
34a439fe51SSam Ravnborg extern cpumask_t cpu_core_map[NR_CPUS];
35a439fe51SSam Ravnborg 
36*8536e02eSVijay Kumar void smp_init_cpu_poke(void);
37*8536e02eSVijay Kumar void scheduler_poke(void);
38*8536e02eSVijay Kumar 
39f05a6865SSam Ravnborg void arch_send_call_function_single_ipi(int cpu);
40f05a6865SSam Ravnborg void arch_send_call_function_ipi_mask(const struct cpumask *mask);
41a439fe51SSam Ravnborg 
42a439fe51SSam Ravnborg /*
43a439fe51SSam Ravnborg  *	General functions that each host system must provide.
44a439fe51SSam Ravnborg  */
45a439fe51SSam Ravnborg 
46f05a6865SSam Ravnborg int hard_smp_processor_id(void);
47a439fe51SSam Ravnborg #define raw_smp_processor_id() (current_thread_info()->cpu)
48a439fe51SSam Ravnborg 
499b2f753eSAtish Patra void smp_fill_in_cpu_possible_map(void);
50f05a6865SSam Ravnborg void smp_fill_in_sib_core_maps(void);
51f05a6865SSam Ravnborg void cpu_play_dead(void);
52a439fe51SSam Ravnborg 
53f05a6865SSam Ravnborg void smp_fetch_global_regs(void);
54f05a6865SSam Ravnborg void smp_fetch_global_pmu(void);
55a439fe51SSam Ravnborg 
56cb1b8209SSam Ravnborg struct seq_file;
57cb1b8209SSam Ravnborg void smp_bogo(struct seq_file *);
58cb1b8209SSam Ravnborg void smp_info(struct seq_file *);
59cb1b8209SSam Ravnborg 
60a0c54a21SSam Ravnborg void smp_callin(void);
61a0c54a21SSam Ravnborg void cpu_panic(void);
62a0c54a21SSam Ravnborg void smp_synchronize_tick_client(void);
63a0c54a21SSam Ravnborg void smp_capture(void);
64a0c54a21SSam Ravnborg void smp_release(void);
65a0c54a21SSam Ravnborg 
66a439fe51SSam Ravnborg #ifdef CONFIG_HOTPLUG_CPU
67f05a6865SSam Ravnborg int __cpu_disable(void);
68f05a6865SSam Ravnborg void __cpu_die(unsigned int cpu);
69a439fe51SSam Ravnborg #endif
70a439fe51SSam Ravnborg 
71a439fe51SSam Ravnborg #endif /* !(__ASSEMBLY__) */
72a439fe51SSam Ravnborg 
73a439fe51SSam Ravnborg #else
74a439fe51SSam Ravnborg 
75a439fe51SSam Ravnborg #define hard_smp_processor_id()		0
76a439fe51SSam Ravnborg #define smp_fill_in_sib_core_maps() do { } while (0)
77a439fe51SSam Ravnborg #define smp_fetch_global_regs() do { } while (0)
78916ca14aSDavid S. Miller #define smp_fetch_global_pmu() do { } while (0)
792a0100d7SDavid S. Miller #define smp_fill_in_cpu_possible_map() do { } while (0)
80*8536e02eSVijay Kumar #define smp_init_cpu_poke() do { } while (0)
81*8536e02eSVijay Kumar #define scheduler_poke() do { } while (0)
82a439fe51SSam Ravnborg 
83a439fe51SSam Ravnborg #endif /* !(CONFIG_SMP) */
84a439fe51SSam Ravnborg 
85a439fe51SSam Ravnborg #endif /* !(_SPARC64_SMP_H) */
86