Merge tag 'pinctrl-v6.9-2' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw...
[linux-block.git] / drivers / accel / ivpu / ivpu_job.h
CommitLineData
cd727221
JL
1/* SPDX-License-Identifier: GPL-2.0-only */
2/*
3 * Copyright (C) 2020-2023 Intel Corporation
4 */
5
6#ifndef __IVPU_JOB_H__
7#define __IVPU_JOB_H__
8
9#include <linux/kref.h>
10#include <linux/idr.h>
11
12#include "ivpu_gem.h"
13
14struct ivpu_device;
15struct ivpu_file_priv;
16
17/**
18 * struct ivpu_cmdq - Object representing device queue used to send jobs.
19 * @jobq: Pointer to job queue memory shared with the device
20 * @mem: Memory allocated for the job queue, shared with device
21 * @entry_count Number of job entries in the queue
22 * @db_id: Doorbell assigned to this job queue
23 * @db_registered: True if doorbell is registered in device
24 */
25struct ivpu_cmdq {
26 struct vpu_job_queue *jobq;
27 struct ivpu_bo *mem;
28 u32 entry_count;
29 u32 db_id;
30 bool db_registered;
31};
32
33/**
34 * struct ivpu_job - KMD object that represents batchbuffer / DMA buffer.
35 * Each batch / DMA buffer is a job to be submitted and executed by the VPU FW.
36 * This is a unit of execution, and be tracked by the job_id for
37 * any status reporting from VPU FW through IPC JOB RET/DONE message.
38 * @file_priv: The client that submitted this job
39 * @job_id: Job ID for KMD tracking and job status reporting from VPU FW
40 * @status: Status of the Job from IPC JOB RET/DONE message
41 * @batch_buffer: CPU vaddr points to the batch buffer memory allocated for the job
42 * @submit_status_offset: Offset within batch buffer where job completion handler
43 will update the job status
44 */
45struct ivpu_job {
cd727221
JL
46 struct ivpu_device *vdev;
47 struct ivpu_file_priv *file_priv;
48 struct dma_fence *done_fence;
49 u64 cmd_buf_vpu_addr;
50 u32 job_id;
51 u32 engine_idx;
52 size_t bo_count;
5e6a1c80 53 struct ivpu_bo *bos[] __counted_by(bo_count);
cd727221
JL
54};
55
56int ivpu_submit_ioctl(struct drm_device *dev, void *data, struct drm_file *file);
57
f1cc6ace 58void ivpu_cmdq_release_all_locked(struct ivpu_file_priv *file_priv);
cd727221
JL
59void ivpu_cmdq_reset_all_contexts(struct ivpu_device *vdev);
60
3b434a34
JL
61void ivpu_job_done_consumer_init(struct ivpu_device *vdev);
62void ivpu_job_done_consumer_fini(struct ivpu_device *vdev);
cd727221
JL
63
64void ivpu_jobs_abort_all(struct ivpu_device *vdev);
65
66#endif /* __IVPU_JOB_H__ */