Here's a problem that we have been encountering in both a quick and dirty test application and our primary app.
If an ATA pass through command on a SATA drive is aborted, the NEXT PIO IN command will receive the aborted status for the prior command. For instance:
1. send an ATA command that errors out and receives an error status in the returned FIS, such as reading read a bad LBA
Note the settings in the Current TFR fields.
2. send an IDENTIFY
Current TFR still set to 51:04 status.
the data buffer contains valid IDENTIFY information indicating the IDENTIFY command succeeded.
We can clear the error by performing a non-PIO command such a a READ or READ DMA, but until we do that, PIO IN commands such as IDENTIFY will have "stale" status information in the Current TFR fields. Surely this is NOT expected behavior for ATA pass through? We have seen this across all current versions of the OS; XP, Server 2008, Win 7 using either iastor?.sys and msahci.sys. Is there a mechanism, also known as a "work around" that will allow us to clear the last status information to allow the next PIO IN to not be bounced with an infamous "false positive" ... or is that a "true negative"?
Gary G. Little