Something went wrong. Try again.
(I'm so sorry!) Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166/* SPDX-License-Identifier: MIT *//* * Copyright © 2021 Intel Corporation */
#ifndef _XE_EXEC_QUEUE_H_#define _XE_EXEC_QUEUE_H_
#include "xe_exec_queue_types.h"#include "xe_vm_types.h"
struct drm_device;struct drm_file;struct xe_device;struct xe_file;
#define for_each_tlb_inval(__q, __i) \ for (__i = 0; __i < XE_EXEC_QUEUE_TLB_INVAL_COUNT; ++__i) \ for_each_if((__q)->tlb_inval[__i].dep_scheduler)
struct xe_exec_queue *xe_exec_queue_create(struct xe_device *xe, struct xe_vm *vm, u32 logical_mask, u16 width, struct xe_hw_engine *hw_engine, u32 flags, u64 extensions);struct xe_exec_queue *xe_exec_queue_create_class(struct xe_device *xe, struct xe_gt *gt, struct xe_vm *vm, enum xe_engine_class class, u32 flags, u64 extensions);struct xe_exec_queue *xe_exec_queue_create_bind(struct xe_device *xe, struct xe_tile *tile, struct xe_vm *user_vm, u32 flags, u64 extensions);
void xe_exec_queue_fini(struct xe_exec_queue *q);void xe_exec_queue_destroy(struct kref *ref);void xe_exec_queue_assign_name(struct xe_exec_queue *q, u32 instance);
static inline struct xe_exec_queue *xe_exec_queue_get_unless_zero(struct xe_exec_queue *q){ if (kref_get_unless_zero(&q->refcount)) return q;
return NULL;}
struct xe_exec_queue *xe_exec_queue_lookup(struct xe_file *xef, u32 id);
static inline struct xe_exec_queue *xe_exec_queue_get(struct xe_exec_queue *q){ kref_get(&q->refcount); return q;}
static inline void xe_exec_queue_put(struct xe_exec_queue *q){ kref_put(&q->refcount, xe_exec_queue_destroy);}
static inline bool xe_exec_queue_is_parallel(struct xe_exec_queue *q){ return q->width > 1;}
static inline bool xe_exec_queue_uses_pxp(struct xe_exec_queue *q){ return q->pxp.type;}
/** * xe_exec_queue_is_multi_queue() - Whether an exec_queue is part of a queue group. * @q: The exec_queue * * Return: True if the exec_queue is part of a queue group, false otherwise. */static inline bool xe_exec_queue_is_multi_queue(struct xe_exec_queue *q){ return q->multi_queue.valid;}
/** * xe_exec_queue_is_multi_queue_primary() - Whether an exec_queue is primary queue * of a multi queue group. * @q: The exec_queue * * Return: True if @q is primary queue of a queue group, false otherwise. */static inline bool xe_exec_queue_is_multi_queue_primary(struct xe_exec_queue *q){ return q->multi_queue.is_primary;}
/** * xe_exec_queue_is_multi_queue_secondary() - Whether an exec_queue is secondary queue * of a multi queue group. * @q: The exec_queue * * Return: True if @q is secondary queue of a queue group, false otherwise. */static inline bool xe_exec_queue_is_multi_queue_secondary(struct xe_exec_queue *q){ return xe_exec_queue_is_multi_queue(q) && !xe_exec_queue_is_multi_queue_primary(q);}
/** * xe_exec_queue_multi_queue_primary() - Get multi queue group's primary queue * @q: The exec_queue * * If @q belongs to a multi queue group, then the primary queue of the group will * be returned. Otherwise, @q will be returned. */static inline struct xe_exec_queue *xe_exec_queue_multi_queue_primary(struct xe_exec_queue *q){ return xe_exec_queue_is_multi_queue(q) ? q->multi_queue.group->primary : q;}
bool xe_exec_queue_is_lr(struct xe_exec_queue *q);
bool xe_exec_queue_is_idle(struct xe_exec_queue *q, int extra_jobs);
void xe_exec_queue_kill(struct xe_exec_queue *q);
int xe_exec_queue_create_ioctl(struct drm_device *dev, void *data, struct drm_file *file);int xe_exec_queue_destroy_ioctl(struct drm_device *dev, void *data, struct drm_file *file);int xe_exec_queue_get_property_ioctl(struct drm_device *dev, void *data, struct drm_file *file);int xe_exec_queue_set_property_ioctl(struct drm_device *dev, void *data, struct drm_file *file);enum xe_exec_queue_priority xe_exec_queue_device_get_max_priority(struct xe_device *xe);
void xe_exec_queue_last_fence_put(struct xe_exec_queue *e, struct xe_vm *vm);void xe_exec_queue_last_fence_put_unlocked(struct xe_exec_queue *e);struct dma_fence *xe_exec_queue_last_fence_get(struct xe_exec_queue *e, struct xe_vm *vm);struct dma_fence *xe_exec_queue_last_fence_get_for_resume(struct xe_exec_queue *e, struct xe_vm *vm);void xe_exec_queue_last_fence_set(struct xe_exec_queue *e, struct xe_vm *vm, struct dma_fence *fence);
void xe_exec_queue_tlb_inval_last_fence_put(struct xe_exec_queue *q, struct xe_vm *vm, unsigned int idx);
void xe_exec_queue_tlb_inval_last_fence_put_unlocked(struct xe_exec_queue *q, unsigned int idx);
struct dma_fence *xe_exec_queue_tlb_inval_last_fence_get(struct xe_exec_queue *q, struct xe_vm *vm, unsigned int idx);
void xe_exec_queue_tlb_inval_last_fence_set(struct xe_exec_queue *q, struct xe_vm *vm, struct dma_fence *fence, unsigned int idx);
void xe_exec_queue_update_run_ticks(struct xe_exec_queue *q);
int xe_exec_queue_contexts_hwsp_rebase(struct xe_exec_queue *q, void *scratch);
struct xe_lrc *xe_exec_queue_lrc(struct xe_exec_queue *q);struct xe_lrc *xe_exec_queue_get_lrc(struct xe_exec_queue *q, u16 idx);
#endif