diff options
author | Aaron Durbin <adurbin@chromium.org> | 2018-07-25 08:49:19 -0600 |
---|---|---|
committer | Aaron Durbin <adurbin@chromium.org> | 2018-07-26 15:35:44 +0000 |
commit | a0dabd1848e3e857fe6b6b882278a96b62614ba2 (patch) | |
tree | 407a1cc09543c91f0499ccd9c8abd3ffbe211136 | |
parent | 8c2852420c0f46ab3986697a93e0f941d53f49b3 (diff) |
device: add child traversal helper function
Add a function, dev_bus_each_child(), which walks through all the
children for a given bus of a device. This helper allows one to
walk through all the children of a given device's bus.
BUG=b:111808427,b:111743717
TEST=built
Change-Id: Iedceb0d19c05b7abd5a48f8dc30f85461bef5ec6
Signed-off-by: Aaron Durbin <adurbin@chromium.org>
Reviewed-on: https://review.coreboot.org/27636
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Justin TerAvest <teravest@chromium.org>
-rw-r--r-- | src/device/device_const.c | 24 | ||||
-rw-r--r-- | src/include/device/device.h | 3 |
2 files changed, 27 insertions, 0 deletions
diff --git a/src/device/device_const.c b/src/device/device_const.c index ee64bd13e6..90b68679e9 100644 --- a/src/device/device_const.c +++ b/src/device/device_const.c @@ -216,3 +216,27 @@ DEVTREE_CONST struct device *dev_find_slot_pnp(u16 port, u16 device) } return 0; } + +/** + * Given a device and previous match iterate through all the children. + * + * @param bus parent device's bus holding all the children + * @param prev_child previous child already traversed, if NULL start at + * children of parent bus. + * @return pointer to child or NULL when no more children + */ +DEVTREE_CONST struct device *dev_bus_each_child(const struct bus *parent, + DEVTREE_CONST struct device *prev_child) +{ + DEVTREE_CONST struct device *dev; + + if (parent == NULL) + return NULL; + + if (prev_child == NULL) + dev = parent->children; + else + dev = prev_child->sibling; + + return dev; +} diff --git a/src/include/device/device.h b/src/include/device/device.h index 64add5dc1b..1c8f1db3c0 100644 --- a/src/include/device/device.h +++ b/src/include/device/device.h @@ -1,4 +1,5 @@ #ifndef DEVICE_H + #define DEVICE_H /* @@ -275,6 +276,8 @@ DEVTREE_CONST struct device *dev_find_next_pci_device( DEVTREE_CONST struct device *dev_find_slot_on_smbus(unsigned int bus, unsigned int addr); DEVTREE_CONST struct device *dev_find_slot_pnp(u16 port, u16 device); +DEVTREE_CONST struct device *dev_bus_each_child(const struct bus *parent, + DEVTREE_CONST struct device *prev_child); void scan_smbus(struct device *bus); void scan_generic_bus(struct device *bus); |