VirtualBox

Changeset 74441 in vbox for trunk


Ignore:
Timestamp:
Sep 24, 2018 1:00:15 PM (6 years ago)
Author:
vboxsync
Message:

ACPI: Disable native PCIe capability control in _OSC method to make Windows guests happy (bugref:8973).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/PC/vbox.dsl

    r70713 r74441  
    16341634            }
    16351635
     1636            /* Defined in PCI Firmware Specification 3.0 and ACPI 3.0, with both specs
     1637             * referencing each other. The _OSC method must be present to make Linux happy,
     1638             * but needs to prevent the OS from taking much control so as to not upset Windows.
     1639             * NB: The first DWORD is defined in the ACPI spec but not the PCI FW spec.
     1640             */
    16361641            Method (_OSC, 4)
    16371642            {
     1643                Name(SUPP, 0)   // Support field value
     1644                Name(CTRL, 0)   // Control field value
     1645
     1646                // Break down the input capabilities buffer into individual DWORDs
     1647                CreateDWordField(Arg3, 0, CDW1)
     1648                CreateDWordField(Arg3, 4, CDW2)
     1649                CreateDWordField(Arg3, 8, CDW3)
     1650
    16381651                If (LEqual (Arg0, ToUUID("33db4d5b-1ff7-401c-9657-7441c03dd766")))
    16391652                {
    1640                     // OS controls everything.
    1641                     Return (Arg3)
     1653                    // Stash the Support and Control fields
     1654                    Store(CDW2, SUPP)
     1655                    Store(CDW3, CTRL)
     1656
     1657                    DBG("_OSC: SUPP=")
     1658                    HEX4(SUPP)
     1659                    DBG(" CTRL=")
     1660                    HEX4(CTRL)
     1661                    DBG("\n")
     1662
     1663                    // Mask off the PCI Express Capability Structure control
     1664                    // Not emulated well enough to satisfy Windows (Vista and later)
     1665                    And(CTRL, 0x0F, CTRL)
     1666
     1667                    // If capabilities were masked, set the Capabilities Masked flag (bit 4)
     1668                    If (LNotEqual(CDW3, CTRL))
     1669                    {
     1670                        Or(CDW1, 0x10, CDW1)
     1671                    }
     1672
     1673                    // Update the Control field and return
     1674                    Store(CTRL, CDW3)
     1675                    Return(Arg3)
    16421676                }
    16431677                Else
    16441678                {
    1645                     // UUID not known
    1646                     CreateDWordField(Arg3, 0, CDW1)
    1647                     Or(CDW1, 4, CDW1)
    1648                     Return (Arg3)
     1679                    // UUID not known, set Unrecognized UUID flag (bit 2)
     1680                    Or(CDW1, 0x04, CDW1)
     1681                    Return(Arg3)
    16491682                }
    16501683            }
Note: See TracChangeset for help on using the changeset viewer.

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