xref: /openbmc/linux/arch/x86/include/asm/realmode.h (revision 650513979a437c32d7a0a84f0ed952a55bbb5583)
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 	u32	machine_real_restart_asm;
25*65051397SH. Peter Anvin #ifdef CONFIG_X86_64
26*65051397SH. Peter Anvin 	u32	machine_real_restart_seg;
27f37240f1SJarkko Sakkinen #endif
28cda846f1SJarkko Sakkinen };
29f37240f1SJarkko Sakkinen 
30f37240f1SJarkko Sakkinen /* This must match data at trampoline_32/64.S */
31f37240f1SJarkko Sakkinen struct trampoline_header {
32f37240f1SJarkko Sakkinen #ifdef CONFIG_X86_32
33f37240f1SJarkko Sakkinen 	u32 start;
34cda846f1SJarkko Sakkinen 	u16 gdt_pad;
35f37240f1SJarkko Sakkinen 	u16 gdt_limit;
36f37240f1SJarkko Sakkinen 	u32 gdt_base;
37f37240f1SJarkko Sakkinen #else
38f37240f1SJarkko Sakkinen 	u64 start;
39638d957bSH. Peter Anvin 	u64 efer;
40cda846f1SJarkko Sakkinen 	u32 cr4;
41f37240f1SJarkko Sakkinen #endif
42cda846f1SJarkko Sakkinen };
43084ee1c6SJarkko Sakkinen 
44b429dbf6SJarkko Sakkinen extern struct real_mode_header *real_mode_header;
45b429dbf6SJarkko Sakkinen extern unsigned char real_mode_blob_end[];
46084ee1c6SJarkko Sakkinen 
47084ee1c6SJarkko Sakkinen extern unsigned long init_rsp;
48084ee1c6SJarkko Sakkinen extern unsigned long initial_code;
49084ee1c6SJarkko Sakkinen extern unsigned long initial_gs;
50084ee1c6SJarkko Sakkinen 
51084ee1c6SJarkko Sakkinen extern unsigned char real_mode_blob[];
52084ee1c6SJarkko Sakkinen extern unsigned char real_mode_relocs[];
53084ee1c6SJarkko Sakkinen 
5448927bbbSJarkko Sakkinen #ifdef CONFIG_X86_32
5548927bbbSJarkko Sakkinen extern unsigned char startup_32_smp[];
5648927bbbSJarkko Sakkinen extern unsigned char boot_gdt[];
5748927bbbSJarkko Sakkinen #else
5848927bbbSJarkko Sakkinen extern unsigned char secondary_startup_64[];
5948927bbbSJarkko Sakkinen #endif
6048927bbbSJarkko Sakkinen 
61084ee1c6SJarkko Sakkinen extern void __init setup_real_mode(void);
62084ee1c6SJarkko Sakkinen 
63084ee1c6SJarkko Sakkinen #endif /* _ARCH_X86_REALMODE_H */
64