FILE
panfrost_job.h
File preview with syntax highlighting.
linux-6.19.14/drivers/gpu/drm/panfrost/panfrost_job.h
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 struct panfrost_jm_ctx *ctx; 22 23 /* Fence to be signaled by IRQ handler when the job is complete. */ 24 struct dma_fence *done_fence; 25 26 __u64 jc; 27 __u32 requirements; 28 __u32 flush_id; 29 30 struct panfrost_gem_mapping **mappings; 31 struct drm_gem_object **bos; 32 u32 bo_count; 33 34 /* Fence to be signaled by drm-sched once its done with the job */ 35 struct dma_fence *render_done_fence; 36 37 struct panfrost_engine_usage *engine_usage; 38 bool is_profiled; 39 ktime_t start_time; 40 u64 start_cycles; 41}; 42 43struct panfrost_js_ctx { 44 struct drm_sched_entity sched_entity; 45 bool enabled; 46}; 47 48#define NUM_JOB_SLOTS 3 49 50struct panfrost_jm_ctx { 51 struct kref refcnt; 52 bool destroyed; 53 struct drm_sched_entity slot_entity[NUM_JOB_SLOTS]; 54}; 55 56extern const char * const panfrost_engine_names[]; 57 58int panfrost_jm_ctx_create(struct drm_file *file, 59 struct drm_panfrost_jm_ctx_create *args); 60int panfrost_jm_ctx_destroy(struct drm_file *file, u32 handle); 61void panfrost_jm_ctx_put(struct panfrost_jm_ctx *jm_ctx); 62struct panfrost_jm_ctx *panfrost_jm_ctx_get(struct panfrost_jm_ctx *jm_ctx); 63struct panfrost_jm_ctx *panfrost_jm_ctx_from_handle(struct drm_file *file, u32 handle); 64 65int panfrost_jm_init(struct panfrost_device *pfdev); 66void panfrost_jm_fini(struct panfrost_device *pfdev); 67int panfrost_jm_open(struct drm_file *file); 68void panfrost_jm_close(struct drm_file *file); 69void panfrost_jm_reset_interrupts(struct panfrost_device *pfdev); 70void panfrost_jm_enable_interrupts(struct panfrost_device *pfdev); 71void panfrost_jm_suspend_irq(struct panfrost_device *pfdev); 72int panfrost_jm_is_idle(struct panfrost_device *pfdev); 73int panfrost_job_get_slot(struct panfrost_job *job); 74int panfrost_job_push(struct panfrost_job *job); 75void panfrost_job_put(struct panfrost_job *job); 76 77#endif
~/
Read-only file preview.