seqno-fence.c 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * seqno-fence, using a dma-buf to synchronize fencing
  4. *
  5. * Copyright (C) 2012 Texas Instruments
  6. * Copyright (C) 2012-2014 Canonical Ltd
  7. * Authors:
  8. * Rob Clark <robdclark@gmail.com>
  9. * Maarten Lankhorst <maarten.lankhorst@canonical.com>
  10. */
  11. #include <linux/slab.h>
  12. #include <linux/export.h>
  13. #include <linux/seqno-fence.h>
  14. static const char *seqno_fence_get_driver_name(struct dma_fence *fence)
  15. {
  16. struct seqno_fence *seqno_fence = to_seqno_fence(fence);
  17. return seqno_fence->ops->get_driver_name(fence);
  18. }
  19. static const char *seqno_fence_get_timeline_name(struct dma_fence *fence)
  20. {
  21. struct seqno_fence *seqno_fence = to_seqno_fence(fence);
  22. return seqno_fence->ops->get_timeline_name(fence);
  23. }
  24. static bool seqno_enable_signaling(struct dma_fence *fence)
  25. {
  26. struct seqno_fence *seqno_fence = to_seqno_fence(fence);
  27. return seqno_fence->ops->enable_signaling(fence);
  28. }
  29. static bool seqno_signaled(struct dma_fence *fence)
  30. {
  31. struct seqno_fence *seqno_fence = to_seqno_fence(fence);
  32. return seqno_fence->ops->signaled && seqno_fence->ops->signaled(fence);
  33. }
  34. static void seqno_release(struct dma_fence *fence)
  35. {
  36. struct seqno_fence *f = to_seqno_fence(fence);
  37. dma_buf_put(f->sync_buf);
  38. if (f->ops->release)
  39. f->ops->release(fence);
  40. else
  41. dma_fence_free(&f->base);
  42. }
  43. static signed long seqno_wait(struct dma_fence *fence, bool intr,
  44. signed long timeout)
  45. {
  46. struct seqno_fence *f = to_seqno_fence(fence);
  47. return f->ops->wait(fence, intr, timeout);
  48. }
  49. const struct dma_fence_ops seqno_fence_ops = {
  50. .get_driver_name = seqno_fence_get_driver_name,
  51. .get_timeline_name = seqno_fence_get_timeline_name,
  52. .enable_signaling = seqno_enable_signaling,
  53. .signaled = seqno_signaled,
  54. .wait = seqno_wait,
  55. .release = seqno_release,
  56. };
  57. EXPORT_SYMBOL(seqno_fence_ops);