diff options
author | Bas Nieuwenhuizen <[email protected]> | 2018-12-21 14:12:17 +0100 |
---|---|---|
committer | Chia-I Wu <[email protected]> | 2019-03-11 10:01:41 -0700 |
commit | b0562e272f8a2a41d0639b65a5158b0c3b2dfd3b (patch) | |
tree | ce7622bf90f5bae905ce97893d63bd98d0d5462f /src/freedreno/vulkan/tu_drm.c | |
parent | 3d99dd55a04dd91af96d647d98d525df8ff7deda (diff) |
turnip: move tu_gem.c to tu_drm.c
Diffstat (limited to 'src/freedreno/vulkan/tu_drm.c')
-rw-r--r-- | src/freedreno/vulkan/tu_drm.c | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/src/freedreno/vulkan/tu_drm.c b/src/freedreno/vulkan/tu_drm.c new file mode 100644 index 00000000000..b8a4c6f8a98 --- /dev/null +++ b/src/freedreno/vulkan/tu_drm.c @@ -0,0 +1,94 @@ +/* + * Copyright © 2018 Google, Inc. + * Copyright © 2015 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +#include <stdint.h> +#include <sys/ioctl.h> +#include <errno.h> + +#include <msm_drm.h> + +#include "tu_private.h" + +#include "xf86drm.h" + +/** + * Return gem handle on success. Return 0 on failure. + */ +uint32_t +tu_gem_new(struct tu_device *dev, uint64_t size, uint32_t flags) +{ + struct drm_msm_gem_new req = { + .size = size, + .flags = flags, + }; + + + int ret = drmCommandWriteRead(dev->physical_device->local_fd, DRM_MSM_GEM_NEW, + &req, sizeof(req)); + if (ret) + return 0; + + return req.handle; +} + +void +tu_gem_close(struct tu_device *dev, uint32_t gem_handle) +{ + struct drm_gem_close req = { + .handle = gem_handle, + }; + + drmIoctl(dev->physical_device->local_fd, DRM_IOCTL_GEM_CLOSE, &req); +} + +/** Return UINT64_MAX on error. */ +static uint64_t +tu_gem_info(struct tu_device *dev, uint32_t gem_handle, uint32_t flags) +{ + struct drm_msm_gem_info req = { + .handle = gem_handle, + .flags = flags, + }; + + int ret = drmCommandWriteRead(dev->physical_device->local_fd, DRM_MSM_GEM_INFO, + &req, sizeof(req)); + if (ret == -1) + return UINT64_MAX; + + return req.offset; +} + +/** Return UINT64_MAX on error. */ +uint64_t +tu_gem_info_offset(struct tu_device *dev, uint32_t gem_handle) +{ + return tu_gem_info(dev, gem_handle, 0); +} + +/** Return UINT64_MAX on error. */ +uint64_t +tu_gem_info_iova(struct tu_device *dev, uint32_t gem_handle) +{ + return tu_gem_info(dev, gem_handle, MSM_INFO_IOVA); +} |