1 /* 2 * Definitions for the wakeup data structure at the head of the 3 * wakeup code. 4 */ 5 6 #ifndef ARCH_X86_KERNEL_ACPI_RM_WAKEUP_H 7 #define ARCH_X86_KERNEL_ACPI_RM_WAKEUP_H 8 9 #ifndef __ASSEMBLY__ 10 #include <linux/types.h> 11 12 /* This must match data at wakeup.S */ 13 struct wakeup_header { 14 u16 video_mode; /* Video mode number */ 15 u16 _jmp1; /* ljmpl opcode, 32-bit only */ 16 u32 pmode_entry; /* Protected mode resume point, 32-bit only */ 17 u16 _jmp2; /* CS value, 32-bit only */ 18 u32 pmode_cr0; /* Protected mode cr0 */ 19 u32 pmode_cr3; /* Protected mode cr3 */ 20 u32 pmode_cr4; /* Protected mode cr4 */ 21 u32 pmode_efer_low; /* Protected mode EFER */ 22 u32 pmode_efer_high; 23 u64 pmode_gdt; 24 u32 pmode_misc_en_low; /* Protected mode MISC_ENABLE */ 25 u32 pmode_misc_en_high; 26 u32 pmode_behavior; /* Wakeup routine behavior flags */ 27 u32 realmode_flags; 28 u32 real_magic; 29 u16 trampoline_segment; /* segment with trampoline code, 64-bit only */ 30 u8 _pad1; 31 u8 wakeup_jmp; 32 u16 wakeup_jmp_off; 33 u16 wakeup_jmp_seg; 34 u64 wakeup_gdt[3]; 35 u32 signature; /* To check we have correct structure */ 36 } __attribute__((__packed__)); 37 38 extern struct wakeup_header wakeup_header; 39 #endif 40 41 #define WAKEUP_HEADER_OFFSET 8 42 #define WAKEUP_HEADER_SIGNATURE 0x51ee1111 43 #define WAKEUP_END_SIGNATURE 0x65a22c82 44 45 /* Wakeup behavior bits */ 46 #define WAKEUP_BEHAVIOR_RESTORE_MISC_ENABLE 0 47 48 #endif /* ARCH_X86_KERNEL_ACPI_RM_WAKEUP_H */ 49