Lines Matching refs:vdev
49 static int vfio_platform_set_irq_mask(struct vfio_platform_device *vdev, in vfio_platform_set_irq_mask() argument
57 if (!(vdev->irqs[index].flags & VFIO_IRQ_INFO_MASKABLE)) in vfio_platform_set_irq_mask()
64 return vfio_virqfd_enable((void *) &vdev->irqs[index], in vfio_platform_set_irq_mask()
67 &vdev->irqs[index].mask, fd); in vfio_platform_set_irq_mask()
69 vfio_virqfd_disable(&vdev->irqs[index].mask); in vfio_platform_set_irq_mask()
74 vfio_platform_mask(&vdev->irqs[index]); in vfio_platform_set_irq_mask()
80 vfio_platform_mask(&vdev->irqs[index]); in vfio_platform_set_irq_mask()
109 static int vfio_platform_set_irq_unmask(struct vfio_platform_device *vdev, in vfio_platform_set_irq_unmask() argument
117 if (!(vdev->irqs[index].flags & VFIO_IRQ_INFO_MASKABLE)) in vfio_platform_set_irq_unmask()
124 return vfio_virqfd_enable((void *) &vdev->irqs[index], in vfio_platform_set_irq_unmask()
127 &vdev->irqs[index].unmask, in vfio_platform_set_irq_unmask()
130 vfio_virqfd_disable(&vdev->irqs[index].unmask); in vfio_platform_set_irq_unmask()
135 vfio_platform_unmask(&vdev->irqs[index]); in vfio_platform_set_irq_unmask()
141 vfio_platform_unmask(&vdev->irqs[index]); in vfio_platform_set_irq_unmask()
180 static int vfio_set_trigger(struct vfio_platform_device *vdev, int index, in vfio_set_trigger() argument
183 struct vfio_platform_irq *irq = &vdev->irqs[index]; in vfio_set_trigger()
199 irq->hwirq, vdev->name); in vfio_set_trigger()
226 static int vfio_platform_set_irq_trigger(struct vfio_platform_device *vdev, in vfio_platform_set_irq_trigger() argument
231 struct vfio_platform_irq *irq = &vdev->irqs[index]; in vfio_platform_set_irq_trigger()
234 if (vdev->irqs[index].flags & VFIO_IRQ_INFO_AUTOMASKED) in vfio_platform_set_irq_trigger()
240 return vfio_set_trigger(vdev, index, -1, handler); in vfio_platform_set_irq_trigger()
248 return vfio_set_trigger(vdev, index, fd, handler); in vfio_platform_set_irq_trigger()
264 int vfio_platform_set_irqs_ioctl(struct vfio_platform_device *vdev, in vfio_platform_set_irqs_ioctl() argument
268 int (*func)(struct vfio_platform_device *vdev, unsigned index, in vfio_platform_set_irqs_ioctl()
287 return func(vdev, index, start, count, flags, data); in vfio_platform_set_irqs_ioctl()
290 int vfio_platform_irq_init(struct vfio_platform_device *vdev) in vfio_platform_irq_init() argument
294 while (vdev->get_irq(vdev, cnt) >= 0) in vfio_platform_irq_init()
297 vdev->irqs = kcalloc(cnt, sizeof(struct vfio_platform_irq), GFP_KERNEL); in vfio_platform_irq_init()
298 if (!vdev->irqs) in vfio_platform_irq_init()
302 int hwirq = vdev->get_irq(vdev, i); in vfio_platform_irq_init()
307 spin_lock_init(&vdev->irqs[i].lock); in vfio_platform_irq_init()
309 vdev->irqs[i].flags = VFIO_IRQ_INFO_EVENTFD; in vfio_platform_irq_init()
312 vdev->irqs[i].flags |= VFIO_IRQ_INFO_MASKABLE in vfio_platform_irq_init()
315 vdev->irqs[i].count = 1; in vfio_platform_irq_init()
316 vdev->irqs[i].hwirq = hwirq; in vfio_platform_irq_init()
317 vdev->irqs[i].masked = false; in vfio_platform_irq_init()
320 vdev->num_irqs = cnt; in vfio_platform_irq_init()
324 kfree(vdev->irqs); in vfio_platform_irq_init()
328 void vfio_platform_irq_cleanup(struct vfio_platform_device *vdev) in vfio_platform_irq_cleanup() argument
332 for (i = 0; i < vdev->num_irqs; i++) in vfio_platform_irq_cleanup()
333 vfio_set_trigger(vdev, i, -1, NULL); in vfio_platform_irq_cleanup()
335 vdev->num_irqs = 0; in vfio_platform_irq_cleanup()
336 kfree(vdev->irqs); in vfio_platform_irq_cleanup()