diff --git a/kaleid/kernel/io/acpi.c b/kaleid/kernel/io/acpi.c index 6846607..626b7a9 100644 --- a/kaleid/kernel/io/acpi.c +++ b/kaleid/kernel/io/acpi.c @@ -28,9 +28,6 @@ #include #include -SDTHeader *AcpiSDT = NULL; -SDTHeader *AcpiFADT = NULL; - char IoACPIVersion = 1; int tableCount = 1; @@ -94,15 +91,7 @@ static inline RSDPDescriptor *IoFindRSDP() (ulong)rsdp < (ulong)0x0009FFFF; // EBDA end rsdp++) { - if (rsdp[0] == 'R' && - rsdp[1] == 'S' && - rsdp[2] == 'D' && - rsdp[3] == ' ' && - rsdp[4] == 'P' && - rsdp[5] == 'T' && - rsdp[6] == 'R' && - rsdp[7] == ' ' - ) { + if (!strncmp(rsdp, "RSD PTR", 6)) { return (RSDPDescriptor *)rsdp; } } @@ -112,15 +101,7 @@ static inline RSDPDescriptor *IoFindRSDP() (ulong)rsdp < (ulong)0x000FFFFF; // BDA end rsdp++) { - if (rsdp[0] == 'R' && - rsdp[1] == 'S' && - rsdp[2] == 'D' && - rsdp[3] == ' ' && - rsdp[4] == 'P' && - rsdp[5] == 'T' && - rsdp[6] == 'R' && - rsdp[7] == ' ' - ) { + if (!strncmp(rsdp, "RSD PTR", 6)) { return (RSDPDescriptor *)rsdp; } } @@ -156,10 +137,10 @@ static inline void IoInitRSDP(void) rsdp->legacy.OEMID ); - AcpiSDT = (void *)(ulong)rsdp->legacy.rsdtAddress; + SDTDirectory[SDT_RSDT] = (void *)(ulong)rsdp->legacy.rsdtAddress; if (rsdp->legacy.revision) { - AcpiSDT = (void *)rsdp->xsdtAddress; + SDTDirectory[SDT_XSDT] = (void *)rsdp->xsdtAddress; IoACPIVersion = 2; } } @@ -171,7 +152,11 @@ static inline void IoInitRXSDT(void) { char checksum = 1; - SDTHeader *rxsdt = AcpiSDT; + SDTHeader *rxsdt = SDTDirectory[SDT_RSDT]; + + if (IoACPIVersion == 2) { + rxsdt = SDTDirectory[SDT_XSDT]; + } /* // Checksum calculation */ checksum = DoChecksum(rxsdt, (size_t)rxsdt->length, @@ -204,7 +189,7 @@ static inline void IoInitRXSDT(void) // static inline void IoSearchAcpiTables(void) { - SDTHeader *xrsdt = AcpiSDT; + SDTHeader *xrsdt = SDTDirectory[SDT_RSDT]; SDTHeader *table = NULL; uint *curInt = NULL; ulong *curLong = NULL; @@ -214,6 +199,7 @@ static inline void IoSearchAcpiTables(void) if (IoACPIVersion == 1) { entries = (xrsdt->length - sizeof(xrsdt)) / 4; } else { + xrsdt = SDTDirectory[SDT_XSDT]; entries = (xrsdt->length - sizeof(xrsdt)) / 8; }