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