This problem may occur if the IEEE 1394 client driver that receives the Isochronous data transfer incorrectly accesses the buffers used to receive the transferred data.
This problem only occurs under the following conditions:
- The Isochronous data is received by a computer with at least 4GB of physical memory, or with physical memory located at physical addresses above 4GB.
- The computer is running a version of Windows that support more than 4GB of physical memory.
Under these conditions, Windows uses System Map Registers to translate (buffer) transfers to or from physical addresses above 4GB for Direct Memory Access (DMA) transfers performed by a 32-bit DMA controller, such as used in OHCI-compliant IEEE 1394 host controllers.�
If the buffer provided by the IEEE 1394 client driver for such transfers is located at a physical address above 4GB, Windows allocates an intermediate "bounce" buffer, located at a physical address below 4GB, that can be accessed by the 32-bit DMA controller.� Windows will copy the data between these buffers either before or after the DMA transfer is performed by the DMA controller (the IEEE 1394 host controller), depending on the direction of the transfer.� If data is being sent to the IEEE 1394 bus, the data is copied from the buffer provided by the IEEE 1394 client driver to the bounce buffer before the transfer is performed by the IEEE 1394 host controller.� If data is being received from the IEEE 1394 bus, the data is copied from the bounce buffer to the buffer provided by the IEEE 1394 client driver after the transfer is performed by the IEEE 1394 host controller.
If the buffer provided by the IEEE 1394 client driver to receive the transferred Isochronous data (described by the MDL field in the ISOCH_DESCRIPTOR for this buffer) is accessed before Windows has finalized the DMA transfer and copied the contents from the bounce buffer, the buffer provided by the IEEE 1394 client driver will not contain the correct data.� The DMA transfer is only finalized by the system during processing of a REQUEST_ISOCH_DETACH_BUFFERS request by the Microsoft IEEE 1394 driver stack.� The contents of the buffer described by the MDL field in the ISOCH_DESCRIPTOR cannot be assumed to be correct until the REQUEST_ISOCH_DETACH_BUFFERS request has completed.