Hi Pierre,

Thank you for this patch.

Reviewed-by: Sami Mujawar <[email protected]>

Regards,

Sami Mujawar

On 07/10/2021 04:31 PM, [email protected] wrote:
From: Pierre Gondois <[email protected]>

Add AmlRdSetEndTagChecksum(), setting the CheckSum value contained in a
Resource Data element.

ACPI 6.4, s6.4.2.9 "End Tag":
"This checksum is generated such that adding it to the sum of all the
data bytes will produce a zero sum."
"If the checksum field is zero, the resource data is treated as if the
checksum operation succeeded. Configuration proceeds normally."

Signed-off-by: Pierre Gondois <[email protected]>
---
  .../AmlLib/ResourceData/AmlResourceData.c     | 33 +++++++++++++++++++
  .../AmlLib/ResourceData/AmlResourceData.h     | 21 ++++++++++++
  2 files changed, 54 insertions(+)

diff --git 
a/DynamicTablesPkg/Library/Common/AmlLib/ResourceData/AmlResourceData.c 
b/DynamicTablesPkg/Library/Common/AmlLib/ResourceData/AmlResourceData.c
index 8b46c7232df3..41cf0bc45314 100644
--- a/DynamicTablesPkg/Library/Common/AmlLib/ResourceData/AmlResourceData.c
+++ b/DynamicTablesPkg/Library/Common/AmlLib/ResourceData/AmlResourceData.c
@@ -101,3 +101,36 @@ AmlRdGetSize (
    return ((ACPI_SMALL_RESOURCE_HEADER*)Header)->Bits.Length +
             sizeof (ACPI_SMALL_RESOURCE_HEADER);
  }
+
+/** Set the Checksum of an EndTag resource data.
+
+  ACPI 6.4, s6.4.2.9 "End Tag":
+  "This checksum is generated such that adding it to the sum of all the data
+  bytes will produce a zero sum."
+  "If the checksum field is zero, the resource data is treated as if the
+  checksum operation succeeded. Configuration proceeds normally."
+
+  @param  [in]  Header     Pointer to the first byte of a resource data.
+  @param  [in]  CheckSum   Checksum value to set.
+
+  @retval EFI_SUCCESS             The function completed successfully.
+  @retval EFI_INVALID_PARAMETER   Invalid parameter.
+**/
+EFI_STATUS
+EFIAPI
+AmlRdSetEndTagChecksum (
+  IN  CONST AML_RD_HEADER   * Header,
+  IN        UINT8             CheckSum
+  )
+{
+  if ((Header == NULL)  ||
+      !AmlRdCompareDescId (
+        Header,
+        AML_RD_BUILD_SMALL_DESC_ID (ACPI_SMALL_END_TAG_DESCRIPTOR_NAME))) {
+    ASSERT (0);
+    return EFI_INVALID_PARAMETER;
+  }
+
+  ((EFI_ACPI_END_TAG_DESCRIPTOR*)Header)->Checksum = CheckSum;
+  return EFI_SUCCESS;
+}
diff --git 
a/DynamicTablesPkg/Library/Common/AmlLib/ResourceData/AmlResourceData.h 
b/DynamicTablesPkg/Library/Common/AmlLib/ResourceData/AmlResourceData.h
index 48e4e2aaddb4..e478107dffbd 100644
--- a/DynamicTablesPkg/Library/Common/AmlLib/ResourceData/AmlResourceData.h
+++ b/DynamicTablesPkg/Library/Common/AmlLib/ResourceData/AmlResourceData.h
@@ -171,4 +171,25 @@ AmlRdGetSize (
    IN  CONST AML_RD_HEADER   * Header
    );

+/** Set the Checksum of an EndTag resource data.
+
+  ACPI 6.4, s6.4.2.9 "End Tag":
+  "This checksum is generated such that adding it to the sum of all the data
+  bytes will produce a zero sum."
+  "If the checksum field is zero, the resource data is treated as if the
+  checksum operation succeeded. Configuration proceeds normally."
+
+  @param  [in]  Header     Pointer to the first byte of a resource data.
+  @param  [in]  CheckSum   Checksum value to set.
+
+  @retval EFI_SUCCESS             The function completed successfully.
+  @retval EFI_INVALID_PARAMETER   Invalid parameter.
+**/
+EFI_STATUS
+EFIAPI
+AmlRdSetEndTagChecksum (
+  IN  CONST AML_RD_HEADER   * Header,
+  IN        UINT8             CheckSum
+  );
+
  #endif // AML_RESOURCE_DATA_H_

IMPORTANT NOTICE: The contents of this email and any attachments are 
confidential and may also be privileged. If you are not the intended recipient, 
please notify the sender immediately and do not disclose the contents to any 
other person, use it for any purpose, or store or copy the information in any 
medium. Thank you.


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#81676): https://edk2.groups.io/g/devel/message/81676
Mute This Topic: https://groups.io/mt/86148199/21656
Group Owner: [email protected]
Unsubscribe: https://edk2.groups.io/g/devel/unsub [[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to