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