mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-25 06:19:56 +00:00

A Secure Partition is a software execution environment instantiated in S-EL0 that can be used to implement simple management and security services. Since S-EL0 is an unprivileged exception level, a Secure Partition relies on privileged firmware e.g. ARM Trusted Firmware to be granted access to system and processor resources. Essentially, it is a software sandbox that runs under the control of privileged software in the Secure World and accesses the following system resources: - Memory and device regions in the system address map. - PE system registers. - A range of asynchronous exceptions e.g. interrupts. - A range of synchronous exceptions e.g. SMC function identifiers. A Secure Partition enables privileged firmware to implement only the absolutely essential secure services in EL3 and instantiate the rest in a partition. Since the partition executes in S-EL0, its implementation cannot be overly complex. The component in ARM Trusted Firmware responsible for managing a Secure Partition is called the Secure Partition Manager (SPM). The SPM is responsible for the following: - Validating and allocating resources requested by a Secure Partition. - Implementing a well defined interface that is used for initialising a Secure Partition. - Implementing a well defined interface that is used by the normal world and other secure services for accessing the services exported by a Secure Partition. - Implementing a well defined interface that is used by a Secure Partition to fulfil service requests. - Instantiating the software execution environment required by a Secure Partition to fulfil a service request. Change-Id: I6f7862d6bba8732db5b73f54e789d717a35e802f Co-authored-by: Douglas Raillard <douglas.raillard@arm.com> Co-authored-by: Sandrine Bailleux <sandrine.bailleux@arm.com> Co-authored-by: Achin Gupta <achin.gupta@arm.com> Co-authored-by: Antonio Nino Diaz <antonio.ninodiaz@arm.com> Signed-off-by: Antonio Nino Diaz <antonio.ninodiaz@arm.com>
55 lines
1.6 KiB
C
55 lines
1.6 KiB
C
/*
|
|
* Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
|
|
*
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
*/
|
|
|
|
#ifndef __PARAM_HEADER_H__
|
|
#define __PARAM_HEADER_H__
|
|
|
|
/* Param header types */
|
|
#define PARAM_EP 0x01
|
|
#define PARAM_IMAGE_BINARY 0x02
|
|
#define PARAM_BL31 0x03
|
|
#define PARAM_BL_LOAD_INFO 0x04
|
|
#define PARAM_BL_PARAMS 0x05
|
|
#define PARAM_PSCI_LIB_ARGS 0x06
|
|
#define PARAM_SP_IMAGE_BOOT_INFO 0x07
|
|
|
|
/* Param header version */
|
|
#define VERSION_1 0x01
|
|
#define VERSION_2 0x02
|
|
|
|
#define SET_PARAM_HEAD(_p, _type, _ver, _attr) do { \
|
|
(_p)->h.type = (uint8_t)(_type); \
|
|
(_p)->h.version = (uint8_t)(_ver); \
|
|
(_p)->h.size = (uint16_t)sizeof(*_p); \
|
|
(_p)->h.attr = (uint32_t)(_attr) ; \
|
|
} while (0)
|
|
|
|
/* Following is used for populating structure members statically. */
|
|
#define SET_STATIC_PARAM_HEAD(_p, _type, _ver, _p_type, _attr) \
|
|
._p.h.type = (uint8_t)(_type), \
|
|
._p.h.version = (uint8_t)(_ver), \
|
|
._p.h.size = (uint16_t)sizeof(_p_type), \
|
|
._p.h.attr = (uint32_t)(_attr)
|
|
|
|
#ifndef __ASSEMBLY__
|
|
|
|
#include <types.h>
|
|
|
|
/***************************************************************************
|
|
* This structure provides version information and the size of the
|
|
* structure, attributes for the structure it represents
|
|
***************************************************************************/
|
|
typedef struct param_header {
|
|
uint8_t type; /* type of the structure */
|
|
uint8_t version; /* version of this structure */
|
|
uint16_t size; /* size of this structure in bytes */
|
|
uint32_t attr; /* attributes: unused bits SBZ */
|
|
} param_header_t;
|
|
|
|
#endif /*__ASSEMBLY__*/
|
|
|
|
#endif /* __PARAM_HEADER_H__ */
|
|
|