diff --git a/ArmPkg/Include/IndustryStandard/ArmFfaPartInfo.h b/ArmPkg/Include/IndustryStandard/ArmFfaPartInfo.h new file mode 100644 index 0000000000..fcee5575ac --- /dev/null +++ b/ArmPkg/Include/IndustryStandard/ArmFfaPartInfo.h @@ -0,0 +1,99 @@ +/** @file + Partition information description as specfied in the FF-A v1.2 specification. + + Copyright (c) 2024, Arm Limited. All rights reserved. + + SPDX-License-Identifier: BSD-2-Clause-Patent + + @par Glossary: + - FF-A - Firmware Framework for Arm A-profile + - ST - Start idx and Tag + - IM - Information Metadata + - PART - Partition + - PROP - Property + - PE - Processing Element + - INDEP - Independent + - AUX - Auxiliary + + + @par Reference(s): + - FF-A Version 1.2 [https://developer.arm.com/documentation/den0077/latest] + +**/ + +#ifndef ARM_FFA_PART_INFO_H_ +#define ARM_FFA_PART_INFO_H_ + +/** Partition info flags used in FFA_PARTITION_INFO_GET + * See FF-A spec chapter 13.8 FFA_PARTITION_INFO_GET + */ +#define FFA_PART_INFO_FLAG_TYPE_SHIFT 0 +#define FFA_PART_INFO_FLAG_TYPE_MASK 1 +#define FFA_PART_INFO_FLAG_TYPE_COUNT 1 +#define FFA_PART_INFO_FLAG_TYPE_DESC 0 + +#define FFA_PART_INFO_IDX_MASK 0xffff +#define FFA_PART_INFO_START_TAG_MASK 0xffff + +/** macro used in FFA_PARTITION_INFO_GET_REGS request + * See FF-A spec chapter 13.9 FFA_PARTITION_INFO_GET_REGS + */ +#define FFA_PART_INFO_START_IDX_SHIFT 0 +#define FFA_PART_INFO_START_TAG_SHIFT 16 + +/** macro used in FFA_PARTITION_INFO_GET_REGS response + * See FF-A spec chapter 13.9 FFA_PARTITION_INFO_GET_REGS + */ +#define FFA_PART_INFO_METADATA_LAST_IDX_SHIFT 0 +#define FFA_PART_INFO_METADATA_CURRENT_IDX_SHIFT 16 +#define FFA_PART_INFO_METADATA_TAG_SHIFT 32 + +/** Partition properties values in EFI_FFA_PART_INFO_DESC->PartitionProps + * See FF-A spec chapter 6.2 partition discovery. + */ +#define FFA_PART_PROP_RECV_DIRECT_REQ (1 << 0) +#define FFA_PART_PROP_SEND_DIRECT_REQ (1 << 1) +#define FFA_PART_PROP_SEND_INDIRECT_REQ (1 << 2) +#define FFA_PART_PROP_RECV_INDIRECT_REQ (1 << 3) + +#define FFA_PART_PROP_ID_TYPE_SHIFT 4 +#define FFA_PART_PROP_ID_TYPE_MASK 0x3 +#define FFA_PART_PROP_ID_PE_EP 0x00 +#define FFA_PART_PROP_ID_STREAM_EP_INDEPENDENT 0x01 +#define FFA_PART_PROP_ID_STREAM_EP_DEPENDENT 0x02 +#define FFA_PART_PROP_ID_AUX 0x03 + +#define FFA_PART_PROP_VM_STATUS_CREATED (1 << 6) +#define FFA_PART_PROP_VM_STATUS_DESTROYED (1 << 7) + +#define FFA_PART_PROP_EXECUTE_STATE (1 << 8) + +#define FFA_PART_PROP_RECV_DIRECT_REQ2 (1 << 9) +#define FFA_PART_PROP_SEND_DIRECT_REQ2 (1 << 10) + +typedef union { + /// Number of Execution context + UINT16 ExecContextCount; + + /// ID of proxy endpoint for a dependent peripheral device + UINT16 ProxyPartitionId; +} EXEC_CONTEXT; + +/** Partition information Descriptor in the FF-A v1.2 spec. + * See FF-A spec chapter 6.2 partition discovery. + */ +typedef struct { + /// Partition id + UINT16 PartitionId; + + /// Execution context count or Proxy partition id + EXEC_CONTEXT ExecContextCountOrProxyPartitionId; + + /// Flags to determine partition properties + UINT32 PartitionProps; + + /// UUID of partition + UINT32 PartitionUuid[4]; +} EFI_FFA_PART_INFO_DESC; + +#endif