1// SPDX-License-Identifier: GPL-3.0-or-later
2
3#pragma once
4
5#include "mos/platform/platform.hpp"
6
7#include <mos/type_utils.hpp>
8
9#define X86_BIOS_MEMREGION_PADDR 0xf0000
10#define BIOS_MEMREGION_SIZE 0x10000
11
12#define X86_EBDA_MEMREGION_PADDR 0x80000
13#define EBDA_MEMREGION_SIZE 0x20000
14
15#define X86_VIDEO_DEVICE_PADDR 0xb8000
16
17#define MOS_SYSCALL_INTR 0x88
18
19struct platform_regs_t : mos::NamedType<"Platform.Registers">
20{
21 platform_regs_t()
22 {
23 memzero(s: this, n: sizeof(*this));
24 }
25
26 platform_regs_t(const platform_regs_t *regs)
27 {
28 *this = *regs;
29 }
30
31 reg_t r15, r14, r13, r12, r11, r10, r9, r8;
32 reg_t di, si, bp, dx, cx, bx, ax;
33 reg_t interrupt_number, error_code;
34 // iret params
35 reg_t ip, cs;
36 reg_t eflags;
37 reg_t sp, ss;
38} __packed;
39
40MOS_STATIC_ASSERT(sizeof(platform_regs_t) == 176, "platform_regs_t has incorrect size");
41
42extern mos_platform_info_t x86_platform;
43void x86_dump_stack_at(ptr_t this_frame, bool can_access_vmaps);
44
45void x86_setup_lapic_timer();
46