FF-A: Direct Messaging from VMs to SPs

Hypervisor forward direct request from a VM, to the SWd if receiver is
 an SP.

Change-Id: Id2a2142ddc8c13c8e371347308c78c8a1ebc0b4a
Signed-off-by: J-Alves <joao.alves@arm.com>
diff --git a/src/api.c b/src/api.c
index 70df9f7..9510042 100644
--- a/src/api.c
+++ b/src/api.c
@@ -1757,7 +1757,7 @@
 					     struct vcpu *current,
 					     struct vcpu **next)
 {
-	struct ffa_value ret = (struct ffa_value){.func = FFA_INTERRUPT_32};
+	struct ffa_value ret;
 	struct vm *receiver_vm;
 	struct vcpu *receiver_vcpu;
 	struct two_vcpu_locked vcpus_locked;
@@ -1771,6 +1771,13 @@
 		return ffa_error(FFA_INVALID_PARAMETERS);
 	}
 
+	if (arch_other_world_direct_request_forward(receiver_vm_id, args,
+						    &ret)) {
+		return ret;
+	}
+
+	ret = (struct ffa_value){.func = FFA_INTERRUPT_32};
+
 	receiver_vm = vm_find(receiver_vm_id);
 	if (receiver_vm == NULL) {
 		return ffa_error(FFA_INVALID_PARAMETERS);