/* exynos_drm_iommu.h * * Copyright (c) 2012 Samsung Electronics Co., Ltd. * Authoer: Inki Dae <inki.dae@samsung.com> * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2 of the License, or (at your * option) any later version. */ #ifndef _EXYNOS_DRM_IOMMU_H_ #define _EXYNOS_DRM_IOMMU_H_ #define EXYNOS_DEV_ADDR_START 0x20000000 #define EXYNOS_DEV_ADDR_SIZE 0x40000000 #define EXYNOS_DEV_ADDR_ORDER 0x0 #ifdef CONFIG_DRM_EXYNOS_IOMMU int drm_create_iommu_mapping(struct drm_device *drm_dev); void drm_release_iommu_mapping(struct drm_device *drm_dev); int drm_iommu_attach_device(struct drm_device *drm_dev, struct device *subdrv_dev); void drm_iommu_detach_device(struct drm_device *dev_dev, struct device *subdrv_dev); static inline bool is_drm_iommu_supported(struct drm_device *drm_dev) { #ifdef CONFIG_ARM_DMA_USE_IOMMU struct device *dev = drm_dev->dev; return dev->archdata.mapping ? true : false; #else return false; #endif } #else struct dma_iommu_mapping; static inline int drm_create_iommu_mapping(struct drm_device *drm_dev) { return 0; } static inline void drm_release_iommu_mapping(struct drm_device *drm_dev) { } static inline int drm_iommu_attach_device(struct drm_device *drm_dev, struct device *subdrv_dev) { return 0; } static inline void drm_iommu_detach_device(struct drm_device *drm_dev, struct device *subdrv_dev) { } static inline bool is_drm_iommu_supported(struct drm_device *drm_dev) { return false; } #endif #endif