smp.h revision 153141
1139790Simp/*- 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/i386/include/smp.h 153141 2005-12-05 22:25:41Z jhb $ 1025164Speter * 1125164Speter */ 1225164Speter 1325164Speter#ifndef _MACHINE_SMP_H_ 1425164Speter#define _MACHINE_SMP_H_ 1525164Speter 1655205Speter#ifdef _KERNEL 1725164Speter 18121996Sjhb#ifdef SMP 1925517Sfsmp 2027728Sfsmp#ifndef LOCORE 2127728Sfsmp 22121996Sjhb#include <sys/bus.h> 2376078Sjhb#include <machine/frame.h> 24121996Sjhb#include <machine/intr_machdep.h> 25121996Sjhb#include <machine/apicvar.h> 2626269Sfsmp 2725164Speter/* global data in mpboot.s */ 2825164Speterextern int bootMP_size; 2925164Speter 3025164Speter/* functions in mpboot.s */ 3193018Sbdevoid bootMP(void); 3225164Speter 3325164Speter/* global data in mp_machdep.c */ 3425164Speterextern int mp_naps; 3525164Speterextern int boot_cpu_id; 3636135Steggeextern struct pcb stoppcbs[]; 37121996Sjhbextern struct mtx smp_tlb_mtx; 38153141Sjhb#ifdef COUNT_IPIS 39153141Sjhbextern u_long *ipi_invltlb_counts[MAXCPU]; 40153141Sjhbextern u_long *ipi_invlrng_counts[MAXCPU]; 41153141Sjhbextern u_long *ipi_invlpg_counts[MAXCPU]; 42153141Sjhbextern u_long *ipi_rendezvous_counts[MAXCPU]; 43153141Sjhbextern u_long *ipi_lazypmap_counts[MAXCPU]; 44153141Sjhb#endif 4525164Speter 46121996Sjhb/* IPI handlers */ 47121996Sjhbinthand_t 48121996Sjhb IDTVEC(invltlb), /* TLB shootdowns - global */ 49121996Sjhb IDTVEC(invlpg), /* TLB shootdowns - 1 page */ 50121996Sjhb IDTVEC(invlrng), /* TLB shootdowns - page range */ 51138528Sups IDTVEC(ipi_intr_bitmap_handler), /* Bitmap based IPIs */ 52121996Sjhb IDTVEC(cpustop), /* CPU stops & waits to be restarted */ 53121996Sjhb IDTVEC(rendezvous), /* handle CPU rendezvous */ 54121996Sjhb IDTVEC(lazypmap); /* handle lazy pmap release */ 55121996Sjhb 5625164Speter/* functions in mp_machdep.c */ 57121996Sjhbvoid cpu_add(u_int apic_id, char boot_cpu); 58153141Sjhbvoid cpustop_handler(void); 5993018Sbdevoid init_secondary(void); 60121996Sjhbvoid ipi_selected(u_int cpus, u_int ipi); 61121996Sjhbvoid ipi_all(u_int ipi); 62121996Sjhbvoid ipi_all_but_self(u_int ipi); 63121996Sjhbvoid ipi_self(u_int ipi); 64138528Supsvoid ipi_bitmap_handler(struct clockframe frame); 65121996Sjhbu_int mp_bootaddress(u_int); 66121996Sjhbint mp_grab_cpu_hlt(void); 67123431Sjeffvoid mp_topology(void); 6899862Spetervoid smp_invlpg(vm_offset_t addr); 6999862Spetervoid smp_masked_invlpg(u_int mask, vm_offset_t addr); 7099862Spetervoid smp_invlpg_range(vm_offset_t startva, vm_offset_t endva); 7199862Spetervoid smp_masked_invlpg_range(u_int mask, vm_offset_t startva, 7299862Speter vm_offset_t endva); 7399862Spetervoid smp_invltlb(void); 7499862Spetervoid smp_masked_invltlb(u_int mask); 7525164Speter 76151634Sjhb#ifdef STOP_NMI 77151634Sjhbint ipi_nmi_handler(void); 78145727Sdwhite#endif 79145727Sdwhite 8027728Sfsmp#endif /* !LOCORE */ 81121996Sjhb#endif /* SMP */ 8258755Sdillon 8355205Speter#endif /* _KERNEL */ 8425164Speter#endif /* _MACHINE_SMP_H_ */ 85