diff options
Diffstat (limited to 'tegra')
-rw-r--r-- | tegra/tegra.c | 51 | ||||
-rw-r--r-- | tegra/tegra.h | 10 |
2 files changed, 61 insertions, 0 deletions
diff --git a/tegra/tegra.c b/tegra/tegra.c index 614ab965..f8d40786 100644 --- a/tegra/tegra.c +++ b/tegra/tegra.c | |||
@@ -292,3 +292,54 @@ int drm_tegra_bo_set_flags(struct drm_tegra_bo *bo, uint32_t flags) | |||
292 | 292 | ||
293 | return 0; | 293 | return 0; |
294 | } | 294 | } |
295 | |||
296 | drm_public | ||
297 | int drm_tegra_bo_get_tiling(struct drm_tegra_bo *bo, | ||
298 | struct drm_tegra_bo_tiling *tiling) | ||
299 | { | ||
300 | struct drm_tegra_gem_get_tiling args; | ||
301 | struct drm_tegra *drm = bo->drm; | ||
302 | int err; | ||
303 | |||
304 | if (!bo) | ||
305 | return -EINVAL; | ||
306 | |||
307 | memset(&args, 0, sizeof(args)); | ||
308 | args.handle = bo->handle; | ||
309 | |||
310 | err = drmCommandWriteRead(drm->fd, DRM_TEGRA_GEM_GET_TILING, &args, | ||
311 | sizeof(args)); | ||
312 | if (err < 0) | ||
313 | return -errno; | ||
314 | |||
315 | if (tiling) { | ||
316 | tiling->mode = args.mode; | ||
317 | tiling->value = args.value; | ||
318 | } | ||
319 | |||
320 | return 0; | ||
321 | } | ||
322 | |||
323 | drm_public | ||
324 | int drm_tegra_bo_set_tiling(struct drm_tegra_bo *bo, | ||
325 | const struct drm_tegra_bo_tiling *tiling) | ||
326 | { | ||
327 | struct drm_tegra_gem_set_tiling args; | ||
328 | struct drm_tegra *drm = bo->drm; | ||
329 | int err; | ||
330 | |||
331 | if (!bo) | ||
332 | return -EINVAL; | ||
333 | |||
334 | memset(&args, 0, sizeof(args)); | ||
335 | args.handle = bo->handle; | ||
336 | args.mode = tiling->mode; | ||
337 | args.value = tiling->value; | ||
338 | |||
339 | err = drmCommandWriteRead(drm->fd, DRM_TEGRA_GEM_SET_TILING, &args, | ||
340 | sizeof(args)); | ||
341 | if (err < 0) | ||
342 | return -errno; | ||
343 | |||
344 | return 0; | ||
345 | } | ||
diff --git a/tegra/tegra.h b/tegra/tegra.h index a8624180..31b0995a 100644 --- a/tegra/tegra.h +++ b/tegra/tegra.h | |||
@@ -47,4 +47,14 @@ int drm_tegra_bo_unmap(struct drm_tegra_bo *bo); | |||
47 | int drm_tegra_bo_get_flags(struct drm_tegra_bo *bo, uint32_t *flags); | 47 | int drm_tegra_bo_get_flags(struct drm_tegra_bo *bo, uint32_t *flags); |
48 | int drm_tegra_bo_set_flags(struct drm_tegra_bo *bo, uint32_t flags); | 48 | int drm_tegra_bo_set_flags(struct drm_tegra_bo *bo, uint32_t flags); |
49 | 49 | ||
50 | struct drm_tegra_bo_tiling { | ||
51 | uint32_t mode; | ||
52 | uint32_t value; | ||
53 | }; | ||
54 | |||
55 | int drm_tegra_bo_get_tiling(struct drm_tegra_bo *bo, | ||
56 | struct drm_tegra_bo_tiling *tiling); | ||
57 | int drm_tegra_bo_set_tiling(struct drm_tegra_bo *bo, | ||
58 | const struct drm_tegra_bo_tiling *tiling); | ||
59 | |||
50 | #endif /* __DRM_TEGRA_H__ */ | 60 | #endif /* __DRM_TEGRA_H__ */ |