Lines Matching refs:dev
68 void vhost_vq_setup(struct vdev_info *dev, struct vq_info *info) in vhost_vq_setup() argument
72 unsigned long long features = dev->vdev.features; in vhost_vq_setup()
80 r = ioctl(dev->control, VHOST_SET_FEATURES, &features); in vhost_vq_setup()
83 r = ioctl(dev->control, VHOST_SET_VRING_NUM, &state); in vhost_vq_setup()
86 r = ioctl(dev->control, VHOST_SET_VRING_BASE, &state); in vhost_vq_setup()
88 r = ioctl(dev->control, VHOST_SET_VRING_ADDR, &addr); in vhost_vq_setup()
91 r = ioctl(dev->control, VHOST_SET_VRING_KICK, &file); in vhost_vq_setup()
94 r = ioctl(dev->control, VHOST_SET_VRING_CALL, &file); in vhost_vq_setup()
111 static void vq_info_add(struct vdev_info *dev, int num) in vq_info_add() argument
113 struct vq_info *info = &dev->vqs[dev->nvqs]; in vq_info_add()
115 info->idx = dev->nvqs; in vq_info_add()
120 vq_reset(info, num, &dev->vdev); in vq_info_add()
121 vhost_vq_setup(dev, info); in vq_info_add()
122 dev->fds[info->idx].fd = info->call; in vq_info_add()
123 dev->fds[info->idx].events = POLLIN; in vq_info_add()
124 dev->nvqs++; in vq_info_add()
127 static void vdev_info_init(struct vdev_info* dev, unsigned long long features) in vdev_info_init() argument
130 memset(dev, 0, sizeof *dev); in vdev_info_init()
131 dev->vdev.features = features; in vdev_info_init()
132 INIT_LIST_HEAD(&dev->vdev.vqs); in vdev_info_init()
133 spin_lock_init(&dev->vdev.vqs_list_lock); in vdev_info_init()
134 dev->buf_size = 1024; in vdev_info_init()
135 dev->buf = malloc(dev->buf_size); in vdev_info_init()
136 assert(dev->buf); in vdev_info_init()
137 dev->control = open("/dev/vhost-test", O_RDWR); in vdev_info_init()
138 assert(dev->control >= 0); in vdev_info_init()
139 r = ioctl(dev->control, VHOST_SET_OWNER, NULL); in vdev_info_init()
141 dev->mem = malloc(offsetof(struct vhost_memory, regions) + in vdev_info_init()
142 sizeof dev->mem->regions[0]); in vdev_info_init()
143 assert(dev->mem); in vdev_info_init()
144 memset(dev->mem, 0, offsetof(struct vhost_memory, regions) + in vdev_info_init()
145 sizeof dev->mem->regions[0]); in vdev_info_init()
146 dev->mem->nregions = 1; in vdev_info_init()
147 dev->mem->regions[0].guest_phys_addr = (long)dev->buf; in vdev_info_init()
148 dev->mem->regions[0].userspace_addr = (long)dev->buf; in vdev_info_init()
149 dev->mem->regions[0].memory_size = dev->buf_size; in vdev_info_init()
150 r = ioctl(dev->control, VHOST_SET_MEM_TABLE, dev->mem); in vdev_info_init()
158 static void wait_for_interrupt(struct vdev_info *dev) in wait_for_interrupt() argument
162 poll(dev->fds, dev->nvqs, -1); in wait_for_interrupt()
163 for (i = 0; i < dev->nvqs; ++i) in wait_for_interrupt()
164 if (dev->fds[i].revents & POLLIN) { in wait_for_interrupt()
165 read(dev->fds[i].fd, &val, sizeof val); in wait_for_interrupt()
169 static void run_test(struct vdev_info *dev, struct vq_info *vq, in run_test() argument
180 r = ioctl(dev->control, VHOST_TEST_RUN, &test); in run_test()
197 sg_init_one(&sl, dev->buf, dev->buf_size); in run_test()
199 dev->buf + started, in run_test()
222 r = ioctl(dev->control, VHOST_TEST_SET_BACKEND, in run_test()
236 vq_reset(vq, vq->vring.num, &dev->vdev); in run_test()
238 r = ioctl(dev->control, VHOST_GET_VRING_BASE, in run_test()
243 r = ioctl(dev->control, VHOST_SET_VRING_BASE, in run_test()
247 r = ioctl(dev->control, VHOST_TEST_SET_BACKEND, in run_test()
264 wait_for_interrupt(dev); in run_test()
267 wait_for_interrupt(dev); in run_test()
271 r = ioctl(dev->control, VHOST_TEST_RUN, &test); in run_test()
346 struct vdev_info dev; in main() local
399 vdev_info_init(&dev, features); in main()
400 vq_info_add(&dev, 256); in main()
401 run_test(&dev, &dev.vqs[0], delayed, batch, reset, 0x100000); in main()