/* SPDX-License-Identifier: MIT */ /* * Copyright © 2022 Intel Corporation */ #ifndef _XE_HW_FENCE_TYPES_H_ #define _XE_HW_FENCE_TYPES_H_ #include #include #include #include #include struct xe_gt; /** * struct xe_hw_fence_irq - hardware fence IRQ handler * * One per engine class, signals completed xe_hw_fences, triggered via hw engine * interrupt. On each trigger, search list of pending fences and signal. */ struct xe_hw_fence_irq { /** @lock: protects all xe_hw_fences + pending list */ spinlock_t lock; /** @work: IRQ worker run to signal the fences */ struct irq_work work; /** @pending: list of pending xe_hw_fences */ struct list_head pending; /** @enabled: fence signaling enabled */ bool enabled; }; #define MAX_FENCE_NAME_LEN 16 /** * struct xe_hw_fence_ctx - hardware fence context * * The context for a hardware fence. 1 to 1 relationship with xe_engine. Points * to a xe_hw_fence_irq, maintains serial seqno. */ struct xe_hw_fence_ctx { /** @gt: graphics tile of hardware fence context */ struct xe_gt *gt; /** @irq: fence irq handler */ struct xe_hw_fence_irq *irq; /** @dma_fence_ctx: dma fence context for hardware fence */ u64 dma_fence_ctx; /** @next_seqno: next seqno for hardware fence */ u32 next_seqno; /** @name: name of hardware fence context */ char name[MAX_FENCE_NAME_LEN]; }; /** * struct xe_hw_fence - hardware fence * * Used to indicate a xe_sched_job is complete via a seqno written to memory. * Signals on error or seqno past. */ struct xe_hw_fence { /** @dma: base dma fence for hardware fence context */ struct dma_fence dma; /** @ctx: hardware fence context */ struct xe_hw_fence_ctx *ctx; /** @seqno_map: I/O map for seqno */ struct iosys_map seqno_map; /** @irq_link: Link in struct xe_hw_fence_irq.pending */ struct list_head irq_link; }; #endif