linux/drivers/staging/media/tegra-vde/vde.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0+ */
   2/*
   3 * NVIDIA Tegra Video decoder driver
   4 *
   5 * Copyright (C) 2016-2019 GRATE-DRIVER project
   6 */
   7
   8#ifndef TEGRA_VDE_H
   9#define TEGRA_VDE_H
  10
  11#include <linux/completion.h>
  12#include <linux/dma-direction.h>
  13#include <linux/iova.h>
  14#include <linux/list.h>
  15#include <linux/miscdevice.h>
  16#include <linux/mutex.h>
  17#include <linux/types.h>
  18
  19struct clk;
  20struct dma_buf;
  21struct gen_pool;
  22struct iommu_group;
  23struct iommu_domain;
  24struct reset_control;
  25struct dma_buf_attachment;
  26
  27struct tegra_vde {
  28        void __iomem *sxe;
  29        void __iomem *bsev;
  30        void __iomem *mbe;
  31        void __iomem *ppe;
  32        void __iomem *mce;
  33        void __iomem *tfe;
  34        void __iomem *ppb;
  35        void __iomem *vdma;
  36        void __iomem *frameid;
  37        struct mutex lock;
  38        struct mutex map_lock;
  39        struct list_head map_list;
  40        struct miscdevice miscdev;
  41        struct reset_control *rst;
  42        struct reset_control *rst_mc;
  43        struct gen_pool *iram_pool;
  44        struct completion decode_completion;
  45        struct clk *clk;
  46        struct iommu_domain *domain;
  47        struct iommu_group *group;
  48        struct iova_domain iova;
  49        struct iova *iova_resv_static_addresses;
  50        struct iova *iova_resv_last_page;
  51        dma_addr_t iram_lists_addr;
  52        u32 *iram;
  53};
  54
  55int tegra_vde_iommu_init(struct tegra_vde *vde);
  56void tegra_vde_iommu_deinit(struct tegra_vde *vde);
  57int tegra_vde_iommu_map(struct tegra_vde *vde,
  58                        struct sg_table *sgt,
  59                        struct iova **iovap,
  60                        size_t size);
  61void tegra_vde_iommu_unmap(struct tegra_vde *vde, struct iova *iova);
  62
  63int tegra_vde_dmabuf_cache_map(struct tegra_vde *vde,
  64                               struct dma_buf *dmabuf,
  65                               enum dma_data_direction dma_dir,
  66                               struct dma_buf_attachment **ap,
  67                               dma_addr_t *addrp);
  68void tegra_vde_dmabuf_cache_unmap(struct tegra_vde *vde,
  69                                  struct dma_buf_attachment *a,
  70                                  bool release);
  71void tegra_vde_dmabuf_cache_unmap_sync(struct tegra_vde *vde);
  72void tegra_vde_dmabuf_cache_unmap_all(struct tegra_vde *vde);
  73
  74static __maybe_unused char const *
  75tegra_vde_reg_base_name(struct tegra_vde *vde, void __iomem *base)
  76{
  77        if (vde->sxe == base)
  78                return "SXE";
  79
  80        if (vde->bsev == base)
  81                return "BSEV";
  82
  83        if (vde->mbe == base)
  84                return "MBE";
  85
  86        if (vde->ppe == base)
  87                return "PPE";
  88
  89        if (vde->mce == base)
  90                return "MCE";
  91
  92        if (vde->tfe == base)
  93                return "TFE";
  94
  95        if (vde->ppb == base)
  96                return "PPB";
  97
  98        if (vde->vdma == base)
  99                return "VDMA";
 100
 101        if (vde->frameid == base)
 102                return "FRAMEID";
 103
 104        return "???";
 105}
 106
 107#endif /* TEGRA_VDE_H */
 108