blob: 9b4a5da5e22ed89e856a032e25f063ac23483b99 [file] [log] [blame]
Jarkko Sakkinen084ee1c62012-05-08 21:22:26 +03001#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 u32 end;
Jarkko Sakkinen5a8c9ae2012-05-08 21:22:27 +030012 /* reboot */
13#ifdef CONFIG_X86_32
14 u32 machine_real_restart_asm;
15#endif
Jarkko Sakkinen48927bb2012-05-08 21:22:28 +030016 /* SMP trampoline */
17 u32 trampoline_data;
18 u32 trampoline_status;
19#ifdef CONFIG_X86_32
20 u32 startup_32_smp;
21 u32 boot_gdt;
22#else
23 u32 startup_64_smp;
24 u32 level3_ident_pgt;
25 u32 level3_kernel_pgt;
26#endif
Jarkko Sakkinen084ee1c62012-05-08 21:22:26 +030027} __attribute__((__packed__));
28
29extern struct real_mode_header real_mode_header;
30extern unsigned char *real_mode_base;
31
32extern unsigned long init_rsp;
33extern unsigned long initial_code;
34extern unsigned long initial_gs;
35
36extern unsigned char real_mode_blob[];
37extern unsigned char real_mode_relocs[];
38
Jarkko Sakkinen48927bb2012-05-08 21:22:28 +030039#ifdef CONFIG_X86_32
40extern unsigned char startup_32_smp[];
41extern unsigned char boot_gdt[];
42#else
43extern unsigned char secondary_startup_64[];
44#endif
45
Jarkko Sakkinen084ee1c62012-05-08 21:22:26 +030046extern void __init setup_real_mode(void);
47
48#endif /* _ARCH_X86_REALMODE_H */