diff options
-rw-r--r-- | src/device/device_const.c | 83 | ||||
-rw-r--r-- | src/device/device_util.c | 80 | ||||
-rw-r--r-- | src/include/device/device.h | 4 | ||||
-rw-r--r-- | src/include/device/path.h | 1 |
4 files changed, 86 insertions, 82 deletions
diff --git a/src/device/device_const.c b/src/device/device_const.c index 084d2ac385..ee64bd13e6 100644 --- a/src/device/device_const.c +++ b/src/device/device_const.c @@ -18,6 +18,7 @@ * GNU General Public License for more details. */ +#include <console/console.h> #include <device/device.h> #include <device/path.h> #include <device/pci.h> @@ -89,6 +90,88 @@ DEVTREE_CONST struct device *dev_find_next_pci_device( return dev_find_path(previous_dev, DEVICE_PATH_PCI); } +static int path_eq(const struct device_path *path1, + const struct device_path *path2) +{ + int equal = 0; + + if (path1->type != path2->type) + return 0; + + switch (path1->type) { + case DEVICE_PATH_NONE: + break; + case DEVICE_PATH_ROOT: + equal = 1; + break; + case DEVICE_PATH_PCI: + equal = (path1->pci.devfn == path2->pci.devfn); + break; + case DEVICE_PATH_PNP: + equal = (path1->pnp.port == path2->pnp.port) && + (path1->pnp.device == path2->pnp.device); + break; + case DEVICE_PATH_I2C: + equal = (path1->i2c.device == path2->i2c.device) && + (path1->i2c.mode_10bit == path2->i2c.mode_10bit); + break; + case DEVICE_PATH_APIC: + equal = (path1->apic.apic_id == path2->apic.apic_id); + break; + case DEVICE_PATH_DOMAIN: + equal = (path1->domain.domain == path2->domain.domain); + break; + case DEVICE_PATH_CPU_CLUSTER: + equal = (path1->cpu_cluster.cluster + == path2->cpu_cluster.cluster); + break; + case DEVICE_PATH_CPU: + equal = (path1->cpu.id == path2->cpu.id); + break; + case DEVICE_PATH_CPU_BUS: + equal = (path1->cpu_bus.id == path2->cpu_bus.id); + break; + case DEVICE_PATH_GENERIC: + equal = (path1->generic.id == path2->generic.id) && + (path1->generic.subid == path2->generic.subid); + break; + case DEVICE_PATH_SPI: + equal = (path1->spi.cs == path2->spi.cs); + break; + case DEVICE_PATH_USB: + equal = (path1->usb.port_type == path2->usb.port_type) && + (path1->usb.port_id == path2->usb.port_id); + break; + case DEVICE_PATH_MMIO: + equal = (path1->mmio.addr == path2->mmio.addr); + break; + default: + printk(BIOS_ERR, "Unknown device type: %d\n", path1->type); + break; + } + + return equal; +} + +/** + * See if a device structure exists for path. + * + * @param parent The bus to find the device on. + * @param path The relative path from the bus to the appropriate device. + * @return Pointer to a device structure for the device on bus at path + * or 0/NULL if no device is found. + */ +DEVTREE_CONST struct device *find_dev_path( + const struct bus *parent, const struct device_path *path) +{ + DEVTREE_CONST struct device *child; + for (child = parent->children; child; child = child->sibling) { + if (path_eq(path, &child->path)) + break; + } + return child; +} + /** * Given an SMBus bus and a device number, find the device structure. * diff --git a/src/device/device_util.c b/src/device/device_util.c index 4275d6e256..2a26a55bd4 100644 --- a/src/device/device_util.c +++ b/src/device/device_util.c @@ -26,24 +26,6 @@ #include <string.h> /** - * See if a device structure exists for path. - * - * @param parent The bus to find the device on. - * @param path The relative path from the bus to the appropriate device. - * @return Pointer to a device structure for the device on bus at path - * or 0/NULL if no device is found. - */ -struct device *find_dev_path(struct bus *parent, struct device_path *path) -{ - struct device *child; - for (child = parent->children; child; child = child->sibling) { - if (path_eq(path, &child->path)) - break; - } - return child; -} - -/** * Given a Local APIC ID, find the device structure. * * @param apic_id The Local APIC ID number. @@ -277,68 +259,6 @@ const char *bus_path(struct bus *bus) return buffer; } -int path_eq(struct device_path *path1, struct device_path *path2) -{ - int equal = 0; - - if (path1->type != path2->type) - return 0; - - switch (path1->type) { - case DEVICE_PATH_NONE: - break; - case DEVICE_PATH_ROOT: - equal = 1; - break; - case DEVICE_PATH_PCI: - equal = (path1->pci.devfn == path2->pci.devfn); - break; - case DEVICE_PATH_PNP: - equal = (path1->pnp.port == path2->pnp.port) && - (path1->pnp.device == path2->pnp.device); - break; - case DEVICE_PATH_I2C: - equal = (path1->i2c.device == path2->i2c.device) && - (path1->i2c.mode_10bit == path2->i2c.mode_10bit); - break; - case DEVICE_PATH_APIC: - equal = (path1->apic.apic_id == path2->apic.apic_id); - break; - case DEVICE_PATH_DOMAIN: - equal = (path1->domain.domain == path2->domain.domain); - break; - case DEVICE_PATH_CPU_CLUSTER: - equal = (path1->cpu_cluster.cluster - == path2->cpu_cluster.cluster); - break; - case DEVICE_PATH_CPU: - equal = (path1->cpu.id == path2->cpu.id); - break; - case DEVICE_PATH_CPU_BUS: - equal = (path1->cpu_bus.id == path2->cpu_bus.id); - break; - case DEVICE_PATH_GENERIC: - equal = (path1->generic.id == path2->generic.id) && - (path1->generic.subid == path2->generic.subid); - break; - case DEVICE_PATH_SPI: - equal = (path1->spi.cs == path2->spi.cs); - break; - case DEVICE_PATH_USB: - equal = (path1->usb.port_type == path2->usb.port_type) && - (path1->usb.port_id == path2->usb.port_id); - break; - case DEVICE_PATH_MMIO: - equal = (path1->mmio.addr == path2->mmio.addr); - break; - default: - printk(BIOS_ERR, "Unknown device type: %d\n", path1->type); - break; - } - - return equal; -} - /** * Allocate 64 more resources to the free list. * diff --git a/src/include/device/device.h b/src/include/device/device.h index e1b4a99cca..64add5dc1b 100644 --- a/src/include/device/device.h +++ b/src/include/device/device.h @@ -196,7 +196,9 @@ bool dev_is_active_bridge(struct device *dev); void run_bios(struct device *dev, unsigned long addr); /* Helper functions */ -struct device *find_dev_path(struct bus *parent, struct device_path *path); +DEVTREE_CONST struct device *find_dev_path( + const struct bus *parent, + const struct device_path *path); struct device *alloc_find_dev(struct bus *parent, struct device_path *path); struct device *dev_find_device(u16 vendor, u16 device, struct device *from); struct device *dev_find_class(unsigned int class, struct device *from); diff --git a/src/include/device/path.h b/src/include/device/path.h index 067a507166..0d9c681c88 100644 --- a/src/include/device/path.h +++ b/src/include/device/path.h @@ -125,7 +125,6 @@ struct device_path { #define DEVICE_PATH_MAX 30 #define BUS_PATH_MAX (DEVICE_PATH_MAX+10) -extern int path_eq(struct device_path *path1, struct device_path *path2); extern const char *dev_path_name(enum device_path_type type); #endif /* DEVICE_PATH_H */ |