71 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/*3 * Copyright (C) 2020-2024 Intel Corporation4 */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 device20 * @mem: Memory allocated for the job queue, shared with device21 * @entry_count Number of job entries in the queue22 * @db_id: Doorbell assigned to this job queue23 * @db_registered: True if doorbell is registered in device24 */25struct ivpu_cmdq {26 struct vpu_job_queue *jobq;27 struct ivpu_bo *primary_preempt_buf;28 struct ivpu_bo *secondary_preempt_buf;29 struct ivpu_bo *mem;30 u32 entry_count;31 u32 db_id;32 bool db_registered;33};34 35/**36 * struct ivpu_job - KMD object that represents batchbuffer / DMA buffer.37 * Each batch / DMA buffer is a job to be submitted and executed by the VPU FW.38 * This is a unit of execution, and be tracked by the job_id for39 * any status reporting from VPU FW through IPC JOB RET/DONE message.40 * @file_priv: The client that submitted this job41 * @job_id: Job ID for KMD tracking and job status reporting from VPU FW42 * @status: Status of the Job from IPC JOB RET/DONE message43 * @batch_buffer: CPU vaddr points to the batch buffer memory allocated for the job44 * @submit_status_offset: Offset within batch buffer where job completion handler45 will update the job status46 */47struct ivpu_job {48 struct ivpu_device *vdev;49 struct ivpu_file_priv *file_priv;50 struct dma_fence *done_fence;51 u64 cmd_buf_vpu_addr;52 u32 job_id;53 u32 engine_idx;54 size_t bo_count;55 struct ivpu_bo *bos[] __counted_by(bo_count);56};57 58int ivpu_submit_ioctl(struct drm_device *dev, void *data, struct drm_file *file);59 60void ivpu_context_abort_locked(struct ivpu_file_priv *file_priv);61 62void ivpu_cmdq_release_all_locked(struct ivpu_file_priv *file_priv);63void ivpu_cmdq_reset_all_contexts(struct ivpu_device *vdev);64 65void ivpu_job_done_consumer_init(struct ivpu_device *vdev);66void ivpu_job_done_consumer_fini(struct ivpu_device *vdev);67 68void ivpu_jobs_abort_all(struct ivpu_device *vdev);69 70#endif /* __IVPU_JOB_H__ */71