| CONTENT: | |
| dma.h | |
| dma1.c | |
| dma2.s | |
| WHAT ARE THESE FILES: | |
| These files contain MPC8240 (Kahlua) DMA controller | |
| driver routines. The driver routines are not | |
| written for any specific operating system. | |
| They serves the purpose of code sample, and | |
| jump-start for using the MPC8240 DMA controller. | |
| For the reason of correctness of C language | |
| syntax, these files are compiled by Metaware | |
| C compiler and assembler. | |
| ENDIAN NOTATION: | |
| The algorithm is designed for big-endian mode, | |
| software is responsible for byte swapping. | |
| USAGE: | |
| 1. The host system that is running on MPC8240 | |
| or using MPC8240 as I/O device shall link | |
| the files listed here. The memory location | |
| of driver routines shall take into account of | |
| that driver routines need to run in supervisor | |
| mode and they process DMA controller interrupt. | |
| 2. The host system is responsible for configuring | |
| the MPC8240 including Embedded Utilities Memory | |
| Block. Since the DMA controller on MPC8240 can | |
| be accessed by either local 603e core or the host | |
| that MPC8240 serves as I/O processor through host | |
| PCI configuration, it is important that the local | |
| processor uses EUMBBAR to access its local DMA | |
| controller while the PCI master uses I/O | |
| processor's PCSRBAR to access the DMA controller | |
| on I/O device. | |
| To qualify whether is EUMBBAR or PCSRBAR, one | |
| additional parameter is requied from the host | |
| system, LOCAL or REMOTE so that the base value | |
| can be correctly interpreted. | |
| 3. If the host system is also using the EPIC unit | |
| on MPC8240, the system can register the | |
| DMA_ISR with the EPIC including other | |
| desired resources. | |
| If the host system does not using the EPIC unit | |
| on MPC8240, DMA_ISR function can be called for | |
| each desired time interval. | |
| In both cases, the host system is free to | |
| provide its own interrupt service routine. | |
| 4. To start a direct mode DMA transaction, | |
| use DMA_Bld_Curr with the start parameter | |
| set to 1. | |
| To start a chaining mode DMA transaction, | |
| the application shall build descriptors | |
| in memory first, next, use DMA_Bld_Desp | |
| with the start parameter set to 1. | |
| 5. DMA_Start function clears, then sets the CS | |
| bit of DMA mode register. | |
| DMA_Halt function clears the CS bit of DMA | |
| mode register. | |
| These functions can be used to start and | |
| halt the DMA transaction. | |
| If the chaining descriptors has been | |
| modified since the last time a DMA | |
| transaction started, use DMA_Chn_Cnt | |
| function to let DMA controller process | |
| the modified descriptor chain without | |
| stopping or disturbing the current DMA | |
| transaction. | |
| It is the host system's responsibility of | |
| setting up the correct DMA transfer mode | |
| and pass the correct memory address parameters. | |
| 6. It is the host system's responsibility of | |
| queueing the DMA I/O request. The host | |
| system can call the DMA_ISR with its own | |
| desired interrupt service subroutines to | |
| handle each individual interrupt and queued | |
| DMA I/O requests. | |
| 7. The DMA driver routines contains a set | |
| of utilities, Set and Get, for host system | |
| to query and modify the desired DMA registers. |