| /* SPDX-License-Identifier: GPL-2.0-only */ |
| /* |
| * Copyright (C) 2020-2023 Intel Corporation |
| */ |
| |
| #ifndef __IVPU_JOB_H__ |
| #define __IVPU_JOB_H__ |
| |
| #include <linux/kref.h> |
| #include <linux/idr.h> |
| |
| #include "ivpu_gem.h" |
| |
| struct ivpu_device; |
| struct ivpu_file_priv; |
| |
| /** |
| * struct ivpu_cmdq - Object representing device queue used to send jobs. |
| * @jobq: Pointer to job queue memory shared with the device |
| * @mem: Memory allocated for the job queue, shared with device |
| * @entry_count Number of job entries in the queue |
| * @db_id: Doorbell assigned to this job queue |
| * @db_registered: True if doorbell is registered in device |
| */ |
| struct ivpu_cmdq { |
| struct vpu_job_queue *jobq; |
| struct ivpu_bo *mem; |
| u32 entry_count; |
| u32 db_id; |
| bool db_registered; |
| }; |
| |
| /** |
| * struct ivpu_job - KMD object that represents batchbuffer / DMA buffer. |
| * Each batch / DMA buffer is a job to be submitted and executed by the VPU FW. |
| * This is a unit of execution, and be tracked by the job_id for |
| * any status reporting from VPU FW through IPC JOB RET/DONE message. |
| * @file_priv: The client that submitted this job |
| * @job_id: Job ID for KMD tracking and job status reporting from VPU FW |
| * @status: Status of the Job from IPC JOB RET/DONE message |
| * @batch_buffer: CPU vaddr points to the batch buffer memory allocated for the job |
| * @submit_status_offset: Offset within batch buffer where job completion handler |
| will update the job status |
| */ |
| struct ivpu_job { |
| struct kref ref; |
| struct ivpu_device *vdev; |
| struct ivpu_file_priv *file_priv; |
| struct dma_fence *done_fence; |
| u64 cmd_buf_vpu_addr; |
| u32 job_id; |
| u32 engine_idx; |
| size_t bo_count; |
| struct ivpu_bo *bos[] __counted_by(bo_count); |
| }; |
| |
| int ivpu_submit_ioctl(struct drm_device *dev, void *data, struct drm_file *file); |
| |
| void ivpu_cmdq_release_all(struct ivpu_file_priv *file_priv); |
| void ivpu_cmdq_reset_all_contexts(struct ivpu_device *vdev); |
| |
| void ivpu_job_done_consumer_init(struct ivpu_device *vdev); |
| void ivpu_job_done_consumer_fini(struct ivpu_device *vdev); |
| |
| void ivpu_jobs_abort_all(struct ivpu_device *vdev); |
| |
| #endif /* __IVPU_JOB_H__ */ |