
SiI0680A PCI to IDE/ATA 
Data Sheet
Make sure PCI bus master operation of the SiI 0680A is stopped by clearing bit 0 of the PCI Bus Master – 
IDEx register. 
Note: The task file registers are not accessible as long as bit 0 is set. Clearing bit 0 causes bit 16 to be 
cleared as well. 
Read the device status at bits [13:24] in the IDEx Task File Register 1 register to clear the device interrupt 
and determine if there was error. 
Write ‘1’ to bit 18 (write-one-to-clear) in the PCI Bus Master – IDEx register to clear the PCI Interrupt. 
Silicon Image, Inc. 
 2006 Silicon Image, Inc.  
SiI-DS-0069-C
114 
11.9 IDE Virtual DMA Read/Write Operation 
In virtual DMA operation the controller uses a PIO data transfer mode to move data between an ATA/ATAPI device and the 
controller, and uses DMA to move that same data between the controller and the host memory.  For ATA/ATAPI devices that 
cannot operate in a “true” DMA mode, virtual DMA provides two benefits; first, using DMA to move data reduces the demand 
on the host CPU, and second, systems that use virtual memory often require that data buffers that will be accessed directly by 
low level device drivers be “mapped” into the operating system’s address space,  in virtual DMA mode the CPU does not 
access the data buffer directly, so the overhead of obtaining the mapping to operating system address space is eliminated. 
11.9.1 Using Virtual DMA with Non-DMA Capable Devices 
Once the SiI 0680A is initialized via the initialization sequence described in Section 11.1, the ATA device has been initialized 
for PIO mode data transfer per the guidelines in section 11.2, and the controller channel has been initialized for PIO mode data 
transfer per the instructions in section 11.3, virtual DMA read/write operations may be performed by following the programming 
sequence described below. 
NOTE:
 The watchdog timer feature is compatible with virtual DMA operation.  See section 11.7 for details about using the 
watchdog timer. 
Issue a PIO read/write command to the device following steps in section 11.4. 
Read Operation 
Wait for a PCI interrupt. 
Read the DMA status bits [18:16] of the PCI Bus Master – IDEx register, and check that bit 18 is set to make 
sure the interrupt was generated by the expected channel. 
If expected channel interrupted, read bits [11:10] of the channel’s IDEx Task File Timing + Configuration + 
Status register to determine the cause of the interrupt.  Bit 11 is set if the ATA/ATAPI device has an interrupt 
pending, bit 10 is set if a virtual DMA operation completed. 
If a virtual DMA operation completed, 
Write 00
H 
to bits [7:0] of the PCI Bus Master – IDEx register to disable DMA operation. 
Write 1 to bits [18:17] of the PCI Bus Master –IDEx register to reset the DMA status and virtual 
DMA interrupt bits, and the PCI interrupt. 
Check the previously read DMA status bits to ensure the DMA completed successfully.  See section 
11.8 for more information about interpreting the DMA status bits. 
Because ATA/ATAPI commands that transfer data using PIO can generate several interrupts 
during the data transfer phase of the command, a race condition is created between the interrupt 
indicating the completion of a virtual DMA operation, and the interrupt from the ATA/ATAPI device 
indicating it is ready to perform the next part of the data transfer.  To prevent missing an 
ATA/ATAPI device interrupt due to this race condition, it is necessary to re-read the channel’s IDEx 
Task File Timing + Configuration + Status register after disabling DMA operation and examining bit