Linux Audio

Check our new training course

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