| /* SPDX-License-Identifier: GPL-2.0 */ |
| /* |
| * Copyright (C) 2024, Advanced Micro Devices, Inc. |
| */ |
| |
| #ifndef _AMDXDNA_GEM_H_ |
| #define _AMDXDNA_GEM_H_ |
| |
| struct amdxdna_mem { |
| u64 userptr; |
| void *kva; |
| u64 dev_addr; |
| size_t size; |
| struct page **pages; |
| u32 nr_pages; |
| struct mmu_interval_notifier notifier; |
| unsigned long *pfns; |
| bool map_invalid; |
| }; |
| |
| struct amdxdna_gem_obj { |
| struct drm_gem_shmem_object base; |
| struct amdxdna_client *client; |
| u8 type; |
| bool pinned; |
| struct mutex lock; /* Protects: pinned */ |
| struct amdxdna_mem mem; |
| |
| /* Below members is uninitialized when needed */ |
| struct drm_mm mm; /* For AMDXDNA_BO_DEV_HEAP */ |
| struct amdxdna_gem_obj *dev_heap; /* For AMDXDNA_BO_DEV */ |
| struct drm_mm_node mm_node; /* For AMDXDNA_BO_DEV */ |
| u32 assigned_hwctx; |
| }; |
| |
| #define to_gobj(obj) (&(obj)->base.base) |
| |
| static inline struct amdxdna_gem_obj *to_xdna_obj(struct drm_gem_object *gobj) |
| { |
| return container_of(gobj, struct amdxdna_gem_obj, base.base); |
| } |
| |
| struct amdxdna_gem_obj *amdxdna_gem_get_obj(struct amdxdna_client *client, |
| u32 bo_hdl, u8 bo_type); |
| static inline void amdxdna_gem_put_obj(struct amdxdna_gem_obj *abo) |
| { |
| drm_gem_object_put(to_gobj(abo)); |
| } |
| |
| struct drm_gem_object * |
| amdxdna_gem_create_object_cb(struct drm_device *dev, size_t size); |
| struct amdxdna_gem_obj * |
| amdxdna_drm_alloc_dev_bo(struct drm_device *dev, |
| struct amdxdna_drm_create_bo *args, |
| struct drm_file *filp, bool use_vmap); |
| |
| int amdxdna_gem_pin_nolock(struct amdxdna_gem_obj *abo); |
| int amdxdna_gem_pin(struct amdxdna_gem_obj *abo); |
| void amdxdna_gem_unpin(struct amdxdna_gem_obj *abo); |
| |
| int amdxdna_drm_create_bo_ioctl(struct drm_device *dev, void *data, struct drm_file *filp); |
| int amdxdna_drm_get_bo_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp); |
| int amdxdna_drm_sync_bo_ioctl(struct drm_device *dev, void *data, struct drm_file *filp); |
| |
| #endif /* _AMDXDNA_GEM_H_ */ |