1a9351846SMatthew Brost /* SPDX-License-Identifier: MIT */
2a9351846SMatthew Brost /*
3a9351846SMatthew Brost * Copyright © 2023 Intel Corporation
4a9351846SMatthew Brost */
5a9351846SMatthew Brost
6a9351846SMatthew Brost #ifndef _XE_GT_TLB_INVALIDATION_H_
7a9351846SMatthew Brost #define _XE_GT_TLB_INVALIDATION_H_
8a9351846SMatthew Brost
9a9351846SMatthew Brost #include <linux/types.h>
10a9351846SMatthew Brost
11fc108a8bSMatthew Brost #include "xe_gt_tlb_invalidation_types.h"
12fc108a8bSMatthew Brost
13a9351846SMatthew Brost struct xe_gt;
14a9351846SMatthew Brost struct xe_guc;
15074e40d9SMatthew Brost struct xe_vm;
16332dd011SMatthew Brost struct xe_vma;
17a9351846SMatthew Brost
185001ef3aSLucas De Marchi int xe_gt_tlb_invalidation_init_early(struct xe_gt *gt);
195001ef3aSLucas De Marchi
20fc108a8bSMatthew Brost void xe_gt_tlb_invalidation_reset(struct xe_gt *gt);
213121fed0SMatthew Brost int xe_gt_tlb_invalidation_ggtt(struct xe_gt *gt);
22074e40d9SMatthew Brost void xe_gt_tlb_invalidation_vm(struct xe_gt *gt, struct xe_vm *vm);
23*e497957fSMichal Wajdeczko int xe_gt_tlb_invalidation_all(struct xe_gt *gt, struct xe_gt_tlb_invalidation_fence *fence);
24c4f18703SMatthew Brost int xe_gt_tlb_invalidation_range(struct xe_gt *gt,
25c4f18703SMatthew Brost struct xe_gt_tlb_invalidation_fence *fence,
26c4f18703SMatthew Brost u64 start, u64 end, u32 asid);
27a9351846SMatthew Brost int xe_guc_tlb_invalidation_done_handler(struct xe_guc *guc, u32 *msg, u32 len);
28a9351846SMatthew Brost
29a522b285SMatthew Brost void xe_gt_tlb_invalidation_fence_init(struct xe_gt *gt,
3061ac0353SMatthew Brost struct xe_gt_tlb_invalidation_fence *fence,
3161ac0353SMatthew Brost bool stack);
3265338639SDaniele Ceraolo Spurio void xe_gt_tlb_invalidation_fence_signal(struct xe_gt_tlb_invalidation_fence *fence);
3361ac0353SMatthew Brost
3461ac0353SMatthew Brost static inline void
xe_gt_tlb_invalidation_fence_wait(struct xe_gt_tlb_invalidation_fence * fence)3561ac0353SMatthew Brost xe_gt_tlb_invalidation_fence_wait(struct xe_gt_tlb_invalidation_fence *fence)
3661ac0353SMatthew Brost {
3761ac0353SMatthew Brost dma_fence_wait(&fence->base, false);
3861ac0353SMatthew Brost }
39a522b285SMatthew Brost
40a9351846SMatthew Brost #endif /* _XE_GT_TLB_INVALIDATION_ */
41