Home | History | Annotate | Download | only in vulkan
      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