Add 'qcom/opensource/graphics-kernel/' from commit 'b4fdc4c04295ac59109ae19d64747522740c3f14'
git-subtree-dir: qcom/opensource/graphics-kernel git-subtree-mainline:992813d9c1
git-subtree-split:b4fdc4c042
Change-Id: repo: https://git.codelinaro.org/clo/la/platform/vendor/qcom/opensource/graphics-kernel tag: GRAPHICS.LA.14.0.r1-07700-lanai.0
This commit is contained in:
208
qcom/opensource/graphics-kernel/kgsl_sync.h
Normal file
208
qcom/opensource/graphics-kernel/kgsl_sync.h
Normal file
@@ -0,0 +1,208 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
/*
|
||||
* Copyright (c) 2012-2014,2018-2019, 2021, The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022-2023, Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
#ifndef __KGSL_SYNC_H
|
||||
#define __KGSL_SYNC_H
|
||||
|
||||
#include <linux/dma-fence.h>
|
||||
|
||||
/**
|
||||
* struct kgsl_sync_timeline - A sync timeline associated with a kgsl context
|
||||
* @kref: Refcount to keep the struct alive until all its fences are signaled,
|
||||
and as long as the context exists
|
||||
* @name: String to describe this timeline
|
||||
* @fence_context: Used by the fence driver to identify fences belonging to
|
||||
* this context
|
||||
* @child_list_head: List head for all fences on this timeline
|
||||
* @lock: Spinlock to protect this timeline
|
||||
* @last_timestamp: Last timestamp when signaling fences
|
||||
* @device: kgsl device
|
||||
* @context: kgsl context
|
||||
*/
|
||||
struct kgsl_sync_timeline {
|
||||
struct kref kref;
|
||||
char name[32];
|
||||
|
||||
u64 fence_context;
|
||||
|
||||
struct list_head child_list_head;
|
||||
|
||||
spinlock_t lock;
|
||||
unsigned int last_timestamp;
|
||||
struct kgsl_device *device;
|
||||
struct kgsl_context *context;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct kgsl_sync_fence - A struct containing a fence and other data
|
||||
* associated with it
|
||||
* @fence: The fence struct
|
||||
* @sync_file: Pointer to the sync file
|
||||
* @parent: Pointer to the kgsl sync timeline this fence is on
|
||||
* @child_list: List of fences on the same timeline
|
||||
* @context_id: kgsl context id
|
||||
* @timestamp: Context timestamp that this fence is associated with
|
||||
*/
|
||||
struct kgsl_sync_fence {
|
||||
struct dma_fence fence;
|
||||
struct sync_file *sync_file;
|
||||
struct kgsl_sync_timeline *parent;
|
||||
struct list_head child_list;
|
||||
u32 context_id;
|
||||
unsigned int timestamp;
|
||||
/** @hw_fence_index: Index of hw fence in hw fence table */
|
||||
u64 hw_fence_index;
|
||||
/** @hw_fence_handle: Handle to the hw fence client */
|
||||
void *hw_fence_handle;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct kgsl_sync_fence_cb - Used for fence callbacks
|
||||
* fence_cb: Fence callback struct
|
||||
* fence: Pointer to the fence for which the callback is done
|
||||
* priv: Private data for the callback
|
||||
* func: Pointer to the kgsl function to call. This function should return
|
||||
* false if the sync callback is marked for cancellation in a separate thread.
|
||||
*/
|
||||
struct kgsl_sync_fence_cb {
|
||||
struct dma_fence_cb fence_cb;
|
||||
struct dma_fence *fence;
|
||||
void *priv;
|
||||
bool (*func)(void *priv);
|
||||
};
|
||||
|
||||
struct kgsl_device_private;
|
||||
struct kgsl_drawobj_sync_event;
|
||||
struct event_fence_info;
|
||||
struct kgsl_process_private;
|
||||
struct kgsl_syncsource;
|
||||
|
||||
#if defined(CONFIG_SYNC_FILE)
|
||||
int kgsl_add_fence_event(struct kgsl_device *device,
|
||||
u32 context_id, u32 timestamp, void __user *data, int len,
|
||||
struct kgsl_device_private *owner);
|
||||
|
||||
int kgsl_sync_timeline_create(struct kgsl_context *context);
|
||||
|
||||
void kgsl_sync_timeline_detach(struct kgsl_sync_timeline *ktimeline);
|
||||
|
||||
void kgsl_sync_timeline_put(struct kgsl_sync_timeline *ktimeline);
|
||||
|
||||
struct kgsl_sync_fence_cb *kgsl_sync_fence_async_wait(int fd, bool (*func)(void *priv), void *priv);
|
||||
|
||||
void kgsl_get_fence_info(struct kgsl_drawobj_sync_event *event);
|
||||
|
||||
void kgsl_sync_fence_async_cancel(struct kgsl_sync_fence_cb *kcb);
|
||||
|
||||
long kgsl_ioctl_syncsource_create(struct kgsl_device_private *dev_priv,
|
||||
unsigned int cmd, void *data);
|
||||
long kgsl_ioctl_syncsource_destroy(struct kgsl_device_private *dev_priv,
|
||||
unsigned int cmd, void *data);
|
||||
long kgsl_ioctl_syncsource_create_fence(struct kgsl_device_private *dev_priv,
|
||||
unsigned int cmd, void *data);
|
||||
long kgsl_ioctl_syncsource_signal_fence(struct kgsl_device_private *dev_priv,
|
||||
unsigned int cmd, void *data);
|
||||
|
||||
void kgsl_syncsource_put(struct kgsl_syncsource *syncsource);
|
||||
|
||||
void kgsl_syncsource_process_release_syncsources(
|
||||
struct kgsl_process_private *private);
|
||||
|
||||
bool is_kgsl_fence(struct dma_fence *f);
|
||||
|
||||
void kgsl_sync_timeline_signal(struct kgsl_sync_timeline *ktimeline,
|
||||
u32 timestamp);
|
||||
|
||||
#else
|
||||
static inline int kgsl_add_fence_event(struct kgsl_device *device,
|
||||
u32 context_id, u32 timestamp, void __user *data, int len,
|
||||
struct kgsl_device_private *owner)
|
||||
{
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static inline int kgsl_sync_timeline_create(struct kgsl_context *context)
|
||||
{
|
||||
context->ktimeline = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void kgsl_sync_timeline_detach(struct kgsl_sync_timeline *ktimeline)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void kgsl_sync_timeline_put(struct kgsl_sync_timeline *ktimeline)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
static inline void kgsl_get_fence_info(struct kgsl_drawobj_sync_event *event)
|
||||
{
|
||||
}
|
||||
|
||||
static inline struct kgsl_sync_fence_cb *kgsl_sync_fence_async_wait(int fd,
|
||||
bool (*func)(void *priv), void *priv);
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline void
|
||||
kgsl_sync_fence_async_cancel(struct kgsl_sync_fence_cb *kcb)
|
||||
{
|
||||
}
|
||||
|
||||
static inline long
|
||||
kgsl_ioctl_syncsource_create(struct kgsl_device_private *dev_priv,
|
||||
unsigned int cmd, void *data)
|
||||
{
|
||||
return -ENOIOCTLCMD;
|
||||
}
|
||||
|
||||
static inline long
|
||||
kgsl_ioctl_syncsource_destroy(struct kgsl_device_private *dev_priv,
|
||||
unsigned int cmd, void *data)
|
||||
{
|
||||
return -ENOIOCTLCMD;
|
||||
}
|
||||
|
||||
static inline long
|
||||
kgsl_ioctl_syncsource_create_fence(struct kgsl_device_private *dev_priv,
|
||||
unsigned int cmd, void *data)
|
||||
{
|
||||
return -ENOIOCTLCMD;
|
||||
}
|
||||
|
||||
static inline long
|
||||
kgsl_ioctl_syncsource_signal_fence(struct kgsl_device_private *dev_priv,
|
||||
unsigned int cmd, void *data)
|
||||
{
|
||||
return -ENOIOCTLCMD;
|
||||
}
|
||||
|
||||
static inline void kgsl_syncsource_put(struct kgsl_syncsource *syncsource)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
static inline void kgsl_syncsource_process_release_syncsources(
|
||||
struct kgsl_process_private *private)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
bool is_kgsl_fence(struct dma_fence *f)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void kgsl_sync_timeline_signal(struct kgsl_sync_timeline *ktimeline,
|
||||
u32 timestamp)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
#endif /* CONFIG_SYNC_FILE */
|
||||
|
||||
#endif /* __KGSL_SYNC_H */
|
Reference in New Issue
Block a user