Changeset 35767 in vbox for trunk/src/VBox/Devices
- Timestamp:
- Jan 28, 2011 2:41:06 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Storage/DevATA.cpp
r35595 r35767 4997 4997 4998 4998 case ATA_AIO_ABORT: 4999 /* Abort the current command only if it operates on the same interface. */ 5000 if (pCtl->iAIOIf == pReq->u.a.iIf) 4999 /* Abort the current command no matter what. There cannot be 5000 * any command activity on the other drive otherwise using 5001 * one thread per controller wouldn't work at all. */ 5002 s = &pCtl->aIfs[pReq->u.a.iIf]; 5003 5004 pCtl->uAsyncIOState = ATA_AIO_NEW; 5005 /* Do not change the DMA registers, they are not affected by the 5006 * ATA controller reset logic. It should be sufficient to issue a 5007 * new command, which is now possible as the state is cleared. */ 5008 if (pReq->u.a.fResetDrive) 5001 5009 { 5002 s = &pCtl->aIfs[pCtl->iAIOIf]; 5003 5004 pCtl->uAsyncIOState = ATA_AIO_NEW; 5005 /* Do not change the DMA registers, they are not affected by the 5006 * ATA controller reset logic. It should be sufficient to issue a 5007 * new command, which is now possible as the state is cleared. */ 5008 if (pReq->u.a.fResetDrive) 5009 { 5010 ataResetDevice(s); 5011 ataExecuteDeviceDiagnosticSS(s); 5012 } 5013 else 5014 { 5015 /* Stop any pending DMA transfer. */ 5016 s->fDMA = false; 5017 ataPIOTransferStop(s); 5018 ataUnsetStatus(s, ATA_STAT_BUSY | ATA_STAT_DRQ | ATA_STAT_SEEK | ATA_STAT_ERR); 5019 ataSetStatus(s, ATA_STAT_READY); 5020 ataSetIRQ(s); 5021 } 5010 ataResetDevice(s); 5011 ataExecuteDeviceDiagnosticSS(s); 5012 } 5013 else 5014 { 5015 /* Stop any pending DMA transfer. */ 5016 s->fDMA = false; 5017 ataPIOTransferStop(s); 5018 ataUnsetStatus(s, ATA_STAT_BUSY | ATA_STAT_DRQ | ATA_STAT_SEEK | ATA_STAT_ERR); 5019 ataSetStatus(s, ATA_STAT_READY); 5020 ataSetIRQ(s); 5022 5021 } 5023 5022 break;
Note:
See TracChangeset
for help on using the changeset viewer.