**************************************************************************/
-#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;
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;
}
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));
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;