summaryrefslogtreecommitdiffstats
path: root/src/freedreno/vulkan/tu_drm.c
diff options
context:
space:
mode:
authorBas Nieuwenhuizen <[email protected]>2018-12-21 14:12:17 +0100
committerChia-I Wu <[email protected]>2019-03-11 10:01:41 -0700
commitb0562e272f8a2a41d0639b65a5158b0c3b2dfd3b (patch)
treece7622bf90f5bae905ce97893d63bd98d0d5462f /src/freedreno/vulkan/tu_drm.c
parent3d99dd55a04dd91af96d647d98d525df8ff7deda (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.c94
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);
+}