summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Moore <Robert.Moore@intel.com>2016-11-17 08:03:51 -0800
committerRobert Moore <Robert.Moore@intel.com>2016-11-17 08:03:51 -0800
commit040740976de77c2ccdae15604434aa3f1ae52f91 (patch)
tree45e6c7143949e8d773174ce5e6200872069433bb
parentfd0b3e1b86a7ba524525b2e04df826d0aa71383d (diff)
downloadacpica-040740976de77c2ccdae15604434aa3f1ae52f91.tar.gz
Revert "FADT support cleanup"
This reverts commit 34ccd43af3fd1870fddfac0617dd0ba706963558. This is an attempt to remove all references in the source to the FADT version 2, which never was a legal version number. It was skipped because it was an early version of 64-bit support that was eventually abandoned for the current 64-bit support. Appears to have caused problems on some machines. Another attempt at this will be made later.
-rw-r--r--source/common/dmtbdump.c184
-rw-r--r--source/common/dmtbinfo.c28
-rw-r--r--source/compiler/dttable.c70
-rw-r--r--source/components/tables/tbfadt.c10
-rw-r--r--source/include/acdisasm.h5
-rw-r--r--source/include/actbl.h164
6 files changed, 242 insertions, 219 deletions
diff --git a/source/common/dmtbdump.c b/source/common/dmtbdump.c
index fe4ce2fd3..ae4827656 100644
--- a/source/common/dmtbdump.c
+++ b/source/common/dmtbdump.c
@@ -124,31 +124,12 @@
ACPI_MODULE_NAME ("dmtbdump")
-/* Table of revision-dependent FADT sizes */
+/* Local prototypes */
-static const UINT32 FadtRevisionLength [ACPI_FADT_MAX_VERSION + 1] =
-{
- 0, /* 0 - illegal */
- ACPI_FADT_V1_SIZE, /* 1 - ACPI 1.0 */
- 0, /* 2 - illegal */
- ACPI_FADT_V3_SIZE, /* 3 - ACPI 2.0 */
- ACPI_FADT_V4_SIZE, /* 4 - ACPI 3.0 and ACPI 4.0 */
- ACPI_FADT_V5_SIZE, /* 5 - ACPI 5.0 */
- ACPI_FADT_V6_SIZE /* 6 - ACPI 6.0 */
-};
-
-/* Table of revision-dependent FADT info tables */
-
-ACPI_DMTABLE_INFO *FadtRevisionInfo [ACPI_FADT_MAX_VERSION + 1] =
-{
- NULL, /* 0 - illegal */
- AcpiDmTableInfoFadt1, /* 1 - ACPI 1.0 */
- NULL, /* 2 - illegal */
- AcpiDmTableInfoFadt3, /* 3 - ACPI 2.0 */
- AcpiDmTableInfoFadt4, /* 4 - ACPI 3.0 and ACPI 4.0 */
- AcpiDmTableInfoFadt5, /* 5 - ACPI 5.0 */
- AcpiDmTableInfoFadt6 /* 6 - ACPI 6.0 */
-};
+static void
+AcpiDmValidateFadtLength (
+ UINT32 Revision,
+ UINT32 Length);
/*******************************************************************************
@@ -438,11 +419,6 @@ AcpiDmDumpXsdt (
*
* DESCRIPTION: Format the contents of a FADT
*
- * Check the FADT revision against the expected table length for
- * that revision. Issue a warning if the length is not what was
- * expected. This seems to be such a common BIOS bug that the
- * FADT revision has been rendered virtually meaningless.
- *
* NOTE: We cannot depend on the FADT version to indicate the actual
* contents of the FADT because of BIOS bugs. The table length
* is the only reliable indicator.
@@ -454,72 +430,142 @@ AcpiDmDumpFadt (
ACPI_TABLE_HEADER *Table)
{
ACPI_STATUS Status;
- UINT8 FadtRevision;
- UINT32 ExpectedLength;
- UINT32 i;
-
- FadtRevision = Table->Revision;
- /* FADT revision/length validation */
+ /* Always dump the minimum FADT revision 1 fields (ACPI 1.0) */
- if ((FadtRevision == 0) ||
- (FadtRevision == 2))
+ Status = AcpiDmDumpTable (Table->Length, 0, Table, 0,
+ AcpiDmTableInfoFadt1);
+ if (ACPI_FAILURE (Status))
{
- AcpiOsPrintf (
- "// ACPI Warning: Invalid or unsupported FADT revision: %u\n",
- FadtRevision);
return;
}
- if (FadtRevision > ACPI_FADT_MAX_VERSION)
- {
- AcpiOsPrintf ("// ACPI Warning: Revision %u is not fully supported, "
- "disassembling known fields (up to revision %u)\n\n",
- FadtRevision, ACPI_FADT_MAX_VERSION);
- }
- else
+ /* Check for FADT revision 2 fields (ACPI 1.0B MS extensions) */
+
+ if ((Table->Length > ACPI_FADT_V1_SIZE) &&
+ (Table->Length <= ACPI_FADT_V2_SIZE))
{
- ExpectedLength = FadtRevisionLength[FadtRevision];
- if (Table->Length != ExpectedLength)
+ Status = AcpiDmDumpTable (Table->Length, 0, Table, 0,
+ AcpiDmTableInfoFadt2);
+ if (ACPI_FAILURE (Status))
{
- AcpiOsPrintf (
- "// ACPI Warning: Input FADT revision %X does not match "
- "expected length: found 0x%X expected 0x%X\n",
- FadtRevision, Table->Length, ExpectedLength);
+ return;
}
}
- /*
- * Dump the input table on a per-version basis, but is actually
- * based upon the length of the table. Table length must
- * be larger than the required length of the previous version.
- */
- for (i = 1; i <= ACPI_FADT_MAX_VERSION; i++)
+ /* Check for FADT revision 3/4 fields and up (ACPI 2.0+ extended data) */
+
+ else if (Table->Length > ACPI_FADT_V2_SIZE)
{
- if (!FadtRevisionLength[i]) /* Skip any empty slots */
+ Status = AcpiDmDumpTable (Table->Length, 0, Table, 0,
+ AcpiDmTableInfoFadt3);
+ if (ACPI_FAILURE (Status))
{
- continue;
+ return;
}
- /* Dump the fields specific to FADT revision[i] */
+ /* Check for FADT revision 5 fields and up (ACPI 5.0+) */
- Status = AcpiDmDumpTable (Table->Length, 0, Table, 0,
- FadtRevisionInfo[i]);
- if (ACPI_FAILURE (Status))
+ if (Table->Length > ACPI_FADT_V3_SIZE)
{
- return;
+ Status = AcpiDmDumpTable (Table->Length, 0, Table, 0,
+ AcpiDmTableInfoFadt5);
+ if (ACPI_FAILURE (Status))
+ {
+ return;
+ }
}
- if (Table->Length <= FadtRevisionLength[i])
+ /* Check for FADT revision 6 fields and up (ACPI 6.0+) */
+
+ if (Table->Length > ACPI_FADT_V3_SIZE)
{
- break; /* End of table */
+ Status = AcpiDmDumpTable (Table->Length, 0, Table, 0,
+ AcpiDmTableInfoFadt6);
+ if (ACPI_FAILURE (Status))
+ {
+ return;
+ }
}
}
- /* Build a local FADT to test some FADT values */
+ /* Validate various fields in the FADT, including length */
AcpiTbCreateLocalFadt (Table, Table->Length);
+
+ /* Validate FADT length against the revision */
+
+ AcpiDmValidateFadtLength (Table->Revision, Table->Length);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDmValidateFadtLength
+ *
+ * PARAMETERS: Revision - FADT revision (Header->Revision)
+ * Length - FADT length (Header->Length
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Check the FADT revision against the expected table length for
+ * that revision. Issue a warning if the length is not what was
+ * expected. This seems to be such a common BIOS bug that the
+ * FADT revision has been rendered virtually meaningless.
+ *
+ ******************************************************************************/
+
+static void
+AcpiDmValidateFadtLength (
+ UINT32 Revision,
+ UINT32 Length)
+{
+ UINT32 ExpectedLength;
+
+
+ switch (Revision)
+ {
+ case 0:
+
+ AcpiOsPrintf ("// ACPI Warning: Invalid FADT revision: 0\n");
+ return;
+
+ case 1:
+
+ ExpectedLength = ACPI_FADT_V1_SIZE;
+ break;
+
+ case 2:
+
+ ExpectedLength = ACPI_FADT_V2_SIZE;
+ break;
+
+ case 3:
+ case 4:
+
+ ExpectedLength = ACPI_FADT_V3_SIZE;
+ break;
+
+ case 5:
+
+ ExpectedLength = ACPI_FADT_V5_SIZE;
+ break;
+
+ default:
+
+ return;
+ }
+
+ if (Length == ExpectedLength)
+ {
+ return;
+ }
+
+ AcpiOsPrintf (
+ "\n// ACPI Warning: FADT revision %X does not match length: "
+ "found %X expected %X\n",
+ Revision, Length, ExpectedLength);
}
diff --git a/source/common/dmtbinfo.c b/source/common/dmtbinfo.c
index e92072437..522ed00e4 100644
--- a/source/common/dmtbinfo.c
+++ b/source/common/dmtbinfo.c
@@ -472,7 +472,7 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoFacs[] =
*
******************************************************************************/
-/* FADT version 1 (ACPI 1.0) */
+/* ACPI 1.0 FADT (Version 1) */
ACPI_DMTABLE_INFO AcpiDmTableInfoFadt1[] =
{
@@ -558,7 +558,18 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoFadt1[] =
ACPI_DMT_TERMINATOR
};
-/* FADT version 3 (ACPI 2.0) */
+/* ACPI 1.0 MS Extensions (FADT version 2) */
+
+ACPI_DMTABLE_INFO AcpiDmTableInfoFadt2[] =
+{
+ {ACPI_DMT_GAS, ACPI_FADT_OFFSET (ResetRegister), "Reset Register", 0},
+ {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (ResetValue), "Value to cause reset", 0},
+ {ACPI_DMT_UINT16, ACPI_FADT_OFFSET (ArmBootFlags), "Reserved", 0},
+ {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (MinorRevision), "Reserved", 0},
+ ACPI_DMT_TERMINATOR
+};
+
+/* ACPI 2.0+ Extensions (FADT version 3, 4, and 5) */
ACPI_DMTABLE_INFO AcpiDmTableInfoFadt3[] =
{
@@ -582,23 +593,16 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoFadt3[] =
ACPI_DMT_TERMINATOR
};
-/* FADT version 4 (ACPI 3.0 and ACPI 4.0) */
-
-ACPI_DMTABLE_INFO AcpiDmTableInfoFadt4[] =
-{
- {ACPI_DMT_GAS, ACPI_FADT_OFFSET (SleepControl), "Sleep Control Register", 0},
- ACPI_DMT_TERMINATOR
-};
-
-/* FADT version 5 (ACPI 5.0) */
+/* ACPI 5.0 Extensions (FADT version 5) */
ACPI_DMTABLE_INFO AcpiDmTableInfoFadt5[] =
{
+ {ACPI_DMT_GAS, ACPI_FADT_OFFSET (SleepControl), "Sleep Control Register", 0},
{ACPI_DMT_GAS, ACPI_FADT_OFFSET (SleepStatus), "Sleep Status Register", 0},
ACPI_DMT_TERMINATOR
};
-/* FADT version 6 (ACPI 6.0) */
+/* ACPI 6.0 Extensions (FADT version 6) */
ACPI_DMTABLE_INFO AcpiDmTableInfoFadt6[] =
{
diff --git a/source/compiler/dttable.c b/source/compiler/dttable.c
index ee3d26d59..561c5ce15 100644
--- a/source/compiler/dttable.c
+++ b/source/compiler/dttable.c
@@ -201,12 +201,9 @@ DtCompileFadt (
DT_SUBTABLE *ParentTable;
DT_FIELD **PFieldList = (DT_FIELD **) List;
ACPI_TABLE_HEADER *Table;
- UINT8 FadtRevision;
- UINT32 i;
+ UINT8 Revision;
- /* Minimum table is the FADT version 1 (ACPI 1.0) */
-
Status = DtCompileTable (PFieldList, AcpiDmTableInfoFadt1,
&Subtable, TRUE);
if (ACPI_FAILURE (Status))
@@ -218,41 +215,22 @@ DtCompileFadt (
DtInsertSubtable (ParentTable, Subtable);
Table = ACPI_CAST_PTR (ACPI_TABLE_HEADER, ParentTable->Buffer);
- FadtRevision = Table->Revision;
-
- /* Revision 0 and 2 are illegal */
-
- if ((FadtRevision == 0) ||
- (FadtRevision == 2))
- {
- DtError (ASL_ERROR, 0, NULL,
- "Invalid value for FADT revision");
-
- return (AE_BAD_VALUE);
- }
-
- /* Revision out of supported range? */
+ Revision = Table->Revision;
- if (FadtRevision > ACPI_FADT_MAX_VERSION)
+ if (Revision == 2)
{
- DtError (ASL_ERROR, 0, NULL,
- "Unknown or unsupported value for FADT revision");
-
- return (AE_BAD_VALUE);
- }
-
- /* Compile individual sub-parts of the FADT, per-revision */
-
- for (i = 3; i <= ACPI_FADT_MAX_VERSION; i++)
- {
- if (i > FadtRevision)
+ Status = DtCompileTable (PFieldList, AcpiDmTableInfoFadt2,
+ &Subtable, TRUE);
+ if (ACPI_FAILURE (Status))
{
- break;
+ return (Status);
}
- /* Compile the fields specific to this FADT revision */
-
- Status = DtCompileTable (PFieldList, FadtRevisionInfo[i],
+ DtInsertSubtable (ParentTable, Subtable);
+ }
+ else if (Revision >= 2)
+ {
+ Status = DtCompileTable (PFieldList, AcpiDmTableInfoFadt3,
&Subtable, TRUE);
if (ACPI_FAILURE (Status))
{
@@ -260,6 +238,30 @@ DtCompileFadt (
}
DtInsertSubtable (ParentTable, Subtable);
+
+ if (Revision >= 5)
+ {
+ Status = DtCompileTable (PFieldList, AcpiDmTableInfoFadt5,
+ &Subtable, TRUE);
+ if (ACPI_FAILURE (Status))
+ {
+ return (Status);
+ }
+
+ DtInsertSubtable (ParentTable, Subtable);
+ }
+
+ if (Revision >= 6)
+ {
+ Status = DtCompileTable (PFieldList, AcpiDmTableInfoFadt6,
+ &Subtable, TRUE);
+ if (ACPI_FAILURE (Status))
+ {
+ return (Status);
+ }
+
+ DtInsertSubtable (ParentTable, Subtable);
+ }
}
return (AE_OK);
diff --git a/source/components/tables/tbfadt.c b/source/components/tables/tbfadt.c
index 4085db300..f3b6c1cd3 100644
--- a/source/components/tables/tbfadt.c
+++ b/source/components/tables/tbfadt.c
@@ -595,19 +595,17 @@ AcpiTbConvertFadt (
/*
- * For ACPI 1.0 FADTs (revision 1), ensure that reserved fields which
+ * For ACPI 1.0 FADTs (revision 1 or 2), ensure that reserved fields which
* should be zero are indeed zero. This will workaround BIOSs that
* inadvertently place values in these fields.
*
* The ACPI 1.0 reserved fields that will be zeroed are the bytes located
* at offset 45, 55, 95, and the word located at offset 109, 110.
*
- * Note: The FADT revision value is unreliable because of BIOS errors.
- * The table length is instead used as the final word on the version.
- *
- * Note: FADT revision 3 is the ACPI 2.0 version of the FADT.
+ * Note: The FADT revision value is unreliable. Only the length can be
+ * trusted.
*/
- if (AcpiGbl_FADT.Header.Length <= ACPI_FADT_V3_SIZE)
+ if (AcpiGbl_FADT.Header.Length <= ACPI_FADT_V2_SIZE)
{
AcpiGbl_FADT.PreferredProfile = 0;
AcpiGbl_FADT.PstateControl = 0;
diff --git a/source/include/acdisasm.h b/source/include/acdisasm.h
index 640ecf532..9c01d88bd 100644
--- a/source/include/acdisasm.h
+++ b/source/include/acdisasm.h
@@ -352,8 +352,8 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoErst[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoErst0[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoFacs[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoFadt1[];
+extern ACPI_DMTABLE_INFO AcpiDmTableInfoFadt2[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoFadt3[];
-extern ACPI_DMTABLE_INFO AcpiDmTableInfoFadt4[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoFadt5[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoFadt6[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoFpdt[];
@@ -497,9 +497,6 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoXenv[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoGeneric[][2];
-extern ACPI_DMTABLE_INFO *FadtRevisionInfo [ACPI_FADT_MAX_VERSION + 1];
-
-
/*
* dmtable and ahtable
*/
diff --git a/source/include/actbl.h b/source/include/actbl.h
index 73415fc40..4d7fd8afa 100644
--- a/source/include/actbl.h
+++ b/source/include/actbl.h
@@ -328,72 +328,62 @@ typedef struct acpi_table_facs
typedef struct acpi_table_fadt
{
- ACPI_TABLE_HEADER Header; /* [V1] Common ACPI table header */
- UINT32 Facs; /* [V1] 32-bit physical address of FACS */
- UINT32 Dsdt; /* [V1] 32-bit physical address of DSDT */
- UINT8 Model; /* [V1] System Interrupt Model (ACPI 1.0) - not used in ACPI 2.0+ */
- UINT8 PreferredProfile; /* [V1] Conveys preferred power management profile to OSPM. */
- UINT16 SciInterrupt; /* [V1] System vector of SCI interrupt */
- UINT32 SmiCommand; /* [V1] 32-bit Port address of SMI command port */
- UINT8 AcpiEnable; /* [V1] Value to write to SMI_CMD to enable ACPI */
- UINT8 AcpiDisable; /* [V1] Value to write to SMI_CMD to disable ACPI */
- UINT8 S4BiosRequest; /* [V1] Value to write to SMI_CMD to enter S4BIOS state */
- UINT8 PstateControl; /* [V1] Processor performance state control*/
- UINT32 Pm1aEventBlock; /* [V1] 32-bit port address of Power Mgt 1a Event Reg Blk */
- UINT32 Pm1bEventBlock; /* [V1] 32-bit port address of Power Mgt 1b Event Reg Blk */
- UINT32 Pm1aControlBlock; /* [V1] 32-bit port address of Power Mgt 1a Control Reg Blk */
- UINT32 Pm1bControlBlock; /* [V1] 32-bit port address of Power Mgt 1b Control Reg Blk */
- UINT32 Pm2ControlBlock; /* [V1] 32-bit port address of Power Mgt 2 Control Reg Blk */
- UINT32 PmTimerBlock; /* [V1] 32-bit port address of Power Mgt Timer Ctrl Reg Blk */
- UINT32 Gpe0Block; /* [V1] 32-bit port address of General Purpose Event 0 Reg Blk */
- UINT32 Gpe1Block; /* [V1] 32-bit port address of General Purpose Event 1 Reg Blk */
- UINT8 Pm1EventLength; /* [V1] Byte Length of ports at Pm1xEventBlock */
- UINT8 Pm1ControlLength; /* [V1] Byte Length of ports at Pm1xControlBlock */
- UINT8 Pm2ControlLength; /* [V1] Byte Length of ports at Pm2ControlBlock */
- UINT8 PmTimerLength; /* [V1] Byte Length of ports at PmTimerBlock */
- UINT8 Gpe0BlockLength; /* [V1] Byte Length of ports at Gpe0Block */
- UINT8 Gpe1BlockLength; /* [V1] Byte Length of ports at Gpe1Block */
- UINT8 Gpe1Base; /* [V1] Offset in GPE number space where GPE1 events start */
- UINT8 CstControl; /* [V1] Support for the _CST object and C-States change notification */
- UINT16 C2Latency; /* [V1] Worst case HW latency to enter/exit C2 state */
- UINT16 C3Latency; /* [V1] Worst case HW latency to enter/exit C3 state */
- UINT16 FlushSize; /* [V1] Processor memory cache line width, in bytes */
- UINT16 FlushStride; /* [V1] Number of flush strides that need to be read */
- UINT8 DutyOffset; /* [V1] Processor duty cycle index in processor P_CNT reg */
- UINT8 DutyWidth; /* [V1] Processor duty cycle value bit width in P_CNT register */
- UINT8 DayAlarm; /* [V1] Index to day-of-month alarm in RTC CMOS RAM */
- UINT8 MonthAlarm; /* [V1] Index to month-of-year alarm in RTC CMOS RAM */
- UINT8 Century; /* [V1] Index to century in RTC CMOS RAM */
- UINT16 BootFlags; /* [V3] IA-PC Boot Architecture Flags (see below for individual flags) */
- UINT8 Reserved; /* [V1] Reserved, must be zero */
- UINT32 Flags; /* [V1] Miscellaneous flag bits (see below for individual flags) */
- /* End of Version 1 FADT fields (ACPI 1.0) */
-
- ACPI_GENERIC_ADDRESS ResetRegister; /* [V3] 64-bit address of the Reset register */
- UINT8 ResetValue; /* [V3] Value to write to the ResetRegister port to reset the system */
- UINT16 ArmBootFlags; /* [V5] ARM-Specific Boot Flags (see below for individual flags) (ACPI 5.1) */
- UINT8 MinorRevision; /* [V5] FADT Minor Revision (ACPI 5.1) */
- UINT64 XFacs; /* [V3] 64-bit physical address of FACS */
- UINT64 XDsdt; /* [V3] 64-bit physical address of DSDT */
- ACPI_GENERIC_ADDRESS XPm1aEventBlock; /* [V3] 64-bit Extended Power Mgt 1a Event Reg Blk address */
- ACPI_GENERIC_ADDRESS XPm1bEventBlock; /* [V3] 64-bit Extended Power Mgt 1b Event Reg Blk address */
- ACPI_GENERIC_ADDRESS XPm1aControlBlock; /* [V3] 64-bit Extended Power Mgt 1a Control Reg Blk address */
- ACPI_GENERIC_ADDRESS XPm1bControlBlock; /* [V3] 64-bit Extended Power Mgt 1b Control Reg Blk address */
- ACPI_GENERIC_ADDRESS XPm2ControlBlock; /* [V3] 64-bit Extended Power Mgt 2 Control Reg Blk address */
- ACPI_GENERIC_ADDRESS XPmTimerBlock; /* [V3] 64-bit Extended Power Mgt Timer Ctrl Reg Blk address */
- ACPI_GENERIC_ADDRESS XGpe0Block; /* [V3] 64-bit Extended General Purpose Event 0 Reg Blk address */
- ACPI_GENERIC_ADDRESS XGpe1Block; /* [V3] 64-bit Extended General Purpose Event 1 Reg Blk address */
- /* End of Version 3 FADT fields (ACPI 2.0) */
-
- ACPI_GENERIC_ADDRESS SleepControl; /* [V4] 64-bit Sleep Control register (ACPI 5.0) */
- /* End of Version 4 FADT fields (ACPI 3.0 and ACPI 4.0) (Field was originally reserved in ACPI 3.0) */
-
- ACPI_GENERIC_ADDRESS SleepStatus; /* [V5] 64-bit Sleep Status register (ACPI 5.0) */
- /* End of Version 5 FADT fields (ACPI 5.0) */
-
- UINT64 HypervisorId; /* [V6] Hypervisor Vendor ID (ACPI 6.0) */
- /* End of Version 6 FADT fields (ACPI 6.0) */
-
+ ACPI_TABLE_HEADER Header; /* Common ACPI table header */
+ UINT32 Facs; /* 32-bit physical address of FACS */
+ UINT32 Dsdt; /* 32-bit physical address of DSDT */
+ UINT8 Model; /* System Interrupt Model (ACPI 1.0) - not used in ACPI 2.0+ */
+ UINT8 PreferredProfile; /* Conveys preferred power management profile to OSPM. */
+ UINT16 SciInterrupt; /* System vector of SCI interrupt */
+ UINT32 SmiCommand; /* 32-bit Port address of SMI command port */
+ UINT8 AcpiEnable; /* Value to write to SMI_CMD to enable ACPI */
+ UINT8 AcpiDisable; /* Value to write to SMI_CMD to disable ACPI */
+ UINT8 S4BiosRequest; /* Value to write to SMI_CMD to enter S4BIOS state */
+ UINT8 PstateControl; /* Processor performance state control*/
+ UINT32 Pm1aEventBlock; /* 32-bit port address of Power Mgt 1a Event Reg Blk */
+ UINT32 Pm1bEventBlock; /* 32-bit port address of Power Mgt 1b Event Reg Blk */
+ UINT32 Pm1aControlBlock; /* 32-bit port address of Power Mgt 1a Control Reg Blk */
+ UINT32 Pm1bControlBlock; /* 32-bit port address of Power Mgt 1b Control Reg Blk */
+ UINT32 Pm2ControlBlock; /* 32-bit port address of Power Mgt 2 Control Reg Blk */
+ UINT32 PmTimerBlock; /* 32-bit port address of Power Mgt Timer Ctrl Reg Blk */
+ UINT32 Gpe0Block; /* 32-bit port address of General Purpose Event 0 Reg Blk */
+ UINT32 Gpe1Block; /* 32-bit port address of General Purpose Event 1 Reg Blk */
+ UINT8 Pm1EventLength; /* Byte Length of ports at Pm1xEventBlock */
+ UINT8 Pm1ControlLength; /* Byte Length of ports at Pm1xControlBlock */
+ UINT8 Pm2ControlLength; /* Byte Length of ports at Pm2ControlBlock */
+ UINT8 PmTimerLength; /* Byte Length of ports at PmTimerBlock */
+ UINT8 Gpe0BlockLength; /* Byte Length of ports at Gpe0Block */
+ UINT8 Gpe1BlockLength; /* Byte Length of ports at Gpe1Block */
+ UINT8 Gpe1Base; /* Offset in GPE number space where GPE1 events start */
+ UINT8 CstControl; /* Support for the _CST object and C-States change notification */
+ UINT16 C2Latency; /* Worst case HW latency to enter/exit C2 state */
+ UINT16 C3Latency; /* Worst case HW latency to enter/exit C3 state */
+ UINT16 FlushSize; /* Processor memory cache line width, in bytes */
+ UINT16 FlushStride; /* Number of flush strides that need to be read */
+ UINT8 DutyOffset; /* Processor duty cycle index in processor P_CNT reg */
+ UINT8 DutyWidth; /* Processor duty cycle value bit width in P_CNT register */
+ UINT8 DayAlarm; /* Index to day-of-month alarm in RTC CMOS RAM */
+ UINT8 MonthAlarm; /* Index to month-of-year alarm in RTC CMOS RAM */
+ UINT8 Century; /* Index to century in RTC CMOS RAM */
+ UINT16 BootFlags; /* IA-PC Boot Architecture Flags (see below for individual flags) */
+ UINT8 Reserved; /* Reserved, must be zero */
+ UINT32 Flags; /* Miscellaneous flag bits (see below for individual flags) */
+ ACPI_GENERIC_ADDRESS ResetRegister; /* 64-bit address of the Reset register */
+ UINT8 ResetValue; /* Value to write to the ResetRegister port to reset the system */
+ UINT16 ArmBootFlags; /* ARM-Specific Boot Flags (see below for individual flags) (ACPI 5.1) */
+ UINT8 MinorRevision; /* FADT Minor Revision (ACPI 5.1) */
+ UINT64 XFacs; /* 64-bit physical address of FACS */
+ UINT64 XDsdt; /* 64-bit physical address of DSDT */
+ ACPI_GENERIC_ADDRESS XPm1aEventBlock; /* 64-bit Extended Power Mgt 1a Event Reg Blk address */
+ ACPI_GENERIC_ADDRESS XPm1bEventBlock; /* 64-bit Extended Power Mgt 1b Event Reg Blk address */
+ ACPI_GENERIC_ADDRESS XPm1aControlBlock; /* 64-bit Extended Power Mgt 1a Control Reg Blk address */
+ ACPI_GENERIC_ADDRESS XPm1bControlBlock; /* 64-bit Extended Power Mgt 1b Control Reg Blk address */
+ ACPI_GENERIC_ADDRESS XPm2ControlBlock; /* 64-bit Extended Power Mgt 2 Control Reg Blk address */
+ ACPI_GENERIC_ADDRESS XPmTimerBlock; /* 64-bit Extended Power Mgt Timer Ctrl Reg Blk address */
+ ACPI_GENERIC_ADDRESS XGpe0Block; /* 64-bit Extended General Purpose Event 0 Reg Blk address */
+ ACPI_GENERIC_ADDRESS XGpe1Block; /* 64-bit Extended General Purpose Event 1 Reg Blk address */
+ ACPI_GENERIC_ADDRESS SleepControl; /* 64-bit Sleep Control register (ACPI 5.0) */
+ ACPI_GENERIC_ADDRESS SleepStatus; /* 64-bit Sleep Status register (ACPI 5.0) */
+ UINT64 HypervisorId; /* Hypervisor Vendor ID (ACPI 6.0) */
} ACPI_TABLE_FADT;
@@ -409,8 +399,8 @@ typedef struct acpi_table_fadt
/* Masks for FADT ARM Boot Architecture Flags (arm_boot_flags) ACPI 5.1 */
-#define ACPI_FADT_PSCI_COMPLIANT (1) /* 00: [V5] PSCI 0.2+ is implemented */
-#define ACPI_FADT_PSCI_USE_HVC (1<<1) /* 01: [V5] HVC must be used instead of SMC as the PSCI conduit */
+#define ACPI_FADT_PSCI_COMPLIANT (1) /* 00: [V5+] PSCI 0.2+ is implemented */
+#define ACPI_FADT_PSCI_USE_HVC (1<<1) /* 01: [V5+] HVC must be used instead of SMC as the PSCI conduit */
/* Masks for FADT flags */
@@ -518,34 +508,20 @@ typedef struct acpi_table_desc
* match the expected length. In other words, the length of the
* FADT is the bottom line as to what the version really is.
*
- * NOTE: There is no officialy released V2 of the FADT. This
- * version was used only for prototyping and testing during the
- * 32-bit to 64-bit transition. V3 was the first official 64-bit
- * version of the FADT.
- *
- * Update this list of defines when a new version of the FADT is
- * added to the ACPI specification. Note that the FADT version is
- * only incremented when new fields are appended to the existing
- * version. Therefore, the FADT version is competely independent
- * from the version of the ACPI specification where it is
- * defined.
- *
- * For reference, the various FADT lengths are as follows:
- * FADT V1 size: 0x074 ACPI 1.0
- * FADT V3 size: 0x0F4 ACPI 2.0
- * FADT V4 size: 0x100 ACPI 3.0 and ACPI 4.0
- * FADT V5 size: 0x10C ACPI 5.0
- * FADT V6 size: 0x114 ACPI 6.0
+ * For reference, the values below are as follows:
+ * FADT V1 size: 0x074
+ * FADT V2 size: 0x084
+ * FADT V3 size: 0x0F4
+ * FADT V4 size: 0x0F4
+ * FADT V5 size: 0x10C
+ * FADT V6 size: 0x114
*/
-#define ACPI_FADT_V1_SIZE (UINT32) (ACPI_FADT_OFFSET (Flags) + 4) /* ACPI 1.0 */
-#define ACPI_FADT_V3_SIZE (UINT32) (ACPI_FADT_OFFSET (SleepControl)) /* ACPI 2.0 */
-#define ACPI_FADT_V4_SIZE (UINT32) (ACPI_FADT_OFFSET (SleepStatus)) /* ACPI 3.0 and ACPI 4.0 */
-#define ACPI_FADT_V5_SIZE (UINT32) (ACPI_FADT_OFFSET (HypervisorId)) /* ACPI 5.0 */
-#define ACPI_FADT_V6_SIZE (UINT32) (sizeof (ACPI_TABLE_FADT)) /* ACPI 6.0 */
-
-/* Update these when new FADT versions are added */
+#define ACPI_FADT_V1_SIZE (UINT32) (ACPI_FADT_OFFSET (Flags) + 4)
+#define ACPI_FADT_V2_SIZE (UINT32) (ACPI_FADT_OFFSET (MinorRevision) + 1)
+#define ACPI_FADT_V3_SIZE (UINT32) (ACPI_FADT_OFFSET (SleepControl))
+#define ACPI_FADT_V5_SIZE (UINT32) (ACPI_FADT_OFFSET (HypervisorId))
+#define ACPI_FADT_V6_SIZE (UINT32) (sizeof (ACPI_TABLE_FADT))
-#define ACPI_FADT_MAX_VERSION 6
#define ACPI_FADT_CONFORMANCE "ACPI 6.1 (FADT version 6)"
#endif /* __ACTBL_H__ */