summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/devices/device.c43
1 files changed, 13 insertions, 30 deletions
diff --git a/src/devices/device.c b/src/devices/device.c
index de27e88496..9753de81cb 100644
--- a/src/devices/device.c
+++ b/src/devices/device.c
@@ -715,52 +715,35 @@ static void set_vga_bridge_bits(void)
*/
/* FIXME: Handle the VGA palette snooping. */
- struct device *dev, *vga, *vga_onboard, *vga_first, *vga_last;
+ struct device *dev, *vga, *vga_onboard;
struct bus *bus;
bus = 0;
vga = 0;
vga_onboard = 0;
- vga_first = 0;
- vga_last = 0;
-
- for (dev = all_devices; dev; dev = dev->next) {
+ dev = NULL;
+ while ((dev = dev_find_class(PCI_CLASS_DISPLAY_VGA << 8, dev))) {
if (!dev->enabled)
continue;
- if (((dev->class >> 16) == PCI_BASE_CLASS_DISPLAY) &&
- ((dev->class >> 8) != PCI_CLASS_DISPLAY_OTHER)) {
- if (!vga_first) {
- if (dev->on_mainboard)
- vga_onboard = dev;
- else
- vga_first = dev;
- } else {
- if (dev->on_mainboard)
- vga_onboard = dev;
- else
- vga_last = dev;
- }
+ printk(BIOS_DEBUG, "found VGA at %s\n", dev_path(dev));
- /* It isn't safe to enable other VGA cards. */
- dev->command &= ~(PCI_COMMAND_MEMORY | PCI_COMMAND_IO);
+ if (dev->on_mainboard) {
+ vga_onboard = dev;
+ } else if (!vga) {
+ vga = dev;
}
- }
- vga = vga_last;
+ /* It isn't safe to enable all VGA cards. */
+ dev->command &= ~(PCI_COMMAND_MEMORY | PCI_COMMAND_IO);
+ };
if (!vga)
- vga = vga_first;
+ vga = vga_onboard;
-#if CONFIG_ONBOARD_VGA_IS_PRIMARY
- if (vga_onboard) /* Will use onboard VGA as primary. */
-#else
- if (!vga) /* Will use last add-on adapter as primary. */
-#endif
- {
+ if (CONFIG_ONBOARD_VGA_IS_PRIMARY && vga_onboard)
vga = vga_onboard;
- }
/* If we prefer plugin VGA over chipset VGA, the chipset might
want to know. */