Lines Matching refs:pdev
80 struct pci_dev *tmp = NULL, *pdev = vdev->pdev; in vfio_pci_set_vga_decode() local
84 if (single_vga || !vfio_vga_disabled() || pci_is_root_bus(pdev->bus)) in vfio_pci_set_vga_decode()
88 max_busnr = pci_bus_max_busnr(pdev->bus); in vfio_pci_set_vga_decode()
92 if (tmp == pdev || in vfio_pci_set_vga_decode()
93 pci_domain_nr(tmp->bus) != pci_domain_nr(pdev->bus) || in vfio_pci_set_vga_decode()
97 if (tmp->bus->number >= pdev->bus->number && in vfio_pci_set_vga_decode()
108 static inline bool vfio_pci_is_vga(struct pci_dev *pdev) in vfio_pci_is_vga() argument
110 return (pdev->class >> 8) == PCI_CLASS_DISPLAY_VGA; in vfio_pci_is_vga()
117 struct pci_dev *pdev = vdev->pdev; in vfio_pci_enable() local
122 pci_set_power_state(pdev, PCI_D0); in vfio_pci_enable()
125 pci_clear_master(pdev); in vfio_pci_enable()
127 ret = pci_enable_device(pdev); in vfio_pci_enable()
131 vdev->reset_works = (pci_reset_function(pdev) == 0); in vfio_pci_enable()
132 pci_save_state(pdev); in vfio_pci_enable()
133 vdev->pci_saved_state = pci_store_saved_state(pdev); in vfio_pci_enable()
136 __func__, dev_name(&pdev->dev)); in vfio_pci_enable()
142 pci_disable_device(pdev); in vfio_pci_enable()
147 vdev->pci_2_3 = pci_intx_mask_supported(pdev); in vfio_pci_enable()
149 pci_read_config_word(pdev, PCI_COMMAND, &cmd); in vfio_pci_enable()
152 pci_write_config_word(pdev, PCI_COMMAND, cmd); in vfio_pci_enable()
155 msix_pos = pdev->msix_cap; in vfio_pci_enable()
160 pci_read_config_word(pdev, msix_pos + PCI_MSIX_FLAGS, &flags); in vfio_pci_enable()
161 pci_read_config_dword(pdev, msix_pos + PCI_MSIX_TABLE, &table); in vfio_pci_enable()
169 if (!vfio_vga_disabled() && vfio_pci_is_vga(pdev)) in vfio_pci_enable()
177 struct pci_dev *pdev = vdev->pdev; in vfio_pci_disable() local
181 pci_clear_master(pdev); in vfio_pci_disable()
194 pci_iounmap(pdev, vdev->barmap[bar]); in vfio_pci_disable()
195 pci_release_selected_regions(pdev, 1 << bar); in vfio_pci_disable()
207 if (pci_load_and_free_saved_state(pdev, &vdev->pci_saved_state)) { in vfio_pci_disable()
209 __func__, dev_name(&pdev->dev)); in vfio_pci_disable()
214 pci_save_state(pdev); in vfio_pci_disable()
221 pci_write_config_word(pdev, PCI_COMMAND, PCI_COMMAND_INTX_DISABLE); in vfio_pci_disable()
227 if (vdev->reset_works && !pci_try_reset_function(pdev)) in vfio_pci_disable()
230 pci_restore_state(pdev); in vfio_pci_disable()
232 pci_disable_device(pdev); in vfio_pci_disable()
237 pci_set_power_state(pdev, PCI_D3hot); in vfio_pci_disable()
247 vfio_spapr_pci_eeh_release(vdev->pdev); in vfio_pci_release()
271 vfio_spapr_pci_eeh_open(vdev->pdev); in vfio_pci_open()
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()
320 static int vfio_pci_count_devs(struct pci_dev *pdev, void *data) in vfio_pci_count_devs() argument
332 static int vfio_pci_fill_devs(struct pci_dev *pdev, void *data) in vfio_pci_fill_devs() argument
340 iommu_group = iommu_group_get(&pdev->dev); in vfio_pci_fill_devs()
345 fill->devices[fill->cur].segment = pci_domain_nr(pdev->bus); in vfio_pci_fill_devs()
346 fill->devices[fill->cur].bus = pdev->bus->number; in vfio_pci_fill_devs()
347 fill->devices[fill->cur].devfn = pdev->devfn; in vfio_pci_fill_devs()
363 static int vfio_pci_validate_devs(struct pci_dev *pdev, void *data) in vfio_pci_validate_devs() argument
369 group = iommu_group_get(&pdev->dev); in vfio_pci_validate_devs()
384 static bool vfio_pci_dev_below_slot(struct pci_dev *pdev, struct pci_slot *slot) in vfio_pci_dev_below_slot() argument
386 for (; pdev; pdev = pdev->bus->self) in vfio_pci_dev_below_slot()
387 if (pdev->bus == slot->bus) in vfio_pci_dev_below_slot()
388 return (pdev->slot == slot); in vfio_pci_dev_below_slot()
395 struct pci_dev *pdev; member
400 static int vfio_pci_walk_wrapper(struct pci_dev *pdev, void *data) in vfio_pci_walk_wrapper() argument
404 if (!walk->slot || vfio_pci_dev_below_slot(pdev, walk->pdev->slot)) in vfio_pci_walk_wrapper()
405 walk->ret = walk->fn(pdev, walk->data); in vfio_pci_walk_wrapper()
410 static int vfio_pci_for_each_slot_or_bus(struct pci_dev *pdev, in vfio_pci_for_each_slot_or_bus() argument
416 .fn = fn, .data = data, .pdev = pdev, .slot = slot, .ret = 0, in vfio_pci_for_each_slot_or_bus()
419 pci_walk_bus(pdev->bus, vfio_pci_walk_wrapper, &walk); in vfio_pci_for_each_slot_or_bus()
453 struct pci_dev *pdev = vdev->pdev; in vfio_pci_ioctl() local
467 info.size = pdev->cfg_size; in vfio_pci_ioctl()
473 info.size = pci_resource_len(pdev, info.index); in vfio_pci_ioctl()
482 pci_resource_flags(pdev, info.index) & in vfio_pci_ioctl()
495 info.size = pci_resource_len(pdev, info.index); in vfio_pci_ioctl()
500 io = pci_map_rom(pdev, &size); in vfio_pci_ioctl()
505 pci_unmap_rom(pdev, io); in vfio_pci_ioctl()
543 if (pci_is_pcie(vdev->pdev)) 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()
844 struct pci_dev *pdev = vdev->pdev; in vfio_pci_mmap() local
857 if (!(pci_resource_flags(pdev, index) & IORESOURCE_MEM)) in vfio_pci_mmap()
860 phys_len = pci_resource_len(pdev, index); in vfio_pci_mmap()
890 ret = pci_request_selected_regions(pdev, in vfio_pci_mmap()
895 vdev->barmap[index] = pci_iomap(pdev, index, 0); in vfio_pci_mmap()
900 vma->vm_pgoff = (pci_resource_start(pdev, index) >> PAGE_SHIFT) + pgoff; in vfio_pci_mmap()
914 dev_notice_ratelimited(&vdev->pdev->dev, in vfio_pci_request()
919 dev_warn(&vdev->pdev->dev, in vfio_pci_request()
937 static int vfio_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) in vfio_pci_probe() argument
943 if (pdev->hdr_type != PCI_HEADER_TYPE_NORMAL) in vfio_pci_probe()
946 group = iommu_group_get(&pdev->dev); in vfio_pci_probe()
956 vdev->pdev = pdev; in vfio_pci_probe()
961 ret = vfio_add_group_dev(&pdev->dev, &vfio_pci_ops, vdev); in vfio_pci_probe()
968 if (vfio_pci_is_vga(pdev)) { in vfio_pci_probe()
969 vga_client_register(pdev, vdev, NULL, vfio_pci_set_vga_decode); in vfio_pci_probe()
970 vga_set_legacy_decoding(pdev, in vfio_pci_probe()
984 pci_set_power_state(pdev, PCI_D0); in vfio_pci_probe()
985 pci_set_power_state(pdev, PCI_D3hot); in vfio_pci_probe()
991 static void vfio_pci_remove(struct pci_dev *pdev) in vfio_pci_remove() argument
995 vdev = vfio_del_group_dev(&pdev->dev); in vfio_pci_remove()
999 iommu_group_put(pdev->dev.iommu_group); in vfio_pci_remove()
1002 if (vfio_pci_is_vga(pdev)) { in vfio_pci_remove()
1003 vga_client_register(pdev, NULL, NULL, NULL); in vfio_pci_remove()
1004 vga_set_legacy_decoding(pdev, in vfio_pci_remove()
1010 pci_set_power_state(pdev, PCI_D0); in vfio_pci_remove()
1013 static pci_ers_result_t vfio_pci_aer_err_detected(struct pci_dev *pdev, in vfio_pci_aer_err_detected() argument
1019 device = vfio_device_get_from_dev(&pdev->dev); in vfio_pci_aer_err_detected()
1059 static int vfio_pci_get_devs(struct pci_dev *pdev, void *data) in vfio_pci_get_devs() argument
1067 device = vfio_device_get_from_dev(&pdev->dev); in vfio_pci_get_devs()
1071 if (pci_dev_driver(pdev) != &vfio_pci_driver) { in vfio_pci_get_devs()
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()
1136 pci_set_power_state(tmp->pdev, PCI_D3hot); in vfio_pci_try_bus_reset()