aboutsummaryrefslogtreecommitdiff
path: root/src/device/device.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/device/device.c')
-rw-r--r--src/device/device.c79
1 files changed, 31 insertions, 48 deletions
diff --git a/src/device/device.c b/src/device/device.c
index d877e14eab..743a3af6c2 100644
--- a/src/device/device.c
+++ b/src/device/device.c
@@ -187,13 +187,11 @@ static void read_resources(struct bus *bus)
{
struct device *curdev;
- printk(BIOS_SPEW, "%s %s segment group %d bus %d link: %d\n", dev_path(bus->dev),
- __func__, bus->segment_group, bus->secondary, bus->link_num);
+ printk(BIOS_SPEW, "%s %s segment group %d bus %d\n", dev_path(bus->dev),
+ __func__, bus->segment_group, bus->secondary);
/* Walk through all devices and find which resources they need. */
for (curdev = bus->children; curdev; curdev = curdev->sibling) {
- struct bus *link;
-
if (!curdev->enabled)
continue;
@@ -207,12 +205,12 @@ static void read_resources(struct bus *bus)
curdev->ops->read_resources(curdev);
/* Read in the resources behind the current device's links. */
- for (link = curdev->link_list; link; link = link->next)
- read_resources(link);
+ if (curdev->link_list)
+ read_resources(curdev->link_list);
}
post_log_clear();
- printk(BIOS_SPEW, "%s %s segment group %d bus %d link: %d done\n",
- dev_path(bus->dev), __func__, bus->segment_group, bus->secondary, bus->link_num);
+ printk(BIOS_SPEW, "%s %s segment group %d bus %d done\n",
+ dev_path(bus->dev), __func__, bus->segment_group, bus->secondary);
}
struct device *vga_pri = NULL;
@@ -301,8 +299,8 @@ void assign_resources(struct bus *bus)
{
struct device *curdev;
- printk(BIOS_SPEW, "%s %s, segment group %d bus %d link: %d\n",
- dev_path(bus->dev), __func__, bus->segment_group, bus->secondary, bus->link_num);
+ printk(BIOS_SPEW, "%s %s, segment group %d bus %d\n",
+ dev_path(bus->dev), __func__, bus->segment_group, bus->secondary);
for (curdev = bus->children; curdev; curdev = curdev->sibling) {
if (!curdev->enabled || !curdev->resource_list)
@@ -317,8 +315,8 @@ void assign_resources(struct bus *bus)
curdev->ops->set_resources(curdev);
}
post_log_clear();
- printk(BIOS_SPEW, "%s %s, segment group %d bus %d link: %d done\n",
- dev_path(bus->dev), __func__, bus->segment_group, bus->secondary, bus->link_num);
+ printk(BIOS_SPEW, "%s %s, segment group %d bus %d done\n",
+ dev_path(bus->dev), __func__, bus->segment_group, bus->secondary);
}
/**
@@ -336,7 +334,6 @@ void assign_resources(struct bus *bus)
static void enable_resources(struct bus *link)
{
struct device *dev;
- struct bus *c_link;
for (dev = link->children; dev; dev = dev->sibling) {
if (dev->enabled && dev->ops && dev->ops->enable_resources) {
@@ -346,8 +343,8 @@ static void enable_resources(struct bus *link)
}
for (dev = link->children; dev; dev = dev->sibling) {
- for (c_link = dev->link_list; c_link; c_link = c_link->next)
- enable_resources(c_link);
+ if (dev->link_list)
+ enable_resources(dev->link_list);
}
post_log_clear();
}
@@ -394,17 +391,15 @@ static void scan_bus(struct device *busdev)
do_scan_bus = 1;
while (do_scan_bus) {
- struct bus *link;
+ struct bus *link = busdev->link_list;
busdev->ops->scan_bus(busdev);
do_scan_bus = 0;
- for (link = busdev->link_list; link; link = link->next) {
- if (link->reset_needed) {
- if (reset_bus(link))
- do_scan_bus = 1;
- else
- busdev->bus->reset_needed = 1;
- }
- }
+ if (!link || !link->reset_needed)
+ continue;
+ if (reset_bus(link))
+ do_scan_bus = 1;
+ else
+ busdev->bus->reset_needed = 1;
}
scan_time = stopwatch_duration_msecs(&sw);
@@ -523,13 +518,11 @@ void dev_configure(void)
*/
void dev_enable(void)
{
- struct bus *link;
-
printk(BIOS_INFO, "Enabling resources...\n");
/* Now enable everything. */
- for (link = dev_root.link_list; link; link = link->next)
- enable_resources(link);
+ if (dev_root.link_list)
+ enable_resources(dev_root.link_list);
printk(BIOS_INFO, "done.\n");
}
@@ -553,8 +546,7 @@ static void init_dev(struct device *dev)
long init_time;
if (dev->path.type == DEVICE_PATH_I2C) {
- printk(BIOS_DEBUG, "smbus: %s[%d]->",
- dev_path(dev->bus->dev), dev->bus->link_num);
+ printk(BIOS_DEBUG, "smbus: %s->", dev_path(dev->bus->dev));
}
printk(BIOS_DEBUG, "%s init\n", dev_path(dev));
@@ -572,7 +564,6 @@ static void init_dev(struct device *dev)
static void init_link(struct bus *link)
{
struct device *dev;
- struct bus *c_link;
for (dev = link->children; dev; dev = dev->sibling) {
post_code(POSTCODE_BS_DEV_INIT);
@@ -580,10 +571,9 @@ static void init_link(struct bus *link)
init_dev(dev);
}
- for (dev = link->children; dev; dev = dev->sibling) {
- for (c_link = dev->link_list; c_link; c_link = c_link->next)
- init_link(c_link);
- }
+ for (dev = link->children; dev; dev = dev->sibling)
+ if (dev->link_list)
+ init_link(dev->link_list);
}
/**
@@ -594,16 +584,14 @@ static void init_link(struct bus *link)
*/
void dev_initialize(void)
{
- struct bus *link;
-
printk(BIOS_INFO, "Initializing devices...\n");
/* First call the mainboard init. */
init_dev(&dev_root);
/* Now initialize everything. */
- for (link = dev_root.link_list; link; link = link->next)
- init_link(link);
+ if (dev_root.link_list)
+ init_link(dev_root.link_list);
post_log_clear();
printk(BIOS_INFO, "Devices initialized\n");
@@ -633,15 +621,13 @@ static void final_dev(struct device *dev)
static void final_link(struct bus *link)
{
struct device *dev;
- struct bus *c_link;
for (dev = link->children; dev; dev = dev->sibling)
final_dev(dev);
- for (dev = link->children; dev; dev = dev->sibling) {
- for (c_link = dev->link_list; c_link; c_link = c_link->next)
- final_link(c_link);
- }
+ for (dev = link->children; dev; dev = dev->sibling)
+ if (dev->link_list)
+ final_link(dev->link_list);
}
/**
* Finalize all devices in the global device tree.
@@ -651,16 +637,13 @@ static void final_link(struct bus *link)
*/
void dev_finalize(void)
{
- struct bus *link;
-
printk(BIOS_INFO, "Finalize devices...\n");
/* First call the mainboard finalize. */
final_dev(&dev_root);
/* Now finalize everything. */
- for (link = dev_root.link_list; link; link = link->next)
- final_link(link);
+ final_link(dev_root.link_list);
printk(BIOS_INFO, "Devices finalized\n");
}