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 u32 pmode_entry; /* Protected mode resume point, 32-bit only */ 16 u16 pmode_cs; 17 u32 pmode_cr0; /* Protected mode cr0 */ 18 u32 pmode_cr3; /* Protected mode cr3 */ 19 u32 pmode_cr4; /* Protected mode cr4 */ 20 u32 pmode_efer_low; /* Protected mode EFER */ 21 u32 pmode_efer_high; 22 u64 pmode_gdt; 23 u32 pmode_misc_en_low; /* Protected mode MISC_ENABLE */ 24 u32 pmode_misc_en_high; 25 u32 pmode_behavior; /* Wakeup routine behavior flags */ 26 u32 realmode_flags; 27 u32 real_magic; 28 u32 signature; /* To check we have correct structure */ 29 } __attribute__((__packed__)); 30 31 extern struct wakeup_header wakeup_header; 32 #endif 33 34 #define WAKEUP_HEADER_OFFSET 8 35 #define WAKEUP_HEADER_SIGNATURE 0x51ee1111 36 37 /* Wakeup behavior bits */ 38 #define WAKEUP_BEHAVIOR_RESTORE_MISC_ENABLE 0 39 #define WAKEUP_BEHAVIOR_RESTORE_CR4 1 40 #define WAKEUP_BEHAVIOR_RESTORE_EFER 2 41 42 #endif /* ARCH_X86_KERNEL_ACPI_RM_WAKEUP_H */ 43