ArmPkg: Add ArmFfaLib.h
Add ArmFfaLib.h which defines interfaces correspond to FF-A ABIs. Signed-off-by: Levi Yun <yeoreum.yun@arm.com>
This commit is contained in:
parent
30ecebe015
commit
18948c4a6a
|
@ -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 } }
|
||||
|
|
|
@ -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_
|
Loading…
Reference in New Issue