1 /* SPDX-License-Identifier: GPL-2.0 */
2 /* Copyright (C) 2018 Intel Corporation */
3 /* Copyright 2018 Google LLC. */
4 
5 #ifndef __IPU3_MMU_H
6 #define __IPU3_MMU_H
7 
8 #define IPU3_PAGE_SHIFT		12
9 #define IPU3_PAGE_SIZE		(1UL << IPU3_PAGE_SHIFT)
10 
11 /**
12  * struct imgu_mmu_info - Describes mmu geometry
13  *
14  * @aperture_start:	First address that can be mapped
15  * @aperture_end:	Last address that can be mapped
16  */
17 struct imgu_mmu_info {
18 	dma_addr_t aperture_start;
19 	dma_addr_t aperture_end;
20 };
21 
22 struct device;
23 struct scatterlist;
24 
25 struct imgu_mmu_info *imgu_mmu_init(struct device *parent, void __iomem *base);
26 void imgu_mmu_exit(struct imgu_mmu_info *info);
27 void imgu_mmu_suspend(struct imgu_mmu_info *info);
28 void imgu_mmu_resume(struct imgu_mmu_info *info);
29 
30 int imgu_mmu_map(struct imgu_mmu_info *info, unsigned long iova,
31 		 phys_addr_t paddr, size_t size);
32 size_t imgu_mmu_unmap(struct imgu_mmu_info *info, unsigned long iova,
33 		      size_t size);
34 size_t imgu_mmu_map_sg(struct imgu_mmu_info *info, unsigned long iova,
35 		       struct scatterlist *sg, unsigned int nents);
36 #endif
37