Index: /trunk/Config.kmk
===================================================================
--- /trunk/Config.kmk	(revision 37780)
+++ /trunk/Config.kmk	(revision 37781)
@@ -412,4 +412,7 @@
 ifdef VBOX_WITH_EHCI
  VBOX_WITH_EHCI_IMPL = 1
+endif
+ifdef VBOX_WITH_PCI_PASSTHROUGH
+ VBOX_WITH_PCI_PASSTHROUGH_IMPL = 1
 endif
 # Enable the hal/sysfs USB code on Linux.
@@ -926,5 +929,5 @@
  VBOX_WITH_EHCI_IMPL=
  VBOX_WITH_EXTPACK_PUEL=
- VBOX_WITH_PCI_PASSTHROUGH=
+ VBOX_WITH_PCI_PASSTHROUGH_IMPL=
  VBOX_WITH_OS2_ADDITIONS_BIN=
  VBOX_WITH_SECURELABEL=
Index: /trunk/include/VBox/vmm/pdmifs.h
===================================================================
--- /trunk/include/VBox/vmm/pdmifs.h	(revision 37780)
+++ /trunk/include/VBox/vmm/pdmifs.h	(revision 37781)
@@ -2888,12 +2888,34 @@
      *               fi
      */
-    DECLR3CALLBACKMEMBER(int, pfnVHWACommandCompleteAsynch, (PPDMIDISPLAYVBVACALLBACKS pInterface, PVBOXVHWACMD pCmd));
-
-    DECLR3CALLBACKMEMBER(int, pfnCrHgsmiCommandCompleteAsync, (PPDMIDISPLAYVBVACALLBACKS pInterface, PVBOXVDMACMD_CHROMIUM_CMD pCmd, int rc));
-
-    DECLR3CALLBACKMEMBER(int, pfnCrHgsmiControlCompleteAsync, (PPDMIDISPLAYVBVACALLBACKS pInterface, PVBOXVDMACMD_CHROMIUM_CTL pCmd, int rc));
+    DECLR3CALLBACKMEMBER(int, pfnVHWACommandCompleteAsynch, (PPDMIDISPLAYVBVACALLBACKS pInterface,
+                                                             PVBOXVHWACMD pCmd));
+
+    DECLR3CALLBACKMEMBER(int, pfnCrHgsmiCommandCompleteAsync, (PPDMIDISPLAYVBVACALLBACKS pInterface,
+                                                               PVBOXVDMACMD_CHROMIUM_CMD pCmd, int rc));
+
+    DECLR3CALLBACKMEMBER(int, pfnCrHgsmiControlCompleteAsync, (PPDMIDISPLAYVBVACALLBACKS pInterface,
+                                                               PVBOXVDMACMD_CHROMIUM_CTL pCmd, int rc));
 } PDMIDISPLAYVBVACALLBACKS;
 /** PDMIDISPLAYVBVACALLBACKS  */
-#define PDMIDISPLAYVBVACALLBACKS_IID     "b78b81d2-c821-4e66-96ff-dbafa76343a5"
+#define PDMIDISPLAYVBVACALLBACKS_IID            "b78b81d2-c821-4e66-96ff-dbafa76343a5"
+
+/** Pointer to a PCI raw connector interface. */
+typedef struct PDMIPCIRAWCONNECTOR *PPDMIPCIRAWCONNECTOR;
+/**
+ * PCI raw connector interface (up).
+ */
+typedef struct PDMIPCIRAWCONNECTOR
+{
+
+    /**
+     *
+     */
+    DECLR3CALLBACKMEMBER(int, pfnDeviceConstructComplete, (PPDMIPCIRAWCONNECTOR pInterface, const char *pcszName,
+                                                           uint32_t uHostPciAddress, uint32_t uGuestPciAddress,
+                                                           int rc));
+
+} PDMIPCIRAWCONNECTOR;
+/** PDMIPCIRAWCONNECTOR interface ID. */
+#define PDMIPCIRAWCONNECTOR_IID                 "14aa9c6c-8869-4782-9dfc-910071a6aebf"
 
 /** @} */
Index: /trunk/src/VBox/Devices/Makefile.kmk
===================================================================
--- /trunk/src/VBox/Devices/Makefile.kmk	(revision 37780)
+++ /trunk/src/VBox/Devices/Makefile.kmk	(revision 37781)
@@ -166,6 +166,6 @@
   VBoxDD_DEFS           += VBOX_WITH_VDE
  endif
- ifdef VBOX_WITH_PCI_PASSTHROUGH
-  VBoxDD_DEFS           += VBOX_WITH_PCI_PASSTHROUGH
+ if defined(VBOX_WITH_PCI_PASSTHROUGH_IMPL) && !defined(VBOX_WITH_EXTPACK_PUEL)
+  VBoxDD_DEFS           += VBOX_WITH_PCI_PASSTHROUGH_IMPL
  endif
 
@@ -270,6 +270,5 @@
  	VBOX_HGCM_HOST_CODE \
  	VBOX_WITH_HGCM \
- 	$(if $(VBOX_BIOS_DMI_FALLBACK),VBOX_BIOS_DMI_FALLBACK,) \
-	$(if $(VBOX_WITH_PCI_PASSTHROUGH),VBOX_WITH_PCI_PASSTHROUGH,)
+ 	$(if $(VBOX_BIOS_DMI_FALLBACK),VBOX_BIOS_DMI_FALLBACK,)
 
  DevicesR3_DEFS.linux   += _GNU_SOURCE
@@ -287,5 +286,4 @@
  	Bus/MsiCommon.cpp \
  	Bus/MsixCommon.cpp \
-	$(if $(VBOX_WITH_PCI_PASSTHROUGH),Bus/DevPciRaw.cpp,) \
  	Graphics/DevVGA.cpp \
  	Storage/DevATA.cpp \
@@ -455,4 +453,10 @@
   endif
  endif
+ if defined(VBOX_WITH_PCI_PASSTHROUGH_IMPL) && !defined(VBOX_WITH_EXTPACK_PUEL)
+  DevicesR3_DEFS        += VBOX_WITH_PCI_PASSTHROUGH_IMPL
+  DevicesR3_SOURCES     += \
+	Bus/DevPciRaw.cpp
+
+ endif
 
  ifdef VBOX_WITH_DTRACE_R3
@@ -655,5 +659,4 @@
  	Bus/MsiCommon.cpp \
  	Bus/MsixCommon.cpp \
-	$(if $(VBOX_WITH_PCI_PASSTHROUGH),Bus/DevPciRaw.cpp,) \
  	Graphics/DevVGA.cpp \
  	Input/DevPS2.cpp \
@@ -714,4 +717,9 @@
  	USB/DevEHCI.cpp
   endif
+ endif
+
+ if defined(VBOX_WITH_PCI_PASSTHROUGH_IMPL) && !defined(VBOX_WITH_EXTPACK_PUEL)
+  VBoxDDR0_SOURCES      += 
+	Bus/DevPciRaw.cpp
  endif
 
@@ -1138,8 +1146,8 @@
  #
  ServicesR0_TEMPLATE  = VBoxR0
- ServicesR0_DEFS      = IN_INTNET_R0 IN_RT_R0 $(if $(VBOX_WITH_PCI_PASSTHROUGH),IN_PCIRAW_R0,)
+ ServicesR0_DEFS      = IN_INTNET_R0 IN_RT_R0 $(if $(VBOX_WITH_PCI_PASSTHROUGH_IMPL),IN_PCIRAW_R0,)
  ServicesR0_SOURCES   = \
  	Network/SrvIntNetR0.cpp \
-        $(if $(VBOX_WITH_PCI_PASSTHROUGH),Bus/SrvPciRawR0.cpp,)
+        $(if $(VBOX_WITH_PCI_PASSTHROUGH_IMPL),Bus/SrvPciRawR0.cpp,)
  Network/SrvIntNetR0.cpp_CXXFLAGS := $(if-expr $(KBUILD_TARGET) == "win",,$(VBOX_GCC_Wno-array_bounds))
 
@@ -1209,4 +1217,18 @@
  endif
 
+ if defined(VBOX_WITH_PCI_PASSTHROUGH)
+  DLLS += VBoxPciRawR3
+  VBoxPciRawR3_TEMPLATE = VBoxR3ExtPackPuel
+  VBoxPciRawR3_SOURCES  = Bus/DevPciRaw.cpp
+
+  DLLS += VBoxPciRawDrv
+  VBoxPciRawDrv_TEMPLATE = VBoxR3ExtPackPuel
+  VBoxPciRawDrv_SOURCES = Bus/DrvPciRaw.cpp
+
+  SYSMODS += VBoxPciRawR0
+  VBoxPciRawR0_TEMPLATE = VBoxR0ExtPackPuel
+  VBoxPciRawR0_SOURCES  = Bus/DevPciRaw.cpp
+ endif
+
  #
  # The Intel PXE rom.
Index: /trunk/src/VBox/Devices/build/VBoxDD.cpp
===================================================================
--- /trunk/src/VBox/Devices/build/VBoxDD.cpp	(revision 37780)
+++ /trunk/src/VBox/Devices/build/VBoxDD.cpp	(revision 37781)
@@ -180,5 +180,5 @@
 #endif
 
-#ifdef VBOX_WITH_PCI_PASSTHROUGH
+#ifdef VBOX_WITH_PCI_PASSTHROUGH_IMPL
     rc = pCallbacks->pfnRegister(pCallbacks, &g_DevicePciRaw);
     if (RT_FAILURE(rc))
@@ -230,9 +230,7 @@
     if (RT_FAILURE(rc))
         return rc;
-#ifndef RT_OS_L4
     rc = pCallbacks->pfnRegister(pCallbacks, &g_DrvNAT);
     if (RT_FAILURE(rc))
         return rc;
-#endif
 #if defined(RT_OS_LINUX) || defined(RT_OS_FREEBSD)
     rc = pCallbacks->pfnRegister(pCallbacks, &g_DrvHostInterface);
@@ -275,5 +273,4 @@
 #endif
 
-#if !defined(RT_OS_L4)
     rc = pCallbacks->pfnRegister(pCallbacks, &g_DrvNamedPipe);
     if (RT_FAILURE(rc))
@@ -285,5 +282,4 @@
     if (RT_FAILURE(rc))
         return rc;
-#endif
 
 #if defined(RT_OS_LINUX)
@@ -315,4 +311,10 @@
     rc = pCallbacks->pfnRegister(pCallbacks, &g_DrvDiskIntegrity);
     if (RT_FAILURE(rc))
+        return rc;
+#endif
+
+#ifdef VBOX_WITH_PCI_PASSTHROUGH_IMPL
+    rc = pCallbacks->pfnRegister(pCallbacks, &g_DrvPciRaw);
+    if (RT_FAILURED(rc))
         return rc;
 #endif
Index: /trunk/src/VBox/Devices/build/VBoxDD.h
===================================================================
--- /trunk/src/VBox/Devices/build/VBoxDD.h	(revision 37780)
+++ /trunk/src/VBox/Devices/build/VBoxDD.h	(revision 37781)
@@ -84,5 +84,5 @@
 extern const PDMDEVREG g_DeviceEFI;
 #endif
-#ifdef VBOX_WITH_PCI_PASSTHROUGH
+#ifdef VBOX_WITH_PCI_PASSTHROUGH_IMPL
 extern const PDMDEVREG g_DevicePciRaw;
 #endif
Index: /trunk/src/VBox/Devices/testcase/Makefile.kmk
===================================================================
--- /trunk/src/VBox/Devices/testcase/Makefile.kmk	(revision 37780)
+++ /trunk/src/VBox/Devices/testcase/Makefile.kmk	(revision 37781)
@@ -41,5 +41,5 @@
 	$(if $(VBOX_WITH_WDDM),VBOX_WITH_WDDM,) \
 	$(if $(VBOX_WITH_VIDEOHWACCEL),VBOX_WITH_VIDEOHWACCEL,) \
-	$(if $(VBOX_WITH_PCI_PASSTHROUGH),VBOX_WITH_PCI_PASSTHROUGH,)
+	$(if $(VBOX_WITH_PCI_PASSTHROUGH_IMPL),VBOX_WITH_PCI_PASSTHROUGH_IMPL,)
 
 
Index: /trunk/src/VBox/Devices/testcase/tstDeviceStructSize.cpp
===================================================================
--- /trunk/src/VBox/Devices/testcase/tstDeviceStructSize.cpp	(revision 37780)
+++ /trunk/src/VBox/Devices/testcase/tstDeviceStructSize.cpp	(revision 37781)
@@ -91,5 +91,5 @@
 #endif
 
-#ifdef VBOX_WITH_PCI_PASSTHROUGH
+#ifdef VBOX_WITH_PCI_PASSTHROUGH_IMPL
 # undef LOG_GROUP
 # include "../Bus/DevPciRaw.cpp"
@@ -326,6 +326,6 @@
     CHECK_MEMBER_ALIGNMENT(VPCISTATE, Queues, 8);
 #endif
-#ifdef VBOX_WITH_PCI_PASSTHROUGH
-    //CHECK_MEMBER_ALIGNMENT(PCIRAWSENDREQ, u.aGetRegionInfo.u64RegionSize, 8);
+#ifdef VBOX_WITH_PCI_PASSTHROUGH_IMPL
+    CHECK_MEMBER_ALIGNMENT(PCIRAWSENDREQ, u.aGetRegionInfo.u64RegionSize, 8);
 #endif
 
Index: /trunk/src/VBox/Main/src-client/ConsoleImpl2.cpp
===================================================================
--- /trunk/src/VBox/Main/src-client/ConsoleImpl2.cpp	(revision 37780)
+++ /trunk/src/VBox/Main/src-client/ConsoleImpl2.cpp	(revision 37781)
@@ -510,5 +510,5 @@
     if (assignments.size() > 0)
     {
-        InsertConfigNode(pDevices,     "pciraw",  &pPciDevs);
+        InsertConfigNode(pDevices, "pciraw",  &pPciDevs);
 
         PCFGMNODE pRoot = CFGMR3GetParent(pDevices); Assert(pRoot);
@@ -564,5 +564,5 @@
         PciRawDev* pMainDev = new PciRawDev(pConsole);
         InsertConfigNode(pInst,        "LUN#0",   &pLunL0);
-        InsertConfigString(pLunL0,     "Driver",  "PciRawMain");
+        InsertConfigString(pLunL0,     "Driver",  "pciraw");
         InsertConfigNode(pLunL0,       "Config" , &pCfg);
         InsertConfigInteger(pCfg,      "Object", (uintptr_t)pMainDev);
