smp.h revision 129305
125164Speter/*
225164Speter * ----------------------------------------------------------------------------
325164Speter * "THE BEER-WARE LICENSE" (Revision 42):
425164Speter * <phk@FreeBSD.org> wrote this file.  As long as you retain this notice you
525164Speter * can do whatever you want with this stuff. If we meet some day, and you think
625164Speter * this stuff is worth it, you can buy me a beer in return.   Poul-Henning Kamp
725164Speter * ----------------------------------------------------------------------------
825164Speter *
950477Speter * $FreeBSD: head/sys/amd64/include/smp.h 129305 2004-05-16 22:11:50Z peter $
1025164Speter *
1125164Speter */
1225164Speter
1325164Speter#ifndef _MACHINE_SMP_H_
1425164Speter#define _MACHINE_SMP_H_
1525164Speter
16122849Speter#ifdef _KERNEL
17122849Speter
18122849Speter#ifdef SMP
19122849Speter
20122849Speter#ifndef LOCORE
21122849Speter
22122849Speter#include <sys/bus.h>
23122849Speter#include <machine/frame.h>
24122849Speter#include <machine/intr_machdep.h>
25122849Speter#include <machine/apicvar.h>
26122849Speter
27122849Speter/* global symbols in mpboot.S */
28122849Speterextern char			mptramp_start[];
29122849Speterextern char			mptramp_end[];
30122849Speterextern u_int32_t		mptramp_pagetables;
31122849Speter
32122849Speter/* global data in mp_machdep.c */
33122849Speterextern int			mp_naps;
34122849Speterextern int			boot_cpu_id;
35122849Speterextern struct pcb		stoppcbs[];
36122849Speterextern struct mtx		smp_tlb_mtx;
37122849Speter
38122849Speter/* IPI handlers */
39122849Speterinthand_t
40122849Speter	IDTVEC(invltlb),	/* TLB shootdowns - global */
41122849Speter	IDTVEC(invlpg),		/* TLB shootdowns - 1 page */
42122849Speter	IDTVEC(invlrng),	/* TLB shootdowns - page range */
43122849Speter	IDTVEC(hardclock),	/* Forward hardclock() */
44122849Speter	IDTVEC(statclock),	/* Forward statclock() */
45122849Speter	IDTVEC(cpuast),		/* Additional software trap on other cpu */
46122849Speter	IDTVEC(cpustop),	/* CPU stops & waits to be restarted */
47129305Speter	IDTVEC(rendezvous);	/* handle CPU rendezvous */
48122849Speter
49122849Speter/* functions in mp_machdep.c */
50122849Spetervoid	cpu_add(u_int apic_id, char boot_cpu);
51122849Spetervoid	init_secondary(void);
52122849Spetervoid	ipi_selected(u_int cpus, u_int ipi);
53122849Spetervoid	ipi_all(u_int ipi);
54122849Spetervoid	ipi_all_but_self(u_int ipi);
55122849Spetervoid	ipi_self(u_int ipi);
56122849Spetervoid	forward_statclock(void);
57122849Spetervoid	forwarded_statclock(struct clockframe frame);
58122849Spetervoid	forward_hardclock(void);
59122849Spetervoid	forwarded_hardclock(struct clockframe frame);
60122849Speteru_int	mp_bootaddress(u_int);
61122849Speterint	mp_grab_cpu_hlt(void);
62125174Spetervoid	mp_topology(void);
63122849Spetervoid	smp_invlpg(vm_offset_t addr);
64122849Spetervoid	smp_masked_invlpg(u_int mask, vm_offset_t addr);
65122849Spetervoid	smp_invlpg_range(vm_offset_t startva, vm_offset_t endva);
66122849Spetervoid	smp_masked_invlpg_range(u_int mask, vm_offset_t startva,
67122849Speter	    vm_offset_t endva);
68122849Spetervoid	smp_invltlb(void);
69122849Spetervoid	smp_masked_invltlb(u_int mask);
70122849Speter
71122849Speter#endif /* !LOCORE */
72122849Speter#endif /* SMP */
73122849Speter
74122849Speter#endif /* _KERNEL */
7525164Speter#endif /* _MACHINE_SMP_H_ */
76