diff options
Diffstat (limited to 'arch/x86/include/asm/trampoline.h')
-rw-r--r-- | arch/x86/include/asm/trampoline.h | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/arch/x86/include/asm/trampoline.h b/arch/x86/include/asm/trampoline.h new file mode 100644 index 00000000000..feca3118a73 --- /dev/null +++ b/arch/x86/include/asm/trampoline.h | |||
@@ -0,0 +1,39 @@ | |||
1 | #ifndef _ASM_X86_TRAMPOLINE_H | ||
2 | #define _ASM_X86_TRAMPOLINE_H | ||
3 | |||
4 | #ifndef __ASSEMBLY__ | ||
5 | |||
6 | #include <linux/types.h> | ||
7 | #include <asm/io.h> | ||
8 | |||
9 | /* | ||
10 | * Trampoline 80x86 program as an array. These are in the init rodata | ||
11 | * segment, but that's okay, because we only care about the relative | ||
12 | * addresses of the symbols. | ||
13 | */ | ||
14 | extern const unsigned char x86_trampoline_start []; | ||
15 | extern const unsigned char x86_trampoline_end []; | ||
16 | extern unsigned char *x86_trampoline_base; | ||
17 | |||
18 | extern unsigned long init_rsp; | ||
19 | extern unsigned long initial_code; | ||
20 | extern unsigned long initial_gs; | ||
21 | |||
22 | extern void __init setup_trampolines(void); | ||
23 | |||
24 | extern const unsigned char trampoline_data[]; | ||
25 | extern const unsigned char trampoline_status[]; | ||
26 | |||
27 | #define TRAMPOLINE_SYM(x) \ | ||
28 | ((void *)(x86_trampoline_base + \ | ||
29 | ((const unsigned char *)(x) - x86_trampoline_start))) | ||
30 | |||
31 | /* Address of the SMP trampoline */ | ||
32 | static inline unsigned long trampoline_address(void) | ||
33 | { | ||
34 | return virt_to_phys(TRAMPOLINE_SYM(trampoline_data)); | ||
35 | } | ||
36 | |||
37 | #endif /* __ASSEMBLY__ */ | ||
38 | |||
39 | #endif /* _ASM_X86_TRAMPOLINE_H */ | ||