/** @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 |