summaryrefslogtreecommitdiff
path: root/nrfdemo/build/tfm/api_ns/platform/include/boot_hal.h
diff options
context:
space:
mode:
Diffstat (limited to 'nrfdemo/build/tfm/api_ns/platform/include/boot_hal.h')
-rw-r--r--nrfdemo/build/tfm/api_ns/platform/include/boot_hal.h150
1 files changed, 150 insertions, 0 deletions
diff --git a/nrfdemo/build/tfm/api_ns/platform/include/boot_hal.h b/nrfdemo/build/tfm/api_ns/platform/include/boot_hal.h
new file mode 100644
index 0000000..0238241
--- /dev/null
+++ b/nrfdemo/build/tfm/api_ns/platform/include/boot_hal.h
@@ -0,0 +1,150 @@
+/*
+ * Copyright (c) 2019-2023, Arm Limited. All rights reserved.
+ * Copyright (c) 2020 STMicroelectronics. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ *
+ */
+
+#ifndef __BOOT_HAL_H__
+#define __BOOT_HAL_H__
+
+#include <stdint.h>
+#include <stddef.h>
+#include <stdbool.h>
+#include "cmsis_compiler.h"
+
+/* Include header section */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct boot_arm_vector_table {
+ uint32_t msp;
+ uint32_t reset;
+};
+
+/*
+ * \brief It clears that part of the RAM which was used by MCUBoot, expect the
+ * TFM_SHARED_DATA area, which is used to pass data to the TF-M runtime.
+ *
+ * \note This function must be implemented per target platform by system
+ * integrator. If the bootloader has not loaded any secret to the shared
+ * RAM then this function can immediately return to shorten the boot-up
+ * time. Clearing RAM area can be done several way, it is platform
+ * dependent:
+ * - Overwritten with a pre-defined constant value (i.e.: 0).
+ * - Overwritten with a random value.
+ * - Change the secret if its location is known.
+ * - Set a register which can hide some part of the flash/RAM against
+ * next stage software components.
+ * - Etc.
+ */
+void boot_clear_ram_area(void);
+
+/*
+ * \brief Chain-loading the next image in the boot sequence.
+ * Can be overridden for platform specific initialization.
+ * \param[in] reset_handler_addr Address of next image's Reset_Handler() in
+ the boot chain (TF-M SPE, etc.)
+ */
+void boot_jump_to_next_image(uint32_t reset_handler_addr) __NO_RETURN;
+
+/**
+ * \brief Platform peripherals and devices initialization.
+ * Can be overridden for platform specific initialization.
+ *
+ * \return Returns 0 on success, non-zero otherwise
+ */
+int32_t boot_platform_init(void);
+
+/**
+ * \brief Perform later platform specific initialization. Runs at the end of the
+ * boot initialization phase, for platform-specific code that depends on
+ * other initialization code being run beforehand.
+ *
+ * \return Returns 0 on success, non-zero otherwise
+ */
+int32_t boot_platform_post_init(void);
+
+/**
+ * \brief Platform operation to start secure image.
+ * Can be overridden for platform specific initialization.
+ *
+ * \param[in] vt pointer to secure application vector table descriptor
+ */
+void boot_platform_quit(struct boot_arm_vector_table *vt) __NO_RETURN;
+
+/**
+ * \brief Platform operation to perform steps required before image load.
+ * Can be overridden for platform specific initialization.
+ *
+ * \param[in] image_id The ID of the image that is about to be loaded.
+ *
+ * \return Returns 0 on success, non-zero otherwise
+ */
+int boot_platform_pre_load(uint32_t image_id);
+
+/**
+ * \brief Platform operation to perform steps required after image load.
+ * Can be overridden for platform specific initialization.
+ *
+ * \param[in] image_id The ID of the image that has just been loaded.
+ *
+ * \return Returns 0 on success, non-zero otherwise
+ */
+int boot_platform_post_load(uint32_t image_id);
+
+/**
+ * Version of a SW component, to be encoded as "major.minor.revision+build_num".
+ */
+struct boot_measurement_version {
+ uint8_t major;
+ uint8_t minor;
+ uint16_t revision;
+ uint32_t build_num;
+};
+
+struct boot_measurement_metadata {
+ uint32_t measurement_type; /* Identifier of the measurement method
+ * used to compute the measurement value.
+ */
+ uint8_t signer_id[64]; /* Signer identity (hash of public key). */
+ size_t signer_id_size; /* Size of the signer's ID in bytes. */
+ char sw_type[10]; /* Representing the role of the SW component. */
+ struct boot_measurement_version sw_version; /* Version of the SW component */
+};
+
+/**
+ * \brief Stores single boot measurement and associated metadata in a
+ * non-persistent storage to a known location.
+ *
+ * \note The measurement values and associated metadata are stored at a known
+ * location where they can be accessed later at runtime from secure
+ * software.
+ *
+ * \param[in] index In which measurement slot to store,
+ * the largest allowed index is 63 (0x3F).
+ * \param[in] measurement Pointer to buffer that stores the
+ * measurement value.
+ * \param[in] measurement_size Size of the measurement value in bytes.
+ * \param[in] metadata Pointer to a structure, containing the
+ * associated metadata.
+ * \param[in] lock_measurement If true, it locks the measurement slot and
+ * it is not allowed the extend it anymore with
+ * additional measurement values.
+ *
+ * \return Returns 0 on success, non-zero otherwise.
+ */
+int boot_store_measurement(uint8_t index,
+ const uint8_t *measurement,
+ size_t measurement_size,
+ const struct boot_measurement_metadata *metadata,
+ bool lock_measurement);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __BOOT_HAL_H__ */