1633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham/*
2633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham * This file is subject to the terms and conditions of the GNU General
3633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham * Public License.  See the file "COPYING" in the main directory of this
4633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham * archive for more details.
5633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham *
6633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham * Copyright (C) 2000 - 2001 by Kanoj Sarcar (kanoj@sgi.com)
7633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham * Copyright (C) 2000 - 2001 by Silicon Graphics, Inc.
8633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham * Copyright (C) 2000, 2001, 2002 Ralf Baechle
9633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham * Copyright (C) 2000, 2001 Broadcom Corporation
10633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham */
11633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#ifndef __ASM_SMP_OPS_H
12633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define __ASM_SMP_OPS_H
13633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham
14633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#ifdef CONFIG_SMP
15633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham
16633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#include <linux/cpumask.h>
17633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham
18633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandhamstruct plat_smp_ops {
19633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham	void (*send_ipi_single)(int cpu, unsigned int action);
20633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham	void (*send_ipi_mask)(cpumask_t mask, unsigned int action);
21633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham	void (*init_secondary)(void);
22633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham	void (*smp_finish)(void);
23633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham	void (*cpus_done)(void);
24633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham	void (*boot_secondary)(int cpu, struct task_struct *idle);
25633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham	void (*smp_setup)(void);
26633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham	void (*prepare_cpus)(unsigned int max_cpus);
27633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham};
28633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham
29633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandhamextern void register_smp_ops(struct plat_smp_ops *ops);
30633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham
31633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandhamstatic inline void plat_smp_setup(void)
32633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham{
33633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham	extern struct plat_smp_ops *mp_ops;	/* private */
34633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham
35633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham	mp_ops->smp_setup();
36633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham}
37633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham
38633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#else /* !CONFIG_SMP */
39633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham
40633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandhamstruct plat_smp_ops;
41633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham
42633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandhamstatic inline void plat_smp_setup(void)
43633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham{
44633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham	/* UP, nothing to do ...  */
45633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham}
46633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham
47633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandhamstatic inline void register_smp_ops(struct plat_smp_ops *ops)
48633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham{
49633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham}
50633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham
51633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#endif /* !CONFIG_SMP */
52633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham
53633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandhamextern struct plat_smp_ops up_smp_ops;
54633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandhamextern struct plat_smp_ops cmp_smp_ops;
55633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandhamextern struct plat_smp_ops vsmp_smp_ops;
56633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham
57633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#endif /* __ASM_SMP_OPS_H */
58