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