diff options
author | Alexandre Courbot <acourbot@nvidia.com> | 2016-01-14 15:14:04 +0900 |
---|---|---|
committer | Alexandre Courbot <acourbot@nvidia.com> | 2016-01-18 15:01:55 +0900 |
commit | 7984cff8a9972f5e4e647cb564ef1188c07c9677 (patch) | |
tree | a7527e12c65f5ecda190884deb82901f72e1a6bc /drm | |
parent | 3464ca68eb1b0e4ed88821c6bfb0d9a88afe5133 (diff) | |
download | nouveau-7984cff8a9972f5e4e647cb564ef1188c07c9677.tar.gz |
core: add gpuobj memcpy helper functions
Add memcpy functions that allow copying a buffer to a gpuobj and
vice-versa.
Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
Diffstat (limited to 'drm')
-rw-r--r-- | drm/nouveau/include/nvkm/core/gpuobj.h | 4 | ||||
-rw-r--r-- | drm/nouveau/nvkm/core/gpuobj.c | 20 |
2 files changed, 24 insertions, 0 deletions
diff --git a/drm/nouveau/include/nvkm/core/gpuobj.h b/drm/nouveau/include/nvkm/core/gpuobj.h index d4f56eafb..c23da4f05 100644 --- a/drm/nouveau/include/nvkm/core/gpuobj.h +++ b/drm/nouveau/include/nvkm/core/gpuobj.h @@ -37,4 +37,8 @@ int nvkm_gpuobj_wrap(struct nvkm_memory *, struct nvkm_gpuobj **); int nvkm_gpuobj_map(struct nvkm_gpuobj *, struct nvkm_vm *, u32 access, struct nvkm_vma *); void nvkm_gpuobj_unmap(struct nvkm_vma *); +void nvkm_gpuobj_memcpy_to(struct nvkm_gpuobj *dst, u32 dstoffset, void *src, + u32 length); +void nvkm_gpuobj_memcpy_from(void *dst, struct nvkm_gpuobj *src, u32 srcoffset, + u32 length); #endif diff --git a/drm/nouveau/nvkm/core/gpuobj.c b/drm/nouveau/nvkm/core/gpuobj.c index c3a790eb8..a7bd22706 100644 --- a/drm/nouveau/nvkm/core/gpuobj.c +++ b/drm/nouveau/nvkm/core/gpuobj.c @@ -253,3 +253,23 @@ nvkm_gpuobj_wrap(struct nvkm_memory *memory, struct nvkm_gpuobj **pgpuobj) (*pgpuobj)->size = nvkm_memory_size(memory); return 0; } + +void +nvkm_gpuobj_memcpy_to(struct nvkm_gpuobj *dst, u32 dstoffset, void *src, + u32 length) +{ + int i; + + for (i = 0; i < length; i += 4) + nvkm_wo32(dst, dstoffset + i, *(u32 *)(src + i)); +} + +void +nvkm_gpuobj_memcpy_from(void *dst, struct nvkm_gpuobj *src, u32 srcoffset, + u32 length) +{ + int i; + + for (i = 0; i < length; i += 4) + ((u32 *)src)[i / 4] = nvkm_ro32(src, srcoffset + i); +} |