libdrm: Changes to 'upstream-experimental'
.gitignore | 66
Makefile.am | 2
README | 71
bsd-core/Makefile | 65
bsd-core/ati_pcigart.c | 35
bsd-core/drm.h | 1
bsd-core/drmP.h | 462 -
bsd-core/drm_agpsupport.c | 73
bsd-core/drm_auth.c | 126
bsd-core/drm_bufs.c | 318
bsd-core/drm_context.c | 151
bsd-core/drm_dma.c | 35
bsd-core/drm_drawable.c | 154
bsd-core/drm_drv.c | 320
bsd-core/drm_fops.c | 17
bsd-core/drm_internal.h | 1
bsd-core/drm_ioctl.c | 176
bsd-core/drm_irq.c | 401 -
bsd-core/drm_lock.c | 73
bsd-core/drm_memory.c | 13
bsd-core/drm_pci.c | 19
bsd-core/drm_sarea.h | 1
bsd-core/drm_scatter.c | 50
bsd-core/drm_sysctl.c | 17
bsd-core/drm_vm.c | 11
bsd-core/i915_dma.c | 1
bsd-core/i915_drm.h | 1
bsd-core/i915_drv.c | 15
bsd-core/i915_drv.h | 1
bsd-core/i915_irq.c | 1
bsd-core/i915_mem.c | 1
bsd-core/mach64_dma.c | 1
bsd-core/mach64_drm.h | 1
bsd-core/mach64_drv.c | 12
bsd-core/mach64_drv.h | 1
bsd-core/mach64_irq.c | 1
bsd-core/mach64_state.c | 1
bsd-core/mga_dma.c | 1
bsd-core/mga_drm.h | 1
bsd-core/mga_drv.c | 16
bsd-core/mga_drv.h | 1
bsd-core/mga_irq.c | 1
bsd-core/mga_state.c | 1
bsd-core/mga_ucode.h | 1
bsd-core/mga_warp.c | 1
bsd-core/r128_cce.c | 1
bsd-core/r128_drm.h | 1
bsd-core/r128_drv.c | 16
bsd-core/r128_drv.h | 1
bsd-core/r128_irq.c | 1
bsd-core/r128_state.c | 1
bsd-core/r300_cmdbuf.c | 1
bsd-core/r300_reg.h | 1
bsd-core/radeon_cp.c | 1
bsd-core/radeon_drm.h | 1
bsd-core/radeon_drv.c | 17
bsd-core/radeon_drv.h | 1
bsd-core/radeon_irq.c | 1
bsd-core/radeon_mem.c | 1
bsd-core/radeon_state.c | 1
bsd-core/savage_bci.c | 1
bsd-core/savage_drm.h | 1
bsd-core/savage_drv.c | 8
bsd-core/savage_drv.h | 1
bsd-core/savage_state.c | 1
bsd-core/sis_drm.h | 1
bsd-core/sis_drv.c | 10
bsd-core/sis_drv.h | 1
bsd-core/sis_ds.c | 1
bsd-core/sis_ds.h | 1
bsd-core/sis_mm.c | 1
bsd-core/tdfx_drv.c | 12
bsd-core/tdfx_drv.h | 1
bsd-core/via_3d_reg.h | 1
bsd-core/via_dma.c | 1
bsd-core/via_drm.h | 1
bsd-core/via_drv.c | 10
bsd-core/via_drv.h | 1
bsd-core/via_ds.c | 1
bsd-core/via_ds.h | 1
bsd-core/via_irq.c | 1
bsd-core/via_map.c | 1
bsd-core/via_mm.c | 1
bsd-core/via_mm.h | 1
bsd-core/via_verifier.c | 1
bsd-core/via_verifier.h | 1
bsd-core/via_video.c | 1
configure.ac | 9
libdrm/Makefile.am | 5
libdrm/xf86drm.c | 1351 ---
libdrm/xf86drm.h | 6
libdrm/xf86drmHash.c | 20
libdrm/xf86drmRandom.c | 20
libdrm/xf86drmSL.c | 23
libdrm/xf86mm.h | 121
linux-core/.gitignore | 1
linux-core/Kconfig | 15
linux-core/Makefile | 102
linux-core/Makefile.kernel | 27
linux-core/README.drm | 23
linux-core/ati_pcigart.c | 151
linux-core/drm.h | 1
linux-core/drmP.h | 1187 +--
linux-core/drm_agpsupport.c | 375
linux-core/drm_auth.c | 82
linux-core/drm_bo.c | 3238 +++++---
linux-core/drm_bo_lock.c | 189
linux-core/drm_bo_move.c | 630 +
linux-core/drm_bufs.c | 411 -
linux-core/drm_compat.c | 601 +
linux-core/drm_compat.h | 268
linux-core/drm_context.c | 342
linux-core/drm_dma.c | 23
linux-core/drm_drawable.c | 192
linux-core/drm_drv.c | 512 -
linux-core/drm_fence.c | 970 +-
linux-core/drm_fops.c | 253
linux-core/drm_hashtab.c | 37
linux-core/drm_hashtab.h | 25
linux-core/drm_internal.h | 1
linux-core/drm_ioc32.c | 92
linux-core/drm_ioctl.c | 235
linux-core/drm_irq.c | 504 +
linux-core/drm_lock.c | 221
linux-core/drm_memory.c | 170
linux-core/drm_memory.h | 174
linux-core/drm_memory_debug.c | 75
linux-core/drm_memory_debug.h | 70
linux-core/drm_mm.c | 144
linux-core/drm_object.c | 163
linux-core/drm_objects.h | 827 ++
linux-core/drm_os_linux.h | 64
linux-core/drm_pci.c | 8
linux-core/drm_proc.c | 142
linux-core/drm_regman.c | 200
linux-core/drm_sarea.h | 1
linux-core/drm_scatter.c | 76
linux-core/drm_sman.c | 94
linux-core/drm_sman.h | 50
linux-core/drm_stub.c | 216
linux-core/drm_sysfs.c | 234
linux-core/drm_ttm.c | 639 -
linux-core/drm_ttm.h | 145
linux-core/drm_vm.c | 745 -
linux-core/drm_vm_nopage_compat.c | 267
linux-core/ffb_context.c | 22
linux-core/ffb_drv.c | 8
linux-core/ffb_drv.h | 6
linux-core/i810_dma.c | 483 -
linux-core/i810_drm.h | 30
linux-core/i810_drv.h | 79
linux-core/i830_dma.c | 1599 ----
linux-core/i830_drm.h | 342
linux-core/i830_drv.c | 117
linux-core/i830_drv.h | 290
linux-core/i830_irq.c | 198
linux-core/i915_buffer.c | 265
linux-core/i915_compat.c | 215
linux-core/i915_dma.c | 1
linux-core/i915_drm.h | 1
linux-core/i915_drv.c | 550 +
linux-core/i915_drv.h | 1
linux-core/i915_execbuf.c | 917 ++
linux-core/i915_fence.c | 275
linux-core/i915_ioc32.c | 90
linux-core/i915_irq.c | 1
linux-core/i915_mem.c | 1
linux-core/linux | 1
linux-core/mach64_dma.c | 1
linux-core/mach64_drm.h | 1
linux-core/mach64_drv.c | 6
linux-core/mach64_drv.h | 1
linux-core/mach64_irq.c | 1
linux-core/mach64_state.c | 1
linux-core/mga_dma.c | 1
linux-core/mga_drm.h | 1
linux-core/mga_drv.c | 17
linux-core/mga_drv.h | 1
linux-core/mga_ioc32.c | 33
linux-core/mga_irq.c | 1
linux-core/mga_state.c | 1
linux-core/mga_ucode.h | 1
linux-core/mga_warp.c | 1
linux-core/nouveau_bo.c | 296
linux-core/nouveau_dma.c | 1
linux-core/nouveau_dma.h | 1
linux-core/nouveau_drm.h | 1
linux-core/nouveau_drv.c | 120
linux-core/nouveau_drv.h | 1
linux-core/nouveau_fence.c | 119
linux-core/nouveau_fifo.c | 1
linux-core/nouveau_ioc32.c | 72
linux-core/nouveau_irq.c | 1
linux-core/nouveau_mem.c | 1
linux-core/nouveau_notifier.c | 1
linux-core/nouveau_object.c | 1
linux-core/nouveau_reg.h | 1
linux-core/nouveau_sgdma.c | 341
linux-core/nouveau_state.c | 1
linux-core/nouveau_swmthd.c | 1
linux-core/nouveau_swmthd.h | 1
linux-core/nv04_fb.c | 1
linux-core/nv04_fifo.c | 1
linux-core/nv04_graph.c | 1
linux-core/nv04_instmem.c | 1
linux-core/nv04_mc.c | 1
linux-core/nv04_timer.c | 1
linux-core/nv10_fb.c | 1
linux-core/nv10_fifo.c | 1
linux-core/nv10_graph.c | 1
linux-core/nv20_graph.c | 1
linux-core/nv40_fb.c | 1
linux-core/nv40_fifo.c | 1
linux-core/nv40_graph.c | 1
linux-core/nv40_mc.c | 1
linux-core/nv50_fifo.c | 1
linux-core/nv50_graph.c | 1
linux-core/nv50_instmem.c | 1
linux-core/nv50_mc.c | 1
linux-core/nv_drv.h | 1
linux-core/r128_cce.c | 1
linux-core/r128_drm.h | 1
linux-core/r128_drv.c | 7
linux-core/r128_drv.h | 1
linux-core/r128_ioc32.c | 7
linux-core/r128_irq.c | 1
linux-core/r128_state.c | 1
linux-core/r300_cmdbuf.c | 1
linux-core/r300_reg.h | 1
linux-core/radeon_cp.c | 1
linux-core/radeon_drm.h | 1
linux-core/radeon_drv.c | 9
linux-core/radeon_drv.h | 1
linux-core/radeon_ioc32.c | 46
linux-core/radeon_irq.c | 1
linux-core/radeon_mem.c | 1
linux-core/radeon_microcode.h | 1
linux-core/radeon_state.c | 1
linux-core/savage_bci.c | 1
linux-core/savage_drm.h | 1
linux-core/savage_drv.h | 1
linux-core/savage_state.c | 1
linux-core/sis_drm.h | 1
linux-core/sis_drv.c | 8
linux-core/sis_drv.h | 1
linux-core/sis_mm.c | 134
linux-core/tdfx_drv.h | 1
linux-core/via_3d_reg.h | 1
linux-core/via_buffer.c | 163
linux-core/via_dma.c | 1
linux-core/via_dmablit.c | 270
linux-core/via_dmablit.h | 86
linux-core/via_drm.h | 1
linux-core/via_drv.c | 1
linux-core/via_drv.h | 1
linux-core/via_fence.c | 169
linux-core/via_irq.c | 1
linux-core/via_map.c | 1
linux-core/via_mm.c | 87
linux-core/via_verifier.c | 1
linux-core/via_verifier.h | 1
linux-core/via_video.c | 1
linux-core/xgi_cmdlist.c | 326
linux-core/xgi_cmdlist.h | 66
linux-core/xgi_drm.h | 1
linux-core/xgi_drv.c | 422 +
linux-core/xgi_drv.h | 117
linux-core/xgi_fb.c | 130
linux-core/xgi_fence.c | 122
linux-core/xgi_ioc32.c | 140
linux-core/xgi_misc.c | 477 +
linux-core/xgi_misc.h | 37
linux-core/xgi_pcie.c | 127
linux-core/xgi_regs.h | 169
scripts/create_lk_drm.sh | 26
scripts/drm-scripts-gentree.pl | 254
shared-core/drm.h | 575 -
shared-core/drm_drawable.c | 330
shared-core/drm_internal.h | 40
shared-core/drm_pciids.txt | 151
shared-core/drm_sarea.h | 30
shared-core/i915_dma.c | 824 +-
shared-core/i915_drm.h | 118
shared-core/i915_drv.h | 1141 ++-
shared-core/i915_irq.c | 953 +-
shared-core/i915_mem.c | 139
shared-core/mach64_dma.c | 507 -
shared-core/mach64_drm.h | 4
shared-core/mach64_drv.h | 557 -
shared-core/mach64_irq.c | 103
shared-core/mach64_state.c | 237
shared-core/mga_dma.c | 307
shared-core/mga_drm.h | 22
shared-core/mga_drv.h | 178
shared-core/mga_irq.c | 88
shared-core/mga_state.c | 261
shared-core/mga_warp.c | 8
shared-core/nouveau_dma.c | 172
shared-core/nouveau_dma.h | 96
shared-core/nouveau_drm.h | 170
shared-core/nouveau_drv.h | 606 +
shared-core/nouveau_fifo.c | 598 +
shared-core/nouveau_irq.c | 568 +
shared-core/nouveau_mem.c | 784 ++
shared-core/nouveau_notifier.c | 165
shared-core/nouveau_object.c | 1171 +++
shared-core/nouveau_reg.h | 593 +
shared-core/nouveau_state.c | 700 +
shared-core/nouveau_swmthd.c | 191
shared-core/nouveau_swmthd.h | 33
shared-core/nv04_fb.c | 23
shared-core/nv04_fifo.c | 138
shared-core/nv04_graph.c | 516 +
shared-core/nv04_instmem.c | 159
shared-core/nv04_mc.c | 22
shared-core/nv04_timer.c | 53
shared-core/nv10_fb.c | 25
shared-core/nv10_fifo.c | 169
shared-core/nv10_graph.c | 914 ++
shared-core/nv20_graph.c | 909 ++
shared-core/nv40_fb.c | 62
shared-core/nv40_fifo.c | 209
shared-core/nv40_graph.c | 2195 +++++
shared-core/nv40_mc.c | 38
shared-core/nv50_fifo.c | 339
shared-core/nv50_graph.c | 2196 +++++
shared-core/nv50_instmem.c | 324
shared-core/nv50_mc.c | 43
shared-core/r128_cce.c | 183
shared-core/r128_drm.h | 22
shared-core/r128_drv.h | 53
shared-core/r128_irq.c | 64
shared-core/r128_state.c | 452 -
shared-core/r300_cmdbuf.c | 367
shared-core/r300_reg.h | 1096 +-
shared-core/r600_microcode.h |14275 ++++++++++++++++++++++++++++++++++++++
shared-core/radeon_cp.c | 1392 +--
shared-core/radeon_drm.h | 41
shared-core/radeon_drv.h | 408 -
shared-core/radeon_irq.c | 303
shared-core/radeon_mem.c | 114
shared-core/radeon_microcode.h | 1844 ++++
shared-core/radeon_state.c | 894 +-
shared-core/savage_bci.c | 211
shared-core/savage_drm.h | 4
shared-core/savage_drv.h | 32
shared-core/savage_state.c | 403 -
shared-core/sis_drv.h | 29
shared-core/sis_mm.c | 190
shared-core/via_3d_reg.h | 1
shared-core/via_dma.c | 454 -
shared-core/via_drm.h | 48
shared-core/via_drv.c | 51
shared-core/via_drv.h | 115
shared-core/via_irq.c | 232
shared-core/via_map.c | 46
shared-core/via_mm.c | 49
shared-core/via_verifier.c | 80
shared-core/via_verifier.h | 19
shared-core/via_video.c | 24
shared-core/xgi_drm.h | 133
tests/Makefile | 27
tests/Makefile.am | 29
tests/auth.c | 137
tests/drmtest.c | 83
tests/drmtest.h | 37
tests/getclient.c | 60
tests/getstats.c | 51
tests/getversion.c | 47
tests/lock.c | 263
tests/openclose.c | 37
tests/setversion.c | 84
tests/ttmtest/AUTHORS | 1
tests/ttmtest/ChangeLog | 23
tests/ttmtest/Makefile.am | 1
tests/ttmtest/configure.ac | 33
tests/ttmtest/reconf | 2
tests/ttmtest/src/Makefile.am | 8
tests/ttmtest/src/ttmtest.c | 430 +
tests/ttmtest/src/xf86dri.c | 604 +
tests/ttmtest/src/xf86dri.h | 116
tests/ttmtest/src/xf86dristr.h | 390 +
tests/updatedraw.c | 148
383 files changed, 58487 insertions(+), 18072 deletions(-)
New commits:
commit 409d6818eba8a2e2938e0f9281c9318928ba5a35
Author: Dave Airlie <airlied@redhat.com>
Date: Tue Jun 3 12:42:49 2008 +1000
drm: sg alloc should write back the handle to userspace
(cherry picked from commit d5ae19ebcf2dc6402872e0575b5786b6e8117b6f)
diff --git a/shared-core/drm.h b/shared-core/drm.h
index 0ae04b2..82a486f 100644
--- a/shared-core/drm.h
+++ b/shared-core/drm.h
@@ -701,7 +701,7 @@ struct drm_set_version {
#define DRM_IOCTL_AGP_BIND DRM_IOW( 0x36, struct drm_agp_binding)
#define DRM_IOCTL_AGP_UNBIND DRM_IOW( 0x37, struct drm_agp_binding)
-#define DRM_IOCTL_SG_ALLOC DRM_IOW( 0x38, struct drm_scatter_gather)
+#define DRM_IOCTL_SG_ALLOC DRM_IOWR(0x38, struct drm_scatter_gather)
#define DRM_IOCTL_SG_FREE DRM_IOW( 0x39, struct drm_scatter_gather)
#define DRM_IOCTL_WAIT_VBLANK DRM_IOWR(0x3a, union drm_wait_vblank)
commit f892b4adf4021e82a7d4f2eb06256d6f4200ed15
Author: Dave Airlie <airlied@redhat.com>
Date: Wed May 28 15:31:18 2008 +1000
remove include
diff --git a/libdrm/xf86drm.h b/libdrm/xf86drm.h
index 230f54c..fd22ccb 100644
--- a/libdrm/xf86drm.h
+++ b/libdrm/xf86drm.h
@@ -658,6 +658,4 @@ extern int drmSLLookupNeighbors(void *l, unsigned long key,
extern int drmOpenOnce(void *unused, const char *BusID, int *newlyopened);
extern void drmCloseOnce(int fd);
-#include "xf86mm.h"
-
#endif
commit c28c1cf756979cebb67ffd64bc29ba371f1a9c4b
Author: Dave Airlie <airlied@redhat.com>
Date: Wed May 28 15:08:08 2008 +1000
libdrm: make a branch for libdrm which drops all the TTM apis.
This will be the next release of libdrm as 2.3.1, Mesa needs to deal with this for 7.1.
diff --git a/libdrm/Makefile.am b/libdrm/Makefile.am
index e7e07e4..d7a2ea3 100644
--- a/libdrm/Makefile.am
+++ b/libdrm/Makefile.am
@@ -20,12 +20,13 @@
libdrm_la_LTLIBRARIES = libdrm.la
libdrm_ladir = $(libdir)
-libdrm_la_LDFLAGS = -version-number 2:3:0 -no-undefined
+libdrm_la_LDFLAGS = -version-number 2:3:1 -no-undefined
AM_CFLAGS = -I$(top_srcdir)/shared-core
libdrm_la_SOURCES = xf86drm.c xf86drmHash.c xf86drmRandom.c xf86drmSL.c
libdrmincludedir = ${includedir}
-libdrminclude_HEADERS = xf86drm.h xf86mm.h
+
+libdrminclude_HEADERS = xf86drm.h
EXTRA_DIST = ChangeLog TODO
diff --git a/libdrm/xf86drm.c b/libdrm/xf86drm.c
index 28f481f..d32fc6f 100644
--- a/libdrm/xf86drm.c
+++ b/libdrm/xf86drm.c
@@ -2337,579 +2337,6 @@ int drmCommandWriteRead(int fd, unsigned long drmCommandIndex, void *data,
return 0;
}
-
-/*
- * Valid flags are
- * DRM_FENCE_FLAG_EMIT
- * DRM_FENCE_FLAG_SHAREABLE
- * DRM_FENCE_MASK_DRIVER
- */
-
-int drmFenceCreate(int fd, unsigned flags, int fence_class, unsigned type,
- drmFence *fence)
-{
- drm_fence_arg_t arg;
-
- memset(&arg, 0, sizeof(arg));
- arg.flags = flags;
- arg.type = type;
- arg.fence_class = fence_class;
-
- if (ioctl(fd, DRM_IOCTL_FENCE_CREATE, &arg))
- return -errno;
- fence->handle = arg.handle;
- fence->fence_class = arg.fence_class;
- fence->type = arg.type;
- fence->flags = arg.flags;
- fence->signaled = 0;
- return 0;
-}
-
-/*
- * Valid flags are
- * DRM_FENCE_FLAG_SHAREABLE
- * DRM_FENCE_MASK_DRIVER
- */
-
-int drmFenceBuffers(int fd, unsigned flags, uint32_t fence_class, drmFence *fence)
-{
- drm_fence_arg_t arg;
-
- memset(&arg, 0, sizeof(arg));
- arg.flags = flags;
- arg.fence_class = fence_class;
-
- if (ioctl(fd, DRM_IOCTL_FENCE_BUFFERS, &arg))
- return -errno;
- fence->handle = arg.handle;
- fence->fence_class = arg.fence_class;
- fence->type = arg.type;
- fence->flags = arg.flags;
- fence->sequence = arg.sequence;
- fence->signaled = 0;
- return 0;
-}
-
-int drmFenceReference(int fd, unsigned handle, drmFence *fence)
-{
- drm_fence_arg_t arg;
-
- memset(&arg, 0, sizeof(arg));
- arg.handle = handle;
-
- if (ioctl(fd, DRM_IOCTL_FENCE_REFERENCE, &arg))
- return -errno;
- fence->handle = arg.handle;
- fence->fence_class = arg.fence_class;
- fence->type = arg.type;
- fence->flags = arg.flags;
- fence->signaled = arg.signaled;
- return 0;
-}
-
-int drmFenceUnreference(int fd, const drmFence *fence)
-{
- drm_fence_arg_t arg;
-
- memset(&arg, 0, sizeof(arg));
- arg.handle = fence->handle;
-
- if (ioctl(fd, DRM_IOCTL_FENCE_UNREFERENCE, &arg))
- return -errno;
- return 0;
-}
-
-int drmFenceFlush(int fd, drmFence *fence, unsigned flush_type)
-{
- drm_fence_arg_t arg;
-
- memset(&arg, 0, sizeof(arg));
- arg.handle = fence->handle;
- arg.type = flush_type;
-
- if (ioctl(fd, DRM_IOCTL_FENCE_FLUSH, &arg))
- return -errno;
- fence->fence_class = arg.fence_class;
- fence->type = arg.type;
- fence->signaled = arg.signaled;
- return arg.error;
-}
-
-int drmFenceUpdate(int fd, drmFence *fence)
-{
- drm_fence_arg_t arg;
-
- memset(&arg, 0, sizeof(arg));
- arg.handle = fence->handle;
-
- if (ioctl(fd, DRM_IOCTL_FENCE_SIGNALED, &arg))
- return -errno;
- fence->fence_class = arg.fence_class;
- fence->type = arg.type;
- fence->signaled = arg.signaled;
- return 0;
-}
-
-int drmFenceSignaled(int fd, drmFence *fence, unsigned fenceType,
- int *signaled)
-{
- if ((fence->flags & DRM_FENCE_FLAG_SHAREABLE) ||
- ((fenceType & fence->signaled) != fenceType)) {
- int ret = drmFenceFlush(fd, fence, fenceType);
- if (ret)
- return ret;
- }
-
- *signaled = ((fenceType & fence->signaled) == fenceType);
-
- return 0;
-}
-
-/*
- * Valid flags are
- * DRM_FENCE_FLAG_SHAREABLE
- * DRM_FENCE_MASK_DRIVER
- */
-
-
-int drmFenceEmit(int fd, unsigned flags, drmFence *fence, unsigned emit_type)
-{
- drm_fence_arg_t arg;
-
- memset(&arg, 0, sizeof(arg));
- arg.fence_class = fence->fence_class;
- arg.flags = flags;
- arg.handle = fence->handle;
- arg.type = emit_type;
-
- if (ioctl(fd, DRM_IOCTL_FENCE_EMIT, &arg))
- return -errno;
- fence->fence_class = arg.fence_class;
- fence->type = arg.type;
- fence->signaled = arg.signaled;
- fence->sequence = arg.sequence;
- return 0;
-}
-
-/*
- * Valid flags are
- * DRM_FENCE_FLAG_WAIT_LAZY
- * DRM_FENCE_FLAG_WAIT_IGNORE_SIGNALS
- */
-
-#define DRM_IOCTL_TIMEOUT_USEC 3000000UL
-
-static unsigned long
-drmTimeDiff(struct timeval *now, struct timeval *then)
-{
- uint64_t val;
-
- val = now->tv_sec - then->tv_sec;
- val *= 1000000LL;
- val += now->tv_usec;
- val -= then->tv_usec;
-
- return (unsigned long) val;
-}
-
-static int
-drmIoctlTimeout(int fd, unsigned long request, void *argp)
-{
- int haveThen = 0;
- struct timeval then, now;
- int ret;
-
- do {
- ret = ioctl(fd, request, argp);
- if (ret != 0 && errno == EAGAIN) {
- if (!haveThen) {
- gettimeofday(&then, NULL);
- haveThen = 1;
- }
- gettimeofday(&now, NULL);
- }
- } while (ret != 0 && errno == EAGAIN &&
- drmTimeDiff(&now, &then) < DRM_IOCTL_TIMEOUT_USEC);
-
- if (ret != 0)
- return ((errno == EAGAIN) ? -EBUSY : -errno);
-
- return 0;
-}
-
-
-
-
-int drmFenceWait(int fd, unsigned flags, drmFence *fence, unsigned flush_type)
-{
- drm_fence_arg_t arg;
- int ret;
-
- if (flush_type == 0) {
- flush_type = fence->type;
- }
-
- if (!(fence->flags & DRM_FENCE_FLAG_SHAREABLE)) {
- if ((flush_type & fence->signaled) == flush_type) {
- return 0;
- }
- }
-
- memset(&arg, 0, sizeof(arg));
- arg.handle = fence->handle;
- arg.type = flush_type;
- arg.flags = flags;
-
-
- ret = drmIoctlTimeout(fd, DRM_IOCTL_FENCE_WAIT, &arg);
- if (ret)
- return ret;
-
- fence->fence_class = arg.fence_class;
- fence->type = arg.type;
- fence->signaled = arg.signaled;
- return arg.error;
-}
-
-static void drmBOCopyReply(const struct drm_bo_info_rep *rep, drmBO *buf)
-{
- buf->handle = rep->handle;
- buf->flags = rep->flags;
- buf->size = rep->size;
- buf->offset = rep->offset;
- buf->mapHandle = rep->arg_handle;
- buf->proposedFlags = rep->proposed_flags;
- buf->start = rep->buffer_start;
- buf->fenceFlags = rep->fence_flags;
- buf->replyFlags = rep->rep_flags;
- buf->pageAlignment = rep->page_alignment;
- buf->tileInfo = rep->tile_info;
- buf->hwTileStride = rep->hw_tile_stride;
- buf->desiredTileStride = rep->desired_tile_stride;
-}
-
-
-
-int drmBOCreate(int fd, unsigned long size,
- unsigned pageAlignment, void *user_buffer,
- uint64_t flags,
- unsigned hint, drmBO *buf)
-{
- struct drm_bo_create_arg arg;
- struct drm_bo_create_req *req = &arg.d.req;
- struct drm_bo_info_rep *rep = &arg.d.rep;
- int ret;
-
- memset(buf, 0, sizeof(*buf));
- memset(&arg, 0, sizeof(arg));
- req->flags = flags;
- req->hint = hint;
- req->size = size;
- req->page_alignment = pageAlignment;
- req->buffer_start = (unsigned long) user_buffer;
-
- buf->virtual = NULL;
-
- ret = drmIoctlTimeout(fd, DRM_IOCTL_BO_CREATE, &arg);
- if (ret)
- return ret;
-
- drmBOCopyReply(rep, buf);
- buf->virtual = user_buffer;
- buf->mapCount = 0;
-
- return 0;
-}
-
-int drmBOReference(int fd, unsigned handle, drmBO *buf)
-{
- struct drm_bo_reference_info_arg arg;
- struct drm_bo_handle_arg *req = &arg.d.req;
- struct drm_bo_info_rep *rep = &arg.d.rep;
-
- memset(&arg, 0, sizeof(arg));
- req->handle = handle;
-
- if (ioctl(fd, DRM_IOCTL_BO_REFERENCE, &arg))
- return -errno;
-
- drmBOCopyReply(rep, buf);
- buf->mapVirtual = NULL;
- buf->mapCount = 0;
- buf->virtual = NULL;
-
- return 0;
-}
-
-int drmBOUnreference(int fd, drmBO *buf)
-{
- struct drm_bo_handle_arg arg;
-
- if (buf->mapVirtual && buf->mapHandle) {
- (void) munmap(buf->mapVirtual, buf->start + buf->size);
- buf->mapVirtual = NULL;
- buf->virtual = NULL;
- }
-
- memset(&arg, 0, sizeof(arg));
- arg.handle = buf->handle;
-
- if (ioctl(fd, DRM_IOCTL_BO_UNREFERENCE, &arg))
- return -errno;
-
- buf->handle = 0;
- return 0;
-}
-
-
-/*
- * Flags can be DRM_BO_FLAG_READ, DRM_BO_FLAG_WRITE or'ed together
- * Hint currently be DRM_BO_HINT_DONT_BLOCK, which makes the
- * call return an -EBUSY if it can' immediately honor the mapping request.
- */
-
-int drmBOMap(int fd, drmBO *buf, unsigned mapFlags, unsigned mapHint,
- void **address)
-{
- struct drm_bo_map_wait_idle_arg arg;
- struct drm_bo_info_req *req = &arg.d.req;
- struct drm_bo_info_rep *rep = &arg.d.rep;
- int ret = 0;
-
- /*
- * Make sure we have a virtual address of the buffer.
- */
-
- if (!buf->virtual) {
- drmAddress virtual;
- virtual = mmap(0, buf->size + buf->start,
- PROT_READ | PROT_WRITE, MAP_SHARED,
- fd, buf->mapHandle);
- if (virtual == MAP_FAILED) {
- ret = -errno;
- }
- if (ret)
- return ret;
- buf->mapVirtual = virtual;
- buf->virtual = ((char *) virtual) + buf->start;
- }
-
- memset(&arg, 0, sizeof(arg));
- req->handle = buf->handle;
- req->mask = mapFlags;
- req->hint = mapHint;
-
- /*
- * May hang if the buffer object is busy.
- * This IOCTL synchronizes the buffer.
- */
-
- ret = drmIoctlTimeout(fd, DRM_IOCTL_BO_MAP, &arg);
- if (ret)
- return ret;
-
- drmBOCopyReply(rep, buf);
- buf->mapFlags = mapFlags;
- ++buf->mapCount;
- *address = buf->virtual;
-
- return 0;
-}
-
-
-int drmBOUnmap(int fd, drmBO *buf)
-{
- struct drm_bo_handle_arg arg;
-
- memset(&arg, 0, sizeof(arg));
- arg.handle = buf->handle;
-
- if (ioctl(fd, DRM_IOCTL_BO_UNMAP, &arg)) {
- return -errno;
- }
- buf->mapCount--;
- return 0;
-}
-
-int drmBOSetStatus(int fd, drmBO *buf,
- uint64_t flags, uint64_t mask,
- unsigned int hint,
- unsigned int desired_tile_stride,
- unsigned int tile_info)
-{
-
- struct drm_bo_map_wait_idle_arg arg;
- struct drm_bo_info_req *req = &arg.d.req;
- struct drm_bo_info_rep *rep = &arg.d.rep;
- int ret = 0;
-
- memset(&arg, 0, sizeof(arg));
- req->mask = mask;
- req->flags = flags;
- req->handle = buf->handle;
- req->hint = hint;
- req->desired_tile_stride = desired_tile_stride;
- req->tile_info = tile_info;
-
- ret = drmIoctlTimeout(fd, DRM_IOCTL_BO_SETSTATUS, &arg);
- if (ret)
- return ret;
-
- drmBOCopyReply(rep, buf);
- return 0;
-}
-
-
-int drmBOInfo(int fd, drmBO *buf)
-{
- struct drm_bo_reference_info_arg arg;
- struct drm_bo_handle_arg *req = &arg.d.req;
- struct drm_bo_info_rep *rep = &arg.d.rep;
- int ret = 0;
-
- memset(&arg, 0, sizeof(arg));
- req->handle = buf->handle;
-
- ret = ioctl(fd, DRM_IOCTL_BO_INFO, &arg);
- if (ret)
- return -errno;
-
- drmBOCopyReply(rep, buf);
- return 0;
-}
-
-int drmBOWaitIdle(int fd, drmBO *buf, unsigned hint)
-{
- struct drm_bo_map_wait_idle_arg arg;
- struct drm_bo_info_req *req = &arg.d.req;
- struct drm_bo_info_rep *rep = &arg.d.rep;
- int ret = 0;
-
- if ((buf->flags & DRM_BO_FLAG_SHAREABLE) ||
- (buf->replyFlags & DRM_BO_REP_BUSY)) {
- memset(&arg, 0, sizeof(arg));
- req->handle = buf->handle;
- req->hint = hint;
-
- ret = drmIoctlTimeout(fd, DRM_IOCTL_BO_WAIT_IDLE, &arg);
- if (ret)
- return ret;
-
- drmBOCopyReply(rep, buf);
- }
- return 0;
-}
-
-int drmBOBusy(int fd, drmBO *buf, int *busy)
-{
- int ret = drmBOInfo(fd, buf);
-
- if (ret)
- return ret;
-
- *busy = (buf->replyFlags & DRM_BO_REP_BUSY);
- return 0;
-}
-
-int drmMMInit(int fd, unsigned long pOffset, unsigned long pSize,
- unsigned memType)
-{
- struct drm_mm_init_arg arg;
-
- memset(&arg, 0, sizeof(arg));
-
- arg.magic = DRM_BO_INIT_MAGIC;
- arg.major = DRM_BO_INIT_MAJOR;
- arg.minor = DRM_BO_INIT_MINOR;
- arg.p_offset = pOffset;
- arg.p_size = pSize;
- arg.mem_type = memType;
-
- if (ioctl(fd, DRM_IOCTL_MM_INIT, &arg))
- return -errno;
- return 0;
-}
-
-int drmMMTakedown(int fd, unsigned memType)
-{
- struct drm_mm_type_arg arg;
-
- memset(&arg, 0, sizeof(arg));
- arg.mem_type = memType;
-
- if (ioctl(fd, DRM_IOCTL_MM_TAKEDOWN, &arg))
- return -errno;
- return 0;
-}
-
-/*
- * If this function returns an error, and lockBM was set to 1,
- * the buffer manager is NOT locked.
- */
-
-int drmMMLock(int fd, unsigned memType, int lockBM, int ignoreNoEvict)
-{
- struct drm_mm_type_arg arg;
-
- memset(&arg, 0, sizeof(arg));
- arg.mem_type = memType;
- arg.lock_flags |= (lockBM) ? DRM_BO_LOCK_UNLOCK_BM : 0;
- arg.lock_flags |= (ignoreNoEvict) ? DRM_BO_LOCK_IGNORE_NO_EVICT : 0;
-
- return drmIoctlTimeout(fd, DRM_IOCTL_MM_LOCK, &arg);
-}
-
-int drmMMUnlock(int fd, unsigned memType, int unlockBM)
-{
- struct drm_mm_type_arg arg;
-
- memset(&arg, 0, sizeof(arg));
-
- arg.mem_type = memType;
- arg.lock_flags |= (unlockBM) ? DRM_BO_LOCK_UNLOCK_BM : 0;
-
- return drmIoctlTimeout(fd, DRM_IOCTL_MM_UNLOCK, &arg);
-}
-
-int drmMMInfo(int fd, unsigned memType, uint64_t *size)
-{
- struct drm_mm_info_arg arg;
-
- memset(&arg, 0, sizeof(arg));
Reply to: