Blame view
drivers/of/of_pci.c
1.04 KB
04bea68b2 of/pci: move of_i... |
1 |
#include <linux/kernel.h> |
9775913fa of: of_pci.c need... |
2 |
#include <linux/export.h> |
a64228501 of: fix missing i... |
3 |
#include <linux/of.h> |
04bea68b2 of/pci: move of_i... |
4 5 |
#include <linux/of_pci.h> #include <asm/prom.h> |
98d9f30c8 pci/of: Match PCI... |
6 7 |
static inline int __of_pci_pci_compare(struct device_node *node, unsigned int devfn) |
04bea68b2 of/pci: move of_i... |
8 |
{ |
98d9f30c8 pci/of: Match PCI... |
9 10 |
unsigned int size; const __be32 *reg = of_get_property(node, "reg", &size); |
04bea68b2 of/pci: move of_i... |
11 |
|
98d9f30c8 pci/of: Match PCI... |
12 13 14 15 |
if (!reg || size < 5 * sizeof(__be32)) return 0; return ((be32_to_cpup(®[0]) >> 8) & 0xff) == devfn; } |
04bea68b2 of/pci: move of_i... |
16 |
|
98d9f30c8 pci/of: Match PCI... |
17 18 19 20 21 22 23 24 25 26 27 28 |
struct device_node *of_pci_find_child_device(struct device_node *parent, unsigned int devfn) { struct device_node *node, *node2; for_each_child_of_node(parent, node) { if (__of_pci_pci_compare(node, devfn)) return node; /* * Some OFs create a parent node "multifunc-device" as * a fake root for all functions of a multi-function * device we go down them as well. |
04bea68b2 of/pci: move of_i... |
29 |
*/ |
98d9f30c8 pci/of: Match PCI... |
30 31 32 33 34 35 36 37 |
if (!strcmp(node->name, "multifunc-device")) { for_each_child_of_node(node, node2) { if (__of_pci_pci_compare(node2, devfn)) { of_node_put(node); return node2; } } } |
04bea68b2 of/pci: move of_i... |
38 |
} |
98d9f30c8 pci/of: Match PCI... |
39 |
return NULL; |
04bea68b2 of/pci: move of_i... |
40 |
} |
98d9f30c8 pci/of: Match PCI... |
41 |
EXPORT_SYMBOL_GPL(of_pci_find_child_device); |