Lines Matching refs:dev

35 	struct device *dev;  member
46 static void release_pcie_device(struct device *dev) in release_pcie_device() argument
48 kfree(to_pcie_device(dev)); in release_pcie_device()
56 static int pcie_message_numbers(struct pci_dev *dev, int mask, in pcie_message_numbers() argument
71 pcie_capability_read_word(dev, PCI_EXP_FLAGS, &reg16); in pcie_message_numbers()
80 pos = dev->aer_cap; in pcie_message_numbers()
82 pci_read_config_dword(dev, pos + PCI_ERR_ROOT_STATUS, in pcie_message_numbers()
91 pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_DPC); in pcie_message_numbers()
93 pci_read_config_word(dev, pos + PCI_EXP_DPC_CAP, in pcie_message_numbers()
112 static int pcie_port_enable_irq_vec(struct pci_dev *dev, int *irqs, int mask) in pcie_port_enable_irq_vec() argument
118 nr_entries = pci_alloc_irq_vectors(dev, 1, PCIE_PORT_MAX_MSI_ENTRIES, in pcie_port_enable_irq_vec()
124 nvec = pcie_message_numbers(dev, mask, &pme, &aer, &dpc); in pcie_port_enable_irq_vec()
126 pci_free_irq_vectors(dev); in pcie_port_enable_irq_vec()
142 pci_free_irq_vectors(dev); in pcie_port_enable_irq_vec()
144 nr_entries = pci_alloc_irq_vectors(dev, nvec, nvec, in pcie_port_enable_irq_vec()
153 pcie_irq = pci_irq_vector(dev, pme); in pcie_port_enable_irq_vec()
160 irqs[PCIE_PORT_SERVICE_AER_SHIFT] = pci_irq_vector(dev, aer); in pcie_port_enable_irq_vec()
163 irqs[PCIE_PORT_SERVICE_DPC_SHIFT] = pci_irq_vector(dev, dpc); in pcie_port_enable_irq_vec()
176 static int pcie_init_service_irqs(struct pci_dev *dev, int *irqs, int mask) in pcie_init_service_irqs() argument
192 if (pcie_port_enable_irq_vec(dev, irqs, mask) == 0) in pcie_init_service_irqs()
197 ret = pci_alloc_irq_vectors(dev, 1, 1, PCI_IRQ_LEGACY); in pcie_init_service_irqs()
202 irqs[i] = pci_irq_vector(dev, 0); in pcie_init_service_irqs()
217 static int get_port_device_capability(struct pci_dev *dev) in get_port_device_capability() argument
219 struct pci_host_bridge *host = pci_find_host_bridge(dev->bus); in get_port_device_capability()
222 if (dev->is_hotplug_bridge && in get_port_device_capability()
223 (pci_pcie_type(dev) == PCI_EXP_TYPE_ROOT_PORT || in get_port_device_capability()
224 pci_pcie_type(dev) == PCI_EXP_TYPE_DOWNSTREAM) && in get_port_device_capability()
232 pcie_capability_clear_word(dev, PCI_EXP_SLTCTL, in get_port_device_capability()
237 if ((pci_pcie_type(dev) == PCI_EXP_TYPE_ROOT_PORT || in get_port_device_capability()
238 pci_pcie_type(dev) == PCI_EXP_TYPE_RC_EC) && in get_port_device_capability()
239 dev->aer_cap && pci_aer_available() && in get_port_device_capability()
245 if ((pci_pcie_type(dev) == PCI_EXP_TYPE_ROOT_PORT || in get_port_device_capability()
246 pci_pcie_type(dev) == PCI_EXP_TYPE_RC_EC) && in get_port_device_capability()
255 pcie_pme_interrupt_enable(dev, false); in get_port_device_capability()
262 if (pci_find_ext_capability(dev, PCI_EXT_CAP_ID_DPC) && in get_port_device_capability()
267 if (pci_pcie_type(dev) == PCI_EXP_TYPE_DOWNSTREAM || in get_port_device_capability()
268 pci_pcie_type(dev) == PCI_EXP_TYPE_ROOT_PORT) { in get_port_device_capability()
271 pcie_capability_read_dword(dev, PCI_EXP_LNKCAP, &linkcap); in get_port_device_capability()
305 device->parent = &pdev->dev; in pcie_device_init()
326 static int pcie_port_device_register(struct pci_dev *dev) in pcie_port_device_register() argument
332 status = pci_enable_device(dev); in pcie_port_device_register()
337 capabilities = get_port_device_capability(dev); in pcie_port_device_register()
341 pci_set_master(dev); in pcie_port_device_register()
349 status = pcie_init_service_irqs(dev, irqs, capabilities); in pcie_port_device_register()
363 if (!pcie_device_init(dev, service, irqs[i])) in pcie_port_device_register()
372 pci_free_irq_vectors(dev); in pcie_port_device_register()
374 pci_disable_device(dev); in pcie_port_device_register()
380 static int pcie_port_device_iter(struct device *dev, void *data) in pcie_port_device_iter() argument
386 if ((dev->bus == &pcie_port_bus_type) && dev->driver) { in pcie_port_device_iter()
387 service_driver = to_service_driver(dev->driver); in pcie_port_device_iter()
390 return cb(to_pcie_device(dev)); in pcie_port_device_iter()
400 static int pcie_port_device_suspend(struct device *dev) in pcie_port_device_suspend() argument
403 return device_for_each_child(dev, &off, pcie_port_device_iter); in pcie_port_device_suspend()
406 static int pcie_port_device_resume_noirq(struct device *dev) in pcie_port_device_resume_noirq() argument
409 return device_for_each_child(dev, &off, pcie_port_device_iter); in pcie_port_device_resume_noirq()
416 static int pcie_port_device_resume(struct device *dev) in pcie_port_device_resume() argument
419 return device_for_each_child(dev, &off, pcie_port_device_iter); in pcie_port_device_resume()
426 static int pcie_port_device_runtime_suspend(struct device *dev) in pcie_port_device_runtime_suspend() argument
429 return device_for_each_child(dev, &off, pcie_port_device_iter); in pcie_port_device_runtime_suspend()
436 static int pcie_port_device_runtime_resume(struct device *dev) in pcie_port_device_runtime_resume() argument
439 return device_for_each_child(dev, &off, pcie_port_device_iter); in pcie_port_device_runtime_resume()
443 static int remove_iter(struct device *dev, void *data) in remove_iter() argument
445 if (dev->bus == &pcie_port_bus_type) in remove_iter()
446 device_unregister(dev); in remove_iter()
463 pdrvs->dev = device; in find_service_iter()
478 struct device *pcie_port_find_device(struct pci_dev *dev, in pcie_port_find_device() argument
484 pdrvs.dev = NULL; in pcie_port_find_device()
486 device_for_each_child(&dev->dev, &pdrvs, find_service_iter); in pcie_port_find_device()
488 device = pdrvs.dev; in pcie_port_find_device()
500 static void pcie_port_device_remove(struct pci_dev *dev) in pcie_port_device_remove() argument
502 device_for_each_child(&dev->dev, NULL, remove_iter); in pcie_port_device_remove()
503 pci_free_irq_vectors(dev); in pcie_port_device_remove()
514 static int pcie_port_probe_service(struct device *dev) in pcie_port_probe_service() argument
520 if (!dev || !dev->driver) in pcie_port_probe_service()
523 driver = to_service_driver(dev->driver); in pcie_port_probe_service()
527 pciedev = to_pcie_device(dev); in pcie_port_probe_service()
532 get_device(dev); in pcie_port_probe_service()
545 static int pcie_port_remove_service(struct device *dev) in pcie_port_remove_service() argument
550 if (!dev || !dev->driver) in pcie_port_remove_service()
553 pciedev = to_pcie_device(dev); in pcie_port_remove_service()
554 driver = to_service_driver(dev->driver); in pcie_port_remove_service()
557 put_device(dev); in pcie_port_remove_service()
571 static void pcie_port_shutdown_service(struct device *dev) {} in pcie_port_shutdown_service() argument
632 static int pcie_port_runtime_suspend(struct device *dev) in pcie_port_runtime_suspend() argument
634 if (!to_pci_dev(dev)->bridge_d3) in pcie_port_runtime_suspend()
637 return pcie_port_device_runtime_suspend(dev); in pcie_port_runtime_suspend()
640 static int pcie_port_runtime_idle(struct device *dev) in pcie_port_runtime_idle() argument
647 return to_pci_dev(dev)->bridge_d3 ? 0 : -EBUSY; in pcie_port_runtime_idle()
679 static int pcie_portdrv_probe(struct pci_dev *dev, in pcie_portdrv_probe() argument
682 int type = pci_pcie_type(dev); in pcie_portdrv_probe()
685 if (!pci_is_pcie(dev) || in pcie_portdrv_probe()
693 pcie_link_rcec(dev); in pcie_portdrv_probe()
695 status = pcie_port_device_register(dev); in pcie_portdrv_probe()
699 pci_save_state(dev); in pcie_portdrv_probe()
701 dev_pm_set_driver_flags(&dev->dev, DPM_FLAG_NO_DIRECT_COMPLETE | in pcie_portdrv_probe()
704 if (pci_bridge_d3_possible(dev)) { in pcie_portdrv_probe()
710 pm_runtime_set_autosuspend_delay(&dev->dev, 100); in pcie_portdrv_probe()
711 pm_runtime_use_autosuspend(&dev->dev); in pcie_portdrv_probe()
712 pm_runtime_mark_last_busy(&dev->dev); in pcie_portdrv_probe()
713 pm_runtime_put_autosuspend(&dev->dev); in pcie_portdrv_probe()
714 pm_runtime_allow(&dev->dev); in pcie_portdrv_probe()
720 static void pcie_portdrv_remove(struct pci_dev *dev) in pcie_portdrv_remove() argument
722 if (pci_bridge_d3_possible(dev)) { in pcie_portdrv_remove()
723 pm_runtime_forbid(&dev->dev); in pcie_portdrv_remove()
724 pm_runtime_get_noresume(&dev->dev); in pcie_portdrv_remove()
725 pm_runtime_dont_use_autosuspend(&dev->dev); in pcie_portdrv_remove()
728 pcie_port_device_remove(dev); in pcie_portdrv_remove()
730 pci_disable_device(dev); in pcie_portdrv_remove()
733 static void pcie_portdrv_shutdown(struct pci_dev *dev) in pcie_portdrv_shutdown() argument
735 if (pci_bridge_d3_possible(dev)) { in pcie_portdrv_shutdown()
736 pm_runtime_forbid(&dev->dev); in pcie_portdrv_shutdown()
737 pm_runtime_get_noresume(&dev->dev); in pcie_portdrv_shutdown()
738 pm_runtime_dont_use_autosuspend(&dev->dev); in pcie_portdrv_shutdown()
741 pcie_port_device_remove(dev); in pcie_portdrv_shutdown()
744 static pci_ers_result_t pcie_portdrv_error_detected(struct pci_dev *dev, in pcie_portdrv_error_detected() argument
752 static pci_ers_result_t pcie_portdrv_slot_reset(struct pci_dev *dev) in pcie_portdrv_slot_reset() argument
755 device_for_each_child(&dev->dev, &off, pcie_port_device_iter); in pcie_portdrv_slot_reset()
757 pci_restore_state(dev); in pcie_portdrv_slot_reset()
758 pci_save_state(dev); in pcie_portdrv_slot_reset()
762 static pci_ers_result_t pcie_portdrv_mmio_enabled(struct pci_dev *dev) in pcie_portdrv_mmio_enabled() argument