xref: /openbmc/linux/arch/x86/include/asm/realmode.h (revision f37240f16bec91f15ce564515f70a6ca9715ce96)
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 */
12*f37240f1SJarkko Sakkinen 	u32	trampoline_start;
1348927bbbSJarkko Sakkinen 	u32	trampoline_status;
14*f37240f1SJarkko Sakkinen 	u32	trampoline_header;
15*f37240f1SJarkko Sakkinen #ifdef CONFIG_X86_64
16*f37240f1SJarkko Sakkinen 	u32	trampoline_pgd;
1748927bbbSJarkko Sakkinen #endif
18*f37240f1SJarkko Sakkinen 	/* ACPI S3 wakeup */
19c9b77ccbSJarkko Sakkinen #ifdef CONFIG_ACPI_SLEEP
20c9b77ccbSJarkko Sakkinen 	u32	wakeup_start;
21c9b77ccbSJarkko Sakkinen 	u32	wakeup_header;
22c9b77ccbSJarkko Sakkinen #endif
23*f37240f1SJarkko Sakkinen 	/* APM/BIOS reboot */
24*f37240f1SJarkko Sakkinen #ifdef CONFIG_X86_32
25*f37240f1SJarkko Sakkinen 	u32	machine_real_restart_asm;
26*f37240f1SJarkko Sakkinen #endif
27*f37240f1SJarkko Sakkinen } __attribute__((__packed__));
28*f37240f1SJarkko Sakkinen 
29*f37240f1SJarkko Sakkinen /* This must match data at trampoline_32/64.S */
30*f37240f1SJarkko Sakkinen struct trampoline_header {
31*f37240f1SJarkko Sakkinen #ifdef CONFIG_X86_32
32*f37240f1SJarkko Sakkinen 	u32 start;
33*f37240f1SJarkko Sakkinen 	u16 gdt_limit;
34*f37240f1SJarkko Sakkinen 	u32 gdt_base;
35*f37240f1SJarkko Sakkinen #else
36*f37240f1SJarkko Sakkinen 	u64 start;
37*f37240f1SJarkko Sakkinen #endif
38084ee1c6SJarkko Sakkinen } __attribute__((__packed__));
39084ee1c6SJarkko Sakkinen 
40b429dbf6SJarkko Sakkinen extern struct real_mode_header *real_mode_header;
41b429dbf6SJarkko Sakkinen extern unsigned char real_mode_blob_end[];
42084ee1c6SJarkko Sakkinen 
43084ee1c6SJarkko Sakkinen extern unsigned long init_rsp;
44084ee1c6SJarkko Sakkinen extern unsigned long initial_code;
45084ee1c6SJarkko Sakkinen extern unsigned long initial_gs;
46084ee1c6SJarkko Sakkinen 
47084ee1c6SJarkko Sakkinen extern unsigned char real_mode_blob[];
48084ee1c6SJarkko Sakkinen extern unsigned char real_mode_relocs[];
49084ee1c6SJarkko Sakkinen 
5048927bbbSJarkko Sakkinen #ifdef CONFIG_X86_32
5148927bbbSJarkko Sakkinen extern unsigned char startup_32_smp[];
5248927bbbSJarkko Sakkinen extern unsigned char boot_gdt[];
5348927bbbSJarkko Sakkinen #else
5448927bbbSJarkko Sakkinen extern unsigned char secondary_startup_64[];
5548927bbbSJarkko Sakkinen #endif
5648927bbbSJarkko Sakkinen 
57084ee1c6SJarkko Sakkinen extern void __init setup_real_mode(void);
58084ee1c6SJarkko Sakkinen 
59084ee1c6SJarkko Sakkinen #endif /* _ARCH_X86_REALMODE_H */
60