mirror of
https://github.com/Qortal/Brooklyn.git
synced 2025-02-07 06:44:18 +00:00
04c1822c0a
Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey!
110 lines
3.6 KiB
C
110 lines
3.6 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 Canonical Ltd
|
|
* Authors:
|
|
* Rob Clark <robdclark@gmail.com>
|
|
* Maarten Lankhorst <maarten.lankhorst@canonical.com>
|
|
*/
|
|
|
|
#ifndef __LINUX_SEQNO_FENCE_H
|
|
#define __LINUX_SEQNO_FENCE_H
|
|
|
|
#include <linux/dma-fence.h>
|
|
#include <linux/dma-buf.h>
|
|
|
|
enum seqno_fence_condition {
|
|
SEQNO_FENCE_WAIT_GEQUAL,
|
|
SEQNO_FENCE_WAIT_NONZERO
|
|
};
|
|
|
|
struct seqno_fence {
|
|
struct dma_fence base;
|
|
|
|
const struct dma_fence_ops *ops;
|
|
struct dma_buf *sync_buf;
|
|
uint32_t seqno_ofs;
|
|
enum seqno_fence_condition condition;
|
|
};
|
|
|
|
extern const struct dma_fence_ops seqno_fence_ops;
|
|
|
|
/**
|
|
* to_seqno_fence - cast a fence to a seqno_fence
|
|
* @fence: fence to cast to a seqno_fence
|
|
*
|
|
* Returns NULL if the fence is not a seqno_fence,
|
|
* or the seqno_fence otherwise.
|
|
*/
|
|
static inline struct seqno_fence *
|
|
to_seqno_fence(struct dma_fence *fence)
|
|
{
|
|
if (fence->ops != &seqno_fence_ops)
|
|
return NULL;
|
|
return container_of(fence, struct seqno_fence, base);
|
|
}
|
|
|
|
/**
|
|
* seqno_fence_init - initialize a seqno fence
|
|
* @fence: seqno_fence to initialize
|
|
* @lock: pointer to spinlock to use for fence
|
|
* @sync_buf: buffer containing the memory location to signal on
|
|
* @context: the execution context this fence is a part of
|
|
* @seqno_ofs: the offset within @sync_buf
|
|
* @seqno: the sequence # to signal on
|
|
* @cond: fence wait condition
|
|
* @ops: the fence_ops for operations on this seqno fence
|
|
*
|
|
* This function initializes a struct seqno_fence with passed parameters,
|
|
* and takes a reference on sync_buf which is released on fence destruction.
|
|
*
|
|
* A seqno_fence is a dma_fence which can complete in software when
|
|
* enable_signaling is called, but it also completes when
|
|
* (s32)((sync_buf)[seqno_ofs] - seqno) >= 0 is true
|
|
*
|
|
* The seqno_fence will take a refcount on the sync_buf until it's
|
|
* destroyed, but actual lifetime of sync_buf may be longer if one of the
|
|
* callers take a reference to it.
|
|
*
|
|
* Certain hardware have instructions to insert this type of wait condition
|
|
* in the command stream, so no intervention from software would be needed.
|
|
* This type of fence can be destroyed before completed, however a reference
|
|
* on the sync_buf dma-buf can be taken. It is encouraged to re-use the same
|
|
* dma-buf for sync_buf, since mapping or unmapping the sync_buf to the
|
|
* device's vm can be expensive.
|
|
*
|
|
* It is recommended for creators of seqno_fence to call dma_fence_signal()
|
|
* before destruction. This will prevent possible issues from wraparound at
|
|
* time of issue vs time of check, since users can check dma_fence_is_signaled()
|
|
* before submitting instructions for the hardware to wait on the fence.
|
|
* However, when ops.enable_signaling is not called, it doesn't have to be
|
|
* done as soon as possible, just before there's any real danger of seqno
|
|
* wraparound.
|
|
*/
|
|
static inline void
|
|
seqno_fence_init(struct seqno_fence *fence, spinlock_t *lock,
|
|
struct dma_buf *sync_buf, uint32_t context,
|
|
uint32_t seqno_ofs, uint32_t seqno,
|
|
enum seqno_fence_condition cond,
|
|
const struct dma_fence_ops *ops)
|
|
{
|
|
BUG_ON(!fence || !sync_buf || !ops);
|
|
BUG_ON(!ops->wait || !ops->enable_signaling ||
|
|
!ops->get_driver_name || !ops->get_timeline_name);
|
|
|
|
/*
|
|
* ops is used in dma_fence_init for get_driver_name, so needs to be
|
|
* initialized first
|
|
*/
|
|
fence->ops = ops;
|
|
dma_fence_init(&fence->base, &seqno_fence_ops, lock, context, seqno);
|
|
get_dma_buf(sync_buf);
|
|
fence->sync_buf = sync_buf;
|
|
fence->seqno_ofs = seqno_ofs;
|
|
fence->condition = cond;
|
|
}
|
|
|
|
#endif /* __LINUX_SEQNO_FENCE_H */
|