Lines Matching full:virtfn
22 #define VIRTFN_ID_LEN 17 /* "virtfn%u\0" for 2^32 - 1 */
182 static void pci_read_vf_config_common(struct pci_dev *virtfn) in pci_read_vf_config_common() argument
184 struct pci_dev *physfn = virtfn->physfn; in pci_read_vf_config_common()
195 pci_read_config_dword(virtfn, PCI_CLASS_REVISION, in pci_read_vf_config_common()
197 pci_read_config_byte(virtfn, PCI_HEADER_TYPE, in pci_read_vf_config_common()
199 pci_read_config_word(virtfn, PCI_SUBSYSTEM_VENDOR_ID, in pci_read_vf_config_common()
201 pci_read_config_word(virtfn, PCI_SUBSYSTEM_ID, in pci_read_vf_config_common()
206 struct pci_dev *virtfn, int id) in pci_iov_sysfs_link() argument
211 sprintf(buf, "virtfn%u", id); in pci_iov_sysfs_link()
212 rc = sysfs_create_link(&dev->dev.kobj, &virtfn->dev.kobj, buf); in pci_iov_sysfs_link()
215 rc = sysfs_create_link(&virtfn->dev.kobj, &dev->dev.kobj, "physfn"); in pci_iov_sysfs_link()
219 kobject_uevent(&virtfn->dev.kobj, KOBJ_CHANGE); in pci_iov_sysfs_link()
318 struct pci_dev *virtfn; in pci_iov_scan_device() local
321 virtfn = pci_alloc_dev(bus); in pci_iov_scan_device()
322 if (!virtfn) in pci_iov_scan_device()
325 virtfn->devfn = pci_iov_virtfn_devfn(dev, id); in pci_iov_scan_device()
326 virtfn->vendor = dev->vendor; in pci_iov_scan_device()
327 virtfn->device = iov->vf_device; in pci_iov_scan_device()
328 virtfn->is_virtfn = 1; in pci_iov_scan_device()
329 virtfn->physfn = pci_dev_get(dev); in pci_iov_scan_device()
330 virtfn->no_command_memory = 1; in pci_iov_scan_device()
333 pci_read_vf_config_common(virtfn); in pci_iov_scan_device()
335 rc = pci_setup_device(virtfn); in pci_iov_scan_device()
338 pci_bus_put(virtfn->bus); in pci_iov_scan_device()
339 kfree(virtfn); in pci_iov_scan_device()
343 return virtfn; in pci_iov_scan_device()
349 struct pci_dev *virtfn; in pci_iov_add_virtfn() local
360 virtfn = pci_iov_scan_device(dev, id, bus); in pci_iov_add_virtfn()
361 if (IS_ERR(virtfn)) { in pci_iov_add_virtfn()
362 rc = PTR_ERR(virtfn); in pci_iov_add_virtfn()
366 virtfn->dev.parent = dev->dev.parent; in pci_iov_add_virtfn()
367 virtfn->multifunction = 0; in pci_iov_add_virtfn()
375 virtfn->resource[i].name = pci_name(virtfn); in pci_iov_add_virtfn()
376 virtfn->resource[i].flags = res->flags; in pci_iov_add_virtfn()
378 resource_set_range(&virtfn->resource[i], in pci_iov_add_virtfn()
380 rc = request_resource(res, &virtfn->resource[i]); in pci_iov_add_virtfn()
384 pci_device_add(virtfn, virtfn->bus); in pci_iov_add_virtfn()
385 rc = pci_iov_sysfs_link(dev, virtfn, id); in pci_iov_add_virtfn()
389 pci_bus_add_device(virtfn); in pci_iov_add_virtfn()
394 pci_stop_and_remove_bus_device(virtfn); in pci_iov_add_virtfn()
406 struct pci_dev *virtfn; in pci_iov_remove_virtfn() local
408 virtfn = pci_get_domain_bus_and_slot(pci_domain_nr(dev->bus), in pci_iov_remove_virtfn()
411 if (!virtfn) in pci_iov_remove_virtfn()
414 sprintf(buf, "virtfn%u", id); in pci_iov_remove_virtfn()
417 * pci_stop_dev() could have been called for this virtfn already, in pci_iov_remove_virtfn()
418 * so the directory for the virtfn may have been removed before. in pci_iov_remove_virtfn()
421 if (virtfn->dev.kobj.sd) in pci_iov_remove_virtfn()
422 sysfs_remove_link(&virtfn->dev.kobj, "physfn"); in pci_iov_remove_virtfn()
424 pci_stop_and_remove_bus_device(virtfn); in pci_iov_remove_virtfn()
425 virtfn_remove_bus(dev->bus, virtfn->bus); in pci_iov_remove_virtfn()
428 pci_dev_put(virtfn); in pci_iov_remove_virtfn()