X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=vgasrc%2Fvgabios.c;h=62b09b45caad464c3e9d8014a75d4f0f4b1d9e72;hb=4a73f933968e5cf6f2a6ce1ad87448dd6b136e48;hp=449f3c4085b23e04d45ddde8d0da0e6901ffcdb4;hpb=aad3b695b782534908bfce0f0f60314cb4ea3694;p=seabios.git diff --git a/vgasrc/vgabios.c b/vgasrc/vgabios.c index 449f3c4..62b09b4 100644 --- a/vgasrc/vgabios.c +++ b/vgasrc/vgabios.c @@ -20,6 +20,8 @@ #include "stdvga.h" // stdvga_set_cursor_shape #include "clext.h" // clext_1012 #include "vgahw.h" // vgahw_set_mode +#include "pci.h" // pci_config_readw +#include "pci_regs.h" // PCI_VENDOR_ID // XXX #define DEBUG_VGA_POST 1 @@ -149,7 +151,7 @@ set_active_page(u8 page) return; // Get the mode - struct vgamode_s *vmode_g = vgahw_find_mode(GET_BDA(video_mode)); + struct vgamode_s *vmode_g = get_current_mode(); if (!vmode_g) return; @@ -334,6 +336,17 @@ restore_bda_state(u16 seg, struct saveBDAstate *info) SET_IVT(0x43, GET_FARVAR(seg, info->font1)); } + +/**************************************************************** + * Mode setting + ****************************************************************/ + +struct vgamode_s * +get_current_mode(void) +{ + return vgahw_find_mode(GET_BDA(video_mode)); +} + // Setup BDA after a mode switch. void modeswitch_set_bda(int mode, int flags, struct vgamode_s *vmode_g) @@ -1226,14 +1239,19 @@ init_bios_area(void) SET_BDA(video_msr, 0x09); } -u16 VgaBDF VAR16; +int VgaBDF VAR16 = -1; void VISIBLE16 vga_post(struct bregs *regs) { debug_enter(regs, DEBUG_VGA_POST); - SET_VGA(VgaBDF, regs->ax); + if (CONFIG_VGA_PCI) { + u16 bdf = regs->ax; + if (pci_config_readw(bdf, PCI_VENDOR_ID) == CONFIG_VGA_VID + && pci_config_readw(bdf, PCI_DEVICE_ID) == CONFIG_VGA_DID) + SET_VGA(VgaBDF, bdf); + } int ret = vgahw_init(); if (ret) {