Linux Audio

Check our new training course

Loading...
v6.8
  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	int (*boot_secondary)(int cpu, struct task_struct *idle);
 
 28	void (*smp_setup)(void);
 29	void (*prepare_cpus)(unsigned int max_cpus);
 30	void (*prepare_boot_cpu)(void);
 31#ifdef CONFIG_HOTPLUG_CPU
 32	int (*cpu_disable)(void);
 33	void (*cpu_die)(unsigned int cpu);
 34	void (*cleanup_dead_cpu)(unsigned cpu);
 35#endif
 36#ifdef CONFIG_KEXEC_CORE
 37	void (*kexec_nonboot_cpu)(void);
 38#endif
 39};
 40
 41extern void register_smp_ops(const struct plat_smp_ops *ops);
 42
 43static inline void plat_smp_setup(void)
 44{
 45	extern const struct plat_smp_ops *mp_ops;	/* private */
 46
 47	mp_ops->smp_setup();
 48}
 49
 50extern void mips_smp_send_ipi_single(int cpu, unsigned int action);
 51extern void mips_smp_send_ipi_mask(const struct cpumask *mask,
 52				      unsigned int action);
 53
 54#else /* !CONFIG_SMP */
 55
 56struct plat_smp_ops;
 57
 58static inline void plat_smp_setup(void)
 59{
 60	/* UP, nothing to do ...  */
 61}
 62
 63static inline void register_smp_ops(const struct plat_smp_ops *ops)
 64{
 65}
 66
 67#endif /* !CONFIG_SMP */
 68
 69static inline int register_up_smp_ops(void)
 70{
 71#ifdef CONFIG_SMP_UP
 72	extern const struct plat_smp_ops up_smp_ops;
 73
 74	register_smp_ops(&up_smp_ops);
 75
 76	return 0;
 77#else
 78	return -ENODEV;
 79#endif
 80}
 81
 82static inline int register_vsmp_smp_ops(void)
 83{
 84#ifdef CONFIG_MIPS_MT_SMP
 85	extern const struct plat_smp_ops vsmp_smp_ops;
 86
 87	if (!cpu_has_mipsmt)
 88		return -ENODEV;
 89
 90	register_smp_ops(&vsmp_smp_ops);
 91
 92	return 0;
 93#else
 94	return -ENODEV;
 95#endif
 96}
 97
 98#ifdef CONFIG_MIPS_CPS
 99extern int register_cps_smp_ops(void);
100#else
101static inline int register_cps_smp_ops(void)
102{
 
 
 
 
 
 
 
103	return -ENODEV;
104}
105#endif
 
106
107#endif /* __ASM_SMP_OPS_H */
v3.5.6
  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 */