Lines Matching refs:vp_dev
30 struct virtio_pci_device *vp_dev = to_vp_device(vdev); in vp_disable_cbs() local
33 if (vp_dev->intx_enabled) { in vp_disable_cbs()
40 WRITE_ONCE(vp_dev->intx_soft_enabled, false); in vp_disable_cbs()
41 synchronize_irq(vp_dev->pci_dev->irq); in vp_disable_cbs()
44 for (i = 0; i < vp_dev->msix_vectors; ++i) in vp_disable_cbs()
45 disable_irq(pci_irq_vector(vp_dev->pci_dev, i)); in vp_disable_cbs()
51 struct virtio_pci_device *vp_dev = to_vp_device(vdev); in vp_enable_cbs() local
54 if (vp_dev->intx_enabled) { in vp_enable_cbs()
55 disable_irq(vp_dev->pci_dev->irq); in vp_enable_cbs()
60 WRITE_ONCE(vp_dev->intx_soft_enabled, true); in vp_enable_cbs()
61 enable_irq(vp_dev->pci_dev->irq); in vp_enable_cbs()
65 for (i = 0; i < vp_dev->msix_vectors; ++i) in vp_enable_cbs()
66 enable_irq(pci_irq_vector(vp_dev->pci_dev, i)); in vp_enable_cbs()
81 struct virtio_pci_device *vp_dev = opaque; in vp_config_changed() local
83 virtio_config_changed(&vp_dev->vdev); in vp_config_changed()
90 struct virtio_pci_device *vp_dev = opaque; in vp_vring_interrupt() local
95 spin_lock_irqsave(&vp_dev->lock, flags); in vp_vring_interrupt()
96 list_for_each_entry(info, &vp_dev->virtqueues, node) { in vp_vring_interrupt()
100 spin_unlock_irqrestore(&vp_dev->lock, flags); in vp_vring_interrupt()
113 struct virtio_pci_device *vp_dev = opaque; in vp_interrupt() local
116 if (!READ_ONCE(vp_dev->intx_soft_enabled)) in vp_interrupt()
121 isr = ioread8(vp_dev->isr); in vp_interrupt()
137 struct virtio_pci_device *vp_dev = to_vp_device(vdev); in vp_request_msix_vectors() local
138 const char *name = dev_name(&vp_dev->vdev.dev); in vp_request_msix_vectors()
143 vp_dev->msix_vectors = nvectors; in vp_request_msix_vectors()
145 vp_dev->msix_names = kmalloc_array(nvectors, in vp_request_msix_vectors()
146 sizeof(*vp_dev->msix_names), in vp_request_msix_vectors()
148 if (!vp_dev->msix_names) in vp_request_msix_vectors()
150 vp_dev->msix_affinity_masks in vp_request_msix_vectors()
151 = kcalloc(nvectors, sizeof(*vp_dev->msix_affinity_masks), in vp_request_msix_vectors()
153 if (!vp_dev->msix_affinity_masks) in vp_request_msix_vectors()
156 if (!alloc_cpumask_var(&vp_dev->msix_affinity_masks[i], in vp_request_msix_vectors()
165 err = pci_alloc_irq_vectors_affinity(vp_dev->pci_dev, nvectors, in vp_request_msix_vectors()
169 vp_dev->msix_enabled = 1; in vp_request_msix_vectors()
172 v = vp_dev->msix_used_vectors; in vp_request_msix_vectors()
173 snprintf(vp_dev->msix_names[v], sizeof *vp_dev->msix_names, in vp_request_msix_vectors()
175 err = request_irq(pci_irq_vector(vp_dev->pci_dev, v), in vp_request_msix_vectors()
177 vp_dev->msix_names[v], in vp_request_msix_vectors()
178 vp_dev); in vp_request_msix_vectors()
181 ++vp_dev->msix_used_vectors; in vp_request_msix_vectors()
183 v = vp_dev->config_vector(vp_dev, v); in vp_request_msix_vectors()
192 v = vp_dev->msix_used_vectors; in vp_request_msix_vectors()
193 snprintf(vp_dev->msix_names[v], sizeof *vp_dev->msix_names, in vp_request_msix_vectors()
195 err = request_irq(pci_irq_vector(vp_dev->pci_dev, v), in vp_request_msix_vectors()
197 vp_dev->msix_names[v], in vp_request_msix_vectors()
198 vp_dev); in vp_request_msix_vectors()
201 ++vp_dev->msix_used_vectors; in vp_request_msix_vectors()
214 struct virtio_pci_device *vp_dev = to_vp_device(vdev); in vp_setup_vq() local
223 vq = vp_dev->setup_vq(vp_dev, info, index, callback, name, ctx, in vp_setup_vq()
230 spin_lock_irqsave(&vp_dev->lock, flags); in vp_setup_vq()
231 list_add(&info->node, &vp_dev->virtqueues); in vp_setup_vq()
232 spin_unlock_irqrestore(&vp_dev->lock, flags); in vp_setup_vq()
237 vp_dev->vqs[index] = info; in vp_setup_vq()
247 struct virtio_pci_device *vp_dev = to_vp_device(vq->vdev); in vp_del_vq() local
248 struct virtio_pci_vq_info *info = vp_dev->vqs[vq->index]; in vp_del_vq()
251 spin_lock_irqsave(&vp_dev->lock, flags); in vp_del_vq()
253 spin_unlock_irqrestore(&vp_dev->lock, flags); in vp_del_vq()
255 vp_dev->del_vq(info); in vp_del_vq()
262 struct virtio_pci_device *vp_dev = to_vp_device(vdev); in vp_del_vqs() local
267 if (vp_dev->per_vq_vectors) { in vp_del_vqs()
268 int v = vp_dev->vqs[vq->index]->msix_vector; in vp_del_vqs()
271 int irq = pci_irq_vector(vp_dev->pci_dev, v); in vp_del_vqs()
279 vp_dev->per_vq_vectors = false; in vp_del_vqs()
281 if (vp_dev->intx_enabled) { in vp_del_vqs()
282 free_irq(vp_dev->pci_dev->irq, vp_dev); in vp_del_vqs()
283 vp_dev->intx_enabled = 0; in vp_del_vqs()
286 for (i = 0; i < vp_dev->msix_used_vectors; ++i) in vp_del_vqs()
287 free_irq(pci_irq_vector(vp_dev->pci_dev, i), vp_dev); in vp_del_vqs()
289 if (vp_dev->msix_affinity_masks) { in vp_del_vqs()
290 for (i = 0; i < vp_dev->msix_vectors; i++) in vp_del_vqs()
291 if (vp_dev->msix_affinity_masks[i]) in vp_del_vqs()
292 free_cpumask_var(vp_dev->msix_affinity_masks[i]); in vp_del_vqs()
295 if (vp_dev->msix_enabled) { in vp_del_vqs()
297 vp_dev->config_vector(vp_dev, VIRTIO_MSI_NO_VECTOR); in vp_del_vqs()
299 pci_free_irq_vectors(vp_dev->pci_dev); in vp_del_vqs()
300 vp_dev->msix_enabled = 0; in vp_del_vqs()
303 vp_dev->msix_vectors = 0; in vp_del_vqs()
304 vp_dev->msix_used_vectors = 0; in vp_del_vqs()
305 kfree(vp_dev->msix_names); in vp_del_vqs()
306 vp_dev->msix_names = NULL; in vp_del_vqs()
307 kfree(vp_dev->msix_affinity_masks); in vp_del_vqs()
308 vp_dev->msix_affinity_masks = NULL; in vp_del_vqs()
309 kfree(vp_dev->vqs); in vp_del_vqs()
310 vp_dev->vqs = NULL; in vp_del_vqs()
319 struct virtio_pci_device *vp_dev = to_vp_device(vdev); in vp_find_vqs_msix() local
323 vp_dev->vqs = kcalloc(nvqs, sizeof(*vp_dev->vqs), GFP_KERNEL); in vp_find_vqs_msix()
324 if (!vp_dev->vqs) in vp_find_vqs_msix()
343 vp_dev->per_vq_vectors = per_vq_vectors; in vp_find_vqs_msix()
344 allocated_vectors = vp_dev->msix_used_vectors; in vp_find_vqs_msix()
353 else if (vp_dev->per_vq_vectors) in vp_find_vqs_msix()
365 if (!vp_dev->per_vq_vectors || msix_vec == VIRTIO_MSI_NO_VECTOR) in vp_find_vqs_msix()
369 snprintf(vp_dev->msix_names[msix_vec], in vp_find_vqs_msix()
370 sizeof *vp_dev->msix_names, in vp_find_vqs_msix()
372 dev_name(&vp_dev->vdev.dev), names[i]); in vp_find_vqs_msix()
373 err = request_irq(pci_irq_vector(vp_dev->pci_dev, msix_vec), in vp_find_vqs_msix()
375 vp_dev->msix_names[msix_vec], in vp_find_vqs_msix()
391 struct virtio_pci_device *vp_dev = to_vp_device(vdev); in vp_find_vqs_intx() local
394 vp_dev->vqs = kcalloc(nvqs, sizeof(*vp_dev->vqs), GFP_KERNEL); in vp_find_vqs_intx()
395 if (!vp_dev->vqs) in vp_find_vqs_intx()
398 err = request_irq(vp_dev->pci_dev->irq, vp_interrupt, IRQF_SHARED, in vp_find_vqs_intx()
399 dev_name(&vdev->dev), vp_dev); in vp_find_vqs_intx()
403 vp_dev->intx_enabled = 1; in vp_find_vqs_intx()
404 vp_dev->per_vq_vectors = false; in vp_find_vqs_intx()
447 struct virtio_pci_device *vp_dev = to_vp_device(vdev); in vp_bus_name() local
449 return pci_name(vp_dev->pci_dev); in vp_bus_name()
460 struct virtio_pci_device *vp_dev = to_vp_device(vdev); in vp_set_vq_affinity() local
461 struct virtio_pci_vq_info *info = vp_dev->vqs[vq->index]; in vp_set_vq_affinity()
468 if (vp_dev->msix_enabled) { in vp_set_vq_affinity()
469 mask = vp_dev->msix_affinity_masks[info->msix_vector]; in vp_set_vq_affinity()
470 irq = pci_irq_vector(vp_dev->pci_dev, info->msix_vector); in vp_set_vq_affinity()
483 struct virtio_pci_device *vp_dev = to_vp_device(vdev); in vp_get_vq_affinity() local
485 if (!vp_dev->per_vq_vectors || in vp_get_vq_affinity()
486 vp_dev->vqs[index]->msix_vector == VIRTIO_MSI_NO_VECTOR) in vp_get_vq_affinity()
489 return pci_irq_get_affinity(vp_dev->pci_dev, in vp_get_vq_affinity()
490 vp_dev->vqs[index]->msix_vector); in vp_get_vq_affinity()
497 struct virtio_pci_device *vp_dev = pci_get_drvdata(pci_dev); in virtio_pci_freeze() local
500 ret = virtio_device_freeze(&vp_dev->vdev); in virtio_pci_freeze()
510 struct virtio_pci_device *vp_dev = pci_get_drvdata(pci_dev); in virtio_pci_restore() local
518 return virtio_device_restore(&vp_dev->vdev); in virtio_pci_restore()
538 struct virtio_pci_device *vp_dev = to_vp_device(vdev); in virtio_pci_release_dev() local
543 kfree(vp_dev); in virtio_pci_release_dev()
549 struct virtio_pci_device *vp_dev, *reg_dev = NULL; in virtio_pci_probe() local
553 vp_dev = kzalloc(sizeof(struct virtio_pci_device), GFP_KERNEL); in virtio_pci_probe()
554 if (!vp_dev) in virtio_pci_probe()
557 pci_set_drvdata(pci_dev, vp_dev); in virtio_pci_probe()
558 vp_dev->vdev.dev.parent = &pci_dev->dev; in virtio_pci_probe()
559 vp_dev->vdev.dev.release = virtio_pci_release_dev; in virtio_pci_probe()
560 vp_dev->pci_dev = pci_dev; in virtio_pci_probe()
561 INIT_LIST_HEAD(&vp_dev->virtqueues); in virtio_pci_probe()
562 spin_lock_init(&vp_dev->lock); in virtio_pci_probe()
570 rc = virtio_pci_legacy_probe(vp_dev); in virtio_pci_probe()
573 rc = virtio_pci_modern_probe(vp_dev); in virtio_pci_probe()
577 rc = virtio_pci_modern_probe(vp_dev); in virtio_pci_probe()
579 rc = virtio_pci_legacy_probe(vp_dev); in virtio_pci_probe()
586 vp_dev->is_legacy = vp_dev->ldev.ioaddr ? true : false; in virtio_pci_probe()
588 rc = register_virtio_device(&vp_dev->vdev); in virtio_pci_probe()
589 reg_dev = vp_dev; in virtio_pci_probe()
596 if (vp_dev->is_legacy) in virtio_pci_probe()
597 virtio_pci_legacy_remove(vp_dev); in virtio_pci_probe()
599 virtio_pci_modern_remove(vp_dev); in virtio_pci_probe()
604 put_device(&vp_dev->vdev.dev); in virtio_pci_probe()
606 kfree(vp_dev); in virtio_pci_probe()
612 struct virtio_pci_device *vp_dev = pci_get_drvdata(pci_dev); in virtio_pci_remove() local
613 struct device *dev = get_device(&vp_dev->vdev.dev); in virtio_pci_remove()
620 virtio_break_device(&vp_dev->vdev); in virtio_pci_remove()
624 unregister_virtio_device(&vp_dev->vdev); in virtio_pci_remove()
626 if (vp_dev->is_legacy) in virtio_pci_remove()
627 virtio_pci_legacy_remove(vp_dev); in virtio_pci_remove()
629 virtio_pci_modern_remove(vp_dev); in virtio_pci_remove()
637 struct virtio_pci_device *vp_dev = pci_get_drvdata(pci_dev); in virtio_pci_sriov_configure() local
638 struct virtio_device *vdev = &vp_dev->vdev; in virtio_pci_sriov_configure()