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;
+}
+