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