SPM: Add header files for partition static load
- Create two new header files that define the partition and service
static data type.
- Create a header file for partition static loading definitions.
Change-Id: I73dafef7b587d3cad6fa35ff4788365a9936c062
Signed-off-by: Mingyang Sun <mingyang.sun@arm.com>
diff --git a/secure_fw/include/load/partition_defs.h b/secure_fw/include/load/partition_defs.h
new file mode 100644
index 0000000..573043e
--- /dev/null
+++ b/secure_fw/include/load/partition_defs.h
@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) 2021, Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ *
+ */
+
+#ifndef __PARTITION_DEFS_H__
+#define __PARTITION_DEFS_H__
+
+#include <stddef.h>
+#include <stdint.h>
+
+/* Encode a magic number into version for validating partition info */
+#define PARTITION_INFO_VERSION_MASK (0x0000FFFF)
+#define PARTITION_INFO_MAGIC_MASK (0xFFFF0000)
+#define PARTITION_INFO_MAGIC (0x5F5F0000)
+
+/* Privileged definitions for partition thread mode */
+#define TFM_PARTITION_UNPRIVILEGED_MODE (0U)
+#define TFM_PARTITION_PRIVILEGED_MODE (1U)
+
+/*
+ * Partition static data - flags
+ * bit 7-0: priority
+ * bit 8: 1 - PSA_ROT, 0 - APP_ROT
+ * bit 9: 1 - IPC model, 0 - SFN model
+ */
+#define PARTITION_PRI_HIGHEST (0x0)
+#define PARTITION_PRI_HIGH (0xF)
+#define PARTITION_PRI_NORMAL (0x1F)
+#define PARTITION_PRI_LOW (0x7F)
+#define PARTITION_PRI_LOWEST (0xFF)
+#define PARTITION_PRI_MASK (0xFF)
+
+#define SPM_PART_FLAG_PSA_ROT (1U << 8)
+#define SPM_PART_FLAG_IPC (1U << 9)
+
+#if TFM_LVL == 3
+/**
+ * Holds isolation memory regions used by a partition. Could be extended if
+ * more isolation regions are required.
+ */
+struct private_data_t {
+ uintptr_t start;
+ uintptr_t limit;
+};
+#endif
+
+/* Common partition structure type */
+struct partition_static_info_t {
+ uint32_t psa_ff_ver; /* Encode the version with magic */
+ uint32_t pid; /* Partition ID */
+ uint32_t flags; /* ARoT/PRoT, SFN/IPC, priority */
+ uintptr_t entry; /* Entry point */
+ size_t stack_size; /* Stack size */
+ size_t heap_size; /* Heap size */
+ uint32_t ndeps; /* Dependency number */
+ uint32_t nservices; /* Service number */
+ uintptr_t plat_cookie; /* A cookie for platform binding */
+#if TFM_LVL == 3
+ struct private_data_t mems; /* Partition isolation memory data */
+#endif
+ uintptr_t vars[]; /* Struct extendable indicator */
+} __attribute__((aligned(4)));
+
+#endif /* __PARTITION_DEFS_H__ */