Lines Matching refs:dev
59 void vhost_vq_setup(struct vdev_info *dev, struct vq_info *info) in vhost_vq_setup() argument
63 unsigned long long features = dev->vdev.features[0]; in vhost_vq_setup()
71 r = ioctl(dev->control, VHOST_SET_FEATURES, &features); in vhost_vq_setup()
74 r = ioctl(dev->control, VHOST_SET_VRING_NUM, &state); in vhost_vq_setup()
77 r = ioctl(dev->control, VHOST_SET_VRING_BASE, &state); in vhost_vq_setup()
79 r = ioctl(dev->control, VHOST_SET_VRING_ADDR, &addr); in vhost_vq_setup()
82 r = ioctl(dev->control, VHOST_SET_VRING_KICK, &file); in vhost_vq_setup()
85 r = ioctl(dev->control, VHOST_SET_VRING_CALL, &file); in vhost_vq_setup()
89 static void vq_info_add(struct vdev_info *dev, int num) in vq_info_add() argument
91 struct vq_info *info = &dev->vqs[dev->nvqs]; in vq_info_add()
93 info->idx = dev->nvqs; in vq_info_add()
101 info->vring.num, 4096, &dev->vdev, in vq_info_add()
106 vhost_vq_setup(dev, info); in vq_info_add()
107 dev->fds[info->idx].fd = info->call; in vq_info_add()
108 dev->fds[info->idx].events = POLLIN; in vq_info_add()
109 dev->nvqs++; in vq_info_add()
112 static void vdev_info_init(struct vdev_info* dev, unsigned long long features) in vdev_info_init() argument
115 memset(dev, 0, sizeof *dev); in vdev_info_init()
116 dev->vdev.features[0] = features; in vdev_info_init()
117 dev->vdev.features[1] = features >> 32; in vdev_info_init()
118 dev->buf_size = 1024; in vdev_info_init()
119 dev->buf = malloc(dev->buf_size); in vdev_info_init()
120 assert(dev->buf); in vdev_info_init()
121 dev->control = open("/dev/vhost-test", O_RDWR); in vdev_info_init()
122 assert(dev->control >= 0); in vdev_info_init()
123 r = ioctl(dev->control, VHOST_SET_OWNER, NULL); in vdev_info_init()
125 dev->mem = malloc(offsetof(struct vhost_memory, regions) + in vdev_info_init()
126 sizeof dev->mem->regions[0]); in vdev_info_init()
127 assert(dev->mem); in vdev_info_init()
128 memset(dev->mem, 0, offsetof(struct vhost_memory, regions) + in vdev_info_init()
129 sizeof dev->mem->regions[0]); in vdev_info_init()
130 dev->mem->nregions = 1; in vdev_info_init()
131 dev->mem->regions[0].guest_phys_addr = (long)dev->buf; in vdev_info_init()
132 dev->mem->regions[0].userspace_addr = (long)dev->buf; in vdev_info_init()
133 dev->mem->regions[0].memory_size = dev->buf_size; in vdev_info_init()
134 r = ioctl(dev->control, VHOST_SET_MEM_TABLE, dev->mem); in vdev_info_init()
142 static void wait_for_interrupt(struct vdev_info *dev) in wait_for_interrupt() argument
146 poll(dev->fds, dev->nvqs, -1); in wait_for_interrupt()
147 for (i = 0; i < dev->nvqs; ++i) in wait_for_interrupt()
148 if (dev->fds[i].revents & POLLIN) { in wait_for_interrupt()
149 read(dev->fds[i].fd, &val, sizeof val); in wait_for_interrupt()
153 static void run_test(struct vdev_info *dev, struct vq_info *vq, in run_test() argument
162 r = ioctl(dev->control, VHOST_TEST_RUN, &test); in run_test()
169 sg_init_one(&sl, dev->buf, dev->buf_size); in run_test()
171 dev->buf + started, in run_test()
196 wait_for_interrupt(dev); in run_test()
199 wait_for_interrupt(dev); in run_test()
203 r = ioctl(dev->control, VHOST_TEST_RUN, &test); in run_test()
253 struct vdev_info dev; in main() local
286 vdev_info_init(&dev, features); in main()
287 vq_info_add(&dev, 256); in main()
288 run_test(&dev, &dev.vqs[0], delayed, 0x100000); in main()