Commit Graph

26 Commits

Author SHA1 Message Date
Star Zeng 01267e224b MdeModulePkg AcpiTableDxe: Install config table at ACPI data change
UEFI spec has clear description below:

Configuration Table Groups
The GUID for a configuration table also defines a corresponding event group GUID with the same value.
If the data represented by a configuration table is changed,
InstallConfigurationTable() should be called.
When InstallConfigurationTable() is called, the corresponding event is signaled.
When this event is signaled,
any components that cache information from the configuration table can optionally update their cached state.
For example, EFI_ACPI_TABLE_GUID defines a configuration table for ACPI data.
When ACPI data is changed, InstallConfigurationTable() is called.
During the execution of InstallConfigurationTable(),
a corresponding event group with EFI_ACPI_TABLE_GUID is signaled,
allowing an application to invalidate any cached ACPI data.

But current implementation only InstallConfigurationTable() at first time ACPI data change.
  if (((Version & EFI_ACPI_TABLE_VERSION_1_0B) != 0) &&
      !AcpiTableInstance->TablesInstalled1) {
    Status = gBS->InstallConfigurationTable (&gEfiAcpi10TableGuid, AcpiTableInstance->Rsdp1);
    if (EFI_ERROR (Status)) {
      return EFI_ABORTED;
    }

    AcpiTableInstance->TablesInstalled1 = TRUE;
  }

  if (((Version & ACPI_TABLE_VERSION_GTE_2_0) != 0) &&
      !AcpiTableInstance->TablesInstalled3) {
    Status = gBS->InstallConfigurationTable (&gEfiAcpiTableGuid, AcpiTableInstance->Rsdp3);
    if (EFI_ERROR (Status)) {
      return EFI_ABORTED;
    }

    AcpiTableInstance->TablesInstalled3= TRUE;
  }

The AcpiTableInstance->TablesInstalled1 and AcpiTableInstance->TablesInstalled3 conditional judgment need to be removed.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Star Zeng <star.zeng@intel.com>
Reviewed-by: Jiewen Yao <jiewen.yao@intel.com>

git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17885 6f19259b-4bc3-4df7-8a09-765794883524
2015-07-08 09:44:46 +00:00
Star Zeng de4db4da31 MdeModulePkg AcpiTableDxe: Non-Boolean comparisons should use a compare operator.
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Star Zeng <star.zeng@intel.com>
Reviewed-by: Shumin Qiu <shumin.qiu@intel.com>

git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17675 6f19259b-4bc3-4df7-8a09-765794883524
2015-06-19 12:11:01 +00:00
Star Zeng f0071740ec MdeModulePkg AcpiTableDxe: Cover EFI_ACPI_TABLE_VERSION_5_0.
Follow PI 1.4 spec,
1. Cover EFI_ACPI_TABLE_VERSION_5_0.
2. Update TableKey parameter description in the
EFI_ACPI_SDT_PROTOCOL.GetAcpiTable() section.
3. Update EFI_ACPI_SDT_PROTOCOL.GetAcpiTable() description.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Star Zeng <star.zeng@intel.com>
Reviewed-by: Jiewen Yao <jiewen.yao@intel.com>

git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17649 6f19259b-4bc3-4df7-8a09-765794883524
2015-06-17 02:51:47 +00:00
Laszlo Ersek f798e8bff7 MdeModulePkg: Acpi: enforce exclusion between FirmwareCtrl and XFirmwareCtrl
The code in AcpiTableDxe handles the installation of FADT and FACS in both
possible orders. In the [FADT, FACS] installation order, the FACS is at
once linked into the FADT. In the [FACS, FADT] installation order, the
FACS is stashed temporarily, and it is linked into the FADT when the FADT
is installed later.

According to the ACPI specification, *at most one* of FADT.FirmwareCtrl
and FADT.XFirmwareCtrl may be nonzero. The code is aware of this
requirement, and it never sets both of them to nonzero values at once.

However, the code doesn't expect the following:

- The caller first installs the FACS, which is stashed. The address that
  is saved happens to fall below 4GB.

- The caller then installs a FADT, with a zero FirmwareCtrl field, and a
  nonzero (pre-populated) XFirmwareCtrl field.

In this case the code sets FADT.FirmwareCtrl to the less-than-4GB address
of the stashed FACS, and leaves the different nonzero value in
FADT.XFirmwareCtrl. This violates the ACPI specification.

Prevent this by always zeroing the field that we do *not* set.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
Reviewed-by: Jiewen Yao <Jiewen.Yao@intel.com>

git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16659 6f19259b-4bc3-4df7-8a09-765794883524
2015-01-26 08:05:04 +00:00
Star Zeng 5966402ed5 MdeModulePkg/IntelFrameworkModulePkg ACPI: Follow the new UEFI 2.4a spec to return EFI_ACCESS_DENIED for duplicated FADT, FACS or DSDT installation.
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Star Zeng <star.zeng@intel.com>
Reviewed-by: Jiewen Yao <jiewen.yao@intel.com>

git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15496 6f19259b-4bc3-4df7-8a09-765794883524
2014-05-06 02:11:23 +00:00
Star Zeng e84f07b5fc Create PCDs in MdeModulePkg for ACPI table OEM_ID/OEM_TABLE_ID/OEM_REVISION/CREATOR_ID/CREATOR_REVISION customization.
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Star Zeng <star.zeng@intel.com>
Reviewed-by: Jiewen Yao <jiewen.yao@intel.com>

git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@14672 6f19259b-4bc3-4df7-8a09-765794883524
2013-09-16 02:20:52 +00:00
jyao1 10342a643f Fix build error.
ACPI4.0/5.0 have clear description:
FIRMWARE_CTRL: If the X_FIRMWARE_CTRL field contains a non zero value then this field must be zero.
X_FIRMWARE_CTRL: This field is used when the physical address of the FACS is above 4GB. If the FIRMWARE_CTRL field contains a non zero value then this field must be zero.

Update code in AcpiSupport/AcpiTable when it produces this field to set one only.
Update code in AcpiS3Save when it consumes this field, check 0 value.


Signed-off-by: jiewen.yao@intel.com
Reviewed-by: star.zeng@intel.com

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13981 6f19259b-4bc3-4df7-8a09-765794883524
2012-12-03 01:06:28 +00:00
jyao1 c93776c2d4 ACPI4.0/5.0 have clear description:
FIRMWARE_CTRL: If the X_FIRMWARE_CTRL field contains a non zero value then this field must be zero.
X_FIRMWARE_CTRL: This field is used when the physical address of the FACS is above 4GB. If the FIRMWARE_CTRL field contains a non zero value then this field must be zero.

Update code in AcpiSupport/AcpiTable when it produces this field to set one only.
Update code in AcpiS3Save when it consumes this field, check 0 value.


Signed-off-by: jiewen.yao@intel.com
Reviewed-by: star.zeng@intel.com

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13980 6f19259b-4bc3-4df7-8a09-765794883524
2012-11-30 09:03:15 +00:00
jyao1 71824dd8db InstallAcpiTable() - Do not update the checksum in the passed in buffer – the buffer is an IN buffer and should be treated as such.
signed-off-by: jyao1
reviewed-by: rsun3

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12869 6f19259b-4bc3-4df7-8a09-765794883524
2011-12-15 05:34:57 +00:00
erictian db0f0d3c79 Remove CONST modifier to be spec compliance
Signed-off-by: erictian
Reviewed-by: lgao4

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12194 6f19259b-4bc3-4df7-8a09-765794883524
2011-08-24 09:38:10 +00:00
lgao4 37abfb7ea1 Fix the bug in AcpiTableDxe drivers that doesn't work when more than 20 Acpi tables are installed.
Signed-off-by: lgao4
Signed-off-by: jljusten
Reviewed-by: jyao1


git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12112 6f19259b-4bc3-4df7-8a09-765794883524
2011-08-09 08:46:04 +00:00
jyao1 36d58153b1 UEFI table also need to be in ACPI NVS memory, because some data field
could be updated by OS present agent. For example, BufferPtrAddress in
SMM communication ACPI table.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11303 6f19259b-4bc3-4df7-8a09-765794883524
2011-02-11 06:40:20 +00:00
jyao1 4196f91ec0 Enhance to follow UEFI2.3 spec - the EFI_ACPI_TABLE_PROTOCOL will ensure that the checksum field is correct for both the RSDT/XSDT table and the table being installed through the AcpiTableBuffer parameter.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10655 6f19259b-4bc3-4df7-8a09-765794883524
2010-07-16 04:31:02 +00:00
jyao1 3dc8585e0a MdeModulePkg:
Add ACPI SDT support. Introduce PcdInstallAcpiSdtProtocol, default FALSE.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10501 6f19259b-4bc3-4df7-8a09-765794883524
2010-05-18 02:26:49 +00:00
rsun3 f0c855b263 Small code refinement in MdeModulePkg.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10492 6f19259b-4bc3-4df7-8a09-765794883524
2010-05-17 08:32:05 +00:00
jchen20 2432c68578 Fix for UNIXGCC build
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10483 6f19259b-4bc3-4df7-8a09-765794883524
2010-05-12 03:12:57 +00:00
jchen20 da935a5c97 Add fix for the hardcoded Max ACPI table number. With this fix, the number of ACPI table has no limitations by dynamical allocation
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10480 6f19259b-4bc3-4df7-8a09-765794883524
2010-05-11 08:46:12 +00:00
hhtian e5eed7d364 Update the copyright notice format
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10418 6f19259b-4bc3-4df7-8a09-765794883524
2010-04-24 09:33:45 +00:00
jljusten a495774f69 Remove svn:executable on *.c, *.h, *.asm, *.S, *.inf and *.asl*
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10087 6f19259b-4bc3-4df7-8a09-765794883524
2010-02-25 18:17:41 +00:00
jljusten b474ed4944 MdeModulePkg AcpiTableDxe: Fix compiler warning
This warning was seen with the UNIXGCC toolchain on X64
when using the 'MDEPKG_NDEBUG' macro.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9670 6f19259b-4bc3-4df7-8a09-765794883524
2010-01-04 16:17:55 +00:00
eric_tian 0f8e582fad roll back r8590 patch
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8652 6f19259b-4bc3-4df7-8a09-765794883524
2009-06-25 02:07:10 +00:00
eric_tian 2fd3009fb2 add assertion to ensure ACPI table is checksumed.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8650 6f19259b-4bc3-4df7-8a09-765794883524
2009-06-24 09:44:32 +00:00
eric_tian 432bdae1f5 the checksum must to be updated when install a new table into ACPI table
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8590 6f19259b-4bc3-4df7-8a09-765794883524
2009-06-18 01:31:05 +00:00
vanjeff 6198c34621 fixed 2 k8 issues.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8204 6f19259b-4bc3-4df7-8a09-765794883524
2009-04-29 08:57:19 +00:00
xli24 46a989f7ad Add support of ACPI Table Version 3.0 in implementation of EFI_ACPI_TABLE_PROTOCOL APIs.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8125 6f19259b-4bc3-4df7-8a09-765794883524
2009-04-17 08:46:05 +00:00
jljusten 5f55c70046 Add ACPI drivers:
* Universal/Acpi/AcpiTableDxe
  Implementation of EFI_ACPI_TABLE_PROTOCOL
  (MdePkg/Include/Protocol/AcpiTable.h)
* Universal/Acpi/AcpiPlatformDxe
  Sample "ACPI Platform Driver" which populates the
  system ACPI tables by reading them from an
  FFS file and using EFI_ACPI_TABLE_PROTOCOL
  to make them available to the system.


git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@7917 6f19259b-4bc3-4df7-8a09-765794883524
2009-03-20 20:58:47 +00:00