forsyth20121205-174063a80cc13 years agoHistory
86 lines · 2.2 KB · Text
RawDownload
.TH DMAINIT 10.2 x86.SH NAMEdmainit, dmasetup, dmadone, dmaend, dmacount \- platform-specific DMA support.SH SYNOPSIS.ta \w'\fLushort 'u.Bvoid	dmainit(int chan).PP.Blong	dmasetup(int chan, void *va, long len, int isread).PP.Bint	dmadone(int chan).PP.Bvoid	dmaend(int chan).PP.Bint	dmacount(int chan).PP.SH DESCRIPTIONThese functions manage DMA on a bus that uses ISA-style DMA controllers.They were originally devised for the x86 platform, but the same interface, and similar code,is used by other platforms that use similar controllers.They compensate as best they can for the limitations of older DMA implementations(eg, alignment, boundary and length restrictions).There are 8 DMA channels:0 to 3 are byte-oriented; 4 to 7 are word-oriented (16-bit words)..PP.I Dmainitmust be called early in a driver's initialisation to prepare.I chanfor use.Amongst other things, it allocates a page-sized buffer to help circumvent hardwarerestrictions on DMA addressing..PP.I Dmasetupprepares DMA channel.IR chanfor a transfer between a device configured to use itand the virtual address.IR va .(The transfer is started by issuing a command to the device.)If.I valies 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.IR dmainit .If.I isreadis true (non-zero), data is to be transferred from.I chanto.IR va ;if false, data is transferred from.I vato.IR chan .In all cases,.I dmasetupreturns the number of bytes to be transferred.That value (rather than.IR len )must be given to the device in the read or write request that starts the transfer..PP.I Dmadonereturns true (non-zero) if.I chanis idle..PP.I Dmaendmust be called at the end of every DMA operation.It disables.IR chan ,preventing further access to the previously associated memory and,if a low-memory buffer was required for input, transfers its contentsto the appropriate part of the target buffer..PP.I Dmacountreturns the number of bytes that were last transferred by channel.IR chan .The count is always even for word-oriented DMA channels..SH SOURCE.B /os/pc/dma.c