long dmasetup(int chan, void *va, long len, int isread)
int dmadone(int chan)
void dmaend(int chan)
int dmacount(int chan)
Dmainit must be called early in a driver's initialisation to prepare chan for use. Amongst other things, it allocates a page-sized buffer to help circumvent hardware restrictions on DMA addressing.
Dmasetup prepares DMA channel chan for a transfer between a device configured to use it and the virtual address va. (The transfer is started by issuing a command to the device.) If va lies outside the kernel address space, the transfer crosses a 64k boundary, or exceeds the 16 Mbyte limit imposed by some DMA controllers, the transfer will be split into page-sized transfers using the buffer previously allocated by dmainit. If isread is true (non-zero), data is to be transferred from chan to va; if false, data is transferred from va to chan. In all cases, dmasetup returns the number of bytes to be transferred. That value (rather than len) must be given to the device in the read or write request that starts the transfer.
Dmadone returns true (non-zero) if chan is idle.
Dmaend must be called at the end of every DMA operation. It disables chan, preventing further access to the previously associated memory and, if a low-memory buffer was required for input, transfers its contents to the appropriate part of the target buffer.
Dmacount returns the number of bytes that were last transferred by channel chan. The count is always even for word-oriented DMA channels.
/man/10/dmainit(10) | Rev: Thu Feb 15 14:42:59 GMT 2007 |