1/*
2 * Copyright © 2015 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#include <linux/memfd.h>
25#include <sys/mman.h>
26#include <sys/syscall.h>
27
28#include "anv_private.h"
29
30#ifndef HAVE_MEMFD_CREATE
31static inline int
32memfd_create(const char *name, unsigned int flags)
33{
34   return syscall(SYS_memfd_create, name, flags);
35}
36#endif
37
38uint32_t
39anv_gem_create(struct anv_device *device, uint64_t size)
40{
41   int fd = memfd_create("fake bo", MFD_CLOEXEC);
42   if (fd == -1)
43      return 0;
44
45   assert(fd != 0);
46
47   if (ftruncate(fd, size) == -1)
48      return 0;
49
50   return fd;
51}
52
53void
54anv_gem_close(struct anv_device *device, uint32_t gem_handle)
55{
56   close(gem_handle);
57}
58
59void*
60anv_gem_mmap(struct anv_device *device, uint32_t gem_handle,
61             uint64_t offset, uint64_t size, uint32_t flags)
62{
63   /* Ignore flags, as they're specific to I915_GEM_MMAP. */
64   (void) flags;
65
66   return mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED,
67               gem_handle, offset);
68}
69
70/* This is just a wrapper around munmap, but it also notifies valgrind that
71 * this map is no longer valid.  Pair this with anv_gem_mmap().
72 */
73void
74anv_gem_munmap(void *p, uint64_t size)
75{
76   munmap(p, size);
77}
78
79uint32_t
80anv_gem_userptr(struct anv_device *device, void *mem, size_t size)
81{
82   return -1;
83}
84
85int
86anv_gem_busy(struct anv_device *device, uint32_t gem_handle)
87{
88   return 0;
89}
90
91int
92anv_gem_wait(struct anv_device *device, uint32_t gem_handle, int64_t *timeout_ns)
93{
94   return 0;
95}
96
97int
98anv_gem_execbuffer(struct anv_device *device,
99                   struct drm_i915_gem_execbuffer2 *execbuf)
100{
101   return 0;
102}
103
104int
105anv_gem_set_tiling(struct anv_device *device,
106                   uint32_t gem_handle, uint32_t stride, uint32_t tiling)
107{
108   return 0;
109}
110
111int
112anv_gem_set_caching(struct anv_device *device, uint32_t gem_handle,
113                    uint32_t caching)
114{
115   return 0;
116}
117
118int
119anv_gem_set_domain(struct anv_device *device, uint32_t gem_handle,
120                   uint32_t read_domains, uint32_t write_domain)
121{
122   return 0;
123}
124
125int
126anv_gem_get_param(int fd, uint32_t param)
127{
128   unreachable("Unused");
129}
130
131bool
132anv_gem_get_bit6_swizzle(int fd, uint32_t tiling)
133{
134   unreachable("Unused");
135}
136
137int
138anv_gem_create_context(struct anv_device *device)
139{
140   unreachable("Unused");
141}
142
143int
144anv_gem_destroy_context(struct anv_device *device, int context)
145{
146   unreachable("Unused");
147}
148
149int
150anv_gem_set_context_param(int fd, int context, uint32_t param, uint64_t value)
151{
152   unreachable("Unused");
153}
154
155int
156anv_gem_get_context_param(int fd, int context, uint32_t param, uint64_t *value)
157{
158   unreachable("Unused");
159}
160
161bool
162anv_gem_has_context_priority(int fd)
163{
164   unreachable("Unused");
165}
166
167int
168anv_gem_get_aperture(int fd, uint64_t *size)
169{
170   unreachable("Unused");
171}
172
173int
174anv_gem_gpu_get_reset_stats(struct anv_device *device,
175                            uint32_t *active, uint32_t *pending)
176{
177   unreachable("Unused");
178}
179
180int
181anv_gem_handle_to_fd(struct anv_device *device, uint32_t gem_handle)
182{
183   unreachable("Unused");
184}
185
186uint32_t
187anv_gem_fd_to_handle(struct anv_device *device, int fd)
188{
189   unreachable("Unused");
190}
191
192int
193anv_gem_sync_file_merge(struct anv_device *device, int fd1, int fd2)
194{
195   unreachable("Unused");
196}
197
198int
199anv_gem_syncobj_export_sync_file(struct anv_device *device, uint32_t handle)
200{
201   unreachable("Unused");
202}
203
204int
205anv_gem_syncobj_import_sync_file(struct anv_device *device,
206                                 uint32_t handle, int fd)
207{
208   unreachable("Unused");
209}
210
211uint32_t
212anv_gem_syncobj_create(struct anv_device *device, uint32_t flags)
213{
214   unreachable("Unused");
215}
216
217void
218anv_gem_syncobj_destroy(struct anv_device *device, uint32_t handle)
219{
220   unreachable("Unused");
221}
222
223int
224anv_gem_syncobj_handle_to_fd(struct anv_device *device, uint32_t handle)
225{
226   unreachable("Unused");
227}
228
229uint32_t
230anv_gem_syncobj_fd_to_handle(struct anv_device *device, int fd)
231{
232   unreachable("Unused");
233}
234
235void
236anv_gem_syncobj_reset(struct anv_device *device, uint32_t handle)
237{
238   unreachable("Unused");
239}
240
241bool
242anv_gem_supports_syncobj_wait(int fd)
243{
244   return false;
245}
246
247int
248anv_gem_syncobj_wait(struct anv_device *device,
249                     uint32_t *handles, uint32_t num_handles,
250                     int64_t abs_timeout_ns, bool wait_all)
251{
252   unreachable("Unused");
253}
254
255int
256anv_gem_reg_read(struct anv_device *device,
257                 uint32_t offset, uint64_t *result)
258{
259   unreachable("Unused");
260}
261