// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#pragma once

#include <stddef.h>
#include <stdint.h>

#include <zircon/compiler.h>

#include <tee-client-api/tee-client-types.h>

__BEGIN_CDECLS

/*
 * Global Platform TEE Client API
 *
 * https://globalplatform.org/specs-library/tee-client-api-specification/
 *
 * This header contains Fuchsia's implementation of the functions, and by inclusion (#include), the
 * constants and data structures, that are defined by the Global Platform TEE Client API V1.0_c and
 * its associated Errata (V2.0).
 *
 * NOTE: The file name for this file uses underscores rather than Fuchsia's conventional dashes due
 * to the requirement from the Global Platform TEE Client API Spec that the header must be named
 * exactly 'tee_client_api.h'.
 */

/*************
 * Functions *
 *************/

/* TEEC_InitializeContext
 *
 * This function initializes a new TEE Context, forming a connection between this Client Application
 * and the TEE identified by the string identifier name.
 *
 * Parameters:
 * name     A zero-terminated string that describes the TEE to connect to. If this parameter is set
 *          to NULL the Implementation must select a default TEE.
 *
 * context  A TEEC_Context structre that must be initialized by the Implementation.
 *
 * Return:
 * TEEC_Result  TEEC_SUCCESS: Initialization was successful.
 *              Another error code: Initialization was not successful.
 */
TEEC_Result TEEC_InitializeContext(const char* name, TEEC_Context* context);

/* TEEC_FinalizeContext
 *
 * This function finalizes an initialized TEE Context, closing the connection between the Client
 * Application and the TEE. The Client Application MUST only call this function when all Sessions
 * inside this TEE Context have been closed and all Shared Memory blocks have been released.
 *
 * Parameters:
 * context  An initialized TEEC_Context structure which is to be finalized.
 */
void TEEC_FinalizeContext(TEEC_Context* context);

/* TEEC_RegisterSharedMemory
 *
 * This function registers a block of existing Client Application memory as a block of Shared Memory
 * within the scope of the specified TEE Context, in accordance with the parameters which have been
 * set by the Client Application inside the sharedMem structure.
 *
 * Parameters:
 * context      A pointer to an initialized TEE Context.
 *
 * sharedMem    A pointer to a Shared Memory structure to register:
 *                  The buffer, size, and flags fields of the sharedMem structure MUST be set in
 *                  accordance with the specification described above.
 *
 * Return:
 * TEEC_Result  TEEC_SUCCESS: The registration was successful.
 *              TEEC_ERROR_OUT_OF_MEMORY: The registration could not be completed because of a lack
 *                  of resources.
 *              Another error code: Registration was not successful for another reason.
 */
TEEC_Result TEEC_RegisterSharedMemory(TEEC_Context* context, TEEC_SharedMemory* sharedMem);

/* TEEC_AllocateSharedMemory
 *
 * This function allocates a new block of memory as a block of Shared Memory within the scope of the
 * specified TEE Context, in accordance with the parameters which have been set by the Client
 * Application inside the sharedMem structure.
 *
 * Parameters:
 * context      A pointer to an initialized TEE Context.
 *
 * sharedMem    A pointer to a Shared Memory structure to allocate:
 *                  * Before calling this function, the Client Application MUST have set the size,
 *                    and flags fields.
 *                  * On return, for a successful allocation the Implementation MUST have set the
 *                    pointer buffer to the address of the allocated block, otherwise it MUST set
 *                    buffer to NULL.
 *
 * Return:
 * TEEC_Result  TEEC_SUCCESS: The allocation was successful.
 *              TEEC_ERROR_OUT_OF_MEMORY: The allocation could not be completed due to resource
 *                  constraints.
 *              Another error code: Allocation was not successful for another reason.
 */
TEEC_Result TEEC_AllocateSharedMemory(TEEC_Context* context, TEEC_SharedMemory* sharedMem);

/* TEEC_ReleaseSharedMemory
 *
 * This function deregisters or deallocates a previously initialized block of Shared Memory.
 *
 * Parameters:
 * sharedMem    A pointer to a valid Shared Memory structure.
 */
void TEEC_ReleaseSharedMemory(TEEC_SharedMemory* sharedMem);

/* TEEC_OpenSession
 *
 * This function opens a new Session between the Client Application and the specified Trusted
 * Application.
 *
 * Parameters:
 * context          A pointer to an initialized TEE Context.
 *
 * session          A pointer to a Session structure to open.
 *
 * destination      A pointer to a structure containing the UUID of the destination Trusted
 *                  Application.
 *
 * connectionMethod The method of connection to use.
 *
 * connectionData   Any necessary data required to support the connection method chosen.
 *
 * operation        A pointer to an Operation containing a set of Parameters to exchange with the
 *                  Trusted Application, or NULL if no parameters are to be exchanged or if the
 *                  operation cannot be cancelled.
 *
 * returnOrigin     A pointer to a variable which will contain the return origin. This field may be
 *                  NULL if the return origin is not needed.
 *
 * Return:
 * TEEC_Result  * If the returnOrigin is different from TEEC_ORIGIN_TRUSTED_APP, a TEEC Return Code.
 *              * If the returnOrigin is equal to TEEC_ORIGIN_TRUSTED_APP, a return code defined by
 *                the protocol between the Client Application and the Trusted Application. In any
 *                case, a return code set to TEEC_SUCCESS means that the session was successfully
 *                opened and a return code different from TEEC_SUCCESS means that the session
 *                opening failed.
 */
TEEC_Result TEEC_OpenSession(TEEC_Context* context, TEEC_Session* session,
                             const TEEC_UUID* destination, uint32_t connectionMethod,
                             const void* connectionData, TEEC_Operation* operation,
                             uint32_t* returnOrigin);

/* TEEC_CloseSession
 *
 * This function closes a Session which has been opened with a Trusted Application.
 *
 * Parameters:
 * session  The session to close.
 */
void TEEC_CloseSession(TEEC_Session* session);

/* TEEC_InvokeCommand
 *
 * This function invokes a Command within the specified Session.
 *
 * Parameters:
 * session      The open Session in which the command will be invoked.
 * commandID    The identifier of the Command within the Trusted Application to invoke. The meaning
 *              of each Command Identifier must be defined in the protocol exposed by the Trusted
 *              Application.
 * operation    A pointer to a Client Application initialized TEEC_Operation structure, or NULL if
 *              there is no payload to send or if the Command does not need to support cancellation.
 * returnOrigin A pointer to a variable which will contain the return origin. This field may be NULL
 *              if the return origin is not needed.
 *
 * Return:
 * TEEC_Result  * If the returnOrigin is different from TEEC_ORIGIN_TRUSTED_APP, a TEEC Return Code.
 *              * If the returnOrigin is TEEC_ORIGIN_TRUSTED_APP, a return code defined by the
 *                Trusted Application protocol.
 */
TEEC_Result TEEC_InvokeCommand(TEEC_Session* session, uint32_t commandID, TEEC_Operation* operation,
                               uint32_t* returnOrigin);

/* TEEC_RequestCancellation
 *
 * This function requests the cancellation of a pending open Session operation or a Command
 * invocation operation. As this is a synchronous API, this function must be called from a thread
 * other than the one executing the TEEC_OpenSession or TEEC_InvokeCommand function.
 *
 * Parameters:
 * operation    A pointer to a Client Application instantiated Operation structure.
 */
void TEEC_RequestCancellation(TEEC_Operation* operation);

__END_CDECLS
