VirtualBox

Ignore:
Timestamp:
Jul 28, 2009 1:12:23 PM (16 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
50466
Message:

ACPI: correect PM rebasing, now Fedora EFI installs with ACPI timer

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/PC/DevACPI.cpp

    r21829 r21837  
    6767    PM_TMR_OFFSET                       = 0x08,
    6868    GPE0_OFFSET                         = 0x20,
    69     GPE1_OFFSET                         =   -1   /**<  not supported  */
     69    GPE1_OFFSET                         =   -1    /**<  not supported  */
    7070};
    7171
     
    231231    bool                fR0Enabled;
    232232    /** Aligning IBase. */
    233     bool                afAlignment[4];
     233    bool                afAlignment[2];
    234234
    235235    /** ACPI port base interface. */
     
    17081708static int acpiUnregisterPmHandlers(ACPIState *pThis)
    17091709{
    1710     /** @todo r=bird: How can this work when acpiDeregisterPmHandlers is called
    1711      *        after the guest changed uPmIoPortBase? */
    17121710#define U(offset, cnt) \
    17131711    do { \
     
    17571755    SSMFIELD_ENTRY(ACPIState, pm1a_sts),
    17581756    SSMFIELD_ENTRY(ACPIState, pm1a_ctl),
    1759     SSMFIELD_ENTRY(ACPIState, cCpus),           /**< @todo r=bird: This is a configuration parameter that will not change, so no need to save it. */
    17601757    SSMFIELD_ENTRY(ACPIState, pm_timer_initial),
    17611758    SSMFIELD_ENTRY(ACPIState, gpe0_en),
     
    17631760    SSMFIELD_ENTRY(ACPIState, uBatteryIndex),
    17641761    SSMFIELD_ENTRY(ACPIState, uSystemInfoIndex),
    1765     SSMFIELD_ENTRY(ACPIState, u64RamSize),      /**< @todo r=bird: ditto. */
    17661762    SSMFIELD_ENTRY(ACPIState, uSleepState),
    17671763    SSMFIELD_ENTRY(ACPIState, u8IndexShift),
    1768     SSMFIELD_ENTRY(ACPIState, u8UseIOApic),     /**< @todo r=bird: ditto. */
    1769     SSMFIELD_ENTRY(ACPIState, fUseFdc),         /**< @todo r=bird: ditto. */
    1770     SSMFIELD_ENTRY(ACPIState, fUseHpet),        /**< @todo r=bird: ditto. */
    1771     SSMFIELD_ENTRY(ACPIState, fUseSmc),         /**< @todo r=bird: ditto. */
    1772     SSMFIELD_ENTRY(ACPIState, fShowCpu),        /**< @todo r=bird: ditto. */
    1773     SSMFIELD_ENTRY(ACPIState, fShowRtc),        /**< @todo r=bird: ditto. */
    17741764    SSMFIELD_ENTRY(ACPIState, uPmIoPortBase),
    1775     SSMFIELD_ENTRY(ACPIState, fGCEnabled),      /**< @todo r=bird: ditto. */
    1776     SSMFIELD_ENTRY(ACPIState, fR0Enabled),      /**< @todo r=bird: ditto. */
    17771765    SSMFIELD_ENTRY_TERM()
    17781766};
     
    17901778    ACPIState *s = PDMINS_2_DATA(pDevIns, ACPIState *);
    17911779    int rc;
     1780
     1781    /*
     1782     * Unregister PM handlers, will register with actual base
     1783     * after state successfully loaded.
     1784     */
     1785    rc = acpiUnregisterPmHandlers(s);
     1786    if (RT_FAILURE(rc))
     1787        return rc;
    17921788
    17931789    switch (u32Version)
     
    18051801    if (RT_SUCCESS(rc))
    18061802    {
    1807         /** @todo r=bird: Why aren't the handlers deregistered first? */
    18081803        rc = acpiRegisterPmHandlers(s);
    18091804        if (RT_FAILURE(rc))
     
    19621957    ACPIState  *pThis   = PDMINS_2_DATA(pDevIns, ACPIState *);
    19631958
    1964     if (Address == 0x40)
    1965     {
    1966         pThis->uPmIoPortBase = u32Value & 0xffc0;
    1967     }
    1968 
     1959    pThis->pfnAcpiPciConfigWrite(pPciDev, Address, u32Value, cb);
     1960
     1961    /* PMREGMISC written */
    19691962    if (Address == 0x80)
    19701963    {
    1971         if (u32Value & 1)
     1964        /* Check Power Management IO Space Enable (PMIOSE) bit */
     1965        if (pPciDev->config[0x80] & 0x1)
    19721966        {
    19731967            int rc;
    19741968
    1975             acpiUnregisterPmHandlers(pThis);
    1976 
    1977             rc = acpiRegisterPmHandlers(pThis);
    1978             Assert(RT_SUCCESS(rc));
     1969            RTIOPORT uNewBase =
     1970                    RTIOPORT(RT_LE2H_U32(*(uint32_t*)&pPciDev->config[0x40]));
     1971            uNewBase &= 0xffc0;
     1972
     1973            if (uNewBase != pThis->uPmIoPortBase)
     1974            {
     1975                rc = acpiUnregisterPmHandlers(pThis);
     1976                Assert(RT_SUCCESS(rc));
     1977
     1978                pThis->uPmIoPortBase = uNewBase;
     1979
     1980                rc = acpiRegisterPmHandlers(pThis);
     1981                Assert(RT_SUCCESS(rc));
     1982            }
    19791983        }
    19801984    }
    1981 
    1982     pThis->pfnAcpiPciConfigWrite(pPciDev, Address, u32Value, cb);
    19831985}
    19841986
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