linux/drivers/dma-buf/seqno-fence.c
<<
>>
Prefs
   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
  12#include <linux/slab.h>
  13#include <linux/export.h>
  14#include <linux/seqno-fence.h>
  15
  16static const char *seqno_fence_get_driver_name(struct dma_fence *fence)
  17{
  18        struct seqno_fence *seqno_fence = to_seqno_fence(fence);
  19
  20        return seqno_fence->ops->get_driver_name(fence);
  21}
  22
  23static const char *seqno_fence_get_timeline_name(struct dma_fence *fence)
  24{
  25        struct seqno_fence *seqno_fence = to_seqno_fence(fence);
  26
  27        return seqno_fence->ops->get_timeline_name(fence);
  28}
  29
  30static bool seqno_enable_signaling(struct dma_fence *fence)
  31{
  32        struct seqno_fence *seqno_fence = to_seqno_fence(fence);
  33
  34        return seqno_fence->ops->enable_signaling(fence);
  35}
  36
  37static bool seqno_signaled(struct dma_fence *fence)
  38{
  39        struct seqno_fence *seqno_fence = to_seqno_fence(fence);
  40
  41        return seqno_fence->ops->signaled && seqno_fence->ops->signaled(fence);
  42}
  43
  44static void seqno_release(struct dma_fence *fence)
  45{
  46        struct seqno_fence *f = to_seqno_fence(fence);
  47
  48        dma_buf_put(f->sync_buf);
  49        if (f->ops->release)
  50                f->ops->release(fence);
  51        else
  52                dma_fence_free(&f->base);
  53}
  54
  55static signed long seqno_wait(struct dma_fence *fence, bool intr,
  56                              signed long timeout)
  57{
  58        struct seqno_fence *f = to_seqno_fence(fence);
  59
  60        return f->ops->wait(fence, intr, timeout);
  61}
  62
  63const struct dma_fence_ops seqno_fence_ops = {
  64        .get_driver_name = seqno_fence_get_driver_name,
  65        .get_timeline_name = seqno_fence_get_timeline_name,
  66        .enable_signaling = seqno_enable_signaling,
  67        .signaled = seqno_signaled,
  68        .wait = seqno_wait,
  69        .release = seqno_release,
  70};
  71EXPORT_SYMBOL(seqno_fence_ops);
  72