xref: /openbmc/qemu/ui/dmabuf.c (revision 6e6ae491dad9a7ba813c7f1e70ce972c35c2d4ab)
1 /*
2  * SPDX-License-Identifier: GPL-2.0-or-later
3  *
4  * QemuDmaBuf struct and helpers used for accessing its data
5  *
6  * This work is licensed under the terms of the GNU GPL, version 2 or later.
7  * See the COPYING file in the top-level directory.
8  */
9 
10 #include "qemu/osdep.h"
11 #include "ui/dmabuf.h"
12 
13 QemuDmaBuf *qemu_dmabuf_new(uint32_t width, uint32_t height,
14                             uint32_t stride, uint32_t x,
15                             uint32_t y, uint32_t backing_width,
16                             uint32_t backing_height, uint32_t fourcc,
17                             uint64_t modifier, int32_t dmabuf_fd,
18                             bool allow_fences, bool y0_top) {
19     QemuDmaBuf *dmabuf;
20 
21     dmabuf = g_new0(QemuDmaBuf, 1);
22 
23     dmabuf->width = width;
24     dmabuf->height = height;
25     dmabuf->stride = stride;
26     dmabuf->x = x;
27     dmabuf->y = y;
28     dmabuf->backing_width = backing_width;
29     dmabuf->backing_height = backing_height;
30     dmabuf->fourcc = fourcc;
31     dmabuf->modifier = modifier;
32     dmabuf->fd = dmabuf_fd;
33     dmabuf->allow_fences = allow_fences;
34     dmabuf->y0_top = y0_top;
35     dmabuf->fence_fd = -1;
36 
37     return dmabuf;
38 }
39 
40 void qemu_dmabuf_free(QemuDmaBuf *dmabuf)
41 {
42     if (dmabuf == NULL) {
43         return;
44     }
45 
46     g_free(dmabuf);
47 }
48 
49 int qemu_dmabuf_get_fd(QemuDmaBuf *dmabuf)
50 {
51     assert(dmabuf != NULL);
52 
53     return dmabuf->fd;
54 }
55 
56 int qemu_dmabuf_dup_fd(QemuDmaBuf *dmabuf)
57 {
58     assert(dmabuf != NULL);
59 
60     if (dmabuf->fd >= 0) {
61         return dup(dmabuf->fd);
62     } else {
63         return -1;
64     }
65 }
66 
67 void qemu_dmabuf_close(QemuDmaBuf *dmabuf)
68 {
69     assert(dmabuf != NULL);
70 
71     if (dmabuf->fd >= 0) {
72         close(dmabuf->fd);
73         dmabuf->fd = -1;
74     }
75 }
76 
77 uint32_t qemu_dmabuf_get_width(QemuDmaBuf *dmabuf)
78 {
79     assert(dmabuf != NULL);
80 
81     return dmabuf->width;
82 }
83 
84 uint32_t qemu_dmabuf_get_height(QemuDmaBuf *dmabuf)
85 {
86     assert(dmabuf != NULL);
87 
88     return dmabuf->height;
89 }
90 
91 uint32_t qemu_dmabuf_get_stride(QemuDmaBuf *dmabuf)
92 {
93     assert(dmabuf != NULL);
94 
95     return dmabuf->stride;
96 }
97 
98 uint32_t qemu_dmabuf_get_fourcc(QemuDmaBuf *dmabuf)
99 {
100     assert(dmabuf != NULL);
101 
102     return dmabuf->fourcc;
103 }
104 
105 uint64_t qemu_dmabuf_get_modifier(QemuDmaBuf *dmabuf)
106 {
107     assert(dmabuf != NULL);
108 
109     return dmabuf->modifier;
110 }
111 
112 uint32_t qemu_dmabuf_get_texture(QemuDmaBuf *dmabuf)
113 {
114     assert(dmabuf != NULL);
115 
116     return dmabuf->texture;
117 }
118 
119 uint32_t qemu_dmabuf_get_x(QemuDmaBuf *dmabuf)
120 {
121     assert(dmabuf != NULL);
122 
123     return dmabuf->x;
124 }
125 
126 uint32_t qemu_dmabuf_get_y(QemuDmaBuf *dmabuf)
127 {
128     assert(dmabuf != NULL);
129 
130     return dmabuf->y;
131 }
132 
133 uint32_t qemu_dmabuf_get_backing_width(QemuDmaBuf *dmabuf)
134 {
135     assert(dmabuf != NULL);
136 
137     return dmabuf->backing_width;
138 }
139 
140 uint32_t qemu_dmabuf_get_backing_height(QemuDmaBuf *dmabuf)
141 {
142     assert(dmabuf != NULL);
143 
144     return dmabuf->backing_height;
145 }
146 
147 bool qemu_dmabuf_get_y0_top(QemuDmaBuf *dmabuf)
148 {
149     assert(dmabuf != NULL);
150 
151     return dmabuf->y0_top;
152 }
153 
154 void *qemu_dmabuf_get_sync(QemuDmaBuf *dmabuf)
155 {
156     assert(dmabuf != NULL);
157 
158     return dmabuf->sync;
159 }
160 
161 int32_t qemu_dmabuf_get_fence_fd(QemuDmaBuf *dmabuf)
162 {
163     assert(dmabuf != NULL);
164 
165     return dmabuf->fence_fd;
166 }
167 
168 bool qemu_dmabuf_get_allow_fences(QemuDmaBuf *dmabuf)
169 {
170     assert(dmabuf != NULL);
171 
172     return dmabuf->allow_fences;
173 }
174 
175 bool qemu_dmabuf_get_draw_submitted(QemuDmaBuf *dmabuf)
176 {
177     assert(dmabuf != NULL);
178 
179     return dmabuf->draw_submitted;
180 }
181 
182 void qemu_dmabuf_set_texture(QemuDmaBuf *dmabuf, uint32_t texture)
183 {
184     assert(dmabuf != NULL);
185     dmabuf->texture = texture;
186 }
187 
188 void qemu_dmabuf_set_fence_fd(QemuDmaBuf *dmabuf, int32_t fence_fd)
189 {
190     assert(dmabuf != NULL);
191     dmabuf->fence_fd = fence_fd;
192 }
193 
194 void qemu_dmabuf_set_sync(QemuDmaBuf *dmabuf, void *sync)
195 {
196     assert(dmabuf != NULL);
197     dmabuf->sync = sync;
198 }
199 
200 void qemu_dmabuf_set_draw_submitted(QemuDmaBuf *dmabuf, bool draw_submitted)
201 {
202     assert(dmabuf != NULL);
203     dmabuf->draw_submitted = draw_submitted;
204 }
205 
206 void qemu_dmabuf_set_fd(QemuDmaBuf *dmabuf, int32_t fd)
207 {
208     assert(dmabuf != NULL);
209     dmabuf->fd = fd;
210 }
211