1e0e3828aSJens Wiklander /* SPDX-License-Identifier: BSD-3-Clause */ 2e0e3828aSJens Wiklander /* 3e0e3828aSJens Wiklander * Copyright (c) 2020, Linaro Limited 44a88c465SImre Kis * Copyright (c) 2018-2024, Arm Limited. All rights reserved. 5e0e3828aSJens Wiklander */ 6e0e3828aSJens Wiklander 7e0e3828aSJens Wiklander #ifndef __FFA_H 8e0e3828aSJens Wiklander #define __FFA_H 9e0e3828aSJens Wiklander 10e0e3828aSJens Wiklander /* This is based on the FF-A 1.0 EAC specification */ 11e0e3828aSJens Wiklander 12e0e3828aSJens Wiklander #include <smccc.h> 13e0e3828aSJens Wiklander #include <stdint.h> 14438f0055SJelle Sels #include <util.h> 15e0e3828aSJens Wiklander 16e0e3828aSJens Wiklander /* Error codes */ 17ae6b3380SJelle Sels #define FFA_OK 0 18e0e3828aSJens Wiklander #define FFA_NOT_SUPPORTED -1 19e0e3828aSJens Wiklander #define FFA_INVALID_PARAMETERS -2 20e0e3828aSJens Wiklander #define FFA_NO_MEMORY -3 21e0e3828aSJens Wiklander #define FFA_BUSY -4 22e0e3828aSJens Wiklander #define FFA_INTERRUPTED -5 23e0e3828aSJens Wiklander #define FFA_DENIED -6 24e0e3828aSJens Wiklander #define FFA_RETRY -7 25e0e3828aSJens Wiklander #define FFA_ABORTED -8 26f6dcf234SJens Wiklander #define FFA_NO_DATA -9 27e0e3828aSJens Wiklander 28e0e3828aSJens Wiklander /* FFA_VERSION helpers */ 294a6784caSJens Wiklander #define FFA_VERSION_MAJOR_SHIFT U(16) 30e0e3828aSJens Wiklander #define FFA_VERSION_MAJOR_MASK U(0x7FFF) 314a6784caSJens Wiklander #define FFA_VERSION_MINOR_SHIFT U(0) 32e0e3828aSJens Wiklander #define FFA_VERSION_MINOR_MASK U(0xFFFF) 33e0e3828aSJens Wiklander #define MAKE_FFA_VERSION(major, minor) \ 34e0e3828aSJens Wiklander ((((major) & FFA_VERSION_MAJOR_MASK) << FFA_VERSION_MAJOR_SHIFT) | \ 35e0e3828aSJens Wiklander ((minor) & FFA_VERSION_MINOR_MASK)) 36bef959c8SJens Wiklander #define FFA_GET_MAJOR_VERSION(vers) \ 37bef959c8SJens Wiklander (((uint32_t)(vers) >> FFA_VERSION_MAJOR_SHIFT) & FFA_VERSION_MAJOR_MASK) 38bef959c8SJens Wiklander #define FFA_GET_MINOR_VERSION(vers) ((uint32_t)(vers) & \ 39bef959c8SJens Wiklander FFA_VERSION_MINOR_MASK) 40e0e3828aSJens Wiklander 41a1c53023SJens Wiklander #define FFA_VERSION_1_0 MAKE_FFA_VERSION(1, 0) 42a1c53023SJens Wiklander #define FFA_VERSION_1_1 MAKE_FFA_VERSION(1, 1) 43750a54aaSJens Wiklander #define FFA_VERSION_1_2 MAKE_FFA_VERSION(1, 2) 44a1c53023SJens Wiklander 45e0e3828aSJens Wiklander /* Function IDs */ 46e0e3828aSJens Wiklander #define FFA_ERROR U(0x84000060) 47e0e3828aSJens Wiklander #define FFA_SUCCESS_32 U(0x84000061) 48e0e3828aSJens Wiklander #define FFA_SUCCESS_64 U(0xC4000061) 49e0e3828aSJens Wiklander #define FFA_INTERRUPT U(0x84000062) 50e0e3828aSJens Wiklander #define FFA_VERSION U(0x84000063) 51e0e3828aSJens Wiklander #define FFA_FEATURES U(0x84000064) 52e0e3828aSJens Wiklander #define FFA_RX_RELEASE U(0x84000065) 53750a54aaSJens Wiklander #define FFA_RX_ACQUIRE U(0x84000084) 54e0e3828aSJens Wiklander #define FFA_RXTX_MAP_32 U(0x84000066) 55e0e3828aSJens Wiklander #define FFA_RXTX_MAP_64 U(0xC4000066) 56e0e3828aSJens Wiklander #define FFA_RXTX_UNMAP U(0x84000067) 57e0e3828aSJens Wiklander #define FFA_PARTITION_INFO_GET U(0x84000068) 58e0e3828aSJens Wiklander #define FFA_ID_GET U(0x84000069) 59a1c53023SJens Wiklander #define FFA_SPM_ID_GET U(0x84000085) 60e0e3828aSJens Wiklander #define FFA_MSG_WAIT U(0x8400006B) 61e0e3828aSJens Wiklander #define FFA_MSG_YIELD U(0x8400006C) 624d028847SImre Kis #define FFA_RUN U(0x8400006D) 63a1c53023SJens Wiklander #define FFA_MSG_SEND2 U(0x84000086) 64e0e3828aSJens Wiklander #define FFA_MSG_SEND U(0x8400006E) 65e0e3828aSJens Wiklander #define FFA_MSG_SEND_DIRECT_REQ_32 U(0x8400006F) 66e0e3828aSJens Wiklander #define FFA_MSG_SEND_DIRECT_REQ_64 U(0xC400006F) 67e0e3828aSJens Wiklander #define FFA_MSG_SEND_DIRECT_RESP_32 U(0x84000070) 68e0e3828aSJens Wiklander #define FFA_MSG_SEND_DIRECT_RESP_64 U(0xC4000070) 69750a54aaSJens Wiklander #define FFA_MSG_SEND_DIRECT_REQ2 U(0xC400008D) 70750a54aaSJens Wiklander #define FFA_MSG_SEND_DIRECT_RESP2 U(0xC400008E) 71e0e3828aSJens Wiklander #define FFA_MSG_POLL U(0x8400006A) 72e0e3828aSJens Wiklander #define FFA_MEM_DONATE_32 U(0x84000071) 73e0e3828aSJens Wiklander #define FFA_MEM_DONATE_64 U(0xC4000071) 74e0e3828aSJens Wiklander #define FFA_MEM_LEND_32 U(0x84000072) 75e0e3828aSJens Wiklander #define FFA_MEM_LEND_64 U(0xC4000072) 76e0e3828aSJens Wiklander #define FFA_MEM_SHARE_32 U(0x84000073) 77e0e3828aSJens Wiklander #define FFA_MEM_SHARE_64 U(0xC4000073) 78e0e3828aSJens Wiklander #define FFA_MEM_RETRIEVE_REQ_32 U(0x84000074) 79e0e3828aSJens Wiklander #define FFA_MEM_RETRIEVE_REQ_64 U(0xC4000074) 80e0e3828aSJens Wiklander #define FFA_MEM_RETRIEVE_RESP U(0x84000075) 81e0e3828aSJens Wiklander #define FFA_MEM_RELINQUISH U(0x84000076) 82e0e3828aSJens Wiklander #define FFA_MEM_RECLAIM U(0x84000077) 83e0e3828aSJens Wiklander #define FFA_MEM_FRAG_RX U(0x8400007A) 84e0e3828aSJens Wiklander #define FFA_MEM_FRAG_TX U(0x8400007B) 85af06edb5SJens Wiklander #define FFA_NORMAL_WORLD_RESUME U(0x8400007C) 86a1c53023SJens Wiklander #define FFA_NOTIFICATION_BITMAP_CREATE U(0x8400007D) 87a1c53023SJens Wiklander #define FFA_NOTIFICATION_BITMAP_DESTROY U(0x8400007E) 88a1c53023SJens Wiklander #define FFA_NOTIFICATION_BIND U(0x8400007F) 89a1c53023SJens Wiklander #define FFA_NOTIFICATION_UNBIND U(0x84000080) 90a1c53023SJens Wiklander #define FFA_NOTIFICATION_SET U(0x84000081) 91a1c53023SJens Wiklander #define FFA_NOTIFICATION_GET U(0x84000082) 92a1c53023SJens Wiklander #define FFA_NOTIFICATION_INFO_GET_32 U(0x84000083) 93a1c53023SJens Wiklander #define FFA_NOTIFICATION_INFO_GET_64 U(0xC4000083) 94635bab26SSudeep Holla #define FFA_SECONDARY_EP_REGISTER_64 U(0xC4000087) 95438f0055SJelle Sels #define FFA_MEM_PERM_GET_32 U(0x84000088) 96438f0055SJelle Sels #define FFA_MEM_PERM_GET_64 U(0xC4000088) 97438f0055SJelle Sels #define FFA_MEM_PERM_SET_32 U(0x84000089) 98438f0055SJelle Sels #define FFA_MEM_PERM_SET_64 U(0xC4000089) 99280b6a32SImre Kis #define FFA_CONSOLE_LOG_32 U(0x8400008A) 100280b6a32SImre Kis #define FFA_CONSOLE_LOG_64 U(0xC400008A) 101750a54aaSJens Wiklander #define FFA_EL3_INTR_HANDLE U(0x8400008C) 102750a54aaSJens Wiklander #define FFA_PARTITION_INFO_GET_REGS U(0xC400008B) 103e0e3828aSJens Wiklander 1042e02a737SJens Wiklander #define FFA_FEATURES_FUNC_ID_MASK BIT32(31) 1052e02a737SJens Wiklander #define FFA_FEATURES_FEATURE_ID_MASK GENMASK_32(7, 0) 1062e02a737SJens Wiklander 107f6dcf234SJens Wiklander /* Flags used in calls to FFA_NOTIFICATION_GET interface */ 108f6dcf234SJens Wiklander #define FFA_NOTIF_FLAG_BITMAP_SP BIT(0) 109f6dcf234SJens Wiklander #define FFA_NOTIF_FLAG_BITMAP_VM BIT(1) 110f6dcf234SJens Wiklander #define FFA_NOTIF_FLAG_BITMAP_SPM BIT(2) 111f6dcf234SJens Wiklander #define FFA_NOTIF_FLAG_BITMAP_HYP BIT(3) 112f6dcf234SJens Wiklander 113f6dcf234SJens Wiklander /* Flags used in calls to FFA_NOTIFICATION_INFO_GET interface */ 114f6dcf234SJens Wiklander #define FFA_NOTIF_INFO_GET_MORE_FLAG BIT(0) 115f6dcf234SJens Wiklander #define FFA_NOTIF_INFO_GET_ID_LIST_SHIFT 12 116f6dcf234SJens Wiklander #define FFA_NOTIF_INFO_GET_ID_COUNT_SHIFT 7 117f6dcf234SJens Wiklander #define FFA_NOTIF_INFO_GET_ID_COUNT_MASK 0x1F 118f6dcf234SJens Wiklander 119f6dcf234SJens Wiklander /* Feature IDs used with FFA_FEATURES */ 120a1c53023SJens Wiklander #define FFA_FEATURE_NOTIF_PEND_INTR U(0x1) 121a1c53023SJens Wiklander #define FFA_FEATURE_SCHEDULE_RECV_INTR U(0x2) 122a1c53023SJens Wiklander #define FFA_FEATURE_MANAGED_EXIT_INTR U(0x3) 123a1c53023SJens Wiklander 124e0e3828aSJens Wiklander /* Special value for traffic targeted to the Hypervisor or SPM */ 125e0e3828aSJens Wiklander #define FFA_TARGET_INFO_MBZ U(0x0) 126e0e3828aSJens Wiklander 127a1c53023SJens Wiklander #define FFA_MSG_FLAG_FRAMEWORK BIT(31) 128a1c53023SJens Wiklander #define FFA_MSG_TYPE_MASK GENMASK_32(7, 0) 129a1c53023SJens Wiklander #define FFA_MSG_PSCI U(0x0) 130a1c53023SJens Wiklander #define FFA_MSG_SEND_VM_CREATED U(0x4) 131a1c53023SJens Wiklander #define FFA_MSG_RESP_VM_CREATED U(0x5) 132a1c53023SJens Wiklander #define FFA_MSG_SEND_VM_DESTROYED U(0x6) 133a1c53023SJens Wiklander #define FFA_MSG_RESP_VM_DESTROYED U(0x7) 134a1c53023SJens Wiklander #define FFA_MSG_VERSION_REQ U(0x8) 135a1c53023SJens Wiklander #define FFA_MSG_VERSION_RESP U(0x9) 136a1c53023SJens Wiklander 137a1c53023SJens Wiklander /* 138a1c53023SJens Wiklander * Flag used as parameter to FFA_PARTITION_INFO_GET to return partition 139a1c53023SJens Wiklander * count only. 140a1c53023SJens Wiklander */ 141a1c53023SJens Wiklander #define FFA_PARTITION_INFO_GET_COUNT_FLAG BIT(0) 142a1c53023SJens Wiklander 143c1bdf4fcSJens Wiklander /* Memory attributes: Normal memory, Write-Back cacheable, Inner shareable */ 144c1bdf4fcSJens Wiklander #define FFA_NORMAL_MEM_REG_ATTR U(0x2f) 145c1bdf4fcSJens Wiklander 146c1bdf4fcSJens Wiklander /* Memory access permissions: Read-write */ 1475c1143a8SJelle Sels #define FFA_MEM_ACC_RW BIT(1) 1485c1143a8SJelle Sels 1495c1143a8SJelle Sels /* Memory access permissions: executable */ 1505c1143a8SJelle Sels #define FFA_MEM_ACC_EXE BIT(3) 151c1bdf4fcSJens Wiklander 152cdd7a3f4SJelle Sels /* Memory access permissions mask */ 153cdd7a3f4SJelle Sels #define FFA_MEM_ACC_MASK 0xf 154cdd7a3f4SJelle Sels 155c1bdf4fcSJens Wiklander /* Clear memory before mapping in receiver */ 156c1bdf4fcSJens Wiklander #define FFA_MEMORY_REGION_FLAG_CLEAR BIT(0) 157c1bdf4fcSJens Wiklander /* Relayer may time slice this operation */ 158c1bdf4fcSJens Wiklander #define FFA_MEMORY_REGION_FLAG_TIME_SLICE BIT(1) 159c1bdf4fcSJens Wiklander /* Clear memory after receiver relinquishes it */ 160c1bdf4fcSJens Wiklander #define FFA_MEMORY_REGION_FLAG_CLEAR_RELINQUISH BIT(2) 161c1bdf4fcSJens Wiklander 162c1bdf4fcSJens Wiklander /* Share memory transaction */ 163c1bdf4fcSJens Wiklander #define FFA_MEMORY_REGION_TRANSACTION_TYPE_SHARE SHIFT_U32(1, 3) 164*00338334SJens Wiklander /* Lend memory transaction */ 165*00338334SJens Wiklander #define FFA_MEMORY_REGION_TRANSACTION_TYPE_LEND SHIFT_U32(2, 3) 166c1bdf4fcSJens Wiklander /* Relayer must choose the alignment boundary */ 167c1bdf4fcSJens Wiklander #define FFA_MEMORY_REGION_FLAG_ANY_ALIGNMENT 0 168c1bdf4fcSJens Wiklander 169438f0055SJelle Sels #define FFA_MEM_PERM_DATA_PERM GENMASK_32(1, 0) 170438f0055SJelle Sels #define FFA_MEM_PERM_RW U(0x1) 171438f0055SJelle Sels #define FFA_MEM_PERM_RO U(0x3) 172438f0055SJelle Sels 173438f0055SJelle Sels #define FFA_MEM_PERM_INSTRUCTION_PERM BIT(2) 174438f0055SJelle Sels #define FFA_MEM_PERM_NX BIT(2) 175438f0055SJelle Sels #define FFA_MEM_PERM_X U(0) 176438f0055SJelle Sels 177438f0055SJelle Sels #define FFA_MEM_PERM_RESERVED GENMASK_32(31, 3) 178438f0055SJelle Sels 179e0e3828aSJens Wiklander /* Special value for MBZ parameters */ 180e0e3828aSJens Wiklander #define FFA_PARAM_MBZ U(0x0) 181e0e3828aSJens Wiklander 1823a7bfc34SJelle Sels /* 1834d028847SImre Kis * The W1 register in FFA_INTERRUPT and FFA_RUN interfaces contains the target 1844d028847SImre Kis * information. This value has two parts, the SP ID and vCPU ID. The SP ID 1854d028847SImre Kis * identifies the SP to resume and the vCPU ID identifies the vCPU or execution 1864d028847SImre Kis * context to resume (FF-A v1.1 section 4.8). 1874d028847SImre Kis */ 1884d028847SImre Kis #define FFA_TARGET_INFO_SET(sp_id, vcpu_id) (((sp_id) << 16) | (vcpu_id)) 1894d028847SImre Kis #define FFA_TARGET_INFO_GET_SP_ID(info) (((info) >> 16) & 0xffff) 1904d028847SImre Kis #define FFA_TARGET_INFO_GET_VCPU_ID(info) ((info) & 0xffff) 1914d028847SImre Kis 1924d028847SImre Kis /* 1933a7bfc34SJelle Sels * Flags used for the FFA_PARTITION_INFO_GET return message: 1943a7bfc34SJelle Sels * BIT(0): Supports receipt of direct requests 1953a7bfc34SJelle Sels * BIT(1): Can send direct requests 196a1c53023SJens Wiklander * BIT(2): Can send and receive indirect messages 197a1c53023SJens Wiklander * BIT(3): Supports receipt of notifications 1983a7bfc34SJelle Sels * BIT(4-5): Partition ID is a PE endpoint ID 1993a7bfc34SJelle Sels */ 200a1c53023SJens Wiklander #define FFA_PART_PROP_DIRECT_REQ_RECV BIT(0) 201a1c53023SJens Wiklander #define FFA_PART_PROP_DIRECT_REQ_SEND BIT(1) 202a1c53023SJens Wiklander #define FFA_PART_PROP_INDIRECT_MSGS BIT(2) 203a1c53023SJens Wiklander #define FFA_PART_PROP_RECV_NOTIF BIT(3) 204a1c53023SJens Wiklander #define FFA_PART_PROP_IS_PE_ID SHIFT_U32(0, 4) 205a1c53023SJens Wiklander #define FFA_PART_PROP_IS_SEPID_INDEP SHIFT_U32(1, 4) 206a1c53023SJens Wiklander #define FFA_PART_PROP_IS_SEPID_DEP SHIFT_U32(2, 4) 207a1c53023SJens Wiklander #define FFA_PART_PROP_IS_AUX_ID SHIFT_U32(3, 4) 208a1c53023SJens Wiklander #define FFA_PART_PROP_NOTIF_CREATED BIT(6) 209a1c53023SJens Wiklander #define FFA_PART_PROP_NOTIF_DESTROYED BIT(7) 210a1c53023SJens Wiklander #define FFA_PART_PROP_AARCH64_STATE BIT(8) 211a1c53023SJens Wiklander 212a65dd3a6SJens Wiklander #define FFA_MEMORY_HANDLE_HYPERVISOR_BIT BIT64(63) 2135c1143a8SJelle Sels #define FFA_MEMORY_HANDLE_SECURE_BIT BIT64(45) 214a65dd3a6SJens Wiklander #define FFA_MEMORY_HANDLE_NON_SECURE_BIT BIT64(44) 215a65dd3a6SJens Wiklander /* 216a65dd3a6SJens Wiklander * Codes the OP-TEE partition/guest ID into a cookie in order to know which 217a65dd3a6SJens Wiklander * partition to activate when reclaiming the shared memory. This field is 0 218a65dd3a6SJens Wiklander * unless CFG_NS_VIRTUALIZATION is enabled. 219a65dd3a6SJens Wiklander */ 220a65dd3a6SJens Wiklander #define FFA_MEMORY_HANDLE_PRTN_SHIFT 16 221a65dd3a6SJens Wiklander #define FFA_MEMORY_HANDLE_PRTN_MASK GENMASK_32(16, 0) 222a65dd3a6SJens Wiklander 2235c1143a8SJelle Sels 2245489e94fSJens Wiklander #define FFA_BOOT_INFO_NAME_LEN U(16) 2255489e94fSJens Wiklander 2265489e94fSJens Wiklander /* Boot Info descriptors type */ 2275489e94fSJens Wiklander #define FFA_BOOT_INFO_TYPE_IMDEF BIT(7) 2285489e94fSJens Wiklander #define FFA_BOOT_INFO_TYPE_ID_MASK GENMASK_32(6, 0) 2295489e94fSJens Wiklander #define FFA_BOOT_INFO_TYPE_ID_FDT U(0) 2305489e94fSJens Wiklander #define FFA_BOOT_INFO_TYPE_ID_HOB U(1) 2315489e94fSJens Wiklander 2325489e94fSJens Wiklander /* Boot Info descriptors flags */ 2335489e94fSJens Wiklander #define FFA_BOOT_INFO_FLAG_NAME_FORMAT_MASK GENMASK_32(1, 0) 2345489e94fSJens Wiklander #define FFA_BOOT_INFO_FLAG_NAME_FORMAT_STRING U(0) 2355489e94fSJens Wiklander #define FFA_BOOT_INFO_FLAG_NAME_FORMAT_UUID U(1) 2365489e94fSJens Wiklander 2375489e94fSJens Wiklander /** Bits [3:2] encode the format of the content field in ffa_boot_info_desc. */ 2385489e94fSJens Wiklander #define FFA_BOOT_INFO_FLAG_CONTENT_FORMAT_SHIFT U(2) 2395489e94fSJens Wiklander #define FFA_BOOT_INFO_FLAG_CONTENT_FORMAT_MASK GENMASK_32(3, 2) 2405489e94fSJens Wiklander #define FFA_BOOT_INFO_FLAG_CONTENT_FORMAT_VALUE U(1) 2415489e94fSJens Wiklander #define FFA_BOOT_INFO_FLAG_CONTENT_FORMAT_ADDR U(0) 2425489e94fSJens Wiklander 2435489e94fSJens Wiklander #define FFA_BOOT_INFO_SIGNATURE U(0xFFA) 244bef959c8SJens Wiklander #define FFA_BOOT_INFO_VERSION_1_1 U(0x10001) 245bef959c8SJens Wiklander #define FFA_BOOT_INFO_VERSION_1_2 U(0x10002) 2465489e94fSJens Wiklander 247280b6a32SImre Kis #define FFA_CONSOLE_LOG_CHAR_COUNT_MASK GENMASK_32(7, 0) 248280b6a32SImre Kis #define FFA_CONSOLE_LOG_32_MAX_MSG_LEN U(24) 249ddec5d6bSJens Wiklander #define FFA_CONSOLE_LOG_64_V1_1_MAX_MSG_LEN U(48) 250750a54aaSJens Wiklander #define FFA_CONSOLE_LOG_64_MAX_MSG_LEN U(128) 251280b6a32SImre Kis 2524a88c465SImre Kis /* Memory transaction type in FFA_MEM_RETRIEVE_RESP flags */ 2534a88c465SImre Kis #define FFA_MEMORY_TRANSACTION_TYPE_MASK GENMASK_32(4, 3) 2544a88c465SImre Kis #define FFA_MEMORY_TRANSACTION_TYPE_SHARE SHIFT_U32(1, 3) 2554a88c465SImre Kis #define FFA_MEMORY_TRANSACTION_TYPE_LEND SHIFT_U32(2, 3) 2564a88c465SImre Kis #define FFA_MEMORY_TRANSACTION_TYPE_DONATE SHIFT_U32(3, 3) 2574a88c465SImre Kis 258c1bdf4fcSJens Wiklander #ifndef __ASSEMBLER__ 259c1bdf4fcSJens Wiklander /* Constituent memory region descriptor */ 260c1bdf4fcSJens Wiklander struct ffa_address_range { 261c1bdf4fcSJens Wiklander uint64_t address; 262c1bdf4fcSJens Wiklander uint32_t page_count; 263c1bdf4fcSJens Wiklander uint32_t reserved; 264c1bdf4fcSJens Wiklander }; 265c1bdf4fcSJens Wiklander 266c1bdf4fcSJens Wiklander /* Composite memory region descriptor */ 267c1bdf4fcSJens Wiklander struct ffa_mem_region { 268c1bdf4fcSJens Wiklander uint32_t total_page_count; 269c1bdf4fcSJens Wiklander uint32_t address_range_count; 270c1bdf4fcSJens Wiklander uint64_t reserved; 271c1bdf4fcSJens Wiklander struct ffa_address_range address_range_array[]; 272c1bdf4fcSJens Wiklander }; 273c1bdf4fcSJens Wiklander 274c1bdf4fcSJens Wiklander /* Memory access permissions descriptor */ 275c1bdf4fcSJens Wiklander struct ffa_mem_access_perm { 276c1bdf4fcSJens Wiklander uint16_t endpoint_id; 277c1bdf4fcSJens Wiklander uint8_t perm; 278c1bdf4fcSJens Wiklander uint8_t flags; 279c1bdf4fcSJens Wiklander }; 280c1bdf4fcSJens Wiklander 281c1bdf4fcSJens Wiklander /* Endpoint memory access descriptor */ 282c1bdf4fcSJens Wiklander struct ffa_mem_access { 283c1bdf4fcSJens Wiklander struct ffa_mem_access_perm access_perm; 284c1bdf4fcSJens Wiklander uint32_t region_offs; 285c1bdf4fcSJens Wiklander uint64_t reserved; 286c1bdf4fcSJens Wiklander }; 287c1bdf4fcSJens Wiklander 288c1bdf4fcSJens Wiklander /* Lend, donate or share memory transaction descriptor */ 289a1c53023SJens Wiklander struct ffa_mem_transaction_1_0 { 290c1bdf4fcSJens Wiklander uint16_t sender_id; 291c1bdf4fcSJens Wiklander uint8_t mem_reg_attr; 292c1bdf4fcSJens Wiklander uint8_t reserved0; 293c1bdf4fcSJens Wiklander uint32_t flags; 294c1bdf4fcSJens Wiklander uint64_t global_handle; 295c1bdf4fcSJens Wiklander uint64_t tag; 296c1bdf4fcSJens Wiklander uint32_t reserved1; 297c1bdf4fcSJens Wiklander uint32_t mem_access_count; 298c1bdf4fcSJens Wiklander struct ffa_mem_access mem_access_array[]; 299c1bdf4fcSJens Wiklander }; 300c1bdf4fcSJens Wiklander 301a1c53023SJens Wiklander struct ffa_mem_transaction_1_1 { 302a1c53023SJens Wiklander uint16_t sender_id; 303a1c53023SJens Wiklander uint16_t mem_reg_attr; 304a1c53023SJens Wiklander uint32_t flags; 305a1c53023SJens Wiklander uint64_t global_handle; 306a1c53023SJens Wiklander uint64_t tag; 307a1c53023SJens Wiklander uint32_t mem_access_size; 308a1c53023SJens Wiklander uint32_t mem_access_count; 309a1c53023SJens Wiklander uint32_t mem_access_offs; 310a1c53023SJens Wiklander uint8_t reserved[12]; 311a1c53023SJens Wiklander }; 312a1c53023SJens Wiklander 313a1c53023SJens Wiklander /* 314a1c53023SJens Wiklander * The parts needed from struct ffa_mem_transaction_1_0 or struct 315a1c53023SJens Wiklander * ffa_mem_transaction_1_1, used to provide an abstraction of difference in 316a1c53023SJens Wiklander * data structures between version 1.0 and 1.1. This is just an internal 317a1c53023SJens Wiklander * interface and can be changed without changing any ABI. 318a1c53023SJens Wiklander */ 319a1c53023SJens Wiklander struct ffa_mem_transaction_x { 320a1c53023SJens Wiklander uint16_t sender_id; 321a1c53023SJens Wiklander uint8_t mem_reg_attr; 322a1c53023SJens Wiklander uint8_t flags; 323a1c53023SJens Wiklander uint8_t mem_access_size; 324a1c53023SJens Wiklander uint8_t mem_access_count; 325a1c53023SJens Wiklander uint16_t mem_access_offs; 326a1c53023SJens Wiklander uint64_t global_handle; 327a1c53023SJens Wiklander uint64_t tag; 328a1c53023SJens Wiklander }; 329a1c53023SJens Wiklander 330a1c53023SJens Wiklander #define FFA_UUID_SIZE 16 331a1c53023SJens Wiklander 332c1bdf4fcSJens Wiklander /* Partition information descriptor */ 333a1c53023SJens Wiklander struct ffa_partition_info_x { 334c1bdf4fcSJens Wiklander uint16_t id; 335c1bdf4fcSJens Wiklander uint16_t execution_context; 336c1bdf4fcSJens Wiklander uint32_t partition_properties; 337a1c53023SJens Wiklander /* 338a1c53023SJens Wiklander * The uuid field is absent in FF-A 1.0, and an array of 16 339a1c53023SJens Wiklander * (FFA_UUID_SIZE) from FF-A 1.1 340a1c53023SJens Wiklander */ 341a1c53023SJens Wiklander uint8_t uuid[]; 342c1bdf4fcSJens Wiklander }; 343c1bdf4fcSJens Wiklander 344c1bdf4fcSJens Wiklander /* Descriptor to relinquish a memory region (FFA_MEM_RELINQUISH) */ 345c1bdf4fcSJens Wiklander struct ffa_mem_relinquish { 346c1bdf4fcSJens Wiklander uint64_t handle; 347c1bdf4fcSJens Wiklander uint32_t flags; 348c1bdf4fcSJens Wiklander uint32_t endpoint_count; 349c1bdf4fcSJens Wiklander uint16_t endpoint_id_array[]; 350c1bdf4fcSJens Wiklander }; 3515489e94fSJens Wiklander 3527bb22ad3SBalint Dobszay /* FF-A v1.0 boot information name-value pairs */ 3537bb22ad3SBalint Dobszay struct ffa_boot_info_nvp_1_0 { 3547bb22ad3SBalint Dobszay uint32_t name[4]; 3557bb22ad3SBalint Dobszay uint64_t value; 3567bb22ad3SBalint Dobszay uint64_t size; 3577bb22ad3SBalint Dobszay }; 3587bb22ad3SBalint Dobszay 3597bb22ad3SBalint Dobszay /* FF-A v1.0 boot information descriptor */ 3607bb22ad3SBalint Dobszay struct ffa_boot_info_1_0 { 3617bb22ad3SBalint Dobszay uint32_t magic; 3627bb22ad3SBalint Dobszay uint32_t count; 3637bb22ad3SBalint Dobszay struct ffa_boot_info_nvp_1_0 nvp[]; 3647bb22ad3SBalint Dobszay }; 3657bb22ad3SBalint Dobszay 3665489e94fSJens Wiklander /* FF-A v1.1 boot information descriptor */ 3677bb22ad3SBalint Dobszay struct ffa_boot_info_1_1 { 3685489e94fSJens Wiklander char name[FFA_BOOT_INFO_NAME_LEN]; 3695489e94fSJens Wiklander uint8_t type; 3705489e94fSJens Wiklander uint8_t reserved; 3715489e94fSJens Wiklander uint16_t flags; 3725489e94fSJens Wiklander uint32_t size; 3735489e94fSJens Wiklander uint64_t contents; 3745489e94fSJens Wiklander }; 3755489e94fSJens Wiklander 3765489e94fSJens Wiklander /* FF-A v1.1 boot information header */ 3777bb22ad3SBalint Dobszay struct ffa_boot_info_header_1_1 { 3785489e94fSJens Wiklander uint32_t signature; 3795489e94fSJens Wiklander uint32_t version; 3805489e94fSJens Wiklander uint32_t blob_size; 3815489e94fSJens Wiklander uint32_t desc_size; 3825489e94fSJens Wiklander uint32_t desc_count; 3835489e94fSJens Wiklander uint32_t desc_offset; 3845489e94fSJens Wiklander uint64_t reserved; 3855489e94fSJens Wiklander }; 3865489e94fSJens Wiklander 387c1bdf4fcSJens Wiklander #endif /*__ASSEMBLER__*/ 388e0e3828aSJens Wiklander #endif /* __FFA_H */ 389