/** @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
**/

#pragma once

#include <IndustryStandard/Acpi.h>

#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()
