]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EmbeddedPkg/Include/Library/AcpiLib.h
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / EmbeddedPkg / Include / Library / AcpiLib.h
index 42710fd1fd62f477c560b98922ceae59c4ccccaa..29137a4a53df4a958c3afb08efa31555a910d032 100644 (file)
@@ -1,15 +1,10 @@
 /** @file\r
   Helper Library for ACPI\r
 \r
-  Copyright (c) 2014-2015, ARM Ltd. All rights reserved.\r
+  Copyright (c) 2014-2016, ARM Ltd. All rights reserved.\r
+  Copyright (c) 2021, Ampere Computing LLC. All rights reserved.\r
 \r
-  This program and the accompanying materials\r
-  are licensed and made available under the terms and conditions of the BSD License\r
-  which accompanies this distribution.  The full text of the license may be found at\r
-  http://opensource.org/licenses/bsd-license.php\r
-\r
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+  SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
 **/\r
 \r
 #include <Uefi.h>\r
 \r
 #include <IndustryStandard/Acpi10.h>\r
+#include <Protocol/AcpiSystemDescriptionTable.h>\r
 \r
 //\r
 // Macros for the Generic Address Space\r
 //\r
-#define NULL_GAS               { EFI_ACPI_5_0_SYSTEM_MEMORY,  0, 0, EFI_ACPI_5_0_UNDEFINED, 0L }\r
-#define ARM_GAS8(Address)      { EFI_ACPI_5_0_SYSTEM_MEMORY,  8, 0, EFI_ACPI_5_0_BYTE,      Address }\r
-#define ARM_GAS16(Address)     { EFI_ACPI_5_0_SYSTEM_MEMORY, 16, 0, EFI_ACPI_5_0_WORD,      Address }\r
-#define ARM_GAS32(Address)     { EFI_ACPI_5_0_SYSTEM_MEMORY, 32, 0, EFI_ACPI_5_0_DWORD,     Address }\r
-#define ARM_GASN(Address)      { EFI_ACPI_5_0_SYSTEM_MEMORY,  0, 0, EFI_ACPI_5_0_DWORD,     Address }\r
+#define NULL_GAS  { EFI_ACPI_5_0_SYSTEM_MEMORY,  0, 0, EFI_ACPI_5_0_UNDEFINED, 0L }\r
+#define ARM_GAS8(Address)   { EFI_ACPI_5_0_SYSTEM_MEMORY,  8, 0, EFI_ACPI_5_0_BYTE,      Address }\r
+#define ARM_GAS16(Address)  { EFI_ACPI_5_0_SYSTEM_MEMORY, 16, 0, EFI_ACPI_5_0_WORD,      Address }\r
+#define ARM_GAS32(Address)  { EFI_ACPI_5_0_SYSTEM_MEMORY, 32, 0, EFI_ACPI_5_0_DWORD,     Address }\r
+#define ARM_GASN(Address)   { EFI_ACPI_5_0_SYSTEM_MEMORY,  0, 0, EFI_ACPI_5_0_DWORD,     Address }\r
 \r
 //\r
 // Macros for the Multiple APIC Description Table (MADT)\r
     GicDistHwId, GicDistBase, GicDistVector, EFI_ACPI_RESERVED_DWORD \\r
   }\r
 \r
+#define EFI_ACPI_6_0_GIC_DISTRIBUTOR_INIT(GicDistHwId, GicDistBase, GicDistVector, GicVersion) \\r
+  { \\r
+    EFI_ACPI_6_0_GICD, sizeof (EFI_ACPI_6_0_GIC_DISTRIBUTOR_STRUCTURE), EFI_ACPI_RESERVED_WORD, \\r
+    GicDistHwId, GicDistBase, GicDistVector, GicVersion, \\r
+    {EFI_ACPI_RESERVED_BYTE, EFI_ACPI_RESERVED_BYTE, EFI_ACPI_RESERVED_BYTE} \\r
+  }\r
+\r
 // Note the parking protocol is configured by UEFI if required\r
 #define EFI_ACPI_5_0_GIC_STRUCTURE_INIT(GicId, AcpiCpuId, Flags, PmuIrq, GicBase) \\r
   { \\r
 \r
 // Note the parking protocol is configured by UEFI if required\r
 #define EFI_ACPI_5_1_GICC_STRUCTURE_INIT(GicId, AcpiCpuUid, Mpidr, Flags, PmuIrq,    \\r
-    GicBase, GicVBase, GicHBase, GsivId, GicRBase)                                   \\r
+                                         GicBase, GicVBase, GicHBase, GsivId, GicRBase)                                   \\r
   {                                                                                  \\r
     EFI_ACPI_5_1_GIC, sizeof (EFI_ACPI_5_1_GIC_STRUCTURE), EFI_ACPI_RESERVED_WORD,   \\r
     GicId, AcpiCpuUid, Flags, 0, PmuIrq, 0, GicBase, GicVBase, GicHBase,             \\r
     GsivId, GicRBase, Mpidr                                                          \\r
   }\r
 \r
+#define EFI_ACPI_6_0_GICC_STRUCTURE_INIT(GicId, AcpiCpuUid, Mpidr, Flags, PmuIrq,    \\r
+                                         GicBase, GicVBase, GicHBase, GsivId, GicRBase, Efficiency)                       \\r
+  {                                                                                  \\r
+    EFI_ACPI_6_0_GIC, sizeof (EFI_ACPI_6_0_GIC_STRUCTURE), EFI_ACPI_RESERVED_WORD,   \\r
+    GicId, AcpiCpuUid, Flags, 0, PmuIrq, 0, GicBase, GicVBase, GicHBase,             \\r
+    GsivId, GicRBase, Mpidr, Efficiency,                                             \\r
+    {EFI_ACPI_RESERVED_BYTE, EFI_ACPI_RESERVED_BYTE, EFI_ACPI_RESERVED_BYTE}         \\r
+  }\r
+\r
+#define EFI_ACPI_6_3_GICC_STRUCTURE_INIT(GicId, AcpiCpuUid, Mpidr, Flags, PmuIrq,    \\r
+                                         GicBase, GicVBase, GicHBase, GsivId, GicRBase, Efficiency, SpeOvflIrq)           \\r
+  {                                                                                  \\r
+    EFI_ACPI_6_0_GIC, sizeof (EFI_ACPI_6_3_GIC_STRUCTURE), EFI_ACPI_RESERVED_WORD,   \\r
+    GicId, AcpiCpuUid, Flags, 0, PmuIrq, 0, GicBase, GicVBase, GicHBase,             \\r
+    GsivId, GicRBase, Mpidr, Efficiency, EFI_ACPI_RESERVED_BYTE, SpeOvflIrq          \\r
+  }\r
+\r
 #define EFI_ACPI_6_0_GIC_MSI_FRAME_INIT(GicMsiFrameId, PhysicalBaseAddress, Flags, SPICount, SPIBase) \\r
   { \\r
     EFI_ACPI_6_0_GIC_MSI_FRAME, sizeof (EFI_ACPI_6_0_GIC_MSI_FRAME_STRUCTURE), EFI_ACPI_RESERVED_WORD, \\r
 // SBSA Generic Watchdog\r
 //\r
 #define EFI_ACPI_5_1_SBSA_GENERIC_WATCHDOG_STRUCTURE_INIT(RefreshFramePhysicalAddress,                  \\r
-    ControlFramePhysicalAddress, WatchdogTimerGSIV, WatchdogTimerFlags)                                 \\r
+                                                          ControlFramePhysicalAddress, WatchdogTimerGSIV, WatchdogTimerFlags)                                 \\r
   {                                                                                                     \\r
     EFI_ACPI_5_1_GTDT_SBSA_GENERIC_WATCHDOG, sizeof(EFI_ACPI_5_1_GTDT_SBSA_GENERIC_WATCHDOG_STRUCTURE), \\r
-    EFI_ACPI_RESERVED_WORD, RefreshFramePhysicalAddress, ControlFramePhysicalAddress,                   \\r
+    EFI_ACPI_RESERVED_BYTE, RefreshFramePhysicalAddress, ControlFramePhysicalAddress,                   \\r
     WatchdogTimerGSIV, WatchdogTimerFlags                                                               \\r
   }\r
 \r
 typedef\r
 BOOLEAN\r
-(EFIAPI *EFI_LOCATE_ACPI_CHECK) (\r
+(EFIAPI *EFI_LOCATE_ACPI_CHECK)(\r
   IN  EFI_ACPI_DESCRIPTION_HEADER *AcpiHeader\r
   );\r
 \r
@@ -91,7 +111,7 @@ BOOLEAN
 **/\r
 EFI_STATUS\r
 LocateAndInstallAcpiFromFvConditional (\r
-  IN CONST EFI_GUID*        AcpiFile,\r
+  IN CONST EFI_GUID         *AcpiFile,\r
   IN EFI_LOCATE_ACPI_CHECK  CheckAcpiTableFunction\r
   );\r
 \r
@@ -107,7 +127,76 @@ LocateAndInstallAcpiFromFvConditional (
 **/\r
 EFI_STATUS\r
 LocateAndInstallAcpiFromFv (\r
-  IN CONST EFI_GUID* AcpiFile\r
+  IN CONST EFI_GUID  *AcpiFile\r
+  );\r
+\r
+/**\r
+  This function calculates and updates a UINT8 checksum\r
+  in an ACPI description table header.\r
+\r
+  @param  Buffer          Pointer to buffer to checksum\r
+  @param  Size            Number of bytes to checksum\r
+\r
+  @retval EFI_SUCCESS             The function completed successfully.\r
+  @retval EFI_INVALID_PARAMETER   Invalid parameter.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+AcpiUpdateChecksum (\r
+  IN OUT  UINT8  *Buffer,\r
+  IN      UINTN  Size\r
+  );\r
+\r
+/**\r
+  This function uses the ACPI SDT protocol to search an ACPI table\r
+  with a given signature.\r
+\r
+  @param  AcpiTableSdtProtocol    Pointer to ACPI SDT protocol.\r
+  @param  TableSignature          ACPI table signature.\r
+  @param  Index                   The zero-based index of the table where to search the table.\r
+                                  The index will be updated to the next instance if the table\r
+                                  is found with the matched TableSignature.\r
+  @param  Table                   Pointer to the table.\r
+  @param  TableKey                Pointer to the table key.\r
+\r
+  @return EFI_SUCCESS             The function completed successfully.\r
+  @return EFI_INVALID_PARAMETER   At least one of parameters is invalid.\r
+  @retval EFI_NOT_FOUND           The requested index is too large and a table was not found.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+AcpiLocateTableBySignature (\r
+  IN      EFI_ACPI_SDT_PROTOCOL        *AcpiSdtProtocol,\r
+  IN      UINT32                       TableSignature,\r
+  IN OUT  UINTN                        *Index,\r
+  OUT     EFI_ACPI_DESCRIPTION_HEADER  **Table,\r
+  OUT     UINTN                        *TableKey\r
+  );\r
+\r
+/**\r
+  This function updates the integer value of an AML Object.\r
+\r
+  @param  AcpiTableSdtProtocol    Pointer to ACPI SDT protocol.\r
+  @param  TableHandle             Points to the table representing the starting point\r
+                                  for the object path search.\r
+  @param  AsciiObjectPath         Pointer to the ACPI path of the object being updated.\r
+  @param  Value                   New value to write to the object.\r
+\r
+  @return EFI_SUCCESS             The function completed successfully.\r
+  @return EFI_INVALID_PARAMETER   At least one of parameters is invalid or the data type\r
+                                  of the ACPI object is not an integer value.\r
+  @retval EFI_NOT_FOUND           The object is not found with the given path.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+AcpiAmlObjectUpdateInteger (\r
+  IN  EFI_ACPI_SDT_PROTOCOL  *AcpiSdtProtocol,\r
+  IN  EFI_ACPI_HANDLE        TableHandle,\r
+  IN  CHAR8                  *AsciiObjectPath,\r
+  IN  UINTN                  Value\r
   );\r
 \r
 #endif // __ACPI_LIB_H__\r