1bf215546Sopenharmony_ci/**************************************************************************
2bf215546Sopenharmony_ci *
3bf215546Sopenharmony_ci * Copyright (C) 2015 Red Hat Inc.
4bf215546Sopenharmony_ci *
5bf215546Sopenharmony_ci * Permission is hereby granted, free of charge, to any person obtaining a
6bf215546Sopenharmony_ci * copy of this software and associated documentation files (the "Software"),
7bf215546Sopenharmony_ci * to deal in the Software without restriction, including without limitation
8bf215546Sopenharmony_ci * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9bf215546Sopenharmony_ci * and/or sell copies of the Software, and to permit persons to whom the
10bf215546Sopenharmony_ci * Software is furnished to do so, subject to the following conditions:
11bf215546Sopenharmony_ci *
12bf215546Sopenharmony_ci * The above copyright notice and this permission notice shall be included
13bf215546Sopenharmony_ci * in all copies or substantial portions of the Software.
14bf215546Sopenharmony_ci *
15bf215546Sopenharmony_ci * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
16bf215546Sopenharmony_ci * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17bf215546Sopenharmony_ci * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18bf215546Sopenharmony_ci * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
19bf215546Sopenharmony_ci * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
20bf215546Sopenharmony_ci * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
21bf215546Sopenharmony_ci * OTHER DEALINGS IN THE SOFTWARE.
22bf215546Sopenharmony_ci *
23bf215546Sopenharmony_ci **************************************************************************/
24bf215546Sopenharmony_ci
25bf215546Sopenharmony_ci#ifndef VTEST_PROTOCOL
26bf215546Sopenharmony_ci#define VTEST_PROTOCOL
27bf215546Sopenharmony_ci
28bf215546Sopenharmony_ci#define VTEST_DEFAULT_SOCKET_NAME "/tmp/.virgl_test"
29bf215546Sopenharmony_ci
30bf215546Sopenharmony_ci#ifdef VIRGL_RENDERER_UNSTABLE_APIS
31bf215546Sopenharmony_ci#define VTEST_PROTOCOL_VERSION 3
32bf215546Sopenharmony_ci#else
33bf215546Sopenharmony_ci#define VTEST_PROTOCOL_VERSION 2
34bf215546Sopenharmony_ci#endif
35bf215546Sopenharmony_ci
36bf215546Sopenharmony_ci/* 32-bit length field */
37bf215546Sopenharmony_ci/* 32-bit cmd field */
38bf215546Sopenharmony_ci#define VTEST_HDR_SIZE 2
39bf215546Sopenharmony_ci#define VTEST_CMD_LEN 0 /* length of data */
40bf215546Sopenharmony_ci#define VTEST_CMD_ID  1
41bf215546Sopenharmony_ci#define VTEST_CMD_DATA_START 2
42bf215546Sopenharmony_ci
43bf215546Sopenharmony_ci/* vtest cmds */
44bf215546Sopenharmony_ci#define VCMD_GET_CAPS 1
45bf215546Sopenharmony_ci
46bf215546Sopenharmony_ci#define VCMD_RESOURCE_CREATE 2
47bf215546Sopenharmony_ci#define VCMD_RESOURCE_UNREF 3
48bf215546Sopenharmony_ci
49bf215546Sopenharmony_ci#define VCMD_TRANSFER_GET 4
50bf215546Sopenharmony_ci#define VCMD_TRANSFER_PUT 5
51bf215546Sopenharmony_ci
52bf215546Sopenharmony_ci#define VCMD_SUBMIT_CMD 6
53bf215546Sopenharmony_ci
54bf215546Sopenharmony_ci#define VCMD_RESOURCE_BUSY_WAIT 7
55bf215546Sopenharmony_ci
56bf215546Sopenharmony_ci/* pass the process cmd line for debugging */
57bf215546Sopenharmony_ci#define VCMD_CREATE_RENDERER 8
58bf215546Sopenharmony_ci
59bf215546Sopenharmony_ci#define VCMD_GET_CAPS2 9
60bf215546Sopenharmony_ci/* get caps */
61bf215546Sopenharmony_ci/* 0 length cmd */
62bf215546Sopenharmony_ci/* resp VCMD_GET_CAPS + caps */
63bf215546Sopenharmony_ci
64bf215546Sopenharmony_ci#define VCMD_PING_PROTOCOL_VERSION 10
65bf215546Sopenharmony_ci
66bf215546Sopenharmony_ci#define VCMD_PROTOCOL_VERSION 11
67bf215546Sopenharmony_ci
68bf215546Sopenharmony_ci/* since protocol version 2 */
69bf215546Sopenharmony_ci#define VCMD_RESOURCE_CREATE2 12
70bf215546Sopenharmony_ci#define VCMD_TRANSFER_GET2 13
71bf215546Sopenharmony_ci#define VCMD_TRANSFER_PUT2 14
72bf215546Sopenharmony_ci
73bf215546Sopenharmony_ci#ifdef VIRGL_RENDERER_UNSTABLE_APIS
74bf215546Sopenharmony_ci/* since protocol version 3 */
75bf215546Sopenharmony_ci#define VCMD_GET_PARAM 15
76bf215546Sopenharmony_ci#define VCMD_GET_CAPSET 16
77bf215546Sopenharmony_ci#define VCMD_CONTEXT_INIT 17
78bf215546Sopenharmony_ci#define VCMD_RESOURCE_CREATE_BLOB 18
79bf215546Sopenharmony_ci#define VCMD_SYNC_CREATE 19
80bf215546Sopenharmony_ci#define VCMD_SYNC_UNREF 20
81bf215546Sopenharmony_ci#define VCMD_SYNC_READ 21
82bf215546Sopenharmony_ci#define VCMD_SYNC_WRITE 22
83bf215546Sopenharmony_ci#define VCMD_SYNC_WAIT 23
84bf215546Sopenharmony_ci#define VCMD_SUBMIT_CMD2 24
85bf215546Sopenharmony_ci#endif /* VIRGL_RENDERER_UNSTABLE_APIS */
86bf215546Sopenharmony_ci
87bf215546Sopenharmony_ci#define VCMD_RES_CREATE_SIZE 10
88bf215546Sopenharmony_ci#define VCMD_RES_CREATE_RES_HANDLE 0 /* must be 0 since protocol version 3 */
89bf215546Sopenharmony_ci#define VCMD_RES_CREATE_TARGET 1
90bf215546Sopenharmony_ci#define VCMD_RES_CREATE_FORMAT 2
91bf215546Sopenharmony_ci#define VCMD_RES_CREATE_BIND 3
92bf215546Sopenharmony_ci#define VCMD_RES_CREATE_WIDTH 4
93bf215546Sopenharmony_ci#define VCMD_RES_CREATE_HEIGHT 5
94bf215546Sopenharmony_ci#define VCMD_RES_CREATE_DEPTH 6
95bf215546Sopenharmony_ci#define VCMD_RES_CREATE_ARRAY_SIZE 7
96bf215546Sopenharmony_ci#define VCMD_RES_CREATE_LAST_LEVEL 8
97bf215546Sopenharmony_ci#define VCMD_RES_CREATE_NR_SAMPLES 9
98bf215546Sopenharmony_ci/* resp res_id since protocol version 3 */
99bf215546Sopenharmony_ci
100bf215546Sopenharmony_ci#define VCMD_RES_CREATE2_SIZE 11
101bf215546Sopenharmony_ci#define VCMD_RES_CREATE2_RES_HANDLE 0 /* must be 0 since protocol version 3 */
102bf215546Sopenharmony_ci#define VCMD_RES_CREATE2_TARGET 1
103bf215546Sopenharmony_ci#define VCMD_RES_CREATE2_FORMAT 2
104bf215546Sopenharmony_ci#define VCMD_RES_CREATE2_BIND 3
105bf215546Sopenharmony_ci#define VCMD_RES_CREATE2_WIDTH 4
106bf215546Sopenharmony_ci#define VCMD_RES_CREATE2_HEIGHT 5
107bf215546Sopenharmony_ci#define VCMD_RES_CREATE2_DEPTH 6
108bf215546Sopenharmony_ci#define VCMD_RES_CREATE2_ARRAY_SIZE 7
109bf215546Sopenharmony_ci#define VCMD_RES_CREATE2_LAST_LEVEL 8
110bf215546Sopenharmony_ci#define VCMD_RES_CREATE2_NR_SAMPLES 9
111bf215546Sopenharmony_ci#define VCMD_RES_CREATE2_DATA_SIZE 10
112bf215546Sopenharmony_ci/* resp res_id since protocol version 3, and fd if data_size >0 */
113bf215546Sopenharmony_ci
114bf215546Sopenharmony_ci#define VCMD_RES_UNREF_SIZE 1
115bf215546Sopenharmony_ci#define VCMD_RES_UNREF_RES_HANDLE 0
116bf215546Sopenharmony_ci
117bf215546Sopenharmony_ci#define VCMD_TRANSFER_HDR_SIZE 11
118bf215546Sopenharmony_ci#define VCMD_TRANSFER_RES_HANDLE 0
119bf215546Sopenharmony_ci#define VCMD_TRANSFER_LEVEL 1
120bf215546Sopenharmony_ci#define VCMD_TRANSFER_STRIDE 2
121bf215546Sopenharmony_ci#define VCMD_TRANSFER_LAYER_STRIDE 3
122bf215546Sopenharmony_ci#define VCMD_TRANSFER_X 4
123bf215546Sopenharmony_ci#define VCMD_TRANSFER_Y 5
124bf215546Sopenharmony_ci#define VCMD_TRANSFER_Z 6
125bf215546Sopenharmony_ci#define VCMD_TRANSFER_WIDTH 7
126bf215546Sopenharmony_ci#define VCMD_TRANSFER_HEIGHT 8
127bf215546Sopenharmony_ci#define VCMD_TRANSFER_DEPTH 9
128bf215546Sopenharmony_ci#define VCMD_TRANSFER_DATA_SIZE 10
129bf215546Sopenharmony_ci
130bf215546Sopenharmony_ci#define VCMD_TRANSFER2_HDR_SIZE 10
131bf215546Sopenharmony_ci#define VCMD_TRANSFER2_RES_HANDLE 0
132bf215546Sopenharmony_ci#define VCMD_TRANSFER2_LEVEL 1
133bf215546Sopenharmony_ci#define VCMD_TRANSFER2_X 2
134bf215546Sopenharmony_ci#define VCMD_TRANSFER2_Y 3
135bf215546Sopenharmony_ci#define VCMD_TRANSFER2_Z 4
136bf215546Sopenharmony_ci#define VCMD_TRANSFER2_WIDTH 5
137bf215546Sopenharmony_ci#define VCMD_TRANSFER2_HEIGHT 6
138bf215546Sopenharmony_ci#define VCMD_TRANSFER2_DEPTH 7
139bf215546Sopenharmony_ci#define VCMD_TRANSFER2_DATA_SIZE 8
140bf215546Sopenharmony_ci#define VCMD_TRANSFER2_OFFSET 9
141bf215546Sopenharmony_ci
142bf215546Sopenharmony_ci#define VCMD_BUSY_WAIT_FLAG_WAIT 1
143bf215546Sopenharmony_ci
144bf215546Sopenharmony_ci#define VCMD_BUSY_WAIT_SIZE 2
145bf215546Sopenharmony_ci#define VCMD_BUSY_WAIT_HANDLE 0
146bf215546Sopenharmony_ci#define VCMD_BUSY_WAIT_FLAGS 1
147bf215546Sopenharmony_ci
148bf215546Sopenharmony_ci#define VCMD_PING_PROTOCOL_VERSION_SIZE 0
149bf215546Sopenharmony_ci
150bf215546Sopenharmony_ci#define VCMD_PROTOCOL_VERSION_SIZE 1
151bf215546Sopenharmony_ci#define VCMD_PROTOCOL_VERSION_VERSION 0
152bf215546Sopenharmony_ci
153bf215546Sopenharmony_ci#ifdef VIRGL_RENDERER_UNSTABLE_APIS
154bf215546Sopenharmony_ci
155bf215546Sopenharmony_cienum vcmd_param  {
156bf215546Sopenharmony_ci   VCMD_PARAM_MAX_SYNC_QUEUE_COUNT      = 1,
157bf215546Sopenharmony_ci};
158bf215546Sopenharmony_ci#define VCMD_GET_PARAM_SIZE 1
159bf215546Sopenharmony_ci#define VCMD_GET_PARAM_PARAM 0
160bf215546Sopenharmony_ci/* resp param validity and value */
161bf215546Sopenharmony_ci
162bf215546Sopenharmony_ci#define VCMD_GET_CAPSET_SIZE 2
163bf215546Sopenharmony_ci#define VCMD_GET_CAPSET_ID 0
164bf215546Sopenharmony_ci#define VCMD_GET_CAPSET_VERSION 1
165bf215546Sopenharmony_ci/* resp capset validity and contents */
166bf215546Sopenharmony_ci
167bf215546Sopenharmony_ci#define VCMD_CONTEXT_INIT_SIZE 1
168bf215546Sopenharmony_ci#define VCMD_CONTEXT_INIT_CAPSET_ID 0
169bf215546Sopenharmony_ci
170bf215546Sopenharmony_cienum vcmd_blob_type {
171bf215546Sopenharmony_ci   VCMD_BLOB_TYPE_GUEST        = 1,
172bf215546Sopenharmony_ci   VCMD_BLOB_TYPE_HOST3D       = 2,
173bf215546Sopenharmony_ci   VCMD_BLOB_TYPE_HOST3D_GUEST = 3,
174bf215546Sopenharmony_ci};
175bf215546Sopenharmony_ci
176bf215546Sopenharmony_cienum vcmd_blob_flag {
177bf215546Sopenharmony_ci   VCMD_BLOB_FLAG_MAPPABLE     = 1 << 0,
178bf215546Sopenharmony_ci   VCMD_BLOB_FLAG_SHAREABLE    = 1 << 1,
179bf215546Sopenharmony_ci   VCMD_BLOB_FLAG_CROSS_DEVICE = 1 << 2,
180bf215546Sopenharmony_ci};
181bf215546Sopenharmony_ci
182bf215546Sopenharmony_ci#define VCMD_RES_CREATE_BLOB_SIZE 6
183bf215546Sopenharmony_ci#define VCMD_RES_CREATE_BLOB_TYPE 0
184bf215546Sopenharmony_ci#define VCMD_RES_CREATE_BLOB_FLAGS 1
185bf215546Sopenharmony_ci#define VCMD_RES_CREATE_BLOB_SIZE_LO 2
186bf215546Sopenharmony_ci#define VCMD_RES_CREATE_BLOB_SIZE_HI 3
187bf215546Sopenharmony_ci#define VCMD_RES_CREATE_BLOB_ID_LO 4
188bf215546Sopenharmony_ci#define VCMD_RES_CREATE_BLOB_ID_HI 5
189bf215546Sopenharmony_ci/* resp res_id and mmap'able fd */
190bf215546Sopenharmony_ci
191bf215546Sopenharmony_ci#define VCMD_SYNC_CREATE_SIZE 2
192bf215546Sopenharmony_ci#define VCMD_SYNC_CREATE_VALUE_LO 0
193bf215546Sopenharmony_ci#define VCMD_SYNC_CREATE_VALUE_HI 1
194bf215546Sopenharmony_ci/* resp sync id */
195bf215546Sopenharmony_ci
196bf215546Sopenharmony_ci#define VCMD_SYNC_UNREF_SIZE 1
197bf215546Sopenharmony_ci#define VCMD_SYNC_UNREF_ID 0
198bf215546Sopenharmony_ci
199bf215546Sopenharmony_ci#define VCMD_SYNC_READ_SIZE 1
200bf215546Sopenharmony_ci#define VCMD_SYNC_READ_ID 0
201bf215546Sopenharmony_ci/* resp sync value */
202bf215546Sopenharmony_ci
203bf215546Sopenharmony_ci#define VCMD_SYNC_WRITE_SIZE 3
204bf215546Sopenharmony_ci#define VCMD_SYNC_WRITE_ID 0
205bf215546Sopenharmony_ci#define VCMD_SYNC_WRITE_VALUE_LO 1
206bf215546Sopenharmony_ci#define VCMD_SYNC_WRITE_VALUE_HI 2
207bf215546Sopenharmony_ci
208bf215546Sopenharmony_cienum vcmd_sync_wait_flag {
209bf215546Sopenharmony_ci   VCMD_SYNC_WAIT_FLAG_ANY = 1 << 0,
210bf215546Sopenharmony_ci};
211bf215546Sopenharmony_ci#define VCMD_SYNC_WAIT_SIZE(count) (2 + 3 * count)
212bf215546Sopenharmony_ci#define VCMD_SYNC_WAIT_FLAGS 0
213bf215546Sopenharmony_ci#define VCMD_SYNC_WAIT_TIMEOUT 1
214bf215546Sopenharmony_ci#define VCMD_SYNC_WAIT_ID(n)       (2 + 3 * (n) + 0)
215bf215546Sopenharmony_ci#define VCMD_SYNC_WAIT_VALUE_LO(n) (2 + 3 * (n) + 1)
216bf215546Sopenharmony_ci#define VCMD_SYNC_WAIT_VALUE_HI(n) (2 + 3 * (n) + 2)
217bf215546Sopenharmony_ci/* resp poll'able fd */
218bf215546Sopenharmony_ci
219bf215546Sopenharmony_cienum vcmd_submit_cmd2_flag {
220bf215546Sopenharmony_ci   VCMD_SUBMIT_CMD2_FLAG_SYNC_QUEUE = 1 << 0,
221bf215546Sopenharmony_ci};
222bf215546Sopenharmony_ci
223bf215546Sopenharmony_cistruct vcmd_submit_cmd2_batch {
224bf215546Sopenharmony_ci   uint32_t flags;
225bf215546Sopenharmony_ci
226bf215546Sopenharmony_ci   uint32_t cmd_offset;
227bf215546Sopenharmony_ci   uint32_t cmd_size;
228bf215546Sopenharmony_ci
229bf215546Sopenharmony_ci   /* sync_count pairs of (id, val) starting at sync_offset */
230bf215546Sopenharmony_ci   uint32_t sync_offset;
231bf215546Sopenharmony_ci   uint32_t sync_count;
232bf215546Sopenharmony_ci
233bf215546Sopenharmony_ci   /* ignored unless VCMD_SUBMIT_CMD2_FLAG_SYNC_QUEUE is set */
234bf215546Sopenharmony_ci   uint32_t sync_queue_index;
235bf215546Sopenharmony_ci   uint64_t sync_queue_id;
236bf215546Sopenharmony_ci};
237bf215546Sopenharmony_ci#define VCMD_SUBMIT_CMD2_BATCH_COUNT 0
238bf215546Sopenharmony_ci#define VCMD_SUBMIT_CMD2_BATCH_FLAGS(n)            (1 + 8 * (n) + 0)
239bf215546Sopenharmony_ci#define VCMD_SUBMIT_CMD2_BATCH_CMD_OFFSET(n)       (1 + 8 * (n) + 1)
240bf215546Sopenharmony_ci#define VCMD_SUBMIT_CMD2_BATCH_CMD_SIZE(n)         (1 + 8 * (n) + 2)
241bf215546Sopenharmony_ci#define VCMD_SUBMIT_CMD2_BATCH_SYNC_OFFSET(n)      (1 + 8 * (n) + 3)
242bf215546Sopenharmony_ci#define VCMD_SUBMIT_CMD2_BATCH_SYNC_COUNT(n)       (1 + 8 * (n) + 4)
243bf215546Sopenharmony_ci#define VCMD_SUBMIT_CMD2_BATCH_SYNC_QUEUE_INDEX(n) (1 + 8 * (n) + 5)
244bf215546Sopenharmony_ci#define VCMD_SUBMIT_CMD2_BATCH_SYNC_QUEUE_ID_LO(n) (1 + 8 * (n) + 6)
245bf215546Sopenharmony_ci#define VCMD_SUBMIT_CMD2_BATCH_SYNC_QUEUE_ID_HI(n) (1 + 8 * (n) + 7)
246bf215546Sopenharmony_ci
247bf215546Sopenharmony_ci#endif /* VIRGL_RENDERER_UNSTABLE_APIS */
248bf215546Sopenharmony_ci
249bf215546Sopenharmony_ci#endif /* VTEST_PROTOCOL */
250