diff options
author | Gerd Hoffmann <kraxel@redhat.com> | 2018-05-30 13:49:06 +0200 |
---|---|---|
committer | Gerd Hoffmann <kraxel@redhat.com> | 2018-07-02 16:34:20 +0200 |
commit | 7906460db114f96d656d938065bad13594f21a76 (patch) | |
tree | ab5cfc02adacd3deb69b97a7a84cde5155f24319 | |
parent | 0551a4be2ce599fb60e478b4c15e06ab6587822c (diff) | |
download | seabios-7906460db114f96d656d938065bad13594f21a76.zip seabios-7906460db114f96d656d938065bad13594f21a76.tar.gz seabios-7906460db114f96d656d938065bad13594f21a76.tar.bz2 |
optionrom: enable non-vga display devices
In case no VGA device was found look for other display devices.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
(cherry picked from commit e28e0bb39b6a8cca7da196491ad80f1b96d1c806)
-rw-r--r-- | src/optionroms.c | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/src/optionroms.c b/src/optionroms.c index 092393a..fc992f6 100644 --- a/src/optionroms.c +++ b/src/optionroms.c @@ -350,7 +350,9 @@ optionrom_setup(void) // Find and deploy PCI roms. struct pci_device *pci; foreachpci(pci) { - if (pci->class == PCI_CLASS_DISPLAY_VGA || pci->have_driver) + if (pci->class == PCI_CLASS_DISPLAY_VGA || + pci->class == PCI_CLASS_DISPLAY_OTHER || + pci->have_driver) continue; init_pcirom(pci, 0, sources); } @@ -400,10 +402,32 @@ optionrom_setup(void) int ScreenAndDebug; struct rom_header *VgaROM; +static void try_setup_display_other(void) +{ + struct pci_device *pci; + + dprintf(1, "No VGA found, scan for other display\n"); + + foreachpci(pci) { + if (pci->class != PCI_CLASS_DISPLAY_OTHER) + continue; + struct rom_header *rom = map_pcirom(pci); + if (!rom) + continue; + dprintf(1, "Other display found at %pP\n", pci); + pci_config_maskw(pci->bdf, PCI_COMMAND, 0, + PCI_COMMAND_IO | PCI_COMMAND_MEMORY); + init_optionrom(rom, pci->bdf, 1); + return; + } +} + // Call into vga code to turn on console. void vgarom_setup(void) { + int have_vga = 0; + if (! CONFIG_OPTIONROMS) return; @@ -425,8 +449,11 @@ vgarom_setup(void) continue; vgahook_setup(pci); init_pcirom(pci, 1, NULL); + have_vga = 1; break; } + if (!have_vga) + try_setup_display_other(); // Find and deploy CBFS vga-style roms not associated with a device. run_file_roms("vgaroms/", 1, NULL); |