]>
Commit | Line | Data |
---|---|---|
3b5bb0a3 CW |
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 | #include "mock_gtt.h" | |
26 | ||
27 | static void mock_insert_page(struct i915_address_space *vm, | |
28 | dma_addr_t addr, | |
29 | u64 offset, | |
30 | enum i915_cache_level level, | |
31 | u32 flags) | |
32 | { | |
33 | } | |
34 | ||
35 | static void mock_insert_entries(struct i915_address_space *vm, | |
4a234c5f | 36 | struct i915_vma *vma, |
3b5bb0a3 CW |
37 | enum i915_cache_level level, u32 flags) |
38 | { | |
39 | } | |
40 | ||
41 | static int mock_bind_ppgtt(struct i915_vma *vma, | |
42 | enum i915_cache_level cache_level, | |
43 | u32 flags) | |
44 | { | |
45 | GEM_BUG_ON(flags & I915_VMA_GLOBAL_BIND); | |
3b5bb0a3 CW |
46 | vma->flags |= I915_VMA_LOCAL_BIND; |
47 | return 0; | |
48 | } | |
49 | ||
50 | static void mock_unbind_ppgtt(struct i915_vma *vma) | |
51 | { | |
52 | } | |
53 | ||
54 | static void mock_cleanup(struct i915_address_space *vm) | |
55 | { | |
56 | } | |
57 | ||
58 | struct i915_hw_ppgtt * | |
59 | mock_ppgtt(struct drm_i915_private *i915, | |
60 | const char *name) | |
61 | { | |
62 | struct i915_hw_ppgtt *ppgtt; | |
63 | ||
64 | ppgtt = kzalloc(sizeof(*ppgtt), GFP_KERNEL); | |
65 | if (!ppgtt) | |
66 | return NULL; | |
67 | ||
68 | kref_init(&ppgtt->ref); | |
69 | ppgtt->base.i915 = i915; | |
70 | ppgtt->base.total = round_down(U64_MAX, PAGE_SIZE); | |
71 | ppgtt->base.file = ERR_PTR(-ENODEV); | |
72 | ||
73 | INIT_LIST_HEAD(&ppgtt->base.active_list); | |
74 | INIT_LIST_HEAD(&ppgtt->base.inactive_list); | |
75 | INIT_LIST_HEAD(&ppgtt->base.unbound_list); | |
76 | ||
77 | INIT_LIST_HEAD(&ppgtt->base.global_link); | |
78 | drm_mm_init(&ppgtt->base.mm, 0, ppgtt->base.total); | |
79 | i915_gem_timeline_init(i915, &ppgtt->base.timeline, name); | |
80 | ||
81 | ppgtt->base.clear_range = nop_clear_range; | |
82 | ppgtt->base.insert_page = mock_insert_page; | |
83 | ppgtt->base.insert_entries = mock_insert_entries; | |
84 | ppgtt->base.bind_vma = mock_bind_ppgtt; | |
85 | ppgtt->base.unbind_vma = mock_unbind_ppgtt; | |
fa3f46af MA |
86 | ppgtt->base.set_pages = ppgtt_set_pages; |
87 | ppgtt->base.clear_pages = clear_pages; | |
3b5bb0a3 CW |
88 | ppgtt->base.cleanup = mock_cleanup; |
89 | ||
90 | return ppgtt; | |
91 | } | |
92 | ||
93 | static int mock_bind_ggtt(struct i915_vma *vma, | |
94 | enum i915_cache_level cache_level, | |
95 | u32 flags) | |
96 | { | |
3b5bb0a3 CW |
97 | vma->flags |= I915_VMA_GLOBAL_BIND | I915_VMA_LOCAL_BIND; |
98 | return 0; | |
99 | } | |
100 | ||
101 | static void mock_unbind_ggtt(struct i915_vma *vma) | |
102 | { | |
103 | } | |
104 | ||
105 | void mock_init_ggtt(struct drm_i915_private *i915) | |
106 | { | |
107 | struct i915_ggtt *ggtt = &i915->ggtt; | |
108 | ||
109 | INIT_LIST_HEAD(&i915->vm_list); | |
110 | ||
111 | ggtt->base.i915 = i915; | |
112 | ||
113 | ggtt->mappable_base = 0; | |
114 | ggtt->mappable_end = 2048 * PAGE_SIZE; | |
115 | ggtt->base.total = 4096 * PAGE_SIZE; | |
116 | ||
117 | ggtt->base.clear_range = nop_clear_range; | |
118 | ggtt->base.insert_page = mock_insert_page; | |
119 | ggtt->base.insert_entries = mock_insert_entries; | |
120 | ggtt->base.bind_vma = mock_bind_ggtt; | |
121 | ggtt->base.unbind_vma = mock_unbind_ggtt; | |
fa3f46af MA |
122 | ggtt->base.set_pages = ggtt_set_pages; |
123 | ggtt->base.clear_pages = clear_pages; | |
3b5bb0a3 CW |
124 | ggtt->base.cleanup = mock_cleanup; |
125 | ||
126 | i915_address_space_init(&ggtt->base, i915, "global"); | |
127 | } | |
128 | ||
129 | void mock_fini_ggtt(struct drm_i915_private *i915) | |
130 | { | |
131 | struct i915_ggtt *ggtt = &i915->ggtt; | |
132 | ||
133 | i915_address_space_fini(&ggtt->base); | |
134 | } |