mbed-os/components/TARGET_PSA/TARGET_MBED_SPM/spm_client.h

113 lines
3.8 KiB
C

/* Copyright (c) 2017-2018 ARM Limited
*
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef __MBED_SPM_CLIENT_H__
#define __MBED_SPM_CLIENT_H__
/** @addtogroup SPM
* The Secure Partition Manager (SPM) is responsible for isolating software in partitions,@n
* managing the execution of software within partitions and providing IPC between partitions.
* @{
*/
/* -------------------------------------- Includes ----------------------------------- */
#include "psa_defs.h"
/* --------------------------------- extern "C" wrapper ------------------------------ */
#ifdef __cplusplus
extern "C" {
#endif
/** @addtogroup Client-API
* The C interface for connecting to a Root of Trust Service and calling it.@n
* All functions are blocking.
* @{
*/
/**
* Retrieve the version of the PSA Framework API that is implemented.
*
* @note The PSA Framework API version is made of the major and minor versions as follows:
* @code
* ((major_version << 8) | minor_version)
* @endcode
* @return The PSA Framework API version
*/
uint32_t psa_framework_version(void);
/**
* Retrieve the minor version of a Root of Trust Service by its SID.
*
* @param[in] sid The Root of Trust Service ID
* @return Minor version of Root of Trust Service or PSA_VERSION_NONE if Root of Trust Service is not present on the system.
*/
uint32_t psa_version(uint32_t sid);
/**
* Connect to a Root of Trust Service by its SID.
*
* @note A minor version number must be provided to allow the Root of Trust Service to handle minor variations of the protocol.
*
* @param[in] sid The Root of Trust Service ID.
* @param[in] minor_version The minor version to be used for this connection.
* @return A handle for the connection if greater than 0, else:@n
* @a PSA_CONNECTION_REFUSED if the Root of Trust Service cannot handle any more connections.@n
*/
psa_handle_t psa_connect(uint32_t sid, uint32_t minor_version);
/**
* Call a connected Root of Trust Service.@n
* The caller must provide an array of ::psa_invec structures as the input payload.
*
* @param[in] handle Handle for the connection.
* @param[in] in_vec Array of ::psa_invec structures.
* @param[in] in_len Number of ::psa_invec structures in in_vec. (At most ::PSA_MAX_IOVEC - out_len)
* @param[out] out_vec Array of ::psa_outvec structures for optional Root of Trust Service response.
* @param[in] out_len Number of ::psa_outvec structures in out_vec. (At most ::PSA_MAX_IOVEC - in_len)
* @return 0 for success or@n
* @a positive numbers for application-specific return code.
* @a negative numbers for application-specific error code.
* @a PSA_DROP_CONNECTION if the connection has been dropped by the RoT Service.
*/
psa_status_t psa_call(
psa_handle_t handle,
const psa_invec *in_vec,
size_t in_len,
const psa_outvec *out_vec,
size_t out_len
);
/**
* Close a connection to a Root of Trust Service.
* Sends the ::PSA_IPC_DISCONNECT message to the Root of Trust Service, so it can clean up resources.
*
* @param[in] handle Handle for the connection.
*/
void psa_close(psa_handle_t handle);
/** @}*/ // end of Client-API group
#ifdef __cplusplus
}
#endif
/** @}*/ // end of SPM group
#endif /* __MBED_SPM_CLIENT_H__ */