Index: /trunk/src/VBox/Devices/Storage/VSCSI/VSCSILunMmc.cpp
===================================================================
--- /trunk/src/VBox/Devices/Storage/VSCSI/VSCSILunMmc.cpp	(revision 43661)
+++ /trunk/src/VBox/Devices/Storage/VSCSI/VSCSILunMmc.cpp	(revision 43662)
@@ -60,5 +60,5 @@
 
 
-/* Fabricate TOC information. */
+/* Fabricate normal TOC information. */
 static int mmcReadTOCNormal(PVSCSILUNINT pVScsiLun, PVSCSIREQINT pVScsiReq, uint16_t cbMaxTransfer, bool fMSF)
 {
@@ -120,4 +120,35 @@
 
     RTSgBufCopyFromBuf(&pVScsiReq->SgBuf, aReply, cbMaxTransfer);
+
+    return vscsiLunReqSenseOkSet(pVScsiLun, pVScsiReq);
+}
+
+/* Fabricate session information. */
+static int mmcReadTOCMulti(PVSCSILUNINT pVScsiLun, PVSCSIREQINT pVScsiReq, uint16_t cbMaxTransfer, bool fMSF)
+{
+    PVSCSILUNMMC    pVScsiLunMmc = (PVSCSILUNMMC)pVScsiLun;
+    uint8_t         aReply[32];
+    uint8_t         *pbBuf = aReply;
+
+    /* multi session: only a single session defined */
+    memset(pbBuf, 0, 12);
+    pbBuf[1] = 0x0a;
+    pbBuf[2] = 0x01;    /* first complete session number */
+    pbBuf[3] = 0x01;    /* last complete session number */
+    pbBuf[5] = 0x14;    /* ADR, CONTROL */
+    pbBuf[6] = 1;       /* first track in last complete session */
+
+    if (fMSF)
+    {
+        pbBuf[8] = 0;   /* reserved */
+        mmcLBA2MSF(pbBuf + 8, 0);
+    }
+    else
+    {
+        /* sector 0 */
+        vscsiH2BEU32(pbBuf + 8, 0);
+    }
+
+    RTSgBufCopyFromBuf(&pVScsiReq->SgBuf, aReply, 12);
 
     return vscsiLunReqSenseOkSet(pVScsiLun, pVScsiReq);
@@ -394,4 +425,7 @@
                 case 0x00:
                     mmcReadTOCNormal(pVScsiLun, pVScsiReq, cbMax, fMSF);
+                    break;
+                case 0x01:
+                    mmcReadTOCMulti(pVScsiLun, pVScsiReq, cbMax, fMSF);
                     break;
                 default:
