iommu/fsl: Add the window permission flag as a parameter to iommu_window_enable API.
authorVarun Sethi <Varun.Sethi@freescale.com>
Thu, 28 Mar 2013 19:54:00 +0000 (01:24 +0530)
committerJoerg Roedel <joro@8bytes.org>
Tue, 2 Apr 2013 16:20:53 +0000 (18:20 +0200)
Each iommu window can have access permissions associated with it. Extended the
window_enable API to incorporate window access permissions.

In case of PAMU each window can have its specific set of permissions.

Signed-off-by: Varun Sethi <Varun.Sethi@freescale.com>
Signed-off-by: Joerg Roedel <joro@8bytes.org>
drivers/iommu/iommu.c
include/linux/iommu.h

index f730ed9..1d72b4f 100644 (file)
@@ -853,12 +853,13 @@ EXPORT_SYMBOL_GPL(iommu_unmap);
 
 
 int iommu_domain_window_enable(struct iommu_domain *domain, u32 wnd_nr,
-                              phys_addr_t paddr, u64 size)
+                              phys_addr_t paddr, u64 size, int prot)
 {
        if (unlikely(domain->ops->domain_window_enable == NULL))
                return -ENODEV;
 
-       return domain->ops->domain_window_enable(domain, wnd_nr, paddr, size);
+       return domain->ops->domain_window_enable(domain, wnd_nr, paddr, size,
+                                                prot);
 }
 EXPORT_SYMBOL_GPL(iommu_domain_window_enable);
 
index bb0a0fc..2727810 100644 (file)
@@ -104,7 +104,7 @@ struct iommu_ops {
 
        /* Window handling functions */
        int (*domain_window_enable)(struct iommu_domain *domain, u32 wnd_nr,
-                                   phys_addr_t paddr, u64 size);
+                                   phys_addr_t paddr, u64 size, int prot);
        void (*domain_window_disable)(struct iommu_domain *domain, u32 wnd_nr);
        /* Set the numer of window per domain */
        int (*domain_set_windows)(struct iommu_domain *domain, u32 w_count);
@@ -169,7 +169,8 @@ extern int iommu_domain_set_attr(struct iommu_domain *domain, enum iommu_attr,
 
 /* Window handling function prototypes */
 extern int iommu_domain_window_enable(struct iommu_domain *domain, u32 wnd_nr,
-                                     phys_addr_t offset, u64 size);
+                                     phys_addr_t offset, u64 size,
+                                     int prot);
 extern void iommu_domain_window_disable(struct iommu_domain *domain, u32 wnd_nr);
 /**
  * report_iommu_fault() - report about an IOMMU fault to the IOMMU framework
@@ -255,7 +256,7 @@ static inline int iommu_unmap(struct iommu_domain *domain, unsigned long iova,
 
 static inline int iommu_domain_window_enable(struct iommu_domain *domain,
                                             u32 wnd_nr, phys_addr_t paddr,
-                                            u64 size)
+                                            u64 size, int prot)
 {
        return -ENODEV;
 }