PCI and Direct Memory Access (DMA)
In order to speed up data transfer and offload the CPU by allowing it not to perform heavy memory copy operations, both the controller and the device can be configured to perform Direct Memory Access (DMA), which is a means by which data is exchanged between device and host without the CPU being involved. Depending on the root complex, the PCI address space can be either 32 or 64 bits.
System memory regions that are the source or destination of DMA transfers are called DMA buffers. However, DMA buffer memory ranges depend on the size of the bus address. This originated from the ISA bus, which was 24-bits wide. In such a bus, DMA buffers could live only in the bottom 16 MB of system memory. This bottom memory is also referred to as ZONE_DMA
. However, PCI buses do not have such limitations. While the classic PCI bus supports 32-bit addressing, PCIe extended this to 64 bits. Thus, two different address formats can be used: the 32-bit address format...