54 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2/* Copyright 2019 Collabora ltd. */3 4#ifndef __PANFROST_JOB_H__5#define __PANFROST_JOB_H__6 7#include <uapi/drm/panfrost_drm.h>8#include <drm/gpu_scheduler.h>9 10struct panfrost_device;11struct panfrost_gem_object;12struct panfrost_file_priv;13 14struct panfrost_job {15 struct drm_sched_job base;16 17 struct kref refcount;18 19 struct panfrost_device *pfdev;20 struct panfrost_mmu *mmu;21 22 /* Fence to be signaled by IRQ handler when the job is complete. */23 struct dma_fence *done_fence;24 25 __u64 jc;26 __u32 requirements;27 __u32 flush_id;28 29 struct panfrost_gem_mapping **mappings;30 struct drm_gem_object **bos;31 u32 bo_count;32 33 /* Fence to be signaled by drm-sched once its done with the job */34 struct dma_fence *render_done_fence;35 36 struct panfrost_engine_usage *engine_usage;37 bool is_profiled;38 ktime_t start_time;39 u64 start_cycles;40};41 42int panfrost_job_init(struct panfrost_device *pfdev);43void panfrost_job_fini(struct panfrost_device *pfdev);44int panfrost_job_open(struct panfrost_file_priv *panfrost_priv);45void panfrost_job_close(struct panfrost_file_priv *panfrost_priv);46int panfrost_job_get_slot(struct panfrost_job *job);47int panfrost_job_push(struct panfrost_job *job);48void panfrost_job_put(struct panfrost_job *job);49void panfrost_job_enable_interrupts(struct panfrost_device *pfdev);50void panfrost_job_suspend_irq(struct panfrost_device *pfdev);51int panfrost_job_is_idle(struct panfrost_device *pfdev);52 53#endif54