]> git.proxmox.com Git - mirror_edk2.git/commitdiff
DynamicTablesPkg: Add AmlRdSetEndTagChecksum()
authorPierre Gondois <Pierre.Gondois@arm.com>
Fri, 8 Oct 2021 14:46:15 +0000 (15:46 +0100)
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Fri, 8 Oct 2021 15:39:42 +0000 (15:39 +0000)
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."

Reviewed-by: Sami Mujawar <sami.mujawar@arm.com>
Signed-off-by: Pierre Gondois <Pierre.Gondois@arm.com>
DynamicTablesPkg/Library/Common/AmlLib/ResourceData/AmlResourceData.c
DynamicTablesPkg/Library/Common/AmlLib/ResourceData/AmlResourceData.h

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