This patch introduces a PCI DMA API and some generic code to support other DMA
APIs. Two types are introduced: PhysIOVector and IOVector. A DMA API
maps a PhysIOVector, which is composed of target_phys_addr_t, into an IOVector,
which is composed of void *.
This enables zero-copy IO to be preformed without introducing assumptions of
phys_ram_base. This API is at the PCI device level to enable support of
per-device IOMMU remapping.
+
+typedef struct IOVector
+{
+ int num;
+ struct IOVectorElement {
+ void *base;
+ size_t len;
+ } sg[0];
+} IOVector;
+