1*5a5e9c02SRob Herring (Arm) /* SPDX-License-Identifier: GPL-2.0 or MIT */ 2*5a5e9c02SRob Herring (Arm) /* Copyright 2025 Arm, Ltd. */ 3*5a5e9c02SRob Herring (Arm) 4*5a5e9c02SRob Herring (Arm) #ifndef __ETHOSU_GEM_H__ 5*5a5e9c02SRob Herring (Arm) #define __ETHOSU_GEM_H__ 6*5a5e9c02SRob Herring (Arm) 7*5a5e9c02SRob Herring (Arm) #include "ethosu_device.h" 8*5a5e9c02SRob Herring (Arm) #include <drm/drm_gem_dma_helper.h> 9*5a5e9c02SRob Herring (Arm) 10*5a5e9c02SRob Herring (Arm) struct ethosu_validated_cmdstream_info { 11*5a5e9c02SRob Herring (Arm) u32 cmd_size; 12*5a5e9c02SRob Herring (Arm) u64 region_size[NPU_BASEP_REGION_MAX]; 13*5a5e9c02SRob Herring (Arm) bool output_region[NPU_BASEP_REGION_MAX]; 14*5a5e9c02SRob Herring (Arm) }; 15*5a5e9c02SRob Herring (Arm) 16*5a5e9c02SRob Herring (Arm) /** 17*5a5e9c02SRob Herring (Arm) * struct ethosu_gem_object - Driver specific GEM object. 18*5a5e9c02SRob Herring (Arm) */ 19*5a5e9c02SRob Herring (Arm) struct ethosu_gem_object { 20*5a5e9c02SRob Herring (Arm) /** @base: Inherit from drm_gem_shmem_object. */ 21*5a5e9c02SRob Herring (Arm) struct drm_gem_dma_object base; 22*5a5e9c02SRob Herring (Arm) 23*5a5e9c02SRob Herring (Arm) struct ethosu_validated_cmdstream_info *info; 24*5a5e9c02SRob Herring (Arm) 25*5a5e9c02SRob Herring (Arm) /** @flags: Combination of drm_ethosu_bo_flags flags. */ 26*5a5e9c02SRob Herring (Arm) u32 flags; 27*5a5e9c02SRob Herring (Arm) }; 28*5a5e9c02SRob Herring (Arm) 29*5a5e9c02SRob Herring (Arm) static inline 30*5a5e9c02SRob Herring (Arm) struct ethosu_gem_object *to_ethosu_bo(struct drm_gem_object *obj) 31*5a5e9c02SRob Herring (Arm) { 32*5a5e9c02SRob Herring (Arm) return container_of(to_drm_gem_dma_obj(obj), struct ethosu_gem_object, base); 33*5a5e9c02SRob Herring (Arm) } 34*5a5e9c02SRob Herring (Arm) 35*5a5e9c02SRob Herring (Arm) struct drm_gem_object *ethosu_gem_create_object(struct drm_device *ddev, 36*5a5e9c02SRob Herring (Arm) size_t size); 37*5a5e9c02SRob Herring (Arm) 38*5a5e9c02SRob Herring (Arm) int ethosu_gem_create_with_handle(struct drm_file *file, 39*5a5e9c02SRob Herring (Arm) struct drm_device *ddev, 40*5a5e9c02SRob Herring (Arm) u64 *size, u32 flags, uint32_t *handle); 41*5a5e9c02SRob Herring (Arm) 42*5a5e9c02SRob Herring (Arm) int ethosu_gem_cmdstream_create(struct drm_file *file, 43*5a5e9c02SRob Herring (Arm) struct drm_device *ddev, 44*5a5e9c02SRob Herring (Arm) u32 size, u64 data, u32 flags, u32 *handle); 45*5a5e9c02SRob Herring (Arm) 46*5a5e9c02SRob Herring (Arm) #endif /* __ETHOSU_GEM_H__ */ 47