What is the difference between DMA-Engine and DMA-Controller?

DMA - Direct memory access. The operation of your driver reading or writing from/to your HW memory without the CPU being involved in it (freeing it to do other stuff).

DMA Controller - reading and writing can't be done by magic. if the CPU doesn't do it, we need another HW to do it. Many years ago (at the time of ISA/EISA) it was common to use a shared HW on the motherboard that did this operation. In recent years , each HW has its own DMA HW mechanism. But in all cases this specific HW gets the source address and the destination address and passes the data. Usually triggering an interrupt when done.

DMA Engine - Now here I am not sure what you mean. I believe you probably refer to the SW side that handles the DMA. DMA is a little more complicated than usual I\O since all memory SRC and DST has to be physically present at all times during the DMA operation. If the DST address is swapped to disk, the HW will write to a bad address and the system will crash. This and other aspects of DMA are handled by the driver with code sections you probably refer to as the "DMA Engine"

*Another interpretation of what 'DMA Engine' is, may be a code part of Firmware (or HW) that handles the DMA HW controller on the HW side.


According to this document, http://www.asprom.com/application/intel_3.pdf:

The 82C37 DMA controllers should not be confused with the DMA engines found in some earlier MCH (Memory Controller Hub) components. These DMA controllers are tied to the ISA/LPC bus and used mostly for transfers to/from slow devices such as floppy disk controllers.

So it seems it is a device found on previous platfroms that used MCHs devices.