feat: GICv2 and timer

fix: TimerReset in GIC.c now uses kTimerFrequency
This commit is contained in:
karina
2026-04-29 08:46:13 +04:00
parent 270aae56b4
commit 7fcb50587e
10 changed files with 181 additions and 5 deletions
+33 -1
View File
@@ -197,7 +197,39 @@ void VMMInitialize(VMBootMemoryMap* bootMap, Bootinfo* info) {
);
OSLog("UART mapped\n");
info->framebuffer.base = (BIUInt32*)kVMFbVirtBase;;
Address gicdPhys = bootMap->GIC.GICD.base;
Size gicdSize = bootMap->GIC.GICD.size;
if (!gicdPhys) {
gicdPhys = 0x08000000; // QEMU fallback
gicdSize = 0x10000;
}
for (Address offset = 0; offset < gicdSize; offset += kVMPageSize) {
VMMMapPage(
gVMKernelL0Table, gicdPhys + offset,
VMPhysToHHDM(gicdPhys + offset),
kPTEDeviceMem | kPTEAccessRW | kPTEUserNX | kPTEPrivNX
);
}
OSLog("GICD mapped\n");
Address giccPhys = bootMap->GIC.GICC.base;
Size giccSize = bootMap->GIC.GICC.size;
if (!giccPhys) {
giccPhys = 0x08001000; // QEMU fallback
giccSize = 0x10000;
}
for (Address offset = 0; offset < giccSize; offset += kVMPageSize) {
VMMMapPage(
gVMKernelL0Table, giccPhys + offset,
VMPhysToHHDM(giccPhys + offset),
kPTEDeviceMem | kPTEAccessRW | kPTEUserNX | kPTEPrivNX
);
}
OSLog("GICC mapped\n");
info->framebuffer.base = (BIUInt32*)kVMFbVirtBase;
OSLog("Enabling MMU...\n");
CPUEnableMMU(gVMKernelL0Physical);
isInitialized = true;