PCI64 Terminal (DMA) Block w/ Zero Length

wflawry <[email protected]> Mon, 24 Feb 2003 11:37:32 -0700
Newsgroups gmane.network.myrinet.general
Message-ID <[email protected]>
  Hi All,

Does anyone have actual experience using DMA blocks with zero length?

Looking at the PCI64 Programmer's Documentation, the DMA 
engine/controller does "nothing" for a non-terminal DMA block with zero 
length except the "DMA advances to the next block." Is this behavior 
well defined? Can one depend on the engine/controller setting the 
terminal bit on such a block before advancing? Or is the terminal bit 
always not set since there was no actual DMA for that block?

To shed some light, here is the specific scenario I am imagining: The 
DMA engine has "gone to sleep" on a terminal block ("A") for some 
channel; to make it simple here, all other DMA channels are inactive and 
remain so. In the following order, the MCP a) changes block A to have 
zero length, b) updates the address-part of A->next to point to a new 
chain of previously set up blocks ending in a terminal block, c) clears 
the terminal bit in A->next, d) reactivates the DMA engine. On the 
surface, this seems like a reasonable sequence. Is it?

Bill

-- 
William Lawry, Dept. 9223         [email protected]
Scalable Computing Systems
Sandia National Laboratories
(505) 284-4206