I have been trying to get the information on this for so long and still haven't got anything solid. So, what I have learned so far is that the IOMMU converts the IOVA provided by the DMA to the physical address and reads or writes from/to the memory. My questions are as follows:
Does IOMMU store different Memory map for every single device? Does each device see the address range starting from zero in their virtual address space?
Where are these IOMMU memory maps are stored?
How does IOMMU know about which device the request is coming from if every device sees the virtual address starting from zero in their virtual address space?
Does the device also transmit some kind of Device specific ID or something which IOMMU recognizes and uses this to unmap the IOVA and protect the other memory addresses being seen or written by this device?