pvr_vm.h 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. /* SPDX-License-Identifier: GPL-2.0-only OR MIT */
  2. /* Copyright (c) 2023 Imagination Technologies Ltd. */
  3. #ifndef PVR_VM_H
  4. #define PVR_VM_H
  5. #include "pvr_rogue_mmu_defs.h"
  6. #include <uapi/drm/pvr_drm.h>
  7. #include <linux/types.h>
  8. /* Forward declaration from "pvr_device.h" */
  9. struct pvr_device;
  10. struct pvr_file;
  11. /* Forward declaration from "pvr_gem.h" */
  12. struct pvr_gem_object;
  13. /* Forward declaration from "pvr_vm.c" */
  14. struct pvr_vm_context;
  15. /* Forward declaration from <uapi/drm/pvr_drm.h> */
  16. struct drm_pvr_ioctl_get_heap_info_args;
  17. /* Forward declaration from <drm/drm_exec.h> */
  18. struct drm_exec;
  19. /* Functions defined in pvr_vm.c */
  20. bool pvr_device_addr_is_valid(u64 device_addr);
  21. bool pvr_device_addr_and_size_are_valid(struct pvr_vm_context *vm_ctx,
  22. u64 device_addr, u64 size);
  23. struct pvr_vm_context *pvr_vm_create_context(struct pvr_device *pvr_dev,
  24. bool is_userspace_context);
  25. int pvr_vm_map(struct pvr_vm_context *vm_ctx,
  26. struct pvr_gem_object *pvr_obj, u64 pvr_obj_offset,
  27. u64 device_addr, u64 size);
  28. int pvr_vm_unmap_obj(struct pvr_vm_context *vm_ctx,
  29. struct pvr_gem_object *pvr_obj,
  30. u64 device_addr, u64 size);
  31. int pvr_vm_unmap(struct pvr_vm_context *vm_ctx, u64 device_addr, u64 size);
  32. void pvr_vm_unmap_all(struct pvr_vm_context *vm_ctx);
  33. dma_addr_t pvr_vm_get_page_table_root_addr(struct pvr_vm_context *vm_ctx);
  34. struct dma_resv *pvr_vm_get_dma_resv(struct pvr_vm_context *vm_ctx);
  35. int pvr_static_data_areas_get(const struct pvr_device *pvr_dev,
  36. struct drm_pvr_ioctl_dev_query_args *args);
  37. int pvr_heap_info_get(const struct pvr_device *pvr_dev,
  38. struct drm_pvr_ioctl_dev_query_args *args);
  39. const struct drm_pvr_heap *pvr_find_heap_containing(struct pvr_device *pvr_dev,
  40. u64 addr, u64 size);
  41. struct pvr_gem_object *pvr_vm_find_gem_object(struct pvr_vm_context *vm_ctx,
  42. u64 device_addr,
  43. u64 *mapped_offset_out,
  44. u64 *mapped_size_out);
  45. struct pvr_fw_object *
  46. pvr_vm_get_fw_mem_context(struct pvr_vm_context *vm_ctx);
  47. struct pvr_vm_context *pvr_vm_context_lookup(struct pvr_file *pvr_file, u32 handle);
  48. struct pvr_vm_context *pvr_vm_context_get(struct pvr_vm_context *vm_ctx);
  49. bool pvr_vm_context_put(struct pvr_vm_context *vm_ctx);
  50. void pvr_destroy_vm_contexts_for_file(struct pvr_file *pvr_file);
  51. #endif /* PVR_VM_H */