Try to find isa vga cards in case pci probe found nothing.
Signed-off-by: Gerd Hoffmann kraxel@redhat.com --- vgasrc/bochsvga.c | 7 +++++++ vgasrc/bochsvga.h | 1 + vgasrc/clext.c | 6 ++++++ vgasrc/clext.h | 1 + vgasrc/vgahw.c | 20 +++++++++++++++++++- 5 files changed, 34 insertions(+), 1 deletions(-)
diff --git a/vgasrc/bochsvga.c b/vgasrc/bochsvga.c index 82629b9..107bb70 100644 --- a/vgasrc/bochsvga.c +++ b/vgasrc/bochsvga.c @@ -140,6 +140,13 @@ bochsvga_init(void) return 0; }
+int +bochsvga_isa_probe(void) +{ + dispi_write(VBE_DISPI_INDEX_ID, VBE_DISPI_ID0); + return dispi_read(VBE_DISPI_INDEX_ID) == VBE_DISPI_ID0; +} + static int mode_valid(struct vgamode_s *vmode_g) { u16 max_xres = dispi_get_max_xres(); diff --git a/vgasrc/bochsvga.h b/vgasrc/bochsvga.h index 81fb8f7..cf358b4 100644 --- a/vgasrc/bochsvga.h +++ b/vgasrc/bochsvga.h @@ -53,6 +53,7 @@ static inline void dispi_write(u16 reg, u16 val) }
int bochsvga_init(void); +int bochsvga_isa_probe(void); void bochsvga_list_modes(u16 seg, u16 *dest, u16 *last); struct vgamode_s *bochsvga_find_mode(int mode); int bochsvga_set_mode(int mode, int flags); diff --git a/vgasrc/clext.c b/vgasrc/clext.c index f08294a..e74e8c5 100644 --- a/vgasrc/clext.c +++ b/vgasrc/clext.c @@ -755,3 +755,9 @@ clext_init(void)
return 0; } + +int +clext_isa_probe(void) +{ + return cirrus_check(); +} diff --git a/vgasrc/clext.h b/vgasrc/clext.h index a14cf13..3b03298 100644 --- a/vgasrc/clext.h +++ b/vgasrc/clext.h @@ -7,6 +7,7 @@ struct vgamode_s *clext_find_mode(int mode); int clext_set_mode(int mode, int flags); void clext_list_modes(u16 seg, u16 *dest, u16 *last); int clext_init(void); +int clext_isa_probe(void); struct bregs; void clext_1012(struct bregs *regs);
diff --git a/vgasrc/vgahw.c b/vgasrc/vgahw.c index 7620d59..31d53bb 100644 --- a/vgasrc/vgahw.c +++ b/vgasrc/vgahw.c @@ -89,7 +89,25 @@ int vgahw_init(void) { break; } } - } else { + } + + if (GET_GLOBAL(vga_type) == VGA_TYPE_UNDEFINED) { + if (CONFIG_VGA_CIRRUS) { + if (clext_isa_probe()) { + SET_VGA(vga_type, VGA_TYPE_CIRRUS); + dprintf(1, "vgahw: detected Cirrus VGA [isa]\n"); + } + } else if (CONFIG_VGA_BOCHS) { + if (bochsvga_isa_probe()) { + SET_VGA(vga_type, VGA_TYPE_BOCHS); + dprintf(1, "vgahw: detected bochs svga [isa]\n"); + } + } + } + + if (GET_GLOBAL(vga_type) == VGA_TYPE_UNDEFINED) { + SET_VGA(vga_type, VGA_TYPE_STDVGA); + dprintf(1, "vgahw: no hw found, using stdvga\n"); }
if (HAVE_VGA_CIRRUS)