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