diff options
author | Pavel Machek <pavel@suse.cz> | 2008-04-10 17:28:10 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-04-17 11:41:37 -0400 |
commit | e44b7b7525ad9d43163ab5e60c784325419e0ea6 (patch) | |
tree | e2918917a97b4c9de4367e8778ed78afc762b9f8 /include/asm-x86 | |
parent | f49688d459c5eaa62db3597cbfd3cb13e361d415 (diff) |
x86: move suspend wakeup code to C
Move wakeup code to .c, so that video mode setting code can be shared
between boot and wakeup. Remove nasty assembly code in 64-bit case by
re-using trampoline code. Stack setup was fixed to clear high 16bits
of %esp, maybe that fixes some machines.
.c code sharing and morse code was done H. Peter Anvin, Sam Ravnborg
reviewed kbuild related stuff, and it seems okay to him. Rafael did
some cleanups.
[rjw:
* Made the patch stop breaking compilation on x86-32
* Added arch/x86/kernel/acpi/sleep.h
* Got rid of compiler warnings in arch/x86/kernel/acpi/sleep.c
* Fixed 32-bit compilation on x86-64 systems
* Added include/asm-x86/trampoline.h and fixed the non-SMP
compilation on 64-bit x86
* Removed arch/x86/kernel/acpi/sleep_32.c which was not used
* Fixed some breakage caused by the integration of smpboot.c done
under us in the meantime]
Signed-off-by: Pavel Machek <pavel@suse.cz>
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'include/asm-x86')
-rw-r--r-- | include/asm-x86/smp.h | 13 | ||||
-rw-r--r-- | include/asm-x86/trampoline.h | 21 |
2 files changed, 21 insertions, 13 deletions
diff --git a/include/asm-x86/smp.h b/include/asm-x86/smp.h index 3496e1c299b2..62ebdec394b9 100644 --- a/include/asm-x86/smp.h +++ b/include/asm-x86/smp.h | |||
@@ -45,22 +45,12 @@ DECLARE_PER_CPU(u16, cpu_llc_id); | |||
45 | DECLARE_PER_CPU(u16, x86_cpu_to_apicid); | 45 | DECLARE_PER_CPU(u16, x86_cpu_to_apicid); |
46 | DECLARE_PER_CPU(u16, x86_bios_cpu_apicid); | 46 | DECLARE_PER_CPU(u16, x86_bios_cpu_apicid); |
47 | 47 | ||
48 | /* | ||
49 | * Trampoline 80x86 program as an array. | ||
50 | */ | ||
51 | extern const unsigned char trampoline_data []; | ||
52 | extern const unsigned char trampoline_end []; | ||
53 | extern unsigned char *trampoline_base; | ||
54 | |||
55 | /* Static state in head.S used to set up a CPU */ | 48 | /* Static state in head.S used to set up a CPU */ |
56 | extern struct { | 49 | extern struct { |
57 | void *sp; | 50 | void *sp; |
58 | unsigned short ss; | 51 | unsigned short ss; |
59 | } stack_start; | 52 | } stack_start; |
60 | 53 | ||
61 | extern unsigned long init_rsp; | ||
62 | extern unsigned long initial_code; | ||
63 | |||
64 | struct smp_ops { | 54 | struct smp_ops { |
65 | void (*smp_prepare_boot_cpu)(void); | 55 | void (*smp_prepare_boot_cpu)(void); |
66 | void (*smp_prepare_cpus)(unsigned max_cpus); | 56 | void (*smp_prepare_cpus)(unsigned max_cpus); |
@@ -130,9 +120,6 @@ extern void __cpu_die(unsigned int cpu); | |||
130 | 120 | ||
131 | extern void prefill_possible_map(void); | 121 | extern void prefill_possible_map(void); |
132 | 122 | ||
133 | #define SMP_TRAMPOLINE_BASE 0x6000 | ||
134 | extern unsigned long setup_trampoline(void); | ||
135 | |||
136 | void smp_store_cpu_info(int id); | 123 | void smp_store_cpu_info(int id); |
137 | #define cpu_physical_id(cpu) per_cpu(x86_cpu_to_apicid, cpu) | 124 | #define cpu_physical_id(cpu) per_cpu(x86_cpu_to_apicid, cpu) |
138 | 125 | ||
diff --git a/include/asm-x86/trampoline.h b/include/asm-x86/trampoline.h new file mode 100644 index 000000000000..b156b08d0131 --- /dev/null +++ b/include/asm-x86/trampoline.h | |||
@@ -0,0 +1,21 @@ | |||
1 | #ifndef __TRAMPOLINE_HEADER | ||
2 | #define __TRAMPOLINE_HEADER | ||
3 | |||
4 | #ifndef __ASSEMBLY__ | ||
5 | |||
6 | /* | ||
7 | * Trampoline 80x86 program as an array. | ||
8 | */ | ||
9 | extern const unsigned char trampoline_data []; | ||
10 | extern const unsigned char trampoline_end []; | ||
11 | extern unsigned char *trampoline_base; | ||
12 | |||
13 | extern unsigned long init_rsp; | ||
14 | extern unsigned long initial_code; | ||
15 | |||
16 | #define TRAMPOLINE_BASE 0x6000 | ||
17 | extern unsigned long setup_trampoline(void); | ||
18 | |||
19 | #endif /* __ASSEMBLY__ */ | ||
20 | |||
21 | #endif /* __TRAMPOLINE_HEADER */ | ||