diff options
author | Levi Yun <yeoreum.yun@arm.com> | 2024-08-05 17:40:38 +0100 |
---|---|---|
committer | mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> | 2025-01-17 14:55:42 +0000 |
commit | 18948c4a6a2a539d19b9c4fb081567c4d2eb4ab6 (patch) | |
tree | be5fb4e82424aa6cf933d51aecf911b041c5d5af /ArmPkg | |
parent | 30ecebe01564b96f4d6dfb845a99a70278d4f420 (diff) | |
download | edk2-18948c4a6a2a539d19b9c4fb081567c4d2eb4ab6.tar.gz |
ArmPkg: Add ArmFfaLib.h
Add ArmFfaLib.h which defines interfaces correspond to FF-A ABIs.
Signed-off-by: Levi Yun <yeoreum.yun@arm.com>
Diffstat (limited to 'ArmPkg')
-rw-r--r-- | ArmPkg/ArmPkg.dec | 3 | ||||
-rw-r--r-- | ArmPkg/Include/Library/ArmFfaLib.h | 293 |
2 files changed, 296 insertions, 0 deletions
diff --git a/ArmPkg/ArmPkg.dec b/ArmPkg/ArmPkg.dec index 62341bcff3..5e846c9cd2 100644 --- a/ArmPkg/ArmPkg.dec +++ b/ArmPkg/ArmPkg.dec @@ -97,6 +97,9 @@ #
ArmTransferListLib|Include/Library/ArmTransferListLib.h
+ ## @libraryclass Provides an interface for a Arm FF-A ABI.
+ #
+ ArmFfaLib|Include/Library/ArmFfaLib.h
[Guids.common]
gArmTokenSpaceGuid = { 0xBB11ECFE, 0x820F, 0x4968, { 0xBB, 0xA6, 0xF7, 0x6A, 0xFE, 0x30, 0x25, 0x96 } }
diff --git a/ArmPkg/Include/Library/ArmFfaLib.h b/ArmPkg/Include/Library/ArmFfaLib.h new file mode 100644 index 0000000000..1f7bd5800f --- /dev/null +++ b/ArmPkg/Include/Library/ArmFfaLib.h @@ -0,0 +1,293 @@ +/** @file
+ Arm FF-A library Header file
+
+ Copyright (c) 2024, Arm Limited. All rights reserved.<BR>
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+
+ @par Glossary:
+ - FF-A - Firmware Framework for Arm A-profile
+ - spmc - Secure Partition Manager Core
+ - spmd - Secure Partition Manager Dispatcher
+
+ @par Reference(s):
+ - Arm Firmware Framework for Arm A-Profile [https://developer.arm.com/documentation/den0077/latest]
+
+**/
+
+#ifndef ARM_FFA_LIB_H_
+#define ARM_FFA_LIB_H_
+
+#include <IndustryStandard/ArmFfaSvc.h>
+#include <IndustryStandard/ArmFfaBootInfo.h>
+#include <IndustryStandard/ArmFfaPartInfo.h>
+
+#include <Library/ArmSmcLib.h>
+
+#define FFA_RXTX_MAP_INPUT_PROPERTY_DEFAULT 0x00
+
+/** Implementation define arguments used in
+ * FFA_SEND_MSG_DIRECT_REQ/FFA_SEND_MSG_DIRECT_RESP (i.e. v1) and
+ * FFA_SEND_MSG_DIRECT_REQ2/FFA_SEND_MSG_DIRECT_RESP2 (i.e. v2)
+ */
+typedef struct DirectMsgArgs {
+ /// Implementation define argument 0, this will be set to/from x3(v1) or x4(v2)
+ UINTN Arg0;
+
+ /// Implementation define argument 1, this will be set to/from x4(v1) or x5(v2)
+ UINTN Arg1;
+
+ /// Implementation define argument 2, this will be set to/from x5(v1) or x6(v2)
+ UINTN Arg2;
+
+ /// Implementation define argument 3, this will be set to/from x6(v1) or x7(v2)
+ UINTN Arg3;
+
+ /// Implementation define argument 4, this will be set to/from x7(v1) or ignored (v2)
+ UINTN Arg4;
+} DIRECT_MSG_ARGS;
+
+/**
+ Convert EFI_STATUS to FFA return code.
+
+ @param [in] Status edk2 status code.
+
+ @retval ARM_FFA_RET_* return value correspond to EFI_STATUS.
+**/
+UINTN
+EFIAPI
+EfiStatusToFfaStatus (
+ IN EFI_STATUS Status
+ );
+
+/**
+ Convert FFA return code to EFI_STATUS.
+
+ @param [in] FfaStatus Ffa Status Code.
+
+ @retval EFI_STATUS return value correspond EFI_STATUS to FfaStatus
+
+**/
+EFI_STATUS
+EFIAPI
+FfaStatusToEfiStatus (
+ IN UINTN FfaStatus
+ );
+
+/**
+ Check FF-A support or not.
+
+ @retval TRUE Supported
+ @retval FALSE Not supported
+
+**/
+BOOLEAN
+EFIAPI
+IsFfaSupported (
+ IN VOID
+ );
+
+/**
+ Get mapped Rx/Tx buffers.
+
+ @param [out] TxBuffer Address of TxBuffer
+ @param [out] TxBufferSize Size of TxBuffer
+ @param [out] RxBuffer Address of RxBuffer
+ @param [out] RxBufferSize Size of RxBuffer
+
+ @retval EFI_SUCCESS
+ @retval Others Error.
+
+**/
+EFI_STATUS
+EFIAPI
+ArmFfaLibGetRxTxBuffers (
+ OUT VOID **TxBuffer OPTIONAL,
+ OUT UINT64 *TxBufferSize OPTIONAL,
+ OUT VOID **RxBuffer OPTIONAL,
+ OUT UINT64 *RxBufferSize OPTIONAL
+ );
+
+/**
+ Get FF-A version
+
+ @param [in] RequestMajorVersion Minimal request major version
+ @param [in] RequestMinorVersion Minimal request minor version
+ @param [out] CurrentMajorVersion Current major version
+ @param [out] CurrentMinorVersion Current minor version
+
+**/
+EFI_STATUS
+EFIAPI
+ArmFfaLibGetVersion (
+ IN UINT16 RequestMajorVersion,
+ IN UINT16 RequestMinorVersion,
+ OUT UINT16 *CurrentMajorVersion,
+ OUT UINT16 *CurrentMinorVersion
+ );
+
+/**
+ Get FF-A features.
+
+ @param [in] Id Feature id or function id
+ @param [in] InputProperties Input properties according to Id
+ @param [out] Property1 First Property value.
+ @param [out] Property2 Second Property value.
+
+ @retval EFI_SUCCESS
+ @retval Others Error
+
+**/
+EFI_STATUS
+EFIAPI
+ArmFfaLibGetFeatures (
+ IN UINT32 Id,
+ IN UINT32 InputProperties,
+ OUT UINTN *Property1,
+ OUT UINTN *Property2
+ );
+
+/**
+ Acquire ownership of the Rx buffer.
+
+ @param [in] PartId Partition Id.
+
+ @retval EFI_SUCCESS
+ @retval Others Error
+
+**/
+EFI_STATUS
+EFIAPI
+ArmFfaLibRxAcquire (
+ IN UINT16 PartId
+ );
+
+/**
+ Release ownership of the Rx buffer.
+
+ @param [in] PartId Partition Id.
+
+ @retval EFI_SUCCESS
+ @retval Others Error
+
+**/
+EFI_STATUS
+EFIAPI
+ArmFfaLibRxRelease (
+ IN UINT16 PartId
+ );
+
+/**
+ Get Partition info.
+ If This function is called to get partition descriptors
+ (Flags isn't set with FFA_PART_INFO_FL_TYPE_COUNT),
+ It should call ArmFfaLibRxRelease() to release Rx buffer.
+
+ @param [in] ServiceGuid Service guid.
+ @param [in] Flags If this function called to get partition desc
+ and get successfully,
+ Caller should release RX buffer by calling
+ ArmFfaLibRxRelease
+ @param [out] Count Number of partition or partition descriptor
+ @param [out] Size Size of Partition Info structure in Rx Buffer
+
+ @retval EFI_SUCCESS
+ @retval Others Error
+**/
+EFI_STATUS
+EFIAPI
+ArmFfaLibPartitionInfoGet (
+ IN EFI_GUID *ServiceGuid,
+ IN UINT32 Flags,
+ OUT UINT32 *Count,
+ OUT UINT32 *Size OPTIONAL
+ );
+
+/**
+ Get partition or VM id.
+ This function is only called in ArmFfaLibConstructor.
+
+ @param [out] PartId Partition id.
+
+ @retval EFI_SUCCESS
+ @retval Others Error
+
+**/
+EFI_STATUS
+EFIAPI
+ArmFfaLibPartitionIdGet (
+ OUT UINT16 *PartId
+ );
+
+/**
+ Get spmc or spmd partition id.
+
+ @param [out] SpmPartId spmc/spmd partition id.
+
+ @retval EFI_SUCCESS
+ @retval Others Error
+
+**/
+EFI_STATUS
+EFIAPI
+ArmFfaLibSpmIdGet (
+ OUT UINT16 *SpmPartId
+ );
+
+/**
+ Restore context which interrupted with FFA_INTERRUPT (EFI_INTERRUPT_PENDING).
+
+ @param [in] PartId Partition id
+ @param [in] CpuNumber Cpu number in partition
+
+ @retval EFI_SUCCESS
+ @retval Other Error
+
+**/
+EFI_STATUS
+EFIAPI
+ArmFfaLibRun (
+ IN UINT16 PartId,
+ IN UINT16 CpuNumber
+ );
+
+/**
+ Send direct message request version 1.
+
+ @param [in] DestPartId Dest partition id
+ @param [in] Flags Message flags
+ @param [in, out] ImpDefArgs Implemented defined arguments and
+ Implemented defined return values
+
+ @retval EFI_SUCCESS Success
+ @retval Others Error
+
+**/
+EFI_STATUS
+EFIAPI
+ArmFfaLibMsgSendDirectReq (
+ IN UINT16 DestPartId,
+ IN UINT32 Flags,
+ IN OUT DIRECT_MSG_ARGS *ImpDefArgs
+ );
+
+/**
+ Send direct message request version 2.
+
+ @param [in] DestPartId Dest partition id
+ @param [in] ServiceGuid Service guid
+ @param [in, out] ImpDefArgs Implemented defined arguments and
+ Implemented defined return values
+
+ @retval EFI_SUCCESS Success
+ @retval Others Error
+
+**/
+EFI_STATUS
+EFIAPI
+ArmFfaLibMsgSendDirectReq2 (
+ IN UINT16 DestPartId,
+ IN EFI_GUID *ServiceGuid,
+ IN OUT DIRECT_MSG_ARGS *ImpDefArgs
+ );
+
+#endif // ARM_FFA_LIB_H_
|