xref: /linux/include/uapi/linux/virtio_gpu.h (revision 100c85421b52e41269ada88f7d71a6b8a06c7a11)
1dc5698e8SDave Airlie /*
2dc5698e8SDave Airlie  * Virtio GPU Device
3dc5698e8SDave Airlie  *
4dc5698e8SDave Airlie  * Copyright Red Hat, Inc. 2013-2014
5dc5698e8SDave Airlie  *
6dc5698e8SDave Airlie  * Authors:
7dc5698e8SDave Airlie  *     Dave Airlie <airlied@redhat.com>
8dc5698e8SDave Airlie  *     Gerd Hoffmann <kraxel@redhat.com>
9dc5698e8SDave Airlie  *
10dc5698e8SDave Airlie  * This header is BSD licensed so anyone can use the definitions
11dc5698e8SDave Airlie  * to implement compatible drivers/servers:
12dc5698e8SDave Airlie  *
13dc5698e8SDave Airlie  * Redistribution and use in source and binary forms, with or without
14dc5698e8SDave Airlie  * modification, are permitted provided that the following conditions
15dc5698e8SDave Airlie  * are met:
16dc5698e8SDave Airlie  * 1. Redistributions of source code must retain the above copyright
17dc5698e8SDave Airlie  *    notice, this list of conditions and the following disclaimer.
18dc5698e8SDave Airlie  * 2. Redistributions in binary form must reproduce the above copyright
19dc5698e8SDave Airlie  *    notice, this list of conditions and the following disclaimer in the
20dc5698e8SDave Airlie  *    documentation and/or other materials provided with the distribution.
21dc5698e8SDave Airlie  * 3. Neither the name of IBM nor the names of its contributors
22dc5698e8SDave Airlie  *    may be used to endorse or promote products derived from this software
23dc5698e8SDave Airlie  *    without specific prior written permission.
24dc5698e8SDave Airlie  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25dc5698e8SDave Airlie  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26dc5698e8SDave Airlie  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
27dc5698e8SDave Airlie  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL IBM OR
28dc5698e8SDave Airlie  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
29dc5698e8SDave Airlie  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
30dc5698e8SDave Airlie  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
31dc5698e8SDave Airlie  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
32dc5698e8SDave Airlie  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
33dc5698e8SDave Airlie  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
34dc5698e8SDave Airlie  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
35dc5698e8SDave Airlie  * SUCH DAMAGE.
36dc5698e8SDave Airlie  */
37dc5698e8SDave Airlie 
38dc5698e8SDave Airlie #ifndef VIRTIO_GPU_HW_H
39dc5698e8SDave Airlie #define VIRTIO_GPU_HW_H
40dc5698e8SDave Airlie 
41ae455773SDave Airlie #include <linux/types.h>
42ae455773SDave Airlie 
43beb941b9SGerd Hoffmann /*
44beb941b9SGerd Hoffmann  * VIRTIO_GPU_CMD_CTX_*
45beb941b9SGerd Hoffmann  * VIRTIO_GPU_CMD_*_3D
46beb941b9SGerd Hoffmann  */
4762fb7a5eSGerd Hoffmann #define VIRTIO_GPU_F_VIRGL               0
48beb941b9SGerd Hoffmann 
49beb941b9SGerd Hoffmann /*
50beb941b9SGerd Hoffmann  * VIRTIO_GPU_CMD_GET_EDID
51beb941b9SGerd Hoffmann  */
52610c0c2bSGerd Hoffmann #define VIRTIO_GPU_F_EDID                1
53592d9fbaSDavid Stevens /*
54592d9fbaSDavid Stevens  * VIRTIO_GPU_CMD_RESOURCE_ASSIGN_UUID
55592d9fbaSDavid Stevens  */
56592d9fbaSDavid Stevens #define VIRTIO_GPU_F_RESOURCE_UUID       2
5762fb7a5eSGerd Hoffmann 
58ff886cbdSGerd Hoffmann /*
59ff886cbdSGerd Hoffmann  * VIRTIO_GPU_CMD_RESOURCE_CREATE_BLOB
60ff886cbdSGerd Hoffmann  */
61ff886cbdSGerd Hoffmann #define VIRTIO_GPU_F_RESOURCE_BLOB       3
6234268c9dSGurchetan Singh /*
6334268c9dSGurchetan Singh  * VIRTIO_GPU_CMD_CREATE_CONTEXT with
6434268c9dSGurchetan Singh  * context_init and multiple timelines
6534268c9dSGurchetan Singh  */
6634268c9dSGurchetan Singh #define VIRTIO_GPU_F_CONTEXT_INIT        4
67ff886cbdSGerd Hoffmann 
68dc5698e8SDave Airlie enum virtio_gpu_ctrl_type {
69dc5698e8SDave Airlie 	VIRTIO_GPU_UNDEFINED = 0,
70dc5698e8SDave Airlie 
71dc5698e8SDave Airlie 	/* 2d commands */
72dc5698e8SDave Airlie 	VIRTIO_GPU_CMD_GET_DISPLAY_INFO = 0x0100,
73dc5698e8SDave Airlie 	VIRTIO_GPU_CMD_RESOURCE_CREATE_2D,
74dc5698e8SDave Airlie 	VIRTIO_GPU_CMD_RESOURCE_UNREF,
75dc5698e8SDave Airlie 	VIRTIO_GPU_CMD_SET_SCANOUT,
76dc5698e8SDave Airlie 	VIRTIO_GPU_CMD_RESOURCE_FLUSH,
77dc5698e8SDave Airlie 	VIRTIO_GPU_CMD_TRANSFER_TO_HOST_2D,
78dc5698e8SDave Airlie 	VIRTIO_GPU_CMD_RESOURCE_ATTACH_BACKING,
79dc5698e8SDave Airlie 	VIRTIO_GPU_CMD_RESOURCE_DETACH_BACKING,
8062fb7a5eSGerd Hoffmann 	VIRTIO_GPU_CMD_GET_CAPSET_INFO,
8162fb7a5eSGerd Hoffmann 	VIRTIO_GPU_CMD_GET_CAPSET,
82610c0c2bSGerd Hoffmann 	VIRTIO_GPU_CMD_GET_EDID,
83592d9fbaSDavid Stevens 	VIRTIO_GPU_CMD_RESOURCE_ASSIGN_UUID,
84ff886cbdSGerd Hoffmann 	VIRTIO_GPU_CMD_RESOURCE_CREATE_BLOB,
85ff886cbdSGerd Hoffmann 	VIRTIO_GPU_CMD_SET_SCANOUT_BLOB,
8662fb7a5eSGerd Hoffmann 
8762fb7a5eSGerd Hoffmann 	/* 3d commands */
8862fb7a5eSGerd Hoffmann 	VIRTIO_GPU_CMD_CTX_CREATE = 0x0200,
8962fb7a5eSGerd Hoffmann 	VIRTIO_GPU_CMD_CTX_DESTROY,
9062fb7a5eSGerd Hoffmann 	VIRTIO_GPU_CMD_CTX_ATTACH_RESOURCE,
9162fb7a5eSGerd Hoffmann 	VIRTIO_GPU_CMD_CTX_DETACH_RESOURCE,
9262fb7a5eSGerd Hoffmann 	VIRTIO_GPU_CMD_RESOURCE_CREATE_3D,
9362fb7a5eSGerd Hoffmann 	VIRTIO_GPU_CMD_TRANSFER_TO_HOST_3D,
9462fb7a5eSGerd Hoffmann 	VIRTIO_GPU_CMD_TRANSFER_FROM_HOST_3D,
9562fb7a5eSGerd Hoffmann 	VIRTIO_GPU_CMD_SUBMIT_3D,
96e5cd6cbeSGerd Hoffmann 	VIRTIO_GPU_CMD_RESOURCE_MAP_BLOB,
97e5cd6cbeSGerd Hoffmann 	VIRTIO_GPU_CMD_RESOURCE_UNMAP_BLOB,
98dc5698e8SDave Airlie 
99dc5698e8SDave Airlie 	/* cursor commands */
100dc5698e8SDave Airlie 	VIRTIO_GPU_CMD_UPDATE_CURSOR = 0x0300,
101dc5698e8SDave Airlie 	VIRTIO_GPU_CMD_MOVE_CURSOR,
102dc5698e8SDave Airlie 
103dc5698e8SDave Airlie 	/* success responses */
104dc5698e8SDave Airlie 	VIRTIO_GPU_RESP_OK_NODATA = 0x1100,
105dc5698e8SDave Airlie 	VIRTIO_GPU_RESP_OK_DISPLAY_INFO,
10662fb7a5eSGerd Hoffmann 	VIRTIO_GPU_RESP_OK_CAPSET_INFO,
10762fb7a5eSGerd Hoffmann 	VIRTIO_GPU_RESP_OK_CAPSET,
108610c0c2bSGerd Hoffmann 	VIRTIO_GPU_RESP_OK_EDID,
109592d9fbaSDavid Stevens 	VIRTIO_GPU_RESP_OK_RESOURCE_UUID,
110e5cd6cbeSGerd Hoffmann 	VIRTIO_GPU_RESP_OK_MAP_INFO,
111dc5698e8SDave Airlie 
112dc5698e8SDave Airlie 	/* error responses */
113dc5698e8SDave Airlie 	VIRTIO_GPU_RESP_ERR_UNSPEC = 0x1200,
114dc5698e8SDave Airlie 	VIRTIO_GPU_RESP_ERR_OUT_OF_MEMORY,
115dc5698e8SDave Airlie 	VIRTIO_GPU_RESP_ERR_INVALID_SCANOUT_ID,
116dc5698e8SDave Airlie 	VIRTIO_GPU_RESP_ERR_INVALID_RESOURCE_ID,
117dc5698e8SDave Airlie 	VIRTIO_GPU_RESP_ERR_INVALID_CONTEXT_ID,
118dc5698e8SDave Airlie 	VIRTIO_GPU_RESP_ERR_INVALID_PARAMETER,
119dc5698e8SDave Airlie };
120dc5698e8SDave Airlie 
121e5cd6cbeSGerd Hoffmann enum virtio_gpu_shm_id {
122e5cd6cbeSGerd Hoffmann 	VIRTIO_GPU_SHM_ID_UNDEFINED = 0,
123c1209608SAnthoine Bourgeois 	/*
124c1209608SAnthoine Bourgeois 	 * VIRTIO_GPU_CMD_RESOURCE_MAP_BLOB
125c1209608SAnthoine Bourgeois 	 * VIRTIO_GPU_CMD_RESOURCE_UNMAP_BLOB
126c1209608SAnthoine Bourgeois 	 */
127e5cd6cbeSGerd Hoffmann 	VIRTIO_GPU_SHM_ID_HOST_VISIBLE = 1
128e5cd6cbeSGerd Hoffmann };
129e5cd6cbeSGerd Hoffmann 
130dc5698e8SDave Airlie #define VIRTIO_GPU_FLAG_FENCE         (1 << 0)
13134268c9dSGurchetan Singh /*
13234268c9dSGurchetan Singh  * If the following flag is set, then ring_idx contains the index
13334268c9dSGurchetan Singh  * of the command ring that needs to used when creating the fence
13434268c9dSGurchetan Singh  */
13534268c9dSGurchetan Singh #define VIRTIO_GPU_FLAG_INFO_RING_IDX (1 << 1)
136dc5698e8SDave Airlie 
137dc5698e8SDave Airlie struct virtio_gpu_ctrl_hdr {
138dc5698e8SDave Airlie 	__le32 type;
139dc5698e8SDave Airlie 	__le32 flags;
140dc5698e8SDave Airlie 	__le64 fence_id;
141dc5698e8SDave Airlie 	__le32 ctx_id;
14234268c9dSGurchetan Singh 	__u8 ring_idx;
14334268c9dSGurchetan Singh 	__u8 padding[3];
144dc5698e8SDave Airlie };
145dc5698e8SDave Airlie 
146dc5698e8SDave Airlie /* data passed in the cursor vq */
147dc5698e8SDave Airlie 
148dc5698e8SDave Airlie struct virtio_gpu_cursor_pos {
149dc5698e8SDave Airlie 	__le32 scanout_id;
150dc5698e8SDave Airlie 	__le32 x;
151dc5698e8SDave Airlie 	__le32 y;
152dc5698e8SDave Airlie 	__le32 padding;
153dc5698e8SDave Airlie };
154dc5698e8SDave Airlie 
155dc5698e8SDave Airlie /* VIRTIO_GPU_CMD_UPDATE_CURSOR, VIRTIO_GPU_CMD_MOVE_CURSOR */
156dc5698e8SDave Airlie struct virtio_gpu_update_cursor {
157dc5698e8SDave Airlie 	struct virtio_gpu_ctrl_hdr hdr;
158dc5698e8SDave Airlie 	struct virtio_gpu_cursor_pos pos;  /* update & move */
159dc5698e8SDave Airlie 	__le32 resource_id;           /* update only */
160dc5698e8SDave Airlie 	__le32 hot_x;                 /* update only */
161dc5698e8SDave Airlie 	__le32 hot_y;                 /* update only */
162dc5698e8SDave Airlie 	__le32 padding;
163dc5698e8SDave Airlie };
164dc5698e8SDave Airlie 
165dc5698e8SDave Airlie /* data passed in the control vq, 2d related */
166dc5698e8SDave Airlie 
167dc5698e8SDave Airlie struct virtio_gpu_rect {
168dc5698e8SDave Airlie 	__le32 x;
169dc5698e8SDave Airlie 	__le32 y;
170dc5698e8SDave Airlie 	__le32 width;
171dc5698e8SDave Airlie 	__le32 height;
172dc5698e8SDave Airlie };
173dc5698e8SDave Airlie 
174dc5698e8SDave Airlie /* VIRTIO_GPU_CMD_RESOURCE_UNREF */
175dc5698e8SDave Airlie struct virtio_gpu_resource_unref {
176dc5698e8SDave Airlie 	struct virtio_gpu_ctrl_hdr hdr;
177dc5698e8SDave Airlie 	__le32 resource_id;
178dc5698e8SDave Airlie 	__le32 padding;
179dc5698e8SDave Airlie };
180dc5698e8SDave Airlie 
181dc5698e8SDave Airlie /* VIRTIO_GPU_CMD_RESOURCE_CREATE_2D: create a 2d resource with a format */
182dc5698e8SDave Airlie struct virtio_gpu_resource_create_2d {
183dc5698e8SDave Airlie 	struct virtio_gpu_ctrl_hdr hdr;
184dc5698e8SDave Airlie 	__le32 resource_id;
185dc5698e8SDave Airlie 	__le32 format;
186dc5698e8SDave Airlie 	__le32 width;
187dc5698e8SDave Airlie 	__le32 height;
188dc5698e8SDave Airlie };
189dc5698e8SDave Airlie 
190dc5698e8SDave Airlie /* VIRTIO_GPU_CMD_SET_SCANOUT */
191dc5698e8SDave Airlie struct virtio_gpu_set_scanout {
192dc5698e8SDave Airlie 	struct virtio_gpu_ctrl_hdr hdr;
193dc5698e8SDave Airlie 	struct virtio_gpu_rect r;
194dc5698e8SDave Airlie 	__le32 scanout_id;
195dc5698e8SDave Airlie 	__le32 resource_id;
196dc5698e8SDave Airlie };
197dc5698e8SDave Airlie 
198dc5698e8SDave Airlie /* VIRTIO_GPU_CMD_RESOURCE_FLUSH */
199dc5698e8SDave Airlie struct virtio_gpu_resource_flush {
200dc5698e8SDave Airlie 	struct virtio_gpu_ctrl_hdr hdr;
201dc5698e8SDave Airlie 	struct virtio_gpu_rect r;
202dc5698e8SDave Airlie 	__le32 resource_id;
203dc5698e8SDave Airlie 	__le32 padding;
204dc5698e8SDave Airlie };
205dc5698e8SDave Airlie 
206dc5698e8SDave Airlie /* VIRTIO_GPU_CMD_TRANSFER_TO_HOST_2D: simple transfer to_host */
207dc5698e8SDave Airlie struct virtio_gpu_transfer_to_host_2d {
208dc5698e8SDave Airlie 	struct virtio_gpu_ctrl_hdr hdr;
209dc5698e8SDave Airlie 	struct virtio_gpu_rect r;
210dc5698e8SDave Airlie 	__le64 offset;
211dc5698e8SDave Airlie 	__le32 resource_id;
212dc5698e8SDave Airlie 	__le32 padding;
213dc5698e8SDave Airlie };
214dc5698e8SDave Airlie 
215dc5698e8SDave Airlie struct virtio_gpu_mem_entry {
216dc5698e8SDave Airlie 	__le64 addr;
217dc5698e8SDave Airlie 	__le32 length;
218dc5698e8SDave Airlie 	__le32 padding;
219dc5698e8SDave Airlie };
220dc5698e8SDave Airlie 
221dc5698e8SDave Airlie /* VIRTIO_GPU_CMD_RESOURCE_ATTACH_BACKING */
222dc5698e8SDave Airlie struct virtio_gpu_resource_attach_backing {
223dc5698e8SDave Airlie 	struct virtio_gpu_ctrl_hdr hdr;
224dc5698e8SDave Airlie 	__le32 resource_id;
225dc5698e8SDave Airlie 	__le32 nr_entries;
226dc5698e8SDave Airlie };
227dc5698e8SDave Airlie 
228dc5698e8SDave Airlie /* VIRTIO_GPU_CMD_RESOURCE_DETACH_BACKING */
229dc5698e8SDave Airlie struct virtio_gpu_resource_detach_backing {
230dc5698e8SDave Airlie 	struct virtio_gpu_ctrl_hdr hdr;
231dc5698e8SDave Airlie 	__le32 resource_id;
232dc5698e8SDave Airlie 	__le32 padding;
233dc5698e8SDave Airlie };
234dc5698e8SDave Airlie 
235dc5698e8SDave Airlie /* VIRTIO_GPU_RESP_OK_DISPLAY_INFO */
236dc5698e8SDave Airlie #define VIRTIO_GPU_MAX_SCANOUTS 16
237dc5698e8SDave Airlie struct virtio_gpu_resp_display_info {
238dc5698e8SDave Airlie 	struct virtio_gpu_ctrl_hdr hdr;
239dc5698e8SDave Airlie 	struct virtio_gpu_display_one {
240dc5698e8SDave Airlie 		struct virtio_gpu_rect r;
241dc5698e8SDave Airlie 		__le32 enabled;
242dc5698e8SDave Airlie 		__le32 flags;
243dc5698e8SDave Airlie 	} pmodes[VIRTIO_GPU_MAX_SCANOUTS];
244dc5698e8SDave Airlie };
245dc5698e8SDave Airlie 
24662fb7a5eSGerd Hoffmann /* data passed in the control vq, 3d related */
24762fb7a5eSGerd Hoffmann 
24862fb7a5eSGerd Hoffmann struct virtio_gpu_box {
24962fb7a5eSGerd Hoffmann 	__le32 x, y, z;
25062fb7a5eSGerd Hoffmann 	__le32 w, h, d;
25162fb7a5eSGerd Hoffmann };
25262fb7a5eSGerd Hoffmann 
25362fb7a5eSGerd Hoffmann /* VIRTIO_GPU_CMD_TRANSFER_TO_HOST_3D, VIRTIO_GPU_CMD_TRANSFER_FROM_HOST_3D */
25462fb7a5eSGerd Hoffmann struct virtio_gpu_transfer_host_3d {
25562fb7a5eSGerd Hoffmann 	struct virtio_gpu_ctrl_hdr hdr;
25662fb7a5eSGerd Hoffmann 	struct virtio_gpu_box box;
25762fb7a5eSGerd Hoffmann 	__le64 offset;
25862fb7a5eSGerd Hoffmann 	__le32 resource_id;
25962fb7a5eSGerd Hoffmann 	__le32 level;
26062fb7a5eSGerd Hoffmann 	__le32 stride;
26162fb7a5eSGerd Hoffmann 	__le32 layer_stride;
26262fb7a5eSGerd Hoffmann };
26362fb7a5eSGerd Hoffmann 
26462fb7a5eSGerd Hoffmann /* VIRTIO_GPU_CMD_RESOURCE_CREATE_3D */
26562fb7a5eSGerd Hoffmann #define VIRTIO_GPU_RESOURCE_FLAG_Y_0_TOP (1 << 0)
26662fb7a5eSGerd Hoffmann struct virtio_gpu_resource_create_3d {
26762fb7a5eSGerd Hoffmann 	struct virtio_gpu_ctrl_hdr hdr;
26862fb7a5eSGerd Hoffmann 	__le32 resource_id;
26962fb7a5eSGerd Hoffmann 	__le32 target;
27062fb7a5eSGerd Hoffmann 	__le32 format;
27162fb7a5eSGerd Hoffmann 	__le32 bind;
27262fb7a5eSGerd Hoffmann 	__le32 width;
27362fb7a5eSGerd Hoffmann 	__le32 height;
27462fb7a5eSGerd Hoffmann 	__le32 depth;
27562fb7a5eSGerd Hoffmann 	__le32 array_size;
27662fb7a5eSGerd Hoffmann 	__le32 last_level;
27762fb7a5eSGerd Hoffmann 	__le32 nr_samples;
27862fb7a5eSGerd Hoffmann 	__le32 flags;
27962fb7a5eSGerd Hoffmann 	__le32 padding;
28062fb7a5eSGerd Hoffmann };
28162fb7a5eSGerd Hoffmann 
28262fb7a5eSGerd Hoffmann /* VIRTIO_GPU_CMD_CTX_CREATE */
28334268c9dSGurchetan Singh #define VIRTIO_GPU_CONTEXT_INIT_CAPSET_ID_MASK 0x000000ff
28462fb7a5eSGerd Hoffmann struct virtio_gpu_ctx_create {
28562fb7a5eSGerd Hoffmann 	struct virtio_gpu_ctrl_hdr hdr;
28662fb7a5eSGerd Hoffmann 	__le32 nlen;
28734268c9dSGurchetan Singh 	__le32 context_init;
28862fb7a5eSGerd Hoffmann 	char debug_name[64];
28962fb7a5eSGerd Hoffmann };
29062fb7a5eSGerd Hoffmann 
29162fb7a5eSGerd Hoffmann /* VIRTIO_GPU_CMD_CTX_DESTROY */
29262fb7a5eSGerd Hoffmann struct virtio_gpu_ctx_destroy {
29362fb7a5eSGerd Hoffmann 	struct virtio_gpu_ctrl_hdr hdr;
29462fb7a5eSGerd Hoffmann };
29562fb7a5eSGerd Hoffmann 
29662fb7a5eSGerd Hoffmann /* VIRTIO_GPU_CMD_CTX_ATTACH_RESOURCE, VIRTIO_GPU_CMD_CTX_DETACH_RESOURCE */
29762fb7a5eSGerd Hoffmann struct virtio_gpu_ctx_resource {
29862fb7a5eSGerd Hoffmann 	struct virtio_gpu_ctrl_hdr hdr;
29962fb7a5eSGerd Hoffmann 	__le32 resource_id;
30062fb7a5eSGerd Hoffmann 	__le32 padding;
30162fb7a5eSGerd Hoffmann };
30262fb7a5eSGerd Hoffmann 
30362fb7a5eSGerd Hoffmann /* VIRTIO_GPU_CMD_SUBMIT_3D */
30462fb7a5eSGerd Hoffmann struct virtio_gpu_cmd_submit {
30562fb7a5eSGerd Hoffmann 	struct virtio_gpu_ctrl_hdr hdr;
30662fb7a5eSGerd Hoffmann 	__le32 size;
30762fb7a5eSGerd Hoffmann 	__le32 padding;
30862fb7a5eSGerd Hoffmann };
30962fb7a5eSGerd Hoffmann 
31062fb7a5eSGerd Hoffmann #define VIRTIO_GPU_CAPSET_VIRGL 1
311110ab11dSDave Airlie #define VIRTIO_GPU_CAPSET_VIRGL2 2
312*216d86b9SHuang Rui /* 3 is reserved for gfxstream */
313*216d86b9SHuang Rui #define VIRTIO_GPU_CAPSET_VENUS 4
31462fb7a5eSGerd Hoffmann 
31562fb7a5eSGerd Hoffmann /* VIRTIO_GPU_CMD_GET_CAPSET_INFO */
31662fb7a5eSGerd Hoffmann struct virtio_gpu_get_capset_info {
31762fb7a5eSGerd Hoffmann 	struct virtio_gpu_ctrl_hdr hdr;
31862fb7a5eSGerd Hoffmann 	__le32 capset_index;
31962fb7a5eSGerd Hoffmann 	__le32 padding;
32062fb7a5eSGerd Hoffmann };
32162fb7a5eSGerd Hoffmann 
32262fb7a5eSGerd Hoffmann /* VIRTIO_GPU_RESP_OK_CAPSET_INFO */
32362fb7a5eSGerd Hoffmann struct virtio_gpu_resp_capset_info {
32462fb7a5eSGerd Hoffmann 	struct virtio_gpu_ctrl_hdr hdr;
32562fb7a5eSGerd Hoffmann 	__le32 capset_id;
32662fb7a5eSGerd Hoffmann 	__le32 capset_max_version;
32762fb7a5eSGerd Hoffmann 	__le32 capset_max_size;
32862fb7a5eSGerd Hoffmann 	__le32 padding;
32962fb7a5eSGerd Hoffmann };
33062fb7a5eSGerd Hoffmann 
33162fb7a5eSGerd Hoffmann /* VIRTIO_GPU_CMD_GET_CAPSET */
33262fb7a5eSGerd Hoffmann struct virtio_gpu_get_capset {
33362fb7a5eSGerd Hoffmann 	struct virtio_gpu_ctrl_hdr hdr;
33462fb7a5eSGerd Hoffmann 	__le32 capset_id;
33562fb7a5eSGerd Hoffmann 	__le32 capset_version;
33662fb7a5eSGerd Hoffmann };
33762fb7a5eSGerd Hoffmann 
33862fb7a5eSGerd Hoffmann /* VIRTIO_GPU_RESP_OK_CAPSET */
33962fb7a5eSGerd Hoffmann struct virtio_gpu_resp_capset {
34062fb7a5eSGerd Hoffmann 	struct virtio_gpu_ctrl_hdr hdr;
34189545d6dSMikko Rapeli 	__u8 capset_data[];
34262fb7a5eSGerd Hoffmann };
34362fb7a5eSGerd Hoffmann 
344610c0c2bSGerd Hoffmann /* VIRTIO_GPU_CMD_GET_EDID */
345610c0c2bSGerd Hoffmann struct virtio_gpu_cmd_get_edid {
346610c0c2bSGerd Hoffmann 	struct virtio_gpu_ctrl_hdr hdr;
347610c0c2bSGerd Hoffmann 	__le32 scanout;
348610c0c2bSGerd Hoffmann 	__le32 padding;
349610c0c2bSGerd Hoffmann };
350610c0c2bSGerd Hoffmann 
351610c0c2bSGerd Hoffmann /* VIRTIO_GPU_RESP_OK_EDID */
352610c0c2bSGerd Hoffmann struct virtio_gpu_resp_edid {
353610c0c2bSGerd Hoffmann 	struct virtio_gpu_ctrl_hdr hdr;
354610c0c2bSGerd Hoffmann 	__le32 size;
355610c0c2bSGerd Hoffmann 	__le32 padding;
356610c0c2bSGerd Hoffmann 	__u8 edid[1024];
357610c0c2bSGerd Hoffmann };
358610c0c2bSGerd Hoffmann 
359dc5698e8SDave Airlie #define VIRTIO_GPU_EVENT_DISPLAY (1 << 0)
360dc5698e8SDave Airlie 
361dc5698e8SDave Airlie struct virtio_gpu_config {
362f378444bSMichael S. Tsirkin 	__le32 events_read;
363f378444bSMichael S. Tsirkin 	__le32 events_clear;
364f378444bSMichael S. Tsirkin 	__le32 num_scanouts;
365f378444bSMichael S. Tsirkin 	__le32 num_capsets;
366dc5698e8SDave Airlie };
367dc5698e8SDave Airlie 
368dc5698e8SDave Airlie /* simple formats for fbcon/X use */
369dc5698e8SDave Airlie enum virtio_gpu_formats {
370dc5698e8SDave Airlie 	VIRTIO_GPU_FORMAT_B8G8R8A8_UNORM  = 1,
371dc5698e8SDave Airlie 	VIRTIO_GPU_FORMAT_B8G8R8X8_UNORM  = 2,
372dc5698e8SDave Airlie 	VIRTIO_GPU_FORMAT_A8R8G8B8_UNORM  = 3,
373dc5698e8SDave Airlie 	VIRTIO_GPU_FORMAT_X8R8G8B8_UNORM  = 4,
374dc5698e8SDave Airlie 
375dc5698e8SDave Airlie 	VIRTIO_GPU_FORMAT_R8G8B8A8_UNORM  = 67,
376dc5698e8SDave Airlie 	VIRTIO_GPU_FORMAT_X8B8G8R8_UNORM  = 68,
377dc5698e8SDave Airlie 
378dc5698e8SDave Airlie 	VIRTIO_GPU_FORMAT_A8B8G8R8_UNORM  = 121,
379dc5698e8SDave Airlie 	VIRTIO_GPU_FORMAT_R8G8B8X8_UNORM  = 134,
380dc5698e8SDave Airlie };
381dc5698e8SDave Airlie 
382592d9fbaSDavid Stevens /* VIRTIO_GPU_CMD_RESOURCE_ASSIGN_UUID */
383592d9fbaSDavid Stevens struct virtio_gpu_resource_assign_uuid {
384592d9fbaSDavid Stevens 	struct virtio_gpu_ctrl_hdr hdr;
385592d9fbaSDavid Stevens 	__le32 resource_id;
386592d9fbaSDavid Stevens 	__le32 padding;
387592d9fbaSDavid Stevens };
388592d9fbaSDavid Stevens 
389592d9fbaSDavid Stevens /* VIRTIO_GPU_RESP_OK_RESOURCE_UUID */
390592d9fbaSDavid Stevens struct virtio_gpu_resp_resource_uuid {
391592d9fbaSDavid Stevens 	struct virtio_gpu_ctrl_hdr hdr;
392592d9fbaSDavid Stevens 	__u8 uuid[16];
393592d9fbaSDavid Stevens };
394592d9fbaSDavid Stevens 
395ff886cbdSGerd Hoffmann /* VIRTIO_GPU_CMD_RESOURCE_CREATE_BLOB */
396ff886cbdSGerd Hoffmann struct virtio_gpu_resource_create_blob {
397ff886cbdSGerd Hoffmann 	struct virtio_gpu_ctrl_hdr hdr;
398ff886cbdSGerd Hoffmann 	__le32 resource_id;
399ff886cbdSGerd Hoffmann #define VIRTIO_GPU_BLOB_MEM_GUEST             0x0001
400ff886cbdSGerd Hoffmann #define VIRTIO_GPU_BLOB_MEM_HOST3D            0x0002
401ff886cbdSGerd Hoffmann #define VIRTIO_GPU_BLOB_MEM_HOST3D_GUEST      0x0003
402ff886cbdSGerd Hoffmann 
403ff886cbdSGerd Hoffmann #define VIRTIO_GPU_BLOB_FLAG_USE_MAPPABLE     0x0001
404ff886cbdSGerd Hoffmann #define VIRTIO_GPU_BLOB_FLAG_USE_SHAREABLE    0x0002
405ff886cbdSGerd Hoffmann #define VIRTIO_GPU_BLOB_FLAG_USE_CROSS_DEVICE 0x0004
406ff886cbdSGerd Hoffmann 	/* zero is invalid blob mem */
407ff886cbdSGerd Hoffmann 	__le32 blob_mem;
408ff886cbdSGerd Hoffmann 	__le32 blob_flags;
40991e515c2SAlistair Delva 	__le32 nr_entries;
410ff886cbdSGerd Hoffmann 	__le64 blob_id;
411ff886cbdSGerd Hoffmann 	__le64 size;
412ff886cbdSGerd Hoffmann 	/*
413ff886cbdSGerd Hoffmann 	 * sizeof(nr_entries * virtio_gpu_mem_entry) bytes follow
414ff886cbdSGerd Hoffmann 	 */
415ff886cbdSGerd Hoffmann };
416ff886cbdSGerd Hoffmann 
417ff886cbdSGerd Hoffmann /* VIRTIO_GPU_CMD_SET_SCANOUT_BLOB */
418ff886cbdSGerd Hoffmann struct virtio_gpu_set_scanout_blob {
419ff886cbdSGerd Hoffmann 	struct virtio_gpu_ctrl_hdr hdr;
420ff886cbdSGerd Hoffmann 	struct virtio_gpu_rect r;
421ff886cbdSGerd Hoffmann 	__le32 scanout_id;
422ff886cbdSGerd Hoffmann 	__le32 resource_id;
423ff886cbdSGerd Hoffmann 	__le32 width;
424ff886cbdSGerd Hoffmann 	__le32 height;
425ff886cbdSGerd Hoffmann 	__le32 format;
426ff886cbdSGerd Hoffmann 	__le32 padding;
427ff886cbdSGerd Hoffmann 	__le32 strides[4];
428ff886cbdSGerd Hoffmann 	__le32 offsets[4];
429ff886cbdSGerd Hoffmann };
430ff886cbdSGerd Hoffmann 
431e5cd6cbeSGerd Hoffmann /* VIRTIO_GPU_CMD_RESOURCE_MAP_BLOB */
432e5cd6cbeSGerd Hoffmann struct virtio_gpu_resource_map_blob {
433e5cd6cbeSGerd Hoffmann 	struct virtio_gpu_ctrl_hdr hdr;
434e5cd6cbeSGerd Hoffmann 	__le32 resource_id;
435e5cd6cbeSGerd Hoffmann 	__le32 padding;
436e5cd6cbeSGerd Hoffmann 	__le64 offset;
437e5cd6cbeSGerd Hoffmann };
438e5cd6cbeSGerd Hoffmann 
439e5cd6cbeSGerd Hoffmann /* VIRTIO_GPU_RESP_OK_MAP_INFO */
440e5cd6cbeSGerd Hoffmann #define VIRTIO_GPU_MAP_CACHE_MASK     0x0f
441e5cd6cbeSGerd Hoffmann #define VIRTIO_GPU_MAP_CACHE_NONE     0x00
442e5cd6cbeSGerd Hoffmann #define VIRTIO_GPU_MAP_CACHE_CACHED   0x01
443e5cd6cbeSGerd Hoffmann #define VIRTIO_GPU_MAP_CACHE_UNCACHED 0x02
444e5cd6cbeSGerd Hoffmann #define VIRTIO_GPU_MAP_CACHE_WC       0x03
445e5cd6cbeSGerd Hoffmann struct virtio_gpu_resp_map_info {
446e5cd6cbeSGerd Hoffmann 	struct virtio_gpu_ctrl_hdr hdr;
447e5cd6cbeSGerd Hoffmann 	__u32 map_info;
448e5cd6cbeSGerd Hoffmann 	__u32 padding;
449e5cd6cbeSGerd Hoffmann };
450e5cd6cbeSGerd Hoffmann 
451e5cd6cbeSGerd Hoffmann /* VIRTIO_GPU_CMD_RESOURCE_UNMAP_BLOB */
452e5cd6cbeSGerd Hoffmann struct virtio_gpu_resource_unmap_blob {
453e5cd6cbeSGerd Hoffmann 	struct virtio_gpu_ctrl_hdr hdr;
454e5cd6cbeSGerd Hoffmann 	__le32 resource_id;
455e5cd6cbeSGerd Hoffmann 	__le32 padding;
456e5cd6cbeSGerd Hoffmann };
457e5cd6cbeSGerd Hoffmann 
458dc5698e8SDave Airlie #endif
459