**************************************************************************/
-#define HAVE_STDINT_H
-#define _FILE_OFFSET_BITS 64
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
#include <errno.h>
#include <stdio.h>
#include <string.h>
#include "internal.h"
-#include <sys/mman.h>
#include <sys/ioctl.h>
#include "xf86drm.h"
+#include "libdrm.h"
#include "i915_drm.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));
if (ret)
return ret;
- map = mmap(0, bo->base.size, PROT_READ | PROT_WRITE, MAP_SHARED, bo->base.kms->fd, arg.offset);
+ map = drm_mmap(0, bo->base.size, PROT_READ | PROT_WRITE, MAP_SHARED, bo->base.kms->fd, arg.offset);
if (map == MAP_FAILED)
return -errno;
struct drm_gem_close arg;
int ret;
- if (bo->base.ptr)
- munmap(bo->base.ptr, bo->base.size);
+ if (bo->base.ptr) {
+ /* XXX Sanity check map_count */
+ drm_munmap(bo->base.ptr, bo->base.size);
+ bo->base.ptr = NULL;
+ }
memset(&arg, 0, sizeof(arg));
arg.handle = bo->base.handle;