* [edk2-platforms:PATCH v4 0/7] IntelSiliconPkg DxeAslUpdateLib support
@ 2020-04-29 2:31 Miki Shindo
2020-04-29 2:31 ` [edk2-platforms:PATCH v4 1/7] WhiskeylakeOpenBoardPkg/TbtDxe: Removes redundant InitializeAslUpdateLib Miki Shindo
` (7 more replies)
0 siblings, 8 replies; 23+ messages in thread
From: Miki Shindo @ 2020-04-29 2:31 UTC (permalink / raw)
To: devel; +Cc: Sai Chaganty, Chasel Chiu, Nate DeSimone, Prince Agyeman, Ray Ni
Patch 7/7 of this series adds DxeAslUpdateLib support in IntelSiliconPkg
so each project can consume it.
As the existing DxeAslUpdateLib in SiliconPkg have different header files,
this series of patches resolve the inconsistency and avoid build failure.
Also some of unreferenced contents are cleaned up.
Signed-off-by: Miki Shindo <miki.shindo@intel.com>
Cc: Sai Chaganty <rangasai.v.chaganty@intel.com>
Cc: Chasel Chiu <chasel.chiu@intel.com>
Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
Cc: Prince Agyeman <prince.agyeman@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
Acked-by: Chasel Chiu <chasel.chiu@intel.com>
Acked-by: Nate DeSimone <nathaniel.l.desimone@intel.com>
Miki Shindo (7):
WhiskeylakeOpenBoardPkg/TbtDxe: Removes redundant
InitializeAslUpdateLib
KabylakeOpenBoardPkg/TbtDxe: Removes redundant InitializeAslUpdateLib
CometlakeOpenBoardPkg/TbtDxe: Removes redundant InitializeAslUpdateLib
MinPlatformPkg/DxeAslUpdateLib: Cleans up APIs
KabylakeSiliconPkg/DxeAslUpdateLib: Cleans up APIs
CoffeelakeSiliconPkg/DxeAslUpdateLib: Cleans up APIs
IntelSiliconPkg/DxeAslUpdateLib: Add DxeAslUpdateLib support
Platform/Intel/CometlakeOpenBoardPkg/Features/Tbt/TbtInit/Dxe/TbtDxe.c | 3 ---
Platform/Intel/KabylakeOpenBoardPkg/Features/Tbt/TbtInit/Dxe/TbtDxe.c | 5 +----
Platform/Intel/MinPlatformPkg/Acpi/Library/DxeAslUpdateLib/DxeAslUpdateLib.c | 209 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------------------
Platform/Intel/WhiskeylakeOpenBoardPkg/Features/Tbt/TbtInit/Dxe/TbtDxe.c | 5 +----
Silicon/Intel/CoffeelakeSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib.c | 190 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------------------------------------------------------------------
Silicon/Intel/CoffeelakeSiliconPkg/Library/DxeAslUpdateLibNull/DxeAslUpdateLibNull.c | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------
Silicon/Intel/CoffeelakeSiliconPkg/Pch/PchInit/Dxe/PchAcpi.c | 3 ---
Silicon/Intel/IntelSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib.c | 518 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Silicon/Intel/KabylakeSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib.c | 207 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------------------
Silicon/Intel/KabylakeSiliconPkg/Library/DxeAslUpdateLibNull/DxeAslUpdateLibNull.c | 94 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----------------------------------
Silicon/Intel/KabylakeSiliconPkg/Pch/PchInit/Dxe/PchAcpi.c | 5 +----
Platform/Intel/MinPlatformPkg/Include/Library/AslUpdateLib.h | 131 ++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------------------------------------------
Silicon/Intel/CoffeelakeSiliconPkg/Include/Library/AslUpdateLib.h | 114 +++++++++++++++++++++++++++++++++++-------------------------------------------------------------------------------
Silicon/Intel/IntelSiliconPkg/Include/Library/AslUpdateLib.h | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Silicon/Intel/IntelSiliconPkg/IntelSiliconPkg.dec | 4 ++++
Silicon/Intel/IntelSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib.inf | 42 ++++++++++++++++++++++++++++++++++++++++++
Silicon/Intel/KabylakeSiliconPkg/Include/Library/AslUpdateLib.h | 130 ++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------
17 files changed, 1238 insertions(+), 632 deletions(-)
create mode 100644 Silicon/Intel/IntelSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib.c
create mode 100644 Silicon/Intel/IntelSiliconPkg/Include/Library/AslUpdateLib.h
create mode 100644 Silicon/Intel/IntelSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib.inf
--
2.16.2.windows.1
^ permalink raw reply [flat|nested] 23+ messages in thread
* [edk2-platforms:PATCH v4 1/7] WhiskeylakeOpenBoardPkg/TbtDxe: Removes redundant InitializeAslUpdateLib
2020-04-29 2:31 [edk2-platforms:PATCH v4 0/7] IntelSiliconPkg DxeAslUpdateLib support Miki Shindo
@ 2020-04-29 2:31 ` Miki Shindo
2020-04-30 1:40 ` Chaganty, Rangasai V
2020-04-30 2:54 ` Chiu, Chasel
2020-04-29 2:31 ` [edk2-platforms:PATCH v4 2/7] KabylakeOpenBoardPkg/TbtDxe: " Miki Shindo
` (6 subsequent siblings)
7 siblings, 2 replies; 23+ messages in thread
From: Miki Shindo @ 2020-04-29 2:31 UTC (permalink / raw)
To: devel; +Cc: Sai Chaganty, Chasel Chiu, Nate DeSimone, Prince Agyeman, Ray Ni
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2536
This commit removes redundant InitializeAslUpdateLib call
as DxeAslUpdateLib itself calls it internally.
Signed-off-by: Miki Shindo <miki.shindo@intel.com>
Cc: Sai Chaganty <rangasai.v.chaganty@intel.com>
Cc: Chasel Chiu <chasel.chiu@intel.com>
Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
Cc: Prince Agyeman <prince.agyeman@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
---
Platform/Intel/WhiskeylakeOpenBoardPkg/Features/Tbt/TbtInit/Dxe/TbtDxe.c | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/Platform/Intel/WhiskeylakeOpenBoardPkg/Features/Tbt/TbtInit/Dxe/TbtDxe.c b/Platform/Intel/WhiskeylakeOpenBoardPkg/Features/Tbt/TbtInit/Dxe/TbtDxe.c
index c670f23320..991edfc2c6 100644
--- a/Platform/Intel/WhiskeylakeOpenBoardPkg/Features/Tbt/TbtInit/Dxe/TbtDxe.c
+++ b/Platform/Intel/WhiskeylakeOpenBoardPkg/Features/Tbt/TbtInit/Dxe/TbtDxe.c
@@ -1,6 +1,6 @@
/** @file
- Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
+ Copyright (c) 2019 - 2020, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
@@ -125,9 +125,6 @@ TbtAcpiEndOfDxeCallback (
UINT16 Length;
UINT32 Signature;
- Status = InitializeAslUpdateLib ();
- ASSERT_EFI_ERROR (Status);
-
Address = (UINT32) (UINTN) mTbtNvsAreaProtocol.Area;
Length = (UINT16) sizeof (TBT_NVS_AREA);
DEBUG ((DEBUG_INFO, "Patch TBT NvsAreaAddress: TBT NVS Address %x Length %x\n", Address, Length));
--
2.16.2.windows.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [edk2-platforms:PATCH v4 2/7] KabylakeOpenBoardPkg/TbtDxe: Removes redundant InitializeAslUpdateLib
2020-04-29 2:31 [edk2-platforms:PATCH v4 0/7] IntelSiliconPkg DxeAslUpdateLib support Miki Shindo
2020-04-29 2:31 ` [edk2-platforms:PATCH v4 1/7] WhiskeylakeOpenBoardPkg/TbtDxe: Removes redundant InitializeAslUpdateLib Miki Shindo
@ 2020-04-29 2:31 ` Miki Shindo
2020-04-30 1:47 ` Chaganty, Rangasai V
2020-04-30 2:55 ` Chiu, Chasel
2020-04-29 2:31 ` [edk2-platforms:PATCH v4 3/7] CometlakeOpenBoardPkg/TbtDxe: " Miki Shindo
` (5 subsequent siblings)
7 siblings, 2 replies; 23+ messages in thread
From: Miki Shindo @ 2020-04-29 2:31 UTC (permalink / raw)
To: devel; +Cc: Sai Chaganty, Chasel Chiu, Nate DeSimone, Prince Agyeman, Ray Ni
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2536
This commit removes redundant InitializeAslUpdateLib call
as DxeAslUpdateLib itself calls it internally.
Signed-off-by: Miki Shindo <miki.shindo@intel.com>
Cc: Sai Chaganty <rangasai.v.chaganty@intel.com>
Cc: Chasel Chiu <chasel.chiu@intel.com>
Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
Cc: Prince Agyeman <prince.agyeman@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
---
Platform/Intel/KabylakeOpenBoardPkg/Features/Tbt/TbtInit/Dxe/TbtDxe.c | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/Platform/Intel/KabylakeOpenBoardPkg/Features/Tbt/TbtInit/Dxe/TbtDxe.c b/Platform/Intel/KabylakeOpenBoardPkg/Features/Tbt/TbtInit/Dxe/TbtDxe.c
index 13a687576c..d101f4bb75 100644
--- a/Platform/Intel/KabylakeOpenBoardPkg/Features/Tbt/TbtInit/Dxe/TbtDxe.c
+++ b/Platform/Intel/KabylakeOpenBoardPkg/Features/Tbt/TbtInit/Dxe/TbtDxe.c
@@ -1,6 +1,6 @@
/** @file
-Copyright (c) 2018, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2018 - 2020, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
@@ -125,9 +125,6 @@ TbtAcpiEndOfDxeCallback (
UINT16 Length;
UINT32 Signature;
- Status = InitializeAslUpdateLib ();
- ASSERT_EFI_ERROR (Status);
-
Address = (UINT32) (UINTN) mTbtNvsAreaProtocol.Area;
Length = (UINT16) sizeof (TBT_NVS_AREA);
DEBUG ((DEBUG_INFO, "Patch TBT NvsAreaAddress: TBT NVS Address %x Length %x\n", Address, Length));
--
2.16.2.windows.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [edk2-platforms:PATCH v4 3/7] CometlakeOpenBoardPkg/TbtDxe: Removes redundant InitializeAslUpdateLib
2020-04-29 2:31 [edk2-platforms:PATCH v4 0/7] IntelSiliconPkg DxeAslUpdateLib support Miki Shindo
2020-04-29 2:31 ` [edk2-platforms:PATCH v4 1/7] WhiskeylakeOpenBoardPkg/TbtDxe: Removes redundant InitializeAslUpdateLib Miki Shindo
2020-04-29 2:31 ` [edk2-platforms:PATCH v4 2/7] KabylakeOpenBoardPkg/TbtDxe: " Miki Shindo
@ 2020-04-29 2:31 ` Miki Shindo
2020-04-30 1:53 ` Chaganty, Rangasai V
2020-04-30 2:55 ` Chiu, Chasel
2020-04-29 2:32 ` [edk2-platforms:PATCH v4 4/7] MinPlatformPkg/DxeAslUpdateLib: Cleans up APIs Miki Shindo
` (4 subsequent siblings)
7 siblings, 2 replies; 23+ messages in thread
From: Miki Shindo @ 2020-04-29 2:31 UTC (permalink / raw)
To: devel; +Cc: Sai Chaganty, Chasel Chiu, Nate DeSimone, Prince Agyeman, Ray Ni
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2536
This commit removes redundant InitializeAslUpdateLib calls
as DxeAslUpdateLib itself calls it internally.
Signed-off-by: Miki Shindo <miki.shindo@intel.com>
Cc: Sai Chaganty <rangasai.v.chaganty@intel.com>
Cc: Chasel Chiu <chasel.chiu@intel.com>
Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
Cc: Prince Agyeman <prince.agyeman@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
---
Platform/Intel/CometlakeOpenBoardPkg/Features/Tbt/TbtInit/Dxe/TbtDxe.c | 3 ---
1 file changed, 3 deletions(-)
diff --git a/Platform/Intel/CometlakeOpenBoardPkg/Features/Tbt/TbtInit/Dxe/TbtDxe.c b/Platform/Intel/CometlakeOpenBoardPkg/Features/Tbt/TbtInit/Dxe/TbtDxe.c
index ef6201de94..e43c5c2fa1 100644
--- a/Platform/Intel/CometlakeOpenBoardPkg/Features/Tbt/TbtInit/Dxe/TbtDxe.c
+++ b/Platform/Intel/CometlakeOpenBoardPkg/Features/Tbt/TbtInit/Dxe/TbtDxe.c
@@ -125,9 +125,6 @@ TbtAcpiEndOfDxeCallback (
UINT16 Length;
UINT32 Signature;
- Status = InitializeAslUpdateLib ();
- ASSERT_EFI_ERROR (Status);
-
Address = (UINT32) (UINTN) mTbtNvsAreaProtocol.Area;
Length = (UINT16) sizeof (TBT_NVS_AREA);
DEBUG ((DEBUG_INFO, "Patch TBT NvsAreaAddress: TBT NVS Address %x Length %x\n", Address, Length));
--
2.16.2.windows.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [edk2-platforms:PATCH v4 4/7] MinPlatformPkg/DxeAslUpdateLib: Cleans up APIs
2020-04-29 2:31 [edk2-platforms:PATCH v4 0/7] IntelSiliconPkg DxeAslUpdateLib support Miki Shindo
` (2 preceding siblings ...)
2020-04-29 2:31 ` [edk2-platforms:PATCH v4 3/7] CometlakeOpenBoardPkg/TbtDxe: " Miki Shindo
@ 2020-04-29 2:32 ` Miki Shindo
2020-04-30 2:56 ` Chiu, Chasel
2020-04-30 5:00 ` Chaganty, Rangasai V
2020-04-29 2:32 ` [edk2-platforms:PATCH v4 5/7] KabylakeSiliconPkg/DxeAslUpdateLib: " Miki Shindo
` (3 subsequent siblings)
7 siblings, 2 replies; 23+ messages in thread
From: Miki Shindo @ 2020-04-29 2:32 UTC (permalink / raw)
To: devel; +Cc: Sai Chaganty, Chasel Chiu, Nate DeSimone, Prince Agyeman, Ray Ni
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2536
Callers of DxeAslUpdateLib don't have to call InitializeAslUpdateLib()
but the library itself runs it internally. This commit makes it
an internal call. LocateAcpiTableByOemTableId() is unreferenced externally
so this commit makes it an internal call.
PSS_PACKAGE_LAYOUT and AML_RESRC_TEMP_END_TAG are both unreferenced
so they are removed.
AslUpdateLib.h is cleaned up accordingly.
Signed-off-by: Miki Shindo <miki.shindo@intel.com>
Cc: Sai Chaganty <rangasai.v.chaganty@intel.com>
Cc: Chasel Chiu <chasel.chiu@intel.com>
Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
Cc: Prince Agyeman <prince.agyeman@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
---
Platform/Intel/MinPlatformPkg/Acpi/Library/DxeAslUpdateLib/DxeAslUpdateLib.c | 209 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------------------
Platform/Intel/MinPlatformPkg/Include/Library/AslUpdateLib.h | 131 ++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------------------------------------------
2 files changed, 159 insertions(+), 181 deletions(-)
diff --git a/Platform/Intel/MinPlatformPkg/Acpi/Library/DxeAslUpdateLib/DxeAslUpdateLib.c b/Platform/Intel/MinPlatformPkg/Acpi/Library/DxeAslUpdateLib/DxeAslUpdateLib.c
index e6ab43db6d..1ba51a7c55 100644
--- a/Platform/Intel/MinPlatformPkg/Acpi/Library/DxeAslUpdateLib/DxeAslUpdateLib.c
+++ b/Platform/Intel/MinPlatformPkg/Acpi/Library/DxeAslUpdateLib/DxeAslUpdateLib.c
@@ -6,7 +6,7 @@
This library uses the ACPI Support protocol.
-Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2017 - 2020, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
@@ -50,6 +50,62 @@ InitializeAslUpdateLib (
return Status;
}
+/**
+ This function uses the ACPI SDT protocol to locate an ACPI SSDT table.
+
+ @param[in] TableId - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
+ @param[in] TableIdSize - Length of the TableId to match. Table ID are 8 bytes long, this function
+ will consider it a match if the first TableIdSize bytes match
+ @param[in, out] Table - Updated with a pointer to the table
+ @param[in, out] Handle - AcpiSupport protocol table handle for the table found
+
+ @retval EFI_SUCCESS - The function completed successfully.
+ @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
+ @retval EFI_NOT_READY - Not ready to locate AcpiTable.
+**/
+EFI_STATUS
+LocateAcpiTableByOemTableId (
+ IN UINT8 *TableId,
+ IN UINT8 TableIdSize,
+ IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
+ IN OUT UINTN *Handle
+ )
+{
+ EFI_STATUS Status;
+ INTN Index;
+ EFI_ACPI_TABLE_VERSION Version;
+ EFI_ACPI_DESCRIPTION_HEADER *OrgTable;
+
+ if (mAcpiSdt == NULL) {
+ InitializeAslUpdateLib ();
+ if (mAcpiSdt == NULL) {
+ return EFI_NOT_READY;
+ }
+ }
+ ///
+ /// Locate table with matching ID
+ ///
+ Version = 0;
+ Index = 0;
+ do {
+ Status = mAcpiSdt->GetAcpiTable (Index, (EFI_ACPI_SDT_HEADER **)&OrgTable, &Version, Handle);
+ if (Status == EFI_NOT_FOUND) {
+ break;
+ }
+ ASSERT_EFI_ERROR (Status);
+ Index++;
+ } while (CompareMem (&(OrgTable->OemTableId), TableId, TableIdSize));
+
+ if (Status != EFI_NOT_FOUND) {
+ *Table = AllocateCopyPool (OrgTable->Length, OrgTable);
+ ASSERT (*Table);
+ }
+
+ ///
+ /// If we found the table, there will be no error.
+ ///
+ return Status;
+}
/**
This procedure will update immediate value assigned to a Name
@@ -59,8 +115,11 @@ InitializeAslUpdateLib (
@param[in] Length - length of data to be overwritten
@retval EFI_SUCCESS - The function completed successfully.
+ @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
+ @retval EFI_NOT_READY - Not ready to locate AcpiTable.
**/
EFI_STATUS
+EFIAPI
UpdateNameAslCode (
IN UINT32 AslSignature,
IN VOID *Buffer,
@@ -149,6 +208,50 @@ UpdateNameAslCode (
return EFI_NOT_FOUND;
}
+/**
+ This procedure will update the name of ASL Method
+
+ @param[in] TableId - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
+ @param[in] TableIdSize - Length of the TableId to match. Table ID are 8 bytes long, this function
+ will consider it a match if the first TableIdSize bytes match
+ @param[in] AslSignature - The signature of Operation Region that we want to update.
+ @param[in] Buffer - source of data to be written over original aml
+ @param[in] Length - length of data to be overwritten
+
+ @retval EFI_UNSUPPORTED - The function is not supported in this library.
+**/
+EFI_STATUS
+EFIAPI
+UpdateSsdtNameAslCode (
+ IN UINT8 *TableId,
+ IN UINT8 TableIdSize,
+ IN UINT32 AslSignature,
+ IN VOID *Buffer,
+ IN UINTN Length
+ )
+{
+ return EFI_UNSUPPORTED;
+}
+
+/**
+ This procedure will update the name of ASL Method
+
+ @param[in] AslSignature - The signature of Operation Region that we want to update.
+ @param[in] Buffer - source of data to be written over original aml
+ @param[in] Length - length of data to be overwritten
+
+ @retval EFI_UNSUPPORTED - The function is not supported in this library.
+**/
+EFI_STATUS
+EFIAPI
+UpdateMethodAslCode (
+ IN UINT32 AslSignature,
+ IN VOID *Buffer,
+ IN UINTN Length
+ )
+{
+ return EFI_UNSUPPORTED;
+}
/**
This function uses the ACPI SDT protocol to locate an ACPI table.
@@ -161,8 +264,11 @@ UpdateNameAslCode (
@param[in, out] Version - The version of the table desired
@retval EFI_SUCCESS - The function completed successfully.
+ @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
+ @retval EFI_NOT_READY - Not ready to locate AcpiTable.
**/
EFI_STATUS
+EFIAPI
LocateAcpiTableBySignature (
IN UINT32 Signature,
IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
@@ -205,104 +311,3 @@ LocateAcpiTableBySignature (
///
return Status;
}
-
-/**
- This function uses the ACPI SDT protocol to locate an ACPI SSDT table.
-
- @param[in] TableId - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
- @param[in] TableIdSize - Length of the TableId to match. Table ID are 8 bytes long, this function
- will consider it a match if the first TableIdSize bytes match
- @param[in, out] Table - Updated with a pointer to the table
- @param[in, out] Handle - AcpiSupport protocol table handle for the table found
- @param[in, out] Version - See AcpiSupport protocol, GetAcpiTable function for use
-
- @retval EFI_SUCCESS - The function completed successfully.
-**/
-EFI_STATUS
-LocateAcpiTableByOemTableId (
- IN UINT8 *TableId,
- IN UINT8 TableIdSize,
- IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
- IN OUT UINTN *Handle
- )
-{
- EFI_STATUS Status;
- INTN Index;
- EFI_ACPI_TABLE_VERSION Version;
- EFI_ACPI_DESCRIPTION_HEADER *OrgTable;
-
- if (mAcpiSdt == NULL) {
- InitializeAslUpdateLib ();
- if (mAcpiSdt == NULL) {
- return EFI_NOT_READY;
- }
- }
- ///
- /// Locate table with matching ID
- ///
- Version = 0;
- Index = 0;
- do {
- Status = mAcpiSdt->GetAcpiTable (Index, (EFI_ACPI_SDT_HEADER **)&OrgTable, &Version, Handle);
- if (Status == EFI_NOT_FOUND) {
- break;
- }
- ASSERT_EFI_ERROR (Status);
- Index++;
- } while (CompareMem (&(OrgTable->OemTableId), TableId, TableIdSize));
-
- if (Status != EFI_NOT_FOUND) {
- *Table = AllocateCopyPool (OrgTable->Length, OrgTable);
- ASSERT (*Table);
- }
-
- ///
- /// If we found the table, there will be no error.
- ///
- return Status;
-}
-
-/**
- This function calculates and updates an UINT8 checksum.
-
- @param[in] Buffer Pointer to buffer to checksum
- @param[in] Size Number of bytes to checksum
- @param[in] ChecksumOffset Offset to place the checksum result in
-
- @retval EFI_SUCCESS The function completed successfully.
-**/
-EFI_STATUS
-AcpiChecksum (
- IN VOID *Buffer,
- IN UINTN Size,
- IN UINTN ChecksumOffset
- )
-{
- UINT8 Sum;
- UINT8 *Ptr;
-
- Sum = 0;
- ///
- /// Initialize pointer
- ///
- Ptr = Buffer;
-
- ///
- /// set checksum to 0 first
- ///
- Ptr[ChecksumOffset] = 0;
-
- ///
- /// add all content of buffer
- ///
- while (Size--) {
- Sum = (UINT8) (Sum + (*Ptr++));
- }
- ///
- /// set checksum
- ///
- Ptr = Buffer;
- Ptr[ChecksumOffset] = (UINT8) (0xff - Sum + 1);
-
- return EFI_SUCCESS;
-}
diff --git a/Platform/Intel/MinPlatformPkg/Include/Library/AslUpdateLib.h b/Platform/Intel/MinPlatformPkg/Include/Library/AslUpdateLib.h
index d58b6d6458..0be8df6469 100644
--- a/Platform/Intel/MinPlatformPkg/Include/Library/AslUpdateLib.h
+++ b/Platform/Intel/MinPlatformPkg/Include/Library/AslUpdateLib.h
@@ -5,7 +5,7 @@
Make sure you meet the requirements for the library (protocol dependencies, use
restrictions, etc).
-Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2017 - 2020, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
@@ -16,61 +16,70 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
//
// Include files
//
+#include <Uefi/UefiBaseType.h>
#include <IndustryStandard/Acpi.h>
#include <Protocol/AcpiTable.h>
#include <Protocol/AcpiSystemDescriptionTable.h>
-//
-// AML parsing definitions
-//
-#define AML_RESRC_TEMP_END_TAG 0x0079
-
-//
-// ASL PSS package structure layout
-//
-#pragma pack (1)
-typedef struct {
- UINT8 NameOp; // 12h ;First opcode is a NameOp.
- UINT8 PackageLead; // 20h ;First opcode is a NameOp.
- UINT8 NumEntries; // 06h ;First opcode is a NameOp.
- UINT8 DwordPrefix1; // 0Ch
- UINT32 CoreFrequency; // 00h
- UINT8 DwordPrefix2; // 0Ch
- UINT32 Power; // 00h
- UINT8 DwordPrefix3; // 0Ch
- UINT32 TransLatency; // 00h
- UINT8 DwordPrefix4; // 0Ch
- UINT32 BmLatency; // 00h
- UINT8 DwordPrefix5; // 0Ch
- UINT32 Control; // 00h
- UINT8 DwordPrefix6; // 0Ch
- UINT32 Status; // 00h
-} PSS_PACKAGE_LAYOUT;
-#pragma pack()
-
/**
- Initialize the ASL update library state.
- This must be called prior to invoking other library functions.
+ This procedure will update immediate value assigned to a Name
+ @param[in] AslSignature The signature of Operation Region that we want to update.
+ @param[in] Buffer source of data to be written over original aml
+ @param[in] Length length of data to be overwritten
@retval EFI_SUCCESS The function completed successfully.
+ @retval EFI_NOT_FOUND Failed to locate AcpiTable.
+ @retval EFI_NOT_READY Not ready to locate AcpiTable.
+ @retval EFI_UNSUPPORTED The function is not supported in this library
**/
EFI_STATUS
-InitializeAslUpdateLib (
- VOID
+EFIAPI
+UpdateNameAslCode(
+ IN UINT32 AslSignature,
+ IN VOID *Buffer,
+ IN UINTN Length
);
/**
- This procedure will update immediate value assigned to a Name
+ This procedure will update the name of ASL Method
+
+ @param[in] TableId - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
+ @param[in] TableIdSize - Length of the TableId to match. Table ID are 8 bytes long, this function
+ @param[in] AslSignature - The signature of Operation Region that we want to update.
+ @param[in] Buffer - source of data to be written over original aml
+ @param[in] Length - length of data to be overwritten
+
+ @retval EFI_SUCCESS - The function completed successfully.
+ @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
+ @retval EFI_NOT_READY - Not ready to locate AcpiTable.
+ @retval EFI_UNSUPPORTED - The function is not supported in this library
+**/
+EFI_STATUS
+EFIAPI
+UpdateSsdtNameAslCode (
+ IN UINT8 *TableId,
+ IN UINT8 TableIdSize,
+ IN UINT32 AslSignature,
+ IN VOID *Buffer,
+ IN UINTN Length
+ );
- @param[in] AslSignature The signature of Operation Region that we want to update.
- @param[in] Buffer source of data to be written over original aml
- @param[in] Length length of data to be overwritten
+/**
+ This procedure will update the name of ASL Method
- @retval EFI_SUCCESS The function completed successfully.
+ @param[in] AslSignature - The signature of Operation Region that we want to update.
+ @param[in] Buffer - source of data to be written over original aml
+ @param[in] Length - length of data to be overwritten
+
+ @retval EFI_SUCCESS - The function completed successfully.
+ @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
+ @retval EFI_NOT_READY - Not ready to locate AcpiTable.
+ @retval EFI_UNSUPPORTED - The function is not supported in this library
**/
EFI_STATUS
-UpdateNameAslCode(
+EFIAPI
+UpdateMethodAslCode (
IN UINT32 AslSignature,
IN VOID *Buffer,
IN UINTN Length
@@ -86,55 +95,19 @@ UpdateNameAslCode(
@param[in] Signature Pointer to an ASCII string containing the Signature to match
@param[in, out] Table Updated with a pointer to the table
@param[in, out] Handle AcpiSupport protocol table handle for the table found
- @param[in, out] Version On input, the version of the table desired,
- on output, the versions the table belongs to
@see AcpiSupport protocol for details
@retval EFI_SUCCESS The function completed successfully.
+ @retval EFI_NOT_FOUND Failed to locate AcpiTable.
+ @retval EFI_NOT_READY Not ready to locate AcpiTable.
+ @retval EFI_UNSUPPORTED The function is not supported in this library
**/
EFI_STATUS
+EFIAPI
LocateAcpiTableBySignature (
IN UINT32 Signature,
IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
IN OUT UINTN *Handle
);
-/**
- This function uses the ACPI support protocol to locate an ACPI SSDT table.
- The table is located by searching for a matching OEM Table ID field.
- Partial match searches are supported via the TableIdSize parameter.
-
- @param[in] TableId Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
- @param[in] TableIdSize Length of the TableId to match. Table ID are 8 bytes long, this function
- will consider it a match if the first TableIdSize bytes match
- @param[in, out] Table Updated with a pointer to the table
- @param[in, out] Handle AcpiSupport protocol table handle for the table found
- @param[in, out] Version See AcpiSupport protocol, GetAcpiTable function for use
-
- @retval EFI_SUCCESS The function completed successfully.
-**/
-EFI_STATUS
-LocateAcpiTableByOemTableId (
- IN UINT8 *TableId,
- IN UINT8 TableIdSize,
- IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
- IN OUT UINTN *Handle
- );
-
-/**
- This function calculates and updates an UINT8 checksum.
-
- @param[in] Buffer Pointer to buffer to checksum
- @param[in] Size Number of bytes to checksum
- @param[in] ChecksumOffset Offset to place the checksum result in
-
- @retval EFI_SUCCESS The function completed successfully.
-**/
-EFI_STATUS
-AcpiChecksum (
- IN VOID *Buffer,
- IN UINTN Size,
- IN UINTN ChecksumOffset
- );
-
#endif
--
2.16.2.windows.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [edk2-platforms:PATCH v4 5/7] KabylakeSiliconPkg/DxeAslUpdateLib: Cleans up APIs
2020-04-29 2:31 [edk2-platforms:PATCH v4 0/7] IntelSiliconPkg DxeAslUpdateLib support Miki Shindo
` (3 preceding siblings ...)
2020-04-29 2:32 ` [edk2-platforms:PATCH v4 4/7] MinPlatformPkg/DxeAslUpdateLib: Cleans up APIs Miki Shindo
@ 2020-04-29 2:32 ` Miki Shindo
2020-04-30 2:56 ` Chiu, Chasel
2020-04-30 5:02 ` Chaganty, Rangasai V
2020-04-29 2:32 ` [edk2-platforms:PATCH v4 6/7] CoffeelakeSiliconPkg/DxeAslUpdateLib: " Miki Shindo
` (2 subsequent siblings)
7 siblings, 2 replies; 23+ messages in thread
From: Miki Shindo @ 2020-04-29 2:32 UTC (permalink / raw)
To: devel; +Cc: Sai Chaganty, Chasel Chiu, Nate DeSimone, Prince Agyeman, Ray Ni
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2536
Callers of DxeAslUpdateLib don't have to call InitializeAslUpdateLib()
but the library itself runs it internally. This commit deletes
the redundant calls in caller side and makes it an internal call.
LocateAcpiTableByOemTableId() is unreferenced externally
so this commit makes it an internal call.
PSS_PACKAGE_LAYOUT and AML_RESRC_TEMP_END_TAG are both unreferenced
so they are removed.
AslUpdateLib.h is cleaned up accordingly.
Signed-off-by: Miki Shindo <miki.shindo@intel.com>
Cc: Sai Chaganty <rangasai.v.chaganty@intel.com>
Cc: Chasel Chiu <chasel.chiu@intel.com>
Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
Cc: Prince Agyeman <prince.agyeman@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
---
Silicon/Intel/KabylakeSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib.c | 207 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------------------
Silicon/Intel/KabylakeSiliconPkg/Library/DxeAslUpdateLibNull/DxeAslUpdateLibNull.c | 94 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----------------------------------
Silicon/Intel/KabylakeSiliconPkg/Pch/PchInit/Dxe/PchAcpi.c | 5 +----
Silicon/Intel/KabylakeSiliconPkg/Include/Library/AslUpdateLib.h | 130 ++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------
4 files changed, 217 insertions(+), 219 deletions(-)
diff --git a/Silicon/Intel/KabylakeSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib.c b/Silicon/Intel/KabylakeSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib.c
index 87c6b15ed2..abdb85307f 100644
--- a/Silicon/Intel/KabylakeSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib.c
+++ b/Silicon/Intel/KabylakeSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib.c
@@ -6,7 +6,7 @@
This library uses the ACPI Support protocol.
-Copyright (c) 2017 - 2019, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2017 - 2020, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
@@ -50,6 +50,62 @@ InitializeAslUpdateLib (
return Status;
}
+/**
+ This function uses the ACPI SDT protocol to locate an ACPI SSDT table.
+
+ @param[in] TableId - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
+ @param[in] TableIdSize - Length of the TableId to match. Table ID are 8 bytes long, this function
+ will consider it a match if the first TableIdSize bytes match
+ @param[in, out] Table - Updated with a pointer to the table
+ @param[in, out] Handle - AcpiSupport protocol table handle for the table found
+
+ @retval EFI_SUCCESS - The function completed successfully.
+ @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
+ @retval EFI_NOT_READY - Not ready to locate AcpiTable.
+**/
+EFI_STATUS
+LocateAcpiTableByOemTableId (
+ IN UINT8 *TableId,
+ IN UINT8 TableIdSize,
+ IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
+ IN OUT UINTN *Handle
+ )
+{
+ EFI_STATUS Status;
+ INTN Index;
+ EFI_ACPI_TABLE_VERSION Version;
+ EFI_ACPI_DESCRIPTION_HEADER *OrgTable;
+
+ if (mAcpiSdt == NULL) {
+ InitializeAslUpdateLib ();
+ if (mAcpiSdt == NULL) {
+ return EFI_NOT_READY;
+ }
+ }
+ ///
+ /// Locate table with matching ID
+ ///
+ Version = 0;
+ Index = 0;
+ do {
+ Status = mAcpiSdt->GetAcpiTable (Index, (EFI_ACPI_SDT_HEADER **)&OrgTable, &Version, Handle);
+ if (Status == EFI_NOT_FOUND) {
+ break;
+ }
+ ASSERT_EFI_ERROR (Status);
+ Index++;
+ } while (CompareMem (&(OrgTable->OemTableId), TableId, TableIdSize));
+
+ if (Status != EFI_NOT_FOUND) {
+ *Table = AllocateCopyPool (OrgTable->Length, OrgTable);
+ ASSERT (*Table);
+ }
+
+ ///
+ /// If we found the table, there will be no error.
+ ///
+ return Status;
+}
/**
This procedure will update immediate value assigned to a Name
@@ -60,8 +116,10 @@ InitializeAslUpdateLib (
@retval EFI_SUCCESS - The function completed successfully.
@retval EFI_NOT_FOUND - Failed to locate AcpiTable.
+ @retval EFI_NOT_READY - Not ready to locate AcpiTable.
**/
EFI_STATUS
+EFIAPI
UpdateNameAslCode (
IN UINT32 AslSignature,
IN VOID *Buffer,
@@ -155,79 +213,67 @@ UpdateNameAslCode (
return EFI_NOT_FOUND;
}
-
/**
- This function uses the ACPI SDT protocol to locate an ACPI table.
- It is really only useful for finding tables that only have a single instance,
- e.g. FADT, FACS, MADT, etc. It is not good for locating SSDT, etc.
+ This procedure will update the name of ASL Method
- @param[in] Signature - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
- @param[in, out] Table - Updated with a pointer to the table
- @param[in, out] Handle - AcpiSupport protocol table handle for the table found
- @param[in, out] Version - The version of the table desired
+ @param[in] TableId - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
+ @param[in] TableIdSize - Length of the TableId to match. Table ID are 8 bytes long, this function
+ @param[in] AslSignature - The signature of Operation Region that we want to update.
+ @param[in] Buffer - source of data to be written over original aml
+ @param[in] Length - length of data to be overwritten
- @retval EFI_SUCCESS - The function completed successfully.
+ @retval EFI_UNSUPPORTED The function is not supported in this library.
**/
EFI_STATUS
-LocateAcpiTableBySignature (
- IN UINT32 Signature,
- IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
- IN OUT UINTN *Handle
+EFIAPI
+UpdateSsdtNameAslCode (
+ IN UINT8 *TableId,
+ IN UINT8 TableIdSize,
+ IN UINT32 AslSignature,
+ IN VOID *Buffer,
+ IN UINTN Length
)
{
- EFI_STATUS Status;
- INTN Index;
- EFI_ACPI_TABLE_VERSION Version;
- EFI_ACPI_DESCRIPTION_HEADER *OrgTable;
-
- if (mAcpiSdt == NULL) {
- InitializeAslUpdateLib ();
- if (mAcpiSdt == NULL) {
- return EFI_NOT_READY;
- }
- }
+ return EFI_UNSUPPORTED;
+}
- ///
- /// Locate table with matching ID
- ///
- Version = 0;
- Index = 0;
- do {
- Status = mAcpiSdt->GetAcpiTable (Index, (EFI_ACPI_SDT_HEADER **)&OrgTable, &Version, Handle);
- if (Status == EFI_NOT_FOUND) {
- break;
- }
- ASSERT_EFI_ERROR (Status);
- Index++;
- } while (OrgTable->Signature != Signature);
+/**
+ This procedure will update the name of ASL Method
- if (Status != EFI_NOT_FOUND) {
- *Table = AllocateCopyPool (OrgTable->Length, OrgTable);
- ASSERT (*Table);
- }
+ @param[in] AslSignature - The signature of Operation Region that we want to update.
+ @param[in] Buffer - source of data to be written over original aml
+ @param[in] Length - length of data to be overwritten
- ///
- /// If we found the table, there will be no error.
- ///
- return Status;
+ @retval EFI_UNSUPPORTED The function is not supported in this library.
+**/
+EFI_STATUS
+EFIAPI
+UpdateMethodAslCode (
+ IN UINT32 AslSignature,
+ IN VOID *Buffer,
+ IN UINTN Length
+ )
+{
+ return EFI_UNSUPPORTED;
}
/**
- This function uses the ACPI SDT protocol to locate an ACPI SSDT table.
+ This function uses the ACPI SDT protocol to locate an ACPI table.
+ It is really only useful for finding tables that only have a single instance,
+ e.g. FADT, FACS, MADT, etc. It is not good for locating SSDT, etc.
- @param[in] TableId - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
- @param[in] TableIdSize - Length of the TableId to match. Table ID are 8 bytes long, this function
- will consider it a match if the first TableIdSize bytes match
- @param[in, out] Table - Updated with a pointer to the table
- @param[in, out] Handle - AcpiSupport protocol table handle for the table found
- @param[in, out] Version - See AcpiSupport protocol, GetAcpiTable function for use
+ @param[in] Signature - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
+ @param[in, out] Table - Updated with a pointer to the table
+ @param[in, out] Handle - AcpiSupport protocol table handle for the table found
- @retval EFI_SUCCESS - The function completed successfully.
+ @retval EFI_SUCCESS - The function completed successfully.
+ @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
+ @retval EFI_NOT_READY - Not ready to locate AcpiTable.
**/
EFI_STATUS
-LocateAcpiTableByOemTableId (
- IN UINT8 *TableId,
- IN UINT8 TableIdSize,
+EFIAPI
+LocateAcpiTableBySignature (
+ IN UINT32 Signature,
IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
IN OUT UINTN *Handle
)
@@ -243,6 +289,7 @@ LocateAcpiTableByOemTableId (
return EFI_NOT_READY;
}
}
+
///
/// Locate table with matching ID
///
@@ -255,7 +302,7 @@ LocateAcpiTableByOemTableId (
}
ASSERT_EFI_ERROR (Status);
Index++;
- } while (CompareMem (&(OrgTable->OemTableId), TableId, TableIdSize));
+ } while (OrgTable->Signature != Signature);
if (Status != EFI_NOT_FOUND) {
*Table = AllocateCopyPool (OrgTable->Length, OrgTable);
@@ -268,47 +315,3 @@ LocateAcpiTableByOemTableId (
return Status;
}
-/**
- This function calculates and updates an UINT8 checksum.
-
- @param[in] Buffer Pointer to buffer to checksum
- @param[in] Size Number of bytes to checksum
- @param[in] ChecksumOffset Offset to place the checksum result in
-
- @retval EFI_SUCCESS The function completed successfully.
-**/
-EFI_STATUS
-AcpiChecksum (
- IN VOID *Buffer,
- IN UINTN Size,
- IN UINTN ChecksumOffset
- )
-{
- UINT8 Sum;
- UINT8 *Ptr;
-
- Sum = 0;
- ///
- /// Initialize pointer
- ///
- Ptr = Buffer;
-
- ///
- /// set checksum to 0 first
- ///
- Ptr[ChecksumOffset] = 0;
-
- ///
- /// add all content of buffer
- ///
- while (Size--) {
- Sum = (UINT8) (Sum + (*Ptr++));
- }
- ///
- /// set checksum
- ///
- Ptr = Buffer;
- Ptr[ChecksumOffset] = (UINT8) (0xff - Sum + 1);
-
- return EFI_SUCCESS;
-}
diff --git a/Silicon/Intel/KabylakeSiliconPkg/Library/DxeAslUpdateLibNull/DxeAslUpdateLibNull.c b/Silicon/Intel/KabylakeSiliconPkg/Library/DxeAslUpdateLibNull/DxeAslUpdateLibNull.c
index 490a09ddb5..395ff16596 100644
--- a/Silicon/Intel/KabylakeSiliconPkg/Library/DxeAslUpdateLibNull/DxeAslUpdateLibNull.c
+++ b/Silicon/Intel/KabylakeSiliconPkg/Library/DxeAslUpdateLibNull/DxeAslUpdateLibNull.c
@@ -6,7 +6,7 @@
This library uses the ACPI Support protocol.
-Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2017 - 2020, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
@@ -39,6 +39,27 @@ InitializeAslUpdateLib (
return EFI_SUCCESS;
}
+/**
+ This function uses the ACPI SDT protocol to locate an ACPI SSDT table.
+
+ @param[in] TableId - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
+ @param[in] TableIdSize - Length of the TableId to match. Table ID are 8 bytes long, this function
+ will consider it a match if the first TableIdSize bytes match
+ @param[in, out] Table - Updated with a pointer to the table
+ @param[in, out] Handle - AcpiSupport protocol table handle for the table found
+
+ @retval EFI_SUCCESS - The function completed successfully.
+**/
+EFI_STATUS
+LocateAcpiTableByOemTableId (
+ IN UINT8 *TableId,
+ IN UINT8 TableIdSize,
+ IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
+ IN OUT UINTN *Handle
+ )
+{
+ return EFI_SUCCESS;
+}
/**
This procedure will update immediate value assigned to a Name
@@ -50,6 +71,7 @@ InitializeAslUpdateLib (
@retval EFI_SUCCESS - The function completed successfully.
**/
EFI_STATUS
+EFIAPI
UpdateNameAslCode (
IN UINT32 AslSignature,
IN VOID *Buffer,
@@ -59,66 +81,68 @@ UpdateNameAslCode (
return EFI_SUCCESS;
}
-
/**
- This function uses the ACPI SDT protocol to locate an ACPI table.
- It is really only useful for finding tables that only have a single instance,
- e.g. FADT, FACS, MADT, etc. It is not good for locating SSDT, etc.
+ This procedure will update the name of ASL Method
- @param[in] Signature - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
- @param[in, out] Table - Updated with a pointer to the table
- @param[in, out] Handle - AcpiSupport protocol table handle for the table found
- @param[in, out] Version - The version of the table desired
+ @param[in] TableId - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
+ @param[in] TableIdSize - Length of the TableId to match. Table ID are 8 bytes long, this function
+ @param[in] AslSignature - The signature of Operation Region that we want to update.
+ @param[in] Buffer - source of data to be written over original aml
+ @param[in] Length - length of data to be overwritten
- @retval EFI_SUCCESS - The function completed successfully.
+ @retval EFI_SUCCESS - The function completed successfully.
**/
EFI_STATUS
-LocateAcpiTableBySignature (
- IN UINT32 Signature,
- IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
- IN OUT UINTN *Handle
+EFIAPI
+UpdateSsdtNameAslCode (
+ IN UINT8 *TableId,
+ IN UINT8 TableIdSize,
+ IN UINT32 AslSignature,
+ IN VOID *Buffer,
+ IN UINTN Length
)
{
return EFI_SUCCESS;
}
/**
- This function uses the ACPI SDT protocol to locate an ACPI SSDT table.
+ This procedure will update the name of ASL Method
- @param[in] TableId - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
- @param[in] TableIdSize - Length of the TableId to match. Table ID are 8 bytes long, this function
- will consider it a match if the first TableIdSize bytes match
- @param[in, out] Table - Updated with a pointer to the table
- @param[in, out] Handle - AcpiSupport protocol table handle for the table found
- @param[in, out] Version - See AcpiSupport protocol, GetAcpiTable function for use
+ @param[in] AslSignature - The signature of Operation Region that we want to update.
+ @param[in] Buffer - source of data to be written over original aml
+ @param[in] Length - length of data to be overwritten
@retval EFI_SUCCESS - The function completed successfully.
**/
EFI_STATUS
-LocateAcpiTableByOemTableId (
- IN UINT8 *TableId,
- IN UINT8 TableIdSize,
- IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
- IN OUT UINTN *Handle
+EFIAPI
+UpdateMethodAslCode (
+ IN UINT32 AslSignature,
+ IN VOID *Buffer,
+ IN UINTN Length
)
{
return EFI_SUCCESS;
}
+
/**
- This function calculates and updates an UINT8 checksum.
+ This function uses the ACPI SDT protocol to locate an ACPI table.
+ It is really only useful for finding tables that only have a single instance,
+ e.g. FADT, FACS, MADT, etc. It is not good for locating SSDT, etc.
- @param[in] Buffer Pointer to buffer to checksum
- @param[in] Size Number of bytes to checksum
- @param[in] ChecksumOffset Offset to place the checksum result in
+ @param[in] Signature - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
+ @param[in, out] Table - Updated with a pointer to the table
+ @param[in, out] Handle - AcpiSupport protocol table handle for the table found
- @retval EFI_SUCCESS The function completed successfully.
+ @retval EFI_SUCCESS - The function completed successfully.
**/
EFI_STATUS
-AcpiChecksum (
- IN VOID *Buffer,
- IN UINTN Size,
- IN UINTN ChecksumOffset
+EFIAPI
+LocateAcpiTableBySignature (
+ IN UINT32 Signature,
+ IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
+ IN OUT UINTN *Handle
)
{
return EFI_SUCCESS;
diff --git a/Silicon/Intel/KabylakeSiliconPkg/Pch/PchInit/Dxe/PchAcpi.c b/Silicon/Intel/KabylakeSiliconPkg/Pch/PchInit/Dxe/PchAcpi.c
index a0e3996664..6cbaf9c067 100644
--- a/Silicon/Intel/KabylakeSiliconPkg/Pch/PchInit/Dxe/PchAcpi.c
+++ b/Silicon/Intel/KabylakeSiliconPkg/Pch/PchInit/Dxe/PchAcpi.c
@@ -1,7 +1,7 @@
/** @file
This is the driver that initializes the Intel PCH.
-Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2017 - 2020, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
@@ -443,9 +443,6 @@ PatchPchNvsAreaAddress (
UINT32 Address;
UINT16 Length;
- Status = InitializeAslUpdateLib ();
- ASSERT_EFI_ERROR (Status);
-
Address = (UINT32) (UINTN) mPchNvsAreaProtocol.Area;
Length = (UINT16) sizeof (PCH_NVS_AREA);
DEBUG ((DEBUG_INFO, "PatchPchNvsAreaAddress: PCH NVS Address %x Length %x\n", Address, Length));
diff --git a/Silicon/Intel/KabylakeSiliconPkg/Include/Library/AslUpdateLib.h b/Silicon/Intel/KabylakeSiliconPkg/Include/Library/AslUpdateLib.h
index d58b6d6458..215ca85a29 100644
--- a/Silicon/Intel/KabylakeSiliconPkg/Include/Library/AslUpdateLib.h
+++ b/Silicon/Intel/KabylakeSiliconPkg/Include/Library/AslUpdateLib.h
@@ -5,7 +5,7 @@
Make sure you meet the requirements for the library (protocol dependencies, use
restrictions, etc).
-Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2017 - 2020, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
@@ -16,61 +16,71 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
//
// Include files
//
+#include <Uefi/UefiBaseType.h>
#include <IndustryStandard/Acpi.h>
#include <Protocol/AcpiTable.h>
#include <Protocol/AcpiSystemDescriptionTable.h>
-//
-// AML parsing definitions
-//
-#define AML_RESRC_TEMP_END_TAG 0x0079
-
-//
-// ASL PSS package structure layout
-//
-#pragma pack (1)
-typedef struct {
- UINT8 NameOp; // 12h ;First opcode is a NameOp.
- UINT8 PackageLead; // 20h ;First opcode is a NameOp.
- UINT8 NumEntries; // 06h ;First opcode is a NameOp.
- UINT8 DwordPrefix1; // 0Ch
- UINT32 CoreFrequency; // 00h
- UINT8 DwordPrefix2; // 0Ch
- UINT32 Power; // 00h
- UINT8 DwordPrefix3; // 0Ch
- UINT32 TransLatency; // 00h
- UINT8 DwordPrefix4; // 0Ch
- UINT32 BmLatency; // 00h
- UINT8 DwordPrefix5; // 0Ch
- UINT32 Control; // 00h
- UINT8 DwordPrefix6; // 0Ch
- UINT32 Status; // 00h
-} PSS_PACKAGE_LAYOUT;
-#pragma pack()
/**
- Initialize the ASL update library state.
- This must be called prior to invoking other library functions.
+ This procedure will update immediate value assigned to a Name
+ @param[in] AslSignature The signature of Operation Region that we want to update.
+ @param[in] Buffer source of data to be written over original aml
+ @param[in] Length length of data to be overwritten
@retval EFI_SUCCESS The function completed successfully.
+ @retval EFI_NOT_FOUND Failed to locate AcpiTable.
+ @retval EFI_NOT_READY Not ready to locate AcpiTable.
+ @retval EFI_UNSUPPORTED The function is not supported in this library.
**/
EFI_STATUS
-InitializeAslUpdateLib (
- VOID
+EFIAPI
+UpdateNameAslCode (
+ IN UINT32 AslSignature,
+ IN VOID *Buffer,
+ IN UINTN Length
);
/**
- This procedure will update immediate value assigned to a Name
+ This procedure will update the name of ASL Method
+
+ @param[in] TableId - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
+ @param[in] TableIdSize - Length of the TableId to match. Table ID are 8 bytes long, this function
+ @param[in] AslSignature - The signature of Operation Region that we want to update.
+ @param[in] Buffer - source of data to be written over original aml
+ @param[in] Length - length of data to be overwritten
+
+ @retval EFI_SUCCESS - The function completed successfully.
+ @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
+ @retval EFI_NOT_READY - Not ready to locate AcpiTable.
+ @retval EFI_UNSUPPORTED - The function is not supported in this library.
+**/
+EFI_STATUS
+EFIAPI
+UpdateSsdtNameAslCode (
+ IN UINT8 *TableId,
+ IN UINT8 TableIdSize,
+ IN UINT32 AslSignature,
+ IN VOID *Buffer,
+ IN UINTN Length
+ );
- @param[in] AslSignature The signature of Operation Region that we want to update.
- @param[in] Buffer source of data to be written over original aml
- @param[in] Length length of data to be overwritten
+/**
+ This procedure will update the name of ASL Method
- @retval EFI_SUCCESS The function completed successfully.
+ @param[in] AslSignature - The signature of Operation Region that we want to update.
+ @param[in] Buffer - source of data to be written over original aml
+ @param[in] Length - length of data to be overwritten
+
+ @retval EFI_SUCCESS - The function completed successfully.
+ @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
+ @retval EFI_NOT_READY - Not ready to locate AcpiTable.
+ @retval EFI_UNSUPPORTED - The function is not supported in this library.
**/
EFI_STATUS
-UpdateNameAslCode(
+EFIAPI
+UpdateMethodAslCode (
IN UINT32 AslSignature,
IN VOID *Buffer,
IN UINTN Length
@@ -86,55 +96,19 @@ UpdateNameAslCode(
@param[in] Signature Pointer to an ASCII string containing the Signature to match
@param[in, out] Table Updated with a pointer to the table
@param[in, out] Handle AcpiSupport protocol table handle for the table found
- @param[in, out] Version On input, the version of the table desired,
- on output, the versions the table belongs to
@see AcpiSupport protocol for details
@retval EFI_SUCCESS The function completed successfully.
+ @retval EFI_NOT_FOUND Failed to locate AcpiTable.
+ @retval EFI_NOT_READY Not ready to locate AcpiTable.
+ @retval EFI_UNSUPPORTED The function is not supported in this library.s
**/
EFI_STATUS
+EFIAPI
LocateAcpiTableBySignature (
IN UINT32 Signature,
IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
IN OUT UINTN *Handle
);
-/**
- This function uses the ACPI support protocol to locate an ACPI SSDT table.
- The table is located by searching for a matching OEM Table ID field.
- Partial match searches are supported via the TableIdSize parameter.
-
- @param[in] TableId Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
- @param[in] TableIdSize Length of the TableId to match. Table ID are 8 bytes long, this function
- will consider it a match if the first TableIdSize bytes match
- @param[in, out] Table Updated with a pointer to the table
- @param[in, out] Handle AcpiSupport protocol table handle for the table found
- @param[in, out] Version See AcpiSupport protocol, GetAcpiTable function for use
-
- @retval EFI_SUCCESS The function completed successfully.
-**/
-EFI_STATUS
-LocateAcpiTableByOemTableId (
- IN UINT8 *TableId,
- IN UINT8 TableIdSize,
- IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
- IN OUT UINTN *Handle
- );
-
-/**
- This function calculates and updates an UINT8 checksum.
-
- @param[in] Buffer Pointer to buffer to checksum
- @param[in] Size Number of bytes to checksum
- @param[in] ChecksumOffset Offset to place the checksum result in
-
- @retval EFI_SUCCESS The function completed successfully.
-**/
-EFI_STATUS
-AcpiChecksum (
- IN VOID *Buffer,
- IN UINTN Size,
- IN UINTN ChecksumOffset
- );
-
#endif
--
2.16.2.windows.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [edk2-platforms:PATCH v4 6/7] CoffeelakeSiliconPkg/DxeAslUpdateLib: Cleans up APIs
2020-04-29 2:31 [edk2-platforms:PATCH v4 0/7] IntelSiliconPkg DxeAslUpdateLib support Miki Shindo
` (4 preceding siblings ...)
2020-04-29 2:32 ` [edk2-platforms:PATCH v4 5/7] KabylakeSiliconPkg/DxeAslUpdateLib: " Miki Shindo
@ 2020-04-29 2:32 ` Miki Shindo
2020-04-30 2:57 ` Chiu, Chasel
2020-04-30 5:03 ` Chaganty, Rangasai V
2020-04-29 2:32 ` [edk2-platforms:PATCH v4 7/7] IntelSiliconPkg/DxeAslUpdateLib: Add DxeAslUpdateLib support Miki Shindo
2020-04-30 8:14 ` [edk2-platforms:PATCH v4 0/7] IntelSiliconPkg " Ni, Ray
7 siblings, 2 replies; 23+ messages in thread
From: Miki Shindo @ 2020-04-29 2:32 UTC (permalink / raw)
To: devel; +Cc: Sai Chaganty, Chasel Chiu, Nate DeSimone, Prince Agyeman, Ray Ni
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2536
Callers of DxeAslUpdateLib don't have to call InitializeAslUpdateLib()
but the library itself runs it internally. This commit deletes
the redundant calls in caller side and makes it an internal call.
LocateAcpiTableByOemTableId() is unreferenced externally
so this commit makes it an internal call.
PSS_PACKAGE_LAYOUT and AML_RESRC_TEMP_END_TAG are both unreferenced
so they are removed.
AslUpdateLib.h is cleaned up accordingly.
Signed-off-by: Miki Shindo <miki.shindo@intel.com>
Cc: Sai Chaganty <rangasai.v.chaganty@intel.com>
Cc: Chasel Chiu <chasel.chiu@intel.com>
Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
Cc: Prince Agyeman <prince.agyeman@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
---
Silicon/Intel/CoffeelakeSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib.c | 190 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------------------------------------------------------------------
Silicon/Intel/CoffeelakeSiliconPkg/Library/DxeAslUpdateLibNull/DxeAslUpdateLibNull.c | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------
Silicon/Intel/CoffeelakeSiliconPkg/Pch/PchInit/Dxe/PchAcpi.c | 3 ---
Silicon/Intel/CoffeelakeSiliconPkg/Include/Library/AslUpdateLib.h | 114 +++++++++++++++++++++++++++++++++++-------------------------------------------------------------------------------
4 files changed, 180 insertions(+), 221 deletions(-)
diff --git a/Silicon/Intel/CoffeelakeSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib.c b/Silicon/Intel/CoffeelakeSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib.c
index 04cf66fd2f..f18ca835ad 100644
--- a/Silicon/Intel/CoffeelakeSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib.c
+++ b/Silicon/Intel/CoffeelakeSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib.c
@@ -6,7 +6,7 @@
This library uses the ACPI Support protocol.
- Copyright (c) 2019 Intel Corporation. All rights reserved. <BR>
+ Copyright (c) 2019 -2020, Intel Corporation. All rights reserved. <BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
@@ -51,6 +51,62 @@ InitializeAslUpdateLib (
return Status;
}
+/**
+ This function uses the ACPI SDT protocol to locate an ACPI SSDT table.
+
+ @param[in] TableId - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
+ @param[in] TableIdSize - Length of the TableId to match. Table ID are 8 bytes long, this function
+ will consider it a match if the first TableIdSize bytes match
+ @param[in, out] Table - Updated with a pointer to the table
+ @param[in, out] Handle - AcpiSupport protocol table handle for the table found
+
+ @retval EFI_SUCCESS - The function completed successfully.
+ @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
+ @retval EFI_NOT_READY - Not ready to locate AcpiTable.
+**/
+EFI_STATUS
+LocateAcpiTableByOemTableId (
+ IN UINT8 *TableId,
+ IN UINT8 TableIdSize,
+ IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
+ IN OUT UINTN *Handle
+ )
+{
+ EFI_STATUS Status;
+ INTN Index;
+ EFI_ACPI_TABLE_VERSION Version;
+ EFI_ACPI_DESCRIPTION_HEADER *OrgTable;
+
+ if (mAcpiSdt == NULL) {
+ InitializeAslUpdateLib ();
+ if (mAcpiSdt == NULL) {
+ return EFI_NOT_READY;
+ }
+ }
+ ///
+ /// Locate table with matching ID
+ ///
+ Version = 0;
+ Index = 0;
+ do {
+ Status = mAcpiSdt->GetAcpiTable (Index, (EFI_ACPI_SDT_HEADER **)&OrgTable, &Version, Handle);
+ if (Status == EFI_NOT_FOUND) {
+ break;
+ }
+ ASSERT_EFI_ERROR (Status);
+ Index++;
+ } while (CompareMem (&(OrgTable->OemTableId), TableId, TableIdSize));
+
+ if (Status != EFI_NOT_FOUND) {
+ *Table = AllocateCopyPool (OrgTable->Length, OrgTable);
+ ASSERT (*Table);
+ }
+
+ ///
+ /// If we found the table, there will be no error.
+ ///
+ return Status;
+}
/**
This procedure will update immediate value assigned to a Name
@@ -61,8 +117,10 @@ InitializeAslUpdateLib (
@retval EFI_SUCCESS - The function completed successfully.
@retval EFI_NOT_FOUND - Failed to locate AcpiTable.
+ @retval EFI_NOT_READY - Not ready to locate AcpiTable.
**/
EFI_STATUS
+EFIAPI
UpdateNameAslCode (
IN UINT32 AslSignature,
IN VOID *Buffer,
@@ -154,6 +212,29 @@ UpdateNameAslCode (
return EFI_NOT_FOUND;
}
+/**
+ This procedure will update immediate value assigned to a Name in SSDT table
+
+ @param[in] TableId - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
+ @param[in] TableIdSize - Length of the TableId to match. Table ID are 8 bytes long, this function
+ @param[in] Buffer - source of data to be written over original aml
+ @param[in] Length - length of data to be overwritten
+
+ @retval EFI_UNSUPPORTED The function is not supported in this library.
+**/
+EFI_STATUS
+EFIAPI
+UpdateSsdtNameAslCode (
+ IN UINT8 *TableId,
+ IN UINT8 TableIdSize,
+ IN UINT32 AslSignature,
+ IN VOID *Buffer,
+ IN UINTN Length
+ )
+{
+ return EFI_UNSUPPORTED;
+}
+
/**
This procedure will update the name of ASL Method
@@ -163,8 +244,10 @@ UpdateNameAslCode (
@retval EFI_SUCCESS - The function completed successfully.
@retval EFI_NOT_FOUND - Failed to locate AcpiTable.
+ @retval EFI_NOT_READY - Not ready to locate AcpiTable.
**/
EFI_STATUS
+EFIAPI
UpdateMethodAslCode (
IN UINT32 AslSignature,
IN VOID *Buffer,
@@ -253,11 +336,13 @@ UpdateMethodAslCode (
@param[in] Signature - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
@param[in, out] Table - Updated with a pointer to the table
@param[in, out] Handle - AcpiSupport protocol table handle for the table found
- @param[in, out] Version - The version of the table desired
@retval EFI_SUCCESS - The function completed successfully.
+ @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
+ @retval EFI_NOT_READY - Not ready to locate AcpiTable.
**/
EFI_STATUS
+EFIAPI
LocateAcpiTableBySignature (
IN UINT32 Signature,
IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
@@ -300,104 +385,3 @@ LocateAcpiTableBySignature (
///
return Status;
}
-
-/**
- This function uses the ACPI SDT protocol to locate an ACPI SSDT table.
-
- @param[in] TableId - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
- @param[in] TableIdSize - Length of the TableId to match. Table ID are 8 bytes long, this function
- will consider it a match if the first TableIdSize bytes match
- @param[in, out] Table - Updated with a pointer to the table
- @param[in, out] Handle - AcpiSupport protocol table handle for the table found
- @param[in, out] Version - See AcpiSupport protocol, GetAcpiTable function for use
-
- @retval EFI_SUCCESS - The function completed successfully.
-**/
-EFI_STATUS
-LocateAcpiTableByOemTableId (
- IN UINT8 *TableId,
- IN UINT8 TableIdSize,
- IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
- IN OUT UINTN *Handle
- )
-{
- EFI_STATUS Status;
- INTN Index;
- EFI_ACPI_TABLE_VERSION Version;
- EFI_ACPI_DESCRIPTION_HEADER *OrgTable;
-
- if (mAcpiSdt == NULL) {
- InitializeAslUpdateLib ();
- if (mAcpiSdt == NULL) {
- return EFI_NOT_READY;
- }
- }
- ///
- /// Locate table with matching ID
- ///
- Version = 0;
- Index = 0;
- do {
- Status = mAcpiSdt->GetAcpiTable (Index, (EFI_ACPI_SDT_HEADER **)&OrgTable, &Version, Handle);
- if (Status == EFI_NOT_FOUND) {
- break;
- }
- ASSERT_EFI_ERROR (Status);
- Index++;
- } while (CompareMem (&(OrgTable->OemTableId), TableId, TableIdSize));
-
- if (Status != EFI_NOT_FOUND) {
- *Table = AllocateCopyPool (OrgTable->Length, OrgTable);
- ASSERT (*Table);
- }
-
- ///
- /// If we found the table, there will be no error.
- ///
- return Status;
-}
-
-/**
- This function calculates and updates an UINT8 checksum.
-
- @param[in] Buffer Pointer to buffer to checksum
- @param[in] Size Number of bytes to checksum
- @param[in] ChecksumOffset Offset to place the checksum result in
-
- @retval EFI_SUCCESS The function completed successfully.
-**/
-EFI_STATUS
-AcpiChecksum (
- IN VOID *Buffer,
- IN UINTN Size,
- IN UINTN ChecksumOffset
- )
-{
- UINT8 Sum;
- UINT8 *Ptr;
-
- Sum = 0;
- ///
- /// Initialize pointer
- ///
- Ptr = Buffer;
-
- ///
- /// set checksum to 0 first
- ///
- Ptr[ChecksumOffset] = 0;
-
- ///
- /// add all content of buffer
- ///
- while (Size--) {
- Sum = (UINT8) (Sum + (*Ptr++));
- }
- ///
- /// set checksum
- ///
- Ptr = Buffer;
- Ptr[ChecksumOffset] = (UINT8) (0xff - Sum + 1);
-
- return EFI_SUCCESS;
-}
diff --git a/Silicon/Intel/CoffeelakeSiliconPkg/Library/DxeAslUpdateLibNull/DxeAslUpdateLibNull.c b/Silicon/Intel/CoffeelakeSiliconPkg/Library/DxeAslUpdateLibNull/DxeAslUpdateLibNull.c
index a7ce92b7c3..63e232f04b 100644
--- a/Silicon/Intel/CoffeelakeSiliconPkg/Library/DxeAslUpdateLibNull/DxeAslUpdateLibNull.c
+++ b/Silicon/Intel/CoffeelakeSiliconPkg/Library/DxeAslUpdateLibNull/DxeAslUpdateLibNull.c
@@ -6,7 +6,7 @@
This library uses the ACPI Support protocol.
- Copyright (c) 2019 Intel Corporation. All rights reserved. <BR>
+ Copyright (c) 2019 - 2020, Intel Corporation. All rights reserved. <BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
@@ -40,6 +40,27 @@ InitializeAslUpdateLib (
return EFI_SUCCESS;
}
+/**
+ This function uses the ACPI SDT protocol to locate an ACPI SSDT table.
+
+ @param[in] TableId - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
+ @param[in] TableIdSize - Length of the TableId to match. Table ID are 8 bytes long, this function
+ will consider it a match if the first TableIdSize bytes match
+ @param[in, out] Table - Updated with a pointer to the table
+ @param[in, out] Handle - AcpiSupport protocol table handle for the table found
+
+ @retval EFI_SUCCESS - The function completed successfully.
+**/
+EFI_STATUS
+LocateAcpiTableByOemTableId (
+ IN UINT8 *TableId,
+ IN UINT8 TableIdSize,
+ IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
+ IN OUT UINTN *Handle
+ )
+{
+ return EFI_SUCCESS;
+}
/**
This procedure will update immediate value assigned to a Name
@@ -51,6 +72,7 @@ InitializeAslUpdateLib (
@retval EFI_SUCCESS - The function completed successfully.
**/
EFI_STATUS
+EFIAPI
UpdateNameAslCode (
IN UINT32 AslSignature,
IN VOID *Buffer,
@@ -60,66 +82,66 @@ UpdateNameAslCode (
return EFI_SUCCESS;
}
-
/**
- This function uses the ACPI SDT protocol to locate an ACPI table.
- It is really only useful for finding tables that only have a single instance,
- e.g. FADT, FACS, MADT, etc. It is not good for locating SSDT, etc.
+ This procedure will update immediate value assigned to a Name in SSDT table
- @param[in] Signature - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
- @param[in, out] Table - Updated with a pointer to the table
- @param[in, out] Handle - AcpiSupport protocol table handle for the table found
- @param[in, out] Version - The version of the table desired
+ @param[in] TableId - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
+ @param[in] TableIdSize - Length of the TableId to match. Table ID are 8 bytes long, this function
+ @param[in] Buffer - source of data to be written over original aml
+ @param[in] Length - length of data to be overwritten
- @retval EFI_SUCCESS - The function completed successfully.
+ @retval EFI_SUCCESS - The function completed successfully.
**/
EFI_STATUS
-LocateAcpiTableBySignature (
- IN UINT32 Signature,
- IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
- IN OUT UINTN *Handle
+EFIAPI
+UpdateSsdtNameAslCode (
+ IN UINT8 *TableId,
+ IN UINT8 TableIdSize,
+ IN UINT32 AslSignature,
+ IN VOID *Buffer,
+ IN UINTN Length
)
{
return EFI_SUCCESS;
}
/**
- This function uses the ACPI SDT protocol to locate an ACPI SSDT table.
+ This procedure will update the name of ASL Method
- @param[in] TableId - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
- @param[in] TableIdSize - Length of the TableId to match. Table ID are 8 bytes long, this function
- will consider it a match if the first TableIdSize bytes match
- @param[in, out] Table - Updated with a pointer to the table
- @param[in, out] Handle - AcpiSupport protocol table handle for the table found
- @param[in, out] Version - See AcpiSupport protocol, GetAcpiTable function for use
+ @param[in] AslSignature - The signature of Operation Region that we want to update.
+ @param[in] Buffer - source of data to be written over original aml
+ @param[in] Length - length of data to be overwritten
@retval EFI_SUCCESS - The function completed successfully.
**/
EFI_STATUS
-LocateAcpiTableByOemTableId (
- IN UINT8 *TableId,
- IN UINT8 TableIdSize,
- IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
- IN OUT UINTN *Handle
+EFIAPI
+UpdateMethodAslCode (
+ IN UINT32 AslSignature,
+ IN VOID *Buffer,
+ IN UINTN Length
)
{
return EFI_SUCCESS;
}
/**
- This function calculates and updates an UINT8 checksum.
-
- @param[in] Buffer Pointer to buffer to checksum
- @param[in] Size Number of bytes to checksum
- @param[in] ChecksumOffset Offset to place the checksum result in
+ This function uses the ACPI SDT protocol to locate an ACPI table.
+ It is really only useful for finding tables that only have a single instance,
+ e.g. FADT, FACS, MADT, etc. It is not good for locating SSDT, etc.
- @retval EFI_SUCCESS The function completed successfully.
+ @param[in] Signature - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
+ @param[in, out] Table - Updated with a pointer to the table
+ @param[in, out] Handle - AcpiSupport protocol table handle for the table found
+s
+ @retval EFI_SUCCESS - The function completed successfully.
**/
EFI_STATUS
-AcpiChecksum (
- IN VOID *Buffer,
- IN UINTN Size,
- IN UINTN ChecksumOffset
+EFIAPI
+LocateAcpiTableBySignature (
+ IN UINT32 Signature,
+ IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
+ IN OUT UINTN *Handle
)
{
return EFI_SUCCESS;
diff --git a/Silicon/Intel/CoffeelakeSiliconPkg/Pch/PchInit/Dxe/PchAcpi.c b/Silicon/Intel/CoffeelakeSiliconPkg/Pch/PchInit/Dxe/PchAcpi.c
index 12f1a7f4fe..807cdb92f7 100644
--- a/Silicon/Intel/CoffeelakeSiliconPkg/Pch/PchInit/Dxe/PchAcpi.c
+++ b/Silicon/Intel/CoffeelakeSiliconPkg/Pch/PchInit/Dxe/PchAcpi.c
@@ -438,9 +438,6 @@ PatchPchNvsAreaAddress (
UINT32 Address;
UINT16 Length;
- Status = InitializeAslUpdateLib ();
- ASSERT_EFI_ERROR (Status);
-
Address = (UINT32) (UINTN) mPchNvsAreaProtocol.Area;
Length = (UINT16) sizeof (PCH_NVS_AREA);
DEBUG ((DEBUG_INFO, "PatchPchNvsAreaAddress: PCH NVS Address %x Length %x\n", Address, Length));
diff --git a/Silicon/Intel/CoffeelakeSiliconPkg/Include/Library/AslUpdateLib.h b/Silicon/Intel/CoffeelakeSiliconPkg/Include/Library/AslUpdateLib.h
index 39baa6c03a..1a0ec4fa16 100644
--- a/Silicon/Intel/CoffeelakeSiliconPkg/Include/Library/AslUpdateLib.h
+++ b/Silicon/Intel/CoffeelakeSiliconPkg/Include/Library/AslUpdateLib.h
@@ -5,7 +5,7 @@
Make sure you meet the requirements for the library (protocol dependencies, use
restrictions, etc).
- Copyright (c) 2019 Intel Corporation. All rights reserved. <BR>
+ Copyright (c) 2019 - 2020, Intel Corporation. All rights reserved. <BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
@@ -16,61 +16,50 @@
//
// Include files
//
+#include <Uefi/UefiBaseType.h>
#include <IndustryStandard/Acpi.h>
#include <Protocol/AcpiTable.h>
#include <Protocol/AcpiSystemDescriptionTable.h>
-//
-// AML parsing definitions
-//
-#define AML_RESRC_TEMP_END_TAG 0x0079
-
-//
-// ASL PSS package structure layout
-//
-#pragma pack (1)
-typedef struct {
- UINT8 NameOp; // 12h ;First opcode is a NameOp.
- UINT8 PackageLead; // 20h ;First opcode is a NameOp.
- UINT8 NumEntries; // 06h ;First opcode is a NameOp.
- UINT8 DwordPrefix1; // 0Ch
- UINT32 CoreFrequency; // 00h
- UINT8 DwordPrefix2; // 0Ch
- UINT32 Power; // 00h
- UINT8 DwordPrefix3; // 0Ch
- UINT32 TransLatency; // 00h
- UINT8 DwordPrefix4; // 0Ch
- UINT32 BmLatency; // 00h
- UINT8 DwordPrefix5; // 0Ch
- UINT32 Control; // 00h
- UINT8 DwordPrefix6; // 0Ch
- UINT32 Status; // 00h
-} PSS_PACKAGE_LAYOUT;
-#pragma pack()
-
/**
- Initialize the ASL update library state.
- This must be called prior to invoking other library functions.
+ This procedure will update immediate value assigned to a Name
+ @param[in] AslSignature The signature of Operation Region that we want to update.
+ @param[in] Buffer source of data to be written over original aml
+ @param[in] Length length of data to be overwritten
@retval EFI_SUCCESS The function completed successfully.
+ @retval EFI_NOT_FOUND Failed to locate AcpiTable.
+ @retval EFI_NOT_READY Not ready to locate AcpiTable.
+ @retval EFI_UNSUPPORTED The function is not supported in this library.
**/
EFI_STATUS
-InitializeAslUpdateLib (
- VOID
+EFIAPI
+UpdateNameAslCode(
+ IN UINT32 AslSignature,
+ IN VOID *Buffer,
+ IN UINTN Length
);
/**
- This procedure will update immediate value assigned to a Name
+ This procedure will update the name of ASL Method
- @param[in] AslSignature The signature of Operation Region that we want to update.
- @param[in] Buffer source of data to be written over original aml
- @param[in] Length length of data to be overwritten
+ @param[in] TableId - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
+ @param[in] TableIdSize - Length of the TableId to match. Table ID are 8 bytes long, this function
+ @param[in] AslSignature - The signature of Operation Region that we want to update.
+ @param[in] Buffer - source of data to be written over original aml
+ @param[in] Length - length of data to be overwritten
- @retval EFI_SUCCESS The function completed successfully.
+ @retval EFI_SUCCESS - The function completed successfully.
+ @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
+ @retval EFI_NOT_READY - Not ready to locate AcpiTable.
+ @retval EFI_UNSUPPORTED - The function is not supported in this library.
**/
EFI_STATUS
-UpdateNameAslCode(
+EFIAPI
+UpdateSsdtNameAslCode (
+ IN UINT8 *TableId,
+ IN UINT8 TableIdSize,
IN UINT32 AslSignature,
IN VOID *Buffer,
IN UINTN Length
@@ -85,8 +74,11 @@ UpdateNameAslCode(
@retval EFI_SUCCESS - The function completed successfully.
@retval EFI_NOT_FOUND - Failed to locate AcpiTable.
+ @retval EFI_NOT_READY - Not ready to locate AcpiTable.
+ @retval EFI_UNSUPPORTED - The function is not supported in this library.
**/
EFI_STATUS
+EFIAPI
UpdateMethodAslCode (
IN UINT32 AslSignature,
IN VOID *Buffer,
@@ -103,55 +95,19 @@ UpdateMethodAslCode (
@param[in] Signature Pointer to an ASCII string containing the Signature to match
@param[in, out] Table Updated with a pointer to the table
@param[in, out] Handle AcpiSupport protocol table handle for the table found
- @param[in, out] Version On input, the version of the table desired,
- on output, the versions the table belongs to
@see AcpiSupport protocol for details
@retval EFI_SUCCESS The function completed successfully.
+ @retval EFI_NOT_FOUND Failed to locate AcpiTable.
+ @retval EFI_NOT_READY Not ready to locate AcpiTable.
+ @retval EFI_UNSUPPORTED The function is not supported in this library.
**/
EFI_STATUS
+EFIAPI
LocateAcpiTableBySignature (
IN UINT32 Signature,
IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
IN OUT UINTN *Handle
);
-/**
- This function uses the ACPI support protocol to locate an ACPI SSDT table.
- The table is located by searching for a matching OEM Table ID field.
- Partial match searches are supported via the TableIdSize parameter.
-
- @param[in] TableId Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
- @param[in] TableIdSize Length of the TableId to match. Table ID are 8 bytes long, this function
- will consider it a match if the first TableIdSize bytes match
- @param[in, out] Table Updated with a pointer to the table
- @param[in, out] Handle AcpiSupport protocol table handle for the table found
- @param[in, out] Version See AcpiSupport protocol, GetAcpiTable function for use
-
- @retval EFI_SUCCESS The function completed successfully.
-**/
-EFI_STATUS
-LocateAcpiTableByOemTableId (
- IN UINT8 *TableId,
- IN UINT8 TableIdSize,
- IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
- IN OUT UINTN *Handle
- );
-
-/**
- This function calculates and updates an UINT8 checksum.
-
- @param[in] Buffer Pointer to buffer to checksum
- @param[in] Size Number of bytes to checksum
- @param[in] ChecksumOffset Offset to place the checksum result in
-
- @retval EFI_SUCCESS The function completed successfully.
-**/
-EFI_STATUS
-AcpiChecksum (
- IN VOID *Buffer,
- IN UINTN Size,
- IN UINTN ChecksumOffset
- );
-
#endif
--
2.16.2.windows.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [edk2-platforms:PATCH v4 7/7] IntelSiliconPkg/DxeAslUpdateLib: Add DxeAslUpdateLib support
2020-04-29 2:31 [edk2-platforms:PATCH v4 0/7] IntelSiliconPkg DxeAslUpdateLib support Miki Shindo
` (5 preceding siblings ...)
2020-04-29 2:32 ` [edk2-platforms:PATCH v4 6/7] CoffeelakeSiliconPkg/DxeAslUpdateLib: " Miki Shindo
@ 2020-04-29 2:32 ` Miki Shindo
2020-04-30 2:57 ` Chiu, Chasel
2020-04-30 5:13 ` Chaganty, Rangasai V
2020-04-30 8:14 ` [edk2-platforms:PATCH v4 0/7] IntelSiliconPkg " Ni, Ray
7 siblings, 2 replies; 23+ messages in thread
From: Miki Shindo @ 2020-04-29 2:32 UTC (permalink / raw)
To: devel; +Cc: Sai Chaganty, Chasel Chiu, Nate DeSimone, Prince Agyeman, Ray Ni
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2536
This commit adds DxeAslUpdateLib library support in IntelSiliconPkg,
which allows AML to be updated in DXE.
Signed-off-by: Miki Shindo <miki.shindo@intel.com>
Cc: Sai Chaganty <rangasai.v.chaganty@intel.com>
Cc: Chasel Chiu <chasel.chiu@intel.com>
Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
Cc: Prince Agyeman <prince.agyeman@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
Acked-by: Chasel Chiu <chasel.chiu@intel.com>
Acked-by: Nate DeSimone <nathaniel.l.desimone@intel.com>
---
Silicon/Intel/IntelSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib.c | 518 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Silicon/Intel/IntelSiliconPkg/Include/Library/AslUpdateLib.h | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Silicon/Intel/IntelSiliconPkg/IntelSiliconPkg.dec | 4 ++++
Silicon/Intel/IntelSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib.inf | 42 ++++++++++++++++++++++++++++++++++++++++++
4 files changed, 680 insertions(+)
diff --git a/Silicon/Intel/IntelSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib.c b/Silicon/Intel/IntelSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib.c
new file mode 100644
index 0000000000..9b3117536a
--- /dev/null
+++ b/Silicon/Intel/IntelSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib.c
@@ -0,0 +1,518 @@
+/** @file
+ Boot service DXE ASL update library implementation.
+ Note that the current version of the library updates AML.
+
+ These functions in this file can be called during DXE and cannot be called during runtime
+ or in SMM which should use a RT or SMM library.
+
+ This library uses the ACPI Support protocol.
+
+ Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <Base.h>
+#include <Uefi/UefiBaseType.h>
+#include <Uefi/UefiSpec.h>
+#include <Library/UefiBootServicesTableLib.h>
+#include <Library/DebugLib.h>
+#include <Library/UefiLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/MemoryAllocationLib.h>
+
+#include <Library/AslUpdateLib.h>
+
+//
+// Function implemenations
+//
+static EFI_ACPI_SDT_PROTOCOL *mAcpiSdt = NULL;
+static EFI_ACPI_TABLE_PROTOCOL *mAcpiTable = NULL;
+
+/**
+ Initialize the ASL update library state.
+ This must be called prior to invoking other library functions.
+
+ @retval EFI_SUCCESS - The function completed successfully.
+**/
+EFI_STATUS
+InitializeAslUpdateLib (
+ VOID
+ )
+{
+ EFI_STATUS Status;
+
+ ///
+ /// Locate ACPI tables
+ ///
+ Status = gBS->LocateProtocol (&gEfiAcpiSdtProtocolGuid, NULL, (VOID **) &mAcpiSdt);
+ ASSERT_EFI_ERROR (Status);
+ Status = gBS->LocateProtocol (&gEfiAcpiTableProtocolGuid, NULL, (VOID **) &mAcpiTable);
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+}
+
+/**
+ This function calculates and updates an UINT8 checksum.
+
+ @param Buffer Pointer to buffer to checksum
+ @param Size Number of bytes to checksum
+ @param ChecksumOffset Offset to place the checksum result in
+
+ @retval EFI_SUCCESS The function completed successfully.
+**/
+EFI_STATUS
+AcpiPlatformChecksum (
+ IN VOID *Buffer,
+ IN UINTN Size,
+ IN UINTN ChecksumOffset
+ )
+{
+ UINT8 Sum;
+ UINT8 *Ptr;
+
+ Sum = 0;
+ //
+ // Initialize pointer
+ //
+ Ptr = Buffer;
+
+ //
+ // set checksum to 0 first
+ //
+ Ptr[ChecksumOffset] = 0;
+
+ //
+ // add all content of buffer
+ //
+ while ((Size--) != 0) {
+ Sum = (UINT8) (Sum + (*Ptr++));
+ }
+ //
+ // set checksum
+ //
+ Ptr = Buffer;
+ Ptr[ChecksumOffset] = (UINT8) (0xff - Sum + 1);
+
+ return EFI_SUCCESS;
+}
+
+
+/**
+ This function uses the ACPI SDT protocol to locate an ACPI SSDT table.
+
+ @param[in] TableId - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
+ @param[in] TableIdSize - Length of the TableId to match. Table ID are 8 bytes long, this function
+ will consider it a match if the first TableIdSize bytes match
+ @param[in, out] Table - Updated with a pointer to the table
+ @param[in, out] Handle - AcpiSupport protocol table handle for the table found
+
+ @retval EFI_SUCCESS - The function completed successfully.
+ @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
+ @retval EFI_NOT_READY - Not ready to locate AcpiTable.
+**/
+EFI_STATUS
+LocateAcpiTableByOemTableId (
+ IN UINT8 *TableId,
+ IN UINT8 TableIdSize,
+ IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
+ IN OUT UINTN *Handle
+ )
+{
+ EFI_STATUS Status;
+ INTN Index;
+ EFI_ACPI_TABLE_VERSION Version;
+ EFI_ACPI_DESCRIPTION_HEADER *OrgTable;
+
+ if (mAcpiSdt == NULL) {
+ InitializeAslUpdateLib ();
+ if (mAcpiSdt == NULL) {
+ return EFI_NOT_READY;
+ }
+ }
+ ///
+ /// Locate table with matching ID
+ ///
+ Version = 0;
+ Index = 0;
+ do {
+ Status = mAcpiSdt->GetAcpiTable (Index, (EFI_ACPI_SDT_HEADER **)&OrgTable, &Version, Handle);
+ if (Status == EFI_NOT_FOUND) {
+ break;
+ }
+ ASSERT_EFI_ERROR (Status);
+ Index++;
+ } while (CompareMem (&(OrgTable->OemTableId), TableId, TableIdSize));
+
+ if (Status != EFI_NOT_FOUND) {
+ *Table = OrgTable;
+ ASSERT (*Table);
+ }
+
+ ///
+ /// If we found the table, there will be no error.
+ ///
+ return Status;
+}
+
+/**
+ This procedure will update immediate value assigned to a Name
+
+ @param[in] AslSignature - The signature of Operation Region that we want to update.
+ @param[in] Buffer - source of data to be written over original aml
+ @param[in] Length - length of data to be overwritten
+
+ @retval EFI_SUCCESS - The function completed successfully.
+ @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
+ @retval EFI_NOT_READY - Not ready to locate AcpiTable.
+**/
+EFI_STATUS
+EFIAPI
+UpdateNameAslCode (
+ IN UINT32 AslSignature,
+ IN VOID *Buffer,
+ IN UINTN Length
+ )
+{
+ EFI_STATUS Status;
+ EFI_ACPI_DESCRIPTION_HEADER *Table;
+ UINT8 *CurrPtr;
+ UINT8 *EndPtr;
+ UINT32 *Signature;
+ UINT8 *DsdtPointer;
+ UINTN Handle;
+ UINT8 DataSize;
+
+ if (mAcpiTable == NULL) {
+ InitializeAslUpdateLib ();
+ if (mAcpiTable == NULL) {
+ return EFI_NOT_READY;
+ }
+ }
+
+ ///
+ /// Locate table with matching ID
+ ///
+ Handle = 0;
+ Status = LocateAcpiTableBySignature (
+ EFI_ACPI_3_0_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE,
+ (EFI_ACPI_DESCRIPTION_HEADER **) &Table,
+ &Handle
+ );
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ ///
+ /// Point to the beginning of the DSDT table
+ ///
+ CurrPtr = (UINT8 *) Table;
+ if (CurrPtr == NULL) {
+ return EFI_NOT_FOUND;
+ }
+
+ //
+ // EndPtr = beginning of table + length of table
+ //
+ EndPtr = CurrPtr + ((EFI_ACPI_COMMON_HEADER *) CurrPtr)->Length;
+
+ ///
+ /// Loop through the ASL looking for values that we must fix up.
+ ///
+ for (DsdtPointer = CurrPtr; DsdtPointer < EndPtr; DsdtPointer++) {
+ ///
+ /// Get a pointer to compare for signature
+ ///
+ Signature = (UINT32 *) DsdtPointer;
+ ///
+ /// Check if this is the Device Object signature we are looking for
+ ///
+ if ((*Signature) == AslSignature) {
+ ///
+ /// Look for Name Encoding
+ ///
+ if (*(DsdtPointer-1) == AML_NAME_OP) {
+ ///
+ /// Check if size of new and old data is the same
+ ///
+ DataSize = *(DsdtPointer+4);
+ if ((Length == 1 && DataSize == 0xA) ||
+ (Length == 2 && DataSize == 0xB) ||
+ (Length == 4 && DataSize == 0xC)) {
+ CopyMem (DsdtPointer+5, Buffer, Length);
+ } else if (Length == 1 && ((*(UINT8*) Buffer) == 0 || (*(UINT8*) Buffer) == 1) && (DataSize == 0 || DataSize == 1)) {
+ CopyMem (DsdtPointer+4, Buffer, Length);
+ } else {
+ FreePool (Table);
+ return EFI_BAD_BUFFER_SIZE;
+ }
+ Status = mAcpiTable->UninstallAcpiTable (
+ mAcpiTable,
+ Handle
+ );
+ Handle = 0;
+ Status = mAcpiTable->InstallAcpiTable (
+ mAcpiTable,
+ Table,
+ Table->Length,
+ &Handle
+ );
+ FreePool (Table);
+ return Status;
+ }
+ }
+ }
+ return EFI_NOT_FOUND;
+}
+
+/**
+ This procedure will update immediate value assigned to a Name in SSDT table
+
+ @param[in] TableId - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
+ @param[in] TableIdSize - Length of the TableId to match. Table ID are 8 bytes long, this function
+ @param[in] AslSignature - The signature of Operation Region that we want to update.
+ @param[in] Buffer - source of data to be written over original aml
+ @param[in] Length - length of data to be overwritten
+
+ @retval EFI_SUCCESS - The function completed successfully.
+ @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
+ @retval EFI_NOT_READY - Not ready to locate AcpiTable.
+**/
+EFI_STATUS
+EFIAPI
+UpdateSsdtNameAslCode (
+ IN UINT8 *TableId,
+ IN UINT8 TableIdSize,
+ IN UINT32 AslSignature,
+ IN VOID *Buffer,
+ IN UINTN Length
+ )
+{
+ EFI_STATUS Status;
+ EFI_ACPI_DESCRIPTION_HEADER *Table;
+ UINT8 *CurrPtr;
+ UINT32 *Signature;
+ UINT8 *SsdtPointer;
+ UINTN Handle;
+ UINT8 DataSize;
+
+ if (mAcpiTable == NULL) {
+ InitializeAslUpdateLib ();
+ if (mAcpiTable == NULL) {
+ return EFI_NOT_READY;
+ }
+ }
+
+ ///
+ /// Locate table with matching ID
+ ///
+ Handle = 0;
+ Status = LocateAcpiTableByOemTableId (
+ TableId,
+ TableIdSize,
+ (EFI_ACPI_DESCRIPTION_HEADER **) &Table,
+ &Handle
+ );
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ ///
+ /// Point to the beginning of the DSDT table
+ ///
+ CurrPtr = (UINT8 *) Table;
+ if (CurrPtr == NULL) {
+ return EFI_NOT_FOUND;
+ }
+
+ ///
+ /// Loop through the ASL looking for values that we must fix up.
+ ///
+ for (SsdtPointer = CurrPtr; SsdtPointer <= (CurrPtr + ((EFI_ACPI_COMMON_HEADER *) CurrPtr)->Length); SsdtPointer++) {
+ ///
+ /// Get a pointer to compare for signature
+ ///
+ Signature = (UINT32 *) SsdtPointer;
+ ///
+ /// Check if this is the Device Object signature we are looking for
+ ///
+ if ((*Signature) == AslSignature) {
+ ///
+ /// Look for Name Encoding
+ ///
+ if (*(SsdtPointer-1) == AML_NAME_OP) {
+ ///
+ /// Check if size of new and old data is the same
+ ///
+ DataSize = *(SsdtPointer+4);
+ if ((Length == 1 && DataSize == 0xA) ||
+ (Length == 2 && DataSize == 0xB) ||
+ (Length == 4 && DataSize == 0xC)) {
+ CopyMem (SsdtPointer+5, Buffer, Length);
+ } else if (Length == 1 && ((*(UINT8*) Buffer) == 0 || (*(UINT8*) Buffer) == 1) && (DataSize == 0 || DataSize == 1)) {
+ CopyMem (SsdtPointer+4, Buffer, Length);
+ } else {
+ return EFI_BAD_BUFFER_SIZE;
+ }
+ AcpiPlatformChecksum (
+ Table,
+ Table->Length,
+ OFFSET_OF (EFI_ACPI_DESCRIPTION_HEADER,
+ Checksum)
+ );
+ return Status;
+ }
+ }
+ }
+ return EFI_NOT_FOUND;
+}
+
+/**
+ This procedure will update the name of ASL Method
+
+ @param[in] AslSignature - The signature of Operation Region that we want to update.
+ @param[in] Buffer - source of data to be written over original aml
+ @param[in] Length - length of data to be overwritten
+
+ @retval EFI_SUCCESS - The function completed successfully.
+ @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
+ @retval EFI_NOT_READY - Not ready to locate AcpiTable.
+**/
+EFI_STATUS
+EFIAPI
+UpdateMethodAslCode (
+ IN UINT32 AslSignature,
+ IN VOID *Buffer,
+ IN UINTN Length
+ )
+{
+ EFI_STATUS Status;
+ EFI_ACPI_DESCRIPTION_HEADER *Table;
+ UINT8 *CurrPtr;
+ UINT32 *Signature;
+ UINT8 *DsdtPointer;
+ UINTN Handle;
+
+ if (mAcpiTable == NULL) {
+ InitializeAslUpdateLib ();
+ if (mAcpiTable == NULL) {
+ return EFI_NOT_READY;
+ }
+ }
+
+ ///
+ /// Locate table with matching ID
+ ///
+ Handle = 0;
+ Status = LocateAcpiTableBySignature (
+ EFI_ACPI_3_0_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE,
+ (EFI_ACPI_DESCRIPTION_HEADER **) &Table,
+ &Handle
+ );
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ ///
+ /// Point to the beginning of the DSDT table
+ ///
+ CurrPtr = (UINT8 *) Table;
+ if (CurrPtr == NULL) {
+ return EFI_NOT_FOUND;
+ }
+
+ ///
+ /// Loop through the ASL looking for values that we must fix up.
+ ///
+ for (DsdtPointer = CurrPtr; DsdtPointer <= (CurrPtr + ((EFI_ACPI_COMMON_HEADER *) CurrPtr)->Length); DsdtPointer++) {
+ ///
+ /// Get a pointer to compare for signature
+ ///
+ Signature = (UINT32 *) DsdtPointer;
+ ///
+ /// Check if this is the Device Object signature we are looking for
+ ///
+ if ((*Signature) == AslSignature) {
+ ///
+ /// Look for Name Encoding
+ ///
+ if ((*(DsdtPointer-3) == AML_METHOD_OP)
+ || (*(DsdtPointer-2) == AML_METHOD_OP)
+ )
+ {
+ CopyMem (DsdtPointer, Buffer, Length);
+ Status = mAcpiTable->UninstallAcpiTable (
+ mAcpiTable,
+ Handle
+ );
+ Handle = 0;
+ Status = mAcpiTable->InstallAcpiTable (
+ mAcpiTable,
+ Table,
+ Table->Length,
+ &Handle
+ );
+ FreePool (Table);
+ return Status;
+ }
+ }
+ }
+ return EFI_NOT_FOUND;
+}
+
+/**
+ This function uses the ACPI SDT protocol to locate an ACPI table.
+ It is really only useful for finding tables that only have a single instance,
+ e.g. FADT, FACS, MADT, etc. It is not good for locating SSDT, etc.
+
+ @param[in] Signature - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
+ @param[in, out] Table - Updated with a pointer to the table
+ @param[in, out] Handle - AcpiSupport protocol table handle for the table found
+
+ @retval EFI_SUCCESS - The function completed successfully.
+ @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
+ @retval EFI_NOT_READY - Not ready to locate AcpiTable.
+**/
+EFI_STATUS
+EFIAPI
+LocateAcpiTableBySignature (
+ IN UINT32 Signature,
+ IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
+ IN OUT UINTN *Handle
+ )
+{
+ EFI_STATUS Status;
+ INTN Index;
+ EFI_ACPI_TABLE_VERSION Version;
+ EFI_ACPI_DESCRIPTION_HEADER *OrgTable;
+
+ if (mAcpiSdt == NULL) {
+ InitializeAslUpdateLib ();
+ if (mAcpiSdt == NULL) {
+ return EFI_NOT_READY;
+ }
+ }
+
+ ///
+ /// Locate table with matching ID
+ ///
+ Version = 0;
+ Index = 0;
+ do {
+ Status = mAcpiSdt->GetAcpiTable (Index, (EFI_ACPI_SDT_HEADER **)&OrgTable, &Version, Handle);
+ if (Status == EFI_NOT_FOUND) {
+ break;
+ }
+ ASSERT_EFI_ERROR (Status);
+ Index++;
+ } while (OrgTable->Signature != Signature);
+
+ if (Status != EFI_NOT_FOUND) {
+ *Table = AllocateCopyPool (OrgTable->Length, OrgTable);
+ ASSERT (*Table);
+ }
+
+ ///
+ /// If we found the table, there will be no error.
+ ///
+ return Status;
+}
diff --git a/Silicon/Intel/IntelSiliconPkg/Include/Library/AslUpdateLib.h b/Silicon/Intel/IntelSiliconPkg/Include/Library/AslUpdateLib.h
new file mode 100644
index 0000000000..cfe0fc9356
--- /dev/null
+++ b/Silicon/Intel/IntelSiliconPkg/Include/Library/AslUpdateLib.h
@@ -0,0 +1,116 @@
+/** @file
+ ASL dynamic update library definitions.
+
+ This library provides dynamic update to various ASL structures.
+ There may be different libraries for different environments (PEI, BS, RT, SMM).
+ Make sure you meet the requirements for the library (protocol dependencies, use
+ restrictions, etc).
+
+ Note that the current version of the library updates AML.
+
+ Copyright (c) 2020 Intel Corporation. All rights reserved. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+#ifndef _ASL_UPDATE_LIB_H_
+#define _ASL_UPDATE_LIB_H_
+
+//
+// Include files
+//
+#include <Uefi/UefiBaseType.h>
+#include <IndustryStandard/Acpi.h>
+#include <Protocol/AcpiTable.h>
+#include <Protocol/AcpiSystemDescriptionTable.h>
+
+
+/**
+ This procedure will update immediate value assigned to a Name
+
+ @param[in] AslSignature The signature of Operation Region that we want to update.
+ @param[in] Buffer source of data to be written over original aml
+ @param[in] Length length of data to be overwritten
+
+ @retval EFI_SUCCESS The function completed successfully.
+ @retval EFI_NOT_FOUND Failed to locate AcpiTable.
+ @retval EFI_NOT_READY Not ready to locate AcpiTable.
+ @retval EFI_UNSUPPORTED The function is not supported in this library.
+**/
+EFI_STATUS
+EFIAPI
+UpdateNameAslCode(
+ IN UINT32 AslSignature,
+ IN VOID *Buffer,
+ IN UINTN Length
+ );
+
+/**
+ This procedure will update the name of ASL Method
+
+ @param[in] TableId - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
+ @param[in] TableIdSize - Length of the TableId to match. Table ID are 8 bytes long, this function
+ @param[in] AslSignature - The signature of Operation Region that we want to update.
+ @param[in] Buffer - source of data to be written over original aml
+ @param[in] Length - length of data to be overwritten
+
+ @retval EFI_SUCCESS - The function completed successfully.
+ @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
+ @retval EFI_NOT_READY - Not ready to locate AcpiTable.
+ @retval EFI_UNSUPPORTED - The function is not supported in this library.
+**/
+EFI_STATUS
+EFIAPI
+UpdateSsdtNameAslCode (
+ IN UINT8 *TableId,
+ IN UINT8 TableIdSize,
+ IN UINT32 AslSignature,
+ IN VOID *Buffer,
+ IN UINTN Length
+ );
+
+/**
+ This procedure will update the name of ASL Method
+
+ @param[in] AslSignature - The signature of Operation Region that we want to update.
+ @param[in] Buffer - source of data to be written over original aml
+ @param[in] Length - length of data to be overwritten
+
+ @retval EFI_SUCCESS - The function completed successfully.
+ @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
+ @retval EFI_NOT_READY - Not ready to locate AcpiTable.
+ @retval EFI_UNSUPPORTED - The function is not supported in this library.
+**/
+EFI_STATUS
+EFIAPI
+UpdateMethodAslCode (
+ IN UINT32 AslSignature,
+ IN VOID *Buffer,
+ IN UINTN Length
+ );
+
+/**
+ This function uses the ACPI support protocol to locate an ACPI table using the .
+ It is really only useful for finding tables that only have a single instance,
+ e.g. FADT, FACS, MADT, etc. It is not good for locating SSDT, etc.
+ Matches are determined by finding the table with ACPI table that has
+ a matching signature and version.
+
+ @param[in] Signature Pointer to an ASCII string containing the Signature to match
+ @param[in, out] Table Updated with a pointer to the table
+ @param[in, out] Handle AcpiSupport protocol table handle for the table found
+ @see AcpiSupport protocol for details
+
+ @retval EFI_SUCCESS The function completed successfully.
+ @retval EFI_NOT_FOUND Failed to locate AcpiTable.
+ @retval EFI_NOT_READY Not ready to locate AcpiTable.
+ @retval EFI_UNSUPPORTED The function is not supported in this library.
+**/
+EFI_STATUS
+EFIAPI
+LocateAcpiTableBySignature (
+ IN UINT32 Signature,
+ IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
+ IN OUT UINTN *Handle
+ );
+
+#endif
diff --git a/Silicon/Intel/IntelSiliconPkg/IntelSiliconPkg.dec b/Silicon/Intel/IntelSiliconPkg/IntelSiliconPkg.dec
index 7c43593382..e4a7fec3a3 100644
--- a/Silicon/Intel/IntelSiliconPkg/IntelSiliconPkg.dec
+++ b/Silicon/Intel/IntelSiliconPkg/IntelSiliconPkg.dec
@@ -38,6 +38,10 @@
#
ConfigBlockLib|Include/Library/ConfigBlockLib.h
+ ## @libraryclass Provides services to update AML in DXE
+ #
+ AslUpdateLib|Include/Library/AslUpdateLib.h
+
[Guids]
## GUID for Package token space
# {A9F8D54E-1107-4F0A-ADD0-4587E7A4A735}
diff --git a/Silicon/Intel/IntelSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib.inf b/Silicon/Intel/IntelSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib.inf
new file mode 100644
index 0000000000..cefbe30628
--- /dev/null
+++ b/Silicon/Intel/IntelSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib.inf
@@ -0,0 +1,42 @@
+## @file
+# Provides services to update ASL tables.
+# Note that the current version of the library updates AML.
+#
+# Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+##
+
+
+
+[Defines]
+INF_VERSION = 0x00010017
+BASE_NAME = DxeAslUpdateLib
+FILE_GUID = 8621697D-4E3A-4bf2-ADB0-3E2FF06559CA
+VERSION_STRING = 1.0
+MODULE_TYPE = DXE_DRIVER
+LIBRARY_CLASS = AslUpdateLib
+
+
+[LibraryClasses]
+BaseLib
+IoLib
+DebugLib
+PcdLib
+BaseMemoryLib
+UefiLib
+MemoryAllocationLib
+
+
+[Packages]
+MdePkg/MdePkg.dec
+IntelSiliconPkg/IntelSiliconPkg.dec
+
+[Sources]
+DxeAslUpdateLib.c
+
+
+[Protocols]
+gEfiAcpiTableProtocolGuid ## CONSUMES
+gEfiAcpiSdtProtocolGuid ## CONSUMES
--
2.16.2.windows.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* Re: [edk2-platforms:PATCH v4 1/7] WhiskeylakeOpenBoardPkg/TbtDxe: Removes redundant InitializeAslUpdateLib
2020-04-29 2:31 ` [edk2-platforms:PATCH v4 1/7] WhiskeylakeOpenBoardPkg/TbtDxe: Removes redundant InitializeAslUpdateLib Miki Shindo
@ 2020-04-30 1:40 ` Chaganty, Rangasai V
2020-04-30 2:54 ` Chiu, Chasel
1 sibling, 0 replies; 23+ messages in thread
From: Chaganty, Rangasai V @ 2020-04-30 1:40 UTC (permalink / raw)
To: Shindo, Miki, devel@edk2.groups.io
Cc: Chiu, Chasel, Desimone, Nathaniel L, Agyeman, Prince, Ni, Ray
Reviewed-by: Sai Chaganty <rangasai.v.chaganty@intel.com>
-----Original Message-----
From: Shindo, Miki <miki.shindo@intel.com>
Sent: Tuesday, April 28, 2020 7:32 PM
To: devel@edk2.groups.io
Cc: Chaganty, Rangasai V <rangasai.v.chaganty@intel.com>; Chiu, Chasel <chasel.chiu@intel.com>; Desimone, Nathaniel L <nathaniel.l.desimone@intel.com>; Agyeman, Prince <prince.agyeman@intel.com>; Ni, Ray <ray.ni@intel.com>
Subject: [edk2-platforms:PATCH v4 1/7] WhiskeylakeOpenBoardPkg/TbtDxe: Removes redundant InitializeAslUpdateLib
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2536
This commit removes redundant InitializeAslUpdateLib call as DxeAslUpdateLib itself calls it internally.
Signed-off-by: Miki Shindo <miki.shindo@intel.com>
Cc: Sai Chaganty <rangasai.v.chaganty@intel.com>
Cc: Chasel Chiu <chasel.chiu@intel.com>
Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
Cc: Prince Agyeman <prince.agyeman@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
---
Platform/Intel/WhiskeylakeOpenBoardPkg/Features/Tbt/TbtInit/Dxe/TbtDxe.c | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/Platform/Intel/WhiskeylakeOpenBoardPkg/Features/Tbt/TbtInit/Dxe/TbtDxe.c b/Platform/Intel/WhiskeylakeOpenBoardPkg/Features/Tbt/TbtInit/Dxe/TbtDxe.c
index c670f23320..991edfc2c6 100644
--- a/Platform/Intel/WhiskeylakeOpenBoardPkg/Features/Tbt/TbtInit/Dxe/TbtDxe.c
+++ b/Platform/Intel/WhiskeylakeOpenBoardPkg/Features/Tbt/TbtInit/Dxe/Tb
+++ tDxe.c
@@ -1,6 +1,6 @@
/** @file
- Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
+ Copyright (c) 2019 - 2020, Intel Corporation. All rights
+ reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent **/
@@ -125,9 +125,6 @@ TbtAcpiEndOfDxeCallback (
UINT16 Length;
UINT32 Signature;
- Status = InitializeAslUpdateLib ();
- ASSERT_EFI_ERROR (Status);
-
Address = (UINT32) (UINTN) mTbtNvsAreaProtocol.Area;
Length = (UINT16) sizeof (TBT_NVS_AREA);
DEBUG ((DEBUG_INFO, "Patch TBT NvsAreaAddress: TBT NVS Address %x Length %x\n", Address, Length));
--
2.16.2.windows.1
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [edk2-platforms:PATCH v4 2/7] KabylakeOpenBoardPkg/TbtDxe: Removes redundant InitializeAslUpdateLib
2020-04-29 2:31 ` [edk2-platforms:PATCH v4 2/7] KabylakeOpenBoardPkg/TbtDxe: " Miki Shindo
@ 2020-04-30 1:47 ` Chaganty, Rangasai V
2020-04-30 2:55 ` Chiu, Chasel
1 sibling, 0 replies; 23+ messages in thread
From: Chaganty, Rangasai V @ 2020-04-30 1:47 UTC (permalink / raw)
To: Shindo, Miki, devel@edk2.groups.io
Cc: Chiu, Chasel, Desimone, Nathaniel L, Agyeman, Prince, Ni, Ray
Reviewed-by: Sai Chaganty <rangasai.v.chaganty@intel.com>
-----Original Message-----
From: Shindo, Miki <miki.shindo@intel.com>
Sent: Tuesday, April 28, 2020 7:32 PM
To: devel@edk2.groups.io
Cc: Chaganty, Rangasai V <rangasai.v.chaganty@intel.com>; Chiu, Chasel <chasel.chiu@intel.com>; Desimone, Nathaniel L <nathaniel.l.desimone@intel.com>; Agyeman, Prince <prince.agyeman@intel.com>; Ni, Ray <ray.ni@intel.com>
Subject: [edk2-platforms:PATCH v4 2/7] KabylakeOpenBoardPkg/TbtDxe: Removes redundant InitializeAslUpdateLib
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2536
This commit removes redundant InitializeAslUpdateLib call as DxeAslUpdateLib itself calls it internally.
Signed-off-by: Miki Shindo <miki.shindo@intel.com>
Cc: Sai Chaganty <rangasai.v.chaganty@intel.com>
Cc: Chasel Chiu <chasel.chiu@intel.com>
Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
Cc: Prince Agyeman <prince.agyeman@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
---
Platform/Intel/KabylakeOpenBoardPkg/Features/Tbt/TbtInit/Dxe/TbtDxe.c | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/Platform/Intel/KabylakeOpenBoardPkg/Features/Tbt/TbtInit/Dxe/TbtDxe.c b/Platform/Intel/KabylakeOpenBoardPkg/Features/Tbt/TbtInit/Dxe/TbtDxe.c
index 13a687576c..d101f4bb75 100644
--- a/Platform/Intel/KabylakeOpenBoardPkg/Features/Tbt/TbtInit/Dxe/TbtDxe.c
+++ b/Platform/Intel/KabylakeOpenBoardPkg/Features/Tbt/TbtInit/Dxe/TbtDx
+++ e.c
@@ -1,6 +1,6 @@
/** @file
-Copyright (c) 2018, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2018 - 2020, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
@@ -125,9 +125,6 @@ TbtAcpiEndOfDxeCallback (
UINT16 Length;
UINT32 Signature;
- Status = InitializeAslUpdateLib ();
- ASSERT_EFI_ERROR (Status);
-
Address = (UINT32) (UINTN) mTbtNvsAreaProtocol.Area;
Length = (UINT16) sizeof (TBT_NVS_AREA);
DEBUG ((DEBUG_INFO, "Patch TBT NvsAreaAddress: TBT NVS Address %x Length %x\n", Address, Length));
--
2.16.2.windows.1
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [edk2-platforms:PATCH v4 3/7] CometlakeOpenBoardPkg/TbtDxe: Removes redundant InitializeAslUpdateLib
2020-04-29 2:31 ` [edk2-platforms:PATCH v4 3/7] CometlakeOpenBoardPkg/TbtDxe: " Miki Shindo
@ 2020-04-30 1:53 ` Chaganty, Rangasai V
2020-04-30 2:55 ` Chiu, Chasel
1 sibling, 0 replies; 23+ messages in thread
From: Chaganty, Rangasai V @ 2020-04-30 1:53 UTC (permalink / raw)
To: Shindo, Miki, devel@edk2.groups.io
Cc: Chiu, Chasel, Desimone, Nathaniel L, Agyeman, Prince, Ni, Ray
Reviewed-by: Sai Chaganty <rangasai.v.chaganty@intel.com>
-----Original Message-----
From: Shindo, Miki <miki.shindo@intel.com>
Sent: Tuesday, April 28, 2020 7:32 PM
To: devel@edk2.groups.io
Cc: Chaganty, Rangasai V <rangasai.v.chaganty@intel.com>; Chiu, Chasel <chasel.chiu@intel.com>; Desimone, Nathaniel L <nathaniel.l.desimone@intel.com>; Agyeman, Prince <prince.agyeman@intel.com>; Ni, Ray <ray.ni@intel.com>
Subject: [edk2-platforms:PATCH v4 3/7] CometlakeOpenBoardPkg/TbtDxe: Removes redundant InitializeAslUpdateLib
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2536
This commit removes redundant InitializeAslUpdateLib calls as DxeAslUpdateLib itself calls it internally.
Signed-off-by: Miki Shindo <miki.shindo@intel.com>
Cc: Sai Chaganty <rangasai.v.chaganty@intel.com>
Cc: Chasel Chiu <chasel.chiu@intel.com>
Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
Cc: Prince Agyeman <prince.agyeman@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
---
Platform/Intel/CometlakeOpenBoardPkg/Features/Tbt/TbtInit/Dxe/TbtDxe.c | 3 ---
1 file changed, 3 deletions(-)
diff --git a/Platform/Intel/CometlakeOpenBoardPkg/Features/Tbt/TbtInit/Dxe/TbtDxe.c b/Platform/Intel/CometlakeOpenBoardPkg/Features/Tbt/TbtInit/Dxe/TbtDxe.c
index ef6201de94..e43c5c2fa1 100644
--- a/Platform/Intel/CometlakeOpenBoardPkg/Features/Tbt/TbtInit/Dxe/TbtDxe.c
+++ b/Platform/Intel/CometlakeOpenBoardPkg/Features/Tbt/TbtInit/Dxe/TbtD
+++ xe.c
@@ -125,9 +125,6 @@ TbtAcpiEndOfDxeCallback (
UINT16 Length;
UINT32 Signature;
- Status = InitializeAslUpdateLib ();
- ASSERT_EFI_ERROR (Status);
-
Address = (UINT32) (UINTN) mTbtNvsAreaProtocol.Area;
Length = (UINT16) sizeof (TBT_NVS_AREA);
DEBUG ((DEBUG_INFO, "Patch TBT NvsAreaAddress: TBT NVS Address %x Length %x\n", Address, Length));
--
2.16.2.windows.1
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [edk2-platforms:PATCH v4 1/7] WhiskeylakeOpenBoardPkg/TbtDxe: Removes redundant InitializeAslUpdateLib
2020-04-29 2:31 ` [edk2-platforms:PATCH v4 1/7] WhiskeylakeOpenBoardPkg/TbtDxe: Removes redundant InitializeAslUpdateLib Miki Shindo
2020-04-30 1:40 ` Chaganty, Rangasai V
@ 2020-04-30 2:54 ` Chiu, Chasel
1 sibling, 0 replies; 23+ messages in thread
From: Chiu, Chasel @ 2020-04-30 2:54 UTC (permalink / raw)
To: Shindo, Miki, devel@edk2.groups.io
Cc: Chaganty, Rangasai V, Desimone, Nathaniel L, Agyeman, Prince,
Ni, Ray
Reviewed-by: Chasel Chiu <chasel.chiu@intel.com>
> -----Original Message-----
> From: Shindo, Miki <miki.shindo@intel.com>
> Sent: Wednesday, April 29, 2020 10:32 AM
> To: devel@edk2.groups.io
> Cc: Chaganty, Rangasai V <rangasai.v.chaganty@intel.com>; Chiu, Chasel
> <chasel.chiu@intel.com>; Desimone, Nathaniel L
> <nathaniel.l.desimone@intel.com>; Agyeman, Prince
> <prince.agyeman@intel.com>; Ni, Ray <ray.ni@intel.com>
> Subject: [edk2-platforms:PATCH v4 1/7] WhiskeylakeOpenBoardPkg/TbtDxe:
> Removes redundant InitializeAslUpdateLib
>
> REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2536
>
> This commit removes redundant InitializeAslUpdateLib call as
> DxeAslUpdateLib itself calls it internally.
>
> Signed-off-by: Miki Shindo <miki.shindo@intel.com>
> Cc: Sai Chaganty <rangasai.v.chaganty@intel.com>
> Cc: Chasel Chiu <chasel.chiu@intel.com>
> Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
> Cc: Prince Agyeman <prince.agyeman@intel.com>
> Cc: Ray Ni <ray.ni@intel.com>
> ---
>
> Platform/Intel/WhiskeylakeOpenBoardPkg/Features/Tbt/TbtInit/Dxe/TbtDxe.
> c | 5 +----
> 1 file changed, 1 insertion(+), 4 deletions(-)
>
> diff --git
> a/Platform/Intel/WhiskeylakeOpenBoardPkg/Features/Tbt/TbtInit/Dxe/TbtDx
> e.c
> b/Platform/Intel/WhiskeylakeOpenBoardPkg/Features/Tbt/TbtInit/Dxe/TbtDx
> e.c
> index c670f23320..991edfc2c6 100644
> ---
> a/Platform/Intel/WhiskeylakeOpenBoardPkg/Features/Tbt/TbtInit/Dxe/TbtDx
> e.c
> +++
> b/Platform/Intel/WhiskeylakeOpenBoardPkg/Features/Tbt/TbtInit/Dxe/Tb
> +++ tDxe.c
> @@ -1,6 +1,6 @@
> /** @file
>
> - Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
> + Copyright (c) 2019 - 2020, Intel Corporation. All rights
> + reserved.<BR>
> SPDX-License-Identifier: BSD-2-Clause-Patent **/
>
> @@ -125,9 +125,6 @@ TbtAcpiEndOfDxeCallback (
> UINT16 Length;
> UINT32 Signature;
>
> - Status = InitializeAslUpdateLib ();
> - ASSERT_EFI_ERROR (Status);
> -
> Address = (UINT32) (UINTN) mTbtNvsAreaProtocol.Area;
> Length = (UINT16) sizeof (TBT_NVS_AREA);
> DEBUG ((DEBUG_INFO, "Patch TBT NvsAreaAddress: TBT NVS Address %x
> Length %x\n", Address, Length));
> --
> 2.16.2.windows.1
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [edk2-platforms:PATCH v4 2/7] KabylakeOpenBoardPkg/TbtDxe: Removes redundant InitializeAslUpdateLib
2020-04-29 2:31 ` [edk2-platforms:PATCH v4 2/7] KabylakeOpenBoardPkg/TbtDxe: " Miki Shindo
2020-04-30 1:47 ` Chaganty, Rangasai V
@ 2020-04-30 2:55 ` Chiu, Chasel
1 sibling, 0 replies; 23+ messages in thread
From: Chiu, Chasel @ 2020-04-30 2:55 UTC (permalink / raw)
To: Shindo, Miki, devel@edk2.groups.io
Cc: Chaganty, Rangasai V, Desimone, Nathaniel L, Agyeman, Prince,
Ni, Ray
Reviewed-by: Chasel Chiu <chasel.chiu@intel.com>
> -----Original Message-----
> From: Shindo, Miki <miki.shindo@intel.com>
> Sent: Wednesday, April 29, 2020 10:32 AM
> To: devel@edk2.groups.io
> Cc: Chaganty, Rangasai V <rangasai.v.chaganty@intel.com>; Chiu, Chasel
> <chasel.chiu@intel.com>; Desimone, Nathaniel L
> <nathaniel.l.desimone@intel.com>; Agyeman, Prince
> <prince.agyeman@intel.com>; Ni, Ray <ray.ni@intel.com>
> Subject: [edk2-platforms:PATCH v4 2/7] KabylakeOpenBoardPkg/TbtDxe:
> Removes redundant InitializeAslUpdateLib
>
> REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2536
>
> This commit removes redundant InitializeAslUpdateLib call as
> DxeAslUpdateLib itself calls it internally.
>
> Signed-off-by: Miki Shindo <miki.shindo@intel.com>
> Cc: Sai Chaganty <rangasai.v.chaganty@intel.com>
> Cc: Chasel Chiu <chasel.chiu@intel.com>
> Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
> Cc: Prince Agyeman <prince.agyeman@intel.com>
> Cc: Ray Ni <ray.ni@intel.com>
> ---
> Platform/Intel/KabylakeOpenBoardPkg/Features/Tbt/TbtInit/Dxe/TbtDxe.c |
> 5 +----
> 1 file changed, 1 insertion(+), 4 deletions(-)
>
> diff --git
> a/Platform/Intel/KabylakeOpenBoardPkg/Features/Tbt/TbtInit/Dxe/TbtDxe.c
> b/Platform/Intel/KabylakeOpenBoardPkg/Features/Tbt/TbtInit/Dxe/TbtDxe.c
> index 13a687576c..d101f4bb75 100644
> ---
> a/Platform/Intel/KabylakeOpenBoardPkg/Features/Tbt/TbtInit/Dxe/TbtDxe.c
> +++
> b/Platform/Intel/KabylakeOpenBoardPkg/Features/Tbt/TbtInit/Dxe/TbtDx
> +++ e.c
> @@ -1,6 +1,6 @@
> /** @file
>
> -Copyright (c) 2018, Intel Corporation. All rights reserved.<BR>
> +Copyright (c) 2018 - 2020, Intel Corporation. All rights reserved.<BR>
> SPDX-License-Identifier: BSD-2-Clause-Patent
>
> **/
> @@ -125,9 +125,6 @@ TbtAcpiEndOfDxeCallback (
> UINT16 Length;
> UINT32 Signature;
>
> - Status = InitializeAslUpdateLib ();
> - ASSERT_EFI_ERROR (Status);
> -
> Address = (UINT32) (UINTN) mTbtNvsAreaProtocol.Area;
> Length = (UINT16) sizeof (TBT_NVS_AREA);
> DEBUG ((DEBUG_INFO, "Patch TBT NvsAreaAddress: TBT NVS Address %x
> Length %x\n", Address, Length));
> --
> 2.16.2.windows.1
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [edk2-platforms:PATCH v4 3/7] CometlakeOpenBoardPkg/TbtDxe: Removes redundant InitializeAslUpdateLib
2020-04-29 2:31 ` [edk2-platforms:PATCH v4 3/7] CometlakeOpenBoardPkg/TbtDxe: " Miki Shindo
2020-04-30 1:53 ` Chaganty, Rangasai V
@ 2020-04-30 2:55 ` Chiu, Chasel
1 sibling, 0 replies; 23+ messages in thread
From: Chiu, Chasel @ 2020-04-30 2:55 UTC (permalink / raw)
To: Shindo, Miki, devel@edk2.groups.io
Cc: Chaganty, Rangasai V, Desimone, Nathaniel L, Agyeman, Prince,
Ni, Ray
Reviewed-by: Chasel Chiu <chasel.chiu@intel.com>
> -----Original Message-----
> From: Shindo, Miki <miki.shindo@intel.com>
> Sent: Wednesday, April 29, 2020 10:32 AM
> To: devel@edk2.groups.io
> Cc: Chaganty, Rangasai V <rangasai.v.chaganty@intel.com>; Chiu, Chasel
> <chasel.chiu@intel.com>; Desimone, Nathaniel L
> <nathaniel.l.desimone@intel.com>; Agyeman, Prince
> <prince.agyeman@intel.com>; Ni, Ray <ray.ni@intel.com>
> Subject: [edk2-platforms:PATCH v4 3/7] CometlakeOpenBoardPkg/TbtDxe:
> Removes redundant InitializeAslUpdateLib
>
> REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2536
>
> This commit removes redundant InitializeAslUpdateLib calls as
> DxeAslUpdateLib itself calls it internally.
>
> Signed-off-by: Miki Shindo <miki.shindo@intel.com>
> Cc: Sai Chaganty <rangasai.v.chaganty@intel.com>
> Cc: Chasel Chiu <chasel.chiu@intel.com>
> Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
> Cc: Prince Agyeman <prince.agyeman@intel.com>
> Cc: Ray Ni <ray.ni@intel.com>
> ---
> Platform/Intel/CometlakeOpenBoardPkg/Features/Tbt/TbtInit/Dxe/TbtDxe.c
> | 3 ---
> 1 file changed, 3 deletions(-)
>
> diff --git
> a/Platform/Intel/CometlakeOpenBoardPkg/Features/Tbt/TbtInit/Dxe/TbtDxe.
> c
> b/Platform/Intel/CometlakeOpenBoardPkg/Features/Tbt/TbtInit/Dxe/TbtDxe.
> c
> index ef6201de94..e43c5c2fa1 100644
> ---
> a/Platform/Intel/CometlakeOpenBoardPkg/Features/Tbt/TbtInit/Dxe/TbtDxe.
> c
> +++
> b/Platform/Intel/CometlakeOpenBoardPkg/Features/Tbt/TbtInit/Dxe/TbtD
> +++ xe.c
> @@ -125,9 +125,6 @@ TbtAcpiEndOfDxeCallback (
> UINT16 Length;
> UINT32 Signature;
>
> - Status = InitializeAslUpdateLib ();
> - ASSERT_EFI_ERROR (Status);
> -
> Address = (UINT32) (UINTN) mTbtNvsAreaProtocol.Area;
> Length = (UINT16) sizeof (TBT_NVS_AREA);
> DEBUG ((DEBUG_INFO, "Patch TBT NvsAreaAddress: TBT NVS Address %x
> Length %x\n", Address, Length));
> --
> 2.16.2.windows.1
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [edk2-platforms:PATCH v4 5/7] KabylakeSiliconPkg/DxeAslUpdateLib: Cleans up APIs
2020-04-29 2:32 ` [edk2-platforms:PATCH v4 5/7] KabylakeSiliconPkg/DxeAslUpdateLib: " Miki Shindo
@ 2020-04-30 2:56 ` Chiu, Chasel
2020-04-30 5:02 ` Chaganty, Rangasai V
1 sibling, 0 replies; 23+ messages in thread
From: Chiu, Chasel @ 2020-04-30 2:56 UTC (permalink / raw)
To: Shindo, Miki, devel@edk2.groups.io
Cc: Chaganty, Rangasai V, Desimone, Nathaniel L, Agyeman, Prince,
Ni, Ray
Reviewed-by: Chasel Chiu <chasel.chiu@intel.com>
> -----Original Message-----
> From: Shindo, Miki <miki.shindo@intel.com>
> Sent: Wednesday, April 29, 2020 10:32 AM
> To: devel@edk2.groups.io
> Cc: Chaganty, Rangasai V <rangasai.v.chaganty@intel.com>; Chiu, Chasel
> <chasel.chiu@intel.com>; Desimone, Nathaniel L
> <nathaniel.l.desimone@intel.com>; Agyeman, Prince
> <prince.agyeman@intel.com>; Ni, Ray <ray.ni@intel.com>
> Subject: [edk2-platforms:PATCH v4 5/7] KabylakeSiliconPkg/DxeAslUpdateLib:
> Cleans up APIs
>
> REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2536
>
> Callers of DxeAslUpdateLib don't have to call InitializeAslUpdateLib() but the
> library itself runs it internally. This commit deletes the redundant calls in
> caller side and makes it an internal call.
> LocateAcpiTableByOemTableId() is unreferenced externally so this commit
> makes it an internal call.
> PSS_PACKAGE_LAYOUT and AML_RESRC_TEMP_END_TAG are both
> unreferenced so they are removed.
> AslUpdateLib.h is cleaned up accordingly.
>
> Signed-off-by: Miki Shindo <miki.shindo@intel.com>
> Cc: Sai Chaganty <rangasai.v.chaganty@intel.com>
> Cc: Chasel Chiu <chasel.chiu@intel.com>
> Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
> Cc: Prince Agyeman <prince.agyeman@intel.com>
> Cc: Ray Ni <ray.ni@intel.com>
> ---
>
> Silicon/Intel/KabylakeSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib.c
> | 207
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++++++++++++++++++++++++++++++++--------------------------------------
> ----------------------------------------------------------------
>
> Silicon/Intel/KabylakeSiliconPkg/Library/DxeAslUpdateLibNull/DxeAslUpdateL
> ibNull.c | 94
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------
> ---------------------------
> Silicon/Intel/KabylakeSiliconPkg/Pch/PchInit/Dxe/PchAcpi.c
> | 5 +----
> Silicon/Intel/KabylakeSiliconPkg/Include/Library/AslUpdateLib.h
> | 130
> ++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------
> ----------------------------------------------------------
> 4 files changed, 217 insertions(+), 219 deletions(-)
>
> diff --git
> a/Silicon/Intel/KabylakeSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib
> .c
> b/Silicon/Intel/KabylakeSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib
> .c
> index 87c6b15ed2..abdb85307f 100644
> ---
> a/Silicon/Intel/KabylakeSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib
> .c
> +++ b/Silicon/Intel/KabylakeSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpd
> +++ ateLib.c
> @@ -6,7 +6,7 @@
>
> This library uses the ACPI Support protocol.
>
> -Copyright (c) 2017 - 2019, Intel Corporation. All rights reserved.<BR>
> +Copyright (c) 2017 - 2020, Intel Corporation. All rights reserved.<BR>
> SPDX-License-Identifier: BSD-2-Clause-Patent
>
> **/
> @@ -50,6 +50,62 @@ InitializeAslUpdateLib (
> return Status;
> }
>
> +/**
> + This function uses the ACPI SDT protocol to locate an ACPI SSDT table.
> +
> + @param[in] TableId - Pointer to an ASCII string containing
> the OEM Table ID from the ACPI table header
> + @param[in] TableIdSize - Length of the TableId to match. Table
> ID are 8 bytes long, this function
> + will consider it a match if the first
> TableIdSize bytes match
> + @param[in, out] Table - Updated with a pointer to the table
> + @param[in, out] Handle - AcpiSupport protocol table handle for
> the table found
> +
> + @retval EFI_SUCCESS - The function completed successfully.
> + @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
> + @retval EFI_NOT_READY - Not ready to locate AcpiTable.
> +**/
> +EFI_STATUS
> +LocateAcpiTableByOemTableId (
> + IN UINT8 *TableId,
> + IN UINT8 TableIdSize,
> + IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
> + IN OUT UINTN *Handle
> + )
> +{
> + EFI_STATUS Status;
> + INTN Index;
> + EFI_ACPI_TABLE_VERSION Version;
> + EFI_ACPI_DESCRIPTION_HEADER *OrgTable;
> +
> + if (mAcpiSdt == NULL) {
> + InitializeAslUpdateLib ();
> + if (mAcpiSdt == NULL) {
> + return EFI_NOT_READY;
> + }
> + }
> + ///
> + /// Locate table with matching ID
> + ///
> + Version = 0;
> + Index = 0;
> + do {
> + Status = mAcpiSdt->GetAcpiTable (Index, (EFI_ACPI_SDT_HEADER
> **)&OrgTable, &Version, Handle);
> + if (Status == EFI_NOT_FOUND) {
> + break;
> + }
> + ASSERT_EFI_ERROR (Status);
> + Index++;
> + } while (CompareMem (&(OrgTable->OemTableId), TableId, TableIdSize));
> +
> + if (Status != EFI_NOT_FOUND) {
> + *Table = AllocateCopyPool (OrgTable->Length, OrgTable);
> + ASSERT (*Table);
> + }
> +
> + ///
> + /// If we found the table, there will be no error.
> + ///
> + return Status;
> +}
>
> /**
> This procedure will update immediate value assigned to a Name @@
> -60,8 +116,10 @@ InitializeAslUpdateLib (
>
> @retval EFI_SUCCESS - The function completed successfully.
> @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
> + @retval EFI_NOT_READY - Not ready to locate AcpiTable.
> **/
> EFI_STATUS
> +EFIAPI
> UpdateNameAslCode (
> IN UINT32 AslSignature,
> IN VOID *Buffer,
> @@ -155,79 +213,67 @@ UpdateNameAslCode (
> return EFI_NOT_FOUND;
> }
>
> -
> /**
> - This function uses the ACPI SDT protocol to locate an ACPI table.
> - It is really only useful for finding tables that only have a single instance,
> - e.g. FADT, FACS, MADT, etc. It is not good for locating SSDT, etc.
> + This procedure will update the name of ASL Method
>
> - @param[in] Signature - Pointer to an ASCII string containing
> the OEM Table ID from the ACPI table header
> - @param[in, out] Table - Updated with a pointer to the table
> - @param[in, out] Handle - AcpiSupport protocol table handle
> for the table found
> - @param[in, out] Version - The version of the table desired
> + @param[in] TableId - Pointer to an ASCII string containing
> the OEM Table ID from the ACPI table header
> + @param[in] TableIdSize - Length of the TableId to match. Table ID
> are 8 bytes long, this function
> + @param[in] AslSignature - The signature of Operation Region that
> we want to update.
> + @param[in] Buffer - source of data to be written over
> original aml
> + @param[in] Length - length of data to be overwritten
>
> - @retval EFI_SUCCESS - The function completed successfully.
> + @retval EFI_UNSUPPORTED The function is not supported in
> this library.
> **/
> EFI_STATUS
> -LocateAcpiTableBySignature (
> - IN UINT32 Signature,
> - IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
> - IN OUT UINTN *Handle
> +EFIAPI
> +UpdateSsdtNameAslCode (
> + IN UINT8 *TableId,
> + IN UINT8 TableIdSize,
> + IN UINT32 AslSignature,
> + IN VOID *Buffer,
> + IN UINTN Length
> )
> {
> - EFI_STATUS Status;
> - INTN Index;
> - EFI_ACPI_TABLE_VERSION Version;
> - EFI_ACPI_DESCRIPTION_HEADER *OrgTable;
> -
> - if (mAcpiSdt == NULL) {
> - InitializeAslUpdateLib ();
> - if (mAcpiSdt == NULL) {
> - return EFI_NOT_READY;
> - }
> - }
> + return EFI_UNSUPPORTED;
> +}
>
> - ///
> - /// Locate table with matching ID
> - ///
> - Version = 0;
> - Index = 0;
> - do {
> - Status = mAcpiSdt->GetAcpiTable (Index, (EFI_ACPI_SDT_HEADER
> **)&OrgTable, &Version, Handle);
> - if (Status == EFI_NOT_FOUND) {
> - break;
> - }
> - ASSERT_EFI_ERROR (Status);
> - Index++;
> - } while (OrgTable->Signature != Signature);
> +/**
> + This procedure will update the name of ASL Method
>
> - if (Status != EFI_NOT_FOUND) {
> - *Table = AllocateCopyPool (OrgTable->Length, OrgTable);
> - ASSERT (*Table);
> - }
> + @param[in] AslSignature - The signature of Operation Region that
> we want to update.
> + @param[in] Buffer - source of data to be written over
> original aml
> + @param[in] Length - length of data to be overwritten
>
> - ///
> - /// If we found the table, there will be no error.
> - ///
> - return Status;
> + @retval EFI_UNSUPPORTED The function is not supported in
> this library.
> +**/
> +EFI_STATUS
> +EFIAPI
> +UpdateMethodAslCode (
> + IN UINT32 AslSignature,
> + IN VOID *Buffer,
> + IN UINTN Length
> + )
> +{
> + return EFI_UNSUPPORTED;
> }
>
> /**
> - This function uses the ACPI SDT protocol to locate an ACPI SSDT table.
> + This function uses the ACPI SDT protocol to locate an ACPI table.
> + It is really only useful for finding tables that only have a single
> + instance, e.g. FADT, FACS, MADT, etc. It is not good for locating SSDT,
> etc.
>
> - @param[in] TableId - Pointer to an ASCII string containing
> the OEM Table ID from the ACPI table header
> - @param[in] TableIdSize - Length of the TableId to match. Table
> ID are 8 bytes long, this function
> - will consider it a match if the first
> TableIdSize bytes match
> - @param[in, out] Table - Updated with a pointer to the table
> - @param[in, out] Handle - AcpiSupport protocol table handle for
> the table found
> - @param[in, out] Version - See AcpiSupport protocol, GetAcpiTable
> function for use
> + @param[in] Signature - Pointer to an ASCII string containing
> the OEM Table ID from the ACPI table header
> + @param[in, out] Table - Updated with a pointer to the table
> + @param[in, out] Handle - AcpiSupport protocol table handle
> for the table found
>
> - @retval EFI_SUCCESS - The function completed successfully.
> + @retval EFI_SUCCESS - The function completed
> successfully.
> + @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
> + @retval EFI_NOT_READY - Not ready to locate AcpiTable.
> **/
> EFI_STATUS
> -LocateAcpiTableByOemTableId (
> - IN UINT8 *TableId,
> - IN UINT8 TableIdSize,
> +EFIAPI
> +LocateAcpiTableBySignature (
> + IN UINT32 Signature,
> IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
> IN OUT UINTN *Handle
> )
> @@ -243,6 +289,7 @@ LocateAcpiTableByOemTableId (
> return EFI_NOT_READY;
> }
> }
> +
> ///
> /// Locate table with matching ID
> ///
> @@ -255,7 +302,7 @@ LocateAcpiTableByOemTableId (
> }
> ASSERT_EFI_ERROR (Status);
> Index++;
> - } while (CompareMem (&(OrgTable->OemTableId), TableId, TableIdSize));
> + } while (OrgTable->Signature != Signature);
>
> if (Status != EFI_NOT_FOUND) {
> *Table = AllocateCopyPool (OrgTable->Length, OrgTable); @@ -268,47
> +315,3 @@ LocateAcpiTableByOemTableId (
> return Status;
> }
>
> -/**
> - This function calculates and updates an UINT8 checksum.
> -
> - @param[in] Buffer Pointer to buffer to checksum
> - @param[in] Size Number of bytes to checksum
> - @param[in] ChecksumOffset Offset to place the checksum result in
> -
> - @retval EFI_SUCCESS The function completed successfully.
> -**/
> -EFI_STATUS
> -AcpiChecksum (
> - IN VOID *Buffer,
> - IN UINTN Size,
> - IN UINTN ChecksumOffset
> - )
> -{
> - UINT8 Sum;
> - UINT8 *Ptr;
> -
> - Sum = 0;
> - ///
> - /// Initialize pointer
> - ///
> - Ptr = Buffer;
> -
> - ///
> - /// set checksum to 0 first
> - ///
> - Ptr[ChecksumOffset] = 0;
> -
> - ///
> - /// add all content of buffer
> - ///
> - while (Size--) {
> - Sum = (UINT8) (Sum + (*Ptr++));
> - }
> - ///
> - /// set checksum
> - ///
> - Ptr = Buffer;
> - Ptr[ChecksumOffset] = (UINT8) (0xff - Sum + 1);
> -
> - return EFI_SUCCESS;
> -}
> diff --git
> a/Silicon/Intel/KabylakeSiliconPkg/Library/DxeAslUpdateLibNull/DxeAslUpdat
> eLibNull.c
> b/Silicon/Intel/KabylakeSiliconPkg/Library/DxeAslUpdateLibNull/DxeAslUpdat
> eLibNull.c
> index 490a09ddb5..395ff16596 100644
> ---
> a/Silicon/Intel/KabylakeSiliconPkg/Library/DxeAslUpdateLibNull/DxeAslUpdat
> eLibNull.c
> +++ b/Silicon/Intel/KabylakeSiliconPkg/Library/DxeAslUpdateLibNull/DxeAs
> +++ lUpdateLibNull.c
> @@ -6,7 +6,7 @@
>
> This library uses the ACPI Support protocol.
>
> -Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
> +Copyright (c) 2017 - 2020, Intel Corporation. All rights reserved.<BR>
> SPDX-License-Identifier: BSD-2-Clause-Patent
>
> **/
> @@ -39,6 +39,27 @@ InitializeAslUpdateLib (
> return EFI_SUCCESS;
> }
>
> +/**
> + This function uses the ACPI SDT protocol to locate an ACPI SSDT table.
> +
> + @param[in] TableId - Pointer to an ASCII string containing
> the OEM Table ID from the ACPI table header
> + @param[in] TableIdSize - Length of the TableId to match. Table
> ID are 8 bytes long, this function
> + will consider it a match if the first
> TableIdSize bytes match
> + @param[in, out] Table - Updated with a pointer to the table
> + @param[in, out] Handle - AcpiSupport protocol table handle for
> the table found
> +
> + @retval EFI_SUCCESS - The function completed successfully.
> +**/
> +EFI_STATUS
> +LocateAcpiTableByOemTableId (
> + IN UINT8 *TableId,
> + IN UINT8 TableIdSize,
> + IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
> + IN OUT UINTN *Handle
> + )
> +{
> + return EFI_SUCCESS;
> +}
>
> /**
> This procedure will update immediate value assigned to a Name @@
> -50,6 +71,7 @@ InitializeAslUpdateLib (
> @retval EFI_SUCCESS - The function completed successfully.
> **/
> EFI_STATUS
> +EFIAPI
> UpdateNameAslCode (
> IN UINT32 AslSignature,
> IN VOID *Buffer,
> @@ -59,66 +81,68 @@ UpdateNameAslCode (
> return EFI_SUCCESS;
> }
>
> -
> /**
> - This function uses the ACPI SDT protocol to locate an ACPI table.
> - It is really only useful for finding tables that only have a single instance,
> - e.g. FADT, FACS, MADT, etc. It is not good for locating SSDT, etc.
> + This procedure will update the name of ASL Method
>
> - @param[in] Signature - Pointer to an ASCII string containing
> the OEM Table ID from the ACPI table header
> - @param[in, out] Table - Updated with a pointer to the table
> - @param[in, out] Handle - AcpiSupport protocol table handle
> for the table found
> - @param[in, out] Version - The version of the table desired
> + @param[in] TableId - Pointer to an ASCII string containing
> the OEM Table ID from the ACPI table header
> + @param[in] TableIdSize - Length of the TableId to match. Table
> ID are 8 bytes long, this function
> + @param[in] AslSignature - The signature of Operation Region that
> we want to update.
> + @param[in] Buffer - source of data to be written over
> original aml
> + @param[in] Length - length of data to be overwritten
>
> - @retval EFI_SUCCESS - The function completed successfully.
> + @retval EFI_SUCCESS - The function completed successfully.
> **/
> EFI_STATUS
> -LocateAcpiTableBySignature (
> - IN UINT32 Signature,
> - IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
> - IN OUT UINTN *Handle
> +EFIAPI
> +UpdateSsdtNameAslCode (
> + IN UINT8 *TableId,
> + IN UINT8 TableIdSize,
> + IN UINT32 AslSignature,
> + IN VOID *Buffer,
> + IN UINTN Length
> )
> {
> return EFI_SUCCESS;
> }
>
> /**
> - This function uses the ACPI SDT protocol to locate an ACPI SSDT table.
> + This procedure will update the name of ASL Method
>
> - @param[in] TableId - Pointer to an ASCII string containing
> the OEM Table ID from the ACPI table header
> - @param[in] TableIdSize - Length of the TableId to match. Table
> ID are 8 bytes long, this function
> - will consider it a match if the first
> TableIdSize bytes match
> - @param[in, out] Table - Updated with a pointer to the table
> - @param[in, out] Handle - AcpiSupport protocol table handle for
> the table found
> - @param[in, out] Version - See AcpiSupport protocol, GetAcpiTable
> function for use
> + @param[in] AslSignature - The signature of Operation Region that
> we want to update.
> + @param[in] Buffer - source of data to be written over
> original aml
> + @param[in] Length - length of data to be overwritten
>
> @retval EFI_SUCCESS - The function completed successfully.
> **/
> EFI_STATUS
> -LocateAcpiTableByOemTableId (
> - IN UINT8 *TableId,
> - IN UINT8 TableIdSize,
> - IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
> - IN OUT UINTN *Handle
> +EFIAPI
> +UpdateMethodAslCode (
> + IN UINT32 AslSignature,
> + IN VOID *Buffer,
> + IN UINTN Length
> )
> {
> return EFI_SUCCESS;
> }
>
> +
> /**
> - This function calculates and updates an UINT8 checksum.
> + This function uses the ACPI SDT protocol to locate an ACPI table.
> + It is really only useful for finding tables that only have a single
> + instance, e.g. FADT, FACS, MADT, etc. It is not good for locating SSDT,
> etc.
>
> - @param[in] Buffer Pointer to buffer to checksum
> - @param[in] Size Number of bytes to checksum
> - @param[in] ChecksumOffset Offset to place the checksum result in
> + @param[in] Signature - Pointer to an ASCII string containing
> the OEM Table ID from the ACPI table header
> + @param[in, out] Table - Updated with a pointer to the table
> + @param[in, out] Handle - AcpiSupport protocol table handle
> for the table found
>
> - @retval EFI_SUCCESS The function completed successfully.
> + @retval EFI_SUCCESS - The function completed
> successfully.
> **/
> EFI_STATUS
> -AcpiChecksum (
> - IN VOID *Buffer,
> - IN UINTN Size,
> - IN UINTN ChecksumOffset
> +EFIAPI
> +LocateAcpiTableBySignature (
> + IN UINT32 Signature,
> + IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
> + IN OUT UINTN *Handle
> )
> {
> return EFI_SUCCESS;
> diff --git a/Silicon/Intel/KabylakeSiliconPkg/Pch/PchInit/Dxe/PchAcpi.c
> b/Silicon/Intel/KabylakeSiliconPkg/Pch/PchInit/Dxe/PchAcpi.c
> index a0e3996664..6cbaf9c067 100644
> --- a/Silicon/Intel/KabylakeSiliconPkg/Pch/PchInit/Dxe/PchAcpi.c
> +++ b/Silicon/Intel/KabylakeSiliconPkg/Pch/PchInit/Dxe/PchAcpi.c
> @@ -1,7 +1,7 @@
> /** @file
> This is the driver that initializes the Intel PCH.
>
> -Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
> +Copyright (c) 2017 - 2020, Intel Corporation. All rights reserved.<BR>
> SPDX-License-Identifier: BSD-2-Clause-Patent
>
> **/
> @@ -443,9 +443,6 @@ PatchPchNvsAreaAddress (
> UINT32 Address;
> UINT16 Length;
>
> - Status = InitializeAslUpdateLib ();
> - ASSERT_EFI_ERROR (Status);
> -
> Address = (UINT32) (UINTN) mPchNvsAreaProtocol.Area;
> Length = (UINT16) sizeof (PCH_NVS_AREA);
> DEBUG ((DEBUG_INFO, "PatchPchNvsAreaAddress: PCH NVS Address %x
> Length %x\n", Address, Length)); diff --git
> a/Silicon/Intel/KabylakeSiliconPkg/Include/Library/AslUpdateLib.h
> b/Silicon/Intel/KabylakeSiliconPkg/Include/Library/AslUpdateLib.h
> index d58b6d6458..215ca85a29 100644
> --- a/Silicon/Intel/KabylakeSiliconPkg/Include/Library/AslUpdateLib.h
> +++ b/Silicon/Intel/KabylakeSiliconPkg/Include/Library/AslUpdateLib.h
> @@ -5,7 +5,7 @@
> Make sure you meet the requirements for the library (protocol
> dependencies, use
> restrictions, etc).
>
> -Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
> +Copyright (c) 2017 - 2020, Intel Corporation. All rights reserved.<BR>
> SPDX-License-Identifier: BSD-2-Clause-Patent
>
> **/
> @@ -16,61 +16,71 @@ SPDX-License-Identifier: BSD-2-Clause-Patent // //
> Include files //
> +#include <Uefi/UefiBaseType.h>
> #include <IndustryStandard/Acpi.h>
> #include <Protocol/AcpiTable.h>
> #include <Protocol/AcpiSystemDescriptionTable.h>
>
> -//
> -// AML parsing definitions
> -//
> -#define AML_RESRC_TEMP_END_TAG 0x0079
> -
> -//
> -// ASL PSS package structure layout
> -//
> -#pragma pack (1)
> -typedef struct {
> - UINT8 NameOp; // 12h ;First opcode is a NameOp.
> - UINT8 PackageLead; // 20h ;First opcode is a NameOp.
> - UINT8 NumEntries; // 06h ;First opcode is a NameOp.
> - UINT8 DwordPrefix1; // 0Ch
> - UINT32 CoreFrequency; // 00h
> - UINT8 DwordPrefix2; // 0Ch
> - UINT32 Power; // 00h
> - UINT8 DwordPrefix3; // 0Ch
> - UINT32 TransLatency; // 00h
> - UINT8 DwordPrefix4; // 0Ch
> - UINT32 BmLatency; // 00h
> - UINT8 DwordPrefix5; // 0Ch
> - UINT32 Control; // 00h
> - UINT8 DwordPrefix6; // 0Ch
> - UINT32 Status; // 00h
> -} PSS_PACKAGE_LAYOUT;
> -#pragma pack()
>
> /**
> - Initialize the ASL update library state.
> - This must be called prior to invoking other library functions.
> + This procedure will update immediate value assigned to a Name
>
> + @param[in] AslSignature The signature of Operation
> Region that we want to update.
> + @param[in] Buffer source of data to be written
> over original aml
> + @param[in] Length length of data to be
> overwritten
>
> @retval EFI_SUCCESS The function completed
> successfully.
> + @retval EFI_NOT_FOUND Failed to locate AcpiTable.
> + @retval EFI_NOT_READY Not ready to locate
> AcpiTable.
> + @retval EFI_UNSUPPORTED The function is not
> supported in this library.
> **/
> EFI_STATUS
> -InitializeAslUpdateLib (
> - VOID
> +EFIAPI
> +UpdateNameAslCode (
> + IN UINT32 AslSignature,
> + IN VOID *Buffer,
> + IN UINTN Length
> );
>
> /**
> - This procedure will update immediate value assigned to a Name
> + This procedure will update the name of ASL Method
> +
> + @param[in] TableId - Pointer to an ASCII string containing
> the OEM Table ID from the ACPI table header
> + @param[in] TableIdSize - Length of the TableId to match. Table
> ID are 8 bytes long, this function
> + @param[in] AslSignature - The signature of Operation Region that
> we want to update.
> + @param[in] Buffer - source of data to be written over
> original aml
> + @param[in] Length - length of data to be overwritten
> +
> + @retval EFI_SUCCESS - The function completed successfully.
> + @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
> + @retval EFI_NOT_READY - Not ready to locate AcpiTable.
> + @retval EFI_UNSUPPORTED - The function is not supported in this
> library.
> +**/
> +EFI_STATUS
> +EFIAPI
> +UpdateSsdtNameAslCode (
> + IN UINT8 *TableId,
> + IN UINT8 TableIdSize,
> + IN UINT32 AslSignature,
> + IN VOID *Buffer,
> + IN UINTN Length
> + );
>
> - @param[in] AslSignature The signature of Operation
> Region that we want to update.
> - @param[in] Buffer source of data to be written
> over original aml
> - @param[in] Length length of data to be
> overwritten
> +/**
> + This procedure will update the name of ASL Method
>
> - @retval EFI_SUCCESS The function completed
> successfully.
> + @param[in] AslSignature - The signature of Operation Region that
> we want to update.
> + @param[in] Buffer - source of data to be written over
> original aml
> + @param[in] Length - length of data to be overwritten
> +
> + @retval EFI_SUCCESS - The function completed successfully.
> + @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
> + @retval EFI_NOT_READY - Not ready to locate AcpiTable.
> + @retval EFI_UNSUPPORTED - The function is not supported in this
> library.
> **/
> EFI_STATUS
> -UpdateNameAslCode(
> +EFIAPI
> +UpdateMethodAslCode (
> IN UINT32 AslSignature,
> IN VOID *Buffer,
> IN UINTN Length
> @@ -86,55 +96,19 @@ UpdateNameAslCode(
> @param[in] Signature Pointer to an ASCII string
> containing the Signature to match
> @param[in, out] Table Updated with a pointer to the
> table
> @param[in, out] Handle AcpiSupport protocol table
> handle for the table found
> - @param[in, out] Version On input, the version of the
> table desired,
> - on output, the versions the
> table belongs to
> @see AcpiSupport protocol
> for details
>
> @retval EFI_SUCCESS The function completed
> successfully.
> + @retval EFI_NOT_FOUND Failed to locate AcpiTable.
> + @retval EFI_NOT_READY Not ready to locate
> AcpiTable.
> + @retval EFI_UNSUPPORTED The function is not
> supported in this library.s
> **/
> EFI_STATUS
> +EFIAPI
> LocateAcpiTableBySignature (
> IN UINT32 Signature,
> IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
> IN OUT UINTN *Handle
> );
>
> -/**
> - This function uses the ACPI support protocol to locate an ACPI SSDT table.
> - The table is located by searching for a matching OEM Table ID field.
> - Partial match searches are supported via the TableIdSize parameter.
> -
> - @param[in] TableId Pointer to an ASCII string
> containing the OEM Table ID from the ACPI table header
> - @param[in] TableIdSize Length of the TableId to match.
> Table ID are 8 bytes long, this function
> - will consider it a match if
> the first TableIdSize bytes match
> - @param[in, out] Table Updated with a pointer to the
> table
> - @param[in, out] Handle AcpiSupport protocol table
> handle for the table found
> - @param[in, out] Version See AcpiSupport protocol,
> GetAcpiTable function for use
> -
> - @retval EFI_SUCCESS The function completed
> successfully.
> -**/
> -EFI_STATUS
> -LocateAcpiTableByOemTableId (
> - IN UINT8 *TableId,
> - IN UINT8 TableIdSize,
> - IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
> - IN OUT UINTN *Handle
> - );
> -
> -/**
> - This function calculates and updates an UINT8 checksum.
> -
> - @param[in] Buffer Pointer to buffer to checksum
> - @param[in] Size Number of bytes to checksum
> - @param[in] ChecksumOffset Offset to place the checksum
> result in
> -
> - @retval EFI_SUCCESS The function completed
> successfully.
> -**/
> -EFI_STATUS
> -AcpiChecksum (
> - IN VOID *Buffer,
> - IN UINTN Size,
> - IN UINTN ChecksumOffset
> - );
> -
> #endif
> --
> 2.16.2.windows.1
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [edk2-platforms:PATCH v4 4/7] MinPlatformPkg/DxeAslUpdateLib: Cleans up APIs
2020-04-29 2:32 ` [edk2-platforms:PATCH v4 4/7] MinPlatformPkg/DxeAslUpdateLib: Cleans up APIs Miki Shindo
@ 2020-04-30 2:56 ` Chiu, Chasel
2020-04-30 5:00 ` Chaganty, Rangasai V
1 sibling, 0 replies; 23+ messages in thread
From: Chiu, Chasel @ 2020-04-30 2:56 UTC (permalink / raw)
To: Shindo, Miki, devel@edk2.groups.io
Cc: Chaganty, Rangasai V, Desimone, Nathaniel L, Agyeman, Prince,
Ni, Ray
Reviewed-by: Chasel Chiu <chasel.chiu@intel.com>
> -----Original Message-----
> From: Shindo, Miki <miki.shindo@intel.com>
> Sent: Wednesday, April 29, 2020 10:32 AM
> To: devel@edk2.groups.io
> Cc: Chaganty, Rangasai V <rangasai.v.chaganty@intel.com>; Chiu, Chasel
> <chasel.chiu@intel.com>; Desimone, Nathaniel L
> <nathaniel.l.desimone@intel.com>; Agyeman, Prince
> <prince.agyeman@intel.com>; Ni, Ray <ray.ni@intel.com>
> Subject: [edk2-platforms:PATCH v4 4/7] MinPlatformPkg/DxeAslUpdateLib:
> Cleans up APIs
>
> REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2536
>
> Callers of DxeAslUpdateLib don't have to call InitializeAslUpdateLib() but the
> library itself runs it internally. This commit makes it an internal call.
> LocateAcpiTableByOemTableId() is unreferenced externally so this commit
> makes it an internal call.
> PSS_PACKAGE_LAYOUT and AML_RESRC_TEMP_END_TAG are both
> unreferenced so they are removed.
> AslUpdateLib.h is cleaned up accordingly.
>
> Signed-off-by: Miki Shindo <miki.shindo@intel.com>
> Cc: Sai Chaganty <rangasai.v.chaganty@intel.com>
> Cc: Chasel Chiu <chasel.chiu@intel.com>
> Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
> Cc: Prince Agyeman <prince.agyeman@intel.com>
> Cc: Ray Ni <ray.ni@intel.com>
> ---
>
> Platform/Intel/MinPlatformPkg/Acpi/Library/DxeAslUpdateLib/DxeAslUpdate
> Lib.c | 209
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++++++++++++++++++++++++++++++++++-----------------------------------
> -------------------------------------------------------------------
> Platform/Intel/MinPlatformPkg/Include/Library/AslUpdateLib.h
> | 131
> ++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------
> -----------------------------------------------------------
> 2 files changed, 159 insertions(+), 181 deletions(-)
>
> diff --git
> a/Platform/Intel/MinPlatformPkg/Acpi/Library/DxeAslUpdateLib/DxeAslUpda
> teLib.c
> b/Platform/Intel/MinPlatformPkg/Acpi/Library/DxeAslUpdateLib/DxeAslUpda
> teLib.c
> index e6ab43db6d..1ba51a7c55 100644
> ---
> a/Platform/Intel/MinPlatformPkg/Acpi/Library/DxeAslUpdateLib/DxeAslUpda
> teLib.c
> +++ b/Platform/Intel/MinPlatformPkg/Acpi/Library/DxeAslUpdateLib/DxeAslU
> +++ pdateLib.c
> @@ -6,7 +6,7 @@
>
> This library uses the ACPI Support protocol.
>
> -Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
> +Copyright (c) 2017 - 2020, Intel Corporation. All rights reserved.<BR>
> SPDX-License-Identifier: BSD-2-Clause-Patent
>
> **/
> @@ -50,6 +50,62 @@ InitializeAslUpdateLib (
> return Status;
> }
>
> +/**
> + This function uses the ACPI SDT protocol to locate an ACPI SSDT table.
> +
> + @param[in] TableId - Pointer to an ASCII string containing
> the OEM Table ID from the ACPI table header
> + @param[in] TableIdSize - Length of the TableId to match. Table
> ID are 8 bytes long, this function
> + will consider it a match if the first
> TableIdSize bytes match
> + @param[in, out] Table - Updated with a pointer to the table
> + @param[in, out] Handle - AcpiSupport protocol table handle for
> the table found
> +
> + @retval EFI_SUCCESS - The function completed successfully.
> + @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
> + @retval EFI_NOT_READY - Not ready to locate AcpiTable.
> +**/
> +EFI_STATUS
> +LocateAcpiTableByOemTableId (
> + IN UINT8 *TableId,
> + IN UINT8 TableIdSize,
> + IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
> + IN OUT UINTN *Handle
> + )
> +{
> + EFI_STATUS Status;
> + INTN Index;
> + EFI_ACPI_TABLE_VERSION Version;
> + EFI_ACPI_DESCRIPTION_HEADER *OrgTable;
> +
> + if (mAcpiSdt == NULL) {
> + InitializeAslUpdateLib ();
> + if (mAcpiSdt == NULL) {
> + return EFI_NOT_READY;
> + }
> + }
> + ///
> + /// Locate table with matching ID
> + ///
> + Version = 0;
> + Index = 0;
> + do {
> + Status = mAcpiSdt->GetAcpiTable (Index, (EFI_ACPI_SDT_HEADER
> **)&OrgTable, &Version, Handle);
> + if (Status == EFI_NOT_FOUND) {
> + break;
> + }
> + ASSERT_EFI_ERROR (Status);
> + Index++;
> + } while (CompareMem (&(OrgTable->OemTableId), TableId, TableIdSize));
> +
> + if (Status != EFI_NOT_FOUND) {
> + *Table = AllocateCopyPool (OrgTable->Length, OrgTable);
> + ASSERT (*Table);
> + }
> +
> + ///
> + /// If we found the table, there will be no error.
> + ///
> + return Status;
> +}
>
> /**
> This procedure will update immediate value assigned to a Name @@
> -59,8 +115,11 @@ InitializeAslUpdateLib (
> @param[in] Length - length of data to be overwritten
>
> @retval EFI_SUCCESS - The function completed successfully.
> + @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
> + @retval EFI_NOT_READY - Not ready to locate AcpiTable.
> **/
> EFI_STATUS
> +EFIAPI
> UpdateNameAslCode (
> IN UINT32 AslSignature,
> IN VOID *Buffer,
> @@ -149,6 +208,50 @@ UpdateNameAslCode (
> return EFI_NOT_FOUND;
> }
>
> +/**
> + This procedure will update the name of ASL Method
> +
> + @param[in] TableId - Pointer to an ASCII string containing
> the OEM Table ID from the ACPI table header
> + @param[in] TableIdSize - Length of the TableId to match. Table
> ID are 8 bytes long, this function
> + will consider it a match if the first
> TableIdSize bytes match
> + @param[in] AslSignature - The signature of Operation Region that
> we want to update.
> + @param[in] Buffer - source of data to be written over
> original aml
> + @param[in] Length - length of data to be overwritten
> +
> + @retval EFI_UNSUPPORTED - The function is not supported in this
> library.
> +**/
> +EFI_STATUS
> +EFIAPI
> +UpdateSsdtNameAslCode (
> + IN UINT8 *TableId,
> + IN UINT8 TableIdSize,
> + IN UINT32 AslSignature,
> + IN VOID *Buffer,
> + IN UINTN Length
> + )
> +{
> + return EFI_UNSUPPORTED;
> +}
> +
> +/**
> + This procedure will update the name of ASL Method
> +
> + @param[in] AslSignature - The signature of Operation Region that
> we want to update.
> + @param[in] Buffer - source of data to be written over
> original aml
> + @param[in] Length - length of data to be overwritten
> +
> + @retval EFI_UNSUPPORTED - The function is not supported in this
> library.
> +**/
> +EFI_STATUS
> +EFIAPI
> +UpdateMethodAslCode (
> + IN UINT32 AslSignature,
> + IN VOID *Buffer,
> + IN UINTN Length
> + )
> +{
> + return EFI_UNSUPPORTED;
> +}
>
> /**
> This function uses the ACPI SDT protocol to locate an ACPI table.
> @@ -161,8 +264,11 @@ UpdateNameAslCode (
> @param[in, out] Version - The version of the table desired
>
> @retval EFI_SUCCESS - The function completed
> successfully.
> + @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
> + @retval EFI_NOT_READY - Not ready to locate AcpiTable.
> **/
> EFI_STATUS
> +EFIAPI
> LocateAcpiTableBySignature (
> IN UINT32 Signature,
> IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
> @@ -205,104 +311,3 @@ LocateAcpiTableBySignature (
> ///
> return Status;
> }
> -
> -/**
> - This function uses the ACPI SDT protocol to locate an ACPI SSDT table.
> -
> - @param[in] TableId - Pointer to an ASCII string containing
> the OEM Table ID from the ACPI table header
> - @param[in] TableIdSize - Length of the TableId to match. Table
> ID are 8 bytes long, this function
> - will consider it a match if the first
> TableIdSize bytes match
> - @param[in, out] Table - Updated with a pointer to the table
> - @param[in, out] Handle - AcpiSupport protocol table handle for
> the table found
> - @param[in, out] Version - See AcpiSupport protocol, GetAcpiTable
> function for use
> -
> - @retval EFI_SUCCESS - The function completed successfully.
> -**/
> -EFI_STATUS
> -LocateAcpiTableByOemTableId (
> - IN UINT8 *TableId,
> - IN UINT8 TableIdSize,
> - IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
> - IN OUT UINTN *Handle
> - )
> -{
> - EFI_STATUS Status;
> - INTN Index;
> - EFI_ACPI_TABLE_VERSION Version;
> - EFI_ACPI_DESCRIPTION_HEADER *OrgTable;
> -
> - if (mAcpiSdt == NULL) {
> - InitializeAslUpdateLib ();
> - if (mAcpiSdt == NULL) {
> - return EFI_NOT_READY;
> - }
> - }
> - ///
> - /// Locate table with matching ID
> - ///
> - Version = 0;
> - Index = 0;
> - do {
> - Status = mAcpiSdt->GetAcpiTable (Index, (EFI_ACPI_SDT_HEADER
> **)&OrgTable, &Version, Handle);
> - if (Status == EFI_NOT_FOUND) {
> - break;
> - }
> - ASSERT_EFI_ERROR (Status);
> - Index++;
> - } while (CompareMem (&(OrgTable->OemTableId), TableId, TableIdSize));
> -
> - if (Status != EFI_NOT_FOUND) {
> - *Table = AllocateCopyPool (OrgTable->Length, OrgTable);
> - ASSERT (*Table);
> - }
> -
> - ///
> - /// If we found the table, there will be no error.
> - ///
> - return Status;
> -}
> -
> -/**
> - This function calculates and updates an UINT8 checksum.
> -
> - @param[in] Buffer Pointer to buffer to checksum
> - @param[in] Size Number of bytes to checksum
> - @param[in] ChecksumOffset Offset to place the checksum result in
> -
> - @retval EFI_SUCCESS The function completed successfully.
> -**/
> -EFI_STATUS
> -AcpiChecksum (
> - IN VOID *Buffer,
> - IN UINTN Size,
> - IN UINTN ChecksumOffset
> - )
> -{
> - UINT8 Sum;
> - UINT8 *Ptr;
> -
> - Sum = 0;
> - ///
> - /// Initialize pointer
> - ///
> - Ptr = Buffer;
> -
> - ///
> - /// set checksum to 0 first
> - ///
> - Ptr[ChecksumOffset] = 0;
> -
> - ///
> - /// add all content of buffer
> - ///
> - while (Size--) {
> - Sum = (UINT8) (Sum + (*Ptr++));
> - }
> - ///
> - /// set checksum
> - ///
> - Ptr = Buffer;
> - Ptr[ChecksumOffset] = (UINT8) (0xff - Sum + 1);
> -
> - return EFI_SUCCESS;
> -}
> diff --git a/Platform/Intel/MinPlatformPkg/Include/Library/AslUpdateLib.h
> b/Platform/Intel/MinPlatformPkg/Include/Library/AslUpdateLib.h
> index d58b6d6458..0be8df6469 100644
> --- a/Platform/Intel/MinPlatformPkg/Include/Library/AslUpdateLib.h
> +++ b/Platform/Intel/MinPlatformPkg/Include/Library/AslUpdateLib.h
> @@ -5,7 +5,7 @@
> Make sure you meet the requirements for the library (protocol
> dependencies, use
> restrictions, etc).
>
> -Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
> +Copyright (c) 2017 - 2020, Intel Corporation. All rights reserved.<BR>
> SPDX-License-Identifier: BSD-2-Clause-Patent
>
> **/
> @@ -16,61 +16,70 @@ SPDX-License-Identifier: BSD-2-Clause-Patent // //
> Include files //
> +#include <Uefi/UefiBaseType.h>
> #include <IndustryStandard/Acpi.h>
> #include <Protocol/AcpiTable.h>
> #include <Protocol/AcpiSystemDescriptionTable.h>
>
> -//
> -// AML parsing definitions
> -//
> -#define AML_RESRC_TEMP_END_TAG 0x0079
> -
> -//
> -// ASL PSS package structure layout
> -//
> -#pragma pack (1)
> -typedef struct {
> - UINT8 NameOp; // 12h ;First opcode is a NameOp.
> - UINT8 PackageLead; // 20h ;First opcode is a NameOp.
> - UINT8 NumEntries; // 06h ;First opcode is a NameOp.
> - UINT8 DwordPrefix1; // 0Ch
> - UINT32 CoreFrequency; // 00h
> - UINT8 DwordPrefix2; // 0Ch
> - UINT32 Power; // 00h
> - UINT8 DwordPrefix3; // 0Ch
> - UINT32 TransLatency; // 00h
> - UINT8 DwordPrefix4; // 0Ch
> - UINT32 BmLatency; // 00h
> - UINT8 DwordPrefix5; // 0Ch
> - UINT32 Control; // 00h
> - UINT8 DwordPrefix6; // 0Ch
> - UINT32 Status; // 00h
> -} PSS_PACKAGE_LAYOUT;
> -#pragma pack()
> -
> /**
> - Initialize the ASL update library state.
> - This must be called prior to invoking other library functions.
> + This procedure will update immediate value assigned to a Name
>
> + @param[in] AslSignature The signature of Operation
> Region that we want to update.
> + @param[in] Buffer source of data to be written
> over original aml
> + @param[in] Length length of data to be
> overwritten
>
> @retval EFI_SUCCESS The function completed
> successfully.
> + @retval EFI_NOT_FOUND Failed to locate AcpiTable.
> + @retval EFI_NOT_READY Not ready to locate
> AcpiTable.
> + @retval EFI_UNSUPPORTED The function is not
> supported in this library
> **/
> EFI_STATUS
> -InitializeAslUpdateLib (
> - VOID
> +EFIAPI
> +UpdateNameAslCode(
> + IN UINT32 AslSignature,
> + IN VOID *Buffer,
> + IN UINTN Length
> );
>
> /**
> - This procedure will update immediate value assigned to a Name
> + This procedure will update the name of ASL Method
> +
> + @param[in] TableId - Pointer to an ASCII string containing
> the OEM Table ID from the ACPI table header
> + @param[in] TableIdSize - Length of the TableId to match. Table
> ID are 8 bytes long, this function
> + @param[in] AslSignature - The signature of Operation Region that
> we want to update.
> + @param[in] Buffer - source of data to be written over
> original aml
> + @param[in] Length - length of data to be overwritten
> +
> + @retval EFI_SUCCESS - The function completed successfully.
> + @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
> + @retval EFI_NOT_READY - Not ready to locate AcpiTable.
> + @retval EFI_UNSUPPORTED - The function is not supported in this
> library
> +**/
> +EFI_STATUS
> +EFIAPI
> +UpdateSsdtNameAslCode (
> + IN UINT8 *TableId,
> + IN UINT8 TableIdSize,
> + IN UINT32 AslSignature,
> + IN VOID *Buffer,
> + IN UINTN Length
> + );
>
> - @param[in] AslSignature The signature of Operation
> Region that we want to update.
> - @param[in] Buffer source of data to be written
> over original aml
> - @param[in] Length length of data to be
> overwritten
> +/**
> + This procedure will update the name of ASL Method
>
> - @retval EFI_SUCCESS The function completed
> successfully.
> + @param[in] AslSignature - The signature of Operation Region that
> we want to update.
> + @param[in] Buffer - source of data to be written over
> original aml
> + @param[in] Length - length of data to be overwritten
> +
> + @retval EFI_SUCCESS - The function completed successfully.
> + @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
> + @retval EFI_NOT_READY - Not ready to locate AcpiTable.
> + @retval EFI_UNSUPPORTED - The function is not supported in this
> library
> **/
> EFI_STATUS
> -UpdateNameAslCode(
> +EFIAPI
> +UpdateMethodAslCode (
> IN UINT32 AslSignature,
> IN VOID *Buffer,
> IN UINTN Length
> @@ -86,55 +95,19 @@ UpdateNameAslCode(
> @param[in] Signature Pointer to an ASCII string
> containing the Signature to match
> @param[in, out] Table Updated with a pointer to the
> table
> @param[in, out] Handle AcpiSupport protocol table
> handle for the table found
> - @param[in, out] Version On input, the version of the
> table desired,
> - on output, the versions the
> table belongs to
> @see AcpiSupport protocol
> for details
>
> @retval EFI_SUCCESS The function completed
> successfully.
> + @retval EFI_NOT_FOUND Failed to locate AcpiTable.
> + @retval EFI_NOT_READY Not ready to locate
> AcpiTable.
> + @retval EFI_UNSUPPORTED The function is not
> supported in this library
> **/
> EFI_STATUS
> +EFIAPI
> LocateAcpiTableBySignature (
> IN UINT32 Signature,
> IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
> IN OUT UINTN *Handle
> );
>
> -/**
> - This function uses the ACPI support protocol to locate an ACPI SSDT table.
> - The table is located by searching for a matching OEM Table ID field.
> - Partial match searches are supported via the TableIdSize parameter.
> -
> - @param[in] TableId Pointer to an ASCII string
> containing the OEM Table ID from the ACPI table header
> - @param[in] TableIdSize Length of the TableId to match.
> Table ID are 8 bytes long, this function
> - will consider it a match if
> the first TableIdSize bytes match
> - @param[in, out] Table Updated with a pointer to the
> table
> - @param[in, out] Handle AcpiSupport protocol table
> handle for the table found
> - @param[in, out] Version See AcpiSupport protocol,
> GetAcpiTable function for use
> -
> - @retval EFI_SUCCESS The function completed
> successfully.
> -**/
> -EFI_STATUS
> -LocateAcpiTableByOemTableId (
> - IN UINT8 *TableId,
> - IN UINT8 TableIdSize,
> - IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
> - IN OUT UINTN *Handle
> - );
> -
> -/**
> - This function calculates and updates an UINT8 checksum.
> -
> - @param[in] Buffer Pointer to buffer to checksum
> - @param[in] Size Number of bytes to checksum
> - @param[in] ChecksumOffset Offset to place the checksum
> result in
> -
> - @retval EFI_SUCCESS The function completed
> successfully.
> -**/
> -EFI_STATUS
> -AcpiChecksum (
> - IN VOID *Buffer,
> - IN UINTN Size,
> - IN UINTN ChecksumOffset
> - );
> -
> #endif
> --
> 2.16.2.windows.1
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [edk2-platforms:PATCH v4 6/7] CoffeelakeSiliconPkg/DxeAslUpdateLib: Cleans up APIs
2020-04-29 2:32 ` [edk2-platforms:PATCH v4 6/7] CoffeelakeSiliconPkg/DxeAslUpdateLib: " Miki Shindo
@ 2020-04-30 2:57 ` Chiu, Chasel
2020-04-30 5:03 ` Chaganty, Rangasai V
1 sibling, 0 replies; 23+ messages in thread
From: Chiu, Chasel @ 2020-04-30 2:57 UTC (permalink / raw)
To: Shindo, Miki, devel@edk2.groups.io
Cc: Chaganty, Rangasai V, Desimone, Nathaniel L, Agyeman, Prince,
Ni, Ray
Reviewed-by: Chasel Chiu <chasel.chiu@intel.com>
> -----Original Message-----
> From: Shindo, Miki <miki.shindo@intel.com>
> Sent: Wednesday, April 29, 2020 10:32 AM
> To: devel@edk2.groups.io
> Cc: Chaganty, Rangasai V <rangasai.v.chaganty@intel.com>; Chiu, Chasel
> <chasel.chiu@intel.com>; Desimone, Nathaniel L
> <nathaniel.l.desimone@intel.com>; Agyeman, Prince
> <prince.agyeman@intel.com>; Ni, Ray <ray.ni@intel.com>
> Subject: [edk2-platforms:PATCH v4 6/7]
> CoffeelakeSiliconPkg/DxeAslUpdateLib: Cleans up APIs
>
> REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2536
>
> Callers of DxeAslUpdateLib don't have to call InitializeAslUpdateLib() but the
> library itself runs it internally. This commit deletes the redundant calls in
> caller side and makes it an internal call.
> LocateAcpiTableByOemTableId() is unreferenced externally so this commit
> makes it an internal call.
> PSS_PACKAGE_LAYOUT and AML_RESRC_TEMP_END_TAG are both
> unreferenced so they are removed.
> AslUpdateLib.h is cleaned up accordingly.
>
> Signed-off-by: Miki Shindo <miki.shindo@intel.com>
> Cc: Sai Chaganty <rangasai.v.chaganty@intel.com>
> Cc: Chasel Chiu <chasel.chiu@intel.com>
> Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
> Cc: Prince Agyeman <prince.agyeman@intel.com>
> Cc: Ray Ni <ray.ni@intel.com>
> ---
>
> Silicon/Intel/CoffeelakeSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib.
> c | 190
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++++++++++++++--------------------------------------------------------------------
> -----------------------------------
>
> Silicon/Intel/CoffeelakeSiliconPkg/Library/DxeAslUpdateLibNull/DxeAslUpdat
> eLibNull.c | 94
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------
> --------------------------
> Silicon/Intel/CoffeelakeSiliconPkg/Pch/PchInit/Dxe/PchAcpi.c
> | 3 ---
> Silicon/Intel/CoffeelakeSiliconPkg/Include/Library/AslUpdateLib.h
> | 114
> +++++++++++++++++++++++++++++++++++------------------------------------------------
> -------------------------------
> 4 files changed, 180 insertions(+), 221 deletions(-)
>
> diff --git
> a/Silicon/Intel/CoffeelakeSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateL
> ib.c
> b/Silicon/Intel/CoffeelakeSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateL
> ib.c
> index 04cf66fd2f..f18ca835ad 100644
> ---
> a/Silicon/Intel/CoffeelakeSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateL
> ib.c
> +++ b/Silicon/Intel/CoffeelakeSiliconPkg/Library/DxeAslUpdateLib/DxeAslU
> +++ pdateLib.c
> @@ -6,7 +6,7 @@
>
> This library uses the ACPI Support protocol.
>
> - Copyright (c) 2019 Intel Corporation. All rights reserved. <BR>
> + Copyright (c) 2019 -2020, Intel Corporation. All rights reserved.
> + <BR>
>
> SPDX-License-Identifier: BSD-2-Clause-Patent **/ @@ -51,6 +51,62 @@
> InitializeAslUpdateLib (
> return Status;
> }
>
> +/**
> + This function uses the ACPI SDT protocol to locate an ACPI SSDT table.
> +
> + @param[in] TableId - Pointer to an ASCII string containing
> the OEM Table ID from the ACPI table header
> + @param[in] TableIdSize - Length of the TableId to match. Table
> ID are 8 bytes long, this function
> + will consider it a match if the first
> TableIdSize bytes match
> + @param[in, out] Table - Updated with a pointer to the table
> + @param[in, out] Handle - AcpiSupport protocol table handle for
> the table found
> +
> + @retval EFI_SUCCESS - The function completed successfully.
> + @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
> + @retval EFI_NOT_READY - Not ready to locate AcpiTable.
> +**/
> +EFI_STATUS
> +LocateAcpiTableByOemTableId (
> + IN UINT8 *TableId,
> + IN UINT8 TableIdSize,
> + IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
> + IN OUT UINTN *Handle
> + )
> +{
> + EFI_STATUS Status;
> + INTN Index;
> + EFI_ACPI_TABLE_VERSION Version;
> + EFI_ACPI_DESCRIPTION_HEADER *OrgTable;
> +
> + if (mAcpiSdt == NULL) {
> + InitializeAslUpdateLib ();
> + if (mAcpiSdt == NULL) {
> + return EFI_NOT_READY;
> + }
> + }
> + ///
> + /// Locate table with matching ID
> + ///
> + Version = 0;
> + Index = 0;
> + do {
> + Status = mAcpiSdt->GetAcpiTable (Index, (EFI_ACPI_SDT_HEADER
> **)&OrgTable, &Version, Handle);
> + if (Status == EFI_NOT_FOUND) {
> + break;
> + }
> + ASSERT_EFI_ERROR (Status);
> + Index++;
> + } while (CompareMem (&(OrgTable->OemTableId), TableId, TableIdSize));
> +
> + if (Status != EFI_NOT_FOUND) {
> + *Table = AllocateCopyPool (OrgTable->Length, OrgTable);
> + ASSERT (*Table);
> + }
> +
> + ///
> + /// If we found the table, there will be no error.
> + ///
> + return Status;
> +}
>
> /**
> This procedure will update immediate value assigned to a Name @@
> -61,8 +117,10 @@ InitializeAslUpdateLib (
>
> @retval EFI_SUCCESS - The function completed successfully.
> @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
> + @retval EFI_NOT_READY - Not ready to locate AcpiTable.
> **/
> EFI_STATUS
> +EFIAPI
> UpdateNameAslCode (
> IN UINT32 AslSignature,
> IN VOID *Buffer,
> @@ -154,6 +212,29 @@ UpdateNameAslCode (
> return EFI_NOT_FOUND;
> }
>
> +/**
> + This procedure will update immediate value assigned to a Name in SSDT
> +table
> +
> + @param[in] TableId - Pointer to an ASCII string containing
> the OEM Table ID from the ACPI table header
> + @param[in] TableIdSize - Length of the TableId to match. Table
> ID are 8 bytes long, this function
> + @param[in] Buffer - source of data to be written over
> original aml
> + @param[in] Length - length of data to be overwritten
> +
> + @retval EFI_UNSUPPORTED The function is not supported in
> this library.
> +**/
> +EFI_STATUS
> +EFIAPI
> +UpdateSsdtNameAslCode (
> + IN UINT8 *TableId,
> + IN UINT8 TableIdSize,
> + IN UINT32 AslSignature,
> + IN VOID *Buffer,
> + IN UINTN Length
> + )
> +{
> + return EFI_UNSUPPORTED;
> +}
> +
> /**
> This procedure will update the name of ASL Method
>
> @@ -163,8 +244,10 @@ UpdateNameAslCode (
>
> @retval EFI_SUCCESS - The function completed successfully.
> @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
> + @retval EFI_NOT_READY - Not ready to locate AcpiTable.
> **/
> EFI_STATUS
> +EFIAPI
> UpdateMethodAslCode (
> IN UINT32 AslSignature,
> IN VOID *Buffer,
> @@ -253,11 +336,13 @@ UpdateMethodAslCode (
> @param[in] Signature - Pointer to an ASCII string containing
> the OEM Table ID from the ACPI table header
> @param[in, out] Table - Updated with a pointer to the table
> @param[in, out] Handle - AcpiSupport protocol table handle
> for the table found
> - @param[in, out] Version - The version of the table desired
>
> @retval EFI_SUCCESS - The function completed
> successfully.
> + @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
> + @retval EFI_NOT_READY - Not ready to locate AcpiTable.
> **/
> EFI_STATUS
> +EFIAPI
> LocateAcpiTableBySignature (
> IN UINT32 Signature,
> IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
> @@ -300,104 +385,3 @@ LocateAcpiTableBySignature (
> ///
> return Status;
> }
> -
> -/**
> - This function uses the ACPI SDT protocol to locate an ACPI SSDT table.
> -
> - @param[in] TableId - Pointer to an ASCII string containing
> the OEM Table ID from the ACPI table header
> - @param[in] TableIdSize - Length of the TableId to match. Table
> ID are 8 bytes long, this function
> - will consider it a match if the first
> TableIdSize bytes match
> - @param[in, out] Table - Updated with a pointer to the table
> - @param[in, out] Handle - AcpiSupport protocol table handle for
> the table found
> - @param[in, out] Version - See AcpiSupport protocol, GetAcpiTable
> function for use
> -
> - @retval EFI_SUCCESS - The function completed successfully.
> -**/
> -EFI_STATUS
> -LocateAcpiTableByOemTableId (
> - IN UINT8 *TableId,
> - IN UINT8 TableIdSize,
> - IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
> - IN OUT UINTN *Handle
> - )
> -{
> - EFI_STATUS Status;
> - INTN Index;
> - EFI_ACPI_TABLE_VERSION Version;
> - EFI_ACPI_DESCRIPTION_HEADER *OrgTable;
> -
> - if (mAcpiSdt == NULL) {
> - InitializeAslUpdateLib ();
> - if (mAcpiSdt == NULL) {
> - return EFI_NOT_READY;
> - }
> - }
> - ///
> - /// Locate table with matching ID
> - ///
> - Version = 0;
> - Index = 0;
> - do {
> - Status = mAcpiSdt->GetAcpiTable (Index, (EFI_ACPI_SDT_HEADER
> **)&OrgTable, &Version, Handle);
> - if (Status == EFI_NOT_FOUND) {
> - break;
> - }
> - ASSERT_EFI_ERROR (Status);
> - Index++;
> - } while (CompareMem (&(OrgTable->OemTableId), TableId, TableIdSize));
> -
> - if (Status != EFI_NOT_FOUND) {
> - *Table = AllocateCopyPool (OrgTable->Length, OrgTable);
> - ASSERT (*Table);
> - }
> -
> - ///
> - /// If we found the table, there will be no error.
> - ///
> - return Status;
> -}
> -
> -/**
> - This function calculates and updates an UINT8 checksum.
> -
> - @param[in] Buffer Pointer to buffer to checksum
> - @param[in] Size Number of bytes to checksum
> - @param[in] ChecksumOffset Offset to place the checksum result in
> -
> - @retval EFI_SUCCESS The function completed successfully.
> -**/
> -EFI_STATUS
> -AcpiChecksum (
> - IN VOID *Buffer,
> - IN UINTN Size,
> - IN UINTN ChecksumOffset
> - )
> -{
> - UINT8 Sum;
> - UINT8 *Ptr;
> -
> - Sum = 0;
> - ///
> - /// Initialize pointer
> - ///
> - Ptr = Buffer;
> -
> - ///
> - /// set checksum to 0 first
> - ///
> - Ptr[ChecksumOffset] = 0;
> -
> - ///
> - /// add all content of buffer
> - ///
> - while (Size--) {
> - Sum = (UINT8) (Sum + (*Ptr++));
> - }
> - ///
> - /// set checksum
> - ///
> - Ptr = Buffer;
> - Ptr[ChecksumOffset] = (UINT8) (0xff - Sum + 1);
> -
> - return EFI_SUCCESS;
> -}
> diff --git
> a/Silicon/Intel/CoffeelakeSiliconPkg/Library/DxeAslUpdateLibNull/DxeAslUpd
> ateLibNull.c
> b/Silicon/Intel/CoffeelakeSiliconPkg/Library/DxeAslUpdateLibNull/DxeAslUpd
> ateLibNull.c
> index a7ce92b7c3..63e232f04b 100644
> ---
> a/Silicon/Intel/CoffeelakeSiliconPkg/Library/DxeAslUpdateLibNull/DxeAslUpd
> ateLibNull.c
> +++ b/Silicon/Intel/CoffeelakeSiliconPkg/Library/DxeAslUpdateLibNull/Dxe
> +++ AslUpdateLibNull.c
> @@ -6,7 +6,7 @@
>
> This library uses the ACPI Support protocol.
>
> - Copyright (c) 2019 Intel Corporation. All rights reserved. <BR>
> + Copyright (c) 2019 - 2020, Intel Corporation. All rights reserved.
> + <BR>
>
> SPDX-License-Identifier: BSD-2-Clause-Patent **/ @@ -40,6 +40,27 @@
> InitializeAslUpdateLib (
> return EFI_SUCCESS;
> }
>
> +/**
> + This function uses the ACPI SDT protocol to locate an ACPI SSDT table.
> +
> + @param[in] TableId - Pointer to an ASCII string containing
> the OEM Table ID from the ACPI table header
> + @param[in] TableIdSize - Length of the TableId to match. Table
> ID are 8 bytes long, this function
> + will consider it a match if the first
> TableIdSize bytes match
> + @param[in, out] Table - Updated with a pointer to the table
> + @param[in, out] Handle - AcpiSupport protocol table handle for
> the table found
> +
> + @retval EFI_SUCCESS - The function completed successfully.
> +**/
> +EFI_STATUS
> +LocateAcpiTableByOemTableId (
> + IN UINT8 *TableId,
> + IN UINT8 TableIdSize,
> + IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
> + IN OUT UINTN *Handle
> + )
> +{
> + return EFI_SUCCESS;
> +}
>
> /**
> This procedure will update immediate value assigned to a Name @@
> -51,6 +72,7 @@ InitializeAslUpdateLib (
> @retval EFI_SUCCESS - The function completed successfully.
> **/
> EFI_STATUS
> +EFIAPI
> UpdateNameAslCode (
> IN UINT32 AslSignature,
> IN VOID *Buffer,
> @@ -60,66 +82,66 @@ UpdateNameAslCode (
> return EFI_SUCCESS;
> }
>
> -
> /**
> - This function uses the ACPI SDT protocol to locate an ACPI table.
> - It is really only useful for finding tables that only have a single instance,
> - e.g. FADT, FACS, MADT, etc. It is not good for locating SSDT, etc.
> + This procedure will update immediate value assigned to a Name in SSDT
> + table
>
> - @param[in] Signature - Pointer to an ASCII string containing
> the OEM Table ID from the ACPI table header
> - @param[in, out] Table - Updated with a pointer to the table
> - @param[in, out] Handle - AcpiSupport protocol table handle
> for the table found
> - @param[in, out] Version - The version of the table desired
> + @param[in] TableId - Pointer to an ASCII string containing
> the OEM Table ID from the ACPI table header
> + @param[in] TableIdSize - Length of the TableId to match. Table
> ID are 8 bytes long, this function
> + @param[in] Buffer - source of data to be written over
> original aml
> + @param[in] Length - length of data to be overwritten
>
> - @retval EFI_SUCCESS - The function completed successfully.
> + @retval EFI_SUCCESS - The function completed successfully.
> **/
> EFI_STATUS
> -LocateAcpiTableBySignature (
> - IN UINT32 Signature,
> - IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
> - IN OUT UINTN *Handle
> +EFIAPI
> +UpdateSsdtNameAslCode (
> + IN UINT8 *TableId,
> + IN UINT8 TableIdSize,
> + IN UINT32 AslSignature,
> + IN VOID *Buffer,
> + IN UINTN Length
> )
> {
> return EFI_SUCCESS;
> }
>
> /**
> - This function uses the ACPI SDT protocol to locate an ACPI SSDT table.
> + This procedure will update the name of ASL Method
>
> - @param[in] TableId - Pointer to an ASCII string containing
> the OEM Table ID from the ACPI table header
> - @param[in] TableIdSize - Length of the TableId to match. Table
> ID are 8 bytes long, this function
> - will consider it a match if the first
> TableIdSize bytes match
> - @param[in, out] Table - Updated with a pointer to the table
> - @param[in, out] Handle - AcpiSupport protocol table handle for
> the table found
> - @param[in, out] Version - See AcpiSupport protocol, GetAcpiTable
> function for use
> + @param[in] AslSignature - The signature of Operation Region that
> we want to update.
> + @param[in] Buffer - source of data to be written over
> original aml
> + @param[in] Length - length of data to be overwritten
>
> @retval EFI_SUCCESS - The function completed successfully.
> **/
> EFI_STATUS
> -LocateAcpiTableByOemTableId (
> - IN UINT8 *TableId,
> - IN UINT8 TableIdSize,
> - IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
> - IN OUT UINTN *Handle
> +EFIAPI
> +UpdateMethodAslCode (
> + IN UINT32 AslSignature,
> + IN VOID *Buffer,
> + IN UINTN Length
> )
> {
> return EFI_SUCCESS;
> }
>
> /**
> - This function calculates and updates an UINT8 checksum.
> -
> - @param[in] Buffer Pointer to buffer to checksum
> - @param[in] Size Number of bytes to checksum
> - @param[in] ChecksumOffset Offset to place the checksum result in
> + This function uses the ACPI SDT protocol to locate an ACPI table.
> + It is really only useful for finding tables that only have a single
> + instance, e.g. FADT, FACS, MADT, etc. It is not good for locating SSDT,
> etc.
>
> - @retval EFI_SUCCESS The function completed successfully.
> + @param[in] Signature - Pointer to an ASCII string containing
> the OEM Table ID from the ACPI table header
> + @param[in, out] Table - Updated with a pointer to the table
> + @param[in, out] Handle - AcpiSupport protocol table handle
> for the table found
> +s
> + @retval EFI_SUCCESS - The function completed
> successfully.
> **/
> EFI_STATUS
> -AcpiChecksum (
> - IN VOID *Buffer,
> - IN UINTN Size,
> - IN UINTN ChecksumOffset
> +EFIAPI
> +LocateAcpiTableBySignature (
> + IN UINT32 Signature,
> + IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
> + IN OUT UINTN *Handle
> )
> {
> return EFI_SUCCESS;
> diff --git a/Silicon/Intel/CoffeelakeSiliconPkg/Pch/PchInit/Dxe/PchAcpi.c
> b/Silicon/Intel/CoffeelakeSiliconPkg/Pch/PchInit/Dxe/PchAcpi.c
> index 12f1a7f4fe..807cdb92f7 100644
> --- a/Silicon/Intel/CoffeelakeSiliconPkg/Pch/PchInit/Dxe/PchAcpi.c
> +++ b/Silicon/Intel/CoffeelakeSiliconPkg/Pch/PchInit/Dxe/PchAcpi.c
> @@ -438,9 +438,6 @@ PatchPchNvsAreaAddress (
> UINT32 Address;
> UINT16 Length;
>
> - Status = InitializeAslUpdateLib ();
> - ASSERT_EFI_ERROR (Status);
> -
> Address = (UINT32) (UINTN) mPchNvsAreaProtocol.Area;
> Length = (UINT16) sizeof (PCH_NVS_AREA);
> DEBUG ((DEBUG_INFO, "PatchPchNvsAreaAddress: PCH NVS Address %x
> Length %x\n", Address, Length)); diff --git
> a/Silicon/Intel/CoffeelakeSiliconPkg/Include/Library/AslUpdateLib.h
> b/Silicon/Intel/CoffeelakeSiliconPkg/Include/Library/AslUpdateLib.h
> index 39baa6c03a..1a0ec4fa16 100644
> --- a/Silicon/Intel/CoffeelakeSiliconPkg/Include/Library/AslUpdateLib.h
> +++ b/Silicon/Intel/CoffeelakeSiliconPkg/Include/Library/AslUpdateLib.h
> @@ -5,7 +5,7 @@
> Make sure you meet the requirements for the library (protocol
> dependencies, use
> restrictions, etc).
>
> - Copyright (c) 2019 Intel Corporation. All rights reserved. <BR>
> + Copyright (c) 2019 - 2020, Intel Corporation. All rights reserved.
> + <BR>
>
> SPDX-License-Identifier: BSD-2-Clause-Patent **/ @@ -16,61 +16,50
> @@ // // Include files //
> +#include <Uefi/UefiBaseType.h>
> #include <IndustryStandard/Acpi.h>
> #include <Protocol/AcpiTable.h>
> #include <Protocol/AcpiSystemDescriptionTable.h>
>
> -//
> -// AML parsing definitions
> -//
> -#define AML_RESRC_TEMP_END_TAG 0x0079
> -
> -//
> -// ASL PSS package structure layout
> -//
> -#pragma pack (1)
> -typedef struct {
> - UINT8 NameOp; // 12h ;First opcode is a NameOp.
> - UINT8 PackageLead; // 20h ;First opcode is a NameOp.
> - UINT8 NumEntries; // 06h ;First opcode is a NameOp.
> - UINT8 DwordPrefix1; // 0Ch
> - UINT32 CoreFrequency; // 00h
> - UINT8 DwordPrefix2; // 0Ch
> - UINT32 Power; // 00h
> - UINT8 DwordPrefix3; // 0Ch
> - UINT32 TransLatency; // 00h
> - UINT8 DwordPrefix4; // 0Ch
> - UINT32 BmLatency; // 00h
> - UINT8 DwordPrefix5; // 0Ch
> - UINT32 Control; // 00h
> - UINT8 DwordPrefix6; // 0Ch
> - UINT32 Status; // 00h
> -} PSS_PACKAGE_LAYOUT;
> -#pragma pack()
> -
> /**
> - Initialize the ASL update library state.
> - This must be called prior to invoking other library functions.
> + This procedure will update immediate value assigned to a Name
>
> + @param[in] AslSignature The signature of Operation
> Region that we want to update.
> + @param[in] Buffer source of data to be written
> over original aml
> + @param[in] Length length of data to be
> overwritten
>
> @retval EFI_SUCCESS The function completed
> successfully.
> + @retval EFI_NOT_FOUND Failed to locate AcpiTable.
> + @retval EFI_NOT_READY Not ready to locate
> AcpiTable.
> + @retval EFI_UNSUPPORTED The function is not
> supported in this library.
> **/
> EFI_STATUS
> -InitializeAslUpdateLib (
> - VOID
> +EFIAPI
> +UpdateNameAslCode(
> + IN UINT32 AslSignature,
> + IN VOID *Buffer,
> + IN UINTN Length
> );
>
> /**
> - This procedure will update immediate value assigned to a Name
> + This procedure will update the name of ASL Method
>
> - @param[in] AslSignature The signature of Operation
> Region that we want to update.
> - @param[in] Buffer source of data to be written
> over original aml
> - @param[in] Length length of data to be
> overwritten
> + @param[in] TableId - Pointer to an ASCII string containing
> the OEM Table ID from the ACPI table header
> + @param[in] TableIdSize - Length of the TableId to match. Table
> ID are 8 bytes long, this function
> + @param[in] AslSignature - The signature of Operation Region that
> we want to update.
> + @param[in] Buffer - source of data to be written over
> original aml
> + @param[in] Length - length of data to be overwritten
>
> - @retval EFI_SUCCESS The function completed
> successfully.
> + @retval EFI_SUCCESS - The function completed successfully.
> + @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
> + @retval EFI_NOT_READY - Not ready to locate AcpiTable.
> + @retval EFI_UNSUPPORTED - The function is not supported in this
> library.
> **/
> EFI_STATUS
> -UpdateNameAslCode(
> +EFIAPI
> +UpdateSsdtNameAslCode (
> + IN UINT8 *TableId,
> + IN UINT8 TableIdSize,
> IN UINT32 AslSignature,
> IN VOID *Buffer,
> IN UINTN Length
> @@ -85,8 +74,11 @@ UpdateNameAslCode(
>
> @retval EFI_SUCCESS - The function completed successfully.
> @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
> + @retval EFI_NOT_READY - Not ready to locate AcpiTable.
> + @retval EFI_UNSUPPORTED - The function is not supported in this
> library.
> **/
> EFI_STATUS
> +EFIAPI
> UpdateMethodAslCode (
> IN UINT32 AslSignature,
> IN VOID *Buffer,
> @@ -103,55 +95,19 @@ UpdateMethodAslCode (
> @param[in] Signature Pointer to an ASCII string
> containing the Signature to match
> @param[in, out] Table Updated with a pointer to the
> table
> @param[in, out] Handle AcpiSupport protocol table
> handle for the table found
> - @param[in, out] Version On input, the version of the
> table desired,
> - on output, the versions the
> table belongs to
> @see AcpiSupport protocol
> for details
>
> @retval EFI_SUCCESS The function completed
> successfully.
> + @retval EFI_NOT_FOUND Failed to locate AcpiTable.
> + @retval EFI_NOT_READY Not ready to locate
> AcpiTable.
> + @retval EFI_UNSUPPORTED The function is not
> supported in this library.
> **/
> EFI_STATUS
> +EFIAPI
> LocateAcpiTableBySignature (
> IN UINT32 Signature,
> IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
> IN OUT UINTN *Handle
> );
>
> -/**
> - This function uses the ACPI support protocol to locate an ACPI SSDT table.
> - The table is located by searching for a matching OEM Table ID field.
> - Partial match searches are supported via the TableIdSize parameter.
> -
> - @param[in] TableId Pointer to an ASCII string
> containing the OEM Table ID from the ACPI table header
> - @param[in] TableIdSize Length of the TableId to match.
> Table ID are 8 bytes long, this function
> - will consider it a match if
> the first TableIdSize bytes match
> - @param[in, out] Table Updated with a pointer to the
> table
> - @param[in, out] Handle AcpiSupport protocol table
> handle for the table found
> - @param[in, out] Version See AcpiSupport protocol,
> GetAcpiTable function for use
> -
> - @retval EFI_SUCCESS The function completed
> successfully.
> -**/
> -EFI_STATUS
> -LocateAcpiTableByOemTableId (
> - IN UINT8 *TableId,
> - IN UINT8 TableIdSize,
> - IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
> - IN OUT UINTN *Handle
> - );
> -
> -/**
> - This function calculates and updates an UINT8 checksum.
> -
> - @param[in] Buffer Pointer to buffer to checksum
> - @param[in] Size Number of bytes to checksum
> - @param[in] ChecksumOffset Offset to place the checksum
> result in
> -
> - @retval EFI_SUCCESS The function completed
> successfully.
> -**/
> -EFI_STATUS
> -AcpiChecksum (
> - IN VOID *Buffer,
> - IN UINTN Size,
> - IN UINTN ChecksumOffset
> - );
> -
> #endif
> --
> 2.16.2.windows.1
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [edk2-platforms:PATCH v4 7/7] IntelSiliconPkg/DxeAslUpdateLib: Add DxeAslUpdateLib support
2020-04-29 2:32 ` [edk2-platforms:PATCH v4 7/7] IntelSiliconPkg/DxeAslUpdateLib: Add DxeAslUpdateLib support Miki Shindo
@ 2020-04-30 2:57 ` Chiu, Chasel
2020-04-30 5:13 ` Chaganty, Rangasai V
1 sibling, 0 replies; 23+ messages in thread
From: Chiu, Chasel @ 2020-04-30 2:57 UTC (permalink / raw)
To: Shindo, Miki, devel@edk2.groups.io
Cc: Chaganty, Rangasai V, Desimone, Nathaniel L, Agyeman, Prince,
Ni, Ray
Reviewed-by: Chasel Chiu <chasel.chiu@intel.com>
> -----Original Message-----
> From: Shindo, Miki <miki.shindo@intel.com>
> Sent: Wednesday, April 29, 2020 10:32 AM
> To: devel@edk2.groups.io
> Cc: Chaganty, Rangasai V <rangasai.v.chaganty@intel.com>; Chiu, Chasel
> <chasel.chiu@intel.com>; Desimone, Nathaniel L
> <nathaniel.l.desimone@intel.com>; Agyeman, Prince
> <prince.agyeman@intel.com>; Ni, Ray <ray.ni@intel.com>
> Subject: [edk2-platforms:PATCH v4 7/7] IntelSiliconPkg/DxeAslUpdateLib: Add
> DxeAslUpdateLib support
>
> REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2536
>
> This commit adds DxeAslUpdateLib library support in IntelSiliconPkg, which
> allows AML to be updated in DXE.
>
> Signed-off-by: Miki Shindo <miki.shindo@intel.com>
> Cc: Sai Chaganty <rangasai.v.chaganty@intel.com>
> Cc: Chasel Chiu <chasel.chiu@intel.com>
> Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
> Cc: Prince Agyeman <prince.agyeman@intel.com>
> Cc: Ray Ni <ray.ni@intel.com>
> Acked-by: Chasel Chiu <chasel.chiu@intel.com>
> Acked-by: Nate DeSimone <nathaniel.l.desimone@intel.com>
> ---
> Silicon/Intel/IntelSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib.c
> | 518
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++
> Silicon/Intel/IntelSiliconPkg/Include/Library/AslUpdateLib.h
> | 116
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++++++++++++++++++++++++++++++++++++++
> Silicon/Intel/IntelSiliconPkg/IntelSiliconPkg.dec
> | 4 ++++
> Silicon/Intel/IntelSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib.inf |
> 42 ++++++++++++++++++++++++++++++++++++++++++
> 4 files changed, 680 insertions(+)
>
> diff --git
> a/Silicon/Intel/IntelSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib.c
> b/Silicon/Intel/IntelSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib.c
> new file mode 100644
> index 0000000000..9b3117536a
> --- /dev/null
> +++ b/Silicon/Intel/IntelSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdate
> +++ Lib.c
> @@ -0,0 +1,518 @@
> +/** @file
> + Boot service DXE ASL update library implementation.
> + Note that the current version of the library updates AML.
> +
> + These functions in this file can be called during DXE and cannot be
> + called during runtime or in SMM which should use a RT or SMM library.
> +
> + This library uses the ACPI Support protocol.
> +
> + Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
> + SPDX-License-Identifier: BSD-2-Clause-Patent **/
> +
> +#include <Base.h>
> +#include <Uefi/UefiBaseType.h>
> +#include <Uefi/UefiSpec.h>
> +#include <Library/UefiBootServicesTableLib.h>
> +#include <Library/DebugLib.h>
> +#include <Library/UefiLib.h>
> +#include <Library/BaseMemoryLib.h>
> +#include <Library/MemoryAllocationLib.h>
> +
> +#include <Library/AslUpdateLib.h>
> +
> +//
> +// Function implemenations
> +//
> +static EFI_ACPI_SDT_PROTOCOL *mAcpiSdt = NULL;
> +static EFI_ACPI_TABLE_PROTOCOL *mAcpiTable = NULL;
> +
> +/**
> + Initialize the ASL update library state.
> + This must be called prior to invoking other library functions.
> +
> + @retval EFI_SUCCESS - The function completed successfully.
> +**/
> +EFI_STATUS
> +InitializeAslUpdateLib (
> + VOID
> + )
> +{
> + EFI_STATUS Status;
> +
> + ///
> + /// Locate ACPI tables
> + ///
> + Status = gBS->LocateProtocol (&gEfiAcpiSdtProtocolGuid, NULL, (VOID
> +**) &mAcpiSdt);
> + ASSERT_EFI_ERROR (Status);
> + Status = gBS->LocateProtocol (&gEfiAcpiTableProtocolGuid, NULL, (VOID
> +**) &mAcpiTable);
> + ASSERT_EFI_ERROR (Status);
> + return Status;
> +}
> +
> +/**
> + This function calculates and updates an UINT8 checksum.
> +
> + @param Buffer Pointer to buffer to checksum
> + @param Size Number of bytes to checksum
> + @param ChecksumOffset Offset to place the checksum result in
> +
> + @retval EFI_SUCCESS The function completed successfully.
> +**/
> +EFI_STATUS
> +AcpiPlatformChecksum (
> + IN VOID *Buffer,
> + IN UINTN Size,
> + IN UINTN ChecksumOffset
> + )
> +{
> + UINT8 Sum;
> + UINT8 *Ptr;
> +
> + Sum = 0;
> + //
> + // Initialize pointer
> + //
> + Ptr = Buffer;
> +
> + //
> + // set checksum to 0 first
> + //
> + Ptr[ChecksumOffset] = 0;
> +
> + //
> + // add all content of buffer
> + //
> + while ((Size--) != 0) {
> + Sum = (UINT8) (Sum + (*Ptr++));
> + }
> + //
> + // set checksum
> + //
> + Ptr = Buffer;
> + Ptr[ChecksumOffset] = (UINT8) (0xff - Sum + 1);
> +
> + return EFI_SUCCESS;
> +}
> +
> +
> +/**
> + This function uses the ACPI SDT protocol to locate an ACPI SSDT table.
> +
> + @param[in] TableId - Pointer to an ASCII string containing
> the OEM Table ID from the ACPI table header
> + @param[in] TableIdSize - Length of the TableId to match. Table
> ID are 8 bytes long, this function
> + will consider it a match if the first
> TableIdSize bytes match
> + @param[in, out] Table - Updated with a pointer to the table
> + @param[in, out] Handle - AcpiSupport protocol table handle for
> the table found
> +
> + @retval EFI_SUCCESS - The function completed successfully.
> + @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
> + @retval EFI_NOT_READY - Not ready to locate AcpiTable.
> +**/
> +EFI_STATUS
> +LocateAcpiTableByOemTableId (
> + IN UINT8 *TableId,
> + IN UINT8 TableIdSize,
> + IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
> + IN OUT UINTN *Handle
> + )
> +{
> + EFI_STATUS Status;
> + INTN Index;
> + EFI_ACPI_TABLE_VERSION Version;
> + EFI_ACPI_DESCRIPTION_HEADER *OrgTable;
> +
> + if (mAcpiSdt == NULL) {
> + InitializeAslUpdateLib ();
> + if (mAcpiSdt == NULL) {
> + return EFI_NOT_READY;
> + }
> + }
> + ///
> + /// Locate table with matching ID
> + ///
> + Version = 0;
> + Index = 0;
> + do {
> + Status = mAcpiSdt->GetAcpiTable (Index, (EFI_ACPI_SDT_HEADER
> **)&OrgTable, &Version, Handle);
> + if (Status == EFI_NOT_FOUND) {
> + break;
> + }
> + ASSERT_EFI_ERROR (Status);
> + Index++;
> + } while (CompareMem (&(OrgTable->OemTableId), TableId, TableIdSize));
> +
> + if (Status != EFI_NOT_FOUND) {
> + *Table = OrgTable;
> + ASSERT (*Table);
> + }
> +
> + ///
> + /// If we found the table, there will be no error.
> + ///
> + return Status;
> +}
> +
> +/**
> + This procedure will update immediate value assigned to a Name
> +
> + @param[in] AslSignature - The signature of Operation Region that
> we want to update.
> + @param[in] Buffer - source of data to be written over
> original aml
> + @param[in] Length - length of data to be overwritten
> +
> + @retval EFI_SUCCESS - The function completed successfully.
> + @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
> + @retval EFI_NOT_READY - Not ready to locate AcpiTable.
> +**/
> +EFI_STATUS
> +EFIAPI
> +UpdateNameAslCode (
> + IN UINT32 AslSignature,
> + IN VOID *Buffer,
> + IN UINTN Length
> + )
> +{
> + EFI_STATUS Status;
> + EFI_ACPI_DESCRIPTION_HEADER *Table;
> + UINT8 *CurrPtr;
> + UINT8 *EndPtr;
> + UINT32 *Signature;
> + UINT8 *DsdtPointer;
> + UINTN Handle;
> + UINT8 DataSize;
> +
> + if (mAcpiTable == NULL) {
> + InitializeAslUpdateLib ();
> + if (mAcpiTable == NULL) {
> + return EFI_NOT_READY;
> + }
> + }
> +
> + ///
> + /// Locate table with matching ID
> + ///
> + Handle = 0;
> + Status = LocateAcpiTableBySignature (
> +
> EFI_ACPI_3_0_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE,
> + (EFI_ACPI_DESCRIPTION_HEADER **) &Table,
> + &Handle
> + );
> + if (EFI_ERROR (Status)) {
> + return Status;
> + }
> +
> + ///
> + /// Point to the beginning of the DSDT table /// CurrPtr = (UINT8
> + *) Table; if (CurrPtr == NULL) {
> + return EFI_NOT_FOUND;
> + }
> +
> + //
> + // EndPtr = beginning of table + length of table // EndPtr =
> + CurrPtr + ((EFI_ACPI_COMMON_HEADER *) CurrPtr)->Length;
> +
> + ///
> + /// Loop through the ASL looking for values that we must fix up.
> + ///
> + for (DsdtPointer = CurrPtr; DsdtPointer < EndPtr; DsdtPointer++) {
> + ///
> + /// Get a pointer to compare for signature
> + ///
> + Signature = (UINT32 *) DsdtPointer;
> + ///
> + /// Check if this is the Device Object signature we are looking for
> + ///
> + if ((*Signature) == AslSignature) {
> + ///
> + /// Look for Name Encoding
> + ///
> + if (*(DsdtPointer-1) == AML_NAME_OP) {
> + ///
> + /// Check if size of new and old data is the same
> + ///
> + DataSize = *(DsdtPointer+4);
> + if ((Length == 1 && DataSize == 0xA) ||
> + (Length == 2 && DataSize == 0xB) ||
> + (Length == 4 && DataSize == 0xC)) {
> + CopyMem (DsdtPointer+5, Buffer, Length);
> + } else if (Length == 1 && ((*(UINT8*) Buffer) == 0 || (*(UINT8*)
> Buffer) == 1) && (DataSize == 0 || DataSize == 1)) {
> + CopyMem (DsdtPointer+4, Buffer, Length);
> + } else {
> + FreePool (Table);
> + return EFI_BAD_BUFFER_SIZE;
> + }
> + Status = mAcpiTable->UninstallAcpiTable (
> + mAcpiTable,
> + Handle
> + );
> + Handle = 0;
> + Status = mAcpiTable->InstallAcpiTable (
> + mAcpiTable,
> + Table,
> + Table->Length,
> + &Handle
> + );
> + FreePool (Table);
> + return Status;
> + }
> + }
> + }
> + return EFI_NOT_FOUND;
> +}
> +
> +/**
> + This procedure will update immediate value assigned to a Name in SSDT
> +table
> +
> + @param[in] TableId - Pointer to an ASCII string containing
> the OEM Table ID from the ACPI table header
> + @param[in] TableIdSize - Length of the TableId to match. Table
> ID are 8 bytes long, this function
> + @param[in] AslSignature - The signature of Operation Region that
> we want to update.
> + @param[in] Buffer - source of data to be written over
> original aml
> + @param[in] Length - length of data to be overwritten
> +
> + @retval EFI_SUCCESS - The function completed successfully.
> + @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
> + @retval EFI_NOT_READY - Not ready to locate AcpiTable.
> +**/
> +EFI_STATUS
> +EFIAPI
> +UpdateSsdtNameAslCode (
> + IN UINT8 *TableId,
> + IN UINT8 TableIdSize,
> + IN UINT32 AslSignature,
> + IN VOID *Buffer,
> + IN UINTN Length
> + )
> +{
> + EFI_STATUS Status;
> + EFI_ACPI_DESCRIPTION_HEADER *Table;
> + UINT8 *CurrPtr;
> + UINT32 *Signature;
> + UINT8 *SsdtPointer;
> + UINTN Handle;
> + UINT8 DataSize;
> +
> + if (mAcpiTable == NULL) {
> + InitializeAslUpdateLib ();
> + if (mAcpiTable == NULL) {
> + return EFI_NOT_READY;
> + }
> + }
> +
> + ///
> + /// Locate table with matching ID
> + ///
> + Handle = 0;
> + Status = LocateAcpiTableByOemTableId (
> + TableId,
> + TableIdSize,
> + (EFI_ACPI_DESCRIPTION_HEADER **) &Table,
> + &Handle
> + );
> + if (EFI_ERROR (Status)) {
> + return Status;
> + }
> +
> + ///
> + /// Point to the beginning of the DSDT table /// CurrPtr = (UINT8
> + *) Table; if (CurrPtr == NULL) {
> + return EFI_NOT_FOUND;
> + }
> +
> + ///
> + /// Loop through the ASL looking for values that we must fix up.
> + ///
> + for (SsdtPointer = CurrPtr; SsdtPointer <= (CurrPtr +
> ((EFI_ACPI_COMMON_HEADER *) CurrPtr)->Length); SsdtPointer++) {
> + ///
> + /// Get a pointer to compare for signature
> + ///
> + Signature = (UINT32 *) SsdtPointer;
> + ///
> + /// Check if this is the Device Object signature we are looking for
> + ///
> + if ((*Signature) == AslSignature) {
> + ///
> + /// Look for Name Encoding
> + ///
> + if (*(SsdtPointer-1) == AML_NAME_OP) {
> + ///
> + /// Check if size of new and old data is the same
> + ///
> + DataSize = *(SsdtPointer+4);
> + if ((Length == 1 && DataSize == 0xA) ||
> + (Length == 2 && DataSize == 0xB) ||
> + (Length == 4 && DataSize == 0xC)) {
> + CopyMem (SsdtPointer+5, Buffer, Length);
> + } else if (Length == 1 && ((*(UINT8*) Buffer) == 0 || (*(UINT8*)
> Buffer) == 1) && (DataSize == 0 || DataSize == 1)) {
> + CopyMem (SsdtPointer+4, Buffer, Length);
> + } else {
> + return EFI_BAD_BUFFER_SIZE;
> + }
> + AcpiPlatformChecksum (
> + Table,
> + Table->Length,
> + OFFSET_OF (EFI_ACPI_DESCRIPTION_HEADER,
> + Checksum)
> + );
> + return Status;
> + }
> + }
> + }
> + return EFI_NOT_FOUND;
> +}
> +
> +/**
> + This procedure will update the name of ASL Method
> +
> + @param[in] AslSignature - The signature of Operation Region that
> we want to update.
> + @param[in] Buffer - source of data to be written over
> original aml
> + @param[in] Length - length of data to be overwritten
> +
> + @retval EFI_SUCCESS - The function completed successfully.
> + @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
> + @retval EFI_NOT_READY - Not ready to locate AcpiTable.
> +**/
> +EFI_STATUS
> +EFIAPI
> +UpdateMethodAslCode (
> + IN UINT32 AslSignature,
> + IN VOID *Buffer,
> + IN UINTN Length
> + )
> +{
> + EFI_STATUS Status;
> + EFI_ACPI_DESCRIPTION_HEADER *Table;
> + UINT8 *CurrPtr;
> + UINT32 *Signature;
> + UINT8 *DsdtPointer;
> + UINTN Handle;
> +
> + if (mAcpiTable == NULL) {
> + InitializeAslUpdateLib ();
> + if (mAcpiTable == NULL) {
> + return EFI_NOT_READY;
> + }
> + }
> +
> + ///
> + /// Locate table with matching ID
> + ///
> + Handle = 0;
> + Status = LocateAcpiTableBySignature (
> +
> EFI_ACPI_3_0_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE,
> + (EFI_ACPI_DESCRIPTION_HEADER **) &Table,
> + &Handle
> + );
> + if (EFI_ERROR (Status)) {
> + return Status;
> + }
> +
> + ///
> + /// Point to the beginning of the DSDT table /// CurrPtr = (UINT8
> + *) Table; if (CurrPtr == NULL) {
> + return EFI_NOT_FOUND;
> + }
> +
> + ///
> + /// Loop through the ASL looking for values that we must fix up.
> + ///
> + for (DsdtPointer = CurrPtr; DsdtPointer <= (CurrPtr +
> ((EFI_ACPI_COMMON_HEADER *) CurrPtr)->Length); DsdtPointer++) {
> + ///
> + /// Get a pointer to compare for signature
> + ///
> + Signature = (UINT32 *) DsdtPointer;
> + ///
> + /// Check if this is the Device Object signature we are looking for
> + ///
> + if ((*Signature) == AslSignature) {
> + ///
> + /// Look for Name Encoding
> + ///
> + if ((*(DsdtPointer-3) == AML_METHOD_OP)
> + || (*(DsdtPointer-2) == AML_METHOD_OP)
> + )
> + {
> + CopyMem (DsdtPointer, Buffer, Length);
> + Status = mAcpiTable->UninstallAcpiTable (
> + mAcpiTable,
> + Handle
> + );
> + Handle = 0;
> + Status = mAcpiTable->InstallAcpiTable (
> + mAcpiTable,
> + Table,
> + Table->Length,
> + &Handle
> + );
> + FreePool (Table);
> + return Status;
> + }
> + }
> + }
> + return EFI_NOT_FOUND;
> +}
> +
> +/**
> + This function uses the ACPI SDT protocol to locate an ACPI table.
> + It is really only useful for finding tables that only have a single
> +instance,
> + e.g. FADT, FACS, MADT, etc. It is not good for locating SSDT, etc.
> +
> + @param[in] Signature - Pointer to an ASCII string containing
> the OEM Table ID from the ACPI table header
> + @param[in, out] Table - Updated with a pointer to the table
> + @param[in, out] Handle - AcpiSupport protocol table handle
> for the table found
> +
> + @retval EFI_SUCCESS - The function completed
> successfully.
> + @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
> + @retval EFI_NOT_READY - Not ready to locate AcpiTable.
> +**/
> +EFI_STATUS
> +EFIAPI
> +LocateAcpiTableBySignature (
> + IN UINT32 Signature,
> + IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
> + IN OUT UINTN *Handle
> + )
> +{
> + EFI_STATUS Status;
> + INTN Index;
> + EFI_ACPI_TABLE_VERSION Version;
> + EFI_ACPI_DESCRIPTION_HEADER *OrgTable;
> +
> + if (mAcpiSdt == NULL) {
> + InitializeAslUpdateLib ();
> + if (mAcpiSdt == NULL) {
> + return EFI_NOT_READY;
> + }
> + }
> +
> + ///
> + /// Locate table with matching ID
> + ///
> + Version = 0;
> + Index = 0;
> + do {
> + Status = mAcpiSdt->GetAcpiTable (Index, (EFI_ACPI_SDT_HEADER
> **)&OrgTable, &Version, Handle);
> + if (Status == EFI_NOT_FOUND) {
> + break;
> + }
> + ASSERT_EFI_ERROR (Status);
> + Index++;
> + } while (OrgTable->Signature != Signature);
> +
> + if (Status != EFI_NOT_FOUND) {
> + *Table = AllocateCopyPool (OrgTable->Length, OrgTable);
> + ASSERT (*Table);
> + }
> +
> + ///
> + /// If we found the table, there will be no error.
> + ///
> + return Status;
> +}
> diff --git a/Silicon/Intel/IntelSiliconPkg/Include/Library/AslUpdateLib.h
> b/Silicon/Intel/IntelSiliconPkg/Include/Library/AslUpdateLib.h
> new file mode 100644
> index 0000000000..cfe0fc9356
> --- /dev/null
> +++ b/Silicon/Intel/IntelSiliconPkg/Include/Library/AslUpdateLib.h
> @@ -0,0 +1,116 @@
> +/** @file
> + ASL dynamic update library definitions.
> +
> + This library provides dynamic update to various ASL structures.
> + There may be different libraries for different environments (PEI, BS, RT,
> SMM).
> + Make sure you meet the requirements for the library (protocol
> + dependencies, use restrictions, etc).
> +
> + Note that the current version of the library updates AML.
> +
> + Copyright (c) 2020 Intel Corporation. All rights reserved. <BR>
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef
> +_ASL_UPDATE_LIB_H_ #define _ASL_UPDATE_LIB_H_
> +
> +//
> +// Include files
> +//
> +#include <Uefi/UefiBaseType.h>
> +#include <IndustryStandard/Acpi.h>
> +#include <Protocol/AcpiTable.h>
> +#include <Protocol/AcpiSystemDescriptionTable.h>
> +
> +
> +/**
> + This procedure will update immediate value assigned to a Name
> +
> + @param[in] AslSignature The signature of Operation
> Region that we want to update.
> + @param[in] Buffer source of data to be written
> over original aml
> + @param[in] Length length of data to be
> overwritten
> +
> + @retval EFI_SUCCESS The function completed
> successfully.
> + @retval EFI_NOT_FOUND Failed to locate AcpiTable.
> + @retval EFI_NOT_READY Not ready to locate
> AcpiTable.
> + @retval EFI_UNSUPPORTED The function is not
> supported in this library.
> +**/
> +EFI_STATUS
> +EFIAPI
> +UpdateNameAslCode(
> + IN UINT32 AslSignature,
> + IN VOID *Buffer,
> + IN UINTN Length
> + );
> +
> +/**
> + This procedure will update the name of ASL Method
> +
> + @param[in] TableId - Pointer to an ASCII string containing
> the OEM Table ID from the ACPI table header
> + @param[in] TableIdSize - Length of the TableId to match. Table
> ID are 8 bytes long, this function
> + @param[in] AslSignature - The signature of Operation Region that
> we want to update.
> + @param[in] Buffer - source of data to be written over
> original aml
> + @param[in] Length - length of data to be overwritten
> +
> + @retval EFI_SUCCESS - The function completed successfully.
> + @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
> + @retval EFI_NOT_READY - Not ready to locate AcpiTable.
> + @retval EFI_UNSUPPORTED - The function is not supported in this
> library.
> +**/
> +EFI_STATUS
> +EFIAPI
> +UpdateSsdtNameAslCode (
> + IN UINT8 *TableId,
> + IN UINT8 TableIdSize,
> + IN UINT32 AslSignature,
> + IN VOID *Buffer,
> + IN UINTN Length
> + );
> +
> +/**
> + This procedure will update the name of ASL Method
> +
> + @param[in] AslSignature - The signature of Operation Region that
> we want to update.
> + @param[in] Buffer - source of data to be written over
> original aml
> + @param[in] Length - length of data to be overwritten
> +
> + @retval EFI_SUCCESS - The function completed successfully.
> + @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
> + @retval EFI_NOT_READY - Not ready to locate AcpiTable.
> + @retval EFI_UNSUPPORTED - The function is not supported in this
> library.
> +**/
> +EFI_STATUS
> +EFIAPI
> +UpdateMethodAslCode (
> + IN UINT32 AslSignature,
> + IN VOID *Buffer,
> + IN UINTN Length
> + );
> +
> +/**
> + This function uses the ACPI support protocol to locate an ACPI table
> using the .
> + It is really only useful for finding tables that only have a single
> +instance,
> + e.g. FADT, FACS, MADT, etc. It is not good for locating SSDT, etc.
> + Matches are determined by finding the table with ACPI table that has
> + a matching signature and version.
> +
> + @param[in] Signature Pointer to an ASCII string
> containing the Signature to match
> + @param[in, out] Table Updated with a pointer to the
> table
> + @param[in, out] Handle AcpiSupport protocol table
> handle for the table found
> + @see AcpiSupport protocol
> for
> + details
> +
> + @retval EFI_SUCCESS The function completed
> successfully.
> + @retval EFI_NOT_FOUND Failed to locate AcpiTable.
> + @retval EFI_NOT_READY Not ready to locate
> AcpiTable.
> + @retval EFI_UNSUPPORTED The function is not
> supported in this library.
> +**/
> +EFI_STATUS
> +EFIAPI
> +LocateAcpiTableBySignature (
> + IN UINT32 Signature,
> + IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
> + IN OUT UINTN *Handle
> + );
> +
> +#endif
> diff --git a/Silicon/Intel/IntelSiliconPkg/IntelSiliconPkg.dec
> b/Silicon/Intel/IntelSiliconPkg/IntelSiliconPkg.dec
> index 7c43593382..e4a7fec3a3 100644
> --- a/Silicon/Intel/IntelSiliconPkg/IntelSiliconPkg.dec
> +++ b/Silicon/Intel/IntelSiliconPkg/IntelSiliconPkg.dec
> @@ -38,6 +38,10 @@
> #
> ConfigBlockLib|Include/Library/ConfigBlockLib.h
>
> + ## @libraryclass Provides services to update AML in DXE #
> + AslUpdateLib|Include/Library/AslUpdateLib.h
> +
> [Guids]
> ## GUID for Package token space
> # {A9F8D54E-1107-4F0A-ADD0-4587E7A4A735}
> diff --git
> a/Silicon/Intel/IntelSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib.inf
> b/Silicon/Intel/IntelSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib.inf
> new file mode 100644
> index 0000000000..cefbe30628
> --- /dev/null
> +++ b/Silicon/Intel/IntelSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdate
> +++ Lib.inf
> @@ -0,0 +1,42 @@
> +## @file
> +# Provides services to update ASL tables.
> +# Note that the current version of the library updates AML.
> +#
> +# Copyright (c) 2020, Intel Corporation. All rights reserved.<BR> # #
> +SPDX-License-Identifier: BSD-2-Clause-Patent # ##
> +
> +
> +
> +[Defines]
> +INF_VERSION = 0x00010017
> +BASE_NAME = DxeAslUpdateLib
> +FILE_GUID = 8621697D-4E3A-4bf2-ADB0-3E2FF06559CA
> +VERSION_STRING = 1.0
> +MODULE_TYPE = DXE_DRIVER
> +LIBRARY_CLASS = AslUpdateLib
> +
> +
> +[LibraryClasses]
> +BaseLib
> +IoLib
> +DebugLib
> +PcdLib
> +BaseMemoryLib
> +UefiLib
> +MemoryAllocationLib
> +
> +
> +[Packages]
> +MdePkg/MdePkg.dec
> +IntelSiliconPkg/IntelSiliconPkg.dec
> +
> +[Sources]
> +DxeAslUpdateLib.c
> +
> +
> +[Protocols]
> +gEfiAcpiTableProtocolGuid ## CONSUMES
> +gEfiAcpiSdtProtocolGuid ## CONSUMES
> --
> 2.16.2.windows.1
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [edk2-platforms:PATCH v4 4/7] MinPlatformPkg/DxeAslUpdateLib: Cleans up APIs
2020-04-29 2:32 ` [edk2-platforms:PATCH v4 4/7] MinPlatformPkg/DxeAslUpdateLib: Cleans up APIs Miki Shindo
2020-04-30 2:56 ` Chiu, Chasel
@ 2020-04-30 5:00 ` Chaganty, Rangasai V
1 sibling, 0 replies; 23+ messages in thread
From: Chaganty, Rangasai V @ 2020-04-30 5:00 UTC (permalink / raw)
To: Shindo, Miki, devel@edk2.groups.io
Cc: Chiu, Chasel, Desimone, Nathaniel L, Agyeman, Prince, Ni, Ray
Noticed that some APIs have incorrect descriptions (e.g. UpdateMethodAslCode) that needs to be addressed.
With that:
Reviewed-by: Sai Chaganty <rangasai.v.chaganty@intel.com>
-----Original Message-----
From: Shindo, Miki <miki.shindo@intel.com>
Sent: Tuesday, April 28, 2020 7:32 PM
To: devel@edk2.groups.io
Cc: Chaganty, Rangasai V <rangasai.v.chaganty@intel.com>; Chiu, Chasel <chasel.chiu@intel.com>; Desimone, Nathaniel L <nathaniel.l.desimone@intel.com>; Agyeman, Prince <prince.agyeman@intel.com>; Ni, Ray <ray.ni@intel.com>
Subject: [edk2-platforms:PATCH v4 4/7] MinPlatformPkg/DxeAslUpdateLib: Cleans up APIs
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2536
Callers of DxeAslUpdateLib don't have to call InitializeAslUpdateLib() but the library itself runs it internally. This commit makes it an internal call. LocateAcpiTableByOemTableId() is unreferenced externally so this commit makes it an internal call.
PSS_PACKAGE_LAYOUT and AML_RESRC_TEMP_END_TAG are both unreferenced so they are removed.
AslUpdateLib.h is cleaned up accordingly.
Signed-off-by: Miki Shindo <miki.shindo@intel.com>
Cc: Sai Chaganty <rangasai.v.chaganty@intel.com>
Cc: Chasel Chiu <chasel.chiu@intel.com>
Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
Cc: Prince Agyeman <prince.agyeman@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
---
Platform/Intel/MinPlatformPkg/Acpi/Library/DxeAslUpdateLib/DxeAslUpdateLib.c | 209 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------------------
Platform/Intel/MinPlatformPkg/Include/Library/AslUpdateLib.h | 131 ++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------------------------------------------
2 files changed, 159 insertions(+), 181 deletions(-)
diff --git a/Platform/Intel/MinPlatformPkg/Acpi/Library/DxeAslUpdateLib/DxeAslUpdateLib.c b/Platform/Intel/MinPlatformPkg/Acpi/Library/DxeAslUpdateLib/DxeAslUpdateLib.c
index e6ab43db6d..1ba51a7c55 100644
--- a/Platform/Intel/MinPlatformPkg/Acpi/Library/DxeAslUpdateLib/DxeAslUpdateLib.c
+++ b/Platform/Intel/MinPlatformPkg/Acpi/Library/DxeAslUpdateLib/DxeAslU
+++ pdateLib.c
@@ -6,7 +6,7 @@
This library uses the ACPI Support protocol.
-Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2017 - 2020, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
@@ -50,6 +50,62 @@ InitializeAslUpdateLib (
return Status;
}
+/**
+ This function uses the ACPI SDT protocol to locate an ACPI SSDT table.
+
+ @param[in] TableId - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
+ @param[in] TableIdSize - Length of the TableId to match. Table ID are 8 bytes long, this function
+ will consider it a match if the first TableIdSize bytes match
+ @param[in, out] Table - Updated with a pointer to the table
+ @param[in, out] Handle - AcpiSupport protocol table handle for the table found
+
+ @retval EFI_SUCCESS - The function completed successfully.
+ @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
+ @retval EFI_NOT_READY - Not ready to locate AcpiTable.
+**/
+EFI_STATUS
+LocateAcpiTableByOemTableId (
+ IN UINT8 *TableId,
+ IN UINT8 TableIdSize,
+ IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
+ IN OUT UINTN *Handle
+ )
+{
+ EFI_STATUS Status;
+ INTN Index;
+ EFI_ACPI_TABLE_VERSION Version;
+ EFI_ACPI_DESCRIPTION_HEADER *OrgTable;
+
+ if (mAcpiSdt == NULL) {
+ InitializeAslUpdateLib ();
+ if (mAcpiSdt == NULL) {
+ return EFI_NOT_READY;
+ }
+ }
+ ///
+ /// Locate table with matching ID
+ ///
+ Version = 0;
+ Index = 0;
+ do {
+ Status = mAcpiSdt->GetAcpiTable (Index, (EFI_ACPI_SDT_HEADER **)&OrgTable, &Version, Handle);
+ if (Status == EFI_NOT_FOUND) {
+ break;
+ }
+ ASSERT_EFI_ERROR (Status);
+ Index++;
+ } while (CompareMem (&(OrgTable->OemTableId), TableId, TableIdSize));
+
+ if (Status != EFI_NOT_FOUND) {
+ *Table = AllocateCopyPool (OrgTable->Length, OrgTable);
+ ASSERT (*Table);
+ }
+
+ ///
+ /// If we found the table, there will be no error.
+ ///
+ return Status;
+}
/**
This procedure will update immediate value assigned to a Name @@ -59,8 +115,11 @@ InitializeAslUpdateLib (
@param[in] Length - length of data to be overwritten
@retval EFI_SUCCESS - The function completed successfully.
+ @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
+ @retval EFI_NOT_READY - Not ready to locate AcpiTable.
**/
EFI_STATUS
+EFIAPI
UpdateNameAslCode (
IN UINT32 AslSignature,
IN VOID *Buffer,
@@ -149,6 +208,50 @@ UpdateNameAslCode (
return EFI_NOT_FOUND;
}
+/**
+ This procedure will update the name of ASL Method
+
+ @param[in] TableId - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
+ @param[in] TableIdSize - Length of the TableId to match. Table ID are 8 bytes long, this function
+ will consider it a match if the first TableIdSize bytes match
+ @param[in] AslSignature - The signature of Operation Region that we want to update.
+ @param[in] Buffer - source of data to be written over original aml
+ @param[in] Length - length of data to be overwritten
+
+ @retval EFI_UNSUPPORTED - The function is not supported in this library.
+**/
+EFI_STATUS
+EFIAPI
+UpdateSsdtNameAslCode (
+ IN UINT8 *TableId,
+ IN UINT8 TableIdSize,
+ IN UINT32 AslSignature,
+ IN VOID *Buffer,
+ IN UINTN Length
+ )
+{
+ return EFI_UNSUPPORTED;
+}
+
+/**
+ This procedure will update the name of ASL Method
+
+ @param[in] AslSignature - The signature of Operation Region that we want to update.
+ @param[in] Buffer - source of data to be written over original aml
+ @param[in] Length - length of data to be overwritten
+
+ @retval EFI_UNSUPPORTED - The function is not supported in this library.
+**/
+EFI_STATUS
+EFIAPI
+UpdateMethodAslCode (
+ IN UINT32 AslSignature,
+ IN VOID *Buffer,
+ IN UINTN Length
+ )
+{
+ return EFI_UNSUPPORTED;
+}
/**
This function uses the ACPI SDT protocol to locate an ACPI table.
@@ -161,8 +264,11 @@ UpdateNameAslCode (
@param[in, out] Version - The version of the table desired
@retval EFI_SUCCESS - The function completed successfully.
+ @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
+ @retval EFI_NOT_READY - Not ready to locate AcpiTable.
**/
EFI_STATUS
+EFIAPI
LocateAcpiTableBySignature (
IN UINT32 Signature,
IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
@@ -205,104 +311,3 @@ LocateAcpiTableBySignature (
///
return Status;
}
-
-/**
- This function uses the ACPI SDT protocol to locate an ACPI SSDT table.
-
- @param[in] TableId - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
- @param[in] TableIdSize - Length of the TableId to match. Table ID are 8 bytes long, this function
- will consider it a match if the first TableIdSize bytes match
- @param[in, out] Table - Updated with a pointer to the table
- @param[in, out] Handle - AcpiSupport protocol table handle for the table found
- @param[in, out] Version - See AcpiSupport protocol, GetAcpiTable function for use
-
- @retval EFI_SUCCESS - The function completed successfully.
-**/
-EFI_STATUS
-LocateAcpiTableByOemTableId (
- IN UINT8 *TableId,
- IN UINT8 TableIdSize,
- IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
- IN OUT UINTN *Handle
- )
-{
- EFI_STATUS Status;
- INTN Index;
- EFI_ACPI_TABLE_VERSION Version;
- EFI_ACPI_DESCRIPTION_HEADER *OrgTable;
-
- if (mAcpiSdt == NULL) {
- InitializeAslUpdateLib ();
- if (mAcpiSdt == NULL) {
- return EFI_NOT_READY;
- }
- }
- ///
- /// Locate table with matching ID
- ///
- Version = 0;
- Index = 0;
- do {
- Status = mAcpiSdt->GetAcpiTable (Index, (EFI_ACPI_SDT_HEADER **)&OrgTable, &Version, Handle);
- if (Status == EFI_NOT_FOUND) {
- break;
- }
- ASSERT_EFI_ERROR (Status);
- Index++;
- } while (CompareMem (&(OrgTable->OemTableId), TableId, TableIdSize));
-
- if (Status != EFI_NOT_FOUND) {
- *Table = AllocateCopyPool (OrgTable->Length, OrgTable);
- ASSERT (*Table);
- }
-
- ///
- /// If we found the table, there will be no error.
- ///
- return Status;
-}
-
-/**
- This function calculates and updates an UINT8 checksum.
-
- @param[in] Buffer Pointer to buffer to checksum
- @param[in] Size Number of bytes to checksum
- @param[in] ChecksumOffset Offset to place the checksum result in
-
- @retval EFI_SUCCESS The function completed successfully.
-**/
-EFI_STATUS
-AcpiChecksum (
- IN VOID *Buffer,
- IN UINTN Size,
- IN UINTN ChecksumOffset
- )
-{
- UINT8 Sum;
- UINT8 *Ptr;
-
- Sum = 0;
- ///
- /// Initialize pointer
- ///
- Ptr = Buffer;
-
- ///
- /// set checksum to 0 first
- ///
- Ptr[ChecksumOffset] = 0;
-
- ///
- /// add all content of buffer
- ///
- while (Size--) {
- Sum = (UINT8) (Sum + (*Ptr++));
- }
- ///
- /// set checksum
- ///
- Ptr = Buffer;
- Ptr[ChecksumOffset] = (UINT8) (0xff - Sum + 1);
-
- return EFI_SUCCESS;
-}
diff --git a/Platform/Intel/MinPlatformPkg/Include/Library/AslUpdateLib.h b/Platform/Intel/MinPlatformPkg/Include/Library/AslUpdateLib.h
index d58b6d6458..0be8df6469 100644
--- a/Platform/Intel/MinPlatformPkg/Include/Library/AslUpdateLib.h
+++ b/Platform/Intel/MinPlatformPkg/Include/Library/AslUpdateLib.h
@@ -5,7 +5,7 @@
Make sure you meet the requirements for the library (protocol dependencies, use
restrictions, etc).
-Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2017 - 2020, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
@@ -16,61 +16,70 @@ SPDX-License-Identifier: BSD-2-Clause-Patent // // Include files //
+#include <Uefi/UefiBaseType.h>
#include <IndustryStandard/Acpi.h>
#include <Protocol/AcpiTable.h>
#include <Protocol/AcpiSystemDescriptionTable.h>
-//
-// AML parsing definitions
-//
-#define AML_RESRC_TEMP_END_TAG 0x0079
-
-//
-// ASL PSS package structure layout
-//
-#pragma pack (1)
-typedef struct {
- UINT8 NameOp; // 12h ;First opcode is a NameOp.
- UINT8 PackageLead; // 20h ;First opcode is a NameOp.
- UINT8 NumEntries; // 06h ;First opcode is a NameOp.
- UINT8 DwordPrefix1; // 0Ch
- UINT32 CoreFrequency; // 00h
- UINT8 DwordPrefix2; // 0Ch
- UINT32 Power; // 00h
- UINT8 DwordPrefix3; // 0Ch
- UINT32 TransLatency; // 00h
- UINT8 DwordPrefix4; // 0Ch
- UINT32 BmLatency; // 00h
- UINT8 DwordPrefix5; // 0Ch
- UINT32 Control; // 00h
- UINT8 DwordPrefix6; // 0Ch
- UINT32 Status; // 00h
-} PSS_PACKAGE_LAYOUT;
-#pragma pack()
-
/**
- Initialize the ASL update library state.
- This must be called prior to invoking other library functions.
+ This procedure will update immediate value assigned to a Name
+ @param[in] AslSignature The signature of Operation Region that we want to update.
+ @param[in] Buffer source of data to be written over original aml
+ @param[in] Length length of data to be overwritten
@retval EFI_SUCCESS The function completed successfully.
+ @retval EFI_NOT_FOUND Failed to locate AcpiTable.
+ @retval EFI_NOT_READY Not ready to locate AcpiTable.
+ @retval EFI_UNSUPPORTED The function is not supported in this library
**/
EFI_STATUS
-InitializeAslUpdateLib (
- VOID
+EFIAPI
+UpdateNameAslCode(
+ IN UINT32 AslSignature,
+ IN VOID *Buffer,
+ IN UINTN Length
);
/**
- This procedure will update immediate value assigned to a Name
+ This procedure will update the name of ASL Method
+
+ @param[in] TableId - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
+ @param[in] TableIdSize - Length of the TableId to match. Table ID are 8 bytes long, this function
+ @param[in] AslSignature - The signature of Operation Region that we want to update.
+ @param[in] Buffer - source of data to be written over original aml
+ @param[in] Length - length of data to be overwritten
+
+ @retval EFI_SUCCESS - The function completed successfully.
+ @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
+ @retval EFI_NOT_READY - Not ready to locate AcpiTable.
+ @retval EFI_UNSUPPORTED - The function is not supported in this library
+**/
+EFI_STATUS
+EFIAPI
+UpdateSsdtNameAslCode (
+ IN UINT8 *TableId,
+ IN UINT8 TableIdSize,
+ IN UINT32 AslSignature,
+ IN VOID *Buffer,
+ IN UINTN Length
+ );
- @param[in] AslSignature The signature of Operation Region that we want to update.
- @param[in] Buffer source of data to be written over original aml
- @param[in] Length length of data to be overwritten
+/**
+ This procedure will update the name of ASL Method
- @retval EFI_SUCCESS The function completed successfully.
+ @param[in] AslSignature - The signature of Operation Region that we want to update.
+ @param[in] Buffer - source of data to be written over original aml
+ @param[in] Length - length of data to be overwritten
+
+ @retval EFI_SUCCESS - The function completed successfully.
+ @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
+ @retval EFI_NOT_READY - Not ready to locate AcpiTable.
+ @retval EFI_UNSUPPORTED - The function is not supported in this library
**/
EFI_STATUS
-UpdateNameAslCode(
+EFIAPI
+UpdateMethodAslCode (
IN UINT32 AslSignature,
IN VOID *Buffer,
IN UINTN Length
@@ -86,55 +95,19 @@ UpdateNameAslCode(
@param[in] Signature Pointer to an ASCII string containing the Signature to match
@param[in, out] Table Updated with a pointer to the table
@param[in, out] Handle AcpiSupport protocol table handle for the table found
- @param[in, out] Version On input, the version of the table desired,
- on output, the versions the table belongs to
@see AcpiSupport protocol for details
@retval EFI_SUCCESS The function completed successfully.
+ @retval EFI_NOT_FOUND Failed to locate AcpiTable.
+ @retval EFI_NOT_READY Not ready to locate AcpiTable.
+ @retval EFI_UNSUPPORTED The function is not supported in this library
**/
EFI_STATUS
+EFIAPI
LocateAcpiTableBySignature (
IN UINT32 Signature,
IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
IN OUT UINTN *Handle
);
-/**
- This function uses the ACPI support protocol to locate an ACPI SSDT table.
- The table is located by searching for a matching OEM Table ID field.
- Partial match searches are supported via the TableIdSize parameter.
-
- @param[in] TableId Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
- @param[in] TableIdSize Length of the TableId to match. Table ID are 8 bytes long, this function
- will consider it a match if the first TableIdSize bytes match
- @param[in, out] Table Updated with a pointer to the table
- @param[in, out] Handle AcpiSupport protocol table handle for the table found
- @param[in, out] Version See AcpiSupport protocol, GetAcpiTable function for use
-
- @retval EFI_SUCCESS The function completed successfully.
-**/
-EFI_STATUS
-LocateAcpiTableByOemTableId (
- IN UINT8 *TableId,
- IN UINT8 TableIdSize,
- IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
- IN OUT UINTN *Handle
- );
-
-/**
- This function calculates and updates an UINT8 checksum.
-
- @param[in] Buffer Pointer to buffer to checksum
- @param[in] Size Number of bytes to checksum
- @param[in] ChecksumOffset Offset to place the checksum result in
-
- @retval EFI_SUCCESS The function completed successfully.
-**/
-EFI_STATUS
-AcpiChecksum (
- IN VOID *Buffer,
- IN UINTN Size,
- IN UINTN ChecksumOffset
- );
-
#endif
--
2.16.2.windows.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* Re: [edk2-platforms:PATCH v4 5/7] KabylakeSiliconPkg/DxeAslUpdateLib: Cleans up APIs
2020-04-29 2:32 ` [edk2-platforms:PATCH v4 5/7] KabylakeSiliconPkg/DxeAslUpdateLib: " Miki Shindo
2020-04-30 2:56 ` Chiu, Chasel
@ 2020-04-30 5:02 ` Chaganty, Rangasai V
1 sibling, 0 replies; 23+ messages in thread
From: Chaganty, Rangasai V @ 2020-04-30 5:02 UTC (permalink / raw)
To: Shindo, Miki, devel@edk2.groups.io
Cc: Chiu, Chasel, Desimone, Nathaniel L, Agyeman, Prince, Ni, Ray
Reviewed-by: Sai Chaganty <rangasai.v.chaganty@intel.com>
-----Original Message-----
From: Shindo, Miki <miki.shindo@intel.com>
Sent: Tuesday, April 28, 2020 7:32 PM
To: devel@edk2.groups.io
Cc: Chaganty, Rangasai V <rangasai.v.chaganty@intel.com>; Chiu, Chasel <chasel.chiu@intel.com>; Desimone, Nathaniel L <nathaniel.l.desimone@intel.com>; Agyeman, Prince <prince.agyeman@intel.com>; Ni, Ray <ray.ni@intel.com>
Subject: [edk2-platforms:PATCH v4 5/7] KabylakeSiliconPkg/DxeAslUpdateLib: Cleans up APIs
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2536
Callers of DxeAslUpdateLib don't have to call InitializeAslUpdateLib() but the library itself runs it internally. This commit deletes the redundant calls in caller side and makes it an internal call.
LocateAcpiTableByOemTableId() is unreferenced externally so this commit makes it an internal call.
PSS_PACKAGE_LAYOUT and AML_RESRC_TEMP_END_TAG are both unreferenced so they are removed.
AslUpdateLib.h is cleaned up accordingly.
Signed-off-by: Miki Shindo <miki.shindo@intel.com>
Cc: Sai Chaganty <rangasai.v.chaganty@intel.com>
Cc: Chasel Chiu <chasel.chiu@intel.com>
Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
Cc: Prince Agyeman <prince.agyeman@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
---
Silicon/Intel/KabylakeSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib.c | 207 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------------------
Silicon/Intel/KabylakeSiliconPkg/Library/DxeAslUpdateLibNull/DxeAslUpdateLibNull.c | 94 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----------------------------------
Silicon/Intel/KabylakeSiliconPkg/Pch/PchInit/Dxe/PchAcpi.c | 5 +----
Silicon/Intel/KabylakeSiliconPkg/Include/Library/AslUpdateLib.h | 130 ++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------
4 files changed, 217 insertions(+), 219 deletions(-)
diff --git a/Silicon/Intel/KabylakeSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib.c b/Silicon/Intel/KabylakeSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib.c
index 87c6b15ed2..abdb85307f 100644
--- a/Silicon/Intel/KabylakeSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib.c
+++ b/Silicon/Intel/KabylakeSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpd
+++ ateLib.c
@@ -6,7 +6,7 @@
This library uses the ACPI Support protocol.
-Copyright (c) 2017 - 2019, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2017 - 2020, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
@@ -50,6 +50,62 @@ InitializeAslUpdateLib (
return Status;
}
+/**
+ This function uses the ACPI SDT protocol to locate an ACPI SSDT table.
+
+ @param[in] TableId - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
+ @param[in] TableIdSize - Length of the TableId to match. Table ID are 8 bytes long, this function
+ will consider it a match if the first TableIdSize bytes match
+ @param[in, out] Table - Updated with a pointer to the table
+ @param[in, out] Handle - AcpiSupport protocol table handle for the table found
+
+ @retval EFI_SUCCESS - The function completed successfully.
+ @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
+ @retval EFI_NOT_READY - Not ready to locate AcpiTable.
+**/
+EFI_STATUS
+LocateAcpiTableByOemTableId (
+ IN UINT8 *TableId,
+ IN UINT8 TableIdSize,
+ IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
+ IN OUT UINTN *Handle
+ )
+{
+ EFI_STATUS Status;
+ INTN Index;
+ EFI_ACPI_TABLE_VERSION Version;
+ EFI_ACPI_DESCRIPTION_HEADER *OrgTable;
+
+ if (mAcpiSdt == NULL) {
+ InitializeAslUpdateLib ();
+ if (mAcpiSdt == NULL) {
+ return EFI_NOT_READY;
+ }
+ }
+ ///
+ /// Locate table with matching ID
+ ///
+ Version = 0;
+ Index = 0;
+ do {
+ Status = mAcpiSdt->GetAcpiTable (Index, (EFI_ACPI_SDT_HEADER **)&OrgTable, &Version, Handle);
+ if (Status == EFI_NOT_FOUND) {
+ break;
+ }
+ ASSERT_EFI_ERROR (Status);
+ Index++;
+ } while (CompareMem (&(OrgTable->OemTableId), TableId, TableIdSize));
+
+ if (Status != EFI_NOT_FOUND) {
+ *Table = AllocateCopyPool (OrgTable->Length, OrgTable);
+ ASSERT (*Table);
+ }
+
+ ///
+ /// If we found the table, there will be no error.
+ ///
+ return Status;
+}
/**
This procedure will update immediate value assigned to a Name @@ -60,8 +116,10 @@ InitializeAslUpdateLib (
@retval EFI_SUCCESS - The function completed successfully.
@retval EFI_NOT_FOUND - Failed to locate AcpiTable.
+ @retval EFI_NOT_READY - Not ready to locate AcpiTable.
**/
EFI_STATUS
+EFIAPI
UpdateNameAslCode (
IN UINT32 AslSignature,
IN VOID *Buffer,
@@ -155,79 +213,67 @@ UpdateNameAslCode (
return EFI_NOT_FOUND;
}
-
/**
- This function uses the ACPI SDT protocol to locate an ACPI table.
- It is really only useful for finding tables that only have a single instance,
- e.g. FADT, FACS, MADT, etc. It is not good for locating SSDT, etc.
+ This procedure will update the name of ASL Method
- @param[in] Signature - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
- @param[in, out] Table - Updated with a pointer to the table
- @param[in, out] Handle - AcpiSupport protocol table handle for the table found
- @param[in, out] Version - The version of the table desired
+ @param[in] TableId - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
+ @param[in] TableIdSize - Length of the TableId to match. Table ID are 8 bytes long, this function
+ @param[in] AslSignature - The signature of Operation Region that we want to update.
+ @param[in] Buffer - source of data to be written over original aml
+ @param[in] Length - length of data to be overwritten
- @retval EFI_SUCCESS - The function completed successfully.
+ @retval EFI_UNSUPPORTED The function is not supported in this library.
**/
EFI_STATUS
-LocateAcpiTableBySignature (
- IN UINT32 Signature,
- IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
- IN OUT UINTN *Handle
+EFIAPI
+UpdateSsdtNameAslCode (
+ IN UINT8 *TableId,
+ IN UINT8 TableIdSize,
+ IN UINT32 AslSignature,
+ IN VOID *Buffer,
+ IN UINTN Length
)
{
- EFI_STATUS Status;
- INTN Index;
- EFI_ACPI_TABLE_VERSION Version;
- EFI_ACPI_DESCRIPTION_HEADER *OrgTable;
-
- if (mAcpiSdt == NULL) {
- InitializeAslUpdateLib ();
- if (mAcpiSdt == NULL) {
- return EFI_NOT_READY;
- }
- }
+ return EFI_UNSUPPORTED;
+}
- ///
- /// Locate table with matching ID
- ///
- Version = 0;
- Index = 0;
- do {
- Status = mAcpiSdt->GetAcpiTable (Index, (EFI_ACPI_SDT_HEADER **)&OrgTable, &Version, Handle);
- if (Status == EFI_NOT_FOUND) {
- break;
- }
- ASSERT_EFI_ERROR (Status);
- Index++;
- } while (OrgTable->Signature != Signature);
+/**
+ This procedure will update the name of ASL Method
- if (Status != EFI_NOT_FOUND) {
- *Table = AllocateCopyPool (OrgTable->Length, OrgTable);
- ASSERT (*Table);
- }
+ @param[in] AslSignature - The signature of Operation Region that we want to update.
+ @param[in] Buffer - source of data to be written over original aml
+ @param[in] Length - length of data to be overwritten
- ///
- /// If we found the table, there will be no error.
- ///
- return Status;
+ @retval EFI_UNSUPPORTED The function is not supported in this library.
+**/
+EFI_STATUS
+EFIAPI
+UpdateMethodAslCode (
+ IN UINT32 AslSignature,
+ IN VOID *Buffer,
+ IN UINTN Length
+ )
+{
+ return EFI_UNSUPPORTED;
}
/**
- This function uses the ACPI SDT protocol to locate an ACPI SSDT table.
+ This function uses the ACPI SDT protocol to locate an ACPI table.
+ It is really only useful for finding tables that only have a single
+ instance, e.g. FADT, FACS, MADT, etc. It is not good for locating SSDT, etc.
- @param[in] TableId - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
- @param[in] TableIdSize - Length of the TableId to match. Table ID are 8 bytes long, this function
- will consider it a match if the first TableIdSize bytes match
- @param[in, out] Table - Updated with a pointer to the table
- @param[in, out] Handle - AcpiSupport protocol table handle for the table found
- @param[in, out] Version - See AcpiSupport protocol, GetAcpiTable function for use
+ @param[in] Signature - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
+ @param[in, out] Table - Updated with a pointer to the table
+ @param[in, out] Handle - AcpiSupport protocol table handle for the table found
- @retval EFI_SUCCESS - The function completed successfully.
+ @retval EFI_SUCCESS - The function completed successfully.
+ @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
+ @retval EFI_NOT_READY - Not ready to locate AcpiTable.
**/
EFI_STATUS
-LocateAcpiTableByOemTableId (
- IN UINT8 *TableId,
- IN UINT8 TableIdSize,
+EFIAPI
+LocateAcpiTableBySignature (
+ IN UINT32 Signature,
IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
IN OUT UINTN *Handle
)
@@ -243,6 +289,7 @@ LocateAcpiTableByOemTableId (
return EFI_NOT_READY;
}
}
+
///
/// Locate table with matching ID
///
@@ -255,7 +302,7 @@ LocateAcpiTableByOemTableId (
}
ASSERT_EFI_ERROR (Status);
Index++;
- } while (CompareMem (&(OrgTable->OemTableId), TableId, TableIdSize));
+ } while (OrgTable->Signature != Signature);
if (Status != EFI_NOT_FOUND) {
*Table = AllocateCopyPool (OrgTable->Length, OrgTable); @@ -268,47 +315,3 @@ LocateAcpiTableByOemTableId (
return Status;
}
-/**
- This function calculates and updates an UINT8 checksum.
-
- @param[in] Buffer Pointer to buffer to checksum
- @param[in] Size Number of bytes to checksum
- @param[in] ChecksumOffset Offset to place the checksum result in
-
- @retval EFI_SUCCESS The function completed successfully.
-**/
-EFI_STATUS
-AcpiChecksum (
- IN VOID *Buffer,
- IN UINTN Size,
- IN UINTN ChecksumOffset
- )
-{
- UINT8 Sum;
- UINT8 *Ptr;
-
- Sum = 0;
- ///
- /// Initialize pointer
- ///
- Ptr = Buffer;
-
- ///
- /// set checksum to 0 first
- ///
- Ptr[ChecksumOffset] = 0;
-
- ///
- /// add all content of buffer
- ///
- while (Size--) {
- Sum = (UINT8) (Sum + (*Ptr++));
- }
- ///
- /// set checksum
- ///
- Ptr = Buffer;
- Ptr[ChecksumOffset] = (UINT8) (0xff - Sum + 1);
-
- return EFI_SUCCESS;
-}
diff --git a/Silicon/Intel/KabylakeSiliconPkg/Library/DxeAslUpdateLibNull/DxeAslUpdateLibNull.c b/Silicon/Intel/KabylakeSiliconPkg/Library/DxeAslUpdateLibNull/DxeAslUpdateLibNull.c
index 490a09ddb5..395ff16596 100644
--- a/Silicon/Intel/KabylakeSiliconPkg/Library/DxeAslUpdateLibNull/DxeAslUpdateLibNull.c
+++ b/Silicon/Intel/KabylakeSiliconPkg/Library/DxeAslUpdateLibNull/DxeAs
+++ lUpdateLibNull.c
@@ -6,7 +6,7 @@
This library uses the ACPI Support protocol.
-Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2017 - 2020, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
@@ -39,6 +39,27 @@ InitializeAslUpdateLib (
return EFI_SUCCESS;
}
+/**
+ This function uses the ACPI SDT protocol to locate an ACPI SSDT table.
+
+ @param[in] TableId - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
+ @param[in] TableIdSize - Length of the TableId to match. Table ID are 8 bytes long, this function
+ will consider it a match if the first TableIdSize bytes match
+ @param[in, out] Table - Updated with a pointer to the table
+ @param[in, out] Handle - AcpiSupport protocol table handle for the table found
+
+ @retval EFI_SUCCESS - The function completed successfully.
+**/
+EFI_STATUS
+LocateAcpiTableByOemTableId (
+ IN UINT8 *TableId,
+ IN UINT8 TableIdSize,
+ IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
+ IN OUT UINTN *Handle
+ )
+{
+ return EFI_SUCCESS;
+}
/**
This procedure will update immediate value assigned to a Name @@ -50,6 +71,7 @@ InitializeAslUpdateLib (
@retval EFI_SUCCESS - The function completed successfully.
**/
EFI_STATUS
+EFIAPI
UpdateNameAslCode (
IN UINT32 AslSignature,
IN VOID *Buffer,
@@ -59,66 +81,68 @@ UpdateNameAslCode (
return EFI_SUCCESS;
}
-
/**
- This function uses the ACPI SDT protocol to locate an ACPI table.
- It is really only useful for finding tables that only have a single instance,
- e.g. FADT, FACS, MADT, etc. It is not good for locating SSDT, etc.
+ This procedure will update the name of ASL Method
- @param[in] Signature - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
- @param[in, out] Table - Updated with a pointer to the table
- @param[in, out] Handle - AcpiSupport protocol table handle for the table found
- @param[in, out] Version - The version of the table desired
+ @param[in] TableId - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
+ @param[in] TableIdSize - Length of the TableId to match. Table ID are 8 bytes long, this function
+ @param[in] AslSignature - The signature of Operation Region that we want to update.
+ @param[in] Buffer - source of data to be written over original aml
+ @param[in] Length - length of data to be overwritten
- @retval EFI_SUCCESS - The function completed successfully.
+ @retval EFI_SUCCESS - The function completed successfully.
**/
EFI_STATUS
-LocateAcpiTableBySignature (
- IN UINT32 Signature,
- IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
- IN OUT UINTN *Handle
+EFIAPI
+UpdateSsdtNameAslCode (
+ IN UINT8 *TableId,
+ IN UINT8 TableIdSize,
+ IN UINT32 AslSignature,
+ IN VOID *Buffer,
+ IN UINTN Length
)
{
return EFI_SUCCESS;
}
/**
- This function uses the ACPI SDT protocol to locate an ACPI SSDT table.
+ This procedure will update the name of ASL Method
- @param[in] TableId - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
- @param[in] TableIdSize - Length of the TableId to match. Table ID are 8 bytes long, this function
- will consider it a match if the first TableIdSize bytes match
- @param[in, out] Table - Updated with a pointer to the table
- @param[in, out] Handle - AcpiSupport protocol table handle for the table found
- @param[in, out] Version - See AcpiSupport protocol, GetAcpiTable function for use
+ @param[in] AslSignature - The signature of Operation Region that we want to update.
+ @param[in] Buffer - source of data to be written over original aml
+ @param[in] Length - length of data to be overwritten
@retval EFI_SUCCESS - The function completed successfully.
**/
EFI_STATUS
-LocateAcpiTableByOemTableId (
- IN UINT8 *TableId,
- IN UINT8 TableIdSize,
- IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
- IN OUT UINTN *Handle
+EFIAPI
+UpdateMethodAslCode (
+ IN UINT32 AslSignature,
+ IN VOID *Buffer,
+ IN UINTN Length
)
{
return EFI_SUCCESS;
}
+
/**
- This function calculates and updates an UINT8 checksum.
+ This function uses the ACPI SDT protocol to locate an ACPI table.
+ It is really only useful for finding tables that only have a single
+ instance, e.g. FADT, FACS, MADT, etc. It is not good for locating SSDT, etc.
- @param[in] Buffer Pointer to buffer to checksum
- @param[in] Size Number of bytes to checksum
- @param[in] ChecksumOffset Offset to place the checksum result in
+ @param[in] Signature - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
+ @param[in, out] Table - Updated with a pointer to the table
+ @param[in, out] Handle - AcpiSupport protocol table handle for the table found
- @retval EFI_SUCCESS The function completed successfully.
+ @retval EFI_SUCCESS - The function completed successfully.
**/
EFI_STATUS
-AcpiChecksum (
- IN VOID *Buffer,
- IN UINTN Size,
- IN UINTN ChecksumOffset
+EFIAPI
+LocateAcpiTableBySignature (
+ IN UINT32 Signature,
+ IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
+ IN OUT UINTN *Handle
)
{
return EFI_SUCCESS;
diff --git a/Silicon/Intel/KabylakeSiliconPkg/Pch/PchInit/Dxe/PchAcpi.c b/Silicon/Intel/KabylakeSiliconPkg/Pch/PchInit/Dxe/PchAcpi.c
index a0e3996664..6cbaf9c067 100644
--- a/Silicon/Intel/KabylakeSiliconPkg/Pch/PchInit/Dxe/PchAcpi.c
+++ b/Silicon/Intel/KabylakeSiliconPkg/Pch/PchInit/Dxe/PchAcpi.c
@@ -1,7 +1,7 @@
/** @file
This is the driver that initializes the Intel PCH.
-Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2017 - 2020, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
@@ -443,9 +443,6 @@ PatchPchNvsAreaAddress (
UINT32 Address;
UINT16 Length;
- Status = InitializeAslUpdateLib ();
- ASSERT_EFI_ERROR (Status);
-
Address = (UINT32) (UINTN) mPchNvsAreaProtocol.Area;
Length = (UINT16) sizeof (PCH_NVS_AREA);
DEBUG ((DEBUG_INFO, "PatchPchNvsAreaAddress: PCH NVS Address %x Length %x\n", Address, Length)); diff --git a/Silicon/Intel/KabylakeSiliconPkg/Include/Library/AslUpdateLib.h b/Silicon/Intel/KabylakeSiliconPkg/Include/Library/AslUpdateLib.h
index d58b6d6458..215ca85a29 100644
--- a/Silicon/Intel/KabylakeSiliconPkg/Include/Library/AslUpdateLib.h
+++ b/Silicon/Intel/KabylakeSiliconPkg/Include/Library/AslUpdateLib.h
@@ -5,7 +5,7 @@
Make sure you meet the requirements for the library (protocol dependencies, use
restrictions, etc).
-Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2017 - 2020, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
@@ -16,61 +16,71 @@ SPDX-License-Identifier: BSD-2-Clause-Patent // // Include files //
+#include <Uefi/UefiBaseType.h>
#include <IndustryStandard/Acpi.h>
#include <Protocol/AcpiTable.h>
#include <Protocol/AcpiSystemDescriptionTable.h>
-//
-// AML parsing definitions
-//
-#define AML_RESRC_TEMP_END_TAG 0x0079
-
-//
-// ASL PSS package structure layout
-//
-#pragma pack (1)
-typedef struct {
- UINT8 NameOp; // 12h ;First opcode is a NameOp.
- UINT8 PackageLead; // 20h ;First opcode is a NameOp.
- UINT8 NumEntries; // 06h ;First opcode is a NameOp.
- UINT8 DwordPrefix1; // 0Ch
- UINT32 CoreFrequency; // 00h
- UINT8 DwordPrefix2; // 0Ch
- UINT32 Power; // 00h
- UINT8 DwordPrefix3; // 0Ch
- UINT32 TransLatency; // 00h
- UINT8 DwordPrefix4; // 0Ch
- UINT32 BmLatency; // 00h
- UINT8 DwordPrefix5; // 0Ch
- UINT32 Control; // 00h
- UINT8 DwordPrefix6; // 0Ch
- UINT32 Status; // 00h
-} PSS_PACKAGE_LAYOUT;
-#pragma pack()
/**
- Initialize the ASL update library state.
- This must be called prior to invoking other library functions.
+ This procedure will update immediate value assigned to a Name
+ @param[in] AslSignature The signature of Operation Region that we want to update.
+ @param[in] Buffer source of data to be written over original aml
+ @param[in] Length length of data to be overwritten
@retval EFI_SUCCESS The function completed successfully.
+ @retval EFI_NOT_FOUND Failed to locate AcpiTable.
+ @retval EFI_NOT_READY Not ready to locate AcpiTable.
+ @retval EFI_UNSUPPORTED The function is not supported in this library.
**/
EFI_STATUS
-InitializeAslUpdateLib (
- VOID
+EFIAPI
+UpdateNameAslCode (
+ IN UINT32 AslSignature,
+ IN VOID *Buffer,
+ IN UINTN Length
);
/**
- This procedure will update immediate value assigned to a Name
+ This procedure will update the name of ASL Method
+
+ @param[in] TableId - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
+ @param[in] TableIdSize - Length of the TableId to match. Table ID are 8 bytes long, this function
+ @param[in] AslSignature - The signature of Operation Region that we want to update.
+ @param[in] Buffer - source of data to be written over original aml
+ @param[in] Length - length of data to be overwritten
+
+ @retval EFI_SUCCESS - The function completed successfully.
+ @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
+ @retval EFI_NOT_READY - Not ready to locate AcpiTable.
+ @retval EFI_UNSUPPORTED - The function is not supported in this library.
+**/
+EFI_STATUS
+EFIAPI
+UpdateSsdtNameAslCode (
+ IN UINT8 *TableId,
+ IN UINT8 TableIdSize,
+ IN UINT32 AslSignature,
+ IN VOID *Buffer,
+ IN UINTN Length
+ );
- @param[in] AslSignature The signature of Operation Region that we want to update.
- @param[in] Buffer source of data to be written over original aml
- @param[in] Length length of data to be overwritten
+/**
+ This procedure will update the name of ASL Method
- @retval EFI_SUCCESS The function completed successfully.
+ @param[in] AslSignature - The signature of Operation Region that we want to update.
+ @param[in] Buffer - source of data to be written over original aml
+ @param[in] Length - length of data to be overwritten
+
+ @retval EFI_SUCCESS - The function completed successfully.
+ @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
+ @retval EFI_NOT_READY - Not ready to locate AcpiTable.
+ @retval EFI_UNSUPPORTED - The function is not supported in this library.
**/
EFI_STATUS
-UpdateNameAslCode(
+EFIAPI
+UpdateMethodAslCode (
IN UINT32 AslSignature,
IN VOID *Buffer,
IN UINTN Length
@@ -86,55 +96,19 @@ UpdateNameAslCode(
@param[in] Signature Pointer to an ASCII string containing the Signature to match
@param[in, out] Table Updated with a pointer to the table
@param[in, out] Handle AcpiSupport protocol table handle for the table found
- @param[in, out] Version On input, the version of the table desired,
- on output, the versions the table belongs to
@see AcpiSupport protocol for details
@retval EFI_SUCCESS The function completed successfully.
+ @retval EFI_NOT_FOUND Failed to locate AcpiTable.
+ @retval EFI_NOT_READY Not ready to locate AcpiTable.
+ @retval EFI_UNSUPPORTED The function is not supported in this library.s
**/
EFI_STATUS
+EFIAPI
LocateAcpiTableBySignature (
IN UINT32 Signature,
IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
IN OUT UINTN *Handle
);
-/**
- This function uses the ACPI support protocol to locate an ACPI SSDT table.
- The table is located by searching for a matching OEM Table ID field.
- Partial match searches are supported via the TableIdSize parameter.
-
- @param[in] TableId Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
- @param[in] TableIdSize Length of the TableId to match. Table ID are 8 bytes long, this function
- will consider it a match if the first TableIdSize bytes match
- @param[in, out] Table Updated with a pointer to the table
- @param[in, out] Handle AcpiSupport protocol table handle for the table found
- @param[in, out] Version See AcpiSupport protocol, GetAcpiTable function for use
-
- @retval EFI_SUCCESS The function completed successfully.
-**/
-EFI_STATUS
-LocateAcpiTableByOemTableId (
- IN UINT8 *TableId,
- IN UINT8 TableIdSize,
- IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
- IN OUT UINTN *Handle
- );
-
-/**
- This function calculates and updates an UINT8 checksum.
-
- @param[in] Buffer Pointer to buffer to checksum
- @param[in] Size Number of bytes to checksum
- @param[in] ChecksumOffset Offset to place the checksum result in
-
- @retval EFI_SUCCESS The function completed successfully.
-**/
-EFI_STATUS
-AcpiChecksum (
- IN VOID *Buffer,
- IN UINTN Size,
- IN UINTN ChecksumOffset
- );
-
#endif
--
2.16.2.windows.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* Re: [edk2-platforms:PATCH v4 6/7] CoffeelakeSiliconPkg/DxeAslUpdateLib: Cleans up APIs
2020-04-29 2:32 ` [edk2-platforms:PATCH v4 6/7] CoffeelakeSiliconPkg/DxeAslUpdateLib: " Miki Shindo
2020-04-30 2:57 ` Chiu, Chasel
@ 2020-04-30 5:03 ` Chaganty, Rangasai V
1 sibling, 0 replies; 23+ messages in thread
From: Chaganty, Rangasai V @ 2020-04-30 5:03 UTC (permalink / raw)
To: Shindo, Miki, devel@edk2.groups.io
Cc: Chiu, Chasel, Desimone, Nathaniel L, Agyeman, Prince, Ni, Ray
Reviewed-by: Sai Chaganty <rangasai.v.chaganty@intel.com>
-----Original Message-----
From: Shindo, Miki <miki.shindo@intel.com>
Sent: Tuesday, April 28, 2020 7:32 PM
To: devel@edk2.groups.io
Cc: Chaganty, Rangasai V <rangasai.v.chaganty@intel.com>; Chiu, Chasel <chasel.chiu@intel.com>; Desimone, Nathaniel L <nathaniel.l.desimone@intel.com>; Agyeman, Prince <prince.agyeman@intel.com>; Ni, Ray <ray.ni@intel.com>
Subject: [edk2-platforms:PATCH v4 6/7] CoffeelakeSiliconPkg/DxeAslUpdateLib: Cleans up APIs
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2536
Callers of DxeAslUpdateLib don't have to call InitializeAslUpdateLib() but the library itself runs it internally. This commit deletes the redundant calls in caller side and makes it an internal call.
LocateAcpiTableByOemTableId() is unreferenced externally so this commit makes it an internal call.
PSS_PACKAGE_LAYOUT and AML_RESRC_TEMP_END_TAG are both unreferenced so they are removed.
AslUpdateLib.h is cleaned up accordingly.
Signed-off-by: Miki Shindo <miki.shindo@intel.com>
Cc: Sai Chaganty <rangasai.v.chaganty@intel.com>
Cc: Chasel Chiu <chasel.chiu@intel.com>
Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
Cc: Prince Agyeman <prince.agyeman@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
---
Silicon/Intel/CoffeelakeSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib.c | 190 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------------------------------------------------------------------
Silicon/Intel/CoffeelakeSiliconPkg/Library/DxeAslUpdateLibNull/DxeAslUpdateLibNull.c | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------
Silicon/Intel/CoffeelakeSiliconPkg/Pch/PchInit/Dxe/PchAcpi.c | 3 ---
Silicon/Intel/CoffeelakeSiliconPkg/Include/Library/AslUpdateLib.h | 114 +++++++++++++++++++++++++++++++++++-------------------------------------------------------------------------------
4 files changed, 180 insertions(+), 221 deletions(-)
diff --git a/Silicon/Intel/CoffeelakeSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib.c b/Silicon/Intel/CoffeelakeSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib.c
index 04cf66fd2f..f18ca835ad 100644
--- a/Silicon/Intel/CoffeelakeSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib.c
+++ b/Silicon/Intel/CoffeelakeSiliconPkg/Library/DxeAslUpdateLib/DxeAslU
+++ pdateLib.c
@@ -6,7 +6,7 @@
This library uses the ACPI Support protocol.
- Copyright (c) 2019 Intel Corporation. All rights reserved. <BR>
+ Copyright (c) 2019 -2020, Intel Corporation. All rights reserved.
+ <BR>
SPDX-License-Identifier: BSD-2-Clause-Patent **/ @@ -51,6 +51,62 @@ InitializeAslUpdateLib (
return Status;
}
+/**
+ This function uses the ACPI SDT protocol to locate an ACPI SSDT table.
+
+ @param[in] TableId - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
+ @param[in] TableIdSize - Length of the TableId to match. Table ID are 8 bytes long, this function
+ will consider it a match if the first TableIdSize bytes match
+ @param[in, out] Table - Updated with a pointer to the table
+ @param[in, out] Handle - AcpiSupport protocol table handle for the table found
+
+ @retval EFI_SUCCESS - The function completed successfully.
+ @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
+ @retval EFI_NOT_READY - Not ready to locate AcpiTable.
+**/
+EFI_STATUS
+LocateAcpiTableByOemTableId (
+ IN UINT8 *TableId,
+ IN UINT8 TableIdSize,
+ IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
+ IN OUT UINTN *Handle
+ )
+{
+ EFI_STATUS Status;
+ INTN Index;
+ EFI_ACPI_TABLE_VERSION Version;
+ EFI_ACPI_DESCRIPTION_HEADER *OrgTable;
+
+ if (mAcpiSdt == NULL) {
+ InitializeAslUpdateLib ();
+ if (mAcpiSdt == NULL) {
+ return EFI_NOT_READY;
+ }
+ }
+ ///
+ /// Locate table with matching ID
+ ///
+ Version = 0;
+ Index = 0;
+ do {
+ Status = mAcpiSdt->GetAcpiTable (Index, (EFI_ACPI_SDT_HEADER **)&OrgTable, &Version, Handle);
+ if (Status == EFI_NOT_FOUND) {
+ break;
+ }
+ ASSERT_EFI_ERROR (Status);
+ Index++;
+ } while (CompareMem (&(OrgTable->OemTableId), TableId, TableIdSize));
+
+ if (Status != EFI_NOT_FOUND) {
+ *Table = AllocateCopyPool (OrgTable->Length, OrgTable);
+ ASSERT (*Table);
+ }
+
+ ///
+ /// If we found the table, there will be no error.
+ ///
+ return Status;
+}
/**
This procedure will update immediate value assigned to a Name @@ -61,8 +117,10 @@ InitializeAslUpdateLib (
@retval EFI_SUCCESS - The function completed successfully.
@retval EFI_NOT_FOUND - Failed to locate AcpiTable.
+ @retval EFI_NOT_READY - Not ready to locate AcpiTable.
**/
EFI_STATUS
+EFIAPI
UpdateNameAslCode (
IN UINT32 AslSignature,
IN VOID *Buffer,
@@ -154,6 +212,29 @@ UpdateNameAslCode (
return EFI_NOT_FOUND;
}
+/**
+ This procedure will update immediate value assigned to a Name in SSDT
+table
+
+ @param[in] TableId - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
+ @param[in] TableIdSize - Length of the TableId to match. Table ID are 8 bytes long, this function
+ @param[in] Buffer - source of data to be written over original aml
+ @param[in] Length - length of data to be overwritten
+
+ @retval EFI_UNSUPPORTED The function is not supported in this library.
+**/
+EFI_STATUS
+EFIAPI
+UpdateSsdtNameAslCode (
+ IN UINT8 *TableId,
+ IN UINT8 TableIdSize,
+ IN UINT32 AslSignature,
+ IN VOID *Buffer,
+ IN UINTN Length
+ )
+{
+ return EFI_UNSUPPORTED;
+}
+
/**
This procedure will update the name of ASL Method
@@ -163,8 +244,10 @@ UpdateNameAslCode (
@retval EFI_SUCCESS - The function completed successfully.
@retval EFI_NOT_FOUND - Failed to locate AcpiTable.
+ @retval EFI_NOT_READY - Not ready to locate AcpiTable.
**/
EFI_STATUS
+EFIAPI
UpdateMethodAslCode (
IN UINT32 AslSignature,
IN VOID *Buffer,
@@ -253,11 +336,13 @@ UpdateMethodAslCode (
@param[in] Signature - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
@param[in, out] Table - Updated with a pointer to the table
@param[in, out] Handle - AcpiSupport protocol table handle for the table found
- @param[in, out] Version - The version of the table desired
@retval EFI_SUCCESS - The function completed successfully.
+ @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
+ @retval EFI_NOT_READY - Not ready to locate AcpiTable.
**/
EFI_STATUS
+EFIAPI
LocateAcpiTableBySignature (
IN UINT32 Signature,
IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
@@ -300,104 +385,3 @@ LocateAcpiTableBySignature (
///
return Status;
}
-
-/**
- This function uses the ACPI SDT protocol to locate an ACPI SSDT table.
-
- @param[in] TableId - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
- @param[in] TableIdSize - Length of the TableId to match. Table ID are 8 bytes long, this function
- will consider it a match if the first TableIdSize bytes match
- @param[in, out] Table - Updated with a pointer to the table
- @param[in, out] Handle - AcpiSupport protocol table handle for the table found
- @param[in, out] Version - See AcpiSupport protocol, GetAcpiTable function for use
-
- @retval EFI_SUCCESS - The function completed successfully.
-**/
-EFI_STATUS
-LocateAcpiTableByOemTableId (
- IN UINT8 *TableId,
- IN UINT8 TableIdSize,
- IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
- IN OUT UINTN *Handle
- )
-{
- EFI_STATUS Status;
- INTN Index;
- EFI_ACPI_TABLE_VERSION Version;
- EFI_ACPI_DESCRIPTION_HEADER *OrgTable;
-
- if (mAcpiSdt == NULL) {
- InitializeAslUpdateLib ();
- if (mAcpiSdt == NULL) {
- return EFI_NOT_READY;
- }
- }
- ///
- /// Locate table with matching ID
- ///
- Version = 0;
- Index = 0;
- do {
- Status = mAcpiSdt->GetAcpiTable (Index, (EFI_ACPI_SDT_HEADER **)&OrgTable, &Version, Handle);
- if (Status == EFI_NOT_FOUND) {
- break;
- }
- ASSERT_EFI_ERROR (Status);
- Index++;
- } while (CompareMem (&(OrgTable->OemTableId), TableId, TableIdSize));
-
- if (Status != EFI_NOT_FOUND) {
- *Table = AllocateCopyPool (OrgTable->Length, OrgTable);
- ASSERT (*Table);
- }
-
- ///
- /// If we found the table, there will be no error.
- ///
- return Status;
-}
-
-/**
- This function calculates and updates an UINT8 checksum.
-
- @param[in] Buffer Pointer to buffer to checksum
- @param[in] Size Number of bytes to checksum
- @param[in] ChecksumOffset Offset to place the checksum result in
-
- @retval EFI_SUCCESS The function completed successfully.
-**/
-EFI_STATUS
-AcpiChecksum (
- IN VOID *Buffer,
- IN UINTN Size,
- IN UINTN ChecksumOffset
- )
-{
- UINT8 Sum;
- UINT8 *Ptr;
-
- Sum = 0;
- ///
- /// Initialize pointer
- ///
- Ptr = Buffer;
-
- ///
- /// set checksum to 0 first
- ///
- Ptr[ChecksumOffset] = 0;
-
- ///
- /// add all content of buffer
- ///
- while (Size--) {
- Sum = (UINT8) (Sum + (*Ptr++));
- }
- ///
- /// set checksum
- ///
- Ptr = Buffer;
- Ptr[ChecksumOffset] = (UINT8) (0xff - Sum + 1);
-
- return EFI_SUCCESS;
-}
diff --git a/Silicon/Intel/CoffeelakeSiliconPkg/Library/DxeAslUpdateLibNull/DxeAslUpdateLibNull.c b/Silicon/Intel/CoffeelakeSiliconPkg/Library/DxeAslUpdateLibNull/DxeAslUpdateLibNull.c
index a7ce92b7c3..63e232f04b 100644
--- a/Silicon/Intel/CoffeelakeSiliconPkg/Library/DxeAslUpdateLibNull/DxeAslUpdateLibNull.c
+++ b/Silicon/Intel/CoffeelakeSiliconPkg/Library/DxeAslUpdateLibNull/Dxe
+++ AslUpdateLibNull.c
@@ -6,7 +6,7 @@
This library uses the ACPI Support protocol.
- Copyright (c) 2019 Intel Corporation. All rights reserved. <BR>
+ Copyright (c) 2019 - 2020, Intel Corporation. All rights reserved.
+ <BR>
SPDX-License-Identifier: BSD-2-Clause-Patent **/ @@ -40,6 +40,27 @@ InitializeAslUpdateLib (
return EFI_SUCCESS;
}
+/**
+ This function uses the ACPI SDT protocol to locate an ACPI SSDT table.
+
+ @param[in] TableId - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
+ @param[in] TableIdSize - Length of the TableId to match. Table ID are 8 bytes long, this function
+ will consider it a match if the first TableIdSize bytes match
+ @param[in, out] Table - Updated with a pointer to the table
+ @param[in, out] Handle - AcpiSupport protocol table handle for the table found
+
+ @retval EFI_SUCCESS - The function completed successfully.
+**/
+EFI_STATUS
+LocateAcpiTableByOemTableId (
+ IN UINT8 *TableId,
+ IN UINT8 TableIdSize,
+ IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
+ IN OUT UINTN *Handle
+ )
+{
+ return EFI_SUCCESS;
+}
/**
This procedure will update immediate value assigned to a Name @@ -51,6 +72,7 @@ InitializeAslUpdateLib (
@retval EFI_SUCCESS - The function completed successfully.
**/
EFI_STATUS
+EFIAPI
UpdateNameAslCode (
IN UINT32 AslSignature,
IN VOID *Buffer,
@@ -60,66 +82,66 @@ UpdateNameAslCode (
return EFI_SUCCESS;
}
-
/**
- This function uses the ACPI SDT protocol to locate an ACPI table.
- It is really only useful for finding tables that only have a single instance,
- e.g. FADT, FACS, MADT, etc. It is not good for locating SSDT, etc.
+ This procedure will update immediate value assigned to a Name in SSDT
+ table
- @param[in] Signature - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
- @param[in, out] Table - Updated with a pointer to the table
- @param[in, out] Handle - AcpiSupport protocol table handle for the table found
- @param[in, out] Version - The version of the table desired
+ @param[in] TableId - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
+ @param[in] TableIdSize - Length of the TableId to match. Table ID are 8 bytes long, this function
+ @param[in] Buffer - source of data to be written over original aml
+ @param[in] Length - length of data to be overwritten
- @retval EFI_SUCCESS - The function completed successfully.
+ @retval EFI_SUCCESS - The function completed successfully.
**/
EFI_STATUS
-LocateAcpiTableBySignature (
- IN UINT32 Signature,
- IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
- IN OUT UINTN *Handle
+EFIAPI
+UpdateSsdtNameAslCode (
+ IN UINT8 *TableId,
+ IN UINT8 TableIdSize,
+ IN UINT32 AslSignature,
+ IN VOID *Buffer,
+ IN UINTN Length
)
{
return EFI_SUCCESS;
}
/**
- This function uses the ACPI SDT protocol to locate an ACPI SSDT table.
+ This procedure will update the name of ASL Method
- @param[in] TableId - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
- @param[in] TableIdSize - Length of the TableId to match. Table ID are 8 bytes long, this function
- will consider it a match if the first TableIdSize bytes match
- @param[in, out] Table - Updated with a pointer to the table
- @param[in, out] Handle - AcpiSupport protocol table handle for the table found
- @param[in, out] Version - See AcpiSupport protocol, GetAcpiTable function for use
+ @param[in] AslSignature - The signature of Operation Region that we want to update.
+ @param[in] Buffer - source of data to be written over original aml
+ @param[in] Length - length of data to be overwritten
@retval EFI_SUCCESS - The function completed successfully.
**/
EFI_STATUS
-LocateAcpiTableByOemTableId (
- IN UINT8 *TableId,
- IN UINT8 TableIdSize,
- IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
- IN OUT UINTN *Handle
+EFIAPI
+UpdateMethodAslCode (
+ IN UINT32 AslSignature,
+ IN VOID *Buffer,
+ IN UINTN Length
)
{
return EFI_SUCCESS;
}
/**
- This function calculates and updates an UINT8 checksum.
-
- @param[in] Buffer Pointer to buffer to checksum
- @param[in] Size Number of bytes to checksum
- @param[in] ChecksumOffset Offset to place the checksum result in
+ This function uses the ACPI SDT protocol to locate an ACPI table.
+ It is really only useful for finding tables that only have a single
+ instance, e.g. FADT, FACS, MADT, etc. It is not good for locating SSDT, etc.
- @retval EFI_SUCCESS The function completed successfully.
+ @param[in] Signature - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
+ @param[in, out] Table - Updated with a pointer to the table
+ @param[in, out] Handle - AcpiSupport protocol table handle for the table found
+s
+ @retval EFI_SUCCESS - The function completed successfully.
**/
EFI_STATUS
-AcpiChecksum (
- IN VOID *Buffer,
- IN UINTN Size,
- IN UINTN ChecksumOffset
+EFIAPI
+LocateAcpiTableBySignature (
+ IN UINT32 Signature,
+ IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
+ IN OUT UINTN *Handle
)
{
return EFI_SUCCESS;
diff --git a/Silicon/Intel/CoffeelakeSiliconPkg/Pch/PchInit/Dxe/PchAcpi.c b/Silicon/Intel/CoffeelakeSiliconPkg/Pch/PchInit/Dxe/PchAcpi.c
index 12f1a7f4fe..807cdb92f7 100644
--- a/Silicon/Intel/CoffeelakeSiliconPkg/Pch/PchInit/Dxe/PchAcpi.c
+++ b/Silicon/Intel/CoffeelakeSiliconPkg/Pch/PchInit/Dxe/PchAcpi.c
@@ -438,9 +438,6 @@ PatchPchNvsAreaAddress (
UINT32 Address;
UINT16 Length;
- Status = InitializeAslUpdateLib ();
- ASSERT_EFI_ERROR (Status);
-
Address = (UINT32) (UINTN) mPchNvsAreaProtocol.Area;
Length = (UINT16) sizeof (PCH_NVS_AREA);
DEBUG ((DEBUG_INFO, "PatchPchNvsAreaAddress: PCH NVS Address %x Length %x\n", Address, Length)); diff --git a/Silicon/Intel/CoffeelakeSiliconPkg/Include/Library/AslUpdateLib.h b/Silicon/Intel/CoffeelakeSiliconPkg/Include/Library/AslUpdateLib.h
index 39baa6c03a..1a0ec4fa16 100644
--- a/Silicon/Intel/CoffeelakeSiliconPkg/Include/Library/AslUpdateLib.h
+++ b/Silicon/Intel/CoffeelakeSiliconPkg/Include/Library/AslUpdateLib.h
@@ -5,7 +5,7 @@
Make sure you meet the requirements for the library (protocol dependencies, use
restrictions, etc).
- Copyright (c) 2019 Intel Corporation. All rights reserved. <BR>
+ Copyright (c) 2019 - 2020, Intel Corporation. All rights reserved.
+ <BR>
SPDX-License-Identifier: BSD-2-Clause-Patent **/ @@ -16,61 +16,50 @@ // // Include files //
+#include <Uefi/UefiBaseType.h>
#include <IndustryStandard/Acpi.h>
#include <Protocol/AcpiTable.h>
#include <Protocol/AcpiSystemDescriptionTable.h>
-//
-// AML parsing definitions
-//
-#define AML_RESRC_TEMP_END_TAG 0x0079
-
-//
-// ASL PSS package structure layout
-//
-#pragma pack (1)
-typedef struct {
- UINT8 NameOp; // 12h ;First opcode is a NameOp.
- UINT8 PackageLead; // 20h ;First opcode is a NameOp.
- UINT8 NumEntries; // 06h ;First opcode is a NameOp.
- UINT8 DwordPrefix1; // 0Ch
- UINT32 CoreFrequency; // 00h
- UINT8 DwordPrefix2; // 0Ch
- UINT32 Power; // 00h
- UINT8 DwordPrefix3; // 0Ch
- UINT32 TransLatency; // 00h
- UINT8 DwordPrefix4; // 0Ch
- UINT32 BmLatency; // 00h
- UINT8 DwordPrefix5; // 0Ch
- UINT32 Control; // 00h
- UINT8 DwordPrefix6; // 0Ch
- UINT32 Status; // 00h
-} PSS_PACKAGE_LAYOUT;
-#pragma pack()
-
/**
- Initialize the ASL update library state.
- This must be called prior to invoking other library functions.
+ This procedure will update immediate value assigned to a Name
+ @param[in] AslSignature The signature of Operation Region that we want to update.
+ @param[in] Buffer source of data to be written over original aml
+ @param[in] Length length of data to be overwritten
@retval EFI_SUCCESS The function completed successfully.
+ @retval EFI_NOT_FOUND Failed to locate AcpiTable.
+ @retval EFI_NOT_READY Not ready to locate AcpiTable.
+ @retval EFI_UNSUPPORTED The function is not supported in this library.
**/
EFI_STATUS
-InitializeAslUpdateLib (
- VOID
+EFIAPI
+UpdateNameAslCode(
+ IN UINT32 AslSignature,
+ IN VOID *Buffer,
+ IN UINTN Length
);
/**
- This procedure will update immediate value assigned to a Name
+ This procedure will update the name of ASL Method
- @param[in] AslSignature The signature of Operation Region that we want to update.
- @param[in] Buffer source of data to be written over original aml
- @param[in] Length length of data to be overwritten
+ @param[in] TableId - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
+ @param[in] TableIdSize - Length of the TableId to match. Table ID are 8 bytes long, this function
+ @param[in] AslSignature - The signature of Operation Region that we want to update.
+ @param[in] Buffer - source of data to be written over original aml
+ @param[in] Length - length of data to be overwritten
- @retval EFI_SUCCESS The function completed successfully.
+ @retval EFI_SUCCESS - The function completed successfully.
+ @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
+ @retval EFI_NOT_READY - Not ready to locate AcpiTable.
+ @retval EFI_UNSUPPORTED - The function is not supported in this library.
**/
EFI_STATUS
-UpdateNameAslCode(
+EFIAPI
+UpdateSsdtNameAslCode (
+ IN UINT8 *TableId,
+ IN UINT8 TableIdSize,
IN UINT32 AslSignature,
IN VOID *Buffer,
IN UINTN Length
@@ -85,8 +74,11 @@ UpdateNameAslCode(
@retval EFI_SUCCESS - The function completed successfully.
@retval EFI_NOT_FOUND - Failed to locate AcpiTable.
+ @retval EFI_NOT_READY - Not ready to locate AcpiTable.
+ @retval EFI_UNSUPPORTED - The function is not supported in this library.
**/
EFI_STATUS
+EFIAPI
UpdateMethodAslCode (
IN UINT32 AslSignature,
IN VOID *Buffer,
@@ -103,55 +95,19 @@ UpdateMethodAslCode (
@param[in] Signature Pointer to an ASCII string containing the Signature to match
@param[in, out] Table Updated with a pointer to the table
@param[in, out] Handle AcpiSupport protocol table handle for the table found
- @param[in, out] Version On input, the version of the table desired,
- on output, the versions the table belongs to
@see AcpiSupport protocol for details
@retval EFI_SUCCESS The function completed successfully.
+ @retval EFI_NOT_FOUND Failed to locate AcpiTable.
+ @retval EFI_NOT_READY Not ready to locate AcpiTable.
+ @retval EFI_UNSUPPORTED The function is not supported in this library.
**/
EFI_STATUS
+EFIAPI
LocateAcpiTableBySignature (
IN UINT32 Signature,
IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
IN OUT UINTN *Handle
);
-/**
- This function uses the ACPI support protocol to locate an ACPI SSDT table.
- The table is located by searching for a matching OEM Table ID field.
- Partial match searches are supported via the TableIdSize parameter.
-
- @param[in] TableId Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
- @param[in] TableIdSize Length of the TableId to match. Table ID are 8 bytes long, this function
- will consider it a match if the first TableIdSize bytes match
- @param[in, out] Table Updated with a pointer to the table
- @param[in, out] Handle AcpiSupport protocol table handle for the table found
- @param[in, out] Version See AcpiSupport protocol, GetAcpiTable function for use
-
- @retval EFI_SUCCESS The function completed successfully.
-**/
-EFI_STATUS
-LocateAcpiTableByOemTableId (
- IN UINT8 *TableId,
- IN UINT8 TableIdSize,
- IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
- IN OUT UINTN *Handle
- );
-
-/**
- This function calculates and updates an UINT8 checksum.
-
- @param[in] Buffer Pointer to buffer to checksum
- @param[in] Size Number of bytes to checksum
- @param[in] ChecksumOffset Offset to place the checksum result in
-
- @retval EFI_SUCCESS The function completed successfully.
-**/
-EFI_STATUS
-AcpiChecksum (
- IN VOID *Buffer,
- IN UINTN Size,
- IN UINTN ChecksumOffset
- );
-
#endif
--
2.16.2.windows.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* Re: [edk2-platforms:PATCH v4 7/7] IntelSiliconPkg/DxeAslUpdateLib: Add DxeAslUpdateLib support
2020-04-29 2:32 ` [edk2-platforms:PATCH v4 7/7] IntelSiliconPkg/DxeAslUpdateLib: Add DxeAslUpdateLib support Miki Shindo
2020-04-30 2:57 ` Chiu, Chasel
@ 2020-04-30 5:13 ` Chaganty, Rangasai V
1 sibling, 0 replies; 23+ messages in thread
From: Chaganty, Rangasai V @ 2020-04-30 5:13 UTC (permalink / raw)
To: Shindo, Miki, devel@edk2.groups.io
Cc: Chiu, Chasel, Desimone, Nathaniel L, Agyeman, Prince, Ni, Ray
The following APIs have very similar descriptions
UpdateNameAslCode
UpdateSsdtNameAslCode
UpdateMethodAslCode
Please help update the descriptions to better reflect the purpose of the API.
With that:
Reviewed-by: Sai Chaganty <rangasai.v.chaganty@intel.com>
-----Original Message-----
From: Shindo, Miki <miki.shindo@intel.com>
Sent: Tuesday, April 28, 2020 7:32 PM
To: devel@edk2.groups.io
Cc: Chaganty, Rangasai V <rangasai.v.chaganty@intel.com>; Chiu, Chasel <chasel.chiu@intel.com>; Desimone, Nathaniel L <nathaniel.l.desimone@intel.com>; Agyeman, Prince <prince.agyeman@intel.com>; Ni, Ray <ray.ni@intel.com>
Subject: [edk2-platforms:PATCH v4 7/7] IntelSiliconPkg/DxeAslUpdateLib: Add DxeAslUpdateLib support
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2536
This commit adds DxeAslUpdateLib library support in IntelSiliconPkg, which allows AML to be updated in DXE.
Signed-off-by: Miki Shindo <miki.shindo@intel.com>
Cc: Sai Chaganty <rangasai.v.chaganty@intel.com>
Cc: Chasel Chiu <chasel.chiu@intel.com>
Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
Cc: Prince Agyeman <prince.agyeman@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
Acked-by: Chasel Chiu <chasel.chiu@intel.com>
Acked-by: Nate DeSimone <nathaniel.l.desimone@intel.com>
---
Silicon/Intel/IntelSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib.c | 518 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Silicon/Intel/IntelSiliconPkg/Include/Library/AslUpdateLib.h | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Silicon/Intel/IntelSiliconPkg/IntelSiliconPkg.dec | 4 ++++
Silicon/Intel/IntelSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib.inf | 42 ++++++++++++++++++++++++++++++++++++++++++
4 files changed, 680 insertions(+)
diff --git a/Silicon/Intel/IntelSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib.c b/Silicon/Intel/IntelSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib.c
new file mode 100644
index 0000000000..9b3117536a
--- /dev/null
+++ b/Silicon/Intel/IntelSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdate
+++ Lib.c
@@ -0,0 +1,518 @@
+/** @file
+ Boot service DXE ASL update library implementation.
+ Note that the current version of the library updates AML.
+
+ These functions in this file can be called during DXE and cannot be
+ called during runtime or in SMM which should use a RT or SMM library.
+
+ This library uses the ACPI Support protocol.
+
+ Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
+ SPDX-License-Identifier: BSD-2-Clause-Patent **/
+
+#include <Base.h>
+#include <Uefi/UefiBaseType.h>
+#include <Uefi/UefiSpec.h>
+#include <Library/UefiBootServicesTableLib.h>
+#include <Library/DebugLib.h>
+#include <Library/UefiLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/MemoryAllocationLib.h>
+
+#include <Library/AslUpdateLib.h>
+
+//
+// Function implemenations
+//
+static EFI_ACPI_SDT_PROTOCOL *mAcpiSdt = NULL;
+static EFI_ACPI_TABLE_PROTOCOL *mAcpiTable = NULL;
+
+/**
+ Initialize the ASL update library state.
+ This must be called prior to invoking other library functions.
+
+ @retval EFI_SUCCESS - The function completed successfully.
+**/
+EFI_STATUS
+InitializeAslUpdateLib (
+ VOID
+ )
+{
+ EFI_STATUS Status;
+
+ ///
+ /// Locate ACPI tables
+ ///
+ Status = gBS->LocateProtocol (&gEfiAcpiSdtProtocolGuid, NULL, (VOID
+**) &mAcpiSdt);
+ ASSERT_EFI_ERROR (Status);
+ Status = gBS->LocateProtocol (&gEfiAcpiTableProtocolGuid, NULL, (VOID
+**) &mAcpiTable);
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+}
+
+/**
+ This function calculates and updates an UINT8 checksum.
+
+ @param Buffer Pointer to buffer to checksum
+ @param Size Number of bytes to checksum
+ @param ChecksumOffset Offset to place the checksum result in
+
+ @retval EFI_SUCCESS The function completed successfully.
+**/
+EFI_STATUS
+AcpiPlatformChecksum (
+ IN VOID *Buffer,
+ IN UINTN Size,
+ IN UINTN ChecksumOffset
+ )
+{
+ UINT8 Sum;
+ UINT8 *Ptr;
+
+ Sum = 0;
+ //
+ // Initialize pointer
+ //
+ Ptr = Buffer;
+
+ //
+ // set checksum to 0 first
+ //
+ Ptr[ChecksumOffset] = 0;
+
+ //
+ // add all content of buffer
+ //
+ while ((Size--) != 0) {
+ Sum = (UINT8) (Sum + (*Ptr++));
+ }
+ //
+ // set checksum
+ //
+ Ptr = Buffer;
+ Ptr[ChecksumOffset] = (UINT8) (0xff - Sum + 1);
+
+ return EFI_SUCCESS;
+}
+
+
+/**
+ This function uses the ACPI SDT protocol to locate an ACPI SSDT table.
+
+ @param[in] TableId - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
+ @param[in] TableIdSize - Length of the TableId to match. Table ID are 8 bytes long, this function
+ will consider it a match if the first TableIdSize bytes match
+ @param[in, out] Table - Updated with a pointer to the table
+ @param[in, out] Handle - AcpiSupport protocol table handle for the table found
+
+ @retval EFI_SUCCESS - The function completed successfully.
+ @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
+ @retval EFI_NOT_READY - Not ready to locate AcpiTable.
+**/
+EFI_STATUS
+LocateAcpiTableByOemTableId (
+ IN UINT8 *TableId,
+ IN UINT8 TableIdSize,
+ IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
+ IN OUT UINTN *Handle
+ )
+{
+ EFI_STATUS Status;
+ INTN Index;
+ EFI_ACPI_TABLE_VERSION Version;
+ EFI_ACPI_DESCRIPTION_HEADER *OrgTable;
+
+ if (mAcpiSdt == NULL) {
+ InitializeAslUpdateLib ();
+ if (mAcpiSdt == NULL) {
+ return EFI_NOT_READY;
+ }
+ }
+ ///
+ /// Locate table with matching ID
+ ///
+ Version = 0;
+ Index = 0;
+ do {
+ Status = mAcpiSdt->GetAcpiTable (Index, (EFI_ACPI_SDT_HEADER **)&OrgTable, &Version, Handle);
+ if (Status == EFI_NOT_FOUND) {
+ break;
+ }
+ ASSERT_EFI_ERROR (Status);
+ Index++;
+ } while (CompareMem (&(OrgTable->OemTableId), TableId, TableIdSize));
+
+ if (Status != EFI_NOT_FOUND) {
+ *Table = OrgTable;
+ ASSERT (*Table);
+ }
+
+ ///
+ /// If we found the table, there will be no error.
+ ///
+ return Status;
+}
+
+/**
+ This procedure will update immediate value assigned to a Name
+
+ @param[in] AslSignature - The signature of Operation Region that we want to update.
+ @param[in] Buffer - source of data to be written over original aml
+ @param[in] Length - length of data to be overwritten
+
+ @retval EFI_SUCCESS - The function completed successfully.
+ @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
+ @retval EFI_NOT_READY - Not ready to locate AcpiTable.
+**/
+EFI_STATUS
+EFIAPI
+UpdateNameAslCode (
+ IN UINT32 AslSignature,
+ IN VOID *Buffer,
+ IN UINTN Length
+ )
+{
+ EFI_STATUS Status;
+ EFI_ACPI_DESCRIPTION_HEADER *Table;
+ UINT8 *CurrPtr;
+ UINT8 *EndPtr;
+ UINT32 *Signature;
+ UINT8 *DsdtPointer;
+ UINTN Handle;
+ UINT8 DataSize;
+
+ if (mAcpiTable == NULL) {
+ InitializeAslUpdateLib ();
+ if (mAcpiTable == NULL) {
+ return EFI_NOT_READY;
+ }
+ }
+
+ ///
+ /// Locate table with matching ID
+ ///
+ Handle = 0;
+ Status = LocateAcpiTableBySignature (
+ EFI_ACPI_3_0_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE,
+ (EFI_ACPI_DESCRIPTION_HEADER **) &Table,
+ &Handle
+ );
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ ///
+ /// Point to the beginning of the DSDT table /// CurrPtr = (UINT8
+ *) Table; if (CurrPtr == NULL) {
+ return EFI_NOT_FOUND;
+ }
+
+ //
+ // EndPtr = beginning of table + length of table // EndPtr =
+ CurrPtr + ((EFI_ACPI_COMMON_HEADER *) CurrPtr)->Length;
+
+ ///
+ /// Loop through the ASL looking for values that we must fix up.
+ ///
+ for (DsdtPointer = CurrPtr; DsdtPointer < EndPtr; DsdtPointer++) {
+ ///
+ /// Get a pointer to compare for signature
+ ///
+ Signature = (UINT32 *) DsdtPointer;
+ ///
+ /// Check if this is the Device Object signature we are looking for
+ ///
+ if ((*Signature) == AslSignature) {
+ ///
+ /// Look for Name Encoding
+ ///
+ if (*(DsdtPointer-1) == AML_NAME_OP) {
+ ///
+ /// Check if size of new and old data is the same
+ ///
+ DataSize = *(DsdtPointer+4);
+ if ((Length == 1 && DataSize == 0xA) ||
+ (Length == 2 && DataSize == 0xB) ||
+ (Length == 4 && DataSize == 0xC)) {
+ CopyMem (DsdtPointer+5, Buffer, Length);
+ } else if (Length == 1 && ((*(UINT8*) Buffer) == 0 || (*(UINT8*) Buffer) == 1) && (DataSize == 0 || DataSize == 1)) {
+ CopyMem (DsdtPointer+4, Buffer, Length);
+ } else {
+ FreePool (Table);
+ return EFI_BAD_BUFFER_SIZE;
+ }
+ Status = mAcpiTable->UninstallAcpiTable (
+ mAcpiTable,
+ Handle
+ );
+ Handle = 0;
+ Status = mAcpiTable->InstallAcpiTable (
+ mAcpiTable,
+ Table,
+ Table->Length,
+ &Handle
+ );
+ FreePool (Table);
+ return Status;
+ }
+ }
+ }
+ return EFI_NOT_FOUND;
+}
+
+/**
+ This procedure will update immediate value assigned to a Name in SSDT
+table
+
+ @param[in] TableId - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
+ @param[in] TableIdSize - Length of the TableId to match. Table ID are 8 bytes long, this function
+ @param[in] AslSignature - The signature of Operation Region that we want to update.
+ @param[in] Buffer - source of data to be written over original aml
+ @param[in] Length - length of data to be overwritten
+
+ @retval EFI_SUCCESS - The function completed successfully.
+ @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
+ @retval EFI_NOT_READY - Not ready to locate AcpiTable.
+**/
+EFI_STATUS
+EFIAPI
+UpdateSsdtNameAslCode (
+ IN UINT8 *TableId,
+ IN UINT8 TableIdSize,
+ IN UINT32 AslSignature,
+ IN VOID *Buffer,
+ IN UINTN Length
+ )
+{
+ EFI_STATUS Status;
+ EFI_ACPI_DESCRIPTION_HEADER *Table;
+ UINT8 *CurrPtr;
+ UINT32 *Signature;
+ UINT8 *SsdtPointer;
+ UINTN Handle;
+ UINT8 DataSize;
+
+ if (mAcpiTable == NULL) {
+ InitializeAslUpdateLib ();
+ if (mAcpiTable == NULL) {
+ return EFI_NOT_READY;
+ }
+ }
+
+ ///
+ /// Locate table with matching ID
+ ///
+ Handle = 0;
+ Status = LocateAcpiTableByOemTableId (
+ TableId,
+ TableIdSize,
+ (EFI_ACPI_DESCRIPTION_HEADER **) &Table,
+ &Handle
+ );
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ ///
+ /// Point to the beginning of the DSDT table /// CurrPtr = (UINT8
+ *) Table; if (CurrPtr == NULL) {
+ return EFI_NOT_FOUND;
+ }
+
+ ///
+ /// Loop through the ASL looking for values that we must fix up.
+ ///
+ for (SsdtPointer = CurrPtr; SsdtPointer <= (CurrPtr + ((EFI_ACPI_COMMON_HEADER *) CurrPtr)->Length); SsdtPointer++) {
+ ///
+ /// Get a pointer to compare for signature
+ ///
+ Signature = (UINT32 *) SsdtPointer;
+ ///
+ /// Check if this is the Device Object signature we are looking for
+ ///
+ if ((*Signature) == AslSignature) {
+ ///
+ /// Look for Name Encoding
+ ///
+ if (*(SsdtPointer-1) == AML_NAME_OP) {
+ ///
+ /// Check if size of new and old data is the same
+ ///
+ DataSize = *(SsdtPointer+4);
+ if ((Length == 1 && DataSize == 0xA) ||
+ (Length == 2 && DataSize == 0xB) ||
+ (Length == 4 && DataSize == 0xC)) {
+ CopyMem (SsdtPointer+5, Buffer, Length);
+ } else if (Length == 1 && ((*(UINT8*) Buffer) == 0 || (*(UINT8*) Buffer) == 1) && (DataSize == 0 || DataSize == 1)) {
+ CopyMem (SsdtPointer+4, Buffer, Length);
+ } else {
+ return EFI_BAD_BUFFER_SIZE;
+ }
+ AcpiPlatformChecksum (
+ Table,
+ Table->Length,
+ OFFSET_OF (EFI_ACPI_DESCRIPTION_HEADER,
+ Checksum)
+ );
+ return Status;
+ }
+ }
+ }
+ return EFI_NOT_FOUND;
+}
+
+/**
+ This procedure will update the name of ASL Method
+
+ @param[in] AslSignature - The signature of Operation Region that we want to update.
+ @param[in] Buffer - source of data to be written over original aml
+ @param[in] Length - length of data to be overwritten
+
+ @retval EFI_SUCCESS - The function completed successfully.
+ @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
+ @retval EFI_NOT_READY - Not ready to locate AcpiTable.
+**/
+EFI_STATUS
+EFIAPI
+UpdateMethodAslCode (
+ IN UINT32 AslSignature,
+ IN VOID *Buffer,
+ IN UINTN Length
+ )
+{
+ EFI_STATUS Status;
+ EFI_ACPI_DESCRIPTION_HEADER *Table;
+ UINT8 *CurrPtr;
+ UINT32 *Signature;
+ UINT8 *DsdtPointer;
+ UINTN Handle;
+
+ if (mAcpiTable == NULL) {
+ InitializeAslUpdateLib ();
+ if (mAcpiTable == NULL) {
+ return EFI_NOT_READY;
+ }
+ }
+
+ ///
+ /// Locate table with matching ID
+ ///
+ Handle = 0;
+ Status = LocateAcpiTableBySignature (
+ EFI_ACPI_3_0_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE,
+ (EFI_ACPI_DESCRIPTION_HEADER **) &Table,
+ &Handle
+ );
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ ///
+ /// Point to the beginning of the DSDT table /// CurrPtr = (UINT8
+ *) Table; if (CurrPtr == NULL) {
+ return EFI_NOT_FOUND;
+ }
+
+ ///
+ /// Loop through the ASL looking for values that we must fix up.
+ ///
+ for (DsdtPointer = CurrPtr; DsdtPointer <= (CurrPtr + ((EFI_ACPI_COMMON_HEADER *) CurrPtr)->Length); DsdtPointer++) {
+ ///
+ /// Get a pointer to compare for signature
+ ///
+ Signature = (UINT32 *) DsdtPointer;
+ ///
+ /// Check if this is the Device Object signature we are looking for
+ ///
+ if ((*Signature) == AslSignature) {
+ ///
+ /// Look for Name Encoding
+ ///
+ if ((*(DsdtPointer-3) == AML_METHOD_OP)
+ || (*(DsdtPointer-2) == AML_METHOD_OP)
+ )
+ {
+ CopyMem (DsdtPointer, Buffer, Length);
+ Status = mAcpiTable->UninstallAcpiTable (
+ mAcpiTable,
+ Handle
+ );
+ Handle = 0;
+ Status = mAcpiTable->InstallAcpiTable (
+ mAcpiTable,
+ Table,
+ Table->Length,
+ &Handle
+ );
+ FreePool (Table);
+ return Status;
+ }
+ }
+ }
+ return EFI_NOT_FOUND;
+}
+
+/**
+ This function uses the ACPI SDT protocol to locate an ACPI table.
+ It is really only useful for finding tables that only have a single
+instance,
+ e.g. FADT, FACS, MADT, etc. It is not good for locating SSDT, etc.
+
+ @param[in] Signature - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
+ @param[in, out] Table - Updated with a pointer to the table
+ @param[in, out] Handle - AcpiSupport protocol table handle for the table found
+
+ @retval EFI_SUCCESS - The function completed successfully.
+ @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
+ @retval EFI_NOT_READY - Not ready to locate AcpiTable.
+**/
+EFI_STATUS
+EFIAPI
+LocateAcpiTableBySignature (
+ IN UINT32 Signature,
+ IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
+ IN OUT UINTN *Handle
+ )
+{
+ EFI_STATUS Status;
+ INTN Index;
+ EFI_ACPI_TABLE_VERSION Version;
+ EFI_ACPI_DESCRIPTION_HEADER *OrgTable;
+
+ if (mAcpiSdt == NULL) {
+ InitializeAslUpdateLib ();
+ if (mAcpiSdt == NULL) {
+ return EFI_NOT_READY;
+ }
+ }
+
+ ///
+ /// Locate table with matching ID
+ ///
+ Version = 0;
+ Index = 0;
+ do {
+ Status = mAcpiSdt->GetAcpiTable (Index, (EFI_ACPI_SDT_HEADER **)&OrgTable, &Version, Handle);
+ if (Status == EFI_NOT_FOUND) {
+ break;
+ }
+ ASSERT_EFI_ERROR (Status);
+ Index++;
+ } while (OrgTable->Signature != Signature);
+
+ if (Status != EFI_NOT_FOUND) {
+ *Table = AllocateCopyPool (OrgTable->Length, OrgTable);
+ ASSERT (*Table);
+ }
+
+ ///
+ /// If we found the table, there will be no error.
+ ///
+ return Status;
+}
diff --git a/Silicon/Intel/IntelSiliconPkg/Include/Library/AslUpdateLib.h b/Silicon/Intel/IntelSiliconPkg/Include/Library/AslUpdateLib.h
new file mode 100644
index 0000000000..cfe0fc9356
--- /dev/null
+++ b/Silicon/Intel/IntelSiliconPkg/Include/Library/AslUpdateLib.h
@@ -0,0 +1,116 @@
+/** @file
+ ASL dynamic update library definitions.
+
+ This library provides dynamic update to various ASL structures.
+ There may be different libraries for different environments (PEI, BS, RT, SMM).
+ Make sure you meet the requirements for the library (protocol
+ dependencies, use restrictions, etc).
+
+ Note that the current version of the library updates AML.
+
+ Copyright (c) 2020 Intel Corporation. All rights reserved. <BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef
+_ASL_UPDATE_LIB_H_ #define _ASL_UPDATE_LIB_H_
+
+//
+// Include files
+//
+#include <Uefi/UefiBaseType.h>
+#include <IndustryStandard/Acpi.h>
+#include <Protocol/AcpiTable.h>
+#include <Protocol/AcpiSystemDescriptionTable.h>
+
+
+/**
+ This procedure will update immediate value assigned to a Name
+
+ @param[in] AslSignature The signature of Operation Region that we want to update.
+ @param[in] Buffer source of data to be written over original aml
+ @param[in] Length length of data to be overwritten
+
+ @retval EFI_SUCCESS The function completed successfully.
+ @retval EFI_NOT_FOUND Failed to locate AcpiTable.
+ @retval EFI_NOT_READY Not ready to locate AcpiTable.
+ @retval EFI_UNSUPPORTED The function is not supported in this library.
+**/
+EFI_STATUS
+EFIAPI
+UpdateNameAslCode(
+ IN UINT32 AslSignature,
+ IN VOID *Buffer,
+ IN UINTN Length
+ );
+
+/**
+ This procedure will update the name of ASL Method
+
+ @param[in] TableId - Pointer to an ASCII string containing the OEM Table ID from the ACPI table header
+ @param[in] TableIdSize - Length of the TableId to match. Table ID are 8 bytes long, this function
+ @param[in] AslSignature - The signature of Operation Region that we want to update.
+ @param[in] Buffer - source of data to be written over original aml
+ @param[in] Length - length of data to be overwritten
+
+ @retval EFI_SUCCESS - The function completed successfully.
+ @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
+ @retval EFI_NOT_READY - Not ready to locate AcpiTable.
+ @retval EFI_UNSUPPORTED - The function is not supported in this library.
+**/
+EFI_STATUS
+EFIAPI
+UpdateSsdtNameAslCode (
+ IN UINT8 *TableId,
+ IN UINT8 TableIdSize,
+ IN UINT32 AslSignature,
+ IN VOID *Buffer,
+ IN UINTN Length
+ );
+
+/**
+ This procedure will update the name of ASL Method
+
+ @param[in] AslSignature - The signature of Operation Region that we want to update.
+ @param[in] Buffer - source of data to be written over original aml
+ @param[in] Length - length of data to be overwritten
+
+ @retval EFI_SUCCESS - The function completed successfully.
+ @retval EFI_NOT_FOUND - Failed to locate AcpiTable.
+ @retval EFI_NOT_READY - Not ready to locate AcpiTable.
+ @retval EFI_UNSUPPORTED - The function is not supported in this library.
+**/
+EFI_STATUS
+EFIAPI
+UpdateMethodAslCode (
+ IN UINT32 AslSignature,
+ IN VOID *Buffer,
+ IN UINTN Length
+ );
+
+/**
+ This function uses the ACPI support protocol to locate an ACPI table using the .
+ It is really only useful for finding tables that only have a single
+instance,
+ e.g. FADT, FACS, MADT, etc. It is not good for locating SSDT, etc.
+ Matches are determined by finding the table with ACPI table that has
+ a matching signature and version.
+
+ @param[in] Signature Pointer to an ASCII string containing the Signature to match
+ @param[in, out] Table Updated with a pointer to the table
+ @param[in, out] Handle AcpiSupport protocol table handle for the table found
+ @see AcpiSupport protocol for
+ details
+
+ @retval EFI_SUCCESS The function completed successfully.
+ @retval EFI_NOT_FOUND Failed to locate AcpiTable.
+ @retval EFI_NOT_READY Not ready to locate AcpiTable.
+ @retval EFI_UNSUPPORTED The function is not supported in this library.
+**/
+EFI_STATUS
+EFIAPI
+LocateAcpiTableBySignature (
+ IN UINT32 Signature,
+ IN OUT EFI_ACPI_DESCRIPTION_HEADER **Table,
+ IN OUT UINTN *Handle
+ );
+
+#endif
diff --git a/Silicon/Intel/IntelSiliconPkg/IntelSiliconPkg.dec b/Silicon/Intel/IntelSiliconPkg/IntelSiliconPkg.dec
index 7c43593382..e4a7fec3a3 100644
--- a/Silicon/Intel/IntelSiliconPkg/IntelSiliconPkg.dec
+++ b/Silicon/Intel/IntelSiliconPkg/IntelSiliconPkg.dec
@@ -38,6 +38,10 @@
#
ConfigBlockLib|Include/Library/ConfigBlockLib.h
+ ## @libraryclass Provides services to update AML in DXE #
+ AslUpdateLib|Include/Library/AslUpdateLib.h
+
[Guids]
## GUID for Package token space
# {A9F8D54E-1107-4F0A-ADD0-4587E7A4A735}
diff --git a/Silicon/Intel/IntelSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib.inf b/Silicon/Intel/IntelSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib.inf
new file mode 100644
index 0000000000..cefbe30628
--- /dev/null
+++ b/Silicon/Intel/IntelSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdate
+++ Lib.inf
@@ -0,0 +1,42 @@
+## @file
+# Provides services to update ASL tables.
+# Note that the current version of the library updates AML.
+#
+# Copyright (c) 2020, Intel Corporation. All rights reserved.<BR> # #
+SPDX-License-Identifier: BSD-2-Clause-Patent # ##
+
+
+
+[Defines]
+INF_VERSION = 0x00010017
+BASE_NAME = DxeAslUpdateLib
+FILE_GUID = 8621697D-4E3A-4bf2-ADB0-3E2FF06559CA
+VERSION_STRING = 1.0
+MODULE_TYPE = DXE_DRIVER
+LIBRARY_CLASS = AslUpdateLib
+
+
+[LibraryClasses]
+BaseLib
+IoLib
+DebugLib
+PcdLib
+BaseMemoryLib
+UefiLib
+MemoryAllocationLib
+
+
+[Packages]
+MdePkg/MdePkg.dec
+IntelSiliconPkg/IntelSiliconPkg.dec
+
+[Sources]
+DxeAslUpdateLib.c
+
+
+[Protocols]
+gEfiAcpiTableProtocolGuid ## CONSUMES
+gEfiAcpiSdtProtocolGuid ## CONSUMES
--
2.16.2.windows.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* Re: [edk2-platforms:PATCH v4 0/7] IntelSiliconPkg DxeAslUpdateLib support
2020-04-29 2:31 [edk2-platforms:PATCH v4 0/7] IntelSiliconPkg DxeAslUpdateLib support Miki Shindo
` (6 preceding siblings ...)
2020-04-29 2:32 ` [edk2-platforms:PATCH v4 7/7] IntelSiliconPkg/DxeAslUpdateLib: Add DxeAslUpdateLib support Miki Shindo
@ 2020-04-30 8:14 ` Ni, Ray
7 siblings, 0 replies; 23+ messages in thread
From: Ni, Ray @ 2020-04-30 8:14 UTC (permalink / raw)
To: Shindo, Miki, devel@edk2.groups.io
Cc: Chaganty, Rangasai V, Chiu, Chasel, Desimone, Nathaniel L,
Agyeman, Prince
Reviewed-by: Ray Ni <ray.ni@intel.com>
> -----Original Message-----
> From: Shindo, Miki <miki.shindo@intel.com>
> Sent: Wednesday, April 29, 2020 10:32 AM
> To: devel@edk2.groups.io
> Cc: Chaganty, Rangasai V <rangasai.v.chaganty@intel.com>; Chiu, Chasel <chasel.chiu@intel.com>; Desimone, Nathaniel L
> <nathaniel.l.desimone@intel.com>; Agyeman, Prince <prince.agyeman@intel.com>; Ni, Ray <ray.ni@intel.com>
> Subject: [edk2-platforms:PATCH v4 0/7] IntelSiliconPkg DxeAslUpdateLib support
>
> Patch 7/7 of this series adds DxeAslUpdateLib support in IntelSiliconPkg
> so each project can consume it.
> As the existing DxeAslUpdateLib in SiliconPkg have different header files,
> this series of patches resolve the inconsistency and avoid build failure.
> Also some of unreferenced contents are cleaned up.
>
>
> Signed-off-by: Miki Shindo <miki.shindo@intel.com>
> Cc: Sai Chaganty <rangasai.v.chaganty@intel.com>
> Cc: Chasel Chiu <chasel.chiu@intel.com>
> Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
> Cc: Prince Agyeman <prince.agyeman@intel.com>
> Cc: Ray Ni <ray.ni@intel.com>
> Acked-by: Chasel Chiu <chasel.chiu@intel.com>
> Acked-by: Nate DeSimone <nathaniel.l.desimone@intel.com>
>
>
> Miki Shindo (7):
> WhiskeylakeOpenBoardPkg/TbtDxe: Removes redundant
> InitializeAslUpdateLib
> KabylakeOpenBoardPkg/TbtDxe: Removes redundant InitializeAslUpdateLib
> CometlakeOpenBoardPkg/TbtDxe: Removes redundant InitializeAslUpdateLib
> MinPlatformPkg/DxeAslUpdateLib: Cleans up APIs
> KabylakeSiliconPkg/DxeAslUpdateLib: Cleans up APIs
> CoffeelakeSiliconPkg/DxeAslUpdateLib: Cleans up APIs
> IntelSiliconPkg/DxeAslUpdateLib: Add DxeAslUpdateLib support
>
> Platform/Intel/CometlakeOpenBoardPkg/Features/Tbt/TbtInit/Dxe/TbtDxe.c | 3 ---
> Platform/Intel/KabylakeOpenBoardPkg/Features/Tbt/TbtInit/Dxe/TbtDxe.c | 5 +----
> Platform/Intel/MinPlatformPkg/Acpi/Library/DxeAslUpdateLib/DxeAslUpdateLib.c | 209
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++------------------------------------------------------------------------------------------------------
> Platform/Intel/WhiskeylakeOpenBoardPkg/Features/Tbt/TbtInit/Dxe/TbtDxe.c | 5 +----
> Silicon/Intel/CoffeelakeSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib.c | 190
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------
> -----------------------------------------------------------------------------
> Silicon/Intel/CoffeelakeSiliconPkg/Library/DxeAslUpdateLibNull/DxeAslUpdateLibNull.c | 94
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------
> Silicon/Intel/CoffeelakeSiliconPkg/Pch/PchInit/Dxe/PchAcpi.c | 3 ---
> Silicon/Intel/IntelSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib.c | 518
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++
> Silicon/Intel/KabylakeSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib.c | 207
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++------------------------------------------------------------------------------------------------------
> Silicon/Intel/KabylakeSiliconPkg/Library/DxeAslUpdateLibNull/DxeAslUpdateLibNull.c | 94
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----------------------------------
> Silicon/Intel/KabylakeSiliconPkg/Pch/PchInit/Dxe/PchAcpi.c | 5 +----
> Platform/Intel/MinPlatformPkg/Include/Library/AslUpdateLib.h | 131
> ++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------------------------------------------
> Silicon/Intel/CoffeelakeSiliconPkg/Include/Library/AslUpdateLib.h | 114
> +++++++++++++++++++++++++++++++++++-------------------------------------------------------------------------------
> Silicon/Intel/IntelSiliconPkg/Include/Library/AslUpdateLib.h | 116
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++++
> Silicon/Intel/IntelSiliconPkg/IntelSiliconPkg.dec | 4 ++++
> Silicon/Intel/IntelSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib.inf | 42
> ++++++++++++++++++++++++++++++++++++++++++
> Silicon/Intel/KabylakeSiliconPkg/Include/Library/AslUpdateLib.h | 130
> ++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------
> 17 files changed, 1238 insertions(+), 632 deletions(-)
> create mode 100644 Silicon/Intel/IntelSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib.c
> create mode 100644 Silicon/Intel/IntelSiliconPkg/Include/Library/AslUpdateLib.h
> create mode 100644 Silicon/Intel/IntelSiliconPkg/Library/DxeAslUpdateLib/DxeAslUpdateLib.inf
>
> --
> 2.16.2.windows.1
^ permalink raw reply [flat|nested] 23+ messages in thread
end of thread, other threads:[~2020-04-30 8:14 UTC | newest]
Thread overview: 23+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-04-29 2:31 [edk2-platforms:PATCH v4 0/7] IntelSiliconPkg DxeAslUpdateLib support Miki Shindo
2020-04-29 2:31 ` [edk2-platforms:PATCH v4 1/7] WhiskeylakeOpenBoardPkg/TbtDxe: Removes redundant InitializeAslUpdateLib Miki Shindo
2020-04-30 1:40 ` Chaganty, Rangasai V
2020-04-30 2:54 ` Chiu, Chasel
2020-04-29 2:31 ` [edk2-platforms:PATCH v4 2/7] KabylakeOpenBoardPkg/TbtDxe: " Miki Shindo
2020-04-30 1:47 ` Chaganty, Rangasai V
2020-04-30 2:55 ` Chiu, Chasel
2020-04-29 2:31 ` [edk2-platforms:PATCH v4 3/7] CometlakeOpenBoardPkg/TbtDxe: " Miki Shindo
2020-04-30 1:53 ` Chaganty, Rangasai V
2020-04-30 2:55 ` Chiu, Chasel
2020-04-29 2:32 ` [edk2-platforms:PATCH v4 4/7] MinPlatformPkg/DxeAslUpdateLib: Cleans up APIs Miki Shindo
2020-04-30 2:56 ` Chiu, Chasel
2020-04-30 5:00 ` Chaganty, Rangasai V
2020-04-29 2:32 ` [edk2-platforms:PATCH v4 5/7] KabylakeSiliconPkg/DxeAslUpdateLib: " Miki Shindo
2020-04-30 2:56 ` Chiu, Chasel
2020-04-30 5:02 ` Chaganty, Rangasai V
2020-04-29 2:32 ` [edk2-platforms:PATCH v4 6/7] CoffeelakeSiliconPkg/DxeAslUpdateLib: " Miki Shindo
2020-04-30 2:57 ` Chiu, Chasel
2020-04-30 5:03 ` Chaganty, Rangasai V
2020-04-29 2:32 ` [edk2-platforms:PATCH v4 7/7] IntelSiliconPkg/DxeAslUpdateLib: Add DxeAslUpdateLib support Miki Shindo
2020-04-30 2:57 ` Chiu, Chasel
2020-04-30 5:13 ` Chaganty, Rangasai V
2020-04-30 8:14 ` [edk2-platforms:PATCH v4 0/7] IntelSiliconPkg " Ni, Ray
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox