mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-25 18:30:06 +00:00
![Jacek Lawrynowicz](/assets/img/avatar_default.png)
Remove job_done thread and replace it with generic callback based mechanism. Signed-off-by: Jacek Lawrynowicz <jacek.lawrynowicz@linux.intel.com> Reviewed-by: Jeffrey Hugo <quic_jhugo@quicinc.com> Link: https://patchwork.freedesktop.org/patch/msgid/20231113170252.758137-6-jacek.lawrynowicz@linux.intel.com
67 lines
2.1 KiB
C
67 lines
2.1 KiB
C
/* 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__ */
|