1/* $FreeBSD$ */
2
3#ifndef _MACHINE_SMP_H_
4#define _MACHINE_SMP_H_
5
6#include <sys/_cpuset.h>
7#include <machine/pcb.h>
8
9#ifdef INTRNG
10enum {
11	IPI_AST,
12	IPI_PREEMPT,
13	IPI_RENDEZVOUS,
14	IPI_STOP,
15	IPI_STOP_HARD = IPI_STOP, /* These are synonyms on arm. */
16	IPI_HARDCLOCK,
17	IPI_TLB,		/* Not used now, but keep it reserved. */
18	IPI_CACHE,		/* Not used now, but keep it reserved. */
19	INTR_IPI_COUNT
20};
21#else
22#define IPI_AST		0
23#define IPI_PREEMPT	2
24#define IPI_RENDEZVOUS	3
25#define IPI_STOP	4
26#define IPI_STOP_HARD	4
27#define IPI_HARDCLOCK	6
28#define IPI_TLB		7	/* Not used now, but keep it reserved. */
29#define IPI_CACHE	8	/* Not used now, but keep it reserved. */
30#endif /* INTRNG */
31
32void	init_secondary(int cpu);
33void	mpentry(void);
34
35void	ipi_all_but_self(u_int ipi);
36void	ipi_cpu(int cpu, u_int ipi);
37void	ipi_selected(cpuset_t cpus, u_int ipi);
38
39/* PIC interface */
40#ifndef INTRNG
41void	pic_ipi_send(cpuset_t cpus, u_int ipi);
42void	pic_ipi_clear(int ipi);
43int	pic_ipi_read(int arg);
44#endif
45
46/* Platform interface */
47void	platform_mp_setmaxid(void);
48void	platform_mp_start_ap(void);
49
50/* global data in mp_machdep.c */
51extern struct pcb               stoppcbs[];
52
53#endif /* !_MACHINE_SMP_H_ */
54