feat(rmm): add support for multiple rec and cpu
Changes to support creating and
executing multiple rec on multiple cpus.
Added per REC shared buffer between Host and Rec.
Signed-off-by: Shruti Gupta <shruti.gupta@arm.com>
Change-Id: Ib6dbd814ee9f68df4a53f9cfdc8b7f9c905c35fe
diff --git a/realm/realm_shared_data.c b/realm/realm_shared_data.c
index da09b53..2d09f78 100644
--- a/realm/realm_shared_data.c
+++ b/realm/realm_shared_data.c
@@ -5,6 +5,8 @@
*/
#include <string.h>
+#include <arch_helpers.h>
+#include <assert.h>
#include <host_shared_data.h>
/**
@@ -26,24 +28,34 @@
/*
* Get guest mapped shared buffer pointer
*/
-host_shared_data_t *realm_get_shared_structure(void)
+host_shared_data_t *realm_get_my_shared_structure(void)
{
- return guest_shared_data;
+ return &guest_shared_data[read_mpidr_el1() & MPID_MASK];
}
/*
* Return Host's data at index
*/
-u_register_t realm_shared_data_get_host_val(uint8_t index)
+u_register_t realm_shared_data_get_my_host_val(uint8_t index)
{
- return guest_shared_data->host_param_val[(index >= MAX_DATA_SIZE) ?
- (MAX_DATA_SIZE - 1) : index];
+ assert(index < MAX_DATA_SIZE);
+ return guest_shared_data[read_mpidr_el1() & MPID_MASK].host_param_val[index];
}
/*
- * Get command sent from Host to realm
+ * Get command sent from Host to this rec
*/
-uint8_t realm_shared_data_get_realm_cmd(void)
+uint8_t realm_shared_data_get_my_realm_cmd(void)
{
- return guest_shared_data->realm_cmd;
+ return guest_shared_data[read_mpidr_el1() & MPID_MASK].realm_cmd;
}
+
+/*
+ * Set data to be shared from this rec to Host
+ */
+void realm_shared_data_set_my_realm_val(uint8_t index, u_register_t val)
+{
+ assert(index < MAX_DATA_SIZE);
+ guest_shared_data[read_mpidr_el1() & MPID_MASK].realm_out_val[index] = val;
+}
+