From aa65bb4020e7732bd59591c5d7d3121ee4cf71eb Mon Sep 17 00:00:00 2001 From: Jeff Brasen Date: Fri, 4 Nov 2022 10:04:47 -0600 Subject: MdePkg/IndustryStandard: add definitions for ACPI APMT This adds #defines and struct typedefs for the various node types in the ACPI Arm Performance Monitoring Unit (APMT) table. Signed-off-by: Jeff Brasen Reviewed-by: Zhichao Gao Reviewed-by: Liming Gao Reviewed-by: Sami Mujawar --- MdePkg/Include/IndustryStandard/Acpi64.h | 5 ++ .../ArmPerformanceMonitoringUnitTable.h | 69 ++++++++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100644 MdePkg/Include/IndustryStandard/ArmPerformanceMonitoringUnitTable.h (limited to 'MdePkg/Include') diff --git a/MdePkg/Include/IndustryStandard/Acpi64.h b/MdePkg/Include/IndustryStandard/Acpi64.h index fe5ebfac2b..575ca0430c 100644 --- a/MdePkg/Include/IndustryStandard/Acpi64.h +++ b/MdePkg/Include/IndustryStandard/Acpi64.h @@ -2847,6 +2847,11 @@ typedef struct { /// #define EFI_ACPI_6_4_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE SIGNATURE_32('A', 'P', 'I', 'C') +/// +/// "APMT" Arm Performance Monitoring Unit Table +/// +#define EFI_ACPI_6_4_ARM_PERFORMANCE_MONITORING_UNIT_TABLE_SIGNATURE SIGNATURE_32('A', 'P', 'M', 'T') + /// /// "BERT" Boot Error Record Table /// diff --git a/MdePkg/Include/IndustryStandard/ArmPerformanceMonitoringUnitTable.h b/MdePkg/Include/IndustryStandard/ArmPerformanceMonitoringUnitTable.h new file mode 100644 index 0000000000..fe7084cffd --- /dev/null +++ b/MdePkg/Include/IndustryStandard/ArmPerformanceMonitoringUnitTable.h @@ -0,0 +1,69 @@ +/** @file + ACPI Arm Performance Monitoring Unit (APMT) table + as specified in ARM spec DEN0117 + + Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved. + Copyright (c) 2022, ARM Limited. All rights reserved. + SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +#ifndef ARM_PERFORMANCE_MONITORING_UNIT_TABLE_H_ +#define ARM_PERFORMANCE_MONITORING_UNIT_TABLE_H_ + +#include + +#pragma pack(1) + +/// +/// Arm Performance Monitoring Unit (APMT) tabl +/// +typedef struct { + EFI_ACPI_DESCRIPTION_HEADER Header; +} EFI_ACPI_ARM_PERFORMANCE_MONITORING_UNIT_TABLE_HEADER; + +/// +/// APMT Revision (as defined in DEN0117.) +/// +#define EFI_ACPI_ARM_PERFORMANCE_MONITORING_UNIT_TABLE_REVISION 0x00 + +/// +/// Arm PMU Node Structure +/// + +// Node Flags +#define EFI_ACPI_APMT_DUAL_PAGE_EXTENSION_SUPPORTED BIT0 +#define EFI_ACPI_APMT_PROCESSOR_AFFINITY_TYPE_CONTAINER BIT1 +#define EFI_ACPI_APMT_PROCESSOR_AFFINITY_TYPE_PROCESSOR 0 // BIT 1 +#define EFI_ACPI_APMT_64BIT_SINGLE_COPY_ATOMICITY_SUPPORTED BIT2 + +// Interrupt Flags +#define EFI_ACPI_APMT_INTERRUPT_MODE_EDGE_TRIGGERED BIT0 +#define EFI_ACPI_APMT_INTERRUPT_MODE_LEVEL_TRIGGERED 0 // BIT 0 +#define EFI_ACPI_APMT_INTERRUPT_TYPE_WIRED 0 // BIT 1 + +// Node Type +#define EFI_ACPI_APMT_NODE_TYPE_MEMORY_CONTROLLER 0x00 +#define EFI_ACPI_APMT_NODE_TYPE_SMMU 0x01 +#define EFI_ACPI_APMT_NODE_TYPE_PCIE_ROOT_COMPLEX 0x02 +#define EFI_ACPI_APMT_NODE_TYPE_ACPI_DEVICE 0x03 +#define EFI_ACPI_APMT_NODE_TYPE_CPU_CACHE 0x04 + +typedef struct { + UINT16 Length; + UINT8 NodeFlags; + UINT8 NodeType; + UINT32 Identifier; + UINT64 NodeInstancePrimary; + UINT32 NodeInstanceSecondary; + UINT64 BaseAddress0; + UINT64 BaseAddress1; + UINT32 OverflowInterrupt; + UINT32 Reserved1; + UINT32 OverflowInterruptFlags; + UINT32 ProcessorAffinity; + UINT32 ImplementationId; +} EFI_ACPI_ARM_PERFORMANCE_MONITORING_UNIT_NODE; + +#pragma pack() + +#endif -- cgit v1.2.3