UPSTREAM: PCI: Add pci_unmap_iospace() to unmap I/O resources
[firefly-linux-kernel-4.4.55.git] / include / linux / pci.h
index 1d1cfbac9f251214b001be9bfa532e5bf41241a8..f6c1d97193382a897d1981e1ecf5dd3a56fa334e 100644 (file)
@@ -1156,6 +1156,7 @@ int __must_check pci_bus_alloc_resource(struct pci_bus *bus,
 
 
 int pci_remap_iospace(const struct resource *res, phys_addr_t phys_addr);
+void pci_unmap_iospace(struct resource *res);
 
 static inline pci_bus_addr_t pci_bus_address(struct pci_dev *pdev, int bar)
 {
@@ -1805,6 +1806,20 @@ static inline int pci_pcie_type(const struct pci_dev *dev)
        return (pcie_caps_reg(dev) & PCI_EXP_FLAGS_TYPE) >> 4;
 }
 
+static inline struct pci_dev *pcie_find_root_port(struct pci_dev *dev)
+{
+       while (1) {
+               if (!pci_is_pcie(dev))
+                       break;
+               if (pci_pcie_type(dev) == PCI_EXP_TYPE_ROOT_PORT)
+                       return dev;
+               if (!dev->bus->self)
+                       break;
+               dev = dev->bus->self;
+       }
+       return NULL;
+}
+
 void pci_request_acs(void);
 bool pci_acs_enabled(struct pci_dev *pdev, u16 acs_flags);
 bool pci_acs_path_enabled(struct pci_dev *start,