Index: trunk/src/VBox/VMM/VMMR3/APIC.cpp
===================================================================
--- trunk/src/VBox/VMM/VMMR3/APIC.cpp	(revision 107276)
+++ trunk/src/VBox/VMM/VMMR3/APIC.cpp	(revision 107308)
@@ -1448,5 +1448,5 @@
      * Register the APIC with PDM.
      */
-    rc = PDMDevHlpApicRegister(pDevIns);
+    rc = PDMDevHlpIcRegister(pDevIns);
     AssertLogRelRCReturn(rc, rc);
 
Index: trunk/src/VBox/VMM/VMMR3/GICR3.cpp
===================================================================
--- trunk/src/VBox/VMM/VMMR3/GICR3.cpp	(revision 107276)
+++ trunk/src/VBox/VMM/VMMR3/GICR3.cpp	(revision 107308)
@@ -33,5 +33,5 @@
 #include <VBox/log.h>
 #include "GICInternal.h"
-#include <VBox/vmm/gic.h>
+#include <VBox/vmm/pdmgic.h>
 #include <VBox/vmm/cpum.h>
 #include <VBox/vmm/hm.h>
@@ -425,5 +425,8 @@
      * Register the GIC with PDM.
      */
-    rc = PDMDevHlpApicRegister(pDevIns);
+    rc = PDMDevHlpIcRegister(pDevIns);
+    AssertLogRelRCReturn(rc, rc);
+
+    rc = PDMGicRegisterBackend(pVM, PDMGICBACKENDTYPE_VBOX, &g_GicBackend);
     AssertLogRelRCReturn(rc, rc);
 
Index: trunk/src/VBox/VMM/VMMR3/GICR3Nem-darwin.cpp
===================================================================
--- trunk/src/VBox/VMM/VMMR3/GICR3Nem-darwin.cpp	(revision 107276)
+++ trunk/src/VBox/VMM/VMMR3/GICR3Nem-darwin.cpp	(revision 107308)
@@ -33,6 +33,6 @@
 #include <VBox/log.h>
 #include "GICInternal.h"
-#include "NEMInternal.h" /* Need access to the VM file descriptor. */
-#include <VBox/vmm/gic.h>
+#include "NEMInternal.h" /* Need access to the VM file descriptor and for GIC API currently implemented in NEM. */
+#include <VBox/vmm/pdmgic.h>
 #include <VBox/vmm/cpum.h>
 #include <VBox/vmm/hm.h>
@@ -46,30 +46,19 @@
 
 /*********************************************************************************************************************************
-*   Defined Constants And Macros                                                                                                 *
-*********************************************************************************************************************************/
-
-
-/*********************************************************************************************************************************
 *   Structures and Typedefs                                                                                                      *
 *********************************************************************************************************************************/
 
 /**
- * GICKvm PDM instance data (per-VM).
+ * GIC Hypervisor.Framework PDM instance data (per-VM).
  */
-typedef struct GICKVMDEV
+typedef struct GICHVFDEV
 {
     /** Pointer to the PDM device instance. */
     PPDMDEVINSR3        pDevIns;
-} GICKVMDEV;
+} GICHVFDEV;
 /** Pointer to a GIC KVM device. */
-typedef GICKVMDEV *PGICKVMDEV;
+typedef GICHVFDEV *PGICHVFDEV;
 /** Pointer to a const GIC KVM device. */
-typedef GICKVMDEV const *PCGICKVMDEV;
-
-
-/*********************************************************************************************************************************
-*   Global Variables                                                                                                             *
-*********************************************************************************************************************************/
-
+typedef GICHVFDEV const *PCGICHVFDEV;
 
 
@@ -77,8 +66,8 @@
  * @interface_method_impl{PDMDEVREG,pfnConstruct}
  */
-DECLCALLBACK(int) gicR3NemConstruct(PPDMDEVINS pDevIns, int iInstance, PCFGMNODE pCfg)
+DECLCALLBACK(int) gicR3HvfConstruct(PPDMDEVINS pDevIns, int iInstance, PCFGMNODE pCfg)
 {
     PDMDEV_CHECK_VERSIONS_RETURN(pDevIns);
-    PGICKVMDEV      pThis    = PDMDEVINS_2_DATA(pDevIns, PGICKVMDEV);
+    PGICHVFDEV      pThis    = PDMDEVINS_2_DATA(pDevIns, PGICHVFDEV);
     PVM             pVM      = PDMDevHlpGetVM(pDevIns);
     PGIC            pGic     = VM_TO_GIC(pVM);
@@ -91,5 +80,4 @@
      */
     pGic->pDevInsR3 = pDevIns;
-    pGic->fNemGic   = true;
     pThis->pDevIns  = pDevIns;
 
@@ -103,5 +91,8 @@
      * Register the GIC with PDM.
      */
-    rc = PDMDevHlpApicRegister(pDevIns);
+    rc = PDMDevHlpIcRegister(pDevIns);
+    AssertLogRelRCReturn(rc, rc);
+
+    rc = PDMGicRegisterBackend(pVM, PDMGICBACKENDTYPE_HVF, &g_GicHvfBackend);
     AssertLogRelRCReturn(rc, rc);
 
@@ -131,5 +122,5 @@
     /* .szRCMod = */                "VMMRC.rc",
     /* .szR0Mod = */                "VMMR0.r0",
-    /* .pfnConstruct = */           gicR3NemConstruct,
+    /* .pfnConstruct = */           gicR3HvfConstruct,
     /* .pfnDestruct = */            NULL,
     /* .pfnRelocate = */            NULL,
@@ -159,4 +150,16 @@
 };
 
+
+/**
+ * The Hypervisor.Framework GIC backend.
+ */
+const PDMGICBACKEND g_GicHvfBackend =
+{
+    /* .pfnReadSysReg = */  NEMR3GicReadSysReg,
+    /* .pfnWriteSysReg = */ NEMR3GicWriteSysReg,
+    /* .pfnSetSpi = */      NEMR3GicSetSpi,
+    /* .pfnSetPpi = */      NEMR3GicSetPpi,
+};
+
 #endif /* !VBOX_DEVICE_STRUCT_TESTCASE */
 
Index: trunk/src/VBox/VMM/VMMR3/GICR3Nem-linux.cpp
===================================================================
--- trunk/src/VBox/VMM/VMMR3/GICR3Nem-linux.cpp	(revision 107276)
+++ trunk/src/VBox/VMM/VMMR3/GICR3Nem-linux.cpp	(revision 107308)
@@ -34,5 +34,5 @@
 #include "GICInternal.h"
 #include "NEMInternal.h" /* Need access to the VM file descriptor. */
-#include <VBox/vmm/gic.h>
+#include <VBox/vmm/pdmgic.h>
 #include <VBox/vmm/cpum.h>
 #include <VBox/vmm/hm.h>
@@ -101,5 +101,5 @@
 
 /**
- * Common worker for GICR3KvmSpiSet() and GICR3KvmPpiSet().
+ * Common worker for gicR3KvmSpiSet() and gicR3KvmPpiSet().
  *
  * @returns VBox status code.
@@ -138,5 +138,5 @@
  * @param   fAsserted   Flag whether the interrupt is asserted (true) or not (false).
  */
-VMMR3_INT_DECL(int) GICR3NemSpiSet(PVMCC pVM, uint32_t uIntId, bool fAsserted)
+static DECLCALLBACK(int) gicR3KvmSetSpi(PVMCC pVM, uint32_t uIntId, bool fAsserted)
 {
     PGIC pGic = VM_TO_GIC(pVM);
@@ -157,9 +157,9 @@
  * @param   fAsserted   Flag whether the interrupt is asserted (true) or not (false).
  */
-VMMR3_INT_DECL(int) GICR3NemPpiSet(PVMCPUCC pVCpu, uint32_t uIntId, bool fAsserted)
+static DECLCALLBACK(int) gicR3KvmSetPpi(PVMCPUCC pVCpu, uint32_t uIntId, bool fAsserted)
 {
     PPDMDEVINS pDevIns = VMCPU_TO_DEVINS(pVCpu);
 
-    return gicR3KvmSetIrq(pDevIns, pVCpu->idCpu, KVM_ARM_IRQ_TYPE_SPI,
+    return gicR3KvmSetIrq(pDevIns, pVCpu->idCpu, KVM_ARM_IRQ_TYPE_PPI,
                           uIntId + GIC_INTID_RANGE_PPI_START, fAsserted);
 }
@@ -294,5 +294,8 @@
      * Register the GIC with PDM.
      */
-    rc = PDMDevHlpApicRegister(pDevIns);
+    rc = PDMDevHlpIcRegister(pDevIns);
+    AssertLogRelRCReturn(rc, rc);
+
+    rc = PDMGicRegisterBackend(pVM, PDMGICBACKENDTYPE_KVM, &g_GicKvmBackend);
     AssertLogRelRCReturn(rc, rc);
 
@@ -405,4 +408,15 @@
 };
 
+/**
+ * The KVM GIC backend.
+ */
+const PDMGICBACKEND g_GicKvmBackend =
+{
+    /* .pfnReadSysReg = */  NULL,
+    /* .pfnWriteSysReg = */ NULL,
+    /* .pfnSetSpi = */      gicR3KvmSetSpi,
+    /* .pfnSetPpi = */      gicR3KvmSetPpi,
+};
+
 #endif /* !VBOX_DEVICE_STRUCT_TESTCASE */
 
Index: trunk/src/VBox/VMM/VMMR3/GICR3Nem-win.cpp
===================================================================
--- trunk/src/VBox/VMM/VMMR3/GICR3Nem-win.cpp	(revision 107276)
+++ trunk/src/VBox/VMM/VMMR3/GICR3Nem-win.cpp	(revision 107308)
@@ -38,5 +38,5 @@
 #include "GICInternal.h"
 #include "NEMInternal.h" /* Need access to the partition handle. */
-#include <VBox/vmm/gic.h>
+#include <VBox/vmm/pdmgic.h>
 #include <VBox/vmm/cpum.h>
 #include <VBox/vmm/hm.h>
@@ -70,7 +70,7 @@
     WHV_PARTITION_HANDLE hPartition;
 } GICHVDEV;
-/** Pointer to a GIC KVM device. */
+/** Pointer to a GIC Hyper-V device. */
 typedef GICHVDEV *PGICHVDEV;
-/** Pointer to a const GIC KVM device. */
+/** Pointer to a const GIC Hyper-V device. */
 typedef GICHVDEV const *PCGICHVDEV;
 
@@ -124,8 +124,8 @@
 
 /**
- * Common worker for GICR3KvmSpiSet() and GICR3KvmPpiSet().
+ * Common worker for gicR3HvSetSpi() and gicR3HvSetPpi().
  *
  * @returns VBox status code.
- * @param   pDevIns     The PDM KVM GIC device instance.
+ * @param   pDevIns     The PDM Hyper-V GIC device instance.
  * @param   idCpu       The CPU ID for which the interrupt is updated (only valid for PPIs).
  * @param   fPpi        Flag whether this is a PPI or SPI.
@@ -163,5 +163,5 @@
 
 /**
- * Sets the given SPI inside the in-kernel KVM GIC.
+ * Sets the given SPI inside the in-kernel Hyper-V GIC.
  *
  * @returns VBox status code.
@@ -170,5 +170,5 @@
  * @param   fAsserted   Flag whether the interrupt is asserted (true) or not (false).
  */
-VMMR3_INT_DECL(int) GICR3NemSpiSet(PVMCC pVM, uint32_t uIntId, bool fAsserted)
+static DECLCALLBACK(int) gicR3HvSetSpi(PVMCC pVM, uint32_t uIntId, bool fAsserted)
 {
     PGIC pGic = VM_TO_GIC(pVM);
@@ -182,5 +182,5 @@
 
 /**
- * Sets the given PPI inside the in-kernel KVM GIC.
+ * Sets the given PPI inside the in-kernel Hyper-V GIC.
  *
  * @returns VBox status code.
@@ -189,5 +189,5 @@
  * @param   fAsserted   Flag whether the interrupt is asserted (true) or not (false).
  */
-VMMR3_INT_DECL(int) GICR3NemPpiSet(PVMCPUCC pVCpu, uint32_t uIntId, bool fAsserted)
+static DECLCALLBACK(int) gicR3HvSetPpi(PVMCPUCC pVCpu, uint32_t uIntId, bool fAsserted)
 {
     PPDMDEVINS pDevIns = VMCPU_TO_DEVINS(pVCpu);
@@ -259,5 +259,8 @@
      * Register the GIC with PDM.
      */
-    rc = PDMDevHlpApicRegister(pDevIns);
+    rc = PDMDevHlpIcRegister(pDevIns);
+    AssertLogRelRCReturn(rc, rc);
+
+    rc = PDMGicRegisterBackend(pVM, PDMGICBACKENDTYPE_HYPERV, &g_GicHvBackend);
     AssertLogRelRCReturn(rc, rc);
 
@@ -331,4 +334,15 @@
 };
 
+/**
+ * The Hypervisor.Framework GIC backend.
+ */
+const PDMGICBACKEND g_GicHvfBackend =
+{
+    /* .pfnReadSysReg = */  NULL,
+    /* .pfnWriteSysReg = */ NULL,
+    /* .pfnSetSpi = */      gicR3HvSetSpi,
+    /* .pfnSetPpi = */      gicR3HvSetPpi,
+};
+
 #endif /* !VBOX_DEVICE_STRUCT_TESTCASE */
 
Index: trunk/src/VBox/VMM/VMMR3/NEMR3Native-darwin-armv8.cpp
===================================================================
--- trunk/src/VBox/VMM/VMMR3/NEMR3Native-darwin-armv8.cpp	(revision 107276)
+++ trunk/src/VBox/VMM/VMMR3/NEMR3Native-darwin-armv8.cpp	(revision 107308)
@@ -39,5 +39,5 @@
 #include <VBox/vmm/iem.h>
 #include <VBox/vmm/em.h>
-#include <VBox/vmm/gic.h>
+#include <VBox/vmm/pdmgic.h>
 #include <VBox/vmm/pdm.h>
 #include <VBox/vmm/dbgftrace.h>
@@ -91,5 +91,15 @@
 typedef enum hv_gic_icc_reg_t : uint16_t
 {
-    HV_GIC_ICC_REG_AP0R0_EL1
+    HV_GIC_ICC_REG_PMR_EL1,
+    HV_GIC_ICC_REG_BPR0_EL1,
+    HV_GIC_ICC_REG_AP0R0_EL1,
+    HV_GIC_ICC_REG_AP1R0_EL1,
+    HV_GIC_ICC_REG_RPR_EL1,
+    HV_GIC_ICC_REG_BPR1_EL1,
+    HV_GIC_ICC_REG_CTLR_EL1,
+    HV_GIC_ICC_REG_SRE_EL1,
+    HV_GIC_ICC_REG_IGRPEN0_EL1,
+    HV_GIC_ICC_REG_IGRPEN1_EL1,
+    HV_GIC_ICC_REG_INVALID,
     /** @todo */
 } hv_gic_icc_reg_t;
@@ -623,4 +633,47 @@
     }
     return "";
+}
+
+
+/**
+ * Converts an ICC system register into Darwin's Hypervisor.Framework equivalent.
+ *
+ * @returns HvF's ICC system register.
+ * @param   u32Reg      The ARMv8 ICC system register.
+ */
+static hv_gic_icc_reg_t nemR3DarwinIccRegFromSysReg(uint32_t u32Reg)
+{
+    switch (u32Reg)
+    {
+        case ARMV8_AARCH64_SYSREG_ICC_PMR_EL1:      return HV_GIC_ICC_REG_PMR_EL1;
+        case ARMV8_AARCH64_SYSREG_ICC_IAR0_EL1:     return HV_GIC_ICC_REG_INVALID;
+        case ARMV8_AARCH64_SYSREG_ICC_EOIR0_EL1:    return HV_GIC_ICC_REG_INVALID;
+        case ARMV8_AARCH64_SYSREG_ICC_HPPIR0_EL1:   return HV_GIC_ICC_REG_INVALID;
+        case ARMV8_AARCH64_SYSREG_ICC_BPR0_EL1:     return HV_GIC_ICC_REG_BPR0_EL1;
+        case ARMV8_AARCH64_SYSREG_ICC_AP0R0_EL1:    return HV_GIC_ICC_REG_AP0R0_EL1;
+        case ARMV8_AARCH64_SYSREG_ICC_AP0R1_EL1:    return HV_GIC_ICC_REG_INVALID;
+        case ARMV8_AARCH64_SYSREG_ICC_AP0R2_EL1:    return HV_GIC_ICC_REG_INVALID;
+        case ARMV8_AARCH64_SYSREG_ICC_AP0R3_EL1:    return HV_GIC_ICC_REG_INVALID;
+        case ARMV8_AARCH64_SYSREG_ICC_AP1R0_EL1:    return HV_GIC_ICC_REG_AP1R0_EL1;
+        case ARMV8_AARCH64_SYSREG_ICC_AP1R1_EL1:    return HV_GIC_ICC_REG_INVALID;
+        case ARMV8_AARCH64_SYSREG_ICC_AP1R2_EL1:    return HV_GIC_ICC_REG_INVALID;
+        case ARMV8_AARCH64_SYSREG_ICC_AP1R3_EL1:    return HV_GIC_ICC_REG_INVALID;
+        case ARMV8_AARCH64_SYSREG_ICC_NMIAR1_EL1:   return HV_GIC_ICC_REG_INVALID;
+        case ARMV8_AARCH64_SYSREG_ICC_DIR_EL1:      return HV_GIC_ICC_REG_INVALID;
+        case ARMV8_AARCH64_SYSREG_ICC_RPR_EL1:      return HV_GIC_ICC_REG_RPR_EL1;
+        case ARMV8_AARCH64_SYSREG_ICC_SGI1R_EL1:    return HV_GIC_ICC_REG_INVALID;
+        case ARMV8_AARCH64_SYSREG_ICC_ASGI1R_EL1:   return HV_GIC_ICC_REG_INVALID;
+        case ARMV8_AARCH64_SYSREG_ICC_SGI0R_EL1:    return HV_GIC_ICC_REG_INVALID;
+        case ARMV8_AARCH64_SYSREG_ICC_IAR1_EL1:     return HV_GIC_ICC_REG_INVALID;
+        case ARMV8_AARCH64_SYSREG_ICC_EOIR1_EL1:    return HV_GIC_ICC_REG_INVALID;
+        case ARMV8_AARCH64_SYSREG_ICC_HPPIR1_EL1:   return HV_GIC_ICC_REG_INVALID;
+        case ARMV8_AARCH64_SYSREG_ICC_BPR1_EL1:     return HV_GIC_ICC_REG_BPR1_EL1;
+        case ARMV8_AARCH64_SYSREG_ICC_CTLR_EL1:     return HV_GIC_ICC_REG_CTLR_EL1;
+        case ARMV8_AARCH64_SYSREG_ICC_SRE_EL1:      return HV_GIC_ICC_REG_SRE_EL1;
+        case ARMV8_AARCH64_SYSREG_ICC_IGRPEN0_EL1:  return HV_GIC_ICC_REG_IGRPEN0_EL1;
+        case ARMV8_AARCH64_SYSREG_ICC_IGRPEN1_EL1:  return HV_GIC_ICC_REG_IGRPEN1_EL1;
+    }
+    AssertReleaseFailed();
+    return HV_GIC_ICC_REG_INVALID;
 }
 
@@ -1141,5 +1194,5 @@
 
 /**
- * Sets the given SPI inside the in-kernel KVM GIC.
+ * Sets the given SPI inside the in-kernel HvF GIC.
  *
  * @returns VBox status code.
@@ -1148,5 +1201,5 @@
  * @param   fAsserted   Flag whether the interrupt is asserted (true) or not (false).
  */
-VMMR3_INT_DECL(int) GICR3NemSpiSet(PVMCC pVM, uint32_t uIntId, bool fAsserted)
+VMM_INT_DECL(int) NEMR3GicSetSpi(PVMCC pVM, uint32_t uIntId, bool fAsserted)
 {
     RT_NOREF(pVM);
@@ -1159,12 +1212,12 @@
 
 /**
- * Sets the given PPI inside the in-kernel KVM GIC.
+ * Sets the given PPI inside the in-kernel HvF GIC.
  *
  * @returns VBox status code.
- * @param   pVCpu       The vCPU for whih the PPI state is updated.
+ * @param   pVCpu       The vCPU for which the PPI state is to be updated.
  * @param   uIntId      The PPI ID to update.
  * @param   fAsserted   Flag whether the interrupt is asserted (true) or not (false).
  */
-VMMR3_INT_DECL(int) GICR3NemPpiSet(PVMCPUCC pVCpu, uint32_t uIntId, bool fAsserted)
+VMM_INT_DECL(int) NEMR3GicSetPpi(PVMCPUCC pVCpu, uint32_t uIntId, bool fAsserted)
 {
     RT_NOREF(pVCpu, uIntId, fAsserted);
@@ -1173,4 +1226,36 @@
     AssertFailed();
     return VERR_NEM_IPE_9;
+}
+
+
+/**
+ * Writes a system ICC register inside the in-kernel HvF GIC.
+ *
+ * @returns VBox status code.
+ * @param   pVCpu       The cross context virtual CPU structure.
+ * @param   u32Reg      The ICC register.
+ * @param   u64Value    The value being set.
+ */
+VMM_INT_DECL(VBOXSTRICTRC) NEMR3GicWriteSysReg(PVMCPUCC pVCpu, uint32_t u32Reg, uint64_t u64Value)
+{
+    hv_gic_icc_reg_t const enmIccReg = nemR3DarwinIccRegFromSysReg(u32Reg);
+    hv_return_t const hrc = hv_gic_set_icc_reg(pVCpu->nem.s.hVCpu, enmIccReg, u64Value);
+    return nemR3DarwinHvSts2Rc(hrc);
+}
+
+
+/**
+ * Reads a system ICC register inside the in-kernel HvF GIC.
+ *
+ * @returns VBox status code.
+ * @param   pVCpu       The cross context virtual CPU structure.
+ * @param   u32Reg      The ICC register.
+ * @param   u64Value    Where to store value.
+ */
+VMM_INT_DECL(VBOXSTRICTRC) NEMR3GicReadSysReg(PVMCPUCC pVCpu, uint32_t u32Reg, uint64_t *pu64Value)
+{
+    hv_gic_icc_reg_t const enmIccReg = nemR3DarwinIccRegFromSysReg(u32Reg);
+    hv_return_t const hrc = hv_gic_get_icc_reg(pVCpu->nem.s.hVCpu, enmIccReg, pu64Value);
+    return nemR3DarwinHvSts2Rc(hrc);
 }
 
@@ -2121,5 +2206,5 @@
             TMCpuSetVTimerNextActivation(pVCpu, UINT64_MAX);
             pVCpu->nem.s.fVTimerActivated = true;
-            return GICPpiSet(pVCpu, pVM->nem.s.u32GicPpiVTimer, true /*fAsserted*/);
+            return PDMGicSetPpi(pVCpu, pVM->nem.s.u32GicPpiVTimer, true /*fAsserted*/);
         }
         default:
@@ -2206,5 +2291,5 @@
         {
             /* Clear the interrupt. */
-            GICPpiSet(pVCpu, pVM->nem.s.u32GicPpiVTimer, false /*fAsserted*/);
+            PDMGicSetPpi(pVCpu, pVM->nem.s.u32GicPpiVTimer, false /*fAsserted*/);
 
             pVCpu->nem.s.fVTimerActivated = false;
Index: trunk/src/VBox/VMM/VMMR3/NEMR3Native-linux-armv8.cpp
===================================================================
--- trunk/src/VBox/VMM/VMMR3/NEMR3Native-linux-armv8.cpp	(revision 107276)
+++ trunk/src/VBox/VMM/VMMR3/NEMR3Native-linux-armv8.cpp	(revision 107308)
@@ -35,5 +35,5 @@
 #include <VBox/vmm/iem.h>
 #include <VBox/vmm/em.h>
-#include <VBox/vmm/gic.h>
+#include <VBox/vmm/pdmgic.h>
 #include <VBox/vmm/pdm.h>
 #include <VBox/vmm/trpm.h>
@@ -1192,5 +1192,5 @@
         {
             TMCpuSetVTimerNextActivation(pVCpu, UINT64_MAX);
-            GICPpiSet(pVCpu, pVM->nem.s.u32GicPpiVTimer, RT_BOOL(pRun->s.regs.device_irq_level & KVM_ARM_DEV_EL1_VTIMER));
+            PDMGicSetPpi(pVCpu, pVM->nem.s.u32GicPpiVTimer, RT_BOOL(pRun->s.regs.device_irq_level & KVM_ARM_DEV_EL1_VTIMER));
         }
 
@@ -1198,5 +1198,5 @@
         {
             //TMCpuSetVTimerNextActivation(pVCpu, UINT64_MAX);
-            GICPpiSet(pVCpu, pVM->nem.s.u32GicPpiVTimer, RT_BOOL(pRun->s.regs.device_irq_level & KVM_ARM_DEV_EL1_PTIMER));
+            PDMGicSetPpi(pVCpu, pVM->nem.s.u32GicPpiVTimer, RT_BOOL(pRun->s.regs.device_irq_level & KVM_ARM_DEV_EL1_PTIMER));
         }
 
Index: trunk/src/VBox/VMM/VMMR3/PDMDevHlp.cpp
===================================================================
--- trunk/src/VBox/VMM/VMMR3/PDMDevHlp.cpp	(revision 107276)
+++ trunk/src/VBox/VMM/VMMR3/PDMDevHlp.cpp	(revision 107308)
@@ -4186,6 +4186,6 @@
 
 
-/** @interface_method_impl{PDMDEVHLPR3,pfnApicRegister} */
-static DECLCALLBACK(int) pdmR3DevHlp_ApicRegister(PPDMDEVINS pDevIns)
+/** @interface_method_impl{PDMDEVHLPR3,pfnIcRegister} */
+static DECLCALLBACK(int) pdmR3DevHlp_IcRegister(PPDMDEVINS pDevIns)
 {
     PDMDEV_ASSERT_DEVINS(pDevIns);
@@ -4221,5 +4221,5 @@
     RTCritSectRwLeaveExcl(&pVM->pdm.s.CoreListCritSectRw);
 
-    LogFlow(("pdmR3DevHlp_ApicRegister: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, VINF_SUCCESS));
+    LogFlow(("pdmR3DevHlp_IcRegister: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, VINF_SUCCESS));
     return VINF_SUCCESS;
 }
@@ -5275,5 +5275,5 @@
     pdmR3DevHlp_IommuRegister,
     pdmR3DevHlp_PICRegister,
-    pdmR3DevHlp_ApicRegister,
+    pdmR3DevHlp_IcRegister,
     pdmR3DevHlp_IoApicRegister,
     pdmR3DevHlp_HpetRegister,
@@ -5676,5 +5676,5 @@
     pdmR3DevHlp_IommuRegister,
     pdmR3DevHlp_PICRegister,
-    pdmR3DevHlp_ApicRegister,
+    pdmR3DevHlp_IcRegister,
     pdmR3DevHlp_IoApicRegister,
     pdmR3DevHlp_HpetRegister,
@@ -6405,5 +6405,5 @@
     pdmR3DevHlp_IommuRegister,
     pdmR3DevHlp_PICRegister,
-    pdmR3DevHlp_ApicRegister,
+    pdmR3DevHlp_IcRegister,
     pdmR3DevHlp_IoApicRegister,
     pdmR3DevHlp_HpetRegister,
Index: trunk/src/VBox/VMM/VMMR3/PDMDevice.cpp
===================================================================
--- trunk/src/VBox/VMM/VMMR3/PDMDevice.cpp	(revision 107276)
+++ trunk/src/VBox/VMM/VMMR3/PDMDevice.cpp	(revision 107308)
@@ -35,5 +35,5 @@
 #include <VBox/vmm/pdm.h>
 #ifdef VBOX_VMM_TARGET_ARMV8
-# include <VBox/vmm/gic.h>
+# include <VBox/vmm/pdmgic.h>
 # include <VBox/vmm/pmu.h>
 #elif defined(VBOX_VMM_TARGET_X86)
Index: trunk/src/VBox/VMM/VMMR3/PMUR3.cpp
===================================================================
--- trunk/src/VBox/VMM/VMMR3/PMUR3.cpp	(revision 107276)
+++ trunk/src/VBox/VMM/VMMR3/PMUR3.cpp	(revision 107308)
@@ -33,5 +33,5 @@
 #include <VBox/log.h>
 #include "PMUInternal.h"
-#include <VBox/vmm/gic.h>
+#include <VBox/vmm/pdmgic.h>
 #include <VBox/vmm/cpum.h>
 #include <VBox/vmm/hm.h>
Index: trunk/src/VBox/VMM/VMMR3/VMM.cpp
===================================================================
--- trunk/src/VBox/VMM/VMMR3/VMM.cpp	(revision 107276)
+++ trunk/src/VBox/VMM/VMMR3/VMM.cpp	(revision 107308)
@@ -131,5 +131,5 @@
 #include <VBox/vmm/dbgf.h>
 #ifdef VBOX_VMM_TARGET_ARMV8
-# include <VBox/vmm/gic.h>
+# include <VBox/vmm/pdmgic.h>
 #elif defined(VBOX_VMM_TARGET_X86)
 # include <VBox/vmm/pdmapic.h>
