linux/drivers/gpu/drm/xe/xe_range_fence.h

/* SPDX-License-Identifier: MIT */
/*
 * Copyright © 2023 Intel Corporation
 */

#ifndef _XE_RANGE_FENCE_H_
#define _XE_RANGE_FENCE_H_

#include <linux/dma-fence.h>
#include <linux/rbtree.h>
#include <linux/types.h>

struct xe_range_fence_tree;
struct xe_range_fence;

/** struct xe_range_fence_ops - XE range fence ops */
struct xe_range_fence_ops {};

/** struct xe_range_fence - XE range fence (address conflict tracking) */
struct xe_range_fence {};

/** struct xe_range_fence_tree - interval tree to store range fences */
struct xe_range_fence_tree {};

extern const struct xe_range_fence_ops xe_range_fence_kfree_ops;

struct xe_range_fence *
xe_range_fence_tree_first(struct xe_range_fence_tree *tree, u64 start,
			  u64 last);

struct xe_range_fence *
xe_range_fence_tree_next(struct xe_range_fence *rfence, u64 start, u64 last);

void xe_range_fence_tree_init(struct xe_range_fence_tree *tree);

void xe_range_fence_tree_fini(struct xe_range_fence_tree *tree);

int xe_range_fence_insert(struct xe_range_fence_tree *tree,
			  struct xe_range_fence *rfence,
			  const struct xe_range_fence_ops *ops,
			  u64 start, u64 end,
			  struct dma_fence *fence);

#endif