summaryrefslogtreecommitdiffstats
path: root/sys/ia64/include
diff options
context:
space:
mode:
authormarcel <marcel@FreeBSD.org>2001-10-29 02:16:02 +0000
committermarcel <marcel@FreeBSD.org>2001-10-29 02:16:02 +0000
commit830dbf12d9594406beedd41668c7f2755d92ff51 (patch)
tree4e1c79f52aeff89922742b2fccaa89674395cd9c /sys/ia64/include
parent5d44d9cff102901a7355df4382bb3717ee0572ef (diff)
downloadFreeBSD-src-830dbf12d9594406beedd41668c7f2755d92ff51.zip
FreeBSD-src-830dbf12d9594406beedd41668c7f2755d92ff51.tar.gz
o Do not parse the MADT as a side-effect in AcpiOsGetRootPointer,
do it as a side-effect of probing for MP hardware. This allows us to scan for local SAPICs early (especially before MBUF initialization). o Fix the Local SAPIC structure so that matches the Local SAPIC table entry. Now that the Local SAPIC info is the same as the Local APIC info, stop dumping the Local APIC entries. o For every Local SAPIC entry in the MADT that's not disabled, let the SMP code know about it. They represent actual CPUs. o Register the OS_BOOT_RENDEZ entry point and provide a (bogus) implementation for the entry point. o Provide a mapping for internal IPI numbers to ExtINT vectors. o In a MP system, announce the CPUs and start them by sending IPI_AP_WAKEUP to each of them. Not that it makes a difference at this time :-) o Miscellaneous style fixes and other adjustments.
Diffstat (limited to 'sys/ia64/include')
-rw-r--r--sys/ia64/include/sal.h5
-rw-r--r--sys/ia64/include/smp.h32
2 files changed, 22 insertions, 15 deletions
diff --git a/sys/ia64/include/sal.h b/sys/ia64/include/sal.h
index b9dd889..c4ee7bf 100644
--- a/sys/ia64/include/sal.h
+++ b/sys/ia64/include/sal.h
@@ -113,6 +113,11 @@ struct sal_ap_wakeup_descriptor {
#define SAL_FREQ_BASE 0x01000012
#define SAL_UPDATE_PAL 0x01000020
+/* SAL_SET_VECTORS event handler types */
+#define SAL_OS_MCA 0
+#define SAL_OS_INIT 1
+#define SAL_OS_BOOT_RENDEZ 2
+
struct ia64_sal_result {
int64_t sal_status;
u_int64_t sal_result[3];
diff --git a/sys/ia64/include/smp.h b/sys/ia64/include/smp.h
index ded849f..3f99e15 100644
--- a/sys/ia64/include/smp.h
+++ b/sys/ia64/include/smp.h
@@ -7,26 +7,28 @@
#ifdef _KERNEL
/*
- * Interprocessor interrupts for SMP.
+ * Interprocessor interrupts for SMP. The following values are indices
+ * into the IPI vector table. The SAL gives us the vector used for AP
+ * wake-up. Keep the IPI_AP_WAKEUP at index 0.
*/
-#define IPI_INVLTLB 0x0001
-#define IPI_RENDEZVOUS 0x0002
-#define IPI_AST 0x0004
-#define IPI_CHECKSTATE 0x0008
-#define IPI_STOP 0x0010
+#define IPI_AP_WAKEUP 0
+#define IPI_AST 1
+#define IPI_CHECKSTATE 2
+#define IPI_INVLTLB 3
+#define IPI_RENDEZVOUS 4
+#define IPI_STOP 5
+
+#define IPI_COUNT 6
#ifndef LOCORE
-/* global data in mp_machdep.c */
-extern volatile u_int checkstate_probed_cpus;
-extern volatile u_int checkstate_need_ast;
-extern volatile u_int resched_cpus;
+extern int mp_hardware;
+extern int mp_ipi_vector[];
-void ipi_all(u_int64_t ipi);
-void ipi_all_but_self(u_int64_t ipi);
-void ipi_selected(u_int cpus, u_int64_t ipi);
-void ipi_self(u_int64_t ipi);
-void smp_init_secondary(void);
+void ipi_all(int ipi);
+void ipi_all_but_self(int ipi);
+void ipi_selected(u_int64_t cpus, int ipi);
+void ipi_self(int ipi);
#endif /* !LOCORE */
#endif /* _KERNEL */
OpenPOWER on IntegriCloud