Lines Matching refs:vdev
79 struct vfio_pci_device *vdev = opaque; in vfio_pci_set_vga_decode() local
80 struct pci_dev *tmp = NULL, *pdev = vdev->pdev; in vfio_pci_set_vga_decode()
113 static void vfio_pci_try_bus_reset(struct vfio_pci_device *vdev);
115 static int vfio_pci_enable(struct vfio_pci_device *vdev) in vfio_pci_enable() argument
117 struct pci_dev *pdev = vdev->pdev; in vfio_pci_enable()
131 vdev->reset_works = (pci_reset_function(pdev) == 0); in vfio_pci_enable()
133 vdev->pci_saved_state = pci_store_saved_state(pdev); in vfio_pci_enable()
134 if (!vdev->pci_saved_state) in vfio_pci_enable()
138 ret = vfio_config_init(vdev); in vfio_pci_enable()
140 kfree(vdev->pci_saved_state); in vfio_pci_enable()
141 vdev->pci_saved_state = NULL; in vfio_pci_enable()
147 vdev->pci_2_3 = pci_intx_mask_supported(pdev); in vfio_pci_enable()
150 if (vdev->pci_2_3 && (cmd & PCI_COMMAND_INTX_DISABLE)) { in vfio_pci_enable()
163 vdev->msix_bar = table & PCI_MSIX_TABLE_BIR; in vfio_pci_enable()
164 vdev->msix_offset = table & PCI_MSIX_TABLE_OFFSET; in vfio_pci_enable()
165 vdev->msix_size = ((flags & PCI_MSIX_FLAGS_QSIZE) + 1) * 16; in vfio_pci_enable()
167 vdev->msix_bar = 0xFF; in vfio_pci_enable()
170 vdev->has_vga = true; in vfio_pci_enable()
175 static void vfio_pci_disable(struct vfio_pci_device *vdev) in vfio_pci_disable() argument
177 struct pci_dev *pdev = vdev->pdev; in vfio_pci_disable()
183 vfio_pci_set_irqs_ioctl(vdev, VFIO_IRQ_SET_DATA_NONE | in vfio_pci_disable()
185 vdev->irq_type, 0, 0, NULL); in vfio_pci_disable()
187 vdev->virq_disabled = false; in vfio_pci_disable()
189 vfio_config_free(vdev); in vfio_pci_disable()
192 if (!vdev->barmap[bar]) in vfio_pci_disable()
194 pci_iounmap(pdev, vdev->barmap[bar]); in vfio_pci_disable()
196 vdev->barmap[bar] = NULL; in vfio_pci_disable()
199 vdev->needs_reset = true; in vfio_pci_disable()
207 if (pci_load_and_free_saved_state(pdev, &vdev->pci_saved_state)) { in vfio_pci_disable()
211 if (!vdev->reset_works) in vfio_pci_disable()
227 if (vdev->reset_works && !pci_try_reset_function(pdev)) in vfio_pci_disable()
228 vdev->needs_reset = false; in vfio_pci_disable()
234 vfio_pci_try_bus_reset(vdev); in vfio_pci_disable()
242 struct vfio_pci_device *vdev = device_data; in vfio_pci_release() local
246 if (!(--vdev->refcnt)) { in vfio_pci_release()
247 vfio_spapr_pci_eeh_release(vdev->pdev); in vfio_pci_release()
248 vfio_pci_disable(vdev); in vfio_pci_release()
258 struct vfio_pci_device *vdev = device_data; in vfio_pci_open() local
266 if (!vdev->refcnt) { in vfio_pci_open()
267 ret = vfio_pci_enable(vdev); in vfio_pci_open()
271 vfio_spapr_pci_eeh_open(vdev->pdev); in vfio_pci_open()
273 vdev->refcnt++; in vfio_pci_open()
281 static int vfio_pci_get_irq_count(struct vfio_pci_device *vdev, int irq_type) in vfio_pci_get_irq_count() argument
285 pci_read_config_byte(vdev->pdev, PCI_INTERRUPT_PIN, &pin); in vfio_pci_get_irq_count()
293 pos = vdev->pdev->msi_cap; in vfio_pci_get_irq_count()
295 pci_read_config_word(vdev->pdev, in vfio_pci_get_irq_count()
303 pos = vdev->pdev->msix_cap; in vfio_pci_get_irq_count()
305 pci_read_config_word(vdev->pdev, in vfio_pci_get_irq_count()
311 if (pci_is_pcie(vdev->pdev)) in vfio_pci_get_irq_count()
427 struct vfio_pci_device *vdev = device_data; in vfio_pci_ioctl() local
443 if (vdev->reset_works) in vfio_pci_ioctl()
453 struct pci_dev *pdev = vdev->pdev; in vfio_pci_ioctl()
511 if (!vdev->has_vga) in vfio_pci_ioctl()
543 if (pci_is_pcie(vdev->pdev)) in vfio_pci_ioctl()
552 info.count = vfio_pci_get_irq_count(vdev, info.index); in vfio_pci_ioctl()
580 int max = vfio_pci_get_irq_count(vdev, hdr.index); in vfio_pci_ioctl()
599 mutex_lock(&vdev->igate); in vfio_pci_ioctl()
601 ret = vfio_pci_set_irqs_ioctl(vdev, hdr.flags, hdr.index, in vfio_pci_ioctl()
604 mutex_unlock(&vdev->igate); in vfio_pci_ioctl()
610 return vdev->reset_works ? in vfio_pci_ioctl()
611 pci_try_reset_function(vdev->pdev) : -EINVAL; in vfio_pci_ioctl()
631 if (!pci_probe_reset_slot(vdev->pdev->slot)) in vfio_pci_ioctl()
633 else if (pci_probe_reset_bus(vdev->pdev->bus)) in vfio_pci_ioctl()
637 ret = vfio_pci_for_each_slot_or_bus(vdev->pdev, in vfio_pci_ioctl()
661 ret = vfio_pci_for_each_slot_or_bus(vdev->pdev, in vfio_pci_ioctl()
703 if (!pci_probe_reset_slot(vdev->pdev->slot)) in vfio_pci_ioctl()
705 else if (pci_probe_reset_bus(vdev->pdev->bus)) in vfio_pci_ioctl()
714 ret = vfio_pci_for_each_slot_or_bus(vdev->pdev, in vfio_pci_ioctl()
776 ret = vfio_pci_for_each_slot_or_bus(vdev->pdev, in vfio_pci_ioctl()
781 ret = slot ? pci_try_reset_slot(vdev->pdev->slot) : in vfio_pci_ioctl()
782 pci_try_reset_bus(vdev->pdev->bus); in vfio_pci_ioctl()
799 struct vfio_pci_device *vdev = device_data; in vfio_pci_rw() local
806 return vfio_pci_config_rw(vdev, buf, count, ppos, iswrite); in vfio_pci_rw()
811 return vfio_pci_bar_rw(vdev, buf, count, ppos, false); in vfio_pci_rw()
814 return vfio_pci_bar_rw(vdev, buf, count, ppos, iswrite); in vfio_pci_rw()
817 return vfio_pci_vga_rw(vdev, buf, count, ppos, iswrite); in vfio_pci_rw()
843 struct vfio_pci_device *vdev = device_data; in vfio_pci_mmap() local
844 struct pci_dev *pdev = vdev->pdev; in vfio_pci_mmap()
869 if (index == vdev->msix_bar) { in vfio_pci_mmap()
880 if (!(req_start >= vdev->msix_offset + vdev->msix_size || in vfio_pci_mmap()
881 req_start + req_len <= vdev->msix_offset)) in vfio_pci_mmap()
889 if (!vdev->barmap[index]) { in vfio_pci_mmap()
895 vdev->barmap[index] = pci_iomap(pdev, index, 0); in vfio_pci_mmap()
898 vma->vm_private_data = vdev; in vfio_pci_mmap()
908 struct vfio_pci_device *vdev = device_data; in vfio_pci_request() local
910 mutex_lock(&vdev->igate); in vfio_pci_request()
912 if (vdev->req_trigger) { in vfio_pci_request()
914 dev_notice_ratelimited(&vdev->pdev->dev, in vfio_pci_request()
917 eventfd_signal(vdev->req_trigger, 1); in vfio_pci_request()
919 dev_warn(&vdev->pdev->dev, in vfio_pci_request()
923 mutex_unlock(&vdev->igate); in vfio_pci_request()
939 struct vfio_pci_device *vdev; in vfio_pci_probe() local
950 vdev = kzalloc(sizeof(*vdev), GFP_KERNEL); in vfio_pci_probe()
951 if (!vdev) { in vfio_pci_probe()
956 vdev->pdev = pdev; in vfio_pci_probe()
957 vdev->irq_type = VFIO_PCI_NUM_IRQS; in vfio_pci_probe()
958 mutex_init(&vdev->igate); in vfio_pci_probe()
959 spin_lock_init(&vdev->irqlock); in vfio_pci_probe()
961 ret = vfio_add_group_dev(&pdev->dev, &vfio_pci_ops, vdev); in vfio_pci_probe()
964 kfree(vdev); in vfio_pci_probe()
969 vga_client_register(pdev, vdev, NULL, vfio_pci_set_vga_decode); in vfio_pci_probe()
971 vfio_pci_set_vga_decode(vdev, false)); in vfio_pci_probe()
993 struct vfio_pci_device *vdev; in vfio_pci_remove() local
995 vdev = vfio_del_group_dev(&pdev->dev); in vfio_pci_remove()
996 if (!vdev) in vfio_pci_remove()
1000 kfree(vdev); in vfio_pci_remove()
1016 struct vfio_pci_device *vdev; in vfio_pci_aer_err_detected() local
1023 vdev = vfio_device_data(device); in vfio_pci_aer_err_detected()
1024 if (vdev == NULL) { in vfio_pci_aer_err_detected()
1029 mutex_lock(&vdev->igate); in vfio_pci_aer_err_detected()
1031 if (vdev->err_trigger) in vfio_pci_aer_err_detected()
1032 eventfd_signal(vdev->err_trigger, 1); in vfio_pci_aer_err_detected()
1034 mutex_unlock(&vdev->igate); in vfio_pci_aer_err_detected()
1092 static void vfio_pci_try_bus_reset(struct vfio_pci_device *vdev) in vfio_pci_try_bus_reset() argument
1099 if (!pci_probe_reset_slot(vdev->pdev->slot)) in vfio_pci_try_bus_reset()
1101 else if (pci_probe_reset_bus(vdev->pdev->bus)) in vfio_pci_try_bus_reset()
1104 if (vfio_pci_for_each_slot_or_bus(vdev->pdev, vfio_pci_count_devs, in vfio_pci_try_bus_reset()
1113 if (vfio_pci_for_each_slot_or_bus(vdev->pdev, in vfio_pci_try_bus_reset()
1126 ret = slot ? pci_try_reset_slot(vdev->pdev->slot) : in vfio_pci_try_bus_reset()
1127 pci_try_reset_bus(vdev->pdev->bus); in vfio_pci_try_bus_reset()