summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/io/drm/drm_io32.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/uts/common/io/drm/drm_io32.c')
-rw-r--r--usr/src/uts/common/io/drm/drm_io32.c386
1 files changed, 386 insertions, 0 deletions
diff --git a/usr/src/uts/common/io/drm/drm_io32.c b/usr/src/uts/common/io/drm/drm_io32.c
new file mode 100644
index 0000000..60b04c5
--- /dev/null
+++ b/usr/src/uts/common/io/drm/drm_io32.c
@@ -0,0 +1,386 @@
+/*
+ * Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+/*
+ * Copyright (c) 2012 Intel Corporation. All rights reserved.
+ */
+
+#include "drm.h"
+#include "drmP.h"
+#include "drm_io32.h"
+
+#ifdef _MULTI_DATAMODEL
+
+int
+copyin32_drm_map(void *dest, void *src)
+{
+ struct drm_map *dest64 = dest;
+ struct drm_map_32 dest32;
+
+ DRM_COPYFROM_WITH_RETURN(&dest32, (void *)src, sizeof(dest32));
+
+ dest64->offset = dest32.offset;
+ dest64->size = dest32.size;
+ dest64->type = dest32.type;
+ dest64->flags = dest32.flags;
+ dest64->handle = dest32.handle;
+ dest64->mtrr = dest32.mtrr;
+
+ return (0);
+}
+
+int
+copyout32_drm_map(void *dest, void *src)
+{
+ struct drm_map *src64 = src;
+ struct drm_map_32 src32;
+
+ src32.offset = src64->offset;
+ src32.size = (uint32_t)src64->size;
+ src32.type = src64->type;
+ src32.flags = src64->flags;
+ src32.handle = src64->handle;
+ src32.mtrr = src64->mtrr;
+
+ DRM_COPYTO_WITH_RETURN((void *)dest, &src32, sizeof(src32));
+
+ return (0);
+}
+
+int
+copyin32_drm_buf_desc(void *dest, void *src)
+{
+ struct drm_buf_desc *dest64 = dest;
+ struct drm_buf_desc_32 dest32;
+
+ DRM_COPYFROM_WITH_RETURN(&dest32, (void *)src, sizeof(dest32));
+
+ dest64->count = dest32.count;
+ dest64->size = dest32.size;
+ dest64->low_mark = dest32.low_mark;
+ dest64->high_mark = dest32.high_mark;
+ dest64->flags = dest32.flags;
+ dest64->agp_start = dest32.agp_start;
+
+ return (0);
+}
+
+int
+copyout32_drm_buf_desc(void *dest, void *src)
+{
+ struct drm_buf_desc *src64 = src;
+ struct drm_buf_desc_32 src32;
+
+ src32.count = src64->count;
+ src32.size = (uint32_t)src64->size;
+ src32.low_mark = src64->low_mark;
+ src32.high_mark = src64->high_mark;
+ src32.flags = src64->flags;
+ src32.agp_start = (uint32_t)src64->agp_start;
+
+ DRM_COPYTO_WITH_RETURN((void *)dest, &src32, sizeof(src32));
+
+ return (0);
+}
+
+int
+copyin32_drm_buf_free(void *dest, void *src)
+{
+ struct drm_buf_free *dest64 = dest;
+ struct drm_buf_free_32 dest32;
+
+ DRM_COPYFROM_WITH_RETURN(&dest32, (void *)src, sizeof(dest32));
+
+ dest64->count = dest32.count;
+ dest64->list = (int *)(uintptr_t)dest32.list;
+
+ return (0);
+}
+
+int
+copyin32_drm_buf_map(void *dest, void *src)
+{
+ struct drm_buf_map *dest64 = dest;
+ struct drm_buf_map_32 dest32;
+
+ DRM_COPYFROM_WITH_RETURN(&dest32, (void *)src, sizeof(dest32));
+
+ dest64->count = dest32.count;
+ dest64->virtual = (void *)(uintptr_t)dest32.virtual;
+ dest64->list = (drm_buf_pub_t *)(uintptr_t)dest32.list;
+ dest64->fd = dest32.fd;
+
+ return (0);
+}
+
+int
+copyout32_drm_buf_map(void *dest, void *src)
+{
+ struct drm_buf_map *src64 = src;
+ struct drm_buf_map_32 src32;
+
+ src32.count = src64->count;
+ src32.virtual = (caddr32_t)(uintptr_t)src64->virtual;
+
+ DRM_COPYTO_WITH_RETURN((void *)dest, &src32, sizeof(src32));
+
+ return (0);
+}
+
+int
+copyin32_drm_ctx_priv_map(void *dest, void *src)
+{
+ struct drm_ctx_priv_map *dest64 = dest;
+ struct drm_ctx_priv_map_32 dest32;
+
+ DRM_COPYFROM_WITH_RETURN(&dest32, (void *)src, sizeof(dest32));
+
+ dest64->ctx_id = dest32.ctx_id;
+ dest64->handle = (void *)(uintptr_t)dest32.handle;
+
+ return (0);
+}
+
+int
+copyout32_drm_ctx_priv_map(void *dest, void *src)
+{
+ struct drm_ctx_priv_map *src64 = src;
+ struct drm_ctx_priv_map_32 src32;
+
+ src32.ctx_id = src64->ctx_id;
+ src32.handle = (caddr32_t)(uintptr_t)src64->handle;
+
+ DRM_COPYTO_WITH_RETURN((void *)dest, &src32, sizeof(src32));
+
+ return (0);
+}
+
+int
+copyin32_drm_ctx_res(void *dest, void *src)
+{
+ struct drm_ctx_res *dest64 = dest;
+ struct drm_ctx_res_32 dest32;
+
+ DRM_COPYFROM_WITH_RETURN(&dest32, (void *)src, sizeof(dest32));
+
+ dest64->count = dest32.count;
+ dest64->contexts = (struct drm_ctx *)(uintptr_t)dest32.contexts;
+
+ return (0);
+}
+
+int
+copyout32_drm_ctx_res(void *dest, void *src)
+{
+ struct drm_ctx_res *src64 = src;
+ struct drm_ctx_res_32 src32;
+
+ src32.count = src64->count;
+ src32.contexts = (caddr32_t)(uintptr_t)src64->contexts;
+
+ DRM_COPYTO_WITH_RETURN((void *)dest, &src32, sizeof(src32));
+
+ return (0);
+}
+
+int
+copyin32_drm_unique(void *dest, void *src)
+{
+ struct drm_unique *dest64 = dest;
+ struct drm_unique_32 dest32;
+
+ DRM_COPYFROM_WITH_RETURN(&dest32, (void *)src, sizeof(dest32));
+
+ dest64->unique_len = dest32.unique_len;
+ dest64->unique = (char __user *)(uintptr_t)dest32.unique;
+
+ return (0);
+}
+
+int
+copyout32_drm_unique(void *dest, void *src)
+{
+ struct drm_unique *src64 = src;
+ struct drm_unique_32 src32;
+
+ src32.unique_len = src64->unique_len;
+ src32.unique = (caddr32_t)(uintptr_t)src64->unique;
+
+ DRM_COPYTO_WITH_RETURN((void *)dest, &src32, sizeof(src32));
+
+ return (0);
+}
+
+int
+copyin32_drm_client(void *dest, void *src)
+{
+ struct drm_client *dest64 = dest;
+ struct drm_client_32 dest32;
+
+ DRM_COPYFROM_WITH_RETURN(&dest32, (void *)src, sizeof(dest32));
+
+ dest64->idx = dest32.idx;
+ dest64->auth = dest32.auth;
+ dest64->pid = dest32.pid;
+ dest64->uid = dest32.uid;
+ dest64->magic = dest32.magic;
+ dest64->iocs = dest32.iocs;
+
+ return (0);
+}
+
+int
+copyout32_drm_client(void *dest, void *src)
+{
+ struct drm_client *src64 = src;
+ struct drm_client_32 src32;
+
+ src32.idx = src64->idx;
+ src32.auth = src64->auth;
+ src32.pid = (uint32_t)src64->pid;
+ src32.uid = (uint32_t)src64->uid;
+ src32.magic = (uint32_t)src64->magic;
+ src32.iocs = (uint32_t)src64->iocs;
+
+ DRM_COPYTO_WITH_RETURN((void *)dest, &src32, sizeof(src32));
+
+ return (0);
+}
+
+int
+copyout32_drm_stats(void *dest, void *src)
+{
+ struct drm_stats *src64 = src;
+ struct drm_stats_32 src32;
+ int i;
+
+ src32.count = (uint32_t)src64->count;
+ for (i = 0; i < 15; i++) {
+ src32.data[i].value = src64->data[i].value;
+ src32.data[i].type = src64->data[i].type;
+ }
+
+ DRM_COPYTO_WITH_RETURN((void *)dest, &src32, sizeof(src32));
+
+ return (0);
+}
+
+int
+copyin32_drm_version(void *dest, void *src)
+{
+ struct drm_version *dest64 = dest;
+ struct drm_version_32 dest32;
+
+ DRM_COPYFROM_WITH_RETURN(&dest32, (void *)src, sizeof(dest32));
+
+ dest64->name_len = dest32.name_len;
+ dest64->name = (char *)(uintptr_t)dest32.name;
+ dest64->date_len = dest32.date_len;
+ dest64->date = (char *)(uintptr_t)dest32.date;
+ dest64->desc_len = dest32.desc_len;
+ dest64->desc = (char *)(uintptr_t)dest32.desc;
+
+ return (0);
+}
+
+int
+copyout32_drm_version(void *dest, void *src)
+{
+ struct drm_version *src64 = src;
+ struct drm_version_32 src32;
+
+ src32.version_major = src64->version_major;
+ src32.version_minor = src64->version_minor;
+ src32.version_patchlevel = src64->version_patchlevel;
+ src32.name_len = (uint32_t)src64->name_len;
+ src32.name = (caddr32_t)(uintptr_t)src64->name;
+ src32.date_len = (uint32_t)src64->date_len;
+ src32.date = (caddr32_t)(uintptr_t)src64->date;
+ src32.desc_len = (uint32_t)src64->desc_len;
+ src32.desc = (caddr32_t)(uintptr_t)src64->desc;
+
+ DRM_COPYTO_WITH_RETURN((void *)dest, &src32, sizeof(src32));
+
+ return (0);
+}
+
+int
+copyin32_drm_wait_vblank(void *dest, void *src)
+{
+ union drm_wait_vblank *dest64 = dest;
+ union drm_wait_vblank_32 dest32;
+
+ DRM_COPYFROM_WITH_RETURN(&dest32, (void *)src, sizeof(dest32));
+
+ dest64->request.type = dest32.request.type;
+ dest64->request.sequence = dest32.request.sequence;
+ dest64->request.signal = dest32.request.signal;
+
+ return (0);
+}
+
+int
+copyout32_drm_wait_vblank(void *dest, void *src)
+{
+ union drm_wait_vblank *src64 = src;
+ union drm_wait_vblank_32 src32;
+
+ src32.reply.type = src64->reply.type;
+ src32.reply.sequence = src64->reply.sequence;
+ src32.reply.tval_sec = (int32_t)src64->reply.tval_sec;
+ src32.reply.tval_usec = (int32_t)src64->reply.tval_usec;
+
+ DRM_COPYTO_WITH_RETURN((void *)dest, &src32, sizeof(src32));
+
+ return (0);
+}
+
+int
+copyin32_drm_scatter_gather(void *dest, void *src)
+{
+ struct drm_scatter_gather *dest64 = dest;
+ struct drm_scatter_gather_32 dest32;
+
+ DRM_COPYFROM_WITH_RETURN(&dest32, (void *)src, sizeof(dest32));
+
+ dest64->size = dest32.size;
+ dest64->handle = dest32.handle;
+
+ return (0);
+}
+
+int
+copyout32_drm_scatter_gather(void *dest, void *src)
+{
+ struct drm_scatter_gather *src64 = src;
+ struct drm_scatter_gather_32 src32;
+
+ src32.size = (uint32_t)src64->size;
+ src32.handle = (uint32_t)src64->handle;
+
+ DRM_COPYTO_WITH_RETURN((void *)dest, &src32, sizeof(src32));
+
+ return (0);
+}
+
+#endif