diff options
author | jkim <jkim@FreeBSD.org> | 2010-07-06 17:18:05 +0000 |
---|---|---|
committer | jkim <jkim@FreeBSD.org> | 2010-07-06 17:18:05 +0000 |
commit | 9ef1b91c0f59a1a15565c354b3e372ab265c7b5a (patch) | |
tree | 514e3ade7be23ac83127870abf009b5e5ae1d36f /compiler/dttable.c | |
parent | d54ec0eced2867779a0ed7f3c8043be7a3325934 (diff) | |
download | FreeBSD-src-9ef1b91c0f59a1a15565c354b3e372ab265c7b5a.zip FreeBSD-src-9ef1b91c0f59a1a15565c354b3e372ab265c7b5a.tar.gz |
Import ACPICA 20100702.
Diffstat (limited to 'compiler/dttable.c')
-rw-r--r-- | compiler/dttable.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/compiler/dttable.c b/compiler/dttable.c index 2ab6b9e..863fa23 100644 --- a/compiler/dttable.c +++ b/compiler/dttable.c @@ -264,10 +264,13 @@ DtCompileRsdp ( DT_FIELD **PFieldList) { DT_SUBTABLE *Subtable; - ACPI_TABLE_RSDP *Table; + ACPI_TABLE_RSDP *Rsdp; + ACPI_RSDP_EXTENSION *RsdpExtension; ACPI_STATUS Status; + /* Compile the "common" RSDP (ACPI 1.0) */ + Status = DtCompileTable (PFieldList, AcpiDmTableInfoRsdp1, &Gbl_RootTable, TRUE); if (ACPI_FAILURE (Status)) @@ -275,11 +278,13 @@ DtCompileRsdp ( return (Status); } - Table = ACPI_CAST_PTR (ACPI_TABLE_RSDP, Gbl_RootTable->Buffer); - DtSetTableChecksum (&Table->Checksum); + Rsdp = ACPI_CAST_PTR (ACPI_TABLE_RSDP, Gbl_RootTable->Buffer); + DtSetTableChecksum (&Rsdp->Checksum); - if (Table->Revision > 0) + if (Rsdp->Revision > 0) { + /* Compile the "extended" part of the RSDP as a subtable */ + Status = DtCompileTable (PFieldList, AcpiDmTableInfoRsdp2, &Subtable, TRUE); if (ACPI_FAILURE (Status)) @@ -288,7 +293,12 @@ DtCompileRsdp ( } DtInsertSubtable (Gbl_RootTable, Subtable); - DtSetTableChecksum (&Table->ExtendedChecksum); + + /* Set length and extended checksum for entire RSDP */ + + RsdpExtension = ACPI_CAST_PTR (ACPI_RSDP_EXTENSION, Subtable->Buffer); + RsdpExtension->Length = Gbl_RootTable->Length + Subtable->Length; + DtSetTableChecksum (&RsdpExtension->ExtendedChecksum); } return (AE_OK); |