Lines Matching refs:vdev

42 static void vfio_pci_try_bus_reset(struct vfio_pci_device *vdev);
44 static int vfio_pci_enable(struct vfio_pci_device *vdev)
46 struct pci_dev *pdev = vdev->pdev;
58 vdev->reset_works = (pci_reset_function(pdev) == 0);
60 vdev->pci_saved_state = pci_store_saved_state(pdev);
61 if (!vdev->pci_saved_state)
65 ret = vfio_config_init(vdev);
67 kfree(vdev->pci_saved_state);
68 vdev->pci_saved_state = NULL;
74 vdev->pci_2_3 = pci_intx_mask_supported(pdev);
77 if (vdev->pci_2_3 && (cmd & PCI_COMMAND_INTX_DISABLE)) {
90 vdev->msix_bar = table & PCI_MSIX_TABLE_BIR;
91 vdev->msix_offset = table & PCI_MSIX_TABLE_OFFSET;
92 vdev->msix_size = ((flags & PCI_MSIX_FLAGS_QSIZE) + 1) * 16;
94 vdev->msix_bar = 0xFF;
98 vdev->has_vga = true;
104 static void vfio_pci_disable(struct vfio_pci_device *vdev)
106 struct pci_dev *pdev = vdev->pdev;
112 vfio_pci_set_irqs_ioctl(vdev, VFIO_IRQ_SET_DATA_NONE |
114 vdev->irq_type, 0, 0, NULL);
116 vdev->virq_disabled = false;
118 vfio_config_free(vdev);
121 if (!vdev->barmap[bar])
123 pci_iounmap(pdev, vdev->barmap[bar]);
125 vdev->barmap[bar] = NULL;
128 vdev->needs_reset = true;
136 if (pci_load_and_free_saved_state(pdev, &vdev->pci_saved_state)) {
140 if (!vdev->reset_works)
156 if (vdev->reset_works) {
162 vdev->needs_reset = false;
169 vfio_pci_try_bus_reset(vdev);
174 struct vfio_pci_device *vdev = device_data;
178 if (!(--vdev->refcnt)) {
179 vfio_spapr_pci_eeh_release(vdev->pdev);
180 vfio_pci_disable(vdev);
190 struct vfio_pci_device *vdev = device_data;
198 if (!vdev->refcnt) {
199 ret = vfio_pci_enable(vdev);
203 vfio_spapr_pci_eeh_open(vdev->pdev);
205 vdev->refcnt++;
213 static int vfio_pci_get_irq_count(struct vfio_pci_device *vdev, int irq_type)
217 pci_read_config_byte(vdev->pdev, PCI_INTERRUPT_PIN, &pin);
225 pos = vdev->pdev->msi_cap;
227 pci_read_config_word(vdev->pdev,
235 pos = vdev->pdev->msix_cap;
237 pci_read_config_word(vdev->pdev,
243 if (pci_is_pcie(vdev->pdev))
356 struct vfio_pci_device *vdev = device_data;
372 if (vdev->reset_works)
381 struct pci_dev *pdev = vdev->pdev;
438 if (!vdev->has_vga)
468 if (pci_is_pcie(vdev->pdev))
477 info.count = vfio_pci_get_irq_count(vdev, info.index);
504 int max = vfio_pci_get_irq_count(vdev, hdr.index);
523 mutex_lock(&vdev->igate);
525 ret = vfio_pci_set_irqs_ioctl(vdev, hdr.flags, hdr.index,
528 mutex_unlock(&vdev->igate);
534 return vdev->reset_works ?
535 pci_try_reset_function(vdev->pdev) : -EINVAL;
555 if (!pci_probe_reset_slot(vdev->pdev->slot))
557 else if (pci_probe_reset_bus(vdev->pdev->bus))
561 ret = vfio_pci_for_each_slot_or_bus(vdev->pdev,
585 ret = vfio_pci_for_each_slot_or_bus(vdev->pdev,
627 if (!pci_probe_reset_slot(vdev->pdev->slot))
629 else if (pci_probe_reset_bus(vdev->pdev->bus))
638 ret = vfio_pci_for_each_slot_or_bus(vdev->pdev,
700 ret = vfio_pci_for_each_slot_or_bus(vdev->pdev,
705 ret = slot ? pci_try_reset_slot(vdev->pdev->slot) :
706 pci_try_reset_bus(vdev->pdev->bus);
723 struct vfio_pci_device *vdev = device_data;
730 return vfio_pci_config_rw(vdev, buf, count, ppos, iswrite);
735 return vfio_pci_bar_rw(vdev, buf, count, ppos, false);
738 return vfio_pci_bar_rw(vdev, buf, count, ppos, iswrite);
741 return vfio_pci_vga_rw(vdev, buf, count, ppos, iswrite);
767 struct vfio_pci_device *vdev = device_data;
768 struct pci_dev *pdev = vdev->pdev;
793 if (index == vdev->msix_bar) {
804 if (!(req_start >= vdev->msix_offset + vdev->msix_size ||
805 req_start + req_len <= vdev->msix_offset))
813 if (!vdev->barmap[index]) {
819 vdev->barmap[index] = pci_iomap(pdev, index, 0);
822 vma->vm_private_data = vdev;
843 struct vfio_pci_device *vdev;
855 vdev = kzalloc(sizeof(*vdev), GFP_KERNEL);
856 if (!vdev) {
861 vdev->pdev = pdev;
862 vdev->irq_type = VFIO_PCI_NUM_IRQS;
863 mutex_init(&vdev->igate);
864 spin_lock_init(&vdev->irqlock);
866 ret = vfio_add_group_dev(&pdev->dev, &vfio_pci_ops, vdev);
869 kfree(vdev);
877 struct vfio_pci_device *vdev;
879 vdev = vfio_del_group_dev(&pdev->dev);
880 if (vdev) {
882 kfree(vdev);
889 struct vfio_pci_device *vdev;
896 vdev = vfio_device_data(device);
897 if (vdev == NULL) {
902 mutex_lock(&vdev->igate);
904 if (vdev->err_trigger)
905 eventfd_signal(vdev->err_trigger, 1);
907 mutex_unlock(&vdev->igate);
963 static void vfio_pci_try_bus_reset(struct vfio_pci_device *vdev)
970 if (!pci_probe_reset_slot(vdev->pdev->slot))
972 else if (pci_probe_reset_bus(vdev->pdev->bus))
975 if (vfio_pci_for_each_slot_or_bus(vdev->pdev, vfio_pci_count_devs,
984 if (vfio_pci_for_each_slot_or_bus(vdev->pdev,
997 ret = slot ? pci_try_reset_slot(vdev->pdev->slot) :
998 pci_try_reset_bus(vdev->pdev->bus);