Fixed up ACPI Version 1.0 checksum validation code
This commit is contained in:
@ -1,5 +1,6 @@
|
||||
#include "acpi.h"
|
||||
RSDPDescriptor* ACPI::rsd_ptr;
|
||||
RSCPDescriptor20* ACPI::rsd2_ptr;
|
||||
RSDT* ACPI::rsd_table;
|
||||
|
||||
|
||||
@ -8,19 +9,34 @@ void ACPI::initialize(){
|
||||
|
||||
// Find the Root System Description Pointer
|
||||
ACPI::rsd_ptr = FindRSD();
|
||||
printf("RSD address: 0x%x\n", ACPI::rsd_ptr);
|
||||
//printRSD(rsd_ptr);
|
||||
|
||||
// is it valid
|
||||
int sum = 0;
|
||||
for (int i =0; i < 20 ; i++) {
|
||||
sum += ((char*)rsd_ptr)[i];
|
||||
|
||||
if( rsd_ptr->Revision == 0 ){
|
||||
// Using veriosn 1.0 of the ACPI specifiction
|
||||
int sum = rsd_ptr->Checksum;
|
||||
for (int i =0; i < sizeof(RSDPDescriptor) ; i++) {
|
||||
sum += ((char*)rsd_ptr)[i];
|
||||
}
|
||||
|
||||
printf(" 0x%x sum\n", sum);
|
||||
if(sum & 0xfff0)
|
||||
printf("valid rsd!\n");
|
||||
else
|
||||
printf("invalid rsd\n");
|
||||
|
||||
|
||||
// Get the Root System Description Table NOTE: might need memory mapping
|
||||
//RSDT* rootSystemDescriptionTable = (RSDT*) (rsd_ptr->RsdtAddress + 0xC0000000);
|
||||
} else{
|
||||
// parse it as of version2.0
|
||||
ACPI::rsd2_ptr = (RSCPDescriptor20*)rsd_ptr;
|
||||
}
|
||||
|
||||
printf(" 0x%x sum\n", sum);
|
||||
return;
|
||||
|
||||
// Get the Root System Description Table
|
||||
RSDT* rootSystemDescriptionTable = getRSDT((RSDPDescriptor *) rsd_ptr);
|
||||
|
||||
/*
|
||||
auto tableHeader = &rootSystemDescriptionTable->h;
|
||||
|
||||
// do checksum
|
||||
@ -31,5 +47,5 @@ void ACPI::initialize(){
|
||||
}
|
||||
|
||||
if( sum != 0)
|
||||
printf("Table invalid!");
|
||||
printf("Table invalid!");*/
|
||||
}
|
||||
Reference in New Issue
Block a user