Lines Matching defs:vs
61 #define DEV_SOFTC(vs) ((void *)(vs))
68 vi_softc_linkup(struct virtio_softc *vs, struct virtio_consts *vc,
74 /* vs and dev_softc addresses must match */
75 assert((void *)vs == dev_softc);
76 vs->vs_vc = vc;
77 vs->vs_pi = pi;
78 pi->pi_arg = vs;
80 vs->vs_queues = queues;
82 queues[i].vq_vs = vs;
97 vi_reset_dev(struct virtio_softc *vs)
102 if (vs->vs_mtx)
103 assert(pthread_mutex_isowned_np(vs->vs_mtx));
105 nvq = vs->vs_vc->vc_nvq;
106 for (vq = vs->vs_queues, i = 0; i < nvq; vq++, i++) {
114 vs->vs_negotiated_caps = 0;
115 vs->vs_curq = 0;
116 /* vs->vs_status = 0; -- redundant */
117 if (vs->vs_isr)
118 pci_lintr_deassert(vs->vs_pi);
119 vs->vs_isr = 0;
120 vs->vs_msix_cfg_idx = VIRTIO_MSI_NO_VECTOR;
127 vi_set_io_bar(struct virtio_softc *vs, int barnum)
135 size = VIRTIO_PCI_CONFIG_OFF(1) + vs->vs_vc->vc_cfgsize;
136 pci_emul_alloc_bar(vs->vs_pi, barnum, PCIBAR_IO, size);
147 vi_intr_init(struct virtio_softc *vs, int barnum, int use_msix)
152 vs->vs_flags |= VIRTIO_USE_MSIX;
153 VS_LOCK(vs);
154 vi_reset_dev(vs); /* set all vectors to NO_VECTOR */
155 VS_UNLOCK(vs);
156 nvec = vs->vs_vc->vc_nvq + 1;
157 if (pci_emul_add_msixcap(vs->vs_pi, nvec, barnum))
160 vs->vs_flags &= ~VIRTIO_USE_MSIX;
163 pci_emul_add_msicap(vs->vs_pi, 1);
166 pci_lintr_request(vs->vs_pi);
172 * Initialize the currently-selected virtio queue (vs->vs_curq).
177 vi_vq_init(struct virtio_softc *vs, uint32_t pfn)
184 vq = &vs->vs_queues[vs->vs_curq];
188 base = paddr_guest2host(vs->vs_pi->pi_vmctx, phys, size);
251 * at vs->vs_pi) so that it can find indirect descriptors.
279 struct virtio_softc *vs;
282 vs = vq->vq_vs;
283 name = vs->vs_vc->vc_name;
319 ctx = vs->vs_pi->pi_vmctx;
334 } else if ((vs->vs_vc->vc_hv_caps &
477 struct virtio_softc *vs;
490 vs = vq->vq_vs;
501 (vs->vs_negotiated_caps & VIRTIO_F_NOTIFY_ON_EMPTY))
503 else if (vs->vs_negotiated_caps & VIRTIO_RING_F_EVENT_IDX) {
516 vq_interrupt(vs, vq);
567 struct virtio_softc *vs = pi->pi_arg;
576 if (vs->vs_flags & VIRTIO_USE_MSIX) {
586 if (vs->vs_mtx)
587 pthread_mutex_lock(vs->vs_mtx);
589 vc = vs->vs_vc;
609 error = (*vc->vc_cfgread)(DEV_SOFTC(vs), newoff, size, &value);
637 value = vs->vs_negotiated_caps;
640 if (vs->vs_curq < vc->vc_nvq)
641 value = vs->vs_queues[vs->vs_curq].vq_pfn;
644 value = vs->vs_curq < vc->vc_nvq ?
645 vs->vs_queues[vs->vs_curq].vq_qsize : 0;
648 value = vs->vs_curq;
654 value = vs->vs_status;
657 value = vs->vs_isr;
658 vs->vs_isr = 0; /* a read clears this flag */
663 value = vs->vs_msix_cfg_idx;
666 value = vs->vs_curq < vc->vc_nvq ?
667 vs->vs_queues[vs->vs_curq].vq_msix_idx :
672 if (vs->vs_mtx)
673 pthread_mutex_unlock(vs->vs_mtx);
687 struct virtio_softc *vs = pi->pi_arg;
696 if (vs->vs_flags & VIRTIO_USE_MSIX) {
707 if (vs->vs_mtx)
708 pthread_mutex_lock(vs->vs_mtx);
710 vc = vs->vs_vc;
728 error = (*vc->vc_cfgwrite)(DEV_SOFTC(vs), newoff, size, value);
758 vs->vs_negotiated_caps = value & vc->vc_hv_caps;
760 (*vc->vc_apply_features)(DEV_SOFTC(vs),
761 vs->vs_negotiated_caps);
764 if (vs->vs_curq >= vc->vc_nvq)
766 vi_vq_init(vs, value);
774 vs->vs_curq = value;
782 vq = &vs->vs_queues[value];
784 (*vq->vq_notify)(DEV_SOFTC(vs), vq);
786 (*vc->vc_qnotify)(DEV_SOFTC(vs), vq);
793 vs->vs_status = value;
795 (*vc->vc_reset)(DEV_SOFTC(vs));
798 vs->vs_msix_cfg_idx = value;
801 if (vs->vs_curq >= vc->vc_nvq)
803 vq = &vs->vs_queues[vs->vs_curq];
812 name, cr->cr_name, vs->vs_curq, vc->vc_nvq);
814 if (vs->vs_mtx)
815 pthread_mutex_unlock(vs->vs_mtx);
822 struct virtio_softc *vs;
825 vs = pi->pi_arg;
826 vc = vs->vs_vc;
828 vc = vs->vs_vc;
830 (*vc->vc_pause)(DEV_SOFTC(vs));
838 struct virtio_softc *vs;
841 vs = pi->pi_arg;
842 vc = vs->vs_vc;
844 vc = vs->vs_vc;
846 (*vc->vc_resume)(DEV_SOFTC(vs));
852 vi_pci_snapshot_softc(struct virtio_softc *vs, struct vm_snapshot_meta *meta)
856 SNAPSHOT_VAR_OR_LEAVE(vs->vs_flags, meta, ret, done);
857 SNAPSHOT_VAR_OR_LEAVE(vs->vs_negotiated_caps, meta, ret, done);
858 SNAPSHOT_VAR_OR_LEAVE(vs->vs_curq, meta, ret, done);
859 SNAPSHOT_VAR_OR_LEAVE(vs->vs_status, meta, ret, done);
860 SNAPSHOT_VAR_OR_LEAVE(vs->vs_isr, meta, ret, done);
861 SNAPSHOT_VAR_OR_LEAVE(vs->vs_msix_cfg_idx, meta, ret, done);
881 vi_pci_snapshot_queues(struct virtio_softc *vs, struct vm_snapshot_meta *meta)
890 ctx = vs->vs_pi->pi_vmctx;
891 vc = vs->vs_vc;
895 vq = &vs->vs_queues[i];
936 struct virtio_softc *vs;
940 vs = pi->pi_arg;
941 vc = vs->vs_vc;
944 ret = vi_pci_snapshot_softc(vs, meta);
954 ret = vi_pci_snapshot_queues(vs, meta);
960 ret = (*vc->vc_snapshot)(DEV_SOFTC(vs), meta);