1#ifndef _ARCH_X86_REALMODE_H 2#define _ARCH_X86_REALMODE_H 3 4#include <linux/types.h> 5#include <asm/io.h> 6 7/* This must match data at realmode.S */ 8struct real_mode_header { 9 u32 text_start; 10 u32 ro_end; 11 /* SMP trampoline */ 12 u32 trampoline_start; 13 u32 trampoline_status; 14 u32 trampoline_header; 15#ifdef CONFIG_X86_64 16 u32 trampoline_pgd; 17#endif 18 /* ACPI S3 wakeup */ 19#ifdef CONFIG_ACPI_SLEEP 20 u32 wakeup_start; 21 u32 wakeup_header; 22#endif 23 /* APM/BIOS reboot */ 24 u32 machine_real_restart_asm; 25#ifdef CONFIG_X86_64 26 u32 machine_real_restart_seg; 27#endif 28}; 29 30/* This must match data at trampoline_32/64.S */ 31struct trampoline_header { 32#ifdef CONFIG_X86_32 33 u32 start; 34 u16 gdt_pad; 35 u16 gdt_limit; 36 u32 gdt_base; 37#else 38 u64 start; 39 u64 efer; 40 u32 cr4; 41#endif 42}; 43 44extern struct real_mode_header *real_mode_header; 45extern unsigned char real_mode_blob_end[]; 46 47extern unsigned long init_rsp; 48extern unsigned long initial_code; 49extern unsigned long initial_gs; 50 51extern unsigned char real_mode_blob[]; 52extern unsigned char real_mode_relocs[]; 53 54#ifdef CONFIG_X86_32 55extern unsigned char startup_32_smp[]; 56extern unsigned char boot_gdt[]; 57#else 58extern unsigned char secondary_startup_64[]; 59#endif 60 61void reserve_real_mode(void); 62void setup_real_mode(void); 63 64#endif /* _ARCH_X86_REALMODE_H */ 65