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