Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v2.6.31-rc4 125 lines 3.5 kB view raw
1/* 2 * Copyright (C) 2007-2008 Advanced Micro Devices, Inc. 3 * Author: Joerg Roedel <joerg.roedel@amd.com> 4 * 5 * This program is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 as published 7 * by the Free Software Foundation. 8 * 9 * This program is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU General Public License for more details. 13 * 14 * You should have received a copy of the GNU General Public License 15 * along with this program; if not, write to the Free Software 16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 17 */ 18 19#ifndef __LINUX_IOMMU_H 20#define __LINUX_IOMMU_H 21 22#define IOMMU_READ (1) 23#define IOMMU_WRITE (2) 24#define IOMMU_CACHE (4) /* DMA cache coherency */ 25 26struct device; 27 28struct iommu_domain { 29 void *priv; 30}; 31 32#define IOMMU_CAP_CACHE_COHERENCY 0x1 33 34struct iommu_ops { 35 int (*domain_init)(struct iommu_domain *domain); 36 void (*domain_destroy)(struct iommu_domain *domain); 37 int (*attach_dev)(struct iommu_domain *domain, struct device *dev); 38 void (*detach_dev)(struct iommu_domain *domain, struct device *dev); 39 int (*map)(struct iommu_domain *domain, unsigned long iova, 40 phys_addr_t paddr, size_t size, int prot); 41 void (*unmap)(struct iommu_domain *domain, unsigned long iova, 42 size_t size); 43 phys_addr_t (*iova_to_phys)(struct iommu_domain *domain, 44 unsigned long iova); 45 int (*domain_has_cap)(struct iommu_domain *domain, 46 unsigned long cap); 47}; 48 49#ifdef CONFIG_IOMMU_API 50 51extern void register_iommu(struct iommu_ops *ops); 52extern bool iommu_found(void); 53extern struct iommu_domain *iommu_domain_alloc(void); 54extern void iommu_domain_free(struct iommu_domain *domain); 55extern int iommu_attach_device(struct iommu_domain *domain, 56 struct device *dev); 57extern void iommu_detach_device(struct iommu_domain *domain, 58 struct device *dev); 59extern int iommu_map_range(struct iommu_domain *domain, unsigned long iova, 60 phys_addr_t paddr, size_t size, int prot); 61extern void iommu_unmap_range(struct iommu_domain *domain, unsigned long iova, 62 size_t size); 63extern phys_addr_t iommu_iova_to_phys(struct iommu_domain *domain, 64 unsigned long iova); 65extern int iommu_domain_has_cap(struct iommu_domain *domain, 66 unsigned long cap); 67 68#else /* CONFIG_IOMMU_API */ 69 70static inline void register_iommu(struct iommu_ops *ops) 71{ 72} 73 74static inline bool iommu_found(void) 75{ 76 return false; 77} 78 79static inline struct iommu_domain *iommu_domain_alloc(void) 80{ 81 return NULL; 82} 83 84static inline void iommu_domain_free(struct iommu_domain *domain) 85{ 86} 87 88static inline int iommu_attach_device(struct iommu_domain *domain, 89 struct device *dev) 90{ 91 return -ENODEV; 92} 93 94static inline void iommu_detach_device(struct iommu_domain *domain, 95 struct device *dev) 96{ 97} 98 99static inline int iommu_map_range(struct iommu_domain *domain, 100 unsigned long iova, phys_addr_t paddr, 101 size_t size, int prot) 102{ 103 return -ENODEV; 104} 105 106static inline void iommu_unmap_range(struct iommu_domain *domain, 107 unsigned long iova, size_t size) 108{ 109} 110 111static inline phys_addr_t iommu_iova_to_phys(struct iommu_domain *domain, 112 unsigned long iova) 113{ 114 return 0; 115} 116 117static inline int domain_has_cap(struct iommu_domain *domain, 118 unsigned long cap) 119{ 120 return 0; 121} 122 123#endif /* CONFIG_IOMMU_API */ 124 125#endif /* __LINUX_IOMMU_H */