summaryrefslogtreecommitdiffstats
path: root/compiler/dttable.c
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/dttable.c')
-rw-r--r--compiler/dttable.c20
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);
OpenPOWER on IntegriCloud