// SPDX-License-Identifier: GPL-2.0 or MIT /* Copyright 2019 Linaro, Ltd, Rob Herring <[email protected]> */ /* Copyright 2023 Collabora ltd. */ #include <linux/dma-buf.h> #include <linux/dma-mapping.h> #include <linux/err.h> #include <linux/slab.h> #include <drm/panthor_drm.h> #include "panthor_device.h" #include "panthor_gem.h" #include "panthor_mmu.h" static void panthor_gem_free_object(struct drm_gem_object *obj) { … } /** * panthor_kernel_bo_destroy() - Destroy a kernel buffer object * @bo: Kernel buffer object to destroy. If NULL or an ERR_PTR(), the destruction * is skipped. */ void panthor_kernel_bo_destroy(struct panthor_kernel_bo *bo) { … } /** * panthor_kernel_bo_create() - Create and map a GEM object to a VM * @ptdev: Device. * @vm: VM to map the GEM to. If NULL, the kernel object is not GPU mapped. * @size: Size of the buffer object. * @bo_flags: Combination of drm_panthor_bo_flags flags. * @vm_map_flags: Combination of drm_panthor_vm_bind_op_flags (only those * that are related to map operations). * @gpu_va: GPU address assigned when mapping to the VM. * If gpu_va == PANTHOR_VM_KERNEL_AUTO_VA, the virtual address will be * automatically allocated. * * Return: A valid pointer in case of success, an ERR_PTR() otherwise. */ struct panthor_kernel_bo * panthor_kernel_bo_create(struct panthor_device *ptdev, struct panthor_vm *vm, size_t size, u32 bo_flags, u32 vm_map_flags, u64 gpu_va) { … } static int panthor_gem_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma) { … } static struct dma_buf * panthor_gem_prime_export(struct drm_gem_object *obj, int flags) { … } static const struct drm_gem_object_funcs panthor_gem_funcs = …; /** * panthor_gem_create_object - Implementation of driver->gem_create_object. * @ddev: DRM device * @size: Size in bytes of the memory the object will reference * * This lets the GEM helpers allocate object structs for us, and keep * our BO stats correct. */ struct drm_gem_object *panthor_gem_create_object(struct drm_device *ddev, size_t size) { … } /** * panthor_gem_create_with_handle() - Create a GEM object and attach it to a handle. * @file: DRM file. * @ddev: DRM device. * @exclusive_vm: Exclusive VM. Not NULL if the GEM object can't be shared. * @size: Size of the GEM object to allocate. * @flags: Combination of drm_panthor_bo_flags flags. * @handle: Pointer holding the handle pointing to the new GEM object. * * Return: Zero on success */ int panthor_gem_create_with_handle(struct drm_file *file, struct drm_device *ddev, struct panthor_vm *exclusive_vm, u64 *size, u32 flags, u32 *handle) { … }