Branch data Line data Source code
1 : : /*
2 : : * Copyright © 2016 Intel Corporation
3 : : *
4 : : * Permission is hereby granted, free of charge, to any person obtaining a
5 : : * copy of this software and associated documentation files (the "Software"),
6 : : * to deal in the Software without restriction, including without limitation
7 : : * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 : : * and/or sell copies of the Software, and to permit persons to whom the
9 : : * Software is furnished to do so, subject to the following conditions:
10 : : *
11 : : * The above copyright notice and this permission notice (including the next
12 : : * paragraph) shall be included in all copies or substantial portions of the
13 : : * Software.
14 : : *
15 : : * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 : : * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 : : * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18 : : * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 : : * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20 : : * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21 : : * IN THE SOFTWARE.
22 : : *
23 : : */
24 : :
25 : : #ifndef I915_TIMELINE_H
26 : : #define I915_TIMELINE_H
27 : :
28 : : #include <linux/lockdep.h>
29 : :
30 : : #include "i915_active.h"
31 : : #include "i915_syncmap.h"
32 : : #include "gt/intel_timeline_types.h"
33 : :
34 : : int intel_timeline_init(struct intel_timeline *tl,
35 : : struct intel_gt *gt,
36 : : struct i915_vma *hwsp);
37 : : void intel_timeline_fini(struct intel_timeline *tl);
38 : :
39 : : struct intel_timeline *
40 : : intel_timeline_create(struct intel_gt *gt, struct i915_vma *global_hwsp);
41 : :
42 : : static inline struct intel_timeline *
43 : 0 : intel_timeline_get(struct intel_timeline *timeline)
44 : : {
45 : 0 : kref_get(&timeline->kref);
46 [ # # ]: 0 : return timeline;
47 : : }
48 : :
49 : : void __intel_timeline_free(struct kref *kref);
50 : 0 : static inline void intel_timeline_put(struct intel_timeline *timeline)
51 : : {
52 : 0 : kref_put(&timeline->kref, __intel_timeline_free);
53 : 0 : }
54 : :
55 : 0 : static inline int __intel_timeline_sync_set(struct intel_timeline *tl,
56 : : u64 context, u32 seqno)
57 : : {
58 : 0 : return i915_syncmap_set(&tl->sync, context, seqno);
59 : : }
60 : :
61 : 0 : static inline int intel_timeline_sync_set(struct intel_timeline *tl,
62 : : const struct dma_fence *fence)
63 : : {
64 : 0 : return __intel_timeline_sync_set(tl, fence->context, fence->seqno);
65 : : }
66 : :
67 : 0 : static inline bool __intel_timeline_sync_is_later(struct intel_timeline *tl,
68 : : u64 context, u32 seqno)
69 : : {
70 : 0 : return i915_syncmap_is_later(&tl->sync, context, seqno);
71 : : }
72 : :
73 : 0 : static inline bool intel_timeline_sync_is_later(struct intel_timeline *tl,
74 : : const struct dma_fence *fence)
75 : : {
76 : 0 : return __intel_timeline_sync_is_later(tl, fence->context, fence->seqno);
77 : : }
78 : :
79 : : int intel_timeline_pin(struct intel_timeline *tl);
80 : : void intel_timeline_enter(struct intel_timeline *tl);
81 : : int intel_timeline_get_seqno(struct intel_timeline *tl,
82 : : struct i915_request *rq,
83 : : u32 *seqno);
84 : : void intel_timeline_exit(struct intel_timeline *tl);
85 : : void intel_timeline_unpin(struct intel_timeline *tl);
86 : :
87 : : int intel_timeline_read_hwsp(struct i915_request *from,
88 : : struct i915_request *until,
89 : : u32 *hwsp_offset);
90 : :
91 : : void intel_gt_init_timelines(struct intel_gt *gt);
92 : : void intel_gt_fini_timelines(struct intel_gt *gt);
93 : :
94 : : #endif
|