VirtualBox

Changeset 87789 in vbox


Ignore:
Timestamp:
Feb 18, 2021 3:16:05 PM (4 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
142849
Message:

PCI: Fake BIOS needs to enable I/O decoding for any VGA class device, not just for vendor IDs it happens to like. Fixes yellow bang in Win7 guest for unknown vendor IDs.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Bus/DevPCI.cpp

    r85478 r87789  
    656656                        {
    657657                            paddr = &pGlobals->uPciBiosMmio;
    658                             bool fPrefetch =    (u8ResourceType & ((uint8_t)(PCI_ADDRESS_SPACE_MEM_PREFETCH | PCI_ADDRESS_SPACE_IO)))
    659                                              == PCI_ADDRESS_SPACE_MEM_PREFETCH;
    660 
    661                             if (devclass == 0x0300 && (vendor_id == 0x80ee || vendor_id == 0x15ad) && fPrefetch)
     658                            if (devclass == 0x0300)
    662659                            {
    663                                 /* VGA: map frame buffer to default Bochs VBE address */
    664                                 paddr = &uPciBiosSpecialVRAM;
    665660                                /*
    666                                  * For VBoxVGA must enable I/O decoding, because legacy
    667                                  * VGA I/O ports are implicitly decoded by a VGA class
    668                                  * device. Not needed for VMSVGA or VBoxSVGA, because
    669                                  * they have an explicit I/O BAR.
     661                                 * Because legacy VGA I/O ports are implicitly decoded
     662                                 * by a VGA class device without needing a BAR, we must
     663                                 * enable I/O decoding for such devices.
    670664                                 */
    671665                                fActiveIORegion = true;
     666
     667                                if (vendor_id == 0x80ee || vendor_id == 0x15ad)
     668                                {
     669                                    bool fPrefetch =    (u8ResourceType & ((uint8_t)(PCI_ADDRESS_SPACE_MEM_PREFETCH | PCI_ADDRESS_SPACE_IO)))
     670                                                     == PCI_ADDRESS_SPACE_MEM_PREFETCH;
     671                                    /* VGA: map frame buffer to default Bochs VBE address. Only
     672                                     * needed for legacy guest drivers. */
     673                                    if (fPrefetch)
     674                                        paddr = &uPciBiosSpecialVRAM;
     675                                }
    672676                            }
    673677                        }
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette