all: include config.h only when available and use its defines
[platform/upstream/libdrm.git] / libkms / intel.c
index 6dd739d..92f1cf2 100644 (file)
@@ -26,7 +26,9 @@
  **************************************************************************/
 
 
-#define HAVE_STDINT_H
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
 #define _FILE_OFFSET_BITS 64
 
 #include <errno.h>
 struct intel_bo
 {
        struct kms_bo base;
-       unsigned handle;
        unsigned map_count;
-       int mapped;
 };
 
 static int
 intel_get_prop(struct kms_driver *kms, unsigned key, unsigned *out)
 {
        switch (key) {
-       case KMS_MAX_SCANOUT_WIDTH:
-               *out = 4096;
-               break;
-       case KMS_MAX_SCANOUT_HEIGHT:
-               *out = 4096;
-               break;
-       case KMS_MIN_SCANOUT_WIDTH:
-               *out = 1;
-               break;
-       case KMS_MIN_SCANOUT_HEIGHT:
-               *out = 1;
-               break;
-       case KMS_MAX_CURSOR_WIDTH:
-               *out = 64;
-               break;
-       case KMS_MAX_CURSOR_HEIGHT:
-               *out = 64;
-               break;
-       case KMS_MIN_CURSOR_WIDTH:
-               *out = 64;
-               break;
-       case KMS_MIN_CURSOR_HEIGHT:
-               *out = 64;
+       case KMS_BO_TYPE:
+               *out = KMS_BO_TYPE_SCANOUT_X8R8G8B8 | KMS_BO_TYPE_CURSOR_64X64_A8R8G8B8;
                break;
        default:
                return -EINVAL;
@@ -116,14 +95,15 @@ intel_bo_create(struct kms_driver *kms,
        if (!bo)
                return -ENOMEM;
 
-       if (type == KMS_BO_TYPE_CURSOR) {
+       if (type == KMS_BO_TYPE_CURSOR_64X64_A8R8G8B8) {
                pitch = 64 * 4;
                size = 64 * 64 * 4;
-       } else if (type == KMS_BO_TYPE_SCANOUT) {
+       } else if (type == KMS_BO_TYPE_SCANOUT_X8R8G8B8) {
                pitch = width * 4;
                pitch = (pitch + 512 - 1) & ~(512 - 1);
                size = pitch * ((height + 4 - 1) & ~(4 - 1));
        } else {
+               free(bo);
                return -EINVAL;
        }
 
@@ -140,7 +120,7 @@ intel_bo_create(struct kms_driver *kms,
        bo->base.pitch = pitch;
 
        *out = &bo->base;
-       if (type == KMS_BO_TYPE_SCANOUT && pitch > 512) {
+       if (type == KMS_BO_TYPE_SCANOUT_X8R8G8B8 && pitch > 512) {
                struct drm_i915_gem_set_tiling tile;
 
                memset(&tile, 0, sizeof(tile));
@@ -149,14 +129,16 @@ intel_bo_create(struct kms_driver *kms,
                tile.stride = bo->base.pitch;
 
                ret = drmCommandWriteRead(kms->fd, DRM_I915_GEM_SET_TILING, &tile, sizeof(tile));
-               if (ret != 0)
-                       goto err_destroy;
+#if 0
+               if (ret) {
+                       kms_bo_destroy(out);
+                       return ret;
+               }
+#endif
        }
 
        return 0;
 
-err_destroy:
-       kms_bo_destroy(out);
 err_free:
        free(bo);
        return ret;
@@ -218,8 +200,11 @@ intel_bo_destroy(struct kms_bo *_bo)
        struct drm_gem_close arg;
        int ret;
 
-       if (bo->base.ptr)
+       if (bo->base.ptr) {
+               /* XXX Sanity check map_count */
                munmap(bo->base.ptr, bo->base.size);
+               bo->base.ptr = NULL;
+       }
 
        memset(&arg, 0, sizeof(arg));
        arg.handle = bo->base.handle;