26#define kPITControlPort (0x43)
27#define kPITChannel0Port (0x40)
28#define kPITFrequency (1193180)
30#define kPICCommand (0x20)
31#define kPICData (0x21)
32#define kPIC2Command (0xA0)
33#define kPIC2Data (0xA1)
35#define kIOAPICRegVal (4)
36#define kIOAPICRegReg (0)
38#define rtl_nop_op() asm volatile("nop")
41#define kKernelIdtSize (0x100)
44#define kKernelInterruptId (0x32)
46#define IsActiveLow(FLG) (FLG & 2)
47#define IsLevelTriggered(FLG) (FLG & 8)
49#define kInterruptGate (0x8E)
50#define kUserInterruptGate (0xEE)
51#define kTrapGate (0xEF)
52#define kTaskGate (0b10001100)
53#define kIDTSelector (0x08)
56namespace Detail::AMD64 {
57 struct PACKED InterruptDescriptorAMD64 final {
72 kMMFlagsInvalid = 1 << 0,
73 kMMFlagsPresent = 1 << 1,
75 kMMFlagsUser = 1 << 3,
82struct PACKED Register64 final {
88using Reg = RawRegister;
107class InterruptDescriptor final {
118 operator bool() {
return Offset != 0xFFFF; }
121using InterruptDescriptorArray = Array<InterruptDescriptor, 256>;
123class SegmentDescriptor final {
137class SegmentDescriptorComparator final {
139 Bool IsValid(SegmentDescriptor& seg) {
return seg.Base > seg.Limit; }
141 Bool Equals(SegmentDescriptor& seg, SegmentDescriptor& segRight) {
142 return seg.Base == segRight.Base && seg.Limit == segRight.Limit;
146using SegmentArray = Array<SegmentDescriptor, 6>;
148class GDTLoader final {
150 static Void Load(Register64& gdt);
154class IDTLoader final {
156 static Void Load(Register64& idt);
197 struct NE_TSS final {
219 struct PACKED NE_GDT_ENTRY final {
229class LAPICDmaWrapper final {
231 explicit LAPICDmaWrapper(
VoidPtr base);
238 Void Write(UInt16 reg, UInt32 value);
EXTERN_C void idt_handle_pf(Kernel::UIntPtr rsp)
Handle page fault.
Definition HalCoreInterruptHandler.cc:47
EXTERN_C void idt_handle_generic(Kernel::UIntPtr rsp)
Handle any generic fault.
Definition HalCoreInterruptHandler.cc:89
EXTERN_C Kernel::Void idt_handle_gpf(Kernel::UIntPtr rsp)
Handle GPF fault.
Definition HalCoreInterruptHandler.cc:34
EXTERN_C void idt_handle_math(Kernel::UIntPtr rsp)
Handle math fault.
Definition HalCoreInterruptHandler.cc:75
#define NE_COPY_DEFAULT(KLASS)
Definition Detail.h:17
The handover boot protocol.
REF_TYPE * Ref
Definition System.h:28
void * VoidPtr
Definition Macros.h:59
Definition HalDescriptorLoader.cc:12
Hardware Abstraction Layer.
Definition ArchKit.h:62
UIntPtr Reg
Definition Processor.h:18
StackFrame * StackFramePtr
Definition Processor.h:34
Void hal_set_msr(UInt32 msr, UInt32 lo, UInt32 hi)
Definition HalProcessor.cc:33
Void rt_sti()
Definition HalProcessor.cc:78
Void rt_halt()
Definition HalProcessor.cc:70
Void hal_get_msr(UInt32 msr, UInt32 *lo, UInt32 *hi)
Definition HalProcessor.cc:28
Void rt_cli()
Definition HalProcessor.cc:74
EXTERN_C UIntPtr mm_get_page_addr(VoidPtr virt)
Gets a physical address from a virtual address.
Definition HalPagingMgr.cc:60
Void mp_init_cores(VoidPtr vendor_ptr)
Fetch and enable SMP scheduler.
Definition HalApplicationProcessor.cc:146
Void rt_std()
Definition HalProcessor.cc:86
Bool hal_has_msr()
Definition HalProcessor.cc:19
EXTERN_C Int32 mm_map_page(VoidPtr virtual_address, VoidPtr physical_address, UInt32 flags, UInt32 level)
Maps or allocates a page from virtual_address.
Definition HalPagingMgr.cc:120
EXTERN_C Int32 mm_memory_fence(VoidPtr virtual_address)
clflush+mfence helper function.
Definition HalPagingMgr.cc:104
Bool mp_is_smp(Void)
Is the current config SMP aware?
Definition HalApplicationProcessor.cc:137
Void rt_cld()
Definition HalProcessor.cc:82
UPS inline definitions.
Definition Device.h:12
void Void
Definition Config.h:87
__UINT8_TYPE__ UChar
Definition Config.h:54
__UINT16_TYPE__ UInt16
Definition Config.h:40
__UINT8_TYPE__ UInt8
Definition Config.h:55
__UINT32_TYPE__ UInt32
Definition Config.h:44
void * VoidPtr
Definition Config.h:33
__INT32_TYPE__ Int32
Definition Config.h:38
__UINT16_TYPE__ UShort
Definition Config.h:39
__UINT32_TYPE__ UInt
Definition Config.h:43
__UINTPTR_TYPE__ UIntPtr
Definition Config.h:62
__UINT64_TYPE__ UInt64
Definition Config.h:48
bool Bool
Definition Config.h:50
Stack frame (as retrieved from assembly.).
Definition Processor.h:21