Commit | Line | Data |
---|---|---|
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 | ||
14 | struct ivpu_device; | |
15 | struct 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 | */ | |
25 | struct 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 | */ | |
45 | struct 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 | ||
56 | int ivpu_submit_ioctl(struct drm_device *dev, void *data, struct drm_file *file); | |
57 | ||
f1cc6ace | 58 | void ivpu_cmdq_release_all_locked(struct ivpu_file_priv *file_priv); |
cd727221 JL |
59 | void ivpu_cmdq_reset_all_contexts(struct ivpu_device *vdev); |
60 | ||
3b434a34 JL |
61 | void ivpu_job_done_consumer_init(struct ivpu_device *vdev); |
62 | void ivpu_job_done_consumer_fini(struct ivpu_device *vdev); | |
cd727221 JL |
63 | |
64 | void ivpu_jobs_abort_all(struct ivpu_device *vdev); | |
65 | ||
66 | #endif /* __IVPU_JOB_H__ */ |