1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * Definitions for the wakeup data structure at the head of the 4 * wakeup code. 5 */ 6 7 #ifndef ARCH_X86_KERNEL_ACPI_RM_WAKEUP_H 8 #define ARCH_X86_KERNEL_ACPI_RM_WAKEUP_H 9 10 #ifndef __ASSEMBLY__ 11 #include <linux/types.h> 12 13 /* This must match data at wakeup.S */ 14 struct wakeup_header { 15 u16 video_mode; /* Video mode number */ 16 u32 pmode_entry; /* Protected mode resume point, 32-bit only */ 17 u16 pmode_cs; 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 u32 signature; /* To check we have correct structure */ 30 } __attribute__((__packed__)); 31 32 extern struct wakeup_header wakeup_header; 33 #endif 34 35 #define WAKEUP_HEADER_OFFSET 8 36 #define WAKEUP_HEADER_SIGNATURE 0x51ee1111 37 38 /* Wakeup behavior bits */ 39 #define WAKEUP_BEHAVIOR_RESTORE_MISC_ENABLE 0 40 #define WAKEUP_BEHAVIOR_RESTORE_CR4 1 41 #define WAKEUP_BEHAVIOR_RESTORE_EFER 2 42 43 #endif /* ARCH_X86_KERNEL_ACPI_RM_WAKEUP_H */ 44