feat(ipi): introduce IPI paravirtualised interface

Interprocessor Interrupts (IPIs) allow an SP to send an interrupt to
itself on another CPU. This patch starts the implementation of this
feature and enables it for the case where the SP is in the RUNNING
state on the target_vcpu.

Signed-off-by: Daniel Boulby <daniel.boulby@arm.com>
Change-Id: Idd0e1a5863730ae0f169bd0f56ac3abcd2916870
diff --git a/inc/hf/hf_ipi.h b/inc/hf/hf_ipi.h
new file mode 100644
index 0000000..dd40b84
--- /dev/null
+++ b/inc/hf/hf_ipi.h
@@ -0,0 +1,18 @@
+/*
+ * Copyright 2024 The Hafnium Authors.
+ *
+ * Use of this source code is governed by a BSD-style
+ * license that can be found in the LICENSE file or at
+ * https://opensource.org/licenses/BSD-3-Clause.
+ */
+
+#pragma once
+
+#include "hf/types.h"
+#include "hf/vcpu.h"
+#include "hf/vm.h"
+
+void hf_ipi_init_interrupt(void);
+struct vcpu *hf_ipi_get_pending_target_vcpu(struct cpu *current);
+void hf_ipi_send_interrupt(struct vm *vm, ffa_vcpu_index_t target_vcpu_index);
+bool hf_ipi_handle(struct vcpu_locked target_vcpu_locked);