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 realmode_flags; 25 u32 real_magic; 26 u16 trampoline_segment; /* segment with trampoline code, 64-bit only */ 27 u8 _pad1; 28 u8 wakeup_jmp; 29 u16 wakeup_jmp_off; 30 u16 wakeup_jmp_seg; 31 u64 wakeup_gdt[3]; 32 u32 signature; /* To check we have correct structure */ 33 } __attribute__((__packed__)); 34 35 extern struct wakeup_header wakeup_header; 36 #endif 37 38 #define WAKEUP_HEADER_OFFSET 8 39 #define WAKEUP_HEADER_SIGNATURE 0x51ee1111 40 #define WAKEUP_END_SIGNATURE 0x65a22c82 41 42 #endif /* ARCH_X86_KERNEL_ACPI_RM_WAKEUP_H */ 43