]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ArmPlatformPkg/ArmJunoPkg/AcpiTables/Gtdt.aslc
ArmPlatformPkg/ArmJunoPkg: Added the ACPI 5.0 Tables
[mirror_edk2.git] / ArmPlatformPkg / ArmJunoPkg / AcpiTables / Gtdt.aslc
diff --git a/ArmPlatformPkg/ArmJunoPkg/AcpiTables/Gtdt.aslc b/ArmPlatformPkg/ArmJunoPkg/AcpiTables/Gtdt.aslc
new file mode 100644 (file)
index 0000000..ac74fbc
--- /dev/null
@@ -0,0 +1,70 @@
+/** @file\r
+*  Generic Timer Description Table (GTDT)\r
+*\r
+*  Copyright (c) 2012 - 2014, ARM Limited. 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
+*\r
+**/\r
+\r
+#include "ArmPlatform.h"\r
+#include <Library/AcpiLib.h>\r
+#include <Library/PcdLib.h>\r
+#include <IndustryStandard/Acpi.h>\r
+\r
+#define GTDT_GLOBAL_FLAGS_MAPPED      EFI_ACPI_5_0_GTDT_GLOBAL_FLAG_MEMORY_MAPPED_BLOCK_PRESENT\r
+#define GTDT_GLOBAL_FLAGS_NOT_MAPPED  0\r
+#define GTDT_GLOBAL_FLAGS_EDGE        EFI_ACPI_5_0_GTDT_GLOBAL_FLAG_INTERRUPT_MODE\r
+#define GTDT_GLOBAL_FLAGS_LEVEL       0\r
+\r
+// Note: We could have a build flag that switches between memory mapped/non-memory mapped timer\r
+#ifdef SYSTEM_TIMER_BASE_ADDRESS\r
+  #define GTDT_GLOBAL_FLAGS             (GTDT_GLOBAL_FLAGS_MAPPED | GTDT_GLOBAL_FLAGS_LEVEL)\r
+#else\r
+  #define GTDT_GLOBAL_FLAGS             (GTDT_GLOBAL_FLAGS_NOT_MAPPED | GTDT_GLOBAL_FLAGS_LEVEL)\r
+  #define SYSTEM_TIMER_BASE_ADDRESS     0\r
+#endif\r
+\r
+#define GTDT_TIMER_EDGE_TRIGGERED   (1 << EFI_ACPI_5_0_GTDT_TIMER_FLAG_TIMER_INTERRUPT_MODE)\r
+#define GTDT_TIMER_LEVEL_TRIGGERED  (0 << EFI_ACPI_5_0_GTDT_TIMER_FLAG_TIMER_INTERRUPT_MODE)\r
+#define GTDT_TIMER_ACTIVE_LOW       (1 << EFI_ACPI_5_0_GTDT_TIMER_FLAG_TIMER_INTERRUPT_POLARITY)\r
+#define GTDT_TIMER_ACTIVE_HIGH      (0 << EFI_ACPI_5_0_GTDT_TIMER_FLAG_TIMER_INTERRUPT_POLARITY)\r
+\r
+#define GTDT_GTIMER_FLAGS           (GTDT_TIMER_ACTIVE_LOW | GTDT_TIMER_LEVEL_TRIGGERED)\r
+\r
+EFI_ACPI_5_0_GENERIC_TIMER_DESCRIPTION_TABLE Gtdt = {\r
+    ARM_ACPI_HEADER(\r
+      EFI_ACPI_5_0_GENERIC_TIMER_DESCRIPTION_TABLE_SIGNATURE,\r
+      EFI_ACPI_5_0_GENERIC_TIMER_DESCRIPTION_TABLE,\r
+      EFI_ACPI_5_0_GENERIC_TIMER_DESCRIPTION_TABLE_REVISION\r
+    ),\r
+  SYSTEM_TIMER_BASE_ADDRESS,                    // UINT64  PhysicalAddress\r
+  GTDT_GLOBAL_FLAGS,                            // UINT32  GlobalFlags\r
+  FixedPcdGet32 (PcdArmArchTimerSecIntrNum),    // UINT32  SecurePL1TimerGSIV\r
+  GTDT_GTIMER_FLAGS,                            // UINT32  SecurePL1TimerFlags\r
+  FixedPcdGet32 (PcdArmArchTimerIntrNum),       // UINT32  NonSecurePL1TimerGSIV\r
+  GTDT_GTIMER_FLAGS,                            // UINT32  NonSecurePL1TimerFlags\r
+  FixedPcdGet32 (PcdArmArchTimerVirtIntrNum),   // UINT32  VirtualTimerGSIV\r
+  GTDT_GTIMER_FLAGS,                            // UINT32  VirtualTimerFlags\r
+  FixedPcdGet32 (PcdArmArchTimerHypIntrNum),    // UINT32  NonSecurePL2TimerGSIV\r
+  GTDT_GTIMER_FLAGS                             // UINT32  NonSecurePL2TimerFlags\r
+};\r
+\r
+\r
+VOID*\r
+ReferenceAcpiTable (\r
+  VOID\r
+  )\r
+{\r
+  //\r
+  // Reference the table being generated to prevent the optimizer from removing the\r
+  // data structure from the exeutable\r
+  //\r
+  return (VOID*)&Gtdt;\r
+}\r