smp.h revision 26948
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 *
926948Sfsmp * $Id: smp.h,v 1.3 1997/06/25 20:43:48 smp Exp smp $
1025164Speter *
1125164Speter */
1225164Speter
1325164Speter#ifndef _MACHINE_SMP_H_
1425164Speter#define _MACHINE_SMP_H_
1525164Speter
1625164Speter#ifdef KERNEL
1725164Speter
1825517Sfsmp#if defined(SMP) && !defined(APIC_IO)
1925517Sfsmp# error APIC_IO required for SMP, add "options APIC_IO" to your config file.
2025517Sfsmp#endif /* SMP && NCPU */
2125517Sfsmp
2225164Speter#if defined(SMP) && !defined(NCPU)
2325164Speter# define NCPU			2
2425164Speter#endif /* SMP && NCPU */
2525164Speter
2625164Speter#if defined(SMP) || defined(APIC_IO)
2725164Speter
2826269Sfsmp#include <machine/apic.h>
2926269Sfsmp
3025164Speter/* global data in mpboot.s */
3125164Speterextern int			bootMP_size;
3225164Speter
3325164Speter/* functions in mpboot.s */
3425164Spetervoid	bootMP			__P((void));
3525164Speter
3625164Speter/* global data in mplock.s */
3725164Speterextern u_int			mp_lock;
3825164Speter
3925164Speter/* functions in mplock.s */
4025164Spetervoid	get_mplock		__P((void));
4125164Spetervoid	rel_mplock		__P((void));
4225320Sfsmpvoid	try_mplock		__P((void));
4325164Speter
4425164Speter/* global data in mp_machdep.c */
4525164Speterextern int			mp_ncpus;
4625164Speterextern int			mp_naps;
4725164Speterextern int			mp_nbusses;
4825164Speterextern int			mp_napics;
4925164Speterextern int			mp_picmode;
5025164Speterextern int			mpenabled;
5125164Speterextern int			boot_cpu_id;
5225164Speterextern vm_offset_t		cpu_apic_address;
5325164Speterextern vm_offset_t		io_apic_address[];
5425164Speterextern u_int32_t		cpu_apic_versions[];
5525164Speterextern u_int32_t		io_apic_versions[];
5625164Speterextern int			cpu_num_to_apic_id[];
5725164Speterextern int			io_num_to_apic_id[];
5825164Speterextern int			apic_id_to_logical[];
5926812Speterextern u_int			SMP_prvpt[];
6026812Speterextern u_char			SMP_ioapic[];
6125164Speter
6225164Speter/* functions in mp_machdep.c */
6325164Speteru_int	mp_bootaddress		__P((u_int));
6426252Sfsmpint	mp_probe		__P((void));
6525164Spetervoid	mp_start		__P((void));
6625164Spetervoid	mp_announce		__P((void));
6726948Sfsmpu_int	isa_apic_mask		__P((u_int));
6826948Sfsmpint	isa_apic_pin		__P((int));
6926948Sfsmpint	pci_apic_pin		__P((int, int, int));
7025499Sfsmpint	undirect_isa_irq	__P((int));
7125164Speterint	undirect_pci_irq	__P((int));
7225164Speterint	apic_bus_type		__P((int));
7325164Speterint	apic_src_bus_id		__P((int, int));
7425164Speterint	apic_src_bus_irq	__P((int, int));
7525164Speterint	apic_int_type		__P((int, int));
7625164Speterint	apic_trigger		__P((int, int));
7725164Speterint	apic_polarity		__P((int, int));
7825164Spetervoid	configure_local_apic	__P((void));
7925164Spetervoid	init_secondary		__P((void));
8025164Spetervoid	smp_invltlb		__P((void));
8125164Speter
8225164Speter/* global data in mpapic.c */
8326812Speterextern volatile lapic_t		lapic;
8425164Speter
8525164Speter#if defined(MULTIPLE_IOAPICS)
8625164Speter#error MULTIPLE_IOAPICSXXX
8725164Speter#else
8826812Speterextern volatile ioapic_t	*ioapic[];
8925164Speter#endif /* MULTIPLE_IOAPICS */
9025164Speter
9125164Speter/* functions in mpapic.c */
9225164Spetervoid	apic_initialize		__P((int));
9325362Sfsmpint	apic_ipi		__P((int, int, int));
9425164Speterint	selected_apic_ipi	__P((u_int, int, int));
9525164Speterint	io_apic_setup		__P((int));
9625164Speterint	ext_int_setup		__P((int, int));
9725164Spetervoid	write_io_apic_mask24	__P((int, u_int32_t));
9825164Speter
9925164Speter#if defined(READY)
10025164Spetervoid	clr_io_apic_mask24	__P((int, u_int32_t));
10125164Spetervoid	set_io_apic_mask24	__P((int, u_int32_t));
10225164Speter#endif /* READY */
10325164Speter
10425164Spetervoid	set_apic_timer		__P((int));
10525164Speterint	read_apic_timer		__P((void));
10625164Spetervoid	u_sleep			__P((int));
10725164Speter
10825164Speter/* global data in init_smp.c */
10925164Speterextern int			smp_active;
11025215Sfsmpextern int			invltlb_ok;
11125164Speter
11226812Speterextern volatile u_int		cpuid;
11326812Speterextern volatile u_int		cpu_lockid;
11425164Speter
11525164Speter#endif /* SMP || APIC_IO */
11625164Speter#endif /* KERNEL */
11725164Speter#endif /* _MACHINE_SMP_H_ */
118