xref: /OK3568_Linux_fs/kernel/drivers/video/rockchip/rve/include/rve_job.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Copyright (C) Rockchip Electronics Co., Ltd.
4  *
5  * Author: Huang Lee <Putin.li@rock-chips.com>
6  */
7 
8 #ifndef __LINUX_RKRVE_JOB_H_
9 #define __LINUX_RKRVE_JOB_H_
10 
11 #include <linux/spinlock.h>
12 #include <linux/dma-fence.h>
13 
14 #include "rve_drv.h"
15 
16 enum job_flags {
17 	RVE_JOB_DONE			= 1 << 0,
18 	RVE_ASYNC			= 1 << 1,
19 	RVE_SYNC			= 1 << 2,
20 	RVE_JOB_USE_HANDLE		= 1 << 3,
21 	RVE_JOB_UNSUPPORT_RVE2		= 1 << 4,
22 };
23 
24 struct rve_scheduler_t *rve_job_get_scheduler(struct rve_job *job);
25 struct rve_internal_ctx_t *rve_job_get_internal_ctx(struct rve_job *job);
26 
27 void rve_job_done(struct rve_scheduler_t *rve_scheduler, int ret);
28 int rve_job_commit(struct rve_internal_ctx_t *ctx);
29 
30 int rve_job_config_by_user_ctx(struct rve_user_ctx_t *user_ctx);
31 int rve_job_commit_by_user_ctx(struct rve_user_ctx_t *user_ctx);
32 int rve_job_cancel_by_user_ctx(uint32_t ctx_id);
33 
34 void rve_job_session_destroy(struct rve_session *session);
35 
36 int rve_ctx_manager_init(struct rve_pending_ctx_manager **ctx_manager_session);
37 int rve_ctx_manager_remove(struct rve_pending_ctx_manager **ctx_manager_session);
38 
39 int rve_internal_ctx_alloc_to_get_idr_id(struct rve_session *session);
40 void rve_internal_ctx_kref_release(struct kref *ref);
41 
42 int rve_internal_ctx_signal(struct rve_job *job);
43 
44 struct rve_internal_ctx_t *
45 rve_internal_ctx_lookup(struct rve_pending_ctx_manager *ctx_manager, uint32_t id);
46 
47 struct rve_job *
48 rve_scheduler_get_pending_job_list(struct rve_scheduler_t *scheduler);
49 
50 struct rve_job *
51 rve_scheduler_get_running_job(struct rve_scheduler_t *scheduler);
52 
53 #endif /* __LINUX_RKRVE_JOB_H_ */
54