162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 OR MIT */
262306a36Sopenharmony_ci/* Copyright 2018-2019 Qiang Yu <yuq825@gmail.com> */
362306a36Sopenharmony_ci
462306a36Sopenharmony_ci#ifndef __LIMA_CTX_H__
562306a36Sopenharmony_ci#define __LIMA_CTX_H__
662306a36Sopenharmony_ci
762306a36Sopenharmony_ci#include <linux/xarray.h>
862306a36Sopenharmony_ci#include <linux/sched.h>
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci#include "lima_device.h"
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_cistruct lima_ctx {
1362306a36Sopenharmony_ci	struct kref refcnt;
1462306a36Sopenharmony_ci	struct lima_device *dev;
1562306a36Sopenharmony_ci	struct lima_sched_context context[lima_pipe_num];
1662306a36Sopenharmony_ci	atomic_t guilty;
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ci	/* debug info */
1962306a36Sopenharmony_ci	char pname[TASK_COMM_LEN];
2062306a36Sopenharmony_ci	pid_t pid;
2162306a36Sopenharmony_ci};
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_cistruct lima_ctx_mgr {
2462306a36Sopenharmony_ci	struct mutex lock;
2562306a36Sopenharmony_ci	struct xarray handles;
2662306a36Sopenharmony_ci};
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ciint lima_ctx_create(struct lima_device *dev, struct lima_ctx_mgr *mgr, u32 *id);
2962306a36Sopenharmony_ciint lima_ctx_free(struct lima_ctx_mgr *mgr, u32 id);
3062306a36Sopenharmony_cistruct lima_ctx *lima_ctx_get(struct lima_ctx_mgr *mgr, u32 id);
3162306a36Sopenharmony_civoid lima_ctx_put(struct lima_ctx *ctx);
3262306a36Sopenharmony_civoid lima_ctx_mgr_init(struct lima_ctx_mgr *mgr);
3362306a36Sopenharmony_civoid lima_ctx_mgr_fini(struct lima_ctx_mgr *mgr);
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ci#endif
36