xref: /linux/drivers/accel/ethosu/ethosu_gem.h (revision 24f171c7e145f43b9f187578e89b0982ce87e54c)
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