VirtualBox

Changeset 45972 in vbox for trunk/src/VBox/Devices


Ignore:
Timestamp:
May 9, 2013 9:06:06 PM (12 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
85624
Message:

DevATA: Do not unnecessarily restrict ATAPI PIO transfer size.

File:
1 edited

Legend:

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

    r45025 r45972  
    179179    /** Elementary ATA/ATAPI transfer size, shared PIO/DMA. */
    180180    uint32_t cbElementaryTransfer;
     181    /** Maximum ATAPI elementary transfer size, PIO only. */
     182    uint32_t cbPIOTransferLimit;
    181183    /** Current read/write buffer position, shared PIO/DMA. */
    182184    uint32_t iIOBufferCur;
     
    10091011    uint32_t cbLimit, cbTransfer;
    10101012
    1011     cbLimit = s->uATARegLCyl | (s->uATARegHCyl << 8);
     1013    cbLimit = s->cbPIOTransferLimit;
    10121014    /* Use maximum transfer size if the guest requested 0. Avoids a hang. */
    10131015    if (cbLimit == 0)
     
    17351737    s->fATAPITransfer = true;
    17361738    s->cbElementaryTransfer = s->cbTotalTransfer;
     1739    s->cbPIOTransferLimit = s->uATARegLCyl | (s->uATARegHCyl << 8);
    17371740    if (s->uTxDir == PDMBLOCKTXDIR_TO_DEVICE)
    17381741        atapiCmdOK(s);
     
    66596662            SSMR3GetU32(pSSM, &pThis->aCts[i].aIfs[j].cbTotalTransfer);
    66606663            SSMR3GetU32(pSSM, &pThis->aCts[i].aIfs[j].cbElementaryTransfer);
     6664            /* NB: cbPIOTransferLimit could be saved/restored but it's sufficient
     6665             * to re-calculate it here, with a tiny risk that it could be
     6666             * unnecessarily low for the current transfer only. Could be changed
     6667             * when changing the saved state in the future.
     6668             */
     6669            pThis->aCts[i].aIfs[j].cbPIOTransferLimit = (pThis->aCts[i].aIfs[j].uATARegHCyl << 8) | pThis->aCts[i].aIfs[j].uATARegLCyl;
    66616670            SSMR3GetU32(pSSM, &pThis->aCts[i].aIfs[j].iIOBufferCur);
    66626671            SSMR3GetU32(pSSM, &pThis->aCts[i].aIfs[j].iIOBufferEnd);
Note: See TracChangeset for help on using the changeset viewer.

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