[go: nahoru, domu]

10519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae/* exynos_drm_iommu.h
20519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae *
30519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae * Copyright (c) 2012 Samsung Electronics Co., Ltd.
40519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae * Authoer: Inki Dae <inki.dae@samsung.com>
50519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae *
6d81aecb5e680311e1f3fd71e49e6a4072d2374d2Inki Dae * This program is free software; you can redistribute  it and/or modify it
7d81aecb5e680311e1f3fd71e49e6a4072d2374d2Inki Dae * under  the terms of  the GNU General  Public License as published by the
8d81aecb5e680311e1f3fd71e49e6a4072d2374d2Inki Dae * Free Software Foundation;  either version 2 of the  License, or (at your
9d81aecb5e680311e1f3fd71e49e6a4072d2374d2Inki Dae * option) any later version.
100519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae */
110519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae
120519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae#ifndef _EXYNOS_DRM_IOMMU_H_
130519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae#define _EXYNOS_DRM_IOMMU_H_
140519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae
150519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae#define EXYNOS_DEV_ADDR_START	0x20000000
160519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae#define EXYNOS_DEV_ADDR_SIZE	0x40000000
170519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae
180519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae#ifdef CONFIG_DRM_EXYNOS_IOMMU
190519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae
200519f9a12d0113caab78980c48a7902d2bd40c2cInki Daeint drm_create_iommu_mapping(struct drm_device *drm_dev);
210519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae
220519f9a12d0113caab78980c48a7902d2bd40c2cInki Daevoid drm_release_iommu_mapping(struct drm_device *drm_dev);
230519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae
240519f9a12d0113caab78980c48a7902d2bd40c2cInki Daeint drm_iommu_attach_device(struct drm_device *drm_dev,
250519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae				struct device *subdrv_dev);
260519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae
270519f9a12d0113caab78980c48a7902d2bd40c2cInki Daevoid drm_iommu_detach_device(struct drm_device *dev_dev,
280519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae				struct device *subdrv_dev);
290519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae
300519f9a12d0113caab78980c48a7902d2bd40c2cInki Daestatic inline bool is_drm_iommu_supported(struct drm_device *drm_dev)
310519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae{
320519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae#ifdef CONFIG_ARM_DMA_USE_IOMMU
330519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae	struct device *dev = drm_dev->dev;
340519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae
350519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae	return dev->archdata.mapping ? true : false;
360519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae#else
370519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae	return false;
380519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae#endif
390519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae}
400519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae
410519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae#else
420519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae
430519f9a12d0113caab78980c48a7902d2bd40c2cInki Daestruct dma_iommu_mapping;
440519f9a12d0113caab78980c48a7902d2bd40c2cInki Daestatic inline int drm_create_iommu_mapping(struct drm_device *drm_dev)
450519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae{
460519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae	return 0;
470519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae}
480519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae
490519f9a12d0113caab78980c48a7902d2bd40c2cInki Daestatic inline void drm_release_iommu_mapping(struct drm_device *drm_dev)
500519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae{
510519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae}
520519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae
530519f9a12d0113caab78980c48a7902d2bd40c2cInki Daestatic inline int drm_iommu_attach_device(struct drm_device *drm_dev,
540519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae						struct device *subdrv_dev)
550519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae{
560519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae	return 0;
570519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae}
580519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae
590519f9a12d0113caab78980c48a7902d2bd40c2cInki Daestatic inline void drm_iommu_detach_device(struct drm_device *drm_dev,
600519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae						struct device *subdrv_dev)
610519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae{
620519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae}
630519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae
640519f9a12d0113caab78980c48a7902d2bd40c2cInki Daestatic inline bool is_drm_iommu_supported(struct drm_device *drm_dev)
650519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae{
660519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae	return false;
670519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae}
680519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae
690519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae#endif
700519f9a12d0113caab78980c48a7902d2bd40c2cInki Dae#endif
71