tegra: Implement drm_tegra_bo_{get,set}_tiling()

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>
main
Thierry Reding 2014-11-27 15:32:43 +01:00
parent d3ad65db42
commit f99522e678
2 changed files with 61 additions and 0 deletions

View File

@ -292,3 +292,54 @@ int drm_tegra_bo_set_flags(struct drm_tegra_bo *bo, uint32_t flags)
return 0; 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;
}

View 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_get_flags(struct drm_tegra_bo *bo, uint32_t *flags);
int drm_tegra_bo_set_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__ */ #endif /* __DRM_TEGRA_H__ */