linux/arch/mips/include/asm/smp-ops.h
<<
>>
Prefs
   1/*
   2 * This file is subject to the terms and conditions of the GNU General
   3 * Public License.  See the file "COPYING" in the main directory of this
   4 * archive for more details.
   5 *
   6 * Copyright (C) 2000 - 2001 by Kanoj Sarcar (kanoj@sgi.com)
   7 * Copyright (C) 2000 - 2001 by Silicon Graphics, Inc.
   8 * Copyright (C) 2000, 2001, 2002 Ralf Baechle
   9 * Copyright (C) 2000, 2001 Broadcom Corporation
  10 */
  11#ifndef __ASM_SMP_OPS_H
  12#define __ASM_SMP_OPS_H
  13
  14#include <linux/errno.h>
  15
  16#ifdef CONFIG_SMP
  17
  18#include <linux/cpumask.h>
  19
  20struct task_struct;
  21
  22struct plat_smp_ops {
  23        void (*send_ipi_single)(int cpu, unsigned int action);
  24        void (*send_ipi_mask)(const struct cpumask *mask, unsigned int action);
  25        void (*init_secondary)(void);
  26        void (*smp_finish)(void);
  27        void (*cpus_done)(void);
  28        void (*boot_secondary)(int cpu, struct task_struct *idle);
  29        void (*smp_setup)(void);
  30        void (*prepare_cpus)(unsigned int max_cpus);
  31#ifdef CONFIG_HOTPLUG_CPU
  32        int (*cpu_disable)(void);
  33        void (*cpu_die)(unsigned int cpu);
  34#endif
  35};
  36
  37extern void register_smp_ops(struct plat_smp_ops *ops);
  38
  39static inline void plat_smp_setup(void)
  40{
  41        extern struct plat_smp_ops *mp_ops;     /* private */
  42
  43        mp_ops->smp_setup();
  44}
  45
  46#else /* !CONFIG_SMP */
  47
  48struct plat_smp_ops;
  49
  50static inline void plat_smp_setup(void)
  51{
  52        /* UP, nothing to do ...  */
  53}
  54
  55static inline void register_smp_ops(struct plat_smp_ops *ops)
  56{
  57}
  58
  59#endif /* !CONFIG_SMP */
  60
  61static inline int register_up_smp_ops(void)
  62{
  63#ifdef CONFIG_SMP_UP
  64        extern struct plat_smp_ops up_smp_ops;
  65
  66        register_smp_ops(&up_smp_ops);
  67
  68        return 0;
  69#else
  70        return -ENODEV;
  71#endif
  72}
  73
  74static inline int register_cmp_smp_ops(void)
  75{
  76#ifdef CONFIG_MIPS_CMP
  77        extern struct plat_smp_ops cmp_smp_ops;
  78
  79        register_smp_ops(&cmp_smp_ops);
  80
  81        return 0;
  82#else
  83        return -ENODEV;
  84#endif
  85}
  86
  87static inline int register_vsmp_smp_ops(void)
  88{
  89#ifdef CONFIG_MIPS_MT_SMP
  90        extern struct plat_smp_ops vsmp_smp_ops;
  91
  92        register_smp_ops(&vsmp_smp_ops);
  93
  94        return 0;
  95#else
  96        return -ENODEV;
  97#endif
  98}
  99
 100#endif /* __ASM_SMP_OPS_H */
 101