mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
xen/arm: ffa: add defines for sharing memory
According to DEN0077A version 1.1 REL0 - Section 10.9.2 Memory region handle, page 167 - Table 10.18 at page 175 - Table 10.15 at page 168 - Section 10.11.4 Flags usage, page 184-187 add defines needed for sharing using the function FFA_MEM_SHARE and friends. Also add limits for how many shared buffers that a guest can have at once and how large a shared buffer can be at most. Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org> Reviewed-by: Henry Wang <Henry.Wang@arm.com> Reviewed-by: Bertrand Marquis <bertrand.marquis@arm.com>
This commit is contained in:
1 parent
88d750b880
commit
8a36b557a5
1 file changed
+58
@@ -5,6 +5,14 @@
|
||||
* Arm Firmware Framework for ARMv8-A (FF-A) mediator
|
||||
*
|
||||
* Copyright (C) 2023 Linaro Limited
|
||||
*
|
||||
* References:
|
||||
* FF-A-1.0-REL: FF-A specification version 1.0 available at
|
||||
* https://developer.arm.com/documentation/den0077/a
|
||||
* FF-A-1.1-REL0: FF-A specification version 1.1 available at
|
||||
* https://developer.arm.com/documentation/den0077/e
|
||||
* TEEC-1.0C: TEE Client API Specification version 1.0c available at
|
||||
* https://globalplatform.org/specs-library/tee-client-api-specification/
|
||||
*/
|
||||
|
||||
#include <xen/bitops.h>
|
||||
@@ -80,6 +88,56 @@
|
||||
*/
|
||||
#define FFA_MAX_RXTX_PAGE_COUNT 1
|
||||
|
||||
/*
|
||||
* Limit for shared buffer size. Please note that this define limits
|
||||
* number of pages.
|
||||
*
|
||||
* FF-A doesn't have any direct requirements on GlobalPlatform or vice
|
||||
* versa, but an implementation can very well use FF-A in order to provide
|
||||
* a GlobalPlatform interface on top.
|
||||
*
|
||||
* Global Platform specification for TEE requires that any TEE
|
||||
* implementation should allow to share buffers with size of at least
|
||||
* 512KB, defined in TEEC-1.0C page 24, Table 4-1,
|
||||
* TEEC_CONFIG_SHAREDMEM_MAX_SIZE.
|
||||
* Due to overhead which can be hard to predict exactly, double this number
|
||||
* to give a safe margin.
|
||||
*/
|
||||
#define FFA_MAX_SHM_PAGE_COUNT (2 * SZ_512K / FFA_PAGE_SIZE)
|
||||
|
||||
/*
|
||||
* Limits the number of shared buffers that guest can have at once. This
|
||||
* is to prevent case, when guests trick XEN into exhausting its own
|
||||
* memory by allocating many small buffers. This value has been chosen
|
||||
* arbitrarily.
|
||||
*/
|
||||
#define FFA_MAX_SHM_COUNT 32
|
||||
|
||||
/* FF-A-1.1-REL0 section 10.9.2 Memory region handle, page 167 */
|
||||
#define FFA_HANDLE_HYP_FLAG BIT(63, ULL)
|
||||
#define FFA_HANDLE_INVALID 0xffffffffffffffffULL
|
||||
|
||||
/*
|
||||
* Memory attributes: Normal memory, Write-Back cacheable, Inner shareable
|
||||
* Defined in FF-A-1.1-REL0 Table 10.18 at page 175.
|
||||
*/
|
||||
#define FFA_NORMAL_MEM_REG_ATTR 0x2fU
|
||||
/*
|
||||
* Memory access permissions: Read-write
|
||||
* Defined in FF-A-1.1-REL0 Table 10.15 at page 168.
|
||||
*/
|
||||
#define FFA_MEM_ACC_RW 0x2U
|
||||
|
||||
/* FF-A-1.1-REL0 section 10.11.4 Flags usage, page 184-187 */
|
||||
/* Clear memory before mapping in receiver */
|
||||
#define FFA_MEMORY_REGION_FLAG_CLEAR BIT(0, U)
|
||||
/* Relayer may time slice this operation */
|
||||
#define FFA_MEMORY_REGION_FLAG_TIME_SLICE BIT(1, U)
|
||||
/* Clear memory after receiver relinquishes it */
|
||||
#define FFA_MEMORY_REGION_FLAG_CLEAR_RELINQUISH BIT(2, U)
|
||||
/* Share memory transaction */
|
||||
#define FFA_MEMORY_REGION_TRANSACTION_TYPE_SHARE (1U << 3)
|
||||
|
||||
/*
|
||||
* Flags and field values used for the MSG_SEND_DIRECT_REQ/RESP:
|
||||
* BIT(31): Framework or partition message
|
||||
|
||||