refactor(spm): `ffa_memory_access` constructors
Add `ffa_memory_access_init_permissions` and
`ffa_memory_access_init_permissions_from_mem_func` helpers.
Change-Id: I9a5bb09e7f230a65decff7f58a0c188aff3e7449
Signed-off-by: Karl Meakin <karl.meakin@arm.com>
diff --git a/include/runtime_services/ffa_helpers.h b/include/runtime_services/ffa_helpers.h
index 4f2bb02..91a7a6e 100644
--- a/include/runtime_services/ffa_helpers.h
+++ b/include/runtime_services/ffa_helpers.h
@@ -728,6 +728,12 @@
struct ffa_value ffa_partition_info_get_regs(const struct ffa_uuid uuid,
const uint16_t start_index,
const uint16_t tag);
+
+struct ffa_memory_access ffa_memory_access_init_permissions(
+ ffa_id_t receiver_id, enum ffa_data_access data_access,
+ enum ffa_instruction_access instruction_access,
+ ffa_memory_receiver_flags_t flags);
+
#endif /* __ASSEMBLY__ */
#endif /* FFA_HELPERS_H */
diff --git a/include/runtime_services/spm_common.h b/include/runtime_services/spm_common.h
index 0c8ade1..fc7ddd7 100644
--- a/include/runtime_services/spm_common.h
+++ b/include/runtime_services/spm_common.h
@@ -139,4 +139,9 @@
bool ffa_partition_info_regs_helper(const struct ffa_uuid uuid,
const struct ffa_partition_info *expected,
const uint16_t expected_size);
+
+struct ffa_memory_access ffa_memory_access_init_permissions_from_mem_func(
+ ffa_id_t receiver_id,
+ uint32_t mem_func);
+
#endif /* SPM_COMMON_H */
diff --git a/tftf/tests/runtime_services/secure_service/ffa_helpers.c b/tftf/tests/runtime_services/secure_service/ffa_helpers.c
index 601f2d3..9447a23 100644
--- a/tftf/tests/runtime_services/secure_service/ffa_helpers.c
+++ b/tftf/tests/runtime_services/secure_service/ffa_helpers.c
@@ -703,3 +703,23 @@
return ffa_service_call(&args);
}
+
+/**
+ * Initializes receiver permissions in a memory transaction descriptor.
+ */
+struct ffa_memory_access ffa_memory_access_init_permissions(
+ ffa_id_t receiver_id, enum ffa_data_access data_access,
+ enum ffa_instruction_access instruction_access,
+ ffa_memory_receiver_flags_t flags)
+{
+ struct ffa_memory_access access;
+ access.reserved_0 = 0;
+ access.composite_memory_region_offset = 0;
+ access.receiver_permissions.flags = flags;
+ access.receiver_permissions.receiver = receiver_id;
+ access.receiver_permissions.permissions.data_access = data_access;
+ access.receiver_permissions.permissions.instruction_access =
+ instruction_access;
+
+ return access;
+}
diff --git a/tftf/tests/runtime_services/secure_service/spm_common.c b/tftf/tests/runtime_services/secure_service/spm_common.c
index 2e6d257..e76564a 100644
--- a/tftf/tests/runtime_services/secure_service/spm_common.c
+++ b/tftf/tests/runtime_services/secure_service/spm_common.c
@@ -610,3 +610,22 @@
{
return configure_trusted_wdog_interrupt(source, dest, false);
}
+
+/**
+ * Initializes receiver permissions in a memory transaction descriptor, using
+ * `mem_func` to determine the appropriate permissions.
+ */
+struct ffa_memory_access ffa_memory_access_init_permissions_from_mem_func(
+ ffa_id_t receiver_id, uint32_t mem_func)
+{
+
+ enum ffa_instruction_access instruction_access =
+ FFA_INSTRUCTION_ACCESS_NOT_SPECIFIED;
+ enum ffa_data_access data_access =
+ (mem_func == FFA_MEM_DONATE_SMC32)
+ ? FFA_DATA_ACCESS_NOT_SPECIFIED
+ : FFA_DATA_ACCESS_RW;
+
+ return ffa_memory_access_init_permissions(receiver_id, data_access,
+ instruction_access, 0);
+}