/* SPDX-License-Identifier: GPL-2.0-only OR MIT */ /* Copyright (c) 2023 Imagination Technologies Ltd. */ #ifndef PVR_VM_H #define PVR_VM_H #include "pvr_rogue_mmu_defs.h" #include #include /* Forward declaration from "pvr_device.h" */ struct pvr_device; struct pvr_file; /* Forward declaration from "pvr_gem.h" */ struct pvr_gem_object; /* Forward declaration from "pvr_vm.c" */ struct pvr_vm_context; /* Forward declaration from */ struct drm_pvr_ioctl_get_heap_info_args; /* Forward declaration from */ struct drm_exec; /* Functions defined in pvr_vm.c */ bool pvr_device_addr_is_valid(u64 device_addr); bool pvr_device_addr_and_size_are_valid(struct pvr_vm_context *vm_ctx, u64 device_addr, u64 size); struct pvr_vm_context *pvr_vm_create_context(struct pvr_device *pvr_dev, bool is_userspace_context); int pvr_vm_map(struct pvr_vm_context *vm_ctx, struct pvr_gem_object *pvr_obj, u64 pvr_obj_offset, u64 device_addr, u64 size); int pvr_vm_unmap(struct pvr_vm_context *vm_ctx, u64 device_addr, u64 size); void pvr_vm_unmap_all(struct pvr_vm_context *vm_ctx); dma_addr_t pvr_vm_get_page_table_root_addr(struct pvr_vm_context *vm_ctx); struct dma_resv *pvr_vm_get_dma_resv(struct pvr_vm_context *vm_ctx); int pvr_static_data_areas_get(const struct pvr_device *pvr_dev, struct drm_pvr_ioctl_dev_query_args *args); int pvr_heap_info_get(const struct pvr_device *pvr_dev, struct drm_pvr_ioctl_dev_query_args *args); const struct drm_pvr_heap *pvr_find_heap_containing(struct pvr_device *pvr_dev, u64 addr, u64 size); struct pvr_gem_object *pvr_vm_find_gem_object(struct pvr_vm_context *vm_ctx, u64 device_addr, u64 *mapped_offset_out, u64 *mapped_size_out); struct pvr_fw_object * pvr_vm_get_fw_mem_context(struct pvr_vm_context *vm_ctx); struct pvr_vm_context *pvr_vm_context_lookup(struct pvr_file *pvr_file, u32 handle); struct pvr_vm_context *pvr_vm_context_get(struct pvr_vm_context *vm_ctx); bool pvr_vm_context_put(struct pvr_vm_context *vm_ctx); void pvr_destroy_vm_contexts_for_file(struct pvr_file *pvr_file); #endif /* PVR_VM_H */