Path: blob/21.2-virgl/src/etnaviv/drm/etnaviv_pipe.c
4564 views
/*1* Copyright (C) 2014-2015 Etnaviv Project2*3* Permission is hereby granted, free of charge, to any person obtaining a4* copy of this software and associated documentation files (the "Software"),5* to deal in the Software without restriction, including without limitation6* the rights to use, copy, modify, merge, publish, distribute, sublicense,7* and/or sell copies of the Software, and to permit persons to whom the8* Software is furnished to do so, subject to the following conditions:9*10* The above copyright notice and this permission notice (including the next11* paragraph) shall be included in all copies or substantial portions of the12* Software.13*14* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR15* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,16* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL17* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER18* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,19* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE20* SOFTWARE.21*22* Authors:23* Christian Gmeiner <[email protected]>24*/2526#include "etnaviv_priv.h"2728int etna_pipe_wait_ns(struct etna_pipe *pipe, uint32_t timestamp, uint64_t ns)29{30struct etna_device *dev = pipe->gpu->dev;31int ret;3233struct drm_etnaviv_wait_fence req = {34.pipe = pipe->gpu->core,35.fence = timestamp,36};3738if (ns == 0)39req.flags |= ETNA_WAIT_NONBLOCK;4041get_abs_timeout(&req.timeout, ns);4243ret = drmCommandWrite(dev->fd, DRM_ETNAVIV_WAIT_FENCE, &req, sizeof(req));44if (ret && (ret != -EBUSY) && (ret != -ETIMEDOUT))45ERROR_MSG("wait-fence failed! %d (%s)", ret, strerror(errno));4647return ret;48}4950void etna_pipe_del(struct etna_pipe *pipe)51{52free(pipe);53}5455struct etna_pipe *etna_pipe_new(struct etna_gpu *gpu, enum etna_pipe_id id)56{57struct etna_pipe *pipe;5859pipe = calloc(1, sizeof(*pipe));60if (!pipe) {61ERROR_MSG("allocation failed");62goto fail;63}6465pipe->id = id;66pipe->gpu = gpu;6768return pipe;69fail:70return NULL;71}727374