Changeset 21837 in vbox for trunk/src/VBox/Devices/PC/DevACPI.cpp
- Timestamp:
- Jul 28, 2009 1:12:23 PM (16 years ago)
- svn:sync-xref-src-repo-rev:
- 50466
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/PC/DevACPI.cpp
r21829 r21837 67 67 PM_TMR_OFFSET = 0x08, 68 68 GPE0_OFFSET = 0x20, 69 GPE1_OFFSET = -1 /**< not supported */69 GPE1_OFFSET = -1 /**< not supported */ 70 70 }; 71 71 … … 231 231 bool fR0Enabled; 232 232 /** Aligning IBase. */ 233 bool afAlignment[ 4];233 bool afAlignment[2]; 234 234 235 235 /** ACPI port base interface. */ … … 1708 1708 static int acpiUnregisterPmHandlers(ACPIState *pThis) 1709 1709 { 1710 /** @todo r=bird: How can this work when acpiDeregisterPmHandlers is called1711 * after the guest changed uPmIoPortBase? */1712 1710 #define U(offset, cnt) \ 1713 1711 do { \ … … 1757 1755 SSMFIELD_ENTRY(ACPIState, pm1a_sts), 1758 1756 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. */1760 1757 SSMFIELD_ENTRY(ACPIState, pm_timer_initial), 1761 1758 SSMFIELD_ENTRY(ACPIState, gpe0_en), … … 1763 1760 SSMFIELD_ENTRY(ACPIState, uBatteryIndex), 1764 1761 SSMFIELD_ENTRY(ACPIState, uSystemInfoIndex), 1765 SSMFIELD_ENTRY(ACPIState, u64RamSize), /**< @todo r=bird: ditto. */1766 1762 SSMFIELD_ENTRY(ACPIState, uSleepState), 1767 1763 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. */1774 1764 SSMFIELD_ENTRY(ACPIState, uPmIoPortBase), 1775 SSMFIELD_ENTRY(ACPIState, fGCEnabled), /**< @todo r=bird: ditto. */1776 SSMFIELD_ENTRY(ACPIState, fR0Enabled), /**< @todo r=bird: ditto. */1777 1765 SSMFIELD_ENTRY_TERM() 1778 1766 }; … … 1790 1778 ACPIState *s = PDMINS_2_DATA(pDevIns, ACPIState *); 1791 1779 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; 1792 1788 1793 1789 switch (u32Version) … … 1805 1801 if (RT_SUCCESS(rc)) 1806 1802 { 1807 /** @todo r=bird: Why aren't the handlers deregistered first? */1808 1803 rc = acpiRegisterPmHandlers(s); 1809 1804 if (RT_FAILURE(rc)) … … 1962 1957 ACPIState *pThis = PDMINS_2_DATA(pDevIns, ACPIState *); 1963 1958 1964 if (Address == 0x40) 1965 { 1966 pThis->uPmIoPortBase = u32Value & 0xffc0; 1967 } 1968 1959 pThis->pfnAcpiPciConfigWrite(pPciDev, Address, u32Value, cb); 1960 1961 /* PMREGMISC written */ 1969 1962 if (Address == 0x80) 1970 1963 { 1971 if (u32Value & 1) 1964 /* Check Power Management IO Space Enable (PMIOSE) bit */ 1965 if (pPciDev->config[0x80] & 0x1) 1972 1966 { 1973 1967 int rc; 1974 1968 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 } 1979 1983 } 1980 1984 } 1981 1982 pThis->pfnAcpiPciConfigWrite(pPciDev, Address, u32Value, cb);1983 1985 } 1984 1986
Note:
See TracChangeset
for help on using the changeset viewer.