summaryrefslogtreecommitdiffstats
path: root/sys/i386/include/smp.h
diff options
context:
space:
mode:
authoriwasaki <iwasaki@FreeBSD.org>2012-05-18 18:55:58 +0000
committeriwasaki <iwasaki@FreeBSD.org>2012-05-18 18:55:58 +0000
commit31eddd58e3798cc0cb647a258ee1746a9f043078 (patch)
tree8925d82a855712a632f2c701eb9cec7ec7fbb7c4 /sys/i386/include/smp.h
parent8a8c044e283955d1ea7337162a3cfd195f2abbb1 (diff)
downloadFreeBSD-src-31eddd58e3798cc0cb647a258ee1746a9f043078.zip
FreeBSD-src-31eddd58e3798cc0cb647a258ee1746a9f043078.tar.gz
Add SMP/i386 suspend/resume support.
Most part is merged from amd64. - i386/acpica/acpi_wakecode.S Replaced with amd64 code (from realmode to paging enabling code). - i386/acpica/acpi_wakeup.c Replaced with amd64 code (except for wakeup_pagetables stuff). - i386/include/pcb.h - i386/i386/genassym.c Added PCB new members (CR0, CR2, CR4, DS, ED, FS, SS, GDT, IDT, LDT and TR) needed for suspend/resume, not for context switch. - i386/i386/swtch.s Added suspendctx() and resumectx(). Note that savectx() was not changed and used for suspending (while amd64 code uses it). BSP and AP execute the same sequence, suspendctx(), acpi_wakecode() and resumectx() for suspend/resume (in case of UP system also). - i386/i386/apic_vector.s Added cpususpend(). - i386/i386/mp_machdep.c - i386/include/smp.h Added cpususpend_handler(). - i386/include/apicvar.h - kern/subr_smp.c - sys/smp.h Added IPI_SUSPEND and suspend_cpus(). - i386/i386/initcpu.c - i386/i386/machdep.c - i386/include/md_var.h - pc98/pc98/machdep.c Moved initializecpu() declarations to md_var.h. MFC after: 3 days
Diffstat (limited to 'sys/i386/include/smp.h')
-rw-r--r--sys/i386/include/smp.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/sys/i386/include/smp.h b/sys/i386/include/smp.h
index 04d67c9..43172d6 100644
--- a/sys/i386/include/smp.h
+++ b/sys/i386/include/smp.h
@@ -53,12 +53,14 @@ inthand_t
IDTVEC(invlcache), /* Write back and invalidate cache */
IDTVEC(ipi_intr_bitmap_handler), /* Bitmap based IPIs */
IDTVEC(cpustop), /* CPU stops & waits to be restarted */
+ IDTVEC(cpususpend), /* CPU suspends & waits to be resumed */
IDTVEC(rendezvous), /* handle CPU rendezvous */
IDTVEC(lazypmap); /* handle lazy pmap release */
/* functions in mp_machdep.c */
void cpu_add(u_int apic_id, char boot_cpu);
void cpustop_handler(void);
+void cpususpend_handler(void);
void init_secondary(void);
void ipi_all_but_self(u_int ipi);
#ifndef XEN
OpenPOWER on IntegriCloud