Lines Matching full:vdev
41 static int vfio_platform_set_irq_mask(struct vfio_platform_device *vdev, in vfio_platform_set_irq_mask() argument
49 if (!(vdev->irqs[index].flags & VFIO_IRQ_INFO_MASKABLE)) in vfio_platform_set_irq_mask()
56 return vfio_virqfd_enable((void *) &vdev->irqs[index], in vfio_platform_set_irq_mask()
59 &vdev->irqs[index].mask, fd); in vfio_platform_set_irq_mask()
61 vfio_virqfd_disable(&vdev->irqs[index].mask); in vfio_platform_set_irq_mask()
66 vfio_platform_mask(&vdev->irqs[index]); in vfio_platform_set_irq_mask()
72 vfio_platform_mask(&vdev->irqs[index]); in vfio_platform_set_irq_mask()
101 static int vfio_platform_set_irq_unmask(struct vfio_platform_device *vdev, in vfio_platform_set_irq_unmask() argument
109 if (!(vdev->irqs[index].flags & VFIO_IRQ_INFO_MASKABLE)) in vfio_platform_set_irq_unmask()
116 return vfio_virqfd_enable((void *) &vdev->irqs[index], in vfio_platform_set_irq_unmask()
119 &vdev->irqs[index].unmask, in vfio_platform_set_irq_unmask()
122 vfio_virqfd_disable(&vdev->irqs[index].unmask); in vfio_platform_set_irq_unmask()
127 vfio_platform_unmask(&vdev->irqs[index]); in vfio_platform_set_irq_unmask()
133 vfio_platform_unmask(&vdev->irqs[index]); in vfio_platform_set_irq_unmask()
182 static int vfio_set_trigger(struct vfio_platform_device *vdev, int index, in vfio_set_trigger() argument
185 struct vfio_platform_irq *irq = &vdev->irqs[index]; in vfio_set_trigger()
215 static int vfio_platform_set_irq_trigger(struct vfio_platform_device *vdev, in vfio_platform_set_irq_trigger() argument
220 struct vfio_platform_irq *irq = &vdev->irqs[index]; in vfio_platform_set_irq_trigger()
223 if (vdev->irqs[index].flags & VFIO_IRQ_INFO_AUTOMASKED) in vfio_platform_set_irq_trigger()
229 return vfio_set_trigger(vdev, index, -1); in vfio_platform_set_irq_trigger()
237 return vfio_set_trigger(vdev, index, fd); in vfio_platform_set_irq_trigger()
253 int vfio_platform_set_irqs_ioctl(struct vfio_platform_device *vdev, in vfio_platform_set_irqs_ioctl() argument
257 int (*func)(struct vfio_platform_device *vdev, unsigned index, in vfio_platform_set_irqs_ioctl()
266 if (IS_ERR(vdev->irqs[index].name)) in vfio_platform_set_irqs_ioctl()
267 return PTR_ERR(vdev->irqs[index].name); in vfio_platform_set_irqs_ioctl()
284 return func(vdev, index, start, count, flags, data); in vfio_platform_set_irqs_ioctl()
287 int vfio_platform_irq_init(struct vfio_platform_device *vdev) in vfio_platform_irq_init() argument
291 while (vdev->get_irq(vdev, cnt) >= 0) in vfio_platform_irq_init()
294 vdev->irqs = kcalloc(cnt, sizeof(struct vfio_platform_irq), in vfio_platform_irq_init()
296 if (!vdev->irqs) in vfio_platform_irq_init()
300 int hwirq = vdev->get_irq(vdev, i); in vfio_platform_irq_init()
308 spin_lock_init(&vdev->irqs[i].lock); in vfio_platform_irq_init()
310 vdev->irqs[i].flags = VFIO_IRQ_INFO_EVENTFD; in vfio_platform_irq_init()
313 vdev->irqs[i].flags |= VFIO_IRQ_INFO_MASKABLE in vfio_platform_irq_init()
318 vdev->irqs[i].count = 1; in vfio_platform_irq_init()
319 vdev->irqs[i].hwirq = hwirq; in vfio_platform_irq_init()
320 vdev->irqs[i].masked = false; in vfio_platform_irq_init()
321 vdev->irqs[i].name = kasprintf(GFP_KERNEL_ACCOUNT, in vfio_platform_irq_init()
323 vdev->name); in vfio_platform_irq_init()
324 if (!vdev->irqs[i].name) { in vfio_platform_irq_init()
330 vdev->irqs[i].name, &vdev->irqs[i]); in vfio_platform_irq_init()
332 kfree(vdev->irqs[i].name); in vfio_platform_irq_init()
333 vdev->irqs[i].name = ERR_PTR(ret); in vfio_platform_irq_init()
337 vdev->num_irqs = cnt; in vfio_platform_irq_init()
342 if (!IS_ERR(vdev->irqs[i].name)) { in vfio_platform_irq_init()
343 free_irq(vdev->irqs[i].hwirq, &vdev->irqs[i]); in vfio_platform_irq_init()
344 kfree(vdev->irqs[i].name); in vfio_platform_irq_init()
347 kfree(vdev->irqs); in vfio_platform_irq_init()
351 void vfio_platform_irq_cleanup(struct vfio_platform_device *vdev) in vfio_platform_irq_cleanup() argument
355 for (i = 0; i < vdev->num_irqs; i++) { in vfio_platform_irq_cleanup()
356 vfio_virqfd_disable(&vdev->irqs[i].mask); in vfio_platform_irq_cleanup()
357 vfio_virqfd_disable(&vdev->irqs[i].unmask); in vfio_platform_irq_cleanup()
358 if (!IS_ERR(vdev->irqs[i].name)) { in vfio_platform_irq_cleanup()
359 free_irq(vdev->irqs[i].hwirq, &vdev->irqs[i]); in vfio_platform_irq_cleanup()
360 if (vdev->irqs[i].trigger) in vfio_platform_irq_cleanup()
361 eventfd_ctx_put(vdev->irqs[i].trigger); in vfio_platform_irq_cleanup()
362 kfree(vdev->irqs[i].name); in vfio_platform_irq_cleanup()
366 vdev->num_irqs = 0; in vfio_platform_irq_cleanup()
367 kfree(vdev->irqs); in vfio_platform_irq_cleanup()