Index: /trunk/src/VBox/Devices/Storage/DevATA.cpp
===================================================================
--- /trunk/src/VBox/Devices/Storage/DevATA.cpp	(revision 43569)
+++ /trunk/src/VBox/Devices/Storage/DevATA.cpp	(revision 43570)
@@ -102,4 +102,6 @@
 /* Media track type */
 #define ATA_MEDIA_TYPE_UNKNOWN                  0    /**< unknown CD type */
+#define ATA_MEDIA_TYPE_DATA                     1    /**< Data CD */
+#define ATA_MEDIA_TYPE_CDDA                     2    /**< CD-DA  (audio) CD type */
 #define ATA_MEDIA_NO_DISC                    0x70    /**< Door closed, no medium */
 
@@ -2126,5 +2128,4 @@
         {
             case SCSI_SEND_CUE_SHEET:
-            case SCSI_READ_TOC_PMA_ATIP:
             {
                 if (!s->pTrackList)
@@ -2168,5 +2169,35 @@
                 ataSCSIPadStr(s->CTX_SUFF(pbIOBuffer) + 32, "1.0", 4);
             }
-
+            else if (   s->aATAPICmd[0] == SCSI_READ_TOC_PMA_ATIP
+                     && (s->aATAPICmd[2] & 0xf) != 0x05
+                     && s->aATAPICmd[6] != 0xaa)
+            {
+                /* Set the media type if we can detect it. */
+                uint8_t *pbBuf = s->CTX_SUFF(pbIOBuffer);
+
+                /** @todo: Implemented only for formatted TOC now. */
+                if (   (s->aATAPICmd[2] & 0xf) == 0
+                    && cbTransfer >= 6)
+                {
+                    uint32_t NewMediaType;
+                    uint32_t OldMediaType;
+
+                    if (pbBuf[5] & 0x4)
+                        NewMediaType = ATA_MEDIA_TYPE_DATA;
+                    else
+                        NewMediaType = ATA_MEDIA_TYPE_CDDA;
+
+                    OldMediaType = ataMediumTypeSet(s, NewMediaType);
+
+                    if (OldMediaType != NewMediaType)
+                        LogRel(("PIIX3 ATA: LUN#%d: CD-ROM passthrough, detected %s CD\n",
+                                s->iLUN,
+                                NewMediaType == ATA_MEDIA_TYPE_DATA
+                                ? "data"
+                                : "audio"));
+                }
+                else /* Play safe and set to unknown. */
+                    ataMediumTypeSet(s, ATA_MEDIA_TYPE_UNKNOWN);
+            }
             if (cbTransfer)
                 Log3(("ATAPI PT data read (%d): %.*Rhxs\n", cbTransfer, cbTransfer, s->CTX_SUFF(pbIOBuffer)));
