Lines Matching refs:ioeventfd

359 static void vfio_pci_ioeventfd_do_write(struct vfio_pci_ioeventfd *ioeventfd,  in vfio_pci_ioeventfd_do_write()  argument
362 switch (ioeventfd->count) { in vfio_pci_ioeventfd_do_write()
364 vfio_pci_iowrite8(ioeventfd->vdev, test_mem, in vfio_pci_ioeventfd_do_write()
365 ioeventfd->data, ioeventfd->addr); in vfio_pci_ioeventfd_do_write()
368 vfio_pci_iowrite16(ioeventfd->vdev, test_mem, in vfio_pci_ioeventfd_do_write()
369 ioeventfd->data, ioeventfd->addr); in vfio_pci_ioeventfd_do_write()
372 vfio_pci_iowrite32(ioeventfd->vdev, test_mem, in vfio_pci_ioeventfd_do_write()
373 ioeventfd->data, ioeventfd->addr); in vfio_pci_ioeventfd_do_write()
377 vfio_pci_iowrite64(ioeventfd->vdev, test_mem, in vfio_pci_ioeventfd_do_write()
378 ioeventfd->data, ioeventfd->addr); in vfio_pci_ioeventfd_do_write()
386 struct vfio_pci_ioeventfd *ioeventfd = opaque; in vfio_pci_ioeventfd_handler() local
387 struct vfio_pci_device *vdev = ioeventfd->vdev; in vfio_pci_ioeventfd_handler()
389 if (ioeventfd->test_mem) { in vfio_pci_ioeventfd_handler()
398 vfio_pci_ioeventfd_do_write(ioeventfd, false); in vfio_pci_ioeventfd_handler()
400 if (ioeventfd->test_mem) in vfio_pci_ioeventfd_handler()
408 struct vfio_pci_ioeventfd *ioeventfd = opaque; in vfio_pci_ioeventfd_thread() local
410 vfio_pci_ioeventfd_do_write(ioeventfd, ioeventfd->test_mem); in vfio_pci_ioeventfd_thread()
419 struct vfio_pci_ioeventfd *ioeventfd; in vfio_pci_ioeventfd() local
445 list_for_each_entry(ioeventfd, &vdev->ioeventfds_list, next) { in vfio_pci_ioeventfd()
446 if (ioeventfd->pos == pos && ioeventfd->bar == bar && in vfio_pci_ioeventfd()
447 ioeventfd->data == data && ioeventfd->count == count) { in vfio_pci_ioeventfd()
449 vfio_virqfd_disable(&ioeventfd->virqfd); in vfio_pci_ioeventfd()
450 list_del(&ioeventfd->next); in vfio_pci_ioeventfd()
452 kfree(ioeventfd); in vfio_pci_ioeventfd()
471 ioeventfd = kzalloc(sizeof(*ioeventfd), GFP_KERNEL); in vfio_pci_ioeventfd()
472 if (!ioeventfd) { in vfio_pci_ioeventfd()
477 ioeventfd->vdev = vdev; in vfio_pci_ioeventfd()
478 ioeventfd->addr = vdev->barmap[bar] + pos; in vfio_pci_ioeventfd()
479 ioeventfd->data = data; in vfio_pci_ioeventfd()
480 ioeventfd->pos = pos; in vfio_pci_ioeventfd()
481 ioeventfd->bar = bar; in vfio_pci_ioeventfd()
482 ioeventfd->count = count; in vfio_pci_ioeventfd()
483 ioeventfd->test_mem = vdev->pdev->resource[bar].flags & IORESOURCE_MEM; in vfio_pci_ioeventfd()
485 ret = vfio_virqfd_enable(ioeventfd, vfio_pci_ioeventfd_handler, in vfio_pci_ioeventfd()
487 &ioeventfd->virqfd, fd); in vfio_pci_ioeventfd()
489 kfree(ioeventfd); in vfio_pci_ioeventfd()
493 list_add(&ioeventfd->next, &vdev->ioeventfds_list); in vfio_pci_ioeventfd()