diff options
author | Joerg Roedel <jroedel@suse.de> | 2015-12-21 12:53:54 +0100 |
---|---|---|
committer | Joerg Roedel <jroedel@suse.de> | 2015-12-28 17:18:50 +0100 |
commit | 007b74bab2739539bbc49bb9e3f022159dc2c279 (patch) | |
tree | 6fad6b5e659cc41a4177028479fa7ac89ad51ac4 /drivers/iommu/amd_iommu.c | |
parent | a7fb668fd88c979e790f0c324a1a6d749a8c5a60 (diff) | |
download | linux-007b74bab2739539bbc49bb9e3f022159dc2c279.tar.bz2 |
iommu/amd: Move 'struct dma_ops_domain' definition to amd_iommu.c
It is only used in this file anyway, so keep it there. Same
with 'struct aperture_range'.
Signed-off-by: Joerg Roedel <jroedel@suse.de>
Diffstat (limited to 'drivers/iommu/amd_iommu.c')
-rw-r--r-- | drivers/iommu/amd_iommu.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c index 3cdfac6024a5..9ce51eb1c33a 100644 --- a/drivers/iommu/amd_iommu.c +++ b/drivers/iommu/amd_iommu.c @@ -114,6 +114,46 @@ struct kmem_cache *amd_iommu_irq_cache; static void update_domain(struct protection_domain *domain); static int protection_domain_init(struct protection_domain *domain); +/* + * For dynamic growth the aperture size is split into ranges of 128MB of + * DMA address space each. This struct represents one such range. + */ +struct aperture_range { + + /* address allocation bitmap */ + unsigned long *bitmap; + + /* + * Array of PTE pages for the aperture. In this array we save all the + * leaf pages of the domain page table used for the aperture. This way + * we don't need to walk the page table to find a specific PTE. We can + * just calculate its address in constant time. + */ + u64 *pte_pages[64]; + + unsigned long offset; +}; + +/* + * Data container for a dma_ops specific protection domain + */ +struct dma_ops_domain { + /* generic protection domain information */ + struct protection_domain domain; + + /* size of the aperture for the mappings */ + unsigned long aperture_size; + + /* address we start to search for free addresses */ + unsigned long next_address; + + /* address space relevant data */ + struct aperture_range *aperture[APERTURE_MAX_RANGES]; + + /* This will be set to true when TLB needs to be flushed */ + bool need_flush; +}; + /**************************************************************************** * * Helper functions |