forked from Minki/linux
aba1030a7e
There was a very preliminary bunch of SMP code scattered around for the SH7604 microcontrollers from way back when, and it has mostly suffered bitrot since then. With the tree already having been slowly getting prepped for SMP, this plugs in most of the remaining platform-independent bits. Signed-off-by: Magnus Damm <damm@igel.co.jp> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
57 lines
1.4 KiB
C
57 lines
1.4 KiB
C
#ifndef __ASM_SH_SMP_H
|
|
#define __ASM_SH_SMP_H
|
|
|
|
#include <linux/bitops.h>
|
|
#include <linux/cpumask.h>
|
|
|
|
#ifdef CONFIG_SMP
|
|
|
|
#include <linux/spinlock.h>
|
|
#include <asm/atomic.h>
|
|
#include <asm/current.h>
|
|
|
|
#define raw_smp_processor_id() (current_thread_info()->cpu)
|
|
#define hard_smp_processor_id() plat_smp_processor_id()
|
|
|
|
/* Map from cpu id to sequential logical cpu number. */
|
|
extern int __cpu_number_map[NR_CPUS];
|
|
#define cpu_number_map(cpu) __cpu_number_map[cpu]
|
|
|
|
/* The reverse map from sequential logical cpu number to cpu id. */
|
|
extern int __cpu_logical_map[NR_CPUS];
|
|
#define cpu_logical_map(cpu) __cpu_logical_map[cpu]
|
|
|
|
/* I've no idea what the real meaning of this is */
|
|
#define PROC_CHANGE_PENALTY 20
|
|
|
|
#define NO_PROC_ID (-1)
|
|
|
|
struct smp_fn_call_struct {
|
|
spinlock_t lock;
|
|
atomic_t finished;
|
|
void (*fn)(void *);
|
|
void *data;
|
|
};
|
|
|
|
extern struct smp_fn_call_struct smp_fn_call;
|
|
|
|
#define SMP_MSG_FUNCTION 0
|
|
#define SMP_MSG_RESCHEDULE 1
|
|
#define SMP_MSG_NR 2
|
|
|
|
void plat_smp_setup(void);
|
|
void plat_prepare_cpus(unsigned int max_cpus);
|
|
int plat_smp_processor_id(void);
|
|
void plat_start_cpu(unsigned int cpu, unsigned long entry_point);
|
|
void plat_send_ipi(unsigned int cpu, unsigned int message);
|
|
int plat_register_ipi_handler(unsigned int message,
|
|
void (*handler)(void *), void *arg);
|
|
|
|
#else
|
|
|
|
#define hard_smp_processor_id() (0)
|
|
|
|
#endif /* CONFIG_SMP */
|
|
|
|
#endif /* __ASM_SH_SMP_H */
|