| /** @file | |
| ACPI for Memory System Resource Partitioning and Monitoring 2.0 (MPAM) as | |
| specified in ARM spec DEN0065 | |
| Copyright (c) 2024, Arm Limited. All rights reserved. | |
| SPDX-License-Identifier: BSD-2-Clause-Patent | |
| @par Specification Reference: | |
| - [1] ACPI for Memory System Resource Partitioning and Monitoring 2.0 | |
| (https://developer.arm.com/documentation/den0065/latest) | |
| @par Glossary: | |
| - MPAM - Memory System Resource Partitioning And Monitoring | |
| - MSC - Memory System Component | |
| - PCC - Platform Communication Channel | |
| - RIS - Resource Instance Selection | |
| - SMMU - Arm System Memory Management Unit | |
| **/ | |
| #ifndef MPAM_H_ | |
| #define MPAM_H_ | |
| #include <IndustryStandard/Acpi.h> | |
| /// | |
| /// MPAM Revision | |
| /// | |
| #define EFI_ACPI_MEMORY_SYSTEM_RESOURCE_PARTITIONING_AND_MONITORING_TABLE_REVISION (0x01) | |
| /// | |
| /// MPAM Interrupt mode | |
| /// | |
| #define EFI_ACPI_MPAM_INTERRUPT_LEVEL_TRIGGERED (0x0) | |
| #define EFI_ACPI_MPAM_INTERRUPT_EDGE_TRIGGERED (0x1) | |
| /// | |
| /// MPAM Interrupt type | |
| /// | |
| #define EFI_ACPI_MPAM_INTERRUPT_WIRED (0x0) | |
| /// | |
| /// MPAM Interrupt affinity type | |
| /// | |
| #define EFI_ACPI_MPAM_INTERRUPT_PROCESSOR_AFFINITY (0x0) | |
| #define EFI_ACPI_MPAM_INTERRUPT_PROCESSOR_CONTAINER_AFFINITY (0x1) | |
| /// | |
| /// MPAM MSC affinity valid | |
| /// | |
| #define EFI_ACPI_MPAM_INTERRUPT_AFFINITY_NOT_VALID (0x0) | |
| #define EFI_ACPI_MPAM_INTERRUPT_AFFINITY_VALID (0x1) | |
| /// | |
| /// MPAM Interrupt flag - bit positions | |
| /// | |
| #define EFI_ACPI_MPAM_INTERRUPT_MODE_SHIFT (0) | |
| #define EFI_ACPI_MPAM_INTERRUPT_TYPE_SHIFT (1) | |
| #define EFI_ACPI_MPAM_INTERRUPT_AFFINITY_TYPE_SHIFT (3) | |
| #define EFI_ACPI_MPAM_INTERRUPT_AFFINITY_VALID_SHIFT (4) | |
| #define EFI_ACPI_MPAM_INTERRUPT_RESERVED_SHIFT (5) | |
| /// | |
| /// MPAM Interrupt flag - bit masks | |
| /// | |
| #define EFI_ACPI_MPAM_INTERRUPT_MODE_MASK (0x1) | |
| #define EFI_ACPI_MPAM_INTERRUPT_TYPE_MASK (0x3) | |
| #define EFI_ACPI_MPAM_INTERRUPT_AFFINITY_TYPE_MASK (0x8) | |
| #define EFI_ACPI_MPAM_INTERRUPT_AFFINITY_VALID_MASK (0x10) | |
| #define EFI_ACPI_MPAM_INTERRUPT_RESERVED_MASK (0xFFFFFFE0) | |
| /// | |
| /// MPAM Location types | |
| /// as described in document [1], table 11. | |
| /// | |
| #define EFI_ACPI_MPAM_LOCATION_PROCESSOR_CACHE (0x0) | |
| #define EFI_ACPI_MPAM_LOCATION_MEMORY (0x1) | |
| #define EFI_ACPI_MPAM_LOCATION_SMMU (0x2) | |
| #define EFI_ACPI_MPAM_LOCATION_MEMORY_CACHE (0x3) | |
| #define EFI_ACPI_MPAM_LOCATION_ACPI_DEVICE (0x4) | |
| #define EFI_ACPI_MPAM_LOCATION_INTERCONNECT (0x5) | |
| #define EFI_ACPI_MPAM_LOCATION_UNKNOWN (0xFF) | |
| /// | |
| /// MPAM Interface types | |
| /// as desscribed in document[1], table 4. | |
| /// | |
| #define EFI_ACPI_MPAM_INTERFACE_MMIO (0x00) | |
| #define EFI_ACPI_MPAM_INTERFACE_PCC (0x0A) | |
| /// | |
| /// MPAM Link types | |
| /// as described in document [1], table 19. | |
| /// | |
| #define EFI_ACPI_MPAM_LINK_TYPE_NUMA (0x00) | |
| #define EFI_ACPI_MPAM_LINK_TYPE_PROC (0x01) | |
| #pragma pack(1) | |
| /// | |
| /// MPAM MSC generic locator descriptor | |
| /// as described in document [1], table 12. | |
| /// | |
| typedef struct { | |
| UINT64 Descriptor1; | |
| UINT32 Descriptor2; | |
| } EFI_ACPI_MPAM_GENERIC_LOCATOR; | |
| /// | |
| /// MPAM processor cache locator descriptor | |
| /// as described in document [1], table 13. | |
| /// | |
| typedef struct { | |
| UINT64 CacheReference; | |
| UINT32 Reserved; | |
| } EFI_ACPI_MPAM_CACHE_LOCATOR; | |
| /// | |
| /// MPAM memory locator descriptor | |
| /// as described in document [1], table 14. | |
| /// | |
| typedef struct { | |
| UINT64 ProximityDomain; | |
| UINT32 Reserved; | |
| } EFI_ACPI_MPAM_MEMORY_LOCATOR; | |
| /// | |
| /// MPAM SMMU locator descriptor | |
| /// as described in document [1], table 15. | |
| /// | |
| typedef struct { | |
| UINT64 SmmuInterface; | |
| UINT32 Reserved; | |
| } EFI_ACPI_MPAM_SMMU_LOCATOR; | |
| /// | |
| /// MPAM memory-side cache locator descriptor | |
| /// as described in Document [1], table 16. | |
| /// | |
| typedef struct { | |
| UINT8 Reserved[7]; | |
| UINT8 Level; | |
| UINT32 Reference; | |
| } EFI_ACPI_MPAM_MEMORY_CACHE_LOCATOR; | |
| /// | |
| /// MPAM ACPI device locator descriptor | |
| /// as described in document [1], table 17. | |
| /// | |
| typedef struct { | |
| UINT64 AcpiHardwareId; | |
| UINT32 AcpiUniqueId; | |
| } EFI_ACPI_MPAM_ACPI_LOCATOR; | |
| /// | |
| /// MPAM interconnect locator descriptor | |
| /// as described in document [1], table 18. | |
| /// | |
| typedef struct { | |
| UINT64 InterconnectDescTblOff; | |
| UINT32 Reserved; | |
| } EFI_ACPI_MPAM_INTERCONNECT_LOCATOR; | |
| /// | |
| /// MPAM interconnect descriptor | |
| /// as described in document [1], table 19. | |
| /// | |
| typedef struct { | |
| UINT32 SourceId; | |
| UINT32 DestinationId; | |
| UINT8 LinkType; | |
| UINT8 Reserved[3]; | |
| } EFI_ACPI_MPAM_INTERCONNECT_DESCRIPTOR; | |
| /// | |
| /// MPAM interconnect descriptor table | |
| /// as described in document [1], table 20. | |
| /// | |
| typedef struct { | |
| UINT8 Signature[16]; | |
| UINT32 NumDescriptors; | |
| } EFI_ACPI_MPAM_INTERCONNECT_DESCRIPTOR_TABLE; | |
| /// | |
| /// MPAM resource locator | |
| /// | |
| typedef union { | |
| EFI_ACPI_MPAM_CACHE_LOCATOR CacheLocator; | |
| EFI_ACPI_MPAM_MEMORY_LOCATOR MemoryLocator; | |
| EFI_ACPI_MPAM_SMMU_LOCATOR SmmuLocator; | |
| EFI_ACPI_MPAM_MEMORY_CACHE_LOCATOR MemCacheLocator; | |
| EFI_ACPI_MPAM_ACPI_LOCATOR AcpiLocator; | |
| EFI_ACPI_MPAM_INTERCONNECT_LOCATOR InterconnectIfcLocator; | |
| EFI_ACPI_MPAM_GENERIC_LOCATOR GenericLocator; | |
| } EFI_ACPI_MPAM_LOCATOR; | |
| /// | |
| /// MPAM MSC node body | |
| /// as described document [1], table 4. | |
| /// | |
| typedef struct { | |
| UINT16 Length; | |
| UINT8 InterfaceType; | |
| UINT8 Reserved; | |
| UINT32 Identifier; | |
| UINT64 BaseAddress; | |
| UINT32 MmioSize; | |
| UINT32 OverflowInterrupt; | |
| UINT32 OverflowInterruptFlags; | |
| UINT32 Reserved1; | |
| UINT32 OverflowInterruptAffinity; | |
| UINT32 ErrorInterrupt; | |
| UINT32 ErrorInterruptFlags; | |
| UINT32 Reserved2; | |
| UINT32 ErrorInterruptAffinity; | |
| UINT32 MaxNrdyUsec; | |
| UINT64 HardwareIdLinkedDevice; | |
| UINT32 InstanceIdLinkedDevice; | |
| UINT32 NumResources; | |
| } EFI_ACPI_MPAM_MSC_NODE; | |
| /// | |
| /// MPAM MSC resource | |
| /// as described in document [1], table 9. | |
| /// | |
| typedef struct { | |
| UINT32 Identifier; | |
| UINT8 RisIndex; | |
| UINT16 Reserved1; | |
| UINT8 LocatorType; | |
| EFI_ACPI_MPAM_LOCATOR Locator; | |
| UINT32 NumFunctionalDependencies; | |
| } EFI_ACPI_MPAM_MSC_RESOURCE; | |
| /// | |
| /// MPAM Function dependency descriptor | |
| /// as described in document [1], table 10. | |
| /// | |
| typedef struct { | |
| UINT32 Producer; | |
| UINT32 Reserved; | |
| } EFI_ACPI_MPAM_FUNCTIONAL_DEPENDENCY_DESCRIPTOR; | |
| #pragma pack() | |
| #endif |