Author: stepan
Date: 2007-04-06 20:34:39 +0200 (Fri, 06 Apr 2007)
New Revision: 2587

Modified:
   trunk/LinuxBIOSv2/src/devices/pci_device.c
   trunk/LinuxBIOSv2/src/devices/pci_rom.c
Log:
This patch makes sure that VGA is initialized before it is used. Without
this fix, LinuxBIOS crashes if the CONSOLE_LOG_LEVEL is high enough.

Additionally, The VGA option rom will be executed if either
CONFIG_PCI_ROM_RUN=1 or CONFIG_CONSOLE_VGA=1.

Signed-off-by: Roman Kononov <[EMAIL PROTECTED]>
Signed-off-by: Stefan Reinauer <[EMAIL PROTECTED]>
Acked-by: Stefan Reinauer <[EMAIL PROTECTED]>



Modified: trunk/LinuxBIOSv2/src/devices/pci_device.c
===================================================================
--- trunk/LinuxBIOSv2/src/devices/pci_device.c  2007-04-06 12:14:51 UTC (rev 
2586)
+++ trunk/LinuxBIOSv2/src/devices/pci_device.c  2007-04-06 18:34:39 UTC (rev 
2587)
@@ -633,18 +633,40 @@
 
 void pci_dev_init(struct device *dev)
 {
-#if CONFIG_PCI_ROM_RUN == 1
+#if CONFIG_CONSOLE_VGA == 1
+       extern int vga_inited;
+#endif
+#if CONFIG_PCI_ROM_RUN == 1 || CONFIG_CONSOLE_VGA == 1
        struct rom_header *rom, *ram;
 
+#if CONFIG_PCI_ROM_RUN != 1
+       /* We want to execute VGA option ROMs when CONFIG_CONSOLE_VGA
+        * is set but CONFIG_PCI_ROM_RUN is not. In this case we skip
+        * all other option ROM types.
+        */
+       if (dev->class!=PCI_CLASS_DISPLAY_VGA) 
+               return;
+#endif
+
        rom = pci_rom_probe(dev);
        if (rom == NULL)
                return;
+
        ram = pci_rom_load(dev, rom);
        if (ram == NULL)
                return;
 
        run_bios(dev, ram);
+
+#if CONFIG_CONSOLE_VGA == 1
+       /* vga_inited is a trigger of the VGA console code.
+        *
+        * Only set it if we enabled VGA console, and if we 
+        * just initialized a VGA card.
+        */
+       vga_inited|=dev->class==PCI_CLASS_DISPLAY_VGA;
 #endif
+#endif
 }
 
 /** Default device operation for PCI devices */

Modified: trunk/LinuxBIOSv2/src/devices/pci_rom.c
===================================================================
--- trunk/LinuxBIOSv2/src/devices/pci_rom.c     2007-04-06 12:14:51 UTC (rev 
2586)
+++ trunk/LinuxBIOSv2/src/devices/pci_rom.c     2007-04-06 18:34:39 UTC (rev 
2587)
@@ -62,12 +62,9 @@
 
 static void *pci_ram_image_start = (void *)PCI_RAM_IMAGE_START;
 
-#if CONFIG_CONSOLE_VGA == 1
-extern int vga_inited;         // defined in vga_console.c 
-#if CONFIG_CONSOLE_VGA_MULTI == 0
+#if CONFIG_CONSOLE_VGA == 1 && CONFIG_CONSOLE_VGA_MULTI == 0
 extern device_t vga_pri;       // the primary vga device, defined in device.c
 #endif
-#endif
 
 struct rom_header *pci_rom_load(struct device *dev, struct rom_header 
*rom_header)
 {
@@ -96,7 +93,6 @@
                printk_debug("copying VGA ROM Image from 0x%x to 0x%x, 0x%x 
bytes\n",
                            rom_header, PCI_VGA_RAM_IMAGE_START, rom_size);
                memcpy(PCI_VGA_RAM_IMAGE_START, rom_header, rom_size);
-               vga_inited = 1;
                return (struct rom_header *) (PCI_VGA_RAM_IMAGE_START);
 #endif
        } else {


-- 
linuxbios mailing list
linuxbios@linuxbios.org
http://www.linuxbios.org/mailman/listinfo/linuxbios

Reply via email to