Fix for APIC

This commit is contained in:
Alex 2022-10-25 02:51:53 +03:00
parent b66e8fb4f8
commit 0beb57eae8
Signed by untrusted user who does not match committer: enderice2
GPG Key ID: EACC3AD603BAB4DD

View File

@ -86,7 +86,7 @@ namespace APIC
void APIC::WaitForIPI() void APIC::WaitForIPI()
{ {
InterruptCommandRegisterLow icr; InterruptCommandRegisterLow icr = {.raw = 0};
do do
{ {
icr.raw = this->Read(APIC_ICRLO); icr.raw = this->Read(APIC_ICRLO);
@ -119,7 +119,7 @@ namespace APIC
} }
else else
{ {
InterruptCommandRegisterLow icr; InterruptCommandRegisterLow icr = {.raw = 0};
icr.DeliveryMode = INIT; icr.DeliveryMode = INIT;
icr.Level = Assert; icr.Level = Assert;
this->Write(APIC_ICRHI, (CPU << 24)); this->Write(APIC_ICRHI, (CPU << 24));
@ -138,7 +138,7 @@ namespace APIC
} }
else else
{ {
InterruptCommandRegisterLow icr; InterruptCommandRegisterLow icr = {.raw = 0};
icr.Vector = StartupAddress >> 12; icr.Vector = StartupAddress >> 12;
icr.DeliveryMode = Startup; icr.DeliveryMode = Startup;
icr.Level = Assert; icr.Level = Assert;
@ -173,6 +173,8 @@ namespace APIC
return; return;
} }
// TODO: IOAPICRedirectEntry Entry = {.raw = 0};
if (Flags & ActiveHighLow) if (Flags & ActiveHighLow)
Value |= (1 << 13); Value |= (1 << 13);
@ -182,8 +184,7 @@ namespace APIC
if (!Status) if (!Status)
Value |= (1 << 16); Value |= (1 << 16);
// Value |= (((uintptr_t)GetCPU(CPU)->Data->LAPIC.APICId) << 56); Value |= (((uintptr_t)CPU) << 56);
Value |= (((uintptr_t)0) << 56);
uint32_t IORegister = (GSI - ((ACPI::MADT *)PowerManager->GetMADT())->ioapic[IOAPICTarget]->GSIBase) * 2 + 16; uint32_t IORegister = (GSI - ((ACPI::MADT *)PowerManager->GetMADT())->ioapic[IOAPICTarget]->GSIBase) * 2 + 16;
this->IOWrite(((ACPI::MADT *)PowerManager->GetMADT())->ioapic[IOAPICTarget]->Address, IORegister, (uint32_t)Value); this->IOWrite(((ACPI::MADT *)PowerManager->GetMADT())->ioapic[IOAPICTarget]->Address, IORegister, (uint32_t)Value);