1 /* SPDX-License-Identifier: MIT */ 2 /* 3 * Copyright © 2025 Intel Corporation 4 */ 5 6 #ifndef _XE_TLB_INVAL_H_ 7 #define _XE_TLB_INVAL_H_ 8 9 #include <linux/types.h> 10 11 #include "xe_tlb_inval_types.h" 12 13 struct xe_gt; 14 struct xe_guc; 15 struct xe_vm; 16 17 int xe_gt_tlb_inval_init_early(struct xe_gt *gt); 18 19 void xe_tlb_inval_reset(struct xe_tlb_inval *tlb_inval); 20 int xe_tlb_inval_all(struct xe_tlb_inval *tlb_inval, 21 struct xe_tlb_inval_fence *fence); 22 int xe_tlb_inval_ggtt(struct xe_tlb_inval *tlb_inval); 23 void xe_tlb_inval_vm(struct xe_tlb_inval *tlb_inval, struct xe_vm *vm); 24 int xe_tlb_inval_range(struct xe_tlb_inval *tlb_inval, 25 struct xe_tlb_inval_fence *fence, 26 u64 start, u64 end, u32 asid); 27 28 void xe_tlb_inval_fence_init(struct xe_tlb_inval *tlb_inval, 29 struct xe_tlb_inval_fence *fence, 30 bool stack); 31 32 /** 33 * xe_tlb_inval_fence_wait() - TLB invalidiation fence wait 34 * @fence: TLB invalidation fence to wait on 35 * 36 * Wait on a TLB invalidiation fence until it signals, non interruptable 37 */ 38 static inline void 39 xe_tlb_inval_fence_wait(struct xe_tlb_inval_fence *fence) 40 { 41 dma_fence_wait(&fence->base, false); 42 } 43 44 void xe_tlb_inval_done_handler(struct xe_tlb_inval *tlb_inval, int seqno); 45 46 #endif /* _XE_TLB_INVAL_ */ 47