OSDN Git Service

tegra: Implement drm_tegra_bo_{get,set}_tiling()
authorThierry Reding <treding@nvidia.com>
Thu, 27 Nov 2014 14:32:43 +0000 (15:32 +0100)
committerThierry Reding <treding@nvidia.com>
Thu, 27 Nov 2014 16:20:32 +0000 (17:20 +0100)
These two functions are simple wrappers around the corresponding IOCTLs
and operate on drm_tegra_bo objects.

Signed-off-by: Thierry Reding <treding@nvidia.com>
tegra/tegra.c
tegra/tegra.h

index 614ab96..f8d4078 100644 (file)
@@ -292,3 +292,54 @@ int drm_tegra_bo_set_flags(struct drm_tegra_bo *bo, uint32_t flags)
 
        return 0;
 }
+
+drm_public
+int drm_tegra_bo_get_tiling(struct drm_tegra_bo *bo,
+                           struct drm_tegra_bo_tiling *tiling)
+{
+       struct drm_tegra_gem_get_tiling args;
+       struct drm_tegra *drm = bo->drm;
+       int err;
+
+       if (!bo)
+               return -EINVAL;
+
+       memset(&args, 0, sizeof(args));
+       args.handle = bo->handle;
+
+       err = drmCommandWriteRead(drm->fd, DRM_TEGRA_GEM_GET_TILING, &args,
+                                 sizeof(args));
+       if (err < 0)
+               return -errno;
+
+       if (tiling) {
+               tiling->mode = args.mode;
+               tiling->value = args.value;
+       }
+
+       return 0;
+}
+
+drm_public
+int drm_tegra_bo_set_tiling(struct drm_tegra_bo *bo,
+                           const struct drm_tegra_bo_tiling *tiling)
+{
+       struct drm_tegra_gem_set_tiling args;
+       struct drm_tegra *drm = bo->drm;
+       int err;
+
+       if (!bo)
+               return -EINVAL;
+
+       memset(&args, 0, sizeof(args));
+       args.handle = bo->handle;
+       args.mode = tiling->mode;
+       args.value = tiling->value;
+
+       err = drmCommandWriteRead(drm->fd, DRM_TEGRA_GEM_SET_TILING, &args,
+                                 sizeof(args));
+       if (err < 0)
+               return -errno;
+
+       return 0;
+}
index a862418..31b0995 100644 (file)
@@ -47,4 +47,14 @@ int drm_tegra_bo_unmap(struct drm_tegra_bo *bo);
 int drm_tegra_bo_get_flags(struct drm_tegra_bo *bo, uint32_t *flags);
 int drm_tegra_bo_set_flags(struct drm_tegra_bo *bo, uint32_t flags);
 
+struct drm_tegra_bo_tiling {
+       uint32_t mode;
+       uint32_t value;
+};
+
+int drm_tegra_bo_get_tiling(struct drm_tegra_bo *bo,
+                           struct drm_tegra_bo_tiling *tiling);
+int drm_tegra_bo_set_tiling(struct drm_tegra_bo *bo,
+                           const struct drm_tegra_bo_tiling *tiling);
+
 #endif /* __DRM_TEGRA_H__ */