Changeset 93411 in vbox for trunk/src/VBox/Devices/Storage
- Timestamp:
- Jan 24, 2022 2:46:17 PM (3 years ago)
- svn:sync-xref-src-repo-rev:
- 149513
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Storage/DevATA.cpp
r93115 r93411 60 60 */ 61 61 /** The current saved state version. */ 62 #define ATA_SAVED_STATE_VERSION 20 62 #define ATA_SAVED_STATE_VERSION 21 63 /** Saved state version without iCurLBA for ATA commands. */ 64 #define ATA_SAVED_STATE_VERSION_WITHOUT_ATA_ILBA 20 63 65 /** The saved state version used by VirtualBox 3.0. 64 66 * This lacks the config part and has the type at the and. */ … … 282 284 uint32_t iIOBufferPIODataEnd; 283 285 284 /** ATAPI current LBA position. */285 uint32_t i ATAPILBA;286 /** Current LBA position (both ATA/ATAPI). */ 287 uint32_t iCurLBA; 286 288 /** ATAPI current sector size. */ 287 289 uint32_t cbATAPISector; … … 1846 1848 cSectors = s->cbElementaryTransfer / cbSector; 1847 1849 Assert(cSectors); 1848 iLBA = ataR3GetSector(s);1850 iLBA = s->iCurLBA; 1849 1851 Log(("%s: %d sectors at LBA %d\n", __FUNCTION__, cSectors, iLBA)); 1850 1852 rc = ataR3ReadSectors(pDevIns, pCtl, s, pDevR3, iLBA, s->abIOBuffer, cSectors, &fRedo); … … 1864 1866 ataR3SetSector(s, iLBA + cSectors); 1865 1867 s->uATARegNSector -= cSectors; 1868 s->iCurLBA += cSectors; 1866 1869 ataR3CmdOK(pCtl, s, ATA_STAT_SEEK); 1867 1870 } … … 1898 1901 cSectors = s->cbElementaryTransfer / cbSector; 1899 1902 Assert(cSectors); 1900 iLBA = ataR3GetSector(s);1903 iLBA = s->iCurLBA; 1901 1904 Log(("%s: %d sectors at LBA %d\n", __FUNCTION__, cSectors, iLBA)); 1902 1905 rc = ataR3WriteSectors(pDevIns, pCtl, s, pDevR3, iLBA, s->abIOBuffer, cSectors, &fRedo); … … 1904 1907 { 1905 1908 ataR3SetSector(s, iLBA + cSectors); 1909 s->iCurLBA = iLBA + cSectors; 1906 1910 if (!s->cbTotalTransfer) 1907 1911 s->iSourceSink = ATAFN_SS_NULL; … … 2010 2014 2011 2015 Assert(s->uTxDir == PDMMEDIATXDIR_FROM_DEVICE); 2012 uint32_t const iATAPILBA = s->i ATAPILBA;2016 uint32_t const iATAPILBA = s->iCurLBA; 2013 2017 uint32_t const cbTransfer = RT_MIN(s->cbTotalTransfer, RT_MIN(s->cbIOBuffer, ATA_MAX_IO_BUFFER_SIZE)); 2014 2018 uint32_t const cbATAPISector = s->cbATAPISector; … … 2120 2124 s->iSourceSink = ATAFN_SS_NULL; 2121 2125 atapiR3CmdOK(pCtl, s); 2122 s->i ATAPILBA = iATAPILBA + cSectors;2126 s->iCurLBA = iATAPILBA + cSectors; 2123 2127 } 2124 2128 else … … 2612 2616 { 2613 2617 Assert(cSectors > 0); 2614 s->i ATAPILBA = iATAPILBA;2618 s->iCurLBA = iATAPILBA; 2615 2619 s->cbATAPISector = cbSector; 2616 2620 ataR3StartTransfer(pDevIns, pCtl, s, cSectors * cbSector, … … 4398 4402 goto abort_cmd; 4399 4403 s->cSectorsPerIRQ = 1; 4404 s->iCurLBA = ataR3GetSector(s); 4400 4405 ataR3StartTransfer(pDevIns, pCtl, s, ataR3GetNSectors(s) * s->cbSector, PDMMEDIATXDIR_FROM_DEVICE, ATAFN_BT_READ_WRITE_SECTORS, ATAFN_SS_READ_SECTORS, false); 4401 4406 break; … … 4408 4413 goto abort_cmd; 4409 4414 s->cSectorsPerIRQ = 1; 4415 s->iCurLBA = ataR3GetSector(s); 4410 4416 ataR3StartTransfer(pDevIns, pCtl, s, ataR3GetNSectors(s) * s->cbSector, PDMMEDIATXDIR_TO_DEVICE, ATAFN_BT_READ_WRITE_SECTORS, ATAFN_SS_WRITE_SECTORS, false); 4411 4417 break; … … 4417 4423 goto abort_cmd; 4418 4424 s->cSectorsPerIRQ = s->cMultSectors; 4425 s->iCurLBA = ataR3GetSector(s); 4419 4426 ataR3StartTransfer(pDevIns, pCtl, s, ataR3GetNSectors(s) * s->cbSector, PDMMEDIATXDIR_FROM_DEVICE, ATAFN_BT_READ_WRITE_SECTORS, ATAFN_SS_READ_SECTORS, false); 4420 4427 break; … … 4426 4433 goto abort_cmd; 4427 4434 s->cSectorsPerIRQ = s->cMultSectors; 4435 s->iCurLBA = ataR3GetSector(s); 4428 4436 ataR3StartTransfer(pDevIns, pCtl, s, ataR3GetNSectors(s) * s->cbSector, PDMMEDIATXDIR_TO_DEVICE, ATAFN_BT_READ_WRITE_SECTORS, ATAFN_SS_WRITE_SECTORS, false); 4429 4437 break; … … 4436 4444 goto abort_cmd; 4437 4445 s->cSectorsPerIRQ = ATA_MAX_MULT_SECTORS; 4446 s->iCurLBA = ataR3GetSector(s); 4438 4447 s->fDMA = true; 4439 4448 ataR3StartTransfer(pDevIns, pCtl, s, ataR3GetNSectors(s) * s->cbSector, PDMMEDIATXDIR_FROM_DEVICE, ATAFN_BT_READ_WRITE_SECTORS, ATAFN_SS_READ_SECTORS, false); … … 4447 4456 goto abort_cmd; 4448 4457 s->cSectorsPerIRQ = ATA_MAX_MULT_SECTORS; 4458 s->iCurLBA = ataR3GetSector(s); 4449 4459 s->fDMA = true; 4450 4460 ataR3StartTransfer(pDevIns, pCtl, s, ataR3GetNSectors(s) * s->cbSector, PDMMEDIATXDIR_TO_DEVICE, ATAFN_BT_READ_WRITE_SECTORS, ATAFN_SS_WRITE_SECTORS, false); … … 7260 7270 pHlp->pfnSSMPutU32(pSSM, pThis->aCts[i].aIfs[j].iIOBufferPIODataStart); 7261 7271 pHlp->pfnSSMPutU32(pSSM, pThis->aCts[i].aIfs[j].iIOBufferPIODataEnd); 7262 pHlp->pfnSSMPutU32(pSSM, pThis->aCts[i].aIfs[j].i ATAPILBA);7272 pHlp->pfnSSMPutU32(pSSM, pThis->aCts[i].aIfs[j].iCurLBA); 7263 7273 pHlp->pfnSSMPutU32(pSSM, pThis->aCts[i].aIfs[j].cbATAPISector); 7264 7274 pHlp->pfnSSMPutMem(pSSM, &pThis->aCts[i].aIfs[j].abATAPICmd, sizeof(pThis->aCts[i].aIfs[j].abATAPICmd)); … … 7303 7313 7304 7314 if ( uVersion != ATA_SAVED_STATE_VERSION 7315 && uVersion != ATA_SAVED_STATE_VERSION_WITHOUT_ATA_ILBA 7305 7316 && uVersion != ATA_SAVED_STATE_VERSION_VBOX_30 7306 7317 && uVersion != ATA_SAVED_STATE_VERSION_WITHOUT_FULL_SENSE … … 7448 7459 pHlp->pfnSSMGetU32(pSSM, &pThis->aCts[i].aIfs[j].iIOBufferPIODataStart); 7449 7460 pHlp->pfnSSMGetU32(pSSM, &pThis->aCts[i].aIfs[j].iIOBufferPIODataEnd); 7450 pHlp->pfnSSMGetU32(pSSM, &pThis->aCts[i].aIfs[j].i ATAPILBA);7461 pHlp->pfnSSMGetU32(pSSM, &pThis->aCts[i].aIfs[j].iCurLBA); 7451 7462 pHlp->pfnSSMGetU32(pSSM, &pThis->aCts[i].aIfs[j].cbATAPISector); 7452 7463 pHlp->pfnSSMGetMem(pSSM, &pThis->aCts[i].aIfs[j].abATAPICmd, sizeof(pThis->aCts[i].aIfs[j].abATAPICmd)); … … 7475 7486 rc = pHlp->pfnSSMGetU32(pSSM, &cbIOBuffer); 7476 7487 AssertRCReturn(rc, rc); 7488 7489 if ( (uVersion <= ATA_SAVED_STATE_VERSION_WITHOUT_ATA_ILBA) 7490 && !pThis->aCts[i].aIfs[j].fATAPI) 7491 { 7492 pThis->aCts[i].aIfs[j].iCurLBA = ataR3GetSector(&pThis->aCts[i].aIfs[j]); 7493 } 7477 7494 7478 7495 if (cbIOBuffer)
Note:
See TracChangeset
for help on using the changeset viewer.