]>
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); | |
82ad6443 CW |
69 | ppgtt->vm.i915 = i915; |
70 | ppgtt->vm.total = round_down(U64_MAX, PAGE_SIZE); | |
71 | ppgtt->vm.file = ERR_PTR(-ENODEV); | |
72 | ||
305dc3f9 | 73 | i915_address_space_init(&ppgtt->vm, VM_CLASS_PPGTT); |
82ad6443 CW |
74 | |
75 | ppgtt->vm.clear_range = nop_clear_range; | |
76 | ppgtt->vm.insert_page = mock_insert_page; | |
77 | ppgtt->vm.insert_entries = mock_insert_entries; | |
82ad6443 | 78 | ppgtt->vm.cleanup = mock_cleanup; |
3b5bb0a3 | 79 | |
93f2cde2 CW |
80 | ppgtt->vm.vma_ops.bind_vma = mock_bind_ppgtt; |
81 | ppgtt->vm.vma_ops.unbind_vma = mock_unbind_ppgtt; | |
82 | ppgtt->vm.vma_ops.set_pages = ppgtt_set_pages; | |
83 | ppgtt->vm.vma_ops.clear_pages = clear_pages; | |
84 | ||
3b5bb0a3 CW |
85 | return ppgtt; |
86 | } | |
87 | ||
88 | static int mock_bind_ggtt(struct i915_vma *vma, | |
89 | enum i915_cache_level cache_level, | |
90 | u32 flags) | |
91 | { | |
3b5bb0a3 CW |
92 | vma->flags |= I915_VMA_GLOBAL_BIND | I915_VMA_LOCAL_BIND; |
93 | return 0; | |
94 | } | |
95 | ||
96 | static void mock_unbind_ggtt(struct i915_vma *vma) | |
97 | { | |
98 | } | |
99 | ||
c95e7ce3 | 100 | void mock_init_ggtt(struct drm_i915_private *i915, struct i915_ggtt *ggtt) |
3b5bb0a3 | 101 | { |
c95e7ce3 | 102 | memset(ggtt, 0, sizeof(*ggtt)); |
3b5bb0a3 | 103 | |
82ad6443 | 104 | ggtt->vm.i915 = i915; |
305dc3f9 | 105 | ggtt->vm.is_ggtt = true; |
3b5bb0a3 | 106 | |
73ebd503 MA |
107 | ggtt->gmadr = (struct resource) DEFINE_RES_MEM(0, 2048 * PAGE_SIZE); |
108 | ggtt->mappable_end = resource_size(&ggtt->gmadr); | |
82ad6443 CW |
109 | ggtt->vm.total = 4096 * PAGE_SIZE; |
110 | ||
111 | ggtt->vm.clear_range = nop_clear_range; | |
112 | ggtt->vm.insert_page = mock_insert_page; | |
113 | ggtt->vm.insert_entries = mock_insert_entries; | |
82ad6443 CW |
114 | ggtt->vm.cleanup = mock_cleanup; |
115 | ||
93f2cde2 CW |
116 | ggtt->vm.vma_ops.bind_vma = mock_bind_ggtt; |
117 | ggtt->vm.vma_ops.unbind_vma = mock_unbind_ggtt; | |
118 | ggtt->vm.vma_ops.set_pages = ggtt_set_pages; | |
119 | ggtt->vm.vma_ops.clear_pages = clear_pages; | |
120 | ||
305dc3f9 | 121 | i915_address_space_init(&ggtt->vm, VM_CLASS_GGTT); |
3b5bb0a3 CW |
122 | } |
123 | ||
c95e7ce3 | 124 | void mock_fini_ggtt(struct i915_ggtt *ggtt) |
3b5bb0a3 | 125 | { |
82ad6443 | 126 | i915_address_space_fini(&ggtt->vm); |
3b5bb0a3 | 127 | } |