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:
Jens Wiklander authored and Julien Grall committed 2023-08-18 09:29:23 +01:00
1 parent 88d750b880
commit 8a36b557a5
1 file changed
+58
+58
View File
@@ -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
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.