feat: GICv2 and timer
fix: TimerReset in GIC.c now uses kTimerFrequency
This commit is contained in:
+33
-1
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user