|
@@ -228,11 +228,12 @@ int vbe_get_video_info(struct graphic_device *gdev)
|
|
|
#endif
|
|
|
}
|
|
|
|
|
|
-int pci_run_vga_bios(pci_dev_t dev, int (*int15_handler)(void), bool emulate)
|
|
|
+int pci_run_vga_bios(pci_dev_t dev, int (*int15_handler)(void), int exec_method)
|
|
|
{
|
|
|
struct pci_rom_header *rom, *ram;
|
|
|
int vesa_mode = -1;
|
|
|
uint16_t class;
|
|
|
+ bool emulate;
|
|
|
int ret;
|
|
|
|
|
|
/* Only execute VGA ROMs */
|
|
@@ -262,6 +263,29 @@ int pci_run_vga_bios(pci_dev_t dev, int (*int15_handler)(void), bool emulate)
|
|
|
vesa_mode = CONFIG_FRAMEBUFFER_VESA_MODE;
|
|
|
#endif
|
|
|
debug("Selected vesa mode %#x\n", vesa_mode);
|
|
|
+
|
|
|
+ if (exec_method & PCI_ROM_USE_NATIVE) {
|
|
|
+#ifdef CONFIG_X86
|
|
|
+ emulate = false;
|
|
|
+#else
|
|
|
+ if (!(exec_method & PCI_ROM_ALLOW_FALLBACK)) {
|
|
|
+ printf("BIOS native execution is only available on x86\n");
|
|
|
+ return -ENOSYS;
|
|
|
+ }
|
|
|
+ emulate = true;
|
|
|
+#endif
|
|
|
+ } else {
|
|
|
+#ifdef CONFIG_BIOSEMU
|
|
|
+ emulate = true;
|
|
|
+#else
|
|
|
+ if (!(exec_method & PCI_ROM_ALLOW_FALLBACK)) {
|
|
|
+ printf("BIOS emulation not available - see CONFIG_BIOSEMU\n");
|
|
|
+ return -ENOSYS;
|
|
|
+ }
|
|
|
+ emulate = false;
|
|
|
+#endif
|
|
|
+ }
|
|
|
+
|
|
|
if (emulate) {
|
|
|
#ifdef CONFIG_BIOSEMU
|
|
|
BE_VGAInfo *info;
|
|
@@ -274,9 +298,6 @@ int pci_run_vga_bios(pci_dev_t dev, int (*int15_handler)(void), bool emulate)
|
|
|
vesa_mode, &mode_info);
|
|
|
if (ret)
|
|
|
return ret;
|
|
|
-#else
|
|
|
- printf("BIOS emulation not available - see CONFIG_BIOSEMU\n");
|
|
|
- return -ENOSYS;
|
|
|
#endif
|
|
|
} else {
|
|
|
#ifdef CONFIG_X86
|
|
@@ -284,9 +305,6 @@ int pci_run_vga_bios(pci_dev_t dev, int (*int15_handler)(void), bool emulate)
|
|
|
|
|
|
bios_run_on_x86(dev, (unsigned long)ram, vesa_mode,
|
|
|
&mode_info);
|
|
|
-#else
|
|
|
- printf("BIOS native execution is only available on x86\n");
|
|
|
- return -ENOSYS;
|
|
|
#endif
|
|
|
}
|
|
|
debug("Final vesa mode %#x\n", mode_info.video_mode);
|