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 31 static inline int 32 memfd_create(const char *name, unsigned int flags) 33 { 34 return syscall(SYS_memfd_create, name, flags); 35 } 36 #endif 37 38 uint32_t 39 anv_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 53 void 54 anv_gem_close(struct anv_device *device, uint32_t gem_handle) 55 { 56 close(gem_handle); 57 } 58 59 void* 60 anv_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 */ 73 void 74 anv_gem_munmap(void *p, uint64_t size) 75 { 76 munmap(p, size); 77 } 78 79 uint32_t 80 anv_gem_userptr(struct anv_device *device, void *mem, size_t size) 81 { 82 return -1; 83 } 84 85 int 86 anv_gem_busy(struct anv_device *device, uint32_t gem_handle) 87 { 88 return 0; 89 } 90 91 int 92 anv_gem_wait(struct anv_device *device, uint32_t gem_handle, int64_t *timeout_ns) 93 { 94 return 0; 95 } 96 97 int 98 anv_gem_execbuffer(struct anv_device *device, 99 struct drm_i915_gem_execbuffer2 *execbuf) 100 { 101 return 0; 102 } 103 104 int 105 anv_gem_set_tiling(struct anv_device *device, 106 uint32_t gem_handle, uint32_t stride, uint32_t tiling) 107 { 108 return 0; 109 } 110 111 int 112 anv_gem_set_caching(struct anv_device *device, uint32_t gem_handle, 113 uint32_t caching) 114 { 115 return 0; 116 } 117 118 int 119 anv_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 125 int 126 anv_gem_get_param(int fd, uint32_t param) 127 { 128 unreachable("Unused"); 129 } 130 131 bool 132 anv_gem_get_bit6_swizzle(int fd, uint32_t tiling) 133 { 134 unreachable("Unused"); 135 } 136 137 int 138 anv_gem_create_context(struct anv_device *device) 139 { 140 unreachable("Unused"); 141 } 142 143 int 144 anv_gem_destroy_context(struct anv_device *device, int context) 145 { 146 unreachable("Unused"); 147 } 148 149 int 150 anv_gem_get_context_param(int fd, int context, uint32_t param, uint64_t *value) 151 { 152 unreachable("Unused"); 153 } 154 155 int 156 anv_gem_get_aperture(int fd, uint64_t *size) 157 { 158 unreachable("Unused"); 159 } 160 161 bool 162 anv_gem_supports_48b_addresses(int fd) 163 { 164 unreachable("Unused"); 165 } 166 167 int 168 anv_gem_gpu_get_reset_stats(struct anv_device *device, 169 uint32_t *active, uint32_t *pending) 170 { 171 unreachable("Unused"); 172 } 173 174 int 175 anv_gem_handle_to_fd(struct anv_device *device, uint32_t gem_handle) 176 { 177 unreachable("Unused"); 178 } 179 180 uint32_t 181 anv_gem_fd_to_handle(struct anv_device *device, int fd) 182 { 183 unreachable("Unused"); 184 } 185 186 int 187 anv_gem_sync_file_merge(struct anv_device *device, int fd1, int fd2) 188 { 189 unreachable("Unused"); 190 } 191 192 int 193 anv_gem_syncobj_export_sync_file(struct anv_device *device, uint32_t handle) 194 { 195 unreachable("Unused"); 196 } 197 198 int 199 anv_gem_syncobj_import_sync_file(struct anv_device *device, 200 uint32_t handle, int fd) 201 { 202 unreachable("Unused"); 203 } 204 205 uint32_t 206 anv_gem_syncobj_create(struct anv_device *device, uint32_t flags) 207 { 208 unreachable("Unused"); 209 } 210 211 void 212 anv_gem_syncobj_destroy(struct anv_device *device, uint32_t handle) 213 { 214 unreachable("Unused"); 215 } 216 217 int 218 anv_gem_syncobj_handle_to_fd(struct anv_device *device, uint32_t handle) 219 { 220 unreachable("Unused"); 221 } 222 223 uint32_t 224 anv_gem_syncobj_fd_to_handle(struct anv_device *device, int fd) 225 { 226 unreachable("Unused"); 227 } 228 229 void 230 anv_gem_syncobj_reset(struct anv_device *device, uint32_t handle) 231 { 232 unreachable("Unused"); 233 } 234 235 bool 236 anv_gem_supports_syncobj_wait(int fd) 237 { 238 return false; 239 } 240 241 int 242 anv_gem_syncobj_wait(struct anv_device *device, 243 uint32_t *handles, uint32_t num_handles, 244 int64_t abs_timeout_ns, bool wait_all) 245 { 246 unreachable("Unused"); 247 } 248