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