Lines Matching defs:vsc
242 virtio_pci_read_queue_size(struct virtio_softc *vsc, uint16_t idx)
244 struct virtio_pci_softc *sc = (struct virtio_pci_softc *)vsc;
259 virtio_pci_setup_queue(struct virtio_softc *vsc, struct virtqueue *vq,
262 struct virtio_pci_softc *sc = (struct virtio_pci_softc *)vsc;
286 virtio_pci_setup_intrs(struct virtio_softc *vsc)
288 struct virtio_pci_softc *sc = (struct virtio_pci_softc *)vsc;
294 for (i = 0; i < vsc->sc_nvqs; i++) {
295 unsigned vec = vsc->sc_vqs[i].vq_intr_vec;
298 if (vsc->sc_config_change)
303 virtio_pci_get_status(struct virtio_softc *vsc)
305 struct virtio_pci_softc *sc = (struct virtio_pci_softc *)vsc;
315 virtio_pci_set_status(struct virtio_softc *vsc, int status)
317 struct virtio_pci_softc *sc = (struct virtio_pci_softc *)vsc;
558 struct virtio_softc *vsc = &sc->sc_sc;
564 printf("%s: can't map i/o space\n", vsc->sc_dev.dv_xname);
571 vsc->sc_dev.dv_xname);
580 vsc->sc_dev.dv_xname);
593 struct virtio_softc *vsc = &sc->sc_sc;
620 vsc->sc_dmat = pa->pa_dmat;
641 vsc->sc_ops = &virtio_pci_ops;
642 flags = vsc->sc_dev.dv_cfdata->cf_flags;
663 virtio_device_reset(vsc);
664 virtio_set_status(vsc, VIRTIO_CONFIG_DEVICE_STATUS_ACK);
665 virtio_set_status(vsc, VIRTIO_CONFIG_DEVICE_STATUS_DRIVER);
669 vsc->sc_child = NULL;
671 if (vsc->sc_child == NULL) {
673 vsc->sc_dev.dv_xname);
676 if (vsc->sc_child == VIRTIO_CHILD_ERROR) {
678 vsc->sc_dev.dv_xname);
686 virtio_set_status(vsc, VIRTIO_CONFIG_DEVICE_STATUS_FAILED);
692 virtio_pci_attach_finish(struct virtio_softc *vsc,
695 struct virtio_pci_softc *sc = (struct virtio_pci_softc *)vsc;
715 vsc->sc_dev.dv_xname);
724 if (vsc->sc_ipl & IPL_MPSAFE)
727 vsc->sc_ipl | IPL_MPSAFE, ih_func, sc,
728 vsc->sc_child->dv_xname);
731 vsc->sc_dev.dv_xname);
739 printf("%s: %s\n", vsc->sc_dev.dv_xname, intrstr);
747 struct virtio_softc *vsc = &sc->sc_sc;
750 if (vsc->sc_child != 0 && vsc->sc_child != VIRTIO_CHILD_ERROR) {
751 r = config_detach(vsc->sc_child, flags);
755 KASSERT(vsc->sc_child == 0 || vsc->sc_child == VIRTIO_CHILD_ERROR);
756 KASSERT(vsc->sc_vqs == 0);
790 virtio_pci_negotiate_features(struct virtio_softc *vsc,
793 struct virtio_pci_softc *sc = (struct virtio_pci_softc *)vsc;
796 vsc->sc_active_features = 0;
802 if (!(vsc->sc_dev.dv_cfdata->cf_flags & VIRTIO_CF_NO_INDIRECT) &&
803 !(vsc->sc_child->dv_cfdata->cf_flags & VIRTIO_CF_NO_INDIRECT)) {
804 vsc->sc_driver_features |= VIRTIO_F_RING_INDIRECT_DESC;
813 if ((vsc->sc_driver_features & VIRTIO_F_RING_EVENT_IDX) &&
814 ((vsc->sc_dev.dv_cfdata->cf_flags & VIRTIO_CF_NO_EVENT_IDX) ||
815 (vsc->sc_child->dv_cfdata->cf_flags & VIRTIO_CF_NO_EVENT_IDX))) {
818 vsc->sc_driver_features &= ~VIRTIO_F_RING_EVENT_IDX;
821 if (vsc->sc_version_1) {
822 return virtio_pci_negotiate_features_10(vsc,
829 negotiated = host & vsc->sc_driver_features;
836 vsc->sc_active_features = negotiated;
838 vsc->sc_indirect = 1;
840 vsc->sc_indirect = 0;
845 virtio_pci_negotiate_features_10(struct virtio_softc *vsc,
848 struct virtio_pci_softc *sc = (struct virtio_pci_softc *)vsc;
851 vsc->sc_driver_features |= VIRTIO_F_VERSION_1;
856 vsc->sc_driver_features |= VIRTIO_F_ACCESS_PLATFORM;
858 vsc->sc_driver_features &= ~VIRTIO_F_NOTIFY_ON_EMPTY;
864 negotiated = host & vsc->sc_driver_features;
873 virtio_pci_set_status(vsc, VIRTIO_CONFIG_DEVICE_STATUS_FEATURES_OK);
878 vsc->sc_dev.dv_xname);
882 vsc->sc_active_features = negotiated;
885 vsc->sc_indirect = 1;
887 vsc->sc_indirect = 0;
903 virtio_pci_read_device_config_1(struct virtio_softc *vsc, int index)
905 struct virtio_pci_softc *sc = (struct virtio_pci_softc *)vsc;
910 virtio_pci_read_device_config_2(struct virtio_softc *vsc, int index)
912 struct virtio_pci_softc *sc = (struct virtio_pci_softc *)vsc;
917 virtio_pci_read_device_config_4(struct virtio_softc *vsc, int index)
919 struct virtio_pci_softc *sc = (struct virtio_pci_softc *)vsc;
924 virtio_pci_read_device_config_8(struct virtio_softc *vsc, int index)
926 struct virtio_pci_softc *sc = (struct virtio_pci_softc *)vsc;
937 virtio_pci_write_device_config_1(struct virtio_softc *vsc, int index,
940 struct virtio_pci_softc *sc = (struct virtio_pci_softc *)vsc;
945 virtio_pci_write_device_config_2(struct virtio_softc *vsc, int index,
948 struct virtio_pci_softc *sc = (struct virtio_pci_softc *)vsc;
953 virtio_pci_write_device_config_4(struct virtio_softc *vsc,
956 struct virtio_pci_softc *sc = (struct virtio_pci_softc *)vsc;
961 virtio_pci_write_device_config_8(struct virtio_softc *vsc,
964 struct virtio_pci_softc *sc = (struct virtio_pci_softc *)vsc;
976 struct virtio_softc *vsc = &sc->sc_sc;
986 vsc->sc_dev.dv_xname, idx);
991 vsc->sc_child->dv_xname, idx);
992 sc->sc_intr[idx].ih = pci_intr_establish_cpu(sc->sc_pc, ih, vsc->sc_ipl,
996 vsc->sc_child->dv_xname, idx);
1032 struct virtio_softc *vsc = &sc->sc_sc;
1036 for (i = 0; i < vsc->sc_nvqs; i++) {
1057 struct virtio_softc *vsc = &sc->sc_sc;
1064 if (!shared && vpa->vpa_va.va_nintr < 1 + vsc->sc_nvqs)
1067 r = virtio_pci_msix_establish(sc, vpa, 0, NULL, virtio_pci_config_intr, vsc);
1073 virtio_pci_shared_queue_intr, vsc);
1077 for (i = 0; i < vsc->sc_nvqs; i++)
1078 vsc->sc_vqs[i].vq_intr_vec = 1;
1080 for (i = 0; i < vsc->sc_nvqs; i++) {
1082 virtio_pci_queue_intr, &vsc->sc_vqs[i]);
1085 vsc->sc_vqs[i].vq_intr_vec = i + 1;
1096 virtio_pci_intr_establish(struct virtio_softc *vsc,
1103 if (vsc->sc_ops != &virtio_pci_ops)
1107 sc = (struct virtio_pci_softc *)vsc;
1117 virtio_pci_intr_barrier(struct virtio_softc *vsc)
1119 struct virtio_pci_softc *sc = (struct virtio_pci_softc *)vsc;
1139 struct virtio_softc *vsc = &sc->sc_sc;
1148 (vsc->sc_config_change != NULL)) {
1149 r = (vsc->sc_config_change)(vsc);
1151 r |= virtio_check_vqs(vsc);
1161 struct virtio_softc *vsc = &sc->sc_sc;
1169 (vsc->sc_config_change != NULL)) {
1170 r = (vsc->sc_config_change)(vsc);
1172 r |= virtio_check_vqs(vsc);
1182 struct virtio_softc *vsc = arg;
1184 if (vsc->sc_config_change != NULL)
1185 return vsc->sc_config_change(vsc);
1196 struct virtio_softc *vsc = vq->vq_owner;
1198 return virtio_check_vq(vsc, vq);
1204 struct virtio_softc *vsc = arg;
1206 return virtio_check_vqs(vsc);
1217 struct virtio_softc *vsc = &sc->sc_sc;
1220 if (vsc->sc_config_change != NULL)
1221 r = (vsc->sc_config_change)(vsc);
1223 r |= virtio_check_vqs(vsc);
1229 virtio_pci_kick(struct virtio_softc *vsc, uint16_t idx)
1231 struct virtio_pci_softc *sc = (struct virtio_pci_softc *)vsc;
1233 if (vsc->sc_version_1) {
1234 offset = vsc->sc_vqs[idx].vq_notify_off *