(optee_os/core/arch/arm/include/ffa.h)/* Function IDs */#defineFFA_ERRORU(0x84000060)#defineFFA_SUCCESS_32U(0x84000061)#defineFFA_SUCCESS_64U(0xC4000061)#defineFFA_INTERRUPTU(0x84000062)#defineFFA_VERSIONU(0x84000063)#defineFFA_FEATURESU(0x84000064)#defineFFA_RX_RELEASEU(0x84000065)#defineFFA_RXTX_MAP_32U(0x84000066)#defineFFA_RXTX_MAP_64U(0xC4000066)#defineFFA_RXTX_UNMAPU(0x84000067)#defineFFA_PARTITION_INFO_GETU(0x84000068)#defineFFA_ID_GETU(0x84000069)#defineFFA_MSG_WAITU(0x8400006B)#defineFFA_MSG_YIELDU(0x8400006C)#defineFFA_MSG_RUNU(0x8400006D)#defineFFA_MSG_SENDU(0x8400006E)#defineFFA_MSG_SEND_DIRECT_REQ_32U(0x8400006F)#defineFFA_MSG_SEND_DIRECT_REQ_64U(0xC400006F)#defineFFA_MSG_SEND_DIRECT_RESP_32U(0x84000070)#defineFFA_MSG_SEND_DIRECT_RESP_64U(0xC4000070)#defineFFA_MSG_POLLU(0x8400006A)#defineFFA_MEM_DONATE_32U(0x84000071)#defineFFA_MEM_DONATE_64U(0xC4000071)#defineFFA_MEM_LEND_32U(0x84000072)#defineFFA_MEM_LEND_64U(0xC4000072)#defineFFA_MEM_SHARE_32U(0x84000073)#defineFFA_MEM_SHARE_64U(0xC4000073)#defineFFA_MEM_RETRIEVE_REQ_32U(0x84000074)#defineFFA_MEM_RETRIEVE_REQ_64U(0xC4000074)#defineFFA_MEM_RETRIEVE_RESPU(0x84000075)#defineFFA_MEM_RELINQUISHU(0x84000076)#defineFFA_MEM_RECLAIMU(0x84000077)#defineFFA_MEM_FRAG_RXU(0x8400007A)#defineFFA_MEM_FRAG_TXU(0x8400007B)#defineFFA_SECONDARY_EP_REGISTER_64U(0xC4000087)
(optee_os/core/arch/arm/include/optee_ffa.h)/*
* Normal world sends requests with FFA_MSG_SEND_DIRECT_REQ and
* responses are returned with FFA_MSG_SEND_DIRECT_RESP for normal
* messages.
*
* All requests with FFA_MSG_SEND_DIRECT_REQ and FFA_MSG_SEND_DIRECT_RESP
* are using the AArch32 SMC calling convention with register usage as
* defined in FF-A specification:
* w0: Function ID (0x8400006F or 0x84000070)
* w1: Source/Destination IDs
* w2: Reserved (MBZ)
* w3-w7: Implementation defined, free to be used below
*/#defineOPTEE_FFA_VERSION_MAJORUINT32_C(1)#defineOPTEE_FFA_VERSION_MINORUINT32_C(0)#defineOPTEE_FFA_BLOCKING_CALL(id)UINT32_C(id)#defineOPTEE_FFA_YIELDING_CALL_BITU(31)#defineOPTEE_FFA_YIELDING_CALL(id)(UINT32_C(id)|\BIT32(OPTEE_FFA_YIELDING_CALL_BIT))/*
* Returns the API version implemented, currently follows the FF-A version.
* Call register usage:
* w3: Service ID, OPTEE_FFA_GET_API_VERSION
* w4-w7: Not used (MBZ)
*
* Return register usage:
* w3: OPTEE_FFA_VERSION_MAJOR
* w4: OPTEE_FFA_VERSION_MINOR
* w5-w7: Not used (MBZ)
*/#defineOPTEE_FFA_GET_API_VERSIONOPTEE_FFA_BLOCKING_CALL(0)/*
* Returns the revision of OP-TEE.
*
* Used by non-secure world to figure out which version of the Trusted OS
* is installed. Note that the returned revision is the revision of the
* Trusted OS, not of the API.
*
* Call register usage:
* w3: Service ID, OPTEE_FFA_GET_OS_VERSION
* w4-w7: Unused (MBZ)
*
* Return register usage:
* w3: CFG_OPTEE_REVISION_MAJOR
* w4: CFG_OPTEE_REVISION_MINOR
* w5: TEE_IMPL_GIT_SHA1 (or zero if not supported)
*/#defineOPTEE_FFA_GET_OS_VERSIONOPTEE_FFA_BLOCKING_CALL(1)/*
* Exchange capabilities between normal world and secure world.
*
* Currently there are no defined capabilities. When features are added new
* capabilities may be added.
*
* Call register usage:
* w3: Service ID, OPTEE_FFA_EXCHANGE_CAPABILITIES
* w4-w7: Note used (MBZ)
*
* Return register usage:
* w3: Error code, 0 on success
* w4: Bit[7:0]: Number of parameters needed for RPC to be supplied
* as the second MSG arg struct for
* OPTEE_FFA_YIELDING_CALL_WITH_ARG.
* Bit[31:8]: Reserved (MBZ)
* w5-w7: Note used (MBZ)
*/#defineOPTEE_FFA_EXCHANGE_CAPABILITIESOPTEE_FFA_BLOCKING_CALL(2)/*
* Unregister shared memory
*
* Call register usage:
* w3: Service ID, OPTEE_FFA_YIELDING_CALL_UNREGISTER_SHM
* w4: Shared memory handle, lower bits
* w5: Shared memory handle, higher bits
* w6-w7: Not used (MBZ)
*
* Return register usage:
* w3: Error code, 0 on success
* w4-w7: Note used (MBZ)
*/#defineOPTEE_FFA_UNREGISTER_SHMOPTEE_FFA_BLOCKING_CALL(3)/*
* Call with struct optee_msg_arg as argument in the supplied shared memory
* with a zero internal offset and normal cached memory attributes.
* Register usage:
* w3: Service ID, OPTEE_FFA_YIELDING_CALL_WITH_ARG
* w4: Lower 32 bits of a 64-bit Shared memory handle
* w5: Upper 32 bits of a 64-bit Shared memory handle
* w6: Offset into shared memory pointing to a struct optee_msg_arg
* right after the parameters of this struct (at offset
* OPTEE_MSG_GET_ARG_SIZE(num_params) follows a struct optee_msg_arg
* for RPC, this struct has reserved space for the number of RPC
* parameters as returned by OPTEE_FFA_EXCHANGE_CAPABILITIES.
* w7: Not used (MBZ)
* Resume from RPC. Register usage:
* w3: Service ID, OPTEE_FFA_YIELDING_CALL_RESUME
* w4-w6: Not used (MBZ)
* w7: Resume info
*
* Normal return (yielding call is completed). Register usage:
* w3: Error code, 0 on success
* w4: OPTEE_FFA_YIELDING_CALL_RETURN_DONE
* w5-w7: Not used (MBZ)
*
* RPC interrupt return (RPC from secure world). Register usage:
* w3: Error code == 0
* w4: Any defined RPC code but OPTEE_FFA_YIELDING_CALL_RETURN_DONE
* w5-w6: Not used (MBZ)
* w7: Resume info
*
* Possible error codes in register w3:
* 0: Success
* FFA_DENIED: w4 isn't one of OPTEE_FFA_YIELDING_CALL_START
* OPTEE_FFA_YIELDING_CALL_RESUME
*
* Possible error codes for OPTEE_FFA_YIELDING_CALL_START,
* FFA_BUSY: Number of OP-TEE OS threads exceeded,
* try again later
* FFA_DENIED: RPC shared memory object not found
* FFA_INVALID_PARAMETER: Bad shared memory handle or offset into the memory
*
* Possible error codes for OPTEE_FFA_YIELDING_CALL_RESUME
* FFA_INVALID_PARAMETER: Bad resume info
*/#defineOPTEE_FFA_YIELDING_CALL_WITH_ARGOPTEE_FFA_YIELDING_CALL(0)#defineOPTEE_FFA_YIELDING_CALL_RESUMEOPTEE_FFA_YIELDING_CALL(1)#defineOPTEE_FFA_YIELDING_CALL_RETURN_DONEU(0)#defineOPTEE_FFA_YIELDING_CALL_RETURN_RPC_CMDU(1)#defineOPTEE_FFA_YIELDING_CALL_RETURN_INTERRUPTU(2)