mirror of https://gitlab.com/nakst/essence
Don't assume that BSP has lapicid 0
On Meteor LAke it has ID 0x20 and results in missing interrupts
This commit is contained in:
parent
b5a00f7a07
commit
026b18e631
|
@ -42,6 +42,7 @@ uint32_t bootloaderID;
|
||||||
uintptr_t bootloaderInformationOffset;
|
uintptr_t bootloaderInformationOffset;
|
||||||
|
|
||||||
bool x2apic = false;
|
bool x2apic = false;
|
||||||
|
uint32_t bootstrapLapicID;
|
||||||
|
|
||||||
// Spinlock since some drivers need to access it in IRQs (e.g. ACPICA).
|
// Spinlock since some drivers need to access it in IRQs (e.g. ACPICA).
|
||||||
KSpinlock pciConfigSpinlock;
|
KSpinlock pciConfigSpinlock;
|
||||||
|
@ -736,7 +737,7 @@ void ArchInitialise() {
|
||||||
|
|
||||||
x2apic = !!(rdmsr(0x1b) & (1 << 10));
|
x2apic = !!(rdmsr(0x1b) & (1 << 10));
|
||||||
|
|
||||||
uint8_t bootstrapLapicID = x2apic ? LapicReadRegister(0x20 >> 2) : (LapicReadRegister(0x20 >> 2) >> 24);
|
bootstrapLapicID = x2apic ? LapicReadRegister(0x20 >> 2) : (LapicReadRegister(0x20 >> 2) >> 24);
|
||||||
|
|
||||||
ArchCPU *currentCPU = nullptr;
|
ArchCPU *currentCPU = nullptr;
|
||||||
|
|
||||||
|
@ -1003,7 +1004,7 @@ KMSIInformation KRegisterMSI(KIRQHandler handler, void *context, const char *cOw
|
||||||
INTERRUPT_VECTOR_MSI_START + i, cOwnerName);
|
INTERRUPT_VECTOR_MSI_START + i, cOwnerName);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
.address = 0xFEE00000,
|
.address = 0xFEE00000 | (bootstrapLapicID << 12),
|
||||||
.data = INTERRUPT_VECTOR_MSI_START + i,
|
.data = INTERRUPT_VECTOR_MSI_START + i,
|
||||||
.tag = i,
|
.tag = i,
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue