mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-14 15:54:15 +08:00
1802d0beec
Based on 1 normalized pattern(s): this program is free software you can redistribute it and or modify it under the terms of the gnu general public license version 2 as published by the free software foundation this program is distributed in the hope that it will be useful but without any warranty without even the implied warranty of merchantability or fitness for a particular purpose see the gnu general public license for more details extracted by the scancode license scanner the SPDX license identifier GPL-2.0-only has been chosen to replace the boilerplate/reference in 655 file(s). Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Allison Randal <allison@lohutok.net> Reviewed-by: Kate Stewart <kstewart@linuxfoundation.org> Reviewed-by: Richard Fontana <rfontana@redhat.com> Cc: linux-spdx@vger.kernel.org Link: https://lkml.kernel.org/r/20190527070034.575739538@linutronix.de Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
72 lines
1.8 KiB
C
72 lines
1.8 KiB
C
// SPDX-License-Identifier: GPL-2.0-only
|
|
/*
|
|
* seqno-fence, using a dma-buf to synchronize fencing
|
|
*
|
|
* Copyright (C) 2012 Texas Instruments
|
|
* Copyright (C) 2012-2014 Canonical Ltd
|
|
* Authors:
|
|
* Rob Clark <robdclark@gmail.com>
|
|
* Maarten Lankhorst <maarten.lankhorst@canonical.com>
|
|
*/
|
|
|
|
#include <linux/slab.h>
|
|
#include <linux/export.h>
|
|
#include <linux/seqno-fence.h>
|
|
|
|
static const char *seqno_fence_get_driver_name(struct dma_fence *fence)
|
|
{
|
|
struct seqno_fence *seqno_fence = to_seqno_fence(fence);
|
|
|
|
return seqno_fence->ops->get_driver_name(fence);
|
|
}
|
|
|
|
static const char *seqno_fence_get_timeline_name(struct dma_fence *fence)
|
|
{
|
|
struct seqno_fence *seqno_fence = to_seqno_fence(fence);
|
|
|
|
return seqno_fence->ops->get_timeline_name(fence);
|
|
}
|
|
|
|
static bool seqno_enable_signaling(struct dma_fence *fence)
|
|
{
|
|
struct seqno_fence *seqno_fence = to_seqno_fence(fence);
|
|
|
|
return seqno_fence->ops->enable_signaling(fence);
|
|
}
|
|
|
|
static bool seqno_signaled(struct dma_fence *fence)
|
|
{
|
|
struct seqno_fence *seqno_fence = to_seqno_fence(fence);
|
|
|
|
return seqno_fence->ops->signaled && seqno_fence->ops->signaled(fence);
|
|
}
|
|
|
|
static void seqno_release(struct dma_fence *fence)
|
|
{
|
|
struct seqno_fence *f = to_seqno_fence(fence);
|
|
|
|
dma_buf_put(f->sync_buf);
|
|
if (f->ops->release)
|
|
f->ops->release(fence);
|
|
else
|
|
dma_fence_free(&f->base);
|
|
}
|
|
|
|
static signed long seqno_wait(struct dma_fence *fence, bool intr,
|
|
signed long timeout)
|
|
{
|
|
struct seqno_fence *f = to_seqno_fence(fence);
|
|
|
|
return f->ops->wait(fence, intr, timeout);
|
|
}
|
|
|
|
const struct dma_fence_ops seqno_fence_ops = {
|
|
.get_driver_name = seqno_fence_get_driver_name,
|
|
.get_timeline_name = seqno_fence_get_timeline_name,
|
|
.enable_signaling = seqno_enable_signaling,
|
|
.signaled = seqno_signaled,
|
|
.wait = seqno_wait,
|
|
.release = seqno_release,
|
|
};
|
|
EXPORT_SYMBOL(seqno_fence_ops);
|