summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Levy <alevy@redhat.com>2012-07-23 12:26:15 +0300
committerAlon Levy <alevy@redhat.com>2012-07-23 13:11:02 +0300
commit8ffb831f32ea205db6a7063a9ae2a242a8dceb96 (patch)
tree2175152a72f5c35f332a303c0f713ed3ec134445
parentac807dc3b58905c48c457123b8df96766ce5aaa3 (diff)
qxl_drm.h: update to f94111d5fqxl.v3
f94111d5f9538474a00694806b2490d66f2d0b3b handles became 32 bit. added some missing includes.
-rw-r--r--drivers/gpu/drm/qxl/qxl_kms.c13
-rw-r--r--include/drm/qxl_drm.h30
2 files changed, 24 insertions, 19 deletions
diff --git a/drivers/gpu/drm/qxl/qxl_kms.c b/drivers/gpu/drm/qxl/qxl_kms.c
index 410fc9239e0..eb2b25dcc10 100644
--- a/drivers/gpu/drm/qxl/qxl_kms.c
+++ b/drivers/gpu/drm/qxl/qxl_kms.c
@@ -285,7 +285,7 @@ int qxl_incref_ioctl(struct drm_device *dev, void *data,
gobj = drm_gem_object_lookup(dev, file_priv, incref->handle); /* this takes a reference */
if (!gobj) {
- DRM_ERROR("%s: invalid handle %llu\n", __FUNCTION__, incref->handle);
+ DRM_ERROR("%s: invalid handle %u\n", __FUNCTION__, incref->handle);
return -EINVAL;
}
return 0;
@@ -299,7 +299,7 @@ int qxl_decref_ioctl(struct drm_device *dev, void *data,
gobj = drm_gem_object_lookup(dev, file_priv, decref->handle);
if (!gobj) {
- DRM_ERROR("%s: invalid handle %llu\n", __FUNCTION__, decref->handle);
+ DRM_ERROR("%s: invalid handle %u\n", __FUNCTION__, decref->handle);
return -EINVAL;
}
drm_gem_object_unreference_unlocked(gobj); /* remove reference taken by lookup */
@@ -313,7 +313,7 @@ int qxl_map_ioctl(struct drm_device *dev, void *data,
struct qxl_device *qdev = dev->dev_private;
struct drm_qxl_map *qxl_map = data;
- DRM_INFO("%s: handle in %lld\n", __func__, qxl_map->handle);
+ DRM_INFO("%s: handle in %d\n", __func__, qxl_map->handle);
return qxl_mode_dumb_mmap(file_priv, qdev->ddev, qxl_map->handle, &qxl_map->offset);
}
@@ -379,10 +379,11 @@ int qxl_execbuffer_ioctl(struct drm_device *dev, void *data,
for (cmd_num = 0; cmd_num < execbuffer->commands_num; ++cmd_num) {
struct drm_qxl_release *release;
struct qxl_bo *cmd_bo;
+ struct drm_qxl_command *commands =
+ (struct drm_qxl_command *)execbuffer->commands;
- if (DRM_COPY_FROM_USER(&user_cmd,
- &execbuffer->commands[cmd_num],
- sizeof(user_cmd)))
+ if (DRM_COPY_FROM_USER(&user_cmd, &commands[cmd_num],
+ sizeof(user_cmd)))
return -EFAULT;
if (user_cmd.type != QXL_CMD_DRAW) {
// actual difference is just which ring to push it to.
diff --git a/include/drm/qxl_drm.h b/include/drm/qxl_drm.h
index 64673b52ffa..6a5ea3ee0e3 100644
--- a/include/drm/qxl_drm.h
+++ b/include/drm/qxl_drm.h
@@ -1,10 +1,14 @@
#ifndef QXL_DRM_H
#define QXL_DRM_H
+#include <stddef.h>
#include "drm.h"
/* Please note that modifications to all structs defined here are
* subject to backwards-compatibility constraints.
+ *
+ * Do not use pointers, use uint64_t instead for 32 bit / 64 bit user/kernel compatibility
+ * Keep fields aligned to their size
*/
#define QXL_GEM_DOMAIN_CPU 0
@@ -26,24 +30,24 @@ enum {
struct drm_qxl_alloc {
uint32_t type;
uint32_t size;
- uint64_t handle; // 0 is an invalid handle
+ uint32_t handle; // 0 is an invalid handle
};
struct drm_qxl_incref {
- uint64_t handle;
+ uint32_t handle;
};
struct drm_qxl_decref {
- uint64_t handle;
+ uint32_t handle;
};
struct drm_qxl_map {
- uint64_t handle;
uint64_t offset; // use for mmap system call
+ uint32_t handle;
};
struct drm_qxl_unmap {
- uint64_t handle;
+ uint32_t handle;
};
/*
@@ -51,26 +55,26 @@ struct drm_qxl_unmap {
* dst_offset)
*/
struct drm_qxl_reloc {
- uint64_t src_handle; // 0 if to command buffer
uint64_t src_offset; // offset into src_handle or src buffer
- uint64_t dst_handle; // dest handle to compute address from
uint64_t dst_offset; // offset in dest handle
+ uint32_t src_handle; // 0 if to command buffer
+ uint32_t dst_handle; // dest handle to compute address from
};
struct drm_qxl_command {
uint32_t type;
uint32_t command_size;
- uint64_t __user command; /* void * */
+ uint64_t __user command; /* void* */
uint32_t relocs_num;
- uint64_t __user relocs; /* struct drm_qxl_reloc* */
+ uint64_t __user relocs; /* struct drm_qxl_reloc* */
};
/* XXX: call it drm_qxl_commands? */
struct drm_qxl_execbuffer {
- uint32_t flags; // for future
- uint32_t commands_num;
- struct drm_qxl_command __user* commands;
- uint8_t spare[16]; // spare for future
+ uint32_t flags; // for future
+ uint32_t commands_num;
+ uint64_t __user commands; /* struct drm_qxl_command* */
+ uint8_t spare[16]; /* spare for future */
};
// TODO: why have a seperate mmap and alloc ioctl? also, why not just unmmap on the last