mirror of
https://github.com/tianocore/edk2.git
synced 2025-08-26 22:07:55 +00:00

This change introduced a library interface that implements the FF-A memory protocol v1.3 ALP1: https://developer.arm.com/documentation/den0140/f Signed-off-by: Kun Qin <kun.qin@microsoft.com>
290 lines
11 KiB
C
290 lines
11 KiB
C
/** @file
|
||
Library definition for FF-A memory management protocol.
|
||
|
||
Copyright (c) 2020 - 2022, Arm Ltd. All rights reserved.<BR>
|
||
Copyright (c), Microsoft Corporation.
|
||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||
|
||
**/
|
||
|
||
#ifndef ARM_FFA_MEM_MGMT_LIB_H_
|
||
#define ARM_FFA_MEM_MGMT_LIB_H_
|
||
|
||
#include <Uefi.h>
|
||
|
||
/**
|
||
@brief Starts a transaction to transfer of ownership of a memory region
|
||
from a Sender endpoint to a Receiver endpoint.
|
||
|
||
@param[in] TotalLength Total length of the memory transaction descriptor
|
||
in bytes
|
||
@param[in] FragmentLength Length in bytes of the memory transaction descriptor
|
||
passed in this ABI invocation
|
||
@param[in] BufferAddr Base address of a buffer allocated by the Owner and
|
||
distinct from the TX buffer
|
||
@param[in] PageCount Number of 4K pages in the buffer allocated by the
|
||
Owner and distinct from the TX buffer
|
||
@param[out] Handle Globally unique Handle to identify the memory region
|
||
upon successful transmission of the transaction descriptor.
|
||
|
||
@retval The translated FF-A error status code
|
||
**/
|
||
EFI_STATUS
|
||
EFIAPI
|
||
ArmFfaMemLibDonate (
|
||
IN UINT32 TotalLength,
|
||
IN UINT32 FragmentLength,
|
||
IN VOID *BufferAddr,
|
||
IN UINT32 PageCount,
|
||
OUT UINT64 *Handle
|
||
);
|
||
|
||
/**
|
||
@brief Starts a transaction to transfer of ownership of a memory region
|
||
from a Sender endpoint to a Receiver endpoint.
|
||
|
||
@param[in] TotalLength Total length of the memory transaction descriptor
|
||
in bytes
|
||
@param[in] FragmentLength Length in bytes of the memory transaction descriptor
|
||
passed in this ABI invocation
|
||
@param[out] Handle Globally unique Handle to identify the memory region
|
||
upon successful transmission of the transaction descriptor.
|
||
|
||
@retval The translated FF-A error status code
|
||
**/
|
||
EFI_STATUS
|
||
EFIAPI
|
||
ArmFfaMemLibDonateRxTx (
|
||
IN UINT32 TotalLength,
|
||
IN UINT32 FragmentLength,
|
||
OUT UINT64 *Handle
|
||
);
|
||
|
||
/**
|
||
@brief Starts a transaction to transfer an Owner’s access to a memory
|
||
region and grant access to it to one or more Borrowers.
|
||
|
||
@param[in] TotalLength Total length of the memory transaction descriptor
|
||
in bytes
|
||
@param[in] FragmentLength Length in bytes of the memory transaction
|
||
descriptor passed in this ABI invocation
|
||
@param[in] BufferAddr Base address of a buffer allocated by the Owner
|
||
and distinct from the TX buffer
|
||
@param[in] PageCount Number of 4K pages in the buffer allocated by
|
||
the Owner and distinct from the TX buffer
|
||
@param[out] Handle Globally unique Handle to identify the memory
|
||
region upon successful transmission of the
|
||
transaction descriptor.
|
||
|
||
@retval The translated FF-A error status code
|
||
**/
|
||
EFI_STATUS
|
||
EFIAPI
|
||
ArmFfaMemLibLend (
|
||
IN UINT32 TotalLength,
|
||
IN UINT32 FragmentLength,
|
||
IN VOID *BufferAddr,
|
||
IN UINT32 PageCount,
|
||
OUT UINT64 *Handle
|
||
);
|
||
|
||
/**
|
||
@brief Starts a transaction to transfer an Owner’s access to a memory
|
||
region and grant access to it to one or more Borrowers through
|
||
Rx/Tx buffer.
|
||
|
||
@param[in] TotalLength Total length of the memory transaction descriptor
|
||
in bytes
|
||
@param[in] FragmentLength Length in bytes of the memory transaction descriptor
|
||
passed in this ABI invocation
|
||
@param[out] Handle Globally unique Handle to identify the memory region
|
||
upon successful transmission of the transaction descriptor.
|
||
|
||
@retval The translated FF-A error status code
|
||
**/
|
||
EFI_STATUS
|
||
EFIAPI
|
||
ArmFfaMemLibLendRxTx (
|
||
IN UINT32 TotalLength,
|
||
IN UINT32 FragmentLength,
|
||
OUT UINT64 *Handle
|
||
);
|
||
|
||
/**
|
||
@brief Starts a transaction to grant access to a memory region to one or
|
||
more Borrowers.
|
||
|
||
@param[in] TotalLength Total length of the memory transaction descriptor
|
||
in bytes
|
||
@param[in] FragmentLength Length in bytes of the memory transaction descriptor
|
||
passed in this ABI invocation
|
||
@param[in] BufferAddr Base address of a buffer allocated by the Owner and
|
||
distinct from the TX buffer
|
||
@param[in] PageCount Number of 4K pages in the buffer allocated by the
|
||
Owner and distinct from the TX buffer
|
||
@param[out] Handle Globally unique Handle to identify the memory region
|
||
upon successful transmission of the transaction descriptor.
|
||
|
||
@retval The translated FF-A error status code
|
||
**/
|
||
EFI_STATUS
|
||
EFIAPI
|
||
ArmFfaMemLibShare (
|
||
IN UINT32 TotalLength,
|
||
IN UINT32 FragmentLength,
|
||
IN VOID *BufferAddr,
|
||
IN UINT32 PageCount,
|
||
OUT UINT64 *Handle
|
||
);
|
||
|
||
/**
|
||
@brief Starts a transaction to grant access to a memory region to one or
|
||
more Borrowers through Rx/Tx buffer.
|
||
|
||
@param[in] TotalLength Total length of the memory transaction descriptor
|
||
in bytes
|
||
@param[in] FragmentLength Length in bytes of the memory transaction descriptor
|
||
passed in this ABI invocation
|
||
@param[out] Handle Globally unique Handle to identify the memory region
|
||
upon successful transmission of the transaction descriptor.
|
||
|
||
@retval The translated FF-A error status code
|
||
**/
|
||
EFI_STATUS
|
||
EFIAPI
|
||
ArmFfaMemLibShareRxTx (
|
||
IN UINT32 TotalLength,
|
||
IN UINT32 FragmentLength,
|
||
OUT UINT64 *Handle
|
||
);
|
||
|
||
/**
|
||
@brief Requests completion of a donate, lend or share memory management
|
||
transaction.
|
||
|
||
@param[in] TotalLength Total length of the memory transaction descriptor
|
||
in bytes
|
||
@param[in] FragmentLength Length in bytes of the memory transaction descriptor
|
||
passed in this ABI invocation
|
||
@param[in] BufferAddr Base address of a buffer allocated by the Owner
|
||
and distinct from the TX buffer
|
||
@param[in] PageCount Number of 4K pages in the buffer allocated by
|
||
the Owner and distinct from the TX buffer
|
||
@param[out] RespTotalLength Total length of the response memory transaction
|
||
descriptor in bytes
|
||
@param[out] RespFragmentLength Length in bytes of the response memory transaction
|
||
descriptor passed in this ABI invocation
|
||
|
||
@retval The translated FF-A error status code
|
||
**/
|
||
EFI_STATUS
|
||
EFIAPI
|
||
ArmFfaMemLibRetrieveReq (
|
||
IN UINT32 TotalLength,
|
||
IN UINT32 FragmentLength,
|
||
IN VOID *BufferAddr,
|
||
IN UINT32 PageCount,
|
||
OUT UINT32 *RespTotalLength,
|
||
OUT UINT32 *RespFragmentLength
|
||
);
|
||
|
||
/**
|
||
@brief Requests completion of a donate, lend or share memory management
|
||
transaction through Rx/Tx buffer.
|
||
|
||
@param[in] TotalLength Total length of the memory transaction descriptor
|
||
in bytes
|
||
@param[in] FragmentLength Length in bytes of the memory transaction descriptor
|
||
passed in this ABI invocation
|
||
@param[out] RespTotalLength Total length of the response memory transaction
|
||
descriptor in bytes
|
||
@param[out] RespFragmentLength Length in bytes of the response memory transaction
|
||
descriptor passed in this ABI invocation
|
||
|
||
@retval The translated FF-A error status code
|
||
**/
|
||
EFI_STATUS
|
||
EFIAPI
|
||
ArmFfaMemLibRetrieveReqRxTx (
|
||
IN UINT32 TotalLength,
|
||
IN UINT32 FragmentLength,
|
||
OUT UINT32 *RespTotalLength,
|
||
OUT UINT32 *RespFragmentLength
|
||
);
|
||
|
||
/**
|
||
@brief Starts a transaction to transfer access to a shared or lent
|
||
memory region from a Borrower back to its Owner.
|
||
|
||
@retval The translated FF-A error status code
|
||
**/
|
||
EFI_STATUS
|
||
EFIAPI
|
||
ArmFfaMemLibRelinquish (
|
||
VOID
|
||
);
|
||
|
||
/**
|
||
@brief Restores exclusive access to a memory region back to its Owner.
|
||
|
||
@param[in] Handle Globally unique Handle to identify the memory region
|
||
@param[in] Flags Flags for modifying the reclaim behavior
|
||
|
||
@retval The translated FF-A error status code
|
||
**/
|
||
EFI_STATUS
|
||
EFIAPI
|
||
ArmFfaMemLibReclaim (
|
||
IN UINT64 Handle,
|
||
IN UINT32 Flags
|
||
);
|
||
|
||
/**
|
||
@brief Queries the memory attributes of a memory region. This function
|
||
can only access the regions of the SP's own translation regine.
|
||
Moreover this interface is only available in the boot phase,
|
||
i.e. before invoking FFA_MSG_WAIT interface.
|
||
|
||
@param[in] BaseAddr Base VA of a translation granule whose
|
||
permission attributes must be returned.
|
||
@param[in] PageCount Number of translation granule size pages from the
|
||
Base address whose permissions must be returned.
|
||
This is calculated as Input Page count + 1.
|
||
@param[out] MemoryPerm Permission attributes of the memory region
|
||
|
||
@retval The translated FF-A error status code
|
||
**/
|
||
EFI_STATUS
|
||
EFIAPI
|
||
ArmFfaMemLibPermGet (
|
||
IN CONST VOID *BaseAddr,
|
||
IN UINT32 PageCount,
|
||
OUT UINT32 *MemoryPerm
|
||
);
|
||
|
||
/**
|
||
@brief Sets the memory attributes of a memory regions. This function
|
||
can only access the regions of the SP's own translation regine.
|
||
Moreover this interface is only available in the boot phase,
|
||
i.e. before invoking FFA_MSG_WAIT interface.
|
||
|
||
@param[in] BaseAddr Base VA of a memory region whose permission
|
||
attributes must be set.
|
||
@param[in] PageCount Number of translation granule size pages
|
||
starting from the Base address whose permissions
|
||
must be set.
|
||
@param[in] MemoryPerm Permission attributes to be set for the memory
|
||
region.
|
||
|
||
@retval The translated FF-A error status code
|
||
**/
|
||
EFI_STATUS
|
||
EFIAPI
|
||
ArmFfaMemLibPermSet (
|
||
IN CONST VOID *BaseAddr,
|
||
IN UINT32 PageCount,
|
||
IN UINT32 MemoryPerm
|
||
);
|
||
|
||
#endif // ARM_FFA_MEM_MGMT_LIB_H_
|