VirtualBox

Changeset 77023 in vbox for trunk/src/VBox/Devices/Storage


Ignore:
Timestamp:
Jan 28, 2019 3:32:50 PM (6 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
128450
Message:

DevATA: Added READ CD MSF support (see bugref:5869).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Storage/DevATA.cpp

    r77012 r77023  
    32363236    uint8_t *pbBuf;
    32373237    uint32_t cbMax;
     3238    uint32_t cSectors, iATAPILBA;
    32383239
    32393240    pbPacket = s->aATAPICmd;
     
    33413342        case SCSI_READ_12:
    33423343        {
    3343             uint32_t cSectors, iATAPILBA;
    3344 
    33453344            if (s->cNotifiedMediaChange > 0)
    33463345            {
     
    34063405            break;
    34073406        }
     3407        case SCSI_READ_CD_MSF:
    34083408        case SCSI_READ_CD:
    34093409        {
    3410             uint32_t cSectors, iATAPILBA;
    3411 
    34123410            if (s->cNotifiedMediaChange > 0)
    34133411            {
     
    34263424                break;
    34273425            }
    3428             cSectors = (pbPacket[6] << 16) | (pbPacket[7] << 8) | pbPacket[8];
    3429             iATAPILBA = scsiBE2H_U32(pbPacket + 2);
     3426            if (pbPacket[0] == SCSI_READ_CD)
     3427            {
     3428                cSectors = (pbPacket[6] << 16) | (pbPacket[7] << 8) | pbPacket[8];
     3429                iATAPILBA = scsiBE2H_U32(pbPacket + 2);
     3430            }
     3431            else    /* READ CD MSF */
     3432            {
     3433                iATAPILBA = scsiMSF2LBA(pbPacket + 3);
     3434                if (iATAPILBA > scsiMSF2LBA(pbPacket + 6))
     3435                {
     3436                    Log2(("Start MSF %02u:%02u:%02u > end MSF  %02u:%02u:%02u!\n", *(pbPacket + 3), *(pbPacket + 4), *(pbPacket + 5),
     3437                          *(pbPacket + 6), *(pbPacket + 7), *(pbPacket + 8)));
     3438                    atapiR3CmdErrorSimple(s, SCSI_SENSE_ILLEGAL_REQUEST, SCSI_ASC_INV_FIELD_IN_CMD_PACKET);
     3439                    break;
     3440                }
     3441                cSectors = scsiMSF2LBA(pbPacket + 6) - iATAPILBA;
     3442                Log2(("Start MSF %02u:%02u:%02u -> LBA %u\n", *(pbPacket + 3), *(pbPacket + 4), *(pbPacket + 5), iATAPILBA));
     3443                Log2(("End   MSF %02u:%02u:%02u -> %u sectors\n", *(pbPacket + 6), *(pbPacket + 7), *(pbPacket + 8), cSectors));
     3444            }
    34303445            if (cSectors == 0)
    34313446            {
     
    34973512        case SCSI_SEEK_10:
    34983513        {
    3499             uint32_t iATAPILBA;
    35003514            if (s->cNotifiedMediaChange > 0)
    35013515            {
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette