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