Lines Matching defs:vtest

23 #include "vtest/vtest_protocol.h"
30 struct vtest;
48 struct vtest {
99 vtest_read(struct vtest *vtest, void *buf, size_t size)
102 const ssize_t ret = read(vtest->sock_fd, buf, size);
104 vn_log(vtest->instance,
116 vtest_receive_fd(struct vtest *vtest)
131 if (recvmsg(vtest->sock_fd, &msg, 0) < 0) {
132 vn_log(vtest->instance, "recvmsg failed: %s", strerror(errno));
139 vn_log(vtest->instance, "invalid cmsghdr");
147 vtest_write(struct vtest *vtest, const void *buf, size_t size)
150 const ssize_t ret = write(vtest->sock_fd, buf, size);
152 vn_log(vtest->instance,
164 vtest_vcmd_create_renderer(struct vtest *vtest, const char *name)
172 vtest_write(vtest, vtest_hdr, sizeof(vtest_hdr));
173 vtest_write(vtest, name, size);
177 vtest_vcmd_ping_protocol_version(struct vtest *vtest)
183 vtest_write(vtest, vtest_hdr, sizeof(vtest_hdr));
194 vtest_write(vtest, vtest_hdr, sizeof(vtest_hdr));
195 vtest_write(vtest, vcmd_busy_wait, sizeof(vcmd_busy_wait));
198 vtest_read(vtest, vtest_hdr, sizeof(vtest_hdr));
201 vtest_read(vtest, vtest_hdr, sizeof(vtest_hdr));
203 vtest_read(vtest, &dummy, sizeof(dummy));
208 vtest_read(vtest, &dummy, sizeof(dummy));
214 vtest_vcmd_protocol_version(struct vtest *vtest)
223 vtest_write(vtest, vtest_hdr, sizeof(vtest_hdr));
224 vtest_write(vtest, vcmd_protocol_version, sizeof(vcmd_protocol_version));
226 vtest_read(vtest, vtest_hdr, sizeof(vtest_hdr));
229 vtest_read(vtest, vcmd_protocol_version, sizeof(vcmd_protocol_version));
235 vtest_vcmd_get_param(struct vtest *vtest, enum vcmd_param param)
243 vtest_write(vtest, vtest_hdr, sizeof(vtest_hdr));
244 vtest_write(vtest, vcmd_get_param, sizeof(vcmd_get_param));
246 vtest_read(vtest, vtest_hdr, sizeof(vtest_hdr));
251 vtest_read(vtest, resp, sizeof(resp));
257 vtest_vcmd_get_capset(struct vtest *vtest,
270 vtest_write(vtest, vtest_hdr, sizeof(vtest_hdr));
271 vtest_write(vtest, vcmd_get_capset, sizeof(vcmd_get_capset));
273 vtest_read(vtest, vtest_hdr, sizeof(vtest_hdr));
277 vtest_read(vtest, &valid, sizeof(valid));
283 vtest_read(vtest, capset, read_size);
286 vtest_read(vtest, capset, capset_size);
292 vtest_read(vtest, temp, temp_size);
301 vtest_vcmd_context_init(struct vtest *vtest,
310 vtest_write(vtest, vtest_hdr, sizeof(vtest_hdr));
311 vtest_write(vtest, vcmd_context_init, sizeof(vcmd_context_init));
315 vtest_vcmd_resource_create_blob(struct vtest *vtest,
337 vtest_write(vtest, vtest_hdr, sizeof(vtest_hdr));
338 vtest_write(vtest, vcmd_res_create_blob, sizeof(vcmd_res_create_blob));
340 vtest_read(vtest, vtest_hdr, sizeof(vtest_hdr));
345 vtest_read(vtest, &res_id, sizeof(res_id));
347 *res_fd = vtest_receive_fd(vtest);
353 vtest_vcmd_resource_unref(struct vtest *vtest, uint32_t res_id)
362 vtest_write(vtest, vtest_hdr, sizeof(vtest_hdr));
363 vtest_write(vtest, vcmd_res_unref, sizeof(vcmd_res_unref));
367 vtest_vcmd_sync_create(struct vtest *vtest, uint64_t initial_val)
379 vtest_write(vtest, vtest_hdr, sizeof(vtest_hdr));
380 vtest_write(vtest, vcmd_sync_create, sizeof(vcmd_sync_create));
382 vtest_read(vtest, vtest_hdr, sizeof(vtest_hdr));
387 vtest_read(vtest, &sync_id, sizeof(sync_id));
393 vtest_vcmd_sync_unref(struct vtest *vtest, uint32_t sync_id)
402 vtest_write(vtest, vtest_hdr, sizeof(vtest_hdr));
403 vtest_write(vtest, vcmd_sync_unref, sizeof(vcmd_sync_unref));
407 vtest_vcmd_sync_read(struct vtest *vtest, uint32_t sync_id)
417 vtest_write(vtest, vtest_hdr, sizeof(vtest_hdr));
418 vtest_write(vtest, vcmd_sync_read, sizeof(vcmd_sync_read));
420 vtest_read(vtest, vtest_hdr, sizeof(vtest_hdr));
425 vtest_read(vtest, &val, sizeof(val));
431 vtest_vcmd_sync_write(struct vtest *vtest, uint32_t sync_id, uint64_t val)
443 vtest_write(vtest, vtest_hdr, sizeof(vtest_hdr));
444 vtest_write(vtest, vcmd_sync_write, sizeof(vcmd_sync_write));
448 vtest_vcmd_sync_wait(struct vtest *vtest,
463 vtest_write(vtest, vtest_hdr, sizeof(vtest_hdr));
464 vtest_write(vtest, &flags, sizeof(flags));
465 vtest_write(vtest, &timeout, sizeof(timeout));
473 vtest_write(vtest, sync, sizeof(sync));
476 vtest_read(vtest, vtest_hdr, sizeof(vtest_hdr));
480 return vtest_receive_fd(vtest);
514 vtest_vcmd_submit_cmd2(struct vtest *vtest,
528 vtest_write(vtest, vtest_hdr, sizeof(vtest_hdr));
534 vtest_write(vtest, &batch_count, sizeof(batch_count));
548 vtest_write(vtest, &dst, sizeof(dst));
560 vtest_write(vtest, batch->cs_data, batch->cs_size);
575 vtest_write(vtest, sync, sizeof(sync));
585 struct vtest *vtest = (struct vtest *)renderer;
588 mtx_lock(&vtest->sock_mutex);
589 vtest_vcmd_sync_write(vtest, sync->base.sync_id, val);
590 mtx_unlock(&vtest->sock_mutex);
600 struct vtest *vtest = (struct vtest *)renderer;
603 mtx_lock(&vtest->sock_mutex);
604 *val = vtest_vcmd_sync_read(vtest, sync->base.sync_id);
605 mtx_unlock(&vtest->sock_mutex);
623 struct vtest *vtest = (struct vtest *)renderer;
626 mtx_lock(&vtest->sock_mutex);
627 vtest_vcmd_sync_unref(vtest, sync->base.sync_id);
628 mtx_unlock(&vtest->sock_mutex);
639 struct vtest *vtest = (struct vtest *)renderer;
645 mtx_lock(&vtest->sock_mutex);
646 sync->base.sync_id = vtest_vcmd_sync_create(vtest, initial_val);
647 mtx_unlock(&vtest->sock_mutex);
674 struct vtest *vtest = (struct vtest *)renderer;
683 * check for VCMD_PARAM_HOST_COHERENT_DMABUF_BLOB, we know vtest can
689 vn_log(vtest->instance, "failed to mmap %d of size %zu rw: %s",
716 struct vtest *vtest = (struct vtest *)renderer;
724 mtx_lock(&vtest->sock_mutex);
725 vtest_vcmd_resource_unref(vtest, bo->base.res_id);
726 mtx_unlock(&vtest->sock_mutex);
755 struct vtest *vtest = (struct vtest *)renderer;
758 mtx_lock(&vtest->sock_mutex);
761 vtest, VCMD_BLOB_TYPE_HOST3D, blob_flags, size, mem_id, &res_fd);
763 mtx_unlock(&vtest->sock_mutex);
765 struct vtest_bo *bo = util_sparse_array_get(&vtest->bo_array, res_id);
785 struct vtest *vtest = (struct vtest *)renderer;
790 mtx_lock(&vtest->sock_mutex);
791 vtest_vcmd_resource_unref(vtest, shmem->base.res_id);
792 mtx_unlock(&vtest->sock_mutex);
799 struct vtest *vtest = (struct vtest *)renderer;
801 if (vn_renderer_shmem_cache_add(&vtest->shmem_cache, shmem))
804 vtest_shmem_destroy_now(&vtest->base, shmem);
810 struct vtest *vtest = (struct vtest *)renderer;
813 vn_renderer_shmem_cache_get(&vtest->shmem_cache, size);
819 mtx_lock(&vtest->sock_mutex);
822 vtest, vtest->shmem_blob_mem, VCMD_BLOB_FLAG_MAPPABLE, size, 0,
825 mtx_unlock(&vtest->sock_mutex);
831 mtx_lock(&vtest->sock_mutex);
832 vtest_vcmd_resource_unref(vtest, res_id);
833 mtx_unlock(&vtest->sock_mutex);
838 util_sparse_array_get(&vtest->shmem_array, res_id);
884 struct vtest *vtest = (struct vtest *)renderer;
893 * works because it uses virtio-gpu interrupts as a side channel. vtest
896 * virtio-gpu or vtest, we should also set up a 1-byte coherent memory that
900 mtx_lock(&vtest->sock_mutex);
902 vtest_vcmd_sync_wait(vtest, flags, poll_timeout, wait->syncs,
904 mtx_unlock(&vtest->sock_mutex);
916 struct vtest *vtest = (struct vtest *)renderer;
918 mtx_lock(&vtest->sock_mutex);
919 vtest_vcmd_submit_cmd2(vtest, submit);
920 mtx_unlock(&vtest->sock_mutex);
926 vtest_init_renderer_info(struct vtest *vtest)
928 struct vn_renderer_info *info = &vtest->base.info;
945 info->max_sync_queue_count = vtest->max_sync_queue_count;
947 const struct virgl_renderer_capset_venus *capset = &vtest->capset.data;
969 struct vtest *vtest = (struct vtest *)renderer;
971 vn_renderer_shmem_cache_fini(&vtest->shmem_cache);
973 if (vtest->sock_fd >= 0) {
974 shutdown(vtest->sock_fd, SHUT_RDWR);
975 close(vtest->sock_fd);
978 mtx_destroy(&vtest->sock_mutex);
979 util_sparse_array_finish(&vtest->shmem_array);
980 util_sparse_array_finish(&vtest->bo_array);
982 vk_free(alloc, vtest);
986 vtest_init_capset(struct vtest *vtest)
988 vtest->capset.id = VIRGL_RENDERER_CAPSET_VENUS;
989 vtest->capset.version = 0;
991 if (!vtest_vcmd_get_capset(vtest, vtest->capset.id, vtest->capset.version,
992 &vtest->capset.data,
993 sizeof(vtest->capset.data))) {
994 vn_log(vtest->instance, "no venus capset");
1002 vtest_init_params(struct vtest *vtest)
1005 vtest_vcmd_get_param(vtest, VCMD_PARAM_MAX_SYNC_QUEUE_COUNT);
1007 vn_log(vtest->instance, "no sync queue support");
1010 vtest->max_sync_queue_count = val;
1016 vtest_init_protocol_version(struct vtest *vtest)
1020 const uint32_t ver = vtest_vcmd_ping_protocol_version(vtest)
1021 ? vtest_vcmd_protocol_version(vtest)
1024 vn_log(vtest->instance, "vtest protocol version (%d) too old", ver);
1028 vtest->protocol_version = ver;
1034 vtest_init(struct vtest *vtest)
1036 util_sparse_array_init(&vtest->shmem_array, sizeof(struct vtest_shmem),
1038 util_sparse_array_init(&vtest->bo_array, sizeof(struct vtest_bo), 1024);
1040 mtx_init(&vtest->sock_mutex, mtx_plain);
1041 vtest->sock_fd =
1042 vtest_connect_socket(vtest->instance, VTEST_DEFAULT_SOCKET_NAME);
1043 if (vtest->sock_fd < 0)
1049 vtest_vcmd_create_renderer(vtest, renderer_name);
1051 VkResult result = vtest_init_protocol_version(vtest);
1053 result = vtest_init_params(vtest);
1055 result = vtest_init_capset(vtest);
1060 vtest->shmem_blob_mem = vtest->capset.data.supports_blob_id_0
1064 vn_renderer_shmem_cache_init(&vtest->shmem_cache, &vtest->base,
1067 vtest_vcmd_context_init(vtest, vtest->capset.id);
1069 vtest_init_renderer_info(vtest);
1071 vtest->base.ops.destroy = vtest_destroy;
1072 vtest->base.ops.submit = vtest_submit;
1073 vtest->base.ops.wait = vtest_wait;
1075 vtest->base.shmem_ops.create = vtest_shmem_create;
1076 vtest->base.shmem_ops.destroy = vtest_shmem_destroy;
1078 vtest->base.bo_ops.create_from_device_memory =
1080 vtest->base.bo_ops.create_from_dma_buf = NULL;
1081 vtest->base.bo_ops.destroy = vtest_bo_destroy;
1082 vtest->base.bo_ops.export_dma_buf = vtest_bo_export_dma_buf;
1083 vtest->base.bo_ops.map = vtest_bo_map;
1084 vtest->base.bo_ops.flush = vtest_bo_flush;
1085 vtest->base.bo_ops.invalidate = vtest_bo_invalidate;
1087 vtest->base.sync_ops.create = vtest_sync_create;
1088 vtest->base.sync_ops.create_from_syncobj = NULL;
1089 vtest->base.sync_ops.destroy = vtest_sync_destroy;
1090 vtest->base.sync_ops.export_syncobj = NULL;
1091 vtest->base.sync_ops.reset = vtest_sync_reset;
1092 vtest->base.sync_ops.read = vtest_sync_read;
1093 vtest->base.sync_ops.write = vtest_sync_write;
1103 struct vtest *vtest = vk_zalloc(alloc, sizeof(*vtest), VN_DEFAULT_ALIGN,
1105 if (!vtest)
1108 vtest->instance = instance;
1109 vtest->sock_fd = -1;
1111 VkResult result = vtest_init(vtest);
1113 vtest_destroy(&vtest->base, alloc);
1117 *renderer = &vtest->base;