16fc729afSOlivier Houchard /* $FreeBSD$ */ 26fc729afSOlivier Houchard 36fc729afSOlivier Houchard #ifndef _MACHINE_SMP_H_ 46fc729afSOlivier Houchard #define _MACHINE_SMP_H_ 56fc729afSOlivier Houchard 6cf1a573fSOleksandr Tymoshenko #include <sys/_cpuset.h> 7*18f8f46eSOlivier Houchard #include <machine/pcb.h> 8cf1a573fSOleksandr Tymoshenko 9cf1a573fSOleksandr Tymoshenko #define IPI_AST 0 10cf1a573fSOleksandr Tymoshenko #define IPI_PREEMPT 2 11cf1a573fSOleksandr Tymoshenko #define IPI_RENDEZVOUS 3 12cf1a573fSOleksandr Tymoshenko #define IPI_STOP 4 13cf1a573fSOleksandr Tymoshenko #define IPI_STOP_HARD 5 14cf1a573fSOleksandr Tymoshenko #define IPI_HARDCLOCK 6 15cf1a573fSOleksandr Tymoshenko #define IPI_TLB 7 16cf1a573fSOleksandr Tymoshenko 17cf1a573fSOleksandr Tymoshenko void init_secondary(int cpu); 18cf1a573fSOleksandr Tymoshenko 19cf1a573fSOleksandr Tymoshenko void ipi_all_but_self(u_int ipi); 20cf1a573fSOleksandr Tymoshenko void ipi_cpu(int cpu, u_int ipi); 21cf1a573fSOleksandr Tymoshenko void ipi_selected(cpuset_t cpus, u_int ipi); 22cf1a573fSOleksandr Tymoshenko 23cf1a573fSOleksandr Tymoshenko /* PIC interface */ 24cf1a573fSOleksandr Tymoshenko void pic_ipi_send(cpuset_t cpus, u_int ipi); 25cf1a573fSOleksandr Tymoshenko void pic_ipi_clear(int ipi); 26cf1a573fSOleksandr Tymoshenko int pic_ipi_get(int arg); 27cf1a573fSOleksandr Tymoshenko 28cf1a573fSOleksandr Tymoshenko /* Platform interface */ 29cf1a573fSOleksandr Tymoshenko void platform_mp_setmaxid(void); 30cf1a573fSOleksandr Tymoshenko int platform_mp_probe(void); 31cf1a573fSOleksandr Tymoshenko void platform_mp_start_ap(void); 32cf1a573fSOleksandr Tymoshenko void platform_mp_init_secondary(void); 33cf1a573fSOleksandr Tymoshenko 34cf1a573fSOleksandr Tymoshenko void platform_ipi_send(cpuset_t cpus, u_int ipi); 35cf1a573fSOleksandr Tymoshenko 3636bc03eeSOlivier Houchard /* global data in mp_machdep.c */ 3736bc03eeSOlivier Houchard extern struct pcb stoppcbs[]; 3836bc03eeSOlivier Houchard 396fc729afSOlivier Houchard #endif /* !_MACHINE_SMP_H_ */ 40