diff options
author | George Sapountzis <gsap7@yahoo.gr> | 2006-08-28 05:44:37 +0300 |
---|---|---|
committer | George Sapountzis <gsap7@yahoo.gr> | 2006-10-02 22:47:19 +0300 |
commit | 25760c30d4aedb370423d0bb03c014cab47b5d4f (patch) | |
tree | e15b6729e4914af81446a4a0cfaf8f14dbd5523c /shared-core/mach64_dma.c | |
parent | eea150e776657faca7d5b76aca75a33dc74fbc9d (diff) |
Bug 6242: [mach64] Use private DMA buffers, part #2.
Factor out from mach64_dma_dispatch_vertex() the code to reclaim an unsed
buffer, in preperation for using it in mach64_dma_dispatch_blit() also.
Diffstat (limited to 'shared-core/mach64_dma.c')
-rw-r--r-- | shared-core/mach64_dma.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/shared-core/mach64_dma.c b/shared-core/mach64_dma.c index 3f4394c0..7cba8ade 100644 --- a/shared-core/mach64_dma.c +++ b/shared-core/mach64_dma.c @@ -1449,6 +1449,33 @@ drm_buf_t *mach64_freelist_get(drm_mach64_private_t * dev_priv) return entry->buf; } +int mach64_freelist_put(drm_mach64_private_t * dev_priv, drm_buf_t * copy_buf) +{ + struct list_head *ptr; + drm_mach64_freelist_t *entry; + +#if MACH64_EXTRA_CHECKING + list_for_each(ptr, &dev_priv->pending) { + entry = list_entry(ptr, drm_mach64_freelist_t, list); + if (copy_buf == entry->buf) { + DRM_ERROR("%s: Trying to release a pending buf\n", + __FUNCTION__); + return DRM_ERR(EFAULT); + } + } +#endif + ptr = dev_priv->placeholders.next; + entry = list_entry(ptr, drm_mach64_freelist_t, list); + copy_buf->pending = 0; + copy_buf->used = 0; + entry->buf = copy_buf; + entry->discard = 1; + list_del(ptr); + list_add_tail(ptr, &dev_priv->free_list); + + return 0; +} + /*@}*/ |