Lines Matching defs:iov
37 #include <sys/iov.h>
69 .d_name = "iov",
85 pci_read_config((d)->cfg.dev, (d)->cfg.iov->iov_pos + r, w)
88 pci_write_config((d)->cfg.dev, (d)->cfg.iov->iov_pos + r, v, w)
119 struct pcicfg_iov *iov;
143 iov = malloc(sizeof(*dinfo->cfg.iov), M_SRIOV, M_WAITOK | M_ZERO);
146 if (dinfo->cfg.iov != NULL) {
150 iov->iov_pf = dev;
151 iov->iov_pos = iov_pos;
162 iov->iov_schema = schema;
164 iov->iov_cdev = make_dev(&iov_cdevsw, device_get_unit(dev),
165 UID_ROOT, GID_WHEEL, 0600, "iov/%s", name);
167 if (iov->iov_cdev == NULL) {
172 dinfo->cfg.iov = iov;
173 iov->iov_cdev->si_drv1 = dinfo;
182 free(iov, M_SRIOV);
191 struct pcicfg_iov *iov;
196 iov = dinfo->cfg.iov;
198 if (iov == NULL) {
203 if ((iov->iov_flags & IOV_BUSY) != 0) {
214 dinfo->cfg.iov = NULL;
216 if (iov->iov_cdev) {
217 destroy_dev(iov->iov_cdev);
218 iov->iov_cdev = NULL;
220 nvlist_destroy(iov->iov_schema);
222 free(iov, M_SRIOV);
341 struct pcicfg_iov *iov;
347 iov = dinfo->cfg.iov;
350 rid = iov->iov_pos + PCIR_SRIOV_BAR(bar);
354 ~0, 1, iov->iov_num_vfs, RF_ACTIVE);
359 iov->iov_bar[bar].res = res;
360 iov->iov_bar[bar].bar_size = bar_size;
361 iov->iov_bar[bar].bar_shift = bar_shift;
365 return (rman_manage_region(&iov->rman, start, end));
369 pci_iov_add_bars(struct pcicfg_iov *iov, struct pci_devinfo *dinfo)
376 bar = &iov->iov_bar[i];
388 pci_iov_parse_config(struct pcicfg_iov *iov, struct pci_iov_arg *arg,
415 error = pci_iov_schema_validate_config(iov->iov_schema, config);
524 pci_iov_init_rman(device_t pf, struct pcicfg_iov *iov)
528 iov->rman.rm_start = 0;
529 iov->rman.rm_end = ~0;
530 iov->rman.rm_type = RMAN_ARRAY;
531 snprintf(iov->rman_name, sizeof(iov->rman_name), "%s VF I/O memory",
533 iov->rman.rm_descr = iov->rman_name;
535 error = rman_init(&iov->rman);
539 iov->iov_flags |= IOV_RMAN_INITED;
546 struct pcicfg_iov *iov;
553 iov = dinfo->cfg.iov;
556 iov->iov_pos + PCIR_SRIOV_BAR(bar));
559 iov->iov_pos + PCIR_SRIOV_BAR(bar));
564 iov->iov_bar[bar].res = res;
565 iov->iov_bar[bar].bar_size = rman_get_size(res) / iov->iov_num_vfs;
566 iov->iov_bar[bar].bar_shift = pci_mapsize(iov->iov_bar[bar].bar_size);
571 return (rman_manage_region(&iov->rman, start, end));
578 struct pcicfg_iov *iov;
582 iov = dinfo->cfg.iov;
595 if (pci_ea_is_enabled(dev, iov->iov_pos + PCIR_SRIOV_BAR(i)))
606 iov->iov_pos + PCIR_SRIOV_BAR(i),
629 struct pcicfg_iov *iov;
634 iov = dinfo->cfg.iov;
641 for (i = 0; i < iov->iov_num_vfs; i++, next_rid += rid_stride) {
661 vfinfo->cfg.iov = iov;
664 pci_iov_add_bars(iov, vfinfo);
681 struct pcicfg_iov *iov;
693 iov = dinfo->cfg.iov;
699 if ((iov->iov_flags & IOV_BUSY) || iov->iov_num_vfs != 0) {
703 iov->iov_flags |= IOV_BUSY;
705 error = pci_iov_parse_config(iov, arg, &config);
753 error = pci_iov_init_rman(dev, iov);
757 iov->iov_num_vfs = num_vfs;
768 pause("iov", roundup(hz, 10));
772 iov->iov_flags &= ~IOV_BUSY;
781 if (iov->iov_bar[i].res != NULL) {
782 pci_release_resource(bus, dev, iov->iov_bar[i].res);
784 iov->iov_pos + PCIR_SRIOV_BAR(i));
785 iov->iov_bar[i].res = NULL;
789 if (iov->iov_flags & IOV_RMAN_INITED) {
790 rman_fini(&iov->rman);
791 iov->iov_flags &= ~IOV_RMAN_INITED;
795 iov->iov_num_vfs = 0;
796 iov->iov_flags &= ~IOV_BUSY;
804 struct pcicfg_iov *iov;
806 iov = dinfo->cfg.iov;
808 IOV_WRITE(dinfo, PCIR_SRIOV_PAGE_SIZE, iov->iov_page_size, 4);
809 IOV_WRITE(dinfo, PCIR_SRIOV_NUM_VFS, iov->iov_num_vfs, 2);
810 IOV_WRITE(dinfo, PCIR_SRIOV_CTL, iov->iov_ctl, 2);
816 struct pcicfg_iov *iov;
818 iov = dinfo->cfg.iov;
820 iov->iov_page_size = IOV_READ(dinfo, PCIR_SRIOV_PAGE_SIZE, 4);
821 iov->iov_ctl = IOV_READ(dinfo, PCIR_SRIOV_CTL, 2);
835 return (pf == vfinfo->cfg.iov);
842 struct pcicfg_iov *iov;
848 iov = dinfo->cfg.iov;
853 iov->iov_flags |= IOV_BUSY;
863 if (!pci_iov_is_child_vf(iov, vf))
878 if (pci_iov_is_child_vf(iov, vf))
888 iov->iov_num_vfs = 0;
891 if (iov->iov_bar[i].res != NULL) {
892 pci_release_resource(bus, dev, iov->iov_bar[i].res);
894 iov->iov_pos + PCIR_SRIOV_BAR(i));
895 iov->iov_bar[i].res = NULL;
899 if (iov->iov_flags & IOV_RMAN_INITED) {
900 rman_fini(&iov->rman);
901 iov->iov_flags &= ~IOV_RMAN_INITED;
907 iov->iov_flags &= ~IOV_BUSY;
915 struct pcicfg_iov *iov;
920 iov = dinfo->cfg.iov;
922 if ((iov->iov_flags & IOV_BUSY) != 0) {
926 if (iov->iov_num_vfs == 0) {
950 packed = nvlist_pack(dinfo->cfg.iov->iov_schema, &size);
1006 struct pcicfg_iov *iov;
1015 iov = dinfo->cfg.iov;
1036 res = rman_reserve_resource(&iov->rman, bar_start, bar_end,
1076 KASSERT(rman_is_region_manager(r, &dinfo->cfg.iov->rman),
1078 &dinfo->cfg.iov->rman, r));
1108 KASSERT(rman_is_region_manager(r, &dinfo->cfg.iov->rman),
1110 &dinfo->cfg.iov->rman, r));
1139 KASSERT(rman_is_region_manager(r, &dinfo->cfg.iov->rman),
1141 &dinfo->cfg.iov->rman, r));
1164 KASSERT(rman_is_region_manager(r, &dinfo->cfg.iov->rman),
1166 &dinfo->cfg.iov->rman, r));
1172 pci_vf_find_parent_resource(struct pcicfg_iov *iov, struct resource *r)
1177 pres = iov->iov_bar[i].res;
1192 struct pcicfg_iov *iov = dinfo->cfg.iov;
1200 KASSERT(rman_is_region_manager(r, &iov->rman),
1202 &dinfo->cfg.iov->rman, r));
1213 pres = pci_vf_find_parent_resource(dinfo->cfg.iov, r);
1219 return (bus_map_resource(iov->iov_pf, pres, &args, map));
1227 struct pcicfg_iov *iov = dinfo->cfg.iov;
1232 KASSERT(rman_is_region_manager(r, &iov->rman),
1234 &dinfo->cfg.iov->rman, r));
1236 pres = pci_vf_find_parent_resource(iov, r);
1239 return (bus_unmap_resource(iov->iov_pf, pres, map));