Changeset 44626 in vbox for trunk/src/VBox/Devices/PC
- Timestamp:
- Feb 11, 2013 10:52:19 AM (12 years ago)
- svn:sync-xref-src-repo-rev:
- 83713
- Location:
- trunk/src/VBox/Devices/PC
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/PC/DevACPI.cpp
r44514 r44626 1720 1720 R(PM1a_EVT_OFFSET, 1, acpiR3PM1aStsWrite, acpiR3Pm1aStsRead, "ACPI PM1a Status"); 1721 1721 R(PM1a_CTL_OFFSET, 1, acpiR3PM1aCtlWrite, acpiR3Pm1aCtlRead, "ACPI PM1a Control"); 1722 R(PM_TMR_OFFSET, 1, NULL, acpiPMTmrRead,"ACPI PM Timer");1722 R(PM_TMR_OFFSET, 1, NULL, acpiPMTmrRead, "ACPI PM Timer"); 1723 1723 R(GPE0_OFFSET + L, L, acpiR3Gpe0EnWrite, acpiR3Gpe0EnRead, "ACPI GPE0 Enable"); 1724 1724 R(GPE0_OFFSET, L, acpiR3Gpe0StsWrite, acpiR3Gpe0StsRead, "ACPI GPE0 Status"); -
trunk/src/VBox/Devices/PC/DevAPIC.cpp
r44515 r44626 1812 1812 APICState *pApic = apicGetStateByCurEmt(pDev); 1813 1813 1814 Log(("CPU%d: apicMMIORead at %llx\n", pApic->phys_id, (uint64_t)GCPhysAddr)); 1814 Log(("CPU%d: apicMMIORead at %RGp\n", pApic->phys_id, GCPhysAddr)); 1815 Assert(cb == 4); 1815 1816 1816 1817 /** @todo add LAPIC range validity checks (different LAPICs can … … 1818 1819 1819 1820 STAM_COUNTER_INC(&CTXSUFF(pDev->StatMMIORead)); 1820 switch (cb)1821 {1822 case 1:1823 /** @todo this is not how recent APIC behave! We will fix1824 * this via the IOM. */1825 *(uint8_t *)pv = 0;1826 break;1827 1828 case 2:1829 /** @todo this is not how recent APIC behave! */1830 *(uint16_t *)pv = 0;1831 break;1832 1833 case 4:1834 {1835 1821 #if 0 /* Note! experimental */ 1836 1822 #ifndef IN_RING3 1837 1838 1839 1840 1841 1842 # ifdef IN_RC1843 1844 # else1845 1846 1847 # endif1848 1849 1823 uint32_t index = (GCPhysAddr >> 4) & 0xff; 1824 1825 if ( index == 0x08 /* TPR */ 1826 && ++pApic->cTPRPatchAttempts < APIC_MAX_PATCH_ATTEMPTS) 1827 { 1828 # ifdef IN_RC 1829 pDevIns->pDevHlpGC->pfnPATMSetMMIOPatchInfo(pDevIns, GCPhysAddr, &pApic->tpr); 1830 # else 1831 RTGCPTR pDevInsGC = PDMINS2DATA_GCPTR(pDevIns); 1832 pDevIns->pHlpR0->pfnPATMSetMMIOPatchInfo(pDevIns, GCPhysAddr, pDevIns + RT_OFFSETOF(APICState, tpr)); 1833 # endif 1834 return VINF_PATM_HC_MMIO_PATCH_READ; 1835 } 1850 1836 #endif 1851 1837 #endif /* experimental */ 1852 1838 1853 /* It does its own locking. */ 1854 uint64_t u64Value = 0; 1855 int rc = apicReadRegister(pDev, pApic, (GCPhysAddr >> 4) & 0xff, &u64Value, 1856 VINF_IOM_R3_MMIO_READ, false /*fMsr*/); 1857 *(uint32_t *)pv = (uint32_t)u64Value; 1858 return rc; 1859 } 1860 1861 default: 1862 AssertReleaseMsgFailed(("cb=%d\n", cb)); /* for now we assume simple accesses. */ 1863 return VERR_INTERNAL_ERROR; 1864 } 1865 return VINF_SUCCESS; 1839 /* Note! apicReadRegister does its own locking. */ 1840 uint64_t u64Value = 0; 1841 int rc = apicReadRegister(pDev, pApic, (GCPhysAddr >> 4) & 0xff, &u64Value, VINF_IOM_R3_MMIO_READ, false /*fMsr*/); 1842 *(uint32_t *)pv = (uint32_t)u64Value; 1843 return rc; 1866 1844 } 1867 1845 … … 1871 1849 APICState *pApic = apicGetStateByCurEmt(pDev); 1872 1850 1873 Log(("CPU%d: apicMMIOWrite at %llx\n", pApic->phys_id, (uint64_t)GCPhysAddr)); 1851 Log(("CPU%d: apicMMIOWrite at %RGp\n", pApic->phys_id, GCPhysAddr)); 1852 Assert(cb == 4); 1874 1853 1875 1854 /** @todo: add LAPIC range validity checks (multiple LAPICs can theoretically have … … 1877 1856 1878 1857 STAM_COUNTER_INC(&CTXSUFF(pDev->StatMMIOWrite)); 1879 switch (cb) 1880 { 1881 case 1: 1882 case 2: 1883 /* ignore */ 1884 break; 1885 1886 case 4: 1887 /* It does its own locking. */ 1888 return apicWriteRegister(pDev, pApic, (GCPhysAddr >> 4) & 0xff, *(uint32_t const *)pv, 1889 VINF_IOM_R3_MMIO_WRITE, false /*fMsr*/); 1890 1891 default: 1892 AssertReleaseMsgFailed(("cb=%d\n", cb)); /* for now we assume simple accesses. */ 1893 return VERR_INTERNAL_ERROR; 1894 } 1895 return VINF_SUCCESS; 1858 /* Note! It does its own locking. */ 1859 return apicWriteRegister(pDev, pApic, (GCPhysAddr >> 4) & 0xff, *(uint32_t const *)pv, 1860 VINF_IOM_R3_MMIO_WRITE, false /*fMsr*/); 1896 1861 } 1897 1862 … … 2381 2346 uint32_t ApicBase = pDev->paLapicsR3[0].apicbase & ~0xfff; 2382 2347 rc = PDMDevHlpMMIORegister(pDevIns, ApicBase, 0x1000, pDev, 2383 IOMMMIO_FLAGS_READ_ PASSTHRU | IOMMMIO_FLAGS_WRITE_PASSTHRU,2348 IOMMMIO_FLAGS_READ_DWORD | IOMMMIO_FLAGS_WRITE_ONLY_DWORD, 2384 2349 apicMMIOWrite, apicMMIORead, "APIC Memory"); 2385 2350 if (RT_FAILURE(rc))
Note:
See TracChangeset
for help on using the changeset viewer.