Index: /trunk/src/VBox/ValidationKit/testdriver/vbox.py
===================================================================
--- /trunk/src/VBox/ValidationKit/testdriver/vbox.py	(revision 70489)
+++ /trunk/src/VBox/ValidationKit/testdriver/vbox.py	(revision 70490)
@@ -2203,5 +2203,6 @@
                      eNic0Type = None, eNic0AttachType = None, sNic0NetName = 'default', sNic0MacAddr = 'grouped', \
                      sFloppy = None, fNatForwardingForTxs = None, sHddControllerType = 'IDE Controller', \
-                     fVmmDevTestingPart = None, fVmmDevTestingMmio = False, sFirmwareType = 'bios', sChipsetType = 'piix3'):
+                     fVmmDevTestingPart = None, fVmmDevTestingMmio = False, sFirmwareType = 'bios', sChipsetType = 'piix3', \
+                     sDvdControllerType = 'IDE Controller',):
         """
         Creates a test VM with a immutable HD from the test resources.
@@ -2264,5 +2265,5 @@
                 fRc = oSession.enablePae(fPae);
             if fRc and sDvdImage is not None:
-                fRc = oSession.attachDvd(sDvdImage);
+                fRc = oSession.attachDvd(sDvdImage, sDvdControllerType);
             if fRc and sHd is not None:
                 fRc = oSession.attachHd(sHd, sHddControllerType);
@@ -3274,5 +3275,10 @@
     # pylint: enable=C0111
 
-    def txsCdWait(self, oSession, oTxsSession, cMsTimeout = 30000, sFileCdWait = 'vboxtxs-readme.txt'):
+    def txsCdWait(self,
+                  oSession,             # type: vboxwrappers.SessionWrapper
+                  oTxsSession,          # type: txsclient.Session
+                  cMsTimeout = 30000,   # type: int
+                  asFiles = None        # type: list(String)
+                  ):                    # -> bool
         """
         Mostly an internal helper for txsRebootAndReconnectViaTcp and
@@ -3285,4 +3291,6 @@
         """
 
+        if asFiles is None:
+            asFiles = [ 'vboxtxs-readme.txt', 'vboxtxsreadme.txt' ];
         fRemoveVm   = self.addTask(oSession);
         fRemoveTxs  = self.addTask(oTxsSession);
@@ -3290,5 +3298,6 @@
         msStart     = base.timestampMilli();
         cMsTimeout2 = cMsTimeout;
-        fRc         = oTxsSession.asyncIsFile('${CDROM}/%s' % (sFileCdWait), cMsTimeout2);
+        iFile       = 0;
+        fRc         = oTxsSession.asyncIsFile('${CDROM}/%s' % (asFiles[iFile],), cMsTimeout2);
         if fRc is True:
             while True:
@@ -3298,10 +3307,10 @@
                     oTxsSession.cancelTask();
                     if oTask is None:
-                        reporter.errorTimeout('txsToCdWait: The task timed out (after %s ms).'
+                        reporter.errorTimeout('txsCdWait: The task timed out (after %s ms).'
                                               % (base.timestampMilli() - msStart,));
                     elif oTask is oSession:
-                        reporter.error('txsToCdWait: The VM terminated unexpectedly');
+                        reporter.error('txsCdWait: The VM terminated unexpectedly');
                     else:
-                        reporter.error('txsToCdWait: An unknown task %s was returned' % (oTask,));
+                        reporter.error('txsCdWait: An unknown task %s was returned' % (oTask,));
                     fRc = False;
                     break;
@@ -3312,5 +3321,5 @@
                 cMsElapsed = base.timestampMilli() - msStart;
                 if cMsElapsed >= cMsTimeout:
-                    reporter.error('txsToCdWait: timed out');
+                    reporter.error('txsCdWait: timed out');
                     fRc = False;
                     break;
@@ -3323,10 +3332,11 @@
                 if cMsTimeout2 < 500:
                     cMsTimeout2 = 500;
-                fRc = oTxsSession.asyncIsFile('${CDROM}/%s' % (sFileCdWait), cMsTimeout2);
+                iFile = (iFile + 1) % len(asFiles);
+                fRc = oTxsSession.asyncIsFile('${CDROM}/%s' % (asFiles[iFile]), cMsTimeout2);
                 if fRc is not True:
-                    reporter.error('txsToCdWait: asyncIsFile failed');
+                    reporter.error('txsCdWait: asyncIsFile failed');
                     break;
         else:
-            reporter.error('txsToCdWait: asyncIsFile failed');
+            reporter.error('txsCdWait: asyncIsFile failed');
 
         if fRemoveTxs:
@@ -3378,5 +3388,5 @@
 
     def startVmAndConnectToTxsViaTcp(self, sVmName, fCdWait = False, cMsTimeout = 15*60000, \
-                                     cMsCdWait = 30000, sFileCdWait = 'vboxtxs-readme.txt', \
+                                     cMsCdWait = 30000, sFileCdWait = None, \
                                      fNatForwardingForTxs = False):
         """
@@ -3427,5 +3437,5 @@
 
     def txsRebootAndReconnectViaTcp(self, oSession, oTxsSession, fCdWait = False, cMsTimeout = 15*60000, \
-                                    cMsCdWait = 30000, sFileCdWait = 'vboxtxs-readme.txt', fNatForwardingForTxs = False):
+                                    cMsCdWait = 30000, sFileCdWait = None, fNatForwardingForTxs = False):
         """
         Executes the TXS reboot command
Index: /trunk/src/VBox/ValidationKit/testdriver/vboxwrappers.py
===================================================================
--- /trunk/src/VBox/ValidationKit/testdriver/vboxwrappers.py	(revision 70489)
+++ /trunk/src/VBox/ValidationKit/testdriver/vboxwrappers.py	(revision 70490)
@@ -45,21 +45,32 @@
 
 
-def _ControllerNameToBus(sController):
+def _ControllerNameToBusAndType(sController):
     """ Translate a controller name to a storage bus. """
     if sController == "IDE Controller":
-        iType = vboxcon.StorageBus_IDE;
+        eBus  = vboxcon.StorageBus_IDE;
+        eType = vboxcon.StorageControllerType_PIIX4;
     elif sController == "SATA Controller":
-        iType = vboxcon.StorageBus_SATA;
+        eBus  = vboxcon.StorageBus_SATA;
+        eType = vboxcon.StorageControllerType_IntelAhci;
     elif sController == "Floppy Controller":
-        iType = vboxcon.StorageBus_Floppy;
+        eType = vboxcon.StorageControllerType_I82078;
+        eBus  = vboxcon.StorageBus_Floppy;
     elif sController == "SAS Controller":
-        iType = vboxcon.StorageBus_SAS;
+        eBus  = vboxcon.StorageBus_SAS;
+        eType = vboxcon.StorageControllerType_LsiLogicSas;
     elif sController == "SCSI Controller":
-        iType = vboxcon.StorageBus_SCSI;
+        eBus  = vboxcon.StorageBus_SCSI;
+        eType = vboxcon.StorageControllerType_LsiLogic;
+    elif sController == "BusLogic SCSI Controller":
+        eBus  = vboxcon.StorageBus_SCSI;
+        eType = vboxcon.StorageControllerType_BusLogic;
     elif sController == "NVMe Controller":
-        iType = vboxcon.StorageBus_PCIe;
+        eBus  = vboxcon.StorageBus_PCIe;
+        eType = vboxcon.StorageControllerType_NVMe;
     else:
-        iType = vboxcon.StorageBus_Null;
-    return iType;
+        eBus  = vboxcon.StorageBus_Null;
+        eType = vboxcon.StorageControllerType_Null;
+    return (eBus, eType);
+
 
 def _nameMachineState(eState):
@@ -1632,11 +1643,19 @@
                 self.o.machine.getStorageControllerByName(sController);
             except:
-                iType = _ControllerNameToBus(sController);
+                (eBus, eType) = _ControllerNameToBusAndType(sController);
                 try:
-                    self.o.machine.addStorageController(sController, iType);
-                    reporter.log('added storage controller "%s" (type %s) to %s' % (sController, iType, self.sName));
+                    oCtl = self.o.machine.addStorageController(sController, eBus);
                 except:
-                    reporter.errorXcpt('addStorageController("%s",%s) failed on "%s"' % (sController, iType, self.sName) );
+                    reporter.errorXcpt('addStorageController("%s",%s) failed on "%s"' % (sController, eBus, self.sName) );
                     return False;
+                else:
+                    try:
+                        oCtl.controllerType = eType;
+                        reporter.log('added storage controller "%s" (bus %s, type %s) to %s'
+                                    % (sController, eBus, eType, self.sName));
+                    except:
+                        reporter.errorXcpt('controllerType = %s on ("%s" / %s) failed on "%s"'
+                                           % (eType, sController, eBus, self.sName) );
+                        return False;
         finally:
             self.oTstDrv.processPendingEvents();
@@ -1697,10 +1716,10 @@
             oCtl = self.o.machine.getStorageControllerByName(sController);
         except:
-            iType = _ControllerNameToBus(sController);
-            try:
-                oCtl = self.o.machine.addStorageController(sController, iType);
-                reporter.log('added storage controller "%s" (type %s) to %s' % (sController, iType, self.sName));
-            except:
-                reporter.errorXcpt('addStorageController("%s",%s) failed on "%s"' % (sController, iType, self.sName) );
+            (eBus, _) = _ControllerNameToBusAndType(sController);
+            try:
+                oCtl = self.o.machine.addStorageController(sController, eBus);
+                reporter.log('added storage controller "%s" (bus %s) to %s' % (sController, eBus, self.sName));
+            except:
+                reporter.errorXcpt('addStorageController("%s",%s) failed on "%s"' % (sController, eBus, self.sName) );
                 return False;
         try:
