linux/drivers/gpu/drm/panfrost/panfrost_job.h
<<
>>
Prefs
   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_file_priv *file_priv;
  21
  22        /* Optional fences userspace can pass in for the job to depend on. */
  23        struct dma_fence **in_fences;
  24        u32 in_fence_count;
  25
  26        /* Fence to be signaled by IRQ handler when the job is complete. */
  27        struct dma_fence *done_fence;
  28
  29        __u64 jc;
  30        __u32 requirements;
  31        __u32 flush_id;
  32
  33        /* Exclusive fences we have taken from the BOs to wait for */
  34        struct dma_fence **implicit_fences;
  35        struct panfrost_gem_mapping **mappings;
  36        struct drm_gem_object **bos;
  37        u32 bo_count;
  38
  39        /* Fence to be signaled by drm-sched once its done with the job */
  40        struct dma_fence *render_done_fence;
  41};
  42
  43int panfrost_job_init(struct panfrost_device *pfdev);
  44void panfrost_job_fini(struct panfrost_device *pfdev);
  45int panfrost_job_open(struct panfrost_file_priv *panfrost_priv);
  46void panfrost_job_close(struct panfrost_file_priv *panfrost_priv);
  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);
  50int panfrost_job_is_idle(struct panfrost_device *pfdev);
  51
  52#endif
  53