viogpu.h revision 1.1 1 1.1 martin /* $NetBSD: viogpu.h,v 1.1 2025/07/26 14:18:13 martin Exp $ */
2 1.1 martin /*
3 1.1 martin * Virtio GPU Device
4 1.1 martin *
5 1.1 martin * Copyright Red Hat, Inc. 2013-2014
6 1.1 martin *
7 1.1 martin * Authors:
8 1.1 martin * Dave Airlie <airlied (at) redhat.com>
9 1.1 martin * Gerd Hoffmann <kraxel (at) redhat.com>
10 1.1 martin *
11 1.1 martin * This header is BSD licensed so anyone can use the definitions
12 1.1 martin * to implement compatible drivers/servers:
13 1.1 martin *
14 1.1 martin * Redistribution and use in source and binary forms, with or without
15 1.1 martin * modification, are permitted provided that the following conditions
16 1.1 martin * are met:
17 1.1 martin * 1. Redistributions of source code must retain the above copyright
18 1.1 martin * notice, this list of conditions and the following disclaimer.
19 1.1 martin * 2. Redistributions in binary form must reproduce the above copyright
20 1.1 martin * notice, this list of conditions and the following disclaimer in the
21 1.1 martin * documentation and/or other materials provided with the distribution.
22 1.1 martin * 3. Neither the name of IBM nor the names of its contributors
23 1.1 martin * may be used to endorse or promote products derived from this software
24 1.1 martin * without specific prior written permission.
25 1.1 martin * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 1.1 martin * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 1.1 martin * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
28 1.1 martin * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL IBM OR
29 1.1 martin * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 1.1 martin * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 1.1 martin * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
32 1.1 martin * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
33 1.1 martin * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
34 1.1 martin * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
35 1.1 martin * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
36 1.1 martin * SUCH DAMAGE.
37 1.1 martin */
38 1.1 martin
39 1.1 martin #ifndef VIRTIO_GPU_HW_H
40 1.1 martin #define VIRTIO_GPU_HW_H
41 1.1 martin
42 1.1 martin #include <sys/types.h>
43 1.1 martin
44 1.1 martin #define __u8 uint8_t
45 1.1 martin #define __u32 uint32_t
46 1.1 martin #define __le16 uint16_t
47 1.1 martin #define __le32 uint32_t
48 1.1 martin #define __le64 uint64_t
49 1.1 martin
50 1.1 martin /*
51 1.1 martin * VIRTIO_GPU_CMD_CTX_*
52 1.1 martin * VIRTIO_GPU_CMD_*_3D
53 1.1 martin */
54 1.1 martin #define VIRTIO_GPU_F_VIRGL (1ULL << 0)
55 1.1 martin
56 1.1 martin /*
57 1.1 martin * VIRTIO_GPU_CMD_GET_EDID
58 1.1 martin */
59 1.1 martin #define VIRTIO_GPU_F_EDID (1ULL << 1)
60 1.1 martin /*
61 1.1 martin * VIRTIO_GPU_CMD_RESOURCE_ASSIGN_UUID
62 1.1 martin */
63 1.1 martin #define VIRTIO_GPU_F_RESOURCE_UUID (1ULL << 2)
64 1.1 martin
65 1.1 martin /*
66 1.1 martin * VIRTIO_GPU_CMD_RESOURCE_CREATE_BLOB
67 1.1 martin */
68 1.1 martin #define VIRTIO_GPU_F_RESOURCE_BLOB (1ULL << 3)
69 1.1 martin
70 1.1 martin enum virtio_gpu_ctrl_type {
71 1.1 martin VIRTIO_GPU_UNDEFINED = 0,
72 1.1 martin
73 1.1 martin /* 2d commands */
74 1.1 martin VIRTIO_GPU_CMD_GET_DISPLAY_INFO = 0x0100,
75 1.1 martin VIRTIO_GPU_CMD_RESOURCE_CREATE_2D,
76 1.1 martin VIRTIO_GPU_CMD_RESOURCE_UNREF,
77 1.1 martin VIRTIO_GPU_CMD_SET_SCANOUT,
78 1.1 martin VIRTIO_GPU_CMD_RESOURCE_FLUSH,
79 1.1 martin VIRTIO_GPU_CMD_TRANSFER_TO_HOST_2D,
80 1.1 martin VIRTIO_GPU_CMD_RESOURCE_ATTACH_BACKING,
81 1.1 martin VIRTIO_GPU_CMD_RESOURCE_DETACH_BACKING,
82 1.1 martin VIRTIO_GPU_CMD_GET_CAPSET_INFO,
83 1.1 martin VIRTIO_GPU_CMD_GET_CAPSET,
84 1.1 martin VIRTIO_GPU_CMD_GET_EDID,
85 1.1 martin VIRTIO_GPU_CMD_RESOURCE_ASSIGN_UUID,
86 1.1 martin VIRTIO_GPU_CMD_RESOURCE_CREATE_BLOB,
87 1.1 martin VIRTIO_GPU_CMD_SET_SCANOUT_BLOB,
88 1.1 martin
89 1.1 martin /* 3d commands */
90 1.1 martin VIRTIO_GPU_CMD_CTX_CREATE = 0x0200,
91 1.1 martin VIRTIO_GPU_CMD_CTX_DESTROY,
92 1.1 martin VIRTIO_GPU_CMD_CTX_ATTACH_RESOURCE,
93 1.1 martin VIRTIO_GPU_CMD_CTX_DETACH_RESOURCE,
94 1.1 martin VIRTIO_GPU_CMD_RESOURCE_CREATE_3D,
95 1.1 martin VIRTIO_GPU_CMD_TRANSFER_TO_HOST_3D,
96 1.1 martin VIRTIO_GPU_CMD_TRANSFER_FROM_HOST_3D,
97 1.1 martin VIRTIO_GPU_CMD_SUBMIT_3D,
98 1.1 martin VIRTIO_GPU_CMD_RESOURCE_MAP_BLOB,
99 1.1 martin VIRTIO_GPU_CMD_RESOURCE_UNMAP_BLOB,
100 1.1 martin
101 1.1 martin /* cursor commands */
102 1.1 martin VIRTIO_GPU_CMD_UPDATE_CURSOR = 0x0300,
103 1.1 martin VIRTIO_GPU_CMD_MOVE_CURSOR,
104 1.1 martin
105 1.1 martin /* success responses */
106 1.1 martin VIRTIO_GPU_RESP_OK_NODATA = 0x1100,
107 1.1 martin VIRTIO_GPU_RESP_OK_DISPLAY_INFO,
108 1.1 martin VIRTIO_GPU_RESP_OK_CAPSET_INFO,
109 1.1 martin VIRTIO_GPU_RESP_OK_CAPSET,
110 1.1 martin VIRTIO_GPU_RESP_OK_EDID,
111 1.1 martin VIRTIO_GPU_RESP_OK_RESOURCE_UUID,
112 1.1 martin VIRTIO_GPU_RESP_OK_MAP_INFO,
113 1.1 martin
114 1.1 martin /* error responses */
115 1.1 martin VIRTIO_GPU_RESP_ERR_UNSPEC = 0x1200,
116 1.1 martin VIRTIO_GPU_RESP_ERR_OUT_OF_MEMORY,
117 1.1 martin VIRTIO_GPU_RESP_ERR_INVALID_SCANOUT_ID,
118 1.1 martin VIRTIO_GPU_RESP_ERR_INVALID_RESOURCE_ID,
119 1.1 martin VIRTIO_GPU_RESP_ERR_INVALID_CONTEXT_ID,
120 1.1 martin VIRTIO_GPU_RESP_ERR_INVALID_PARAMETER,
121 1.1 martin };
122 1.1 martin
123 1.1 martin enum virtio_gpu_shm_id {
124 1.1 martin VIRTIO_GPU_SHM_ID_UNDEFINED = 0,
125 1.1 martin /*
126 1.1 martin * VIRTIO_GPU_CMD_RESOURCE_MAP_BLOB
127 1.1 martin * VIRTIO_GPU_CMD_RESOURCE_UNMAP_BLOB
128 1.1 martin */
129 1.1 martin VIRTIO_GPU_SHM_ID_HOST_VISIBLE = 1
130 1.1 martin };
131 1.1 martin
132 1.1 martin #define VIRTIO_GPU_FLAG_FENCE (1 << 0)
133 1.1 martin
134 1.1 martin struct virtio_gpu_ctrl_hdr {
135 1.1 martin __le32 type;
136 1.1 martin __le32 flags;
137 1.1 martin __le64 fence_id;
138 1.1 martin __le32 ctx_id;
139 1.1 martin __le32 padding;
140 1.1 martin } __packed;
141 1.1 martin
142 1.1 martin /* data passed in the cursor vq */
143 1.1 martin
144 1.1 martin struct virtio_gpu_cursor_pos {
145 1.1 martin __le32 scanout_id;
146 1.1 martin __le32 x;
147 1.1 martin __le32 y;
148 1.1 martin __le32 padding;
149 1.1 martin } __packed;
150 1.1 martin
151 1.1 martin /* VIRTIO_GPU_CMD_UPDATE_CURSOR, VIRTIO_GPU_CMD_MOVE_CURSOR */
152 1.1 martin struct virtio_gpu_update_cursor {
153 1.1 martin struct virtio_gpu_ctrl_hdr hdr;
154 1.1 martin struct virtio_gpu_cursor_pos pos; /* update & move */
155 1.1 martin __le32 resource_id; /* update only */
156 1.1 martin __le32 hot_x; /* update only */
157 1.1 martin __le32 hot_y; /* update only */
158 1.1 martin __le32 padding;
159 1.1 martin } __packed;
160 1.1 martin
161 1.1 martin /* data passed in the control vq, 2d related */
162 1.1 martin
163 1.1 martin struct virtio_gpu_rect {
164 1.1 martin __le32 x;
165 1.1 martin __le32 y;
166 1.1 martin __le32 width;
167 1.1 martin __le32 height;
168 1.1 martin } __packed;
169 1.1 martin
170 1.1 martin /* VIRTIO_GPU_CMD_RESOURCE_UNREF */
171 1.1 martin struct virtio_gpu_resource_unref {
172 1.1 martin struct virtio_gpu_ctrl_hdr hdr;
173 1.1 martin __le32 resource_id;
174 1.1 martin __le32 padding;
175 1.1 martin } __packed;
176 1.1 martin
177 1.1 martin /* VIRTIO_GPU_CMD_RESOURCE_CREATE_2D: create a 2d resource with a format */
178 1.1 martin struct virtio_gpu_resource_create_2d {
179 1.1 martin struct virtio_gpu_ctrl_hdr hdr;
180 1.1 martin __le32 resource_id;
181 1.1 martin __le32 format;
182 1.1 martin __le32 width;
183 1.1 martin __le32 height;
184 1.1 martin } __packed;
185 1.1 martin
186 1.1 martin /* VIRTIO_GPU_CMD_SET_SCANOUT */
187 1.1 martin struct virtio_gpu_set_scanout {
188 1.1 martin struct virtio_gpu_ctrl_hdr hdr;
189 1.1 martin struct virtio_gpu_rect r;
190 1.1 martin __le32 scanout_id;
191 1.1 martin __le32 resource_id;
192 1.1 martin } __packed;
193 1.1 martin
194 1.1 martin /* VIRTIO_GPU_CMD_RESOURCE_FLUSH */
195 1.1 martin struct virtio_gpu_resource_flush {
196 1.1 martin struct virtio_gpu_ctrl_hdr hdr;
197 1.1 martin struct virtio_gpu_rect r;
198 1.1 martin __le32 resource_id;
199 1.1 martin __le32 padding;
200 1.1 martin } __packed;
201 1.1 martin
202 1.1 martin /* VIRTIO_GPU_CMD_TRANSFER_TO_HOST_2D: simple transfer to_host */
203 1.1 martin struct virtio_gpu_transfer_to_host_2d {
204 1.1 martin struct virtio_gpu_ctrl_hdr hdr;
205 1.1 martin struct virtio_gpu_rect r;
206 1.1 martin __le64 offset;
207 1.1 martin __le32 resource_id;
208 1.1 martin __le32 padding;
209 1.1 martin } __packed;
210 1.1 martin
211 1.1 martin struct virtio_gpu_mem_entry {
212 1.1 martin __le64 addr;
213 1.1 martin __le32 length;
214 1.1 martin __le32 padding;
215 1.1 martin } __packed;
216 1.1 martin
217 1.1 martin /* VIRTIO_GPU_CMD_RESOURCE_ATTACH_BACKING */
218 1.1 martin struct virtio_gpu_resource_attach_backing {
219 1.1 martin struct virtio_gpu_ctrl_hdr hdr;
220 1.1 martin __le32 resource_id;
221 1.1 martin __le32 nr_entries;
222 1.1 martin } __packed;
223 1.1 martin
224 1.1 martin /* VIRTIO_GPU_CMD_RESOURCE_DETACH_BACKING */
225 1.1 martin struct virtio_gpu_resource_detach_backing {
226 1.1 martin struct virtio_gpu_ctrl_hdr hdr;
227 1.1 martin __le32 resource_id;
228 1.1 martin __le32 padding;
229 1.1 martin } __packed;
230 1.1 martin
231 1.1 martin /* VIRTIO_GPU_RESP_OK_DISPLAY_INFO */
232 1.1 martin #define VIRTIO_GPU_MAX_SCANOUTS 16
233 1.1 martin struct virtio_gpu_resp_display_info {
234 1.1 martin struct virtio_gpu_ctrl_hdr hdr;
235 1.1 martin struct virtio_gpu_display_one {
236 1.1 martin struct virtio_gpu_rect r;
237 1.1 martin __le32 enabled;
238 1.1 martin __le32 flags;
239 1.1 martin } pmodes[VIRTIO_GPU_MAX_SCANOUTS];
240 1.1 martin } __packed;
241 1.1 martin
242 1.1 martin /* data passed in the control vq, 3d related */
243 1.1 martin
244 1.1 martin struct virtio_gpu_box {
245 1.1 martin __le32 x, y, z;
246 1.1 martin __le32 w, h, d;
247 1.1 martin } __packed;
248 1.1 martin
249 1.1 martin /* VIRTIO_GPU_CMD_TRANSFER_TO_HOST_3D, VIRTIO_GPU_CMD_TRANSFER_FROM_HOST_3D */
250 1.1 martin struct virtio_gpu_transfer_host_3d {
251 1.1 martin struct virtio_gpu_ctrl_hdr hdr;
252 1.1 martin struct virtio_gpu_box box;
253 1.1 martin __le64 offset;
254 1.1 martin __le32 resource_id;
255 1.1 martin __le32 level;
256 1.1 martin __le32 stride;
257 1.1 martin __le32 layer_stride;
258 1.1 martin } __packed;
259 1.1 martin
260 1.1 martin /* VIRTIO_GPU_CMD_RESOURCE_CREATE_3D */
261 1.1 martin #define VIRTIO_GPU_RESOURCE_FLAG_Y_0_TOP (1 << 0)
262 1.1 martin struct virtio_gpu_resource_create_3d {
263 1.1 martin struct virtio_gpu_ctrl_hdr hdr;
264 1.1 martin __le32 resource_id;
265 1.1 martin __le32 target;
266 1.1 martin __le32 format;
267 1.1 martin __le32 bind;
268 1.1 martin __le32 width;
269 1.1 martin __le32 height;
270 1.1 martin __le32 depth;
271 1.1 martin __le32 array_size;
272 1.1 martin __le32 last_level;
273 1.1 martin __le32 nr_samples;
274 1.1 martin __le32 flags;
275 1.1 martin __le32 padding;
276 1.1 martin } __packed;
277 1.1 martin
278 1.1 martin /* VIRTIO_GPU_CMD_CTX_CREATE */
279 1.1 martin struct virtio_gpu_ctx_create {
280 1.1 martin struct virtio_gpu_ctrl_hdr hdr;
281 1.1 martin __le32 nlen;
282 1.1 martin __le32 padding;
283 1.1 martin char debug_name[64];
284 1.1 martin } __packed;
285 1.1 martin
286 1.1 martin /* VIRTIO_GPU_CMD_CTX_DESTROY */
287 1.1 martin struct virtio_gpu_ctx_destroy {
288 1.1 martin struct virtio_gpu_ctrl_hdr hdr;
289 1.1 martin } __packed;
290 1.1 martin
291 1.1 martin /* VIRTIO_GPU_CMD_CTX_ATTACH_RESOURCE, VIRTIO_GPU_CMD_CTX_DETACH_RESOURCE */
292 1.1 martin struct virtio_gpu_ctx_resource {
293 1.1 martin struct virtio_gpu_ctrl_hdr hdr;
294 1.1 martin __le32 resource_id;
295 1.1 martin __le32 padding;
296 1.1 martin } __packed;
297 1.1 martin
298 1.1 martin /* VIRTIO_GPU_CMD_SUBMIT_3D */
299 1.1 martin struct virtio_gpu_cmd_submit {
300 1.1 martin struct virtio_gpu_ctrl_hdr hdr;
301 1.1 martin __le32 size;
302 1.1 martin __le32 padding;
303 1.1 martin } __packed;
304 1.1 martin
305 1.1 martin #define VIRTIO_GPU_CAPSET_VIRGL 1
306 1.1 martin #define VIRTIO_GPU_CAPSET_VIRGL2 2
307 1.1 martin
308 1.1 martin /* VIRTIO_GPU_CMD_GET_CAPSET_INFO */
309 1.1 martin struct virtio_gpu_get_capset_info {
310 1.1 martin struct virtio_gpu_ctrl_hdr hdr;
311 1.1 martin __le32 capset_index;
312 1.1 martin __le32 padding;
313 1.1 martin } __packed;
314 1.1 martin
315 1.1 martin /* VIRTIO_GPU_RESP_OK_CAPSET_INFO */
316 1.1 martin struct virtio_gpu_resp_capset_info {
317 1.1 martin struct virtio_gpu_ctrl_hdr hdr;
318 1.1 martin __le32 capset_id;
319 1.1 martin __le32 capset_max_version;
320 1.1 martin __le32 capset_max_size;
321 1.1 martin __le32 padding;
322 1.1 martin } __packed;
323 1.1 martin
324 1.1 martin /* VIRTIO_GPU_CMD_GET_CAPSET */
325 1.1 martin struct virtio_gpu_get_capset {
326 1.1 martin struct virtio_gpu_ctrl_hdr hdr;
327 1.1 martin __le32 capset_id;
328 1.1 martin __le32 capset_version;
329 1.1 martin } __packed;
330 1.1 martin
331 1.1 martin /* VIRTIO_GPU_RESP_OK_CAPSET */
332 1.1 martin struct virtio_gpu_resp_capset {
333 1.1 martin struct virtio_gpu_ctrl_hdr hdr;
334 1.1 martin __u8 capset_data[];
335 1.1 martin } __packed;
336 1.1 martin
337 1.1 martin /* VIRTIO_GPU_CMD_GET_EDID */
338 1.1 martin struct virtio_gpu_cmd_get_edid {
339 1.1 martin struct virtio_gpu_ctrl_hdr hdr;
340 1.1 martin __le32 scanout;
341 1.1 martin __le32 padding;
342 1.1 martin } __packed;
343 1.1 martin
344 1.1 martin /* VIRTIO_GPU_RESP_OK_EDID */
345 1.1 martin struct virtio_gpu_resp_edid {
346 1.1 martin struct virtio_gpu_ctrl_hdr hdr;
347 1.1 martin __le32 size;
348 1.1 martin __le32 padding;
349 1.1 martin __u8 edid[1024];
350 1.1 martin } __packed;
351 1.1 martin
352 1.1 martin #define VIRTIO_GPU_EVENT_DISPLAY (1 << 0)
353 1.1 martin
354 1.1 martin struct virtio_gpu_config {
355 1.1 martin __le32 events_read;
356 1.1 martin __le32 events_clear;
357 1.1 martin __le32 num_scanouts;
358 1.1 martin __le32 num_capsets;
359 1.1 martin } __packed;
360 1.1 martin
361 1.1 martin /* simple formats for fbcon/X use */
362 1.1 martin enum virtio_gpu_formats {
363 1.1 martin VIRTIO_GPU_FORMAT_B8G8R8A8_UNORM = 1,
364 1.1 martin VIRTIO_GPU_FORMAT_B8G8R8X8_UNORM = 2,
365 1.1 martin VIRTIO_GPU_FORMAT_A8R8G8B8_UNORM = 3,
366 1.1 martin VIRTIO_GPU_FORMAT_X8R8G8B8_UNORM = 4,
367 1.1 martin
368 1.1 martin VIRTIO_GPU_FORMAT_R8G8B8A8_UNORM = 67,
369 1.1 martin VIRTIO_GPU_FORMAT_X8B8G8R8_UNORM = 68,
370 1.1 martin
371 1.1 martin VIRTIO_GPU_FORMAT_A8B8G8R8_UNORM = 121,
372 1.1 martin VIRTIO_GPU_FORMAT_R8G8B8X8_UNORM = 134,
373 1.1 martin };
374 1.1 martin
375 1.1 martin /* VIRTIO_GPU_CMD_RESOURCE_ASSIGN_UUID */
376 1.1 martin struct virtio_gpu_resource_assign_uuid {
377 1.1 martin struct virtio_gpu_ctrl_hdr hdr;
378 1.1 martin __le32 resource_id;
379 1.1 martin __le32 padding;
380 1.1 martin } __packed;
381 1.1 martin
382 1.1 martin /* VIRTIO_GPU_RESP_OK_RESOURCE_UUID */
383 1.1 martin struct virtio_gpu_resp_resource_uuid {
384 1.1 martin struct virtio_gpu_ctrl_hdr hdr;
385 1.1 martin __u8 uuid[16];
386 1.1 martin } __packed;
387 1.1 martin
388 1.1 martin /* VIRTIO_GPU_CMD_RESOURCE_CREATE_BLOB */
389 1.1 martin struct virtio_gpu_resource_create_blob {
390 1.1 martin struct virtio_gpu_ctrl_hdr hdr;
391 1.1 martin __le32 resource_id;
392 1.1 martin #define VIRTIO_GPU_BLOB_MEM_GUEST 0x0001
393 1.1 martin #define VIRTIO_GPU_BLOB_MEM_HOST3D 0x0002
394 1.1 martin #define VIRTIO_GPU_BLOB_MEM_HOST3D_GUEST 0x0003
395 1.1 martin
396 1.1 martin #define VIRTIO_GPU_BLOB_FLAG_USE_MAPPABLE 0x0001
397 1.1 martin #define VIRTIO_GPU_BLOB_FLAG_USE_SHAREABLE 0x0002
398 1.1 martin #define VIRTIO_GPU_BLOB_FLAG_USE_CROSS_DEVICE 0x0004
399 1.1 martin /* zero is invalid blob mem */
400 1.1 martin __le32 blob_mem;
401 1.1 martin __le32 blob_flags;
402 1.1 martin __le32 nr_entries;
403 1.1 martin __le64 blob_id;
404 1.1 martin __le64 size;
405 1.1 martin /*
406 1.1 martin * sizeof(nr_entries * virtio_gpu_mem_entry) bytes follow
407 1.1 martin */
408 1.1 martin } __packed;
409 1.1 martin
410 1.1 martin /* VIRTIO_GPU_CMD_SET_SCANOUT_BLOB */
411 1.1 martin struct virtio_gpu_set_scanout_blob {
412 1.1 martin struct virtio_gpu_ctrl_hdr hdr;
413 1.1 martin struct virtio_gpu_rect r;
414 1.1 martin __le32 scanout_id;
415 1.1 martin __le32 resource_id;
416 1.1 martin __le32 width;
417 1.1 martin __le32 height;
418 1.1 martin __le32 format;
419 1.1 martin __le32 padding;
420 1.1 martin __le32 strides[4];
421 1.1 martin __le32 offsets[4];
422 1.1 martin } __packed;
423 1.1 martin
424 1.1 martin /* VIRTIO_GPU_CMD_RESOURCE_MAP_BLOB */
425 1.1 martin struct virtio_gpu_resource_map_blob {
426 1.1 martin struct virtio_gpu_ctrl_hdr hdr;
427 1.1 martin __le32 resource_id;
428 1.1 martin __le32 padding;
429 1.1 martin __le64 offset;
430 1.1 martin } __packed;
431 1.1 martin
432 1.1 martin /* VIRTIO_GPU_RESP_OK_MAP_INFO */
433 1.1 martin #define VIRTIO_GPU_MAP_CACHE_MASK 0x0f
434 1.1 martin #define VIRTIO_GPU_MAP_CACHE_NONE 0x00
435 1.1 martin #define VIRTIO_GPU_MAP_CACHE_CACHED 0x01
436 1.1 martin #define VIRTIO_GPU_MAP_CACHE_UNCACHED 0x02
437 1.1 martin #define VIRTIO_GPU_MAP_CACHE_WC 0x03
438 1.1 martin struct virtio_gpu_resp_map_info {
439 1.1 martin struct virtio_gpu_ctrl_hdr hdr;
440 1.1 martin __u32 map_info;
441 1.1 martin __u32 padding;
442 1.1 martin } __packed;
443 1.1 martin
444 1.1 martin /* VIRTIO_GPU_CMD_RESOURCE_UNMAP_BLOB */
445 1.1 martin struct virtio_gpu_resource_unmap_blob {
446 1.1 martin struct virtio_gpu_ctrl_hdr hdr;
447 1.1 martin __le32 resource_id;
448 1.1 martin __le32 padding;
449 1.1 martin } __packed;
450 1.1 martin
451 1.1 martin #endif
452