summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Roth <gaumless@gmail.com>2014-05-12 17:38:59 -0600
committerMartin Roth <martin.roth@se-eng.com>2014-05-21 22:38:33 +0200
commit16d953a46001e8852d63095e5310ed7869d109e7 (patch)
tree61d435d5247d7c4af6fbf8f789507799588aeed1
parentdb0e0e2c54397dffa8b55bfbfb76a15d641e4235 (diff)
downloadcoreboot-16d953a46001e8852d63095e5310ed7869d109e7.tar.xz
device_romstage: Add a way to move to the next device
When trying to loop through all the devices in romstage, there was no function to just go from one to the next. This allows an easy way to go all the way down the chain of devices. Change-Id: Id205b24610d75de060b0d48fa283a2ab92d1df0a Signed-off-by: Martin Roth <gaumless@gmail.com> Reviewed-on: http://review.coreboot.org/5732 Tested-by: build bot (Jenkins) Reviewed-by: Marc Jones <marc.jones@se-eng.com> Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
-rw-r--r--src/device/device_romstage.c24
-rw-r--r--src/include/device/device.h2
2 files changed, 26 insertions, 0 deletions
diff --git a/src/device/device_romstage.c b/src/device/device_romstage.c
index 591cf886ef..6dcf6d2ad3 100644
--- a/src/device/device_romstage.c
+++ b/src/device/device_romstage.c
@@ -55,6 +55,30 @@ ROMSTAGE_CONST struct device *dev_find_slot(unsigned int bus,
}
/**
+ * Given a device pointer, find the next PCI device.
+ *
+ * @param previous_dev A pointer to a PCI device structure.
+ * @return Pointer to the next device structure (if found), 0 otherwise.
+ */
+ROMSTAGE_CONST struct device *dev_find_next_pci_device(
+ ROMSTAGE_CONST struct device *previous_dev)
+{
+ ROMSTAGE_CONST struct device *dev, *result;
+
+ if (previous_dev == NULL)
+ previous_dev = all_devices;
+
+ result = 0;
+ for (dev = previous_dev->next; dev; dev = dev->next) {
+ if (dev->path.type == DEVICE_PATH_PCI) {
+ result = dev;
+ break;
+ }
+ }
+ return result;
+}
+
+/**
* Given an SMBus bus and a device number, find the device structure.
*
* @param bus The bus number.
diff --git a/src/include/device/device.h b/src/include/device/device.h
index a4ef456add..dcd93f687f 100644
--- a/src/include/device/device.h
+++ b/src/include/device/device.h
@@ -236,6 +236,8 @@ u32 find_pci_tolm(struct bus *bus);
ROMSTAGE_CONST struct device * dev_find_slot (unsigned int bus,
unsigned int devfn);
+ROMSTAGE_CONST struct device *dev_find_next_pci_device(
+ ROMSTAGE_CONST struct device *previous_dev);
ROMSTAGE_CONST struct device * dev_find_slot_on_smbus (unsigned int bus,
unsigned int addr);