1 /* $NetBSD: gpuobj.h,v 1.4 2021/12/18 23:45:33 riastradh Exp $ */ 2 3 /* SPDX-License-Identifier: MIT */ 4 #ifndef __NVKM_GPUOBJ_H__ 5 #define __NVKM_GPUOBJ_H__ 6 #include <core/memory.h> 7 #include <core/mm.h> 8 9 #define NVOBJ_FLAG_ZERO_ALLOC 0x00000001 10 #define NVOBJ_FLAG_HEAP 0x00000004 11 12 #ifdef __NetBSD__ 13 # define __nvkm_gpuobj_iomem 14 # define __iomem __nvkm_gpuobj_iomem 15 #endif 16 17 struct nvkm_gpuobj { 18 union { 19 const struct nvkm_gpuobj_func *func; 20 const struct nvkm_gpuobj_func *ptrs; 21 }; 22 struct nvkm_gpuobj *parent; 23 struct nvkm_memory *memory; 24 struct nvkm_mm_node *node; 25 26 u64 addr; 27 u32 size; 28 struct nvkm_mm heap; 29 30 void __iomem *map; 31 }; 32 33 #ifdef __NetBSD__ 34 # undef __iomem 35 #endif 36 37 struct nvkm_gpuobj_func { 38 void *(*acquire)(struct nvkm_gpuobj *); 39 void (*release)(struct nvkm_gpuobj *); 40 u32 (*rd32)(struct nvkm_gpuobj *, u32 offset); 41 void (*wr32)(struct nvkm_gpuobj *, u32 offset, u32 data); 42 int (*map)(struct nvkm_gpuobj *, u64 offset, struct nvkm_vmm *, 43 struct nvkm_vma *, void *argv, u32 argc); 44 }; 45 46 int nvkm_gpuobj_new(struct nvkm_device *, u32 size, int align, bool zero, 47 struct nvkm_gpuobj *parent, struct nvkm_gpuobj **); 48 void nvkm_gpuobj_del(struct nvkm_gpuobj **); 49 int nvkm_gpuobj_wrap(struct nvkm_memory *, struct nvkm_gpuobj **); 50 void nvkm_gpuobj_memcpy_to(struct nvkm_gpuobj *dst, u32 dstoffset, void *src, 51 u32 length); 52 void nvkm_gpuobj_memcpy_from(void *dst, struct nvkm_gpuobj *src, u32 srcoffset, 53 u32 length); 54 #endif 55