40 lines
1.0 KiB
C
40 lines
1.0 KiB
C
|
#ifndef _ASM_X86_TRAMPOLINE_H
|
||
|
#define _ASM_X86_TRAMPOLINE_H
|
||
|
|
||
|
#ifndef __ASSEMBLY__
|
||
|
|
||
|
#include <linux/types.h>
|
||
|
#include <asm/io.h>
|
||
|
|
||
|
/*
|
||
|
* Trampoline 80x86 program as an array. These are in the init rodata
|
||
|
* segment, but that's okay, because we only care about the relative
|
||
|
* addresses of the symbols.
|
||
|
*/
|
||
|
extern const unsigned char x86_trampoline_start [];
|
||
|
extern const unsigned char x86_trampoline_end [];
|
||
|
extern unsigned char *x86_trampoline_base;
|
||
|
|
||
|
extern unsigned long init_rsp;
|
||
|
extern unsigned long initial_code;
|
||
|
extern unsigned long initial_gs;
|
||
|
|
||
|
extern void __init setup_trampolines(void);
|
||
|
|
||
|
extern const unsigned char trampoline_data[];
|
||
|
extern const unsigned char trampoline_status[];
|
||
|
|
||
|
#define TRAMPOLINE_SYM(x) \
|
||
|
((void *)(x86_trampoline_base + \
|
||
|
((const unsigned char *)(x) - x86_trampoline_start)))
|
||
|
|
||
|
/* Address of the SMP trampoline */
|
||
|
static inline unsigned long trampoline_address(void)
|
||
|
{
|
||
|
return virt_to_phys(TRAMPOLINE_SYM(trampoline_data));
|
||
|
}
|
||
|
|
||
|
#endif /* __ASSEMBLY__ */
|
||
|
|
||
|
#endif /* _ASM_X86_TRAMPOLINE_H */
|