root/arch/mips/include/asm/smp-ops.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. plat_smp_setup
  2. plat_smp_setup
  3. register_smp_ops
  4. register_up_smp_ops
  5. register_cmp_smp_ops
  6. register_vsmp_smp_ops
  7. register_cps_smp_ops

   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 #include <asm/mips-cps.h>
  17 
  18 #ifdef CONFIG_SMP
  19 
  20 #include <linux/cpumask.h>
  21 
  22 struct task_struct;
  23 
  24 struct plat_smp_ops {
  25         void (*send_ipi_single)(int cpu, unsigned int action);
  26         void (*send_ipi_mask)(const struct cpumask *mask, unsigned int action);
  27         void (*init_secondary)(void);
  28         void (*smp_finish)(void);
  29         int (*boot_secondary)(int cpu, struct task_struct *idle);
  30         void (*smp_setup)(void);
  31         void (*prepare_cpus)(unsigned int max_cpus);
  32         void (*prepare_boot_cpu)(void);
  33 #ifdef CONFIG_HOTPLUG_CPU
  34         int (*cpu_disable)(void);
  35         void (*cpu_die)(unsigned int cpu);
  36 #endif
  37 #ifdef CONFIG_KEXEC
  38         void (*kexec_nonboot_cpu)(void);
  39 #endif
  40 };
  41 
  42 extern void register_smp_ops(const struct plat_smp_ops *ops);
  43 
  44 static inline void plat_smp_setup(void)
  45 {
  46         extern const struct plat_smp_ops *mp_ops;       /* private */
  47 
  48         mp_ops->smp_setup();
  49 }
  50 
  51 extern void mips_smp_send_ipi_single(int cpu, unsigned int action);
  52 extern void mips_smp_send_ipi_mask(const struct cpumask *mask,
  53                                       unsigned int action);
  54 
  55 #else /* !CONFIG_SMP */
  56 
  57 struct plat_smp_ops;
  58 
  59 static inline void plat_smp_setup(void)
  60 {
  61         /* UP, nothing to do ...  */
  62 }
  63 
  64 static inline void register_smp_ops(const struct plat_smp_ops *ops)
  65 {
  66 }
  67 
  68 #endif /* !CONFIG_SMP */
  69 
  70 static inline int register_up_smp_ops(void)
  71 {
  72 #ifdef CONFIG_SMP_UP
  73         extern const struct plat_smp_ops up_smp_ops;
  74 
  75         register_smp_ops(&up_smp_ops);
  76 
  77         return 0;
  78 #else
  79         return -ENODEV;
  80 #endif
  81 }
  82 
  83 static inline int register_cmp_smp_ops(void)
  84 {
  85 #ifdef CONFIG_MIPS_CMP
  86         extern const struct plat_smp_ops cmp_smp_ops;
  87 
  88         if (!mips_cm_present())
  89                 return -ENODEV;
  90 
  91         register_smp_ops(&cmp_smp_ops);
  92 
  93         return 0;
  94 #else
  95         return -ENODEV;
  96 #endif
  97 }
  98 
  99 static inline int register_vsmp_smp_ops(void)
 100 {
 101 #ifdef CONFIG_MIPS_MT_SMP
 102         extern const struct plat_smp_ops vsmp_smp_ops;
 103 
 104         register_smp_ops(&vsmp_smp_ops);
 105 
 106         return 0;
 107 #else
 108         return -ENODEV;
 109 #endif
 110 }
 111 
 112 #ifdef CONFIG_MIPS_CPS
 113 extern int register_cps_smp_ops(void);
 114 #else
 115 static inline int register_cps_smp_ops(void)
 116 {
 117         return -ENODEV;
 118 }
 119 #endif
 120 
 121 #endif /* __ASM_SMP_OPS_H */

/* [<][>][^][v][top][bottom][index][help] */