#ifndef _NV_VGPU_MEMORY_H_ #define _NV_VGPU_MEMORY_H_ #include "nvidia-vgpu-vfio.h" #define NV_VGPU_MAX_MAPPINGS 1024 struct nv_vgpu_mapping { u64 gpa; u64 iova; u64 size; struct page **pages; int page_count; bool pinned; bool mapped; struct list_head list; }; struct nv_vgpu_simple_mapping { u64 gpa; u64 size; u64 iova; struct page **pages; int page_count; bool pinned; bool mapped; struct list_head list; }; struct nv_vgpu_mm_ctx { struct nv_vgpu_device *vgpu; struct mutex lock; struct list_head mappings; u32 mapping_count; struct iommu_domain *iommu_domain; struct dma_iommu_mapping *dma_mapping; bool use_simple; }; int nv_vgpu_memory_init(struct nv_vgpu_device *vgpu); void nv_vgpu_memory_cleanup(struct nv_vgpu_device *vgpu); int nv_vgpu_memory_map(struct nv_vgpu_device *vgpu, u64 gpa, u64 size, u64 *iova); int nv_vgpu_memory_unmap(struct nv_vgpu_device *vgpu, u64 iova, u64 size); int nv_vgpu_memory_pin(struct nv_vgpu_device *vgpu, u64 gpa, u64 size); int nv_vgpu_memory_unpin(struct nv_vgpu_device *vgpu, u64 gpa, u64 size); int nv_vgpu_memory_mmap(struct nv_vgpu_device *vgpu, struct vm_area_struct *vma); static inline struct nv_vgpu_mm_ctx *vgpu_to_mm_ctx(struct nv_vgpu_device *vgpu) { return vgpu->mm_ctx; } #endif