/* SPDX-License-Identifier: GPL-2.0+ */ /* * NVIDIA Tegra Video decoder driver * * Copyright (C) 2016-2019 GRATE-DRIVER project */ #ifndef TEGRA_VDE_H #define TEGRA_VDE_H #include #include #include #include #include #include #include struct clk; struct dma_buf; struct gen_pool; struct iommu_group; struct iommu_domain; struct reset_control; struct dma_buf_attachment; struct tegra_vde { void __iomem *sxe; void __iomem *bsev; void __iomem *mbe; void __iomem *ppe; void __iomem *mce; void __iomem *tfe; void __iomem *ppb; void __iomem *vdma; void __iomem *frameid; struct mutex lock; struct mutex map_lock; struct list_head map_list; struct miscdevice miscdev; struct reset_control *rst; struct reset_control *rst_mc; struct gen_pool *iram_pool; struct completion decode_completion; struct clk *clk; struct iommu_domain *domain; struct iommu_group *group; struct iova_domain iova; struct iova *iova_resv_static_addresses; struct iova *iova_resv_last_page; dma_addr_t iram_lists_addr; u32 *iram; }; int tegra_vde_iommu_init(struct tegra_vde *vde); void tegra_vde_iommu_deinit(struct tegra_vde *vde); int tegra_vde_iommu_map(struct tegra_vde *vde, struct sg_table *sgt, struct iova **iovap, size_t size); void tegra_vde_iommu_unmap(struct tegra_vde *vde, struct iova *iova); int tegra_vde_dmabuf_cache_map(struct tegra_vde *vde, struct dma_buf *dmabuf, enum dma_data_direction dma_dir, struct dma_buf_attachment **ap, dma_addr_t *addrp); void tegra_vde_dmabuf_cache_unmap(struct tegra_vde *vde, struct dma_buf_attachment *a, bool release); void tegra_vde_dmabuf_cache_unmap_sync(struct tegra_vde *vde); void tegra_vde_dmabuf_cache_unmap_all(struct tegra_vde *vde); static __maybe_unused char const * tegra_vde_reg_base_name(struct tegra_vde *vde, void __iomem *base) { if (vde->sxe == base) return "SXE"; if (vde->bsev == base) return "BSEV"; if (vde->mbe == base) return "MBE"; if (vde->ppe == base) return "PPE"; if (vde->mce == base) return "MCE"; if (vde->tfe == base) return "TFE"; if (vde->ppb == base) return "PPB"; if (vde->vdma == base) return "VDMA"; if (vde->frameid == base) return "FRAMEID"; return "???"; } #endif /* TEGRA_VDE_H */