Index: /trunk/src/VBox/Devices/PC/DevACPI.cpp
===================================================================
--- /trunk/src/VBox/Devices/PC/DevACPI.cpp	(revision 82409)
+++ /trunk/src/VBox/Devices/PC/DevACPI.cpp	(revision 82410)
@@ -195,5 +195,6 @@
     SYSTEM_INFO_INDEX_PARALLEL1_IRQ     = 29,
     SYSTEM_INFO_INDEX_PREF64_MEMORY_MAX = 30,
-    SYSTEM_INFO_INDEX_END               = 31,
+    SYSTEM_INFO_INDEX_NVME_ADDRESS      = 31, /**< First NVMe controller PCI address, or 0 */
+    SYSTEM_INFO_INDEX_END               = 32,
     SYSTEM_INFO_INDEX_INVALID           = 0x80,
     SYSTEM_INFO_INDEX_VALID             = 0x200
@@ -365,6 +366,8 @@
     /** Primary NIC PCI address. */
     uint32_t            u32NicPciAddress;
-    /** Primary audio card PCI address. */
+    /** HD Audio PCI address. */
     uint32_t            u32AudioPciAddress;
+    /** Primary NVMe controller PCI address. */
+    uint32_t            u32NvmePciAddress;
     /** Flag whether S1 power state is enabled. */
     bool                fS1Enabled;
@@ -1439,4 +1442,8 @@
             break;
 
+        case SYSTEM_INFO_INDEX_NVME_ADDRESS:
+            *pu32 = pThis->u32NvmePciAddress;
+            break;
+
         case SYSTEM_INFO_INDEX_POWER_STATES:
             *pu32 = RT_BIT(0) | RT_BIT(5);  /* S1 and S5 always exposed */
@@ -1447,5 +1454,5 @@
             break;
 
-       case SYSTEM_INFO_INDEX_IOC_ADDRESS:
+        case SYSTEM_INFO_INDEX_IOC_ADDRESS:
             *pu32 = pThis->u32IocPciAddress;
             break;
@@ -3690,4 +3697,5 @@
                                   "|NicPciAddress"
                                   "|AudioPciAddress"
+                                  "|NvmePciAddress"
                                   "|IocPciAddress"
                                   "|HostBusPciAddress"
@@ -3773,13 +3781,18 @@
         return PDMDEV_SET_ERROR(pDevIns, rc, N_("Configuration error: Failed to read \"ShowCpu\""));
 
-    /* query primary NIC PCI address */
+    /* query primary NIC PCI address (GIGE) */
     rc = pHlp->pfnCFGMQueryU32Def(pCfg, "NicPciAddress", &pThis->u32NicPciAddress, 0);
     if (RT_FAILURE(rc))
         return PDMDEV_SET_ERROR(pDevIns, rc, N_("Configuration error: Failed to read \"NicPciAddress\""));
 
-    /* query primary NIC PCI address */
+    /* query HD Audio PCI address (HDAA) */
     rc = pHlp->pfnCFGMQueryU32Def(pCfg, "AudioPciAddress", &pThis->u32AudioPciAddress, 0);
     if (RT_FAILURE(rc))
         return PDMDEV_SET_ERROR(pDevIns, rc, N_("Configuration error: Failed to read \"AudioPciAddress\""));
+
+    /* query NVMe PCI address (NVMA) */
+    rc = pHlp->pfnCFGMQueryU32Def(pCfg, "NvmePciAddress", &pThis->u32NvmePciAddress, 0);
+    if (RT_FAILURE(rc))
+        return PDMDEV_SET_ERROR(pDevIns, rc, N_("Configuration error: Failed to read \"NvmePciAddress\""));
 
     /* query IO controller (southbridge) PCI address */
Index: /trunk/src/VBox/Devices/PC/vbox.dsl
===================================================================
--- /trunk/src/VBox/Devices/PC/vbox.dsl	(revision 82409)
+++ /trunk/src/VBox/Devices/PC/vbox.dsl	(revision 82410)
@@ -371,4 +371,5 @@
         PP1I,  32, // Parallel1 IRQ
         PMNX,  32, // limit of 64-bit prefetch window (64KB units)
+        NVMA,  32, // Primary NVMe controller PCI address
         Offset (0x80),
         ININ, 32,
@@ -1220,4 +1221,28 @@
                  }
              }
+
+            // NVMe controller. Required to convince OS X that
+            // the controller is an internal (built-in) device.
+            Device (SSD0)
+            {
+                Method(_ADR, 0, NotSerialized)
+                {
+                     Return (NVMA)
+                }
+                Method (_STA, 0, NotSerialized)
+                {
+                    if (LEqual (NVMA, Zero)) {
+                        Return (0x00)
+                    }
+                    else {
+                        Return (0x0F)
+                    }
+                }
+                // Port 0
+                Device (PRT0)
+                {
+                    Name (_ADR, 0xffff)
+                }
+            }
 
             // NIC
Index: /trunk/src/VBox/Main/src-client/ConsoleImpl2.cpp
===================================================================
--- /trunk/src/VBox/Main/src-client/ConsoleImpl2.cpp	(revision 82409)
+++ /trunk/src/VBox/Main/src-client/ConsoleImpl2.cpp	(revision 82410)
@@ -3218,4 +3218,13 @@
                     uint32_t u32AudioPCIAddr = (Address.miDevice << 16) | Address.miFn;
                     InsertConfigInteger(pCfg, "AudioPciAddress",    u32AudioPCIAddr);
+                }
+            }
+            if (fOsXGuest)
+            {
+                PCIBusAddress Address;
+                if (pBusMgr->findPCIAddress("nvme", 0, Address))
+                {
+                    uint32_t u32NvmePCIAddr = (Address.miDevice << 16) | Address.miFn;
+                    InsertConfigInteger(pCfg, "NvmePciAddress",    u32NvmePCIAddr);
                 }
             }
