Lines Matching +full:pm +full:- +full:bus
1 /*-
5 * Copyright (c) 2013-2016 Mellanox Technologies, Ltd.
7 * Copyright (c) 2020-2022 The FreeBSD Foundation
42 #include <sys/bus.h>
54 #include <linux/dma-mapping.h>
61 #include <linux/pm.h>
75 /* Linux has an empty element at the end of the ID table -> nitems() - 1. */
92 _bus, lkpi_ ## _table, _table, nitems(_table) - 1)
94 #define PCI_ANY_ID -1U
100 #define PCI_DEVID(bus, devfn) ((((uint16_t)(bus)) << 8) | (devfn)) argument
128 #define PCI_EXP_LNKCTL_CLKREQ_EN PCIEM_LINK_CTL_ECPM /* Enable clock PM */
196 PCI_SPEED_UNKNOWN = -1,
329 struct pci_bus *bus; member
383 dev_err(&(pdev)->dev, fmt, __VA_ARGS__)
389 return (device_get_devclass(dev->bsddev) == devclass_find("pci")); in dev_is_pci()
395 return (PCI_DEVID(pdev->bus->number, pdev->devfn)); in pci_dev_id()
401 struct pci_map *pm; in pci_resource_type() local
403 pm = pci_find_bar(pdev->dev.bsddev, PCIR_BAR(bar)); in pci_resource_type()
404 if (!pm) in pci_resource_type()
405 return (-1); in pci_resource_type()
407 if (PCI_BAR_IO(pm->pm_value)) in pci_resource_type()
430 return d->path_name; in pci_name()
437 return dev_get_drvdata(&pdev->dev); in pci_get_drvdata()
444 dev_set_drvdata(&pdev->dev, data); in pci_set_drvdata()
452 get_device(&pdev->dev); in pci_dev_get()
461 put_device(&pdev->dev); in pci_dev_put()
468 pci_enable_io(pdev->dev.bsddev, SYS_RES_IOPORT); in pci_enable_device()
469 pci_enable_io(pdev->dev.bsddev, SYS_RES_MEMORY); in pci_enable_device()
477 pci_disable_busmaster(pdev->dev.bsddev); in pci_disable_device()
484 pci_enable_busmaster(pdev->dev.bsddev); in pci_set_master()
492 pci_set_powerstate(pdev->dev.bsddev, state); in pci_set_power_state()
500 pci_disable_busmaster(pdev->dev.bsddev); in pci_clear_master()
508 return (pbus->self == NULL); in pci_is_root_bus()
515 if (pci_is_root_bus(pdev->bus)) in pci_upstream_bridge()
523 if (pdev == pdev->bus->self) { in pci_upstream_bridge()
526 bridge = device_get_parent(pdev->dev.bsddev); in pci_upstream_bridge()
537 * "bridge" is a PCI-to-PCI bridge. Create a Linux pci_dev in pci_upstream_bridge()
540 pdev->bus->self = lkpinew_pci_dev(bridge); in pci_upstream_bridge()
543 return (pdev->bus->self); in pci_upstream_bridge()
555 pci_release_msi(pdev->dev.bsddev); in lkpi_pci_disable_msix()
559 * longer valid and might be re-assigned. Make sure in lkpi_pci_disable_msix()
563 pdev->dev.irq_start = 0; in lkpi_pci_disable_msix()
564 pdev->dev.irq_end = 0; in lkpi_pci_disable_msix()
565 pdev->msix_enabled = false; in lkpi_pci_disable_msix()
574 pci_release_msi(pdev->dev.bsddev); in lkpi_pci_disable_msi()
576 pdev->dev.irq_start = 0; in lkpi_pci_disable_msi()
577 pdev->dev.irq_end = 0; in lkpi_pci_disable_msi()
578 pdev->irq = pdev->dev.irq; in lkpi_pci_disable_msi()
579 pdev->msi_enabled = false; in lkpi_pci_disable_msi()
610 if (pci_find_cap(pdev->dev.bsddev, capid, ®)) in pci_find_capability()
625 if (pci_find_extcap(pdev->dev.bsddev, capid, ®)) in pci_find_ext_capability()
640 dinfo = device_get_ivars(pdev->dev.bsddev); in pci_pme_capable()
641 cfg = &dinfo->cfg; in pci_pme_capable()
643 if (cfg->pp.pp_cap == 0) in pci_pme_capable()
646 if ((cfg->pp.pp_cap & (1 << (PCIM_PCAP_PME_SHIFT + flag))) != 0) in pci_pme_capable()
657 return (-EPERM); in pci_disable_link_state()
659 return (-ENXIO); in pci_disable_link_state()
666 *val = (u8)pci_read_config(pdev->dev.bsddev, where, 1); in pci_read_config_byte()
674 *val = (u16)pci_read_config(pdev->dev.bsddev, where, 2); in pci_read_config_word()
682 *val = (u32)pci_read_config(pdev->dev.bsddev, where, 4); in pci_read_config_dword()
690 pci_write_config(pdev->dev.bsddev, where, val, 1); in pci_write_config_byte()
698 pci_write_config(pdev->dev.bsddev, where, val, 2); in pci_write_config_word()
706 pci_write_config(pdev->dev.bsddev, where, val, 4); in pci_write_config_dword()
738 return (-ERANGE); in pci_enable_msix_range()
746 return (-ENOSPC); in pci_enable_msix_range()
767 return (pci_read_config(pdev->dev.bsddev, PCIR_VENDOR, 2) == PCIV_INVALID); in pci_channel_offline()
772 return -ENODEV; in pci_enable_sriov()
789 pci_save_state(pdev->dev.bsddev); in lkpi_pci_save_state()
796 pci_restore_state(pdev->dev.bsddev); in lkpi_pci_restore_state()
806 return (-ENOSYS); in pci_reset_function()
815 #define pcie_set_readrq(d, v) pci_set_max_read_req((d)->dev.bsddev, (v))
827 dma_pool_create(_name, &(_pdev)->dev, _size, _align, _alloc)
829 dma_free_coherent((_hwdev) == NULL ? NULL : &(_hwdev)->dev, \
832 dma_map_sg((_hwdev) == NULL ? NULL : &(_hwdev->dev), \
835 dma_map_single((_hwdev) == NULL ? NULL : &(_hwdev->dev), \
838 dma_unmap_single((_hwdev) == NULL ? NULL : &(_hwdev)->dev, \
841 dma_unmap_sg((_hwdev) == NULL ? NULL : &(_hwdev)->dev, \
844 dma_map_page((_hwdev) == NULL ? NULL : &(_hwdev)->dev, _page,\
847 dma_unmap_page((_hwdev) == NULL ? NULL : &(_hwdev)->dev, \
849 #define pci_set_dma_mask(_pdev, mask) dma_set_mask(&(_pdev)->dev, (mask))
851 dma_mapping_error(&(_pdev)->dev, _dma_addr)
853 dma_set_coherent_mask(&(_pdev)->dev, (_mask))
878 /* PCI bus error event callbacks */
888 /* FreeBSD does not support SRIOV - yet */
995 return -EINVAL; in pcie_capability_read_dword()
998 return -EINVAL; in pcie_capability_read_dword()
1008 return -EINVAL; in pcie_capability_read_word()
1011 return -EINVAL; in pcie_capability_read_word()
1020 return -EINVAL; in pcie_capability_write_word()
1036 spin_lock(&dev->pcie_cap_lock); in pcie_capability_clear_and_set_word()
1046 spin_unlock(&dev->pcie_cap_lock); in pcie_capability_clear_and_set_word()
1084 root = device_get_parent(dev->dev.bsddev); in pcie_get_speed_cap()
1103 if (lnkcap2) { /* PCIe r3.0-compliant */ in pcie_get_speed_cap()
1116 } else { /* pre-r3.0 */ in pcie_get_speed_cap()
1149 return (pci_get_max_payload(dev->dev.bsddev)); in pcie_get_mps()
1202 if (pdev->root != NULL) in pcie_find_root_port()
1203 return (pdev->root); in pcie_find_root_port()
1205 root = pci_find_pcie_root_port(pdev->dev.bsddev); in pcie_find_root_port()
1209 pdev->root = lkpinew_pci_dev(root); in pcie_find_root_port()
1210 return (pdev->root); in pcie_find_root_port()
1235 if (!device_is_attached(pbus->self->dev.bsddev)) in pci_rescan_bus()
1238 error = BUS_RESCAN(pbus->self->dev.bsddev); in pci_rescan_bus()
1242 parent = device_get_parent(pbus->self->dev.bsddev); in pci_rescan_bus()
1256 * The pci_dev structure should be zero-initialized before passed
1266 while (cur != NULL && (cur->vendor || cur->device)) { in pci_dev_present()
1267 if (pci_find_device(cur->vendor, cur->device) != NULL) { in pci_dev_present()
1282 ids->vendor != 0 || ids->subvendor != 0 || ids->class_mask != 0; in pci_match_id()
1284 if ((ids->vendor == PCI_ANY_ID || in pci_match_id()
1285 ids->vendor == pdev->vendor) && in pci_match_id()
1286 (ids->device == PCI_ANY_ID || in pci_match_id()
1287 ids->device == pdev->device) && in pci_match_id()
1288 (ids->subvendor == PCI_ANY_ID || in pci_match_id()
1289 ids->subvendor == pdev->subsystem_vendor) && in pci_match_id()
1290 (ids->subdevice == PCI_ANY_ID || in pci_match_id()
1291 ids->subdevice == pdev->subsystem_device) && in pci_match_id()
1292 ((ids->class ^ pdev->class) & ids->class_mask) == 0) in pci_match_id()
1299 unsigned int bus, unsigned int devfn);
1300 #define pci_get_domain_bus_and_slot(domain, bus, devfn) \ argument
1301 lkpi_pci_get_domain_bus_and_slot(domain, bus, devfn)
1307 return (pbus->domain); in pci_domain_nr()
1311 pci_bus_read_config(struct pci_bus *bus, unsigned int devfn, in pci_bus_read_config() argument
1315 *val = pci_read_config(bus->self->dev.bsddev, pos, len); in pci_bus_read_config()
1320 pci_bus_read_config_word(struct pci_bus *bus, unsigned int devfn, int pos, u16 *val) in pci_bus_read_config_word() argument
1325 ret = pci_bus_read_config(bus, devfn, pos, &tmp, 2); in pci_bus_read_config_word()
1331 pci_bus_read_config_byte(struct pci_bus *bus, unsigned int devfn, int pos, u8 *val) in pci_bus_read_config_byte() argument
1336 ret = pci_bus_read_config(bus, devfn, pos, &tmp, 1); in pci_bus_read_config_byte()
1342 pci_bus_write_config(struct pci_bus *bus, unsigned int devfn, int pos, in pci_bus_write_config() argument
1346 pci_write_config(bus->self->dev.bsddev, pos, val, size); in pci_bus_write_config()
1351 pci_bus_write_config_byte(struct pci_bus *bus, unsigned int devfn, int pos, in pci_bus_write_config_byte() argument
1354 return (pci_bus_write_config(bus, devfn, pos, val, 1)); in pci_bus_write_config_byte()
1358 pci_bus_write_config_word(struct pci_bus *bus, unsigned int devfn, int pos, in pci_bus_write_config_word() argument
1361 return (pci_bus_write_config(bus, devfn, pos, val, 2)); in pci_bus_write_config_word()
1370 /* -------------------------------------------------------------------------- */
1384 req_mask = ((1 << (PCIR_MAX_BAR_0 + 1)) - 1) & ~mask; in pcim_iomap_regions_request_all()
1389 if (error != 0 && error != -ENODEV) in pcim_iomap_regions_request_all()
1401 for (bar = PCIR_MAX_BAR_0; bar >= 0; bar--) { in pcim_iomap_regions_request_all()
1406 return (-EINVAL); in pcim_iomap_regions_request_all()
1410 * We cannot simply re-define pci_get_device() as we would normally do
1411 * and then hide it in linux_pci.c as too many semi-native drivers still
1426 pdev->want_iomap_res = true; in linuxkpi_pcim_want_to_use_bus_functions()
1465 return (-EINVAL); in pcie_get_readrq()
1474 return ((pci_read_config(pdev->dev.bsddev, PCIR_COMMAND, 2) & in pci_is_enabled()
1496 if (!pdev->msix_enabled && !pdev->msi_enabled) { in pci_irq_vector()
1498 return (-EINVAL); in pci_irq_vector()
1499 return (pdev->irq); in pci_irq_vector()
1502 if (pdev->msix_enabled || pdev->msi_enabled) { in pci_irq_vector()
1503 if ((pdev->dev.irq_start + vector) >= pdev->dev.irq_end) in pci_irq_vector()
1504 return (-EINVAL); in pci_irq_vector()
1505 return (pdev->dev.irq_start + vector); in pci_irq_vector()
1508 return (-ENXIO); in pci_irq_vector()