Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mesa
Path: blob/21.2-virgl/src/freedreno/drm/msm_device.c
4564 views
1
/*
2
* Copyright (C) 2012-2018 Rob Clark <[email protected]>
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 FROM,
20
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
* SOFTWARE.
22
*
23
* Authors:
24
* Rob Clark <[email protected]>
25
*/
26
27
#include <unistd.h>
28
#include <sys/stat.h>
29
#include <sys/types.h>
30
31
#include "msm_priv.h"
32
33
static void
34
msm_device_destroy(struct fd_device *dev)
35
{
36
struct msm_device *msm_dev = to_msm_device(dev);
37
if (util_queue_is_initialized(&msm_dev->submit_queue)) {
38
util_queue_destroy(&msm_dev->submit_queue);
39
}
40
free(msm_dev);
41
}
42
43
static const struct fd_device_funcs funcs = {
44
.bo_new_handle = msm_bo_new_handle,
45
.bo_from_handle = msm_bo_from_handle,
46
.pipe_new = msm_pipe_new,
47
.destroy = msm_device_destroy,
48
};
49
50
struct fd_device *
51
msm_device_new(int fd, drmVersionPtr version)
52
{
53
struct msm_device *msm_dev;
54
struct fd_device *dev;
55
56
STATIC_ASSERT(FD_BO_PREP_READ == MSM_PREP_READ);
57
STATIC_ASSERT(FD_BO_PREP_WRITE == MSM_PREP_WRITE);
58
STATIC_ASSERT(FD_BO_PREP_NOSYNC == MSM_PREP_NOSYNC);
59
60
msm_dev = calloc(1, sizeof(*msm_dev));
61
if (!msm_dev)
62
return NULL;
63
64
dev = &msm_dev->base;
65
dev->funcs = &funcs;
66
67
/* async submit_queue currently only used for msm_submit_sp: */
68
if (version->version_minor >= FD_VERSION_SOFTPIN) {
69
/* Note the name is intentionally short to avoid the queue
70
* thread's comm truncating the interesting part of the
71
* process name.
72
*/
73
util_queue_init(&msm_dev->submit_queue, "sq", 8, 1, 0, NULL);
74
}
75
76
dev->bo_size = sizeof(struct msm_bo);
77
78
return dev;
79
}
80
81