int dma_timer_expiry (ide_drive_t * drive);
An IDE DMA transfer timed out. In the event of an error we ask the driver to resolve the problem, if a DMA transfer is still in progress we continue to wait (arguably we need to add a secondary 'I don't care what the drive thinks' timeout here) Finally if we have an interrupt we let it complete the I/O. But only one time - we clear expiry and if it's still not completed after WAIT_CMD, we error and retry in PIO. This can occur if an interrupt is lost or due to hang or bugs.