1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 OR MIT */ 2*4882a593Smuzhiyun /* Copyright 2018-2019 Qiang Yu <yuq825@gmail.com> */ 3*4882a593Smuzhiyun 4*4882a593Smuzhiyun #ifndef __LIMA_CTX_H__ 5*4882a593Smuzhiyun #define __LIMA_CTX_H__ 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun #include <linux/xarray.h> 8*4882a593Smuzhiyun #include <linux/sched.h> 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun #include "lima_device.h" 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun struct lima_ctx { 13*4882a593Smuzhiyun struct kref refcnt; 14*4882a593Smuzhiyun struct lima_device *dev; 15*4882a593Smuzhiyun struct lima_sched_context context[lima_pipe_num]; 16*4882a593Smuzhiyun atomic_t guilty; 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun /* debug info */ 19*4882a593Smuzhiyun char pname[TASK_COMM_LEN]; 20*4882a593Smuzhiyun pid_t pid; 21*4882a593Smuzhiyun }; 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun struct lima_ctx_mgr { 24*4882a593Smuzhiyun struct mutex lock; 25*4882a593Smuzhiyun struct xarray handles; 26*4882a593Smuzhiyun }; 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun int lima_ctx_create(struct lima_device *dev, struct lima_ctx_mgr *mgr, u32 *id); 29*4882a593Smuzhiyun int lima_ctx_free(struct lima_ctx_mgr *mgr, u32 id); 30*4882a593Smuzhiyun struct lima_ctx *lima_ctx_get(struct lima_ctx_mgr *mgr, u32 id); 31*4882a593Smuzhiyun void lima_ctx_put(struct lima_ctx *ctx); 32*4882a593Smuzhiyun void lima_ctx_mgr_init(struct lima_ctx_mgr *mgr); 33*4882a593Smuzhiyun void lima_ctx_mgr_fini(struct lima_ctx_mgr *mgr); 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun #endif 36