OSDN Git Service

tests/amdgpu: minor fix for dispatch/draw test
[android-x86/external-libdrm.git] / tegra / tegra.c
index 614ab96..cf00a3c 100644 (file)
  * OTHER DEALINGS IN THE SOFTWARE.
  */
 
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#endif
-
 #include <errno.h>
 #include <fcntl.h>
 #include <string.h>
@@ -74,8 +70,7 @@ static int drm_tegra_wrap(struct drm_tegra **drmp, int fd, bool close)
        return 0;
 }
 
-drm_public
-int drm_tegra_new(struct drm_tegra **drmp, int fd)
+drm_public int drm_tegra_new(struct drm_tegra **drmp, int fd)
 {
        bool supported = false;
        drmVersionPtr version;
@@ -95,8 +90,7 @@ int drm_tegra_new(struct drm_tegra **drmp, int fd)
        return drm_tegra_wrap(drmp, fd, false);
 }
 
-drm_public
-void drm_tegra_close(struct drm_tegra *drm)
+drm_public void drm_tegra_close(struct drm_tegra *drm)
 {
        if (!drm)
                return;
@@ -107,8 +101,7 @@ void drm_tegra_close(struct drm_tegra *drm)
        free(drm);
 }
 
-drm_public
-int drm_tegra_bo_new(struct drm_tegra_bo **bop, struct drm_tegra *drm,
+drm_public int drm_tegra_bo_new(struct drm_tegra_bo **bop, struct drm_tegra *drm,
                     uint32_t flags, uint32_t size)
 {
        struct drm_tegra_gem_create args;
@@ -146,8 +139,7 @@ int drm_tegra_bo_new(struct drm_tegra_bo **bop, struct drm_tegra *drm,
        return 0;
 }
 
-drm_public
-int drm_tegra_bo_wrap(struct drm_tegra_bo **bop, struct drm_tegra *drm,
+drm_public int drm_tegra_bo_wrap(struct drm_tegra_bo **bop, struct drm_tegra *drm,
                      uint32_t handle, uint32_t flags, uint32_t size)
 {
        struct drm_tegra_bo *bo;
@@ -170,8 +162,7 @@ int drm_tegra_bo_wrap(struct drm_tegra_bo **bop, struct drm_tegra *drm,
        return 0;
 }
 
-drm_public
-struct drm_tegra_bo *drm_tegra_bo_ref(struct drm_tegra_bo *bo)
+drm_public struct drm_tegra_bo *drm_tegra_bo_ref(struct drm_tegra_bo *bo)
 {
        if (bo)
                atomic_inc(&bo->ref);
@@ -179,15 +170,13 @@ struct drm_tegra_bo *drm_tegra_bo_ref(struct drm_tegra_bo *bo)
        return bo;
 }
 
-drm_public
-void drm_tegra_bo_unref(struct drm_tegra_bo *bo)
+drm_public void drm_tegra_bo_unref(struct drm_tegra_bo *bo)
 {
        if (bo && atomic_dec_and_test(&bo->ref))
                drm_tegra_bo_free(bo);
 }
 
-drm_public
-int drm_tegra_bo_get_handle(struct drm_tegra_bo *bo, uint32_t *handle)
+drm_public int drm_tegra_bo_get_handle(struct drm_tegra_bo *bo, uint32_t *handle)
 {
        if (!bo || !handle)
                return -EINVAL;
@@ -197,8 +186,7 @@ int drm_tegra_bo_get_handle(struct drm_tegra_bo *bo, uint32_t *handle)
        return 0;
 }
 
-drm_public
-int drm_tegra_bo_map(struct drm_tegra_bo *bo, void **ptr)
+drm_public int drm_tegra_bo_map(struct drm_tegra_bo *bo, void **ptr)
 {
        struct drm_tegra *drm = bo->drm;
 
@@ -230,8 +218,7 @@ int drm_tegra_bo_map(struct drm_tegra_bo *bo, void **ptr)
        return 0;
 }
 
-drm_public
-int drm_tegra_bo_unmap(struct drm_tegra_bo *bo)
+drm_public int drm_tegra_bo_unmap(struct drm_tegra_bo *bo)
 {
        if (!bo)
                return -EINVAL;
@@ -247,8 +234,7 @@ int drm_tegra_bo_unmap(struct drm_tegra_bo *bo)
        return 0;
 }
 
-drm_public
-int drm_tegra_bo_get_flags(struct drm_tegra_bo *bo, uint32_t *flags)
+drm_public int drm_tegra_bo_get_flags(struct drm_tegra_bo *bo, uint32_t *flags)
 {
        struct drm_tegra_gem_get_flags args;
        struct drm_tegra *drm = bo->drm;
@@ -271,8 +257,7 @@ int drm_tegra_bo_get_flags(struct drm_tegra_bo *bo, uint32_t *flags)
        return 0;
 }
 
-drm_public
-int drm_tegra_bo_set_flags(struct drm_tegra_bo *bo, uint32_t flags)
+drm_public int drm_tegra_bo_set_flags(struct drm_tegra_bo *bo, uint32_t flags)
 {
        struct drm_tegra_gem_get_flags args;
        struct drm_tegra *drm = bo->drm;
@@ -292,3 +277,52 @@ 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;
+}