Path: blob/21.2-virgl/src/freedreno/drm/msm_device.c
4564 views
/*1* Copyright (C) 2012-2018 Rob Clark <[email protected]>2*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* Rob Clark <[email protected]>24*/2526#include <unistd.h>27#include <sys/stat.h>28#include <sys/types.h>2930#include "msm_priv.h"3132static void33msm_device_destroy(struct fd_device *dev)34{35struct msm_device *msm_dev = to_msm_device(dev);36if (util_queue_is_initialized(&msm_dev->submit_queue)) {37util_queue_destroy(&msm_dev->submit_queue);38}39free(msm_dev);40}4142static const struct fd_device_funcs funcs = {43.bo_new_handle = msm_bo_new_handle,44.bo_from_handle = msm_bo_from_handle,45.pipe_new = msm_pipe_new,46.destroy = msm_device_destroy,47};4849struct fd_device *50msm_device_new(int fd, drmVersionPtr version)51{52struct msm_device *msm_dev;53struct fd_device *dev;5455STATIC_ASSERT(FD_BO_PREP_READ == MSM_PREP_READ);56STATIC_ASSERT(FD_BO_PREP_WRITE == MSM_PREP_WRITE);57STATIC_ASSERT(FD_BO_PREP_NOSYNC == MSM_PREP_NOSYNC);5859msm_dev = calloc(1, sizeof(*msm_dev));60if (!msm_dev)61return NULL;6263dev = &msm_dev->base;64dev->funcs = &funcs;6566/* async submit_queue currently only used for msm_submit_sp: */67if (version->version_minor >= FD_VERSION_SOFTPIN) {68/* Note the name is intentionally short to avoid the queue69* thread's comm truncating the interesting part of the70* process name.71*/72util_queue_init(&msm_dev->submit_queue, "sq", 8, 1, 0, NULL);73}7475dev->bo_size = sizeof(struct msm_bo);7677return dev;78}798081