[SeaBIOS] [PATCH RFC 3/7] Add configuration menu for the VGA ROM

Julian Pidancet julian.pidancet at gmail.com
Fri Dec 16 15:15:09 CET 2011


This patch adds a configuration menu for the VGA ROM, it also allow
the creation of a PCI header so the ROM can be extracted from a PCI
device.

Signed-off-by: Julian Pidancet <julian.pidancet at gmail.com>
---
 src/Kconfig       |   35 +++++++++++++++++++++++++++++++++++
 vgasrc/vga.c      |    4 ----
 vgasrc/vgaentry.S |   47 +++++++++++++++++++++++++++++++++++++++++++++--
 3 files changed, 80 insertions(+), 6 deletions(-)

diff --git a/src/Kconfig b/src/Kconfig
index f8d245a..a6e11da 100644
--- a/src/Kconfig
+++ b/src/Kconfig
@@ -324,6 +324,41 @@ menu "BIOS Tables"
             Support generation of ACPI tables.
 endmenu
 
+menu "VGA ROM"
+    config VGA_CIRRUS
+        bool "QEMU Cirrus CLGD 54xx VGA BIOS"
+        default n
+        help
+            Build support for Cirrus VGA emulation.
+    
+    config VGA_BOCHS
+        bool "Bochs DISPI interface VGA BIOS"
+        default n
+        help
+            Build support for Bochs DISPI interface
+    
+    config VGA_PCI
+        bool "PCI ROM Headers"
+        default y
+        help
+            Build PCI ROM headers so the vga rom can be extracted from
+            a PCI device.
+
+    config VGA_VID
+        depends on VGA_PCI
+        hex "Custom PCI Vendor ID"
+        default 0x0000
+        help
+            Custom Vendor ID for the PCI ROM
+    
+    config VGA_DID
+        depends on VGA_PCI
+        hex "Custom PCI Device ID"
+        default 0x0000
+        help
+            Custom Device ID for the PCI ROM
+endmenu
+
 menu "Debugging"
     config DEBUG_LEVEL
         int "Debug level"
diff --git a/vgasrc/vga.c b/vgasrc/vga.c
index b515d1d..b0d2598 100644
--- a/vgasrc/vga.c
+++ b/vgasrc/vga.c
@@ -17,10 +17,6 @@
 #include "vgatables.h" // find_vga_entry
 
 // XXX
-#define CONFIG_VGA_BOCHS 0
-#define CONFIG_VGA_CIRRUS 0
-
-// XXX
 #define DEBUG_VGA_POST 1
 #define DEBUG_VGA_10 3
 
diff --git a/vgasrc/vgaentry.S b/vgasrc/vgaentry.S
index fbfa9f7..6471928 100644
--- a/vgasrc/vgaentry.S
+++ b/vgasrc/vgaentry.S
@@ -12,15 +12,21 @@
         .code16gcc
 #include "vgaccode.16.s"
 
+#include "config.h" // CONFIG_*
 #include "entryfuncs.S" // ENTRY_*
 
 
+
 /****************************************************************
  * Rom Header
  ****************************************************************/
 
         .section .rom.header
         .global _rom_header, _rom_header_size, _rom_header_checksum
+#ifdef CONFIG_VGA_PCI
+        .global _rom_pci_data
+#endif
+
 _rom_header:
         .word 0xaa55
 _rom_header_size:
@@ -29,9 +35,46 @@ _rom_header_entry:
         jmp _optionrom_entry
 _rom_header_checksum:
         .byte 0
-_rom_header_other:
-        .space 21
+_rom_header_rsrvd:
+        .space 17
+_rom_header_pcidata:
+#ifdef CONFIG_VGA_PCI
+        .word _rom_pci_data
+#else
+        .word 0
+#endif
+_rom_header_pnpdata:
+        .word 0
 
+/****************************************************************
+ * PCI Data
+ ****************************************************************/
+#ifdef CONFIG_PCIBIOS
+_rom_pci_data:
+        .ascii "PCIR"
+#if defined(CONFIG_VGA_VID) && defined(CONFIG_VGA_DID)
+        .word CONFIG_VGA_VID /* VendorID */
+        .word CONFIG_VGA_DID /* DeviceID */
+#elif defined(CONFIG_VGA_CIRRUS)
+        .word 0x1013
+        .word 0x00b8
+#elif defined(CONFIG_VGA_BOCHS)
+        .word 0x1234
+        .word 0x1111
+#else
+#error "Uknown PCI vendor or device ID"
+#endif
+        .word 0x0 /* Reserved */
+        .word 0x18 /* dlen */
+        .byte 0x0 /* Revision */
+        .byte 0x0 /* Class lo */
+        .word 0x300 /* Class hi */
+        .word 0x0 /* ilen */
+        .word 0x1 /* Revision */
+        .byte 0 /* Type */
+        .byte 0x80 /* Indicator */
+        .word 0x0 /* Reserved */
+#endif
 
 /****************************************************************
  * Entry points
-- 
Julian Pidancet




More information about the SeaBIOS mailing list