Index: /trunk/src/VBox/Frontends/VirtualBox/src/UIVMInfoDialog.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/UIVMInfoDialog.cpp	(revision 64839)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/UIVMInfoDialog.cpp	(revision 64840)
@@ -132,5 +132,5 @@
     CSystemProperties sp = vboxGlobal().virtualBox().GetSystemProperties();
     CStorageControllerVector controllers = m_session.GetMachine().GetStorageControllers();
-    int iIDECount = 0, iSATACount = 0, iSCSICount = 0, iUSBCount = 0, iSASCount = 0;
+    int iIDECount = 0;
     foreach (const CStorageController &controller, controllers)
     {
@@ -174,6 +174,10 @@
                 break;
             }
-            case KStorageBus_SATA:
+            default:
             {
+                /* Common code for the non IDE controllers. */
+                uint32_t iInstance = controller.GetInstance();
+                const char *pszCtrl = storCtrlType2Str(controller.GetControllerType());
+
                 for (ULONG i = 0; i < sp.GetMaxPortCountForStorageBus(KStorageBus_SATA); ++i)
                 {
@@ -181,103 +185,26 @@
                     {
                         /* Names: */
-                        m_names[QString("/Devices/SATA%1/Port%2/DMA").arg(iSATACount).arg(i)]
-                            = tr("DMA Transfers");
-                        m_names[QString("/Devices/SATA%1/Port%2/ReadBytes").arg(iSATACount).arg(i)]
+                        m_names[QString("/Devices/%1%2/Port%3/ReqsSubmitted").arg(pszCtrl).arg(iInstance).arg(i)]
+                            = tr("Requests");
+                        m_names[QString("/Devices/%1%2/Port%3/ReadBytes").arg(pszCtrl).arg(iInstance).arg(i)]
                             = tr("Data Read");
-                        m_names[QString("/Devices/SATA%1/Port%2/WrittenBytes").arg(iSATACount).arg(i)]
+                        m_names[QString("/Devices/%1%2/Port%3/WrittenBytes").arg(pszCtrl).arg(iInstance).arg(i)]
                             = tr("Data Written");
 
                         /* Units: */
-                        m_units[QString("/Devices/SATA%1/Port%2/DMA").arg(iSATACount).arg(i)] = "[B]";
-                        m_units[QString("/Devices/SATA%1/Port%2/ReadBytes").arg(iSATACount).arg(i)] = "B";
-                        m_units[QString("/Devices/SATA%1/Port%2/WrittenBytes").arg(iSATACount).arg(i)] = "B";
+                        m_units[QString("/Devices/%1%2/Port%3/ReqsSubmitted").arg(pszCtrl).arg(iInstance).arg(i)] = "[B]";
+                        m_units[QString("/Devices/%1%2/Port%3/ReadBytes").arg(pszCtrl).arg(iInstance).arg(i)] = "B";
+                        m_units[QString("/Devices/%1%2/Port%3/WrittenBytes").arg(pszCtrl).arg(iInstance).arg(i)] = "B";
 
                         /* Belongs to: */
-                        m_links[QString("/Devices/SATA%1/Port%2").arg(iSATACount).arg(i)] = QStringList()
-                            << QString("/Devices/SATA%1/Port%2/DMA").arg(iSATACount).arg(i)
-                            << QString("/Devices/SATA%1/Port%2/ReadBytes").arg(iSATACount).arg(i)
-                            << QString("/Devices/SATA%1/Port%2/WrittenBytes").arg(iSATACount).arg(i);
+                        m_links[QString("/Devices/%1%2/Port%3").arg(pszCtrl).arg(iInstance).arg(i)] = QStringList()
+                            << QString("/Devices/%1%2/Port%3/ReqsSubmitted").arg(pszCtrl).arg(iInstance).arg(i)
+                            << QString("/Devices/%1%2/Port%3/ReadBytes").arg(pszCtrl).arg(iInstance).arg(i)
+                            << QString("/Devices/%1%2/Port%3/WrittenBytes").arg(pszCtrl).arg(iInstance).arg(i);
                     }
                 }
-                ++iSATACount;
+
                 break;
             }
-            case KStorageBus_SCSI:
-            {
-                for (ULONG i = 0; i < sp.GetMaxPortCountForStorageBus(KStorageBus_SCSI); ++i)
-                {
-                    for (ULONG j = 0; j < sp.GetMaxDevicesPerPortForStorageBus(KStorageBus_SCSI); ++j)
-                    {
-                        /* Names: */
-                        m_names[QString("/Devices/SCSI%1/%2/ReadBytes").arg(iSCSICount).arg(i)]
-                            = tr("Data Read");
-                        m_names[QString("/Devices/SCSI%1/%2/WrittenBytes").arg(iSCSICount).arg(i)]
-                            = tr("Data Written");
-
-                        /* Units: */
-                        m_units[QString("/Devices/SCSI%1/%2/ReadBytes").arg(iSCSICount).arg(i)] = "B";
-                        m_units[QString("/Devices/SCSI%1/%2/WrittenBytes").arg(iSCSICount).arg(i)] = "B";
-
-                        /* Belongs to: */
-                        m_links[QString("/Devices/SCSI%1/%2").arg(iSCSICount).arg(i)] = QStringList()
-                            << QString("/Devices/SCSI%1/%2/ReadBytes").arg(iSCSICount).arg(i)
-                            << QString("/Devices/SCSI%1/%2/WrittenBytes").arg(iSCSICount).arg(i);
-                    }
-                }
-                ++iSCSICount;
-                break;
-            }
-            case KStorageBus_USB:
-            {
-                for (ULONG i = 0; i < sp.GetMaxPortCountForStorageBus(KStorageBus_USB); ++i)
-                {
-                    for (ULONG j = 0; j < sp.GetMaxDevicesPerPortForStorageBus(KStorageBus_USB); ++j)
-                    {
-                        /* Names: */
-                        m_names[QString("/Devices/USB%1/%2/ReadBytes").arg(iUSBCount).arg(i)]
-                            = tr("Data Read");
-                        m_names[QString("/Devices/USB%1/%2/WrittenBytes").arg(iUSBCount).arg(i)]
-                            = tr("Data Written");
-
-                        /* Units: */
-                        m_units[QString("/Devices/USB%1/%2/ReadBytes").arg(iUSBCount).arg(i)] = "B";
-                        m_units[QString("/Devices/USB%1/%2/WrittenBytes").arg(iUSBCount).arg(i)] = "B";
-
-                        /* Belongs to: */
-                        m_links[QString("/Devices/USB%1/%2").arg(iUSBCount).arg(i)] = QStringList()
-                            << QString("/Devices/USB%1/%2/ReadBytes").arg(iUSBCount).arg(i)
-                            << QString("/Devices/USB%1/%2/WrittenBytes").arg(iUSBCount).arg(i);
-                    }
-                }
-                ++iUSBCount;
-                break;
-            }
-            case KStorageBus_SAS:
-            {
-                for (ULONG i = 0; i < sp.GetMaxPortCountForStorageBus(KStorageBus_SAS); ++i)
-                {
-                    for (ULONG j = 0; j < sp.GetMaxDevicesPerPortForStorageBus(KStorageBus_SAS); ++j)
-                    {
-                        /* Names: */
-                        m_names[QString("/Devices/SAS%1/%2/ReadBytes").arg(iSASCount).arg(i)]
-                            = tr("Data Read");
-                        m_names[QString("/Devices/SAS%1/%2/WrittenBytes").arg(iSASCount).arg(i)]
-                            = tr("Data Written");
-
-                        /* Units: */
-                        m_units[QString("/Devices/SAS%1/%2/ReadBytes").arg(iSASCount).arg(i)] = "B";
-                        m_units[QString("/Devices/SAS%1/%2/WrittenBytes").arg(iSASCount).arg(i)] = "B";
-
-                        /* Belongs to: */
-                        m_links[QString("/Devices/SAS%1/%2").arg(iSASCount).arg(i)] = QStringList()
-                            << QString("/Devices/SAS%1/%2/ReadBytes").arg(iSASCount).arg(i)
-                            << QString("/Devices/SAS%1/%2/WrittenBytes").arg(iSASCount).arg(i);
-                    }
-                }
-                ++iSASCount;
-                break;
-            }
-            default:
-                break;
         }
     }
@@ -361,4 +288,44 @@
     /* Return result: */
     return fResult;
+}
+
+const char *UIVMInfoDialog::storCtrlType2Str(KStorageControllerType enmCtrlType)
+{
+    const char *pszCtrl = NULL;
+    switch (enmCtrlType)
+    {
+        case KStorageControllerType_LsiLogic:
+            pszCtrl = "LSILOGIC";
+            break;
+        case KStorageControllerType_BusLogic:
+            pszCtrl = "BUSLOGIC";
+            break;
+        case KStorageControllerType_IntelAhci:
+            pszCtrl = "AHCI";
+            break;
+        case KStorageControllerType_PIIX3:
+        case KStorageControllerType_PIIX4:
+        case KStorageControllerType_ICH6:
+            pszCtrl = "PIIX3IDE";
+            break;
+        case KStorageControllerType_I82078:
+            pszCtrl = "I82078";
+            break;
+        case KStorageControllerType_LsiLogicSas:
+            pszCtrl = "LSILOGICSAS";
+            break;
+        case KStorageControllerType_USB:
+            pszCtrl = "MSD";
+            break;
+        case KStorageControllerType_NVMe:
+            pszCtrl = "NVME";
+            break;
+        default:
+            AssertFailed();
+            pszCtrl = "<INVALID>";
+            break;
+    }
+
+    return pszCtrl;
 }
 
@@ -739,5 +706,5 @@
         /* Enumerate storage-controllers: */
         CStorageControllerVector controllers = m.GetStorageControllers();
-        int iIDECount = 0, iSATACount = 0, iSCSICount = 0, iUSBCount = 0, iSASCount = 0;
+        int iIDECount = 0;
         foreach (const CStorageController &controller, controllers)
         {
@@ -755,5 +722,4 @@
                 /* Append storage-statistics with controller name: */
                 strStorageStat += strHeaderStorage.arg(strControllerName.arg(controller.GetName()));
-                int iSCSIIndex = 0;
                 /* Enumerate storage-attachments: */
                 foreach (const CMediumAttachment &attachment, attachments)
@@ -771,39 +737,13 @@
                             break;
                         }
-                        case KStorageBus_SATA:
+                        default:
                         {
-                            /* Append storage-statistics with SATA controller statistics: */
+                            uint32_t iInstance = controller.GetInstance();
+                            const char *pszCtrl = storCtrlType2Str(controller.GetControllerType());
                             strStorageStat += formatStorageElement(strName, iPort, iDevice,
-                                                                   QString("/Devices/SATA%1/Port%2")
-                                                                          .arg(iSATACount).arg(iPort));
+                                                                   QString("/Devices/%1%2/Port%3")
+                                                                          .arg(pszCtrl).arg(iInstance).arg(iPort));
                             break;
                         }
-                        case KStorageBus_SCSI:
-                        {
-                            /* Append storage-statistics with SCSI controller statistics: */
-                            strStorageStat += formatStorageElement(strName, iPort, iDevice,
-                                                                   QString("/Devices/SCSI%1/%2")
-                                                                          .arg(iSCSICount).arg(iSCSIIndex));
-                            ++iSCSIIndex;
-                            break;
-                        }
-                        case KStorageBus_USB:
-                        {
-                            /* Append storage-statistics with USB controller statistics: */
-                            strStorageStat += formatStorageElement(strName, iPort, iDevice,
-                                                                   QString("/Devices/USB%1/%2")
-                                                                          .arg(iUSBCount).arg(iPort));
-                            break;
-                        }
-                        case KStorageBus_SAS:
-                        {
-                            /* Append storage-statistics with USB controller statistics: */
-                            strStorageStat += formatStorageElement(strName, iPort, iDevice,
-                                                                   QString("/Devices/SAS%1/%2")
-                                                                          .arg(iSASCount).arg(iPort));
-                            break;
-                        }
-                        default:
-                            break;
                     }
                     strStorageStat += strParagraph;
@@ -814,8 +754,4 @@
             {
                 case KStorageBus_IDE:  ++iIDECount; break;
-                case KStorageBus_SATA: ++iSATACount; break;
-                case KStorageBus_SCSI: ++iSCSICount; break;
-                case KStorageBus_USB:  ++iUSBCount; break;
-                case KStorageBus_SAS:  ++iSASCount; break;
                 default: break;
             }
Index: /trunk/src/VBox/Frontends/VirtualBox/src/UIVMInfoDialog.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/UIVMInfoDialog.h	(revision 64839)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/UIVMInfoDialog.h	(revision 64840)
@@ -69,4 +69,8 @@
     /** Common event-handler. */
     bool event(QEvent *pEvent);
+
+    /** Converts a given storage controller type to the string representation used
+     * in statistics. */
+    const char *storCtrlType2Str(KStorageControllerType enmCtrlType);
 
 private slots:
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationDataItem.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationDataItem.cpp	(revision 64839)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationDataItem.cpp	(revision 64840)
@@ -924,8 +924,10 @@
     CSystemProperties sp = vboxGlobal().virtualBox().GetSystemProperties();
     CStorageControllerVector controllers = m_machine.GetStorageControllers();
-    int iIDECount = 0, iSATACount = 0, iSCSICount = 0, iUSBCount = 0, iSASCount = 0;
+    int iIDECount = 0;
     foreach (const CStorageController &controller, controllers)
     {
-        switch (controller.GetBus())
+        KStorageBus enmBus = controller.GetBus();
+
+        switch (enmBus)
         {
             case KStorageBus_IDE:
@@ -966,111 +968,37 @@
                 break;
             }
-            case KStorageBus_SATA:
-            {
-                for (ULONG i = 0; i < sp.GetMaxPortCountForStorageBus(KStorageBus_SATA); ++i)
+            default:
+            {
+                /* Common code for the non IDE controllers. */
+                uint32_t iInstance = controller.GetInstance();
+                const char *pszCtrl = storCtrlType2Str(controller.GetControllerType());
+
+                for (ULONG i = 0; i < sp.GetMaxPortCountForStorageBus(enmBus); ++i)
                 {
-                    for (ULONG j = 0; j < sp.GetMaxDevicesPerPortForStorageBus(KStorageBus_SATA); ++j)
+                    for (ULONG j = 0; j < sp.GetMaxDevicesPerPortForStorageBus(enmBus); ++j)
                     {
                         /* Names: */
-                        m_names[QString("/Devices/SATA%1/Port%2/DMA").arg(iSATACount).arg(i)]
-                            = tr("DMA Transfers");
-                        m_names[QString("/Devices/SATA%1/Port%2/ReadBytes").arg(iSATACount).arg(i)]
+                        m_names[QString("/Devices/%1%2/Port%3/ReqsSubmitted").arg(pszCtrl).arg(iInstance).arg(i)]
+                            = tr("Requests");
+                        m_names[QString("/Devices/%1%2/Port%3/ReadBytes").arg(pszCtrl).arg(iInstance).arg(i)]
                             = tr("Data Read");
-                        m_names[QString("/Devices/SATA%1/Port%2/WrittenBytes").arg(iSATACount).arg(i)]
+                        m_names[QString("/Devices/%1%2/Port%3/WrittenBytes").arg(pszCtrl).arg(iInstance).arg(i)]
                             = tr("Data Written");
 
                         /* Units: */
-                        m_units[QString("/Devices/SATA%1/Port%2/DMA").arg(iSATACount).arg(i)] = "";
-                        m_units[QString("/Devices/SATA%1/Port%2/ReadBytes").arg(iSATACount).arg(i)] = "B";
-                        m_units[QString("/Devices/SATA%1/Port%2/WrittenBytes").arg(iSATACount).arg(i)] = "B";
+                        m_units[QString("/Devices/%1%2/Port%3/ReqsSubmitted").arg(pszCtrl).arg(iInstance).arg(i)] = "";
+                        m_units[QString("/Devices/%1%2/Port%3/ReadBytes").arg(pszCtrl).arg(iInstance).arg(i)] = "B";
+                        m_units[QString("/Devices/%1%2/Port%3/WrittenBytes").arg(pszCtrl).arg(iInstance).arg(i)] = "B";
 
                         /* Belongs to: */
-                        m_links[QString("/Devices/SATA%1/Port%2").arg(iSATACount).arg(i)] = QStringList()
-                            << QString("/Devices/SATA%1/Port%2/DMA").arg(iSATACount).arg(i)
-                            << QString("/Devices/SATA%1/Port%2/ReadBytes").arg(iSATACount).arg(i)
-                            << QString("/Devices/SATA%1/Port%2/WrittenBytes").arg(iSATACount).arg(i);
+                        m_links[QString("/Devices/%1%2/Port%3").arg(pszCtrl).arg(iInstance).arg(i)] = QStringList()
+                            << QString("/Devices/%1%2/Port%3/ReqsSubmitted").arg(pszCtrl).arg(iInstance).arg(i)
+                            << QString("/Devices/%1%2/Port%3/ReadBytes").arg(pszCtrl).arg(iInstance).arg(i)
+                            << QString("/Devices/%1%2/Port%3/WrittenBytes").arg(pszCtrl).arg(iInstance).arg(i);
                     }
                 }
-                ++iSATACount;
+
                 break;
             }
-            case KStorageBus_SCSI:
-            {
-                for (ULONG i = 0; i < sp.GetMaxPortCountForStorageBus(KStorageBus_SCSI); ++i)
-                {
-                    for (ULONG j = 0; j < sp.GetMaxDevicesPerPortForStorageBus(KStorageBus_SCSI); ++j)
-                    {
-                        /* Names: */
-                        m_names[QString("/Devices/SCSI%1/%2/ReadBytes").arg(iSCSICount).arg(i)]
-                            = tr("Data Read");
-                        m_names[QString("/Devices/SCSI%1/%2/WrittenBytes").arg(iSCSICount).arg(i)]
-                            = tr("Data Written");
-
-                        /* Units: */
-                        m_units[QString("/Devices/SCSI%1/%2/ReadBytes").arg(iSCSICount).arg(i)] = "B";
-                        m_units[QString("/Devices/SCSI%1/%2/WrittenBytes").arg(iSCSICount).arg(i)] = "B";
-
-                        /* Belongs to: */
-                        m_links[QString("/Devices/SCSI%1/%2").arg(iSCSICount).arg(i)] = QStringList()
-                            << QString("/Devices/SCSI%1/%2/ReadBytes").arg(iSCSICount).arg(i)
-                            << QString("/Devices/SCSI%1/%2/WrittenBytes").arg(iSCSICount).arg(i);
-                    }
-                }
-                ++iSCSICount;
-                break;
-            }
-            case KStorageBus_USB:
-            {
-                for (ULONG i = 0; i < sp.GetMaxPortCountForStorageBus(KStorageBus_USB); ++i)
-                {
-                    for (ULONG j = 0; j < sp.GetMaxDevicesPerPortForStorageBus(KStorageBus_USB); ++j)
-                    {
-                        /* Names: */
-                        m_names[QString("/Devices/USB%1/%2/ReadBytes").arg(iUSBCount).arg(i)]
-                            = tr("Data Read");
-                        m_names[QString("/Devices/USB%1/%2/WrittenBytes").arg(iUSBCount).arg(i)]
-                            = tr("Data Written");
-
-                        /* Units: */
-                        m_units[QString("/Devices/USB%1/%2/ReadBytes").arg(iUSBCount).arg(i)] = "B";
-                        m_units[QString("/Devices/USB%1/%2/WrittenBytes").arg(iUSBCount).arg(i)] = "B";
-
-                        /* Belongs to: */
-                        m_links[QString("/Devices/USB%1/%2").arg(iUSBCount).arg(i)] = QStringList()
-                            << QString("/Devices/USB%1/%2/ReadBytes").arg(iUSBCount).arg(i)
-                            << QString("/Devices/USB%1/%2/WrittenBytes").arg(iUSBCount).arg(i);
-                    }
-                }
-                ++iUSBCount;
-                break;
-            }
-            case KStorageBus_SAS:
-            {
-                for (ULONG i = 0; i < sp.GetMaxPortCountForStorageBus(KStorageBus_SAS); ++i)
-                {
-                    for (ULONG j = 0; j < sp.GetMaxDevicesPerPortForStorageBus(KStorageBus_SAS); ++j)
-                    {
-                        /* Names: */
-                        m_names[QString("/Devices/SAS%1/%2/ReadBytes").arg(iSASCount).arg(i)]
-                            = tr("Data Read");
-                        m_names[QString("/Devices/SAS%1/%2/WrittenBytes").arg(iSASCount).arg(i)]
-                            = tr("Data Written");
-
-                        /* Units: */
-                        m_units[QString("/Devices/SAS%1/%2/ReadBytes").arg(iSASCount).arg(i)] = "B";
-                        m_units[QString("/Devices/SAS%1/%2/WrittenBytes").arg(iSASCount).arg(i)] = "B";
-
-                        /* Belongs to: */
-                        m_links[QString("/Devices/SAS%1/%2").arg(iSASCount).arg(i)] = QStringList()
-                            << QString("/Devices/SAS%1/%2/ReadBytes").arg(iSASCount).arg(i)
-                            << QString("/Devices/SAS%1/%2/WrittenBytes").arg(iSASCount).arg(i);
-
-                    }
-                }
-                ++iSASCount;
-                break;
-            }
-            default:
-                break;
         }
     }
@@ -1098,5 +1026,5 @@
 
             CStorageControllerVector controllers = m_machine.GetStorageControllers();
-            int iIDECount = 0, iSATACount = 0, iSCSICount = 0, iUSBCount = 0, iSASCount = 0;
+            int iIDECount = 0;
             foreach (const CStorageController &controller, controllers)
             {
@@ -1112,5 +1040,4 @@
                     p_text << UITextTableLine(strControllerName.arg(controller.GetName()), QString());
 
-                    int iSCSIIndex = 0;
                     /* Enumerate storage-attachments: */
                     foreach (const CMediumAttachment &attachment, attachments)
@@ -1134,39 +1061,14 @@
 
                             }
-                            case KStorageBus_SATA:
+                            default:
                             {
-                                QStringList keys = m_links[QString("/Devices/SATA%1/Port%2").arg(iSATACount).arg(iPort)];
+                                uint32_t iInstance = ctr.GetInstance();
+                                const KStorageControllerType enmCtrl = ctr.GetControllerType();
+                                const char *pszCtrl = storCtrlType2Str(enmCtrl);
+                                QStringList keys = m_links[QString("/Devices/%1%2/Port%3").arg(pszCtrl).arg(iInstance).arg(iPort)];
                                 foreach (QString strKey, keys)
                                     p_text << UITextTableLine(m_names[strKey], QString("%1 %2").arg(m_values[strKey]).arg(m_units[strKey]));
                                 break;
                             }
-
-                            case KStorageBus_SCSI:
-                            {
-                                QStringList keys = m_links[QString("/Devices/SCSI%1/%2").arg(iSCSICount).arg(iSCSIIndex)];
-                                foreach (QString strKey, keys)
-                                    p_text << UITextTableLine(m_names[strKey], QString("%1 %2").arg(m_values[strKey]).arg(m_units[strKey]));
-                                ++iSCSIIndex;
-                                break;
-                            }
-
-                            case KStorageBus_USB:
-                            {
-                                QStringList keys = m_links[QString("/Devices/USB%1/%2").arg(iUSBCount).arg(iPort)];
-                                foreach (QString strKey, keys)
-                                    p_text << UITextTableLine(m_names[strKey], QString("%1 %2").arg(m_values[strKey]).arg(m_units[strKey]));
-                                break;
-                            }
-
-                            case KStorageBus_SAS:
-                            {
-                                QStringList keys = m_links[QString("/Devices/SAS%1/%2").arg(iSASCount).arg(iPort)];
-                                foreach (QString strKey, keys)
-                                    p_text << UITextTableLine(m_names[strKey], QString("%1 %2").arg(m_values[strKey]).arg(m_units[strKey]));
-                                break;
-                            }
-
-                            default:
-                                break;
                         }
                     }
@@ -1176,8 +1078,4 @@
                 {
                     case KStorageBus_IDE:  ++iIDECount; break;
-                    case KStorageBus_SATA: ++iSATACount; break;
-                    case KStorageBus_SCSI: ++iSCSICount; break;
-                    case KStorageBus_USB:  ++iUSBCount; break;
-                    case KStorageBus_SAS:  ++iSASCount; break;
                     default: break;
                 }
@@ -1236,4 +1134,44 @@
 }
 
+const char *UIInformationDataStorageStatistics::storCtrlType2Str(const KStorageControllerType enmCtrlType) const
+{
+    const char *pszCtrl = NULL;
+    switch (enmCtrlType)
+    {
+        case KStorageControllerType_LsiLogic:
+            pszCtrl = "LSILOGIC";
+            break;
+        case KStorageControllerType_BusLogic:
+            pszCtrl = "BUSLOGIC";
+            break;
+        case KStorageControllerType_IntelAhci:
+            pszCtrl = "AHCI";
+            break;
+        case KStorageControllerType_PIIX3:
+        case KStorageControllerType_PIIX4:
+        case KStorageControllerType_ICH6:
+            pszCtrl = "PIIX3IDE";
+            break;
+        case KStorageControllerType_I82078:
+            pszCtrl = "I82078";
+            break;
+        case KStorageControllerType_LsiLogicSas:
+            pszCtrl = "LSILOGICSAS";
+            break;
+        case KStorageControllerType_USB:
+            pszCtrl = "MSD";
+            break;
+        case KStorageControllerType_NVMe:
+            pszCtrl = "NVME";
+            break;
+        default:
+            AssertFailed();
+            pszCtrl = "<INVALID>";
+            break;
+    }
+
+    return pszCtrl;
+}
+
 void UIInformationDataStorageStatistics::sltProcessStatistics()
 {
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationDataItem.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationDataItem.h	(revision 64839)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationDataItem.h	(revision 64840)
@@ -314,4 +314,8 @@
     QString parseStatistics(const QString &strText);
 
+    /** Converts a given storage controller type to the string representation used
+     * in statistics. */
+    const char *storCtrlType2Str(const KStorageControllerType enmCtrlType) const;
+
     /** VM statistics counter data map. */
     typedef QMap <QString, QString> DataMapType;
