.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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> 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)); -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]