diff options
author | Jung-uk Kim <jkim@FreeBSD.org> | 2010-07-06 17:18:05 +0000 |
---|---|---|
committer | Jung-uk Kim <jkim@FreeBSD.org> | 2010-07-06 17:18:05 +0000 |
commit | 6d31afa8e3ab79bfa6c97c341af73f4fc093351a (patch) | |
tree | 514e3ade7be23ac83127870abf009b5e5ae1d36f /compiler/dttable.c | |
parent | f2bf96d30fe08965ffd53a28099131ac030e43d5 (diff) |
Import ACPICA 20100702.vendor/acpica/20100702
Notes
Notes:
svn path=/vendor-sys/acpica/dist/; revision=209734
svn path=/vendor-sys/acpica/20100702/; revision=209735; tag=vendor/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 2ab6b9ef6612..863fa23d8437 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); |