Lines Matching refs:dev
177 int uml_vfio_user_setup_device(struct uml_vfio_user_device *dev, in uml_vfio_user_setup_device() argument
184 dev->device = ioctl(group, VFIO_GROUP_GET_DEVICE_FD, device); in uml_vfio_user_setup_device()
185 if (dev->device < 0) in uml_vfio_user_setup_device()
188 if (ioctl(dev->device, VFIO_DEVICE_GET_INFO, &device_info) < 0) { in uml_vfio_user_setup_device()
193 dev->num_regions = device_info.num_regions; in uml_vfio_user_setup_device()
194 if (dev->num_regions > VFIO_PCI_CONFIG_REGION_INDEX + 1) in uml_vfio_user_setup_device()
195 dev->num_regions = VFIO_PCI_CONFIG_REGION_INDEX + 1; in uml_vfio_user_setup_device()
197 dev->region = uml_kmalloc(sizeof(*dev->region) * dev->num_regions, in uml_vfio_user_setup_device()
199 if (!dev->region) { in uml_vfio_user_setup_device()
204 for (i = 0; i < dev->num_regions; i++) { in uml_vfio_user_setup_device()
209 if (ioctl(dev->device, VFIO_DEVICE_GET_REGION_INFO, ®ion) < 0) { in uml_vfio_user_setup_device()
213 dev->region[i].size = region.size; in uml_vfio_user_setup_device()
214 dev->region[i].offset = region.offset; in uml_vfio_user_setup_device()
219 if (ioctl(dev->device, VFIO_DEVICE_GET_IRQ_INFO, &irq_info) < 0) { in uml_vfio_user_setup_device()
224 dev->irq_count = irq_info.count; in uml_vfio_user_setup_device()
226 dev->irqfd = uml_kmalloc(sizeof(int) * dev->irq_count, UM_GFP_KERNEL); in uml_vfio_user_setup_device()
227 if (!dev->irqfd) { in uml_vfio_user_setup_device()
232 memset(dev->irqfd, -1, sizeof(int) * dev->irq_count); in uml_vfio_user_setup_device()
234 err = vfio_set_irqs(dev->device, 0, dev->irq_count, dev->irqfd); in uml_vfio_user_setup_device()
241 kfree(dev->irqfd); in uml_vfio_user_setup_device()
243 kfree(dev->region); in uml_vfio_user_setup_device()
245 close(dev->device); in uml_vfio_user_setup_device()
249 void uml_vfio_user_teardown_device(struct uml_vfio_user_device *dev) in uml_vfio_user_teardown_device() argument
251 kfree(dev->irqfd); in uml_vfio_user_teardown_device()
252 kfree(dev->region); in uml_vfio_user_teardown_device()
253 close(dev->device); in uml_vfio_user_teardown_device()
256 int uml_vfio_user_activate_irq(struct uml_vfio_user_device *dev, int index) in uml_vfio_user_activate_irq() argument
264 dev->irqfd[index] = irqfd; in uml_vfio_user_activate_irq()
268 void uml_vfio_user_deactivate_irq(struct uml_vfio_user_device *dev, int index) in uml_vfio_user_deactivate_irq() argument
270 close(dev->irqfd[index]); in uml_vfio_user_deactivate_irq()
271 dev->irqfd[index] = -1; in uml_vfio_user_deactivate_irq()
274 int uml_vfio_user_update_irqs(struct uml_vfio_user_device *dev) in uml_vfio_user_update_irqs() argument
276 return vfio_set_irqs(dev->device, 0, dev->irq_count, dev->irqfd); in uml_vfio_user_update_irqs()
279 static int vfio_region_read(struct uml_vfio_user_device *dev, unsigned int index, in vfio_region_read() argument
282 if (index >= dev->num_regions || offset + size > dev->region[index].size) in vfio_region_read()
285 if (pread(dev->device, buf, size, dev->region[index].offset + offset) < 0) in vfio_region_read()
291 static int vfio_region_write(struct uml_vfio_user_device *dev, unsigned int index, in vfio_region_write() argument
294 if (index >= dev->num_regions || offset + size > dev->region[index].size) in vfio_region_write()
297 if (pwrite(dev->device, buf, size, dev->region[index].offset + offset) < 0) in vfio_region_write()
303 int uml_vfio_user_cfgspace_read(struct uml_vfio_user_device *dev, in uml_vfio_user_cfgspace_read() argument
306 return vfio_region_read(dev, VFIO_PCI_CONFIG_REGION_INDEX, in uml_vfio_user_cfgspace_read()
310 int uml_vfio_user_cfgspace_write(struct uml_vfio_user_device *dev, in uml_vfio_user_cfgspace_write() argument
313 return vfio_region_write(dev, VFIO_PCI_CONFIG_REGION_INDEX, in uml_vfio_user_cfgspace_write()
317 int uml_vfio_user_bar_read(struct uml_vfio_user_device *dev, int bar, in uml_vfio_user_bar_read() argument
320 return vfio_region_read(dev, bar, offset, buf, size); in uml_vfio_user_bar_read()
323 int uml_vfio_user_bar_write(struct uml_vfio_user_device *dev, int bar, in uml_vfio_user_bar_write() argument
326 return vfio_region_write(dev, bar, offset, buf, size); in uml_vfio_user_bar_write()