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