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