linux/include/linux/omap-iommu.h
<<
>>
Prefs
   1/*
   2 * omap iommu: simple virtual address space management
   3 *
   4 * Copyright (C) 2008-2009 Nokia Corporation
   5 *
   6 * Written by Hiroshi DOYU <Hiroshi.DOYU@nokia.com>
   7 *
   8 * This program is free software; you can redistribute it and/or modify
   9 * it under the terms of the GNU General Public License version 2 as
  10 * published by the Free Software Foundation.
  11 */
  12
  13#ifndef _INTEL_IOMMU_H_
  14#define _INTEL_IOMMU_H_
  15
  16struct iovm_struct {
  17        struct omap_iommu       *iommu; /* iommu object which this belongs to */
  18        u32                     da_start; /* area definition */
  19        u32                     da_end;
  20        u32                     flags; /* IOVMF_: see below */
  21        struct list_head        list; /* linked in ascending order */
  22        const struct sg_table   *sgt; /* keep 'page' <-> 'da' mapping */
  23        void                    *va; /* mpu side mapped address */
  24};
  25
  26#define MMU_RAM_ENDIAN_SHIFT    9
  27#define MMU_RAM_ENDIAN_LITTLE   (0 << MMU_RAM_ENDIAN_SHIFT)
  28#define MMU_RAM_ELSZ_8          (0 << MMU_RAM_ELSZ_SHIFT)
  29#define IOVMF_ENDIAN_LITTLE     MMU_RAM_ENDIAN_LITTLE
  30#define MMU_RAM_ELSZ_SHIFT      7
  31#define IOVMF_ELSZ_8            MMU_RAM_ELSZ_8
  32
  33struct iommu_domain;
  34
  35extern struct iovm_struct *omap_find_iovm_area(struct device *dev, u32 da);
  36extern u32
  37omap_iommu_vmap(struct iommu_domain *domain, struct device *dev, u32 da,
  38                        const struct sg_table *sgt, u32 flags);
  39extern struct sg_table *omap_iommu_vunmap(struct iommu_domain *domain,
  40                                struct device *dev, u32 da);
  41extern u32
  42omap_iommu_vmalloc(struct iommu_domain *domain, struct device *dev,
  43                                u32 da, size_t bytes, u32 flags);
  44extern void
  45omap_iommu_vfree(struct iommu_domain *domain, struct device *dev,
  46                                const u32 da);
  47extern void *omap_da_to_va(struct device *dev, u32 da);
  48
  49extern void omap_iommu_save_ctx(struct device *dev);
  50extern void omap_iommu_restore_ctx(struct device *dev);
  51
  52#endif
  53