xref: /openbmc/linux/arch/x86/include/asm/realmode.h (revision 638d957b51c88852de72f15f7cd588d125e97dab)
1084ee1c6SJarkko Sakkinen #ifndef _ARCH_X86_REALMODE_H
2084ee1c6SJarkko Sakkinen #define _ARCH_X86_REALMODE_H
3084ee1c6SJarkko Sakkinen 
4084ee1c6SJarkko Sakkinen #include <linux/types.h>
5084ee1c6SJarkko Sakkinen #include <asm/io.h>
6084ee1c6SJarkko Sakkinen 
7084ee1c6SJarkko Sakkinen /* This must match data at realmode.S */
8084ee1c6SJarkko Sakkinen struct real_mode_header {
9084ee1c6SJarkko Sakkinen 	u32	text_start;
10084ee1c6SJarkko Sakkinen 	u32	ro_end;
1148927bbbSJarkko Sakkinen 	/* SMP trampoline */
12f37240f1SJarkko Sakkinen 	u32	trampoline_start;
1348927bbbSJarkko Sakkinen 	u32	trampoline_status;
14f37240f1SJarkko Sakkinen 	u32	trampoline_header;
15f37240f1SJarkko Sakkinen #ifdef CONFIG_X86_64
16f37240f1SJarkko Sakkinen 	u32	trampoline_pgd;
1748927bbbSJarkko Sakkinen #endif
18f37240f1SJarkko Sakkinen 	/* ACPI S3 wakeup */
19c9b77ccbSJarkko Sakkinen #ifdef CONFIG_ACPI_SLEEP
20c9b77ccbSJarkko Sakkinen 	u32	wakeup_start;
21c9b77ccbSJarkko Sakkinen 	u32	wakeup_header;
22c9b77ccbSJarkko Sakkinen #endif
23f37240f1SJarkko Sakkinen 	/* APM/BIOS reboot */
24f37240f1SJarkko Sakkinen #ifdef CONFIG_X86_32
25f37240f1SJarkko Sakkinen 	u32	machine_real_restart_asm;
26f37240f1SJarkko Sakkinen #endif
27cda846f1SJarkko Sakkinen };
28f37240f1SJarkko Sakkinen 
29f37240f1SJarkko Sakkinen /* This must match data at trampoline_32/64.S */
30f37240f1SJarkko Sakkinen struct trampoline_header {
31f37240f1SJarkko Sakkinen #ifdef CONFIG_X86_32
32f37240f1SJarkko Sakkinen 	u32 start;
33cda846f1SJarkko Sakkinen 	u16 gdt_pad;
34f37240f1SJarkko Sakkinen 	u16 gdt_limit;
35f37240f1SJarkko Sakkinen 	u32 gdt_base;
36f37240f1SJarkko Sakkinen #else
37f37240f1SJarkko Sakkinen 	u64 start;
38*638d957bSH. Peter Anvin 	u64 efer;
39cda846f1SJarkko Sakkinen 	u32 cr4;
40f37240f1SJarkko Sakkinen #endif
41cda846f1SJarkko Sakkinen };
42084ee1c6SJarkko Sakkinen 
43b429dbf6SJarkko Sakkinen extern struct real_mode_header *real_mode_header;
44b429dbf6SJarkko Sakkinen extern unsigned char real_mode_blob_end[];
45084ee1c6SJarkko Sakkinen 
46084ee1c6SJarkko Sakkinen extern unsigned long init_rsp;
47084ee1c6SJarkko Sakkinen extern unsigned long initial_code;
48084ee1c6SJarkko Sakkinen extern unsigned long initial_gs;
49084ee1c6SJarkko Sakkinen 
50084ee1c6SJarkko Sakkinen extern unsigned char real_mode_blob[];
51084ee1c6SJarkko Sakkinen extern unsigned char real_mode_relocs[];
52084ee1c6SJarkko Sakkinen 
5348927bbbSJarkko Sakkinen #ifdef CONFIG_X86_32
5448927bbbSJarkko Sakkinen extern unsigned char startup_32_smp[];
5548927bbbSJarkko Sakkinen extern unsigned char boot_gdt[];
5648927bbbSJarkko Sakkinen #else
5748927bbbSJarkko Sakkinen extern unsigned char secondary_startup_64[];
5848927bbbSJarkko Sakkinen #endif
5948927bbbSJarkko Sakkinen 
60084ee1c6SJarkko Sakkinen extern void __init setup_real_mode(void);
61084ee1c6SJarkko Sakkinen 
62084ee1c6SJarkko Sakkinen #endif /* _ARCH_X86_REALMODE_H */
63