xref: /kvmtool/x86/include/kvm/bios.h (revision da4cfc3e540341b84c4bbad705b5a15865bc1f80)
1 #ifndef BIOS_H_
2 #define BIOS_H_
3 
4 /*
5  * X86-32 Memory Map (typical)
6  *					start      end
7  * Real Mode Interrupt Vector Table	0x00000000 0x000003FF
8  * BDA area				0x00000400 0x000004FF
9  * Conventional Low Memory		0x00000500 0x0009FBFF
10  * EBDA area				0x0009FC00 0x0009FFFF
11  * VIDEO RAM				0x000A0000 0x000BFFFF
12  * VIDEO ROM (BIOS)			0x000C0000 0x000C7FFF
13  * ROMs & unus. space (mapped hw & misc)0x000C8000 0x000EFFFF 160 KiB (typically)
14  * Motherboard BIOS			0x000F0000 0x000FFFFF
15  * Extended Memory			0x00100000 0xFEBFFFFF
16  * Reserved (configs, ACPI, PnP, etc)	0xFEC00000 0xFFFFFFFF
17  */
18 
19 #define REAL_MODE_IVT_BEGIN		0x00000000
20 #define REAL_MODE_IVT_END		0x000003ff
21 
22 #define BDA_START			0x00000400
23 #define BDA_END				0x000004ff
24 #define BDA_SIZE			(BDA_END - BDA_START + 1)
25 
26 #define EBDA_START			0x0009fc00
27 #define EBDA_END			0x0009ffff
28 #define EBDA_SIZE			(EBDA_END - EBDA_START + 1)
29 
30 #define E820_MAP_START			EBDA_START
31 
32 #define MB_BIOS_BEGIN			0x000f0000
33 #define MB_FIRMWARE_BIOS_BEGIN		0x000e0000
34 #define MB_BIOS_END			0x000fffff
35 
36 #define MB_BIOS_SIZE			(MB_BIOS_END - MB_BIOS_BEGIN + 1)
37 #define MB_FIRMWARE_BIOS_SIZE		(MB_BIOS_END - MB_FIRMWARE_BIOS_BEGIN + 1)
38 
39 #define VGA_RAM_BEGIN			0x000a0000
40 #define VGA_RAM_END			0x000bffff
41 
42 #define VGA_ROM_BEGIN			0x000c0000
43 #define VGA_ROM_OEM_STRING		VGA_ROM_BEGIN
44 #define VGA_ROM_OEM_STRING_SIZE		16
45 #define VGA_ROM_MODES			(VGA_ROM_OEM_STRING + VGA_ROM_OEM_STRING_SIZE)
46 #define VGA_ROM_MODES_SIZE		32
47 #define VGA_ROM_END			0x000c7fff
48 #define VGA_ROM_SIZE			(VGA_ROM_END - VGA_ROM_BEGIN + 1)
49 
50 /* we handle one page only */
51 #define VGA_RAM_SEG			(VGA_RAM_BEGIN >> 4)
52 #define VGA_PAGE_SIZE			0x007d0 /* 80x25 */
53 
54 /* real mode interrupt vector table */
55 #define REAL_INTR_BASE			REAL_MODE_IVT_BEGIN
56 #define REAL_INTR_VECTORS		256
57 
58 /*
59  * BIOS stack must be at absolute predefined memory address
60  * We reserve 64 bytes for BIOS stack
61  */
62 #define MB_BIOS_SS			0xfff7
63 #define MB_BIOS_SP			0x40
64 
65 /*
66  * When interfere with assembler code we need to be sure how
67  * arguments are passed in real mode.
68  */
69 #define bioscall __attribute__((regparm(3)))
70 
71 #ifndef __ASSEMBLER__
72 
73 #include <asm/bios/types.h>
74 
75 struct biosregs {
76 	u32			eax;
77 	u32			ebx;
78 	u32			ecx;
79 	u32			edx;
80 	u32			esp;
81 	u32			ebp;
82 	u32			esi;
83 	u32			edi;
84 	u32			ds;
85 	u32			es;
86 	u32			fs;
87 	u32			eip;
88 	u32			eflags;
89 };
90 
91 extern bioscall void int10_handler(struct biosregs *regs);
92 extern bioscall void int15_handler(struct biosregs *regs);
93 
94 #endif
95 
96 #endif /* BIOS_H_ */
97