Moving test VM interrupt handling to arch directory.

Also abstract out GIC configuration.

Bug: 117270899
Change-Id: I8679eb0758ab04850d8ac3af15e5c26a8da76912
diff --git a/build/toolchain/embedded.gni b/build/toolchain/embedded.gni
index 8971029..d96d86e 100644
--- a/build/toolchain/embedded.gni
+++ b/build/toolchain/embedded.gni
@@ -232,6 +232,12 @@
          "\"max_cpus\" must be defined for ${target_name}.")
   assert(defined(invoker.max_vms),
          "\"max_vms\" must be defined for ${target_name}.")
+  if (invoker.gic_version == 3 || invoker.gic_version == 4) {
+    assert(defined(invoker.gicd_base_address),
+           "\"gicd_base_address\" must be defined for ${target_name}.")
+    assert(defined(invoker.gicr_base_address),
+           "\"gicr_base_address\" must be defined for ${target_name}.")
+  }
 
   embedded_platform_toolchain(target_name) {
     forward_variables_from(invoker,
@@ -246,10 +252,17 @@
     tool_prefix = "aarch64-linux-gnu-"  # TODO: this isn't right for bare metal but it works.
     extra_cflags = "-mcpu=${invoker.cpu} -mstrict-align"
 
+    extra_defines = ""
     if (invoker.use_pl011) {
       assert(defined(invoker.pl011_base_address),
              "\"pl011_base_address\" must be defined for ${target_name}.")
-      extra_defines = "-DPL011_BASE=${invoker.pl011_base_address}"
+      extra_defines += " -DPL011_BASE=${invoker.pl011_base_address}"
+    }
+    if (invoker.gic_version > 0) {
+      extra_defines += " -DGIC_VERSION=${invoker.gic_version}"
+    }
+    if (invoker.gic_version == 3 || invoker.gic_version == 4) {
+      extra_defines += " -DGICD_BASE=${invoker.gicd_base_address} -DGICR_BASE=${invoker.gicr_base_address}"
     }
 
     toolchain_args = {
diff --git a/project/reference b/project/reference
index 75da2d1..f1aa19e 160000
--- a/project/reference
+++ b/project/reference
@@ -1 +1 @@
-Subproject commit 75da2d171f0641c9a637885423c2ece8a1d08015
+Subproject commit f1aa19eba6b8160cac7b4c4f2368b2885df2621c
diff --git a/src/arch/aarch64/hftest/BUILD.gn b/src/arch/aarch64/hftest/BUILD.gn
index 63ff813..dca75b0 100644
--- a/src/arch/aarch64/hftest/BUILD.gn
+++ b/src/arch/aarch64/hftest/BUILD.gn
@@ -39,3 +39,12 @@
     "//src/arch/aarch64:smc",
   ]
 }
+
+# Exception handlers for interrupts
+source_set("interrupts_gicv3") {
+  testonly = true
+  sources = [
+    "exceptions.S",
+    "interrupts_gicv3.c",
+  ]
+}
diff --git a/test/vmapi/exceptions.S b/src/arch/aarch64/hftest/exceptions.S
similarity index 100%
rename from test/vmapi/exceptions.S
rename to src/arch/aarch64/hftest/exceptions.S
diff --git a/test/vmapi/interrupts.c b/src/arch/aarch64/hftest/interrupts_gicv3.c
similarity index 98%
rename from test/vmapi/interrupts.c
rename to src/arch/aarch64/hftest/interrupts_gicv3.c
index 1c09532..01d331d 100644
--- a/test/vmapi/interrupts.c
+++ b/src/arch/aarch64/hftest/interrupts_gicv3.c
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-#include "interrupts.h"
+#include "hf/arch/vm/interrupts_gicv3.h"
 
 #include <stdbool.h>
 #include <stdint.h>
diff --git a/test/vmapi/interrupts.h b/src/arch/aarch64/inc/hf/arch/vm/interrupts_gicv3.h
similarity index 94%
rename from test/vmapi/interrupts.h
rename to src/arch/aarch64/inc/hf/arch/vm/interrupts_gicv3.h
index 01663e5..a581964 100644
--- a/test/vmapi/interrupts.h
+++ b/src/arch/aarch64/inc/hf/arch/vm/interrupts_gicv3.h
@@ -19,8 +19,10 @@
 #include <stdbool.h>
 #include <stdint.h>
 
-#define GICD_BASE 0x08000000
-#define GICR_BASE 0x080A0000
+#if GIC_VERSION != 3 && GIC_VERSION != 4
+#error This header should only be included for GICv3 or v4.
+#endif
+
 #define SGI_BASE (GICR_BASE + 0x10000)
 
 #define GICD_CTLR (*(volatile uint32_t *)(GICD_BASE + 0x0000))
diff --git a/test/vmapi/BUILD.gn b/test/vmapi/BUILD.gn
index 84feced..b8277f5 100644
--- a/test/vmapi/BUILD.gn
+++ b/test/vmapi/BUILD.gn
@@ -48,12 +48,11 @@
   testonly = true
 
   sources = [
-    "exceptions.S",
     "gicv3.c",
-    "interrupts.c",
   ]
 
   deps = [
+    "//src/arch/${plat_arch}/hftest:interrupts_gicv3",
     "//test/hftest:hftest_primary_vm",
   ]
 }
diff --git a/test/vmapi/gicv3.c b/test/vmapi/gicv3.c
index 5d54efe..fdf485c 100644
--- a/test/vmapi/gicv3.c
+++ b/test/vmapi/gicv3.c
@@ -14,13 +14,14 @@
  * limitations under the License.
  */
 
+#include "hf/arch/vm/interrupts_gicv3.h"
+
 #include "hf/dlog.h"
 
 #include "vmapi/hf/call.h"
 
 #include "../msr.h"
 #include "hftest.h"
-#include "interrupts.h"
 
 #define PPI_IRQ_BASE 16
 #define PHYSICAL_TIMER_IRQ (PPI_IRQ_BASE + 14)