diff options
| author | Lu Baolu <[email protected]> | 2018-12-10 09:58:57 +0800 |
|---|---|---|
| committer | Joerg Roedel <[email protected]> | 2018-12-11 10:45:57 +0100 |
| commit | 4f2ed183cfebf42b29ed8fe442169de97bc0fe61 (patch) | |
| tree | 6879596b09b13ad63dfd3c71da01aee71ac12314 /include/linux | |
| parent | 0bbeb01a4fafbf8422e5c8882d461d6ac4f71e15 (diff) | |
iommu/vt-d: Move page table helpers into header
So that they could also be used in other source files.
Cc: Ashok Raj <[email protected]>
Cc: Jacob Pan <[email protected]>
Cc: Kevin Tian <[email protected]>
Cc: Liu Yi L <[email protected]>
Cc: Sanjay Kumar <[email protected]>
Signed-off-by: Lu Baolu <[email protected]>
Reviewed-by: Ashok Raj <[email protected]>
Reviewed-by: Kevin Tian <[email protected]>
Signed-off-by: Joerg Roedel <[email protected]>
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/intel-iommu.h | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/include/linux/intel-iommu.h b/include/linux/intel-iommu.h index 8c9b6063d275..b4da61385ebf 100644 --- a/include/linux/intel-iommu.h +++ b/include/linux/intel-iommu.h @@ -590,6 +590,49 @@ static inline void __iommu_flush_cache( clflush_cache_range(addr, size); } +/* + * 0: readable + * 1: writable + * 2-6: reserved + * 7: super page + * 8-10: available + * 11: snoop behavior + * 12-63: Host physcial address + */ +struct dma_pte { + u64 val; +}; + +static inline void dma_clear_pte(struct dma_pte *pte) +{ + pte->val = 0; +} + +static inline u64 dma_pte_addr(struct dma_pte *pte) +{ +#ifdef CONFIG_64BIT + return pte->val & VTD_PAGE_MASK; +#else + /* Must have a full atomic 64-bit read */ + return __cmpxchg64(&pte->val, 0ULL, 0ULL) & VTD_PAGE_MASK; +#endif +} + +static inline bool dma_pte_present(struct dma_pte *pte) +{ + return (pte->val & 3) != 0; +} + +static inline bool dma_pte_superpage(struct dma_pte *pte) +{ + return (pte->val & DMA_PTE_LARGE_PAGE); +} + +static inline int first_pte_in_page(struct dma_pte *pte) +{ + return !((unsigned long)pte & ~VTD_PAGE_MASK); +} + extern struct dmar_drhd_unit * dmar_find_matched_drhd_unit(struct pci_dev *dev); extern int dmar_find_matched_atsr_unit(struct pci_dev *dev); |