cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

msm_mmu.h (1600B)


      1/* SPDX-License-Identifier: GPL-2.0-only */
      2/*
      3 * Copyright (C) 2013 Red Hat
      4 * Author: Rob Clark <robdclark@gmail.com>
      5 */
      6
      7#ifndef __MSM_MMU_H__
      8#define __MSM_MMU_H__
      9
     10#include <linux/iommu.h>
     11
     12struct msm_mmu_funcs {
     13	void (*detach)(struct msm_mmu *mmu);
     14	int (*map)(struct msm_mmu *mmu, uint64_t iova, struct sg_table *sgt,
     15			size_t len, int prot);
     16	int (*unmap)(struct msm_mmu *mmu, uint64_t iova, size_t len);
     17	void (*destroy)(struct msm_mmu *mmu);
     18	void (*resume_translation)(struct msm_mmu *mmu);
     19};
     20
     21enum msm_mmu_type {
     22	MSM_MMU_GPUMMU,
     23	MSM_MMU_IOMMU,
     24	MSM_MMU_IOMMU_PAGETABLE,
     25};
     26
     27struct msm_mmu {
     28	const struct msm_mmu_funcs *funcs;
     29	struct device *dev;
     30	int (*handler)(void *arg, unsigned long iova, int flags, void *data);
     31	void *arg;
     32	enum msm_mmu_type type;
     33};
     34
     35static inline void msm_mmu_init(struct msm_mmu *mmu, struct device *dev,
     36		const struct msm_mmu_funcs *funcs, enum msm_mmu_type type)
     37{
     38	mmu->dev = dev;
     39	mmu->funcs = funcs;
     40	mmu->type = type;
     41}
     42
     43struct msm_mmu *msm_iommu_new(struct device *dev, struct iommu_domain *domain);
     44struct msm_mmu *msm_gpummu_new(struct device *dev, struct msm_gpu *gpu);
     45
     46static inline void msm_mmu_set_fault_handler(struct msm_mmu *mmu, void *arg,
     47		int (*handler)(void *arg, unsigned long iova, int flags, void *data))
     48{
     49	mmu->arg = arg;
     50	mmu->handler = handler;
     51}
     52
     53struct msm_mmu *msm_iommu_pagetable_create(struct msm_mmu *parent);
     54
     55void msm_gpummu_params(struct msm_mmu *mmu, dma_addr_t *pt_base,
     56		dma_addr_t *tran_error);
     57
     58
     59int msm_iommu_pagetable_params(struct msm_mmu *mmu, phys_addr_t *ttbr,
     60		int *asid);
     61
     62#endif /* __MSM_MMU_H__ */