Changeset 50590 in vbox for trunk/src/VBox/VMM
- Timestamp:
- Feb 25, 2014 6:51:23 PM (11 years ago)
- svn:sync-xref-src-repo-rev:
- 92460
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 17 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/CPUMAllMsrs.cpp
r50584 r50590 182 182 183 183 /** @callback_method_impl{FNCPUMRDMSR} */ 184 static DECLCALLBACK(int) cpumMsrRd_Ia32PlatformId(PVMCPU pVCpu, uint32_t idMsr, PCCPUMMSRRANGE pRange, uint64_t *puValue) 185 { 186 uint64_t uValue = pRange->uValue; 187 if (uValue & 0x1f00) 188 { 189 /* Max allowed bus ratio present. */ 190 /** @todo Implement scaled BUS frequency. */ 191 } 192 193 *puValue = uValue; 194 return VINF_SUCCESS; 195 } 196 197 198 /** @callback_method_impl{FNCPUMRDMSR} */ 184 199 static DECLCALLBACK(int) cpumMsrRd_Ia32ApicBase(PVMCPU pVCpu, uint32_t idMsr, PCCPUMMSRRANGE pRange, uint64_t *puValue) 185 200 { … … 714 729 static DECLCALLBACK(int) cpumMsrRd_Ia32PerfStatus(PVMCPU pVCpu, uint32_t idMsr, PCCPUMMSRRANGE pRange, uint64_t *puValue) 715 730 { 716 /** @todo implement IA32_PERFSTATUS. */ 717 *puValue = pRange->uValue; 731 uint64_t uValue = pRange->uValue; 732 733 /* Always provide the max bus ratio for now. XNU expects it. */ 734 uValue &= ~((UINT64_C(0x1f) << 40) | RT_BIT_64(46)); 735 736 PVM pVM = pVCpu->CTX_SUFF(pVM); 737 uint64_t uScalableBusHz = CPUMGetGuestScalableBusFrequency(pVM); 738 uint64_t uTscHz = TMCpuTicksPerSecond(pVM); 739 uint8_t uTscRatio = (uint8_t)((uTscHz + uScalableBusHz / 2) / uScalableBusHz); 740 if (uTscRatio > 0x1f) 741 uTscRatio = 0x1f; 742 uValue |= (uint64_t)uTscRatio << 40; 743 744 *puValue = uValue; 718 745 return VINF_SUCCESS; 719 746 } … … 1530 1557 static DECLCALLBACK(int) cpumMsrRd_IntelP4EbcFrequencyId(PVMCPU pVCpu, uint32_t idMsr, PCCPUMMSRRANGE pRange, uint64_t *puValue) 1531 1558 { 1559 uint64_t uValue; 1560 PVM pVM = pVCpu->CTX_SUFF(pVM); 1561 uint64_t uScalableBusHz = CPUMGetGuestScalableBusFrequency(pVM); 1562 if (pVM->cpum.s.GuestFeatures.uModel >= 2) 1563 { 1564 if (uScalableBusHz <= CPUM_SBUSFREQ_100MHZ && pVM->cpum.s.GuestFeatures.uModel <= 2) 1565 { 1566 uScalableBusHz = CPUM_SBUSFREQ_100MHZ; 1567 uValue = 0; 1568 } 1569 else if (uScalableBusHz <= CPUM_SBUSFREQ_133MHZ) 1570 { 1571 uScalableBusHz = CPUM_SBUSFREQ_133MHZ; 1572 uValue = 1; 1573 } 1574 else if (uScalableBusHz <= CPUM_SBUSFREQ_167MHZ) 1575 { 1576 uScalableBusHz = CPUM_SBUSFREQ_167MHZ; 1577 uValue = 3; 1578 } 1579 else if (uScalableBusHz <= CPUM_SBUSFREQ_200MHZ) 1580 { 1581 uScalableBusHz = CPUM_SBUSFREQ_200MHZ; 1582 uValue = 2; 1583 } 1584 else if (uScalableBusHz <= CPUM_SBUSFREQ_267MHZ && pVM->cpum.s.GuestFeatures.uModel > 2) 1585 { 1586 uScalableBusHz = CPUM_SBUSFREQ_267MHZ; 1587 uValue = 0; 1588 } 1589 else 1590 { 1591 uScalableBusHz = CPUM_SBUSFREQ_333MHZ; 1592 uValue = 6; 1593 } 1594 uValue <<= 16; 1595 1596 uint64_t uTscHz = TMCpuTicksPerSecond(pVM); 1597 uint8_t uTscRatio = (uint8_t)((uTscHz + uScalableBusHz / 2) / uScalableBusHz); 1598 uValue |= (uint32_t)uTscRatio << 24; 1599 1600 uValue |= pRange->uValue & ~UINT64_C(0xff0f0000); 1601 } 1602 else 1603 { 1604 /* Probably more stuff here, but intel doesn't want to tell us. */ 1605 uValue = pRange->uValue; 1606 uValue &= ~(RT_BIT_64(21) | RT_BIT_64(22) | RT_BIT_64(23)); /* 100 MHz is only documented value */ 1607 } 1608 1609 *puValue = uValue; 1610 return VINF_SUCCESS; 1611 } 1612 1613 1614 /** @callback_method_impl{FNCPUMWRMSR} */ 1615 static DECLCALLBACK(int) cpumMsrWr_IntelP4EbcFrequencyId(PVMCPU pVCpu, uint32_t idMsr, PCCPUMMSRRANGE pRange, uint64_t uValue, uint64_t uRawValue) 1616 { 1532 1617 /** @todo P4 bus frequency config */ 1533 *puValue = pRange->uValue; 1534 return VINF_SUCCESS; 1535 } 1536 1537 1538 /** @callback_method_impl{FNCPUMWRMSR} */ 1539 static DECLCALLBACK(int) cpumMsrWr_IntelP4EbcFrequencyId(PVMCPU pVCpu, uint32_t idMsr, PCCPUMMSRRANGE pRange, uint64_t uValue, uint64_t uRawValue) 1540 { 1541 /** @todo P4 bus frequency config */ 1542 return VINF_SUCCESS; 1543 } 1544 1545 1546 /** @callback_method_impl{FNCPUMRDMSR} */ 1547 static DECLCALLBACK(int) cpumMsrRd_IntelPlatformInfo100MHz(PVMCPU pVCpu, uint32_t idMsr, PCCPUMMSRRANGE pRange, uint64_t *puValue) 1548 { 1549 PVM pVM = pVCpu->CTX_SUFF(pVM); 1550 1618 return VINF_SUCCESS; 1619 } 1620 1621 1622 /** @callback_method_impl{FNCPUMRDMSR} */ 1623 static DECLCALLBACK(int) cpumMsrRd_IntelP6FsbFrequency(PVMCPU pVCpu, uint32_t idMsr, PCCPUMMSRRANGE pRange, uint64_t *puValue) 1624 { 1625 /* Convert the scalable bus frequency to the encoding in the intel manual (for core+). */ 1626 uint64_t uScalableBusHz = CPUMGetGuestScalableBusFrequency(pVCpu->CTX_SUFF(pVM)); 1627 if (uScalableBusHz <= CPUM_SBUSFREQ_100MHZ) 1628 *puValue = 5; 1629 else if (uScalableBusHz <= CPUM_SBUSFREQ_133MHZ) 1630 *puValue = 1; 1631 else if (uScalableBusHz <= CPUM_SBUSFREQ_167MHZ) 1632 *puValue = 3; 1633 else if (uScalableBusHz <= CPUM_SBUSFREQ_200MHZ) 1634 *puValue = 2; 1635 else if (uScalableBusHz <= CPUM_SBUSFREQ_267MHZ) 1636 *puValue = 0; 1637 else if (uScalableBusHz <= CPUM_SBUSFREQ_333MHZ) 1638 *puValue = 4; 1639 else /*if (uScalableBusHz <= CPUM_SBUSFREQ_400MHZ)*/ 1640 *puValue = 6; 1641 1642 *puValue |= pRange->uValue & ~UINT64_C(0x7); 1643 1644 return VINF_SUCCESS; 1645 } 1646 1647 1648 /** @callback_method_impl{FNCPUMRDMSR} */ 1649 static DECLCALLBACK(int) cpumMsrRd_IntelPlatformInfo(PVMCPU pVCpu, uint32_t idMsr, PCCPUMMSRRANGE pRange, uint64_t *puValue) 1650 { 1551 1651 /* Just indicate a fixed TSC, no turbo boost, no programmable anything. */ 1552 uint64_t uTscHz = TMCpuTicksPerSecond(pVM); 1553 uint8_t uTsc100MHz = (uint8_t)(uTscHz / UINT32_C(100000000)); 1554 *puValue = ((uint32_t)uTsc100MHz << 8) /* TSC invariant frequency. */ 1555 | ((uint64_t)uTsc100MHz << 40); /* The max turbo frequency. */ 1652 PVM pVM = pVCpu->CTX_SUFF(pVM); 1653 uint64_t uScalableBusHz = CPUMGetGuestScalableBusFrequency(pVM); 1654 uint64_t uTscHz = TMCpuTicksPerSecond(pVM); 1655 uint8_t uTscRatio = (uint8_t)((uTscHz + uScalableBusHz / 2) / uScalableBusHz); 1656 uint64_t uValue = ((uint32_t)uTscRatio << 8) /* TSC invariant frequency. */ 1657 | ((uint64_t)uTscRatio << 40); /* The max turbo frequency. */ 1556 1658 1557 1659 /* Ivy bridge has a minimum operating ratio as well. */ 1558 1660 if (true) /** @todo detect sandy bridge. */ 1559 *puValue |= (uint64_t)uTsc100MHz << 48; 1560 1561 return VINF_SUCCESS; 1562 } 1563 1564 1565 /** @callback_method_impl{FNCPUMRDMSR} */ 1566 static DECLCALLBACK(int) cpumMsrRd_IntelPlatformInfo133MHz(PVMCPU pVCpu, uint32_t idMsr, PCCPUMMSRRANGE pRange, uint64_t *puValue) 1567 { 1568 /* Just indicate a fixed TSC, no turbo boost, no programmable anything. */ 1569 uint64_t uTscHz = TMCpuTicksPerSecond(pVCpu->CTX_SUFF(pVM)); 1570 uint8_t uTsc133MHz = (uint8_t)(uTscHz / UINT32_C(133333333)); 1571 *puValue = ((uint32_t)uTsc133MHz << 8) /* TSC invariant frequency. */ 1572 | ((uint64_t)uTsc133MHz << 40); /* The max turbo frequency. */ 1573 return VINF_SUCCESS; 1574 } 1575 1576 1577 /** @callback_method_impl{FNCPUMRDMSR} */ 1578 static DECLCALLBACK(int) cpumMsrRd_IntelFlexRatio100MHz(PVMCPU pVCpu, uint32_t idMsr, PCCPUMMSRRANGE pRange, uint64_t *puValue) 1661 uValue |= (uint64_t)uTscRatio << 48; 1662 1663 *puValue = uValue; 1664 return VINF_SUCCESS; 1665 } 1666 1667 1668 /** @callback_method_impl{FNCPUMRDMSR} */ 1669 static DECLCALLBACK(int) cpumMsrRd_IntelFlexRatio(PVMCPU pVCpu, uint32_t idMsr, PCCPUMMSRRANGE pRange, uint64_t *puValue) 1579 1670 { 1580 1671 uint64_t uValue = pRange->uValue & ~UINT64_C(0x1ff00); 1581 1672 1582 uint64_t uTscHz = TMCpuTicksPerSecond(pVCpu->CTX_SUFF(pVM)); 1583 uint8_t uTsc100MHz = (uint8_t)(uTscHz / UINT32_C(100000000)); 1584 uValue |= (uint32_t)uTsc100MHz << 8; 1673 PVM pVM = pVCpu->CTX_SUFF(pVM); 1674 uint64_t uScalableBusHz = CPUMGetGuestScalableBusFrequency(pVM); 1675 uint64_t uTscHz = TMCpuTicksPerSecond(pVM); 1676 uint8_t uTscRatio = (uint8_t)((uTscHz + uScalableBusHz / 2) / uScalableBusHz); 1677 uValue |= (uint32_t)uTscRatio << 8; 1585 1678 1586 1679 *puValue = uValue; … … 1590 1683 1591 1684 /** @callback_method_impl{FNCPUMWRMSR} */ 1592 static DECLCALLBACK(int) cpumMsrWr_IntelFlexRatio100MHz(PVMCPU pVCpu, uint32_t idMsr, PCCPUMMSRRANGE pRange, uint64_t uValue, uint64_t uRawValue) 1593 { 1594 /** @todo implement writing MSR_FLEX_RATIO. */ 1595 return VINF_SUCCESS; 1596 } 1597 1598 1599 /** @callback_method_impl{FNCPUMRDMSR} */ 1600 static DECLCALLBACK(int) cpumMsrRd_IntelFlexRatio133MHz(PVMCPU pVCpu, uint32_t idMsr, PCCPUMMSRRANGE pRange, uint64_t *puValue) 1601 { 1602 uint64_t uValue = pRange->uValue & ~UINT64_C(0x1ff00); 1603 1604 uint64_t uTscHz = TMCpuTicksPerSecond(pVCpu->CTX_SUFF(pVM)); 1605 uint8_t uTsc133MHz = (uint8_t)(uTscHz / UINT32_C(133333333)); 1606 uValue |= (uint32_t)uTsc133MHz << 8; 1607 1608 *puValue = uValue; 1609 return VINF_SUCCESS; 1610 } 1611 1612 1613 /** @callback_method_impl{FNCPUMWRMSR} */ 1614 static DECLCALLBACK(int) cpumMsrWr_IntelFlexRatio133MHz(PVMCPU pVCpu, uint32_t idMsr, PCCPUMMSRRANGE pRange, uint64_t uValue, uint64_t uRawValue) 1685 static DECLCALLBACK(int) cpumMsrWr_IntelFlexRatio(PVMCPU pVCpu, uint32_t idMsr, PCCPUMMSRRANGE pRange, uint64_t uValue, uint64_t uRawValue) 1615 1686 { 1616 1687 /** @todo implement writing MSR_FLEX_RATIO. */ … … 4309 4380 cpumMsrRd_Ia32P5McType, 4310 4381 cpumMsrRd_Ia32TimestampCounter, 4382 cpumMsrRd_Ia32PlatformId, 4311 4383 cpumMsrRd_Ia32ApicBase, 4312 4384 cpumMsrRd_Ia32FeatureControl, … … 4388 4460 cpumMsrRd_IntelP4EbcSoftPowerOn, 4389 4461 cpumMsrRd_IntelP4EbcFrequencyId, 4390 cpumMsrRd_IntelPlatformInfo100MHz, 4391 cpumMsrRd_IntelPlatformInfo133MHz, 4392 cpumMsrRd_IntelFlexRatio100MHz, 4393 cpumMsrRd_IntelFlexRatio133MHz, 4462 cpumMsrRd_IntelP6FsbFrequency, 4463 cpumMsrRd_IntelPlatformInfo, 4464 cpumMsrRd_IntelFlexRatio, 4394 4465 cpumMsrRd_IntelPkgCStConfigControl, 4395 4466 cpumMsrRd_IntelPmgIoCaptureBase, … … 4627 4698 cpumMsrWr_IntelP4EbcSoftPowerOn, 4628 4699 cpumMsrWr_IntelP4EbcFrequencyId, 4629 cpumMsrWr_IntelFlexRatio100MHz, 4630 cpumMsrWr_IntelFlexRatio133MHz, 4700 cpumMsrWr_IntelFlexRatio, 4631 4701 cpumMsrWr_IntelPkgCStConfigControl, 4632 4702 cpumMsrWr_IntelPmgIoCaptureBase, … … 5000 5070 CPUM_ASSERT_RD_MSR_FN(Ia32P5McType); 5001 5071 CPUM_ASSERT_RD_MSR_FN(Ia32TimestampCounter); 5072 CPUM_ASSERT_RD_MSR_FN(Ia32PlatformId); 5002 5073 CPUM_ASSERT_RD_MSR_FN(Ia32ApicBase); 5003 5074 CPUM_ASSERT_RD_MSR_FN(Ia32FeatureControl); … … 5078 5149 CPUM_ASSERT_RD_MSR_FN(IntelP4EbcSoftPowerOn); 5079 5150 CPUM_ASSERT_RD_MSR_FN(IntelP4EbcFrequencyId); 5080 CPUM_ASSERT_RD_MSR_FN(IntelPlatformInfo100MHz); 5081 CPUM_ASSERT_RD_MSR_FN(IntelPlatformInfo133MHz); 5082 CPUM_ASSERT_RD_MSR_FN(IntelFlexRatio100MHz); 5083 CPUM_ASSERT_RD_MSR_FN(IntelFlexRatio133MHz); 5151 CPUM_ASSERT_RD_MSR_FN(IntelP6FsbFrequency); 5152 CPUM_ASSERT_RD_MSR_FN(IntelPlatformInfo); 5153 CPUM_ASSERT_RD_MSR_FN(IntelFlexRatio); 5084 5154 CPUM_ASSERT_RD_MSR_FN(IntelPkgCStConfigControl); 5085 5155 CPUM_ASSERT_RD_MSR_FN(IntelPmgIoCaptureBase); … … 5306 5376 CPUM_ASSERT_WR_MSR_FN(IntelP4EbcSoftPowerOn); 5307 5377 CPUM_ASSERT_WR_MSR_FN(IntelP4EbcFrequencyId); 5308 CPUM_ASSERT_WR_MSR_FN(IntelFlexRatio100MHz); 5309 CPUM_ASSERT_WR_MSR_FN(IntelFlexRatio133MHz); 5378 CPUM_ASSERT_WR_MSR_FN(IntelFlexRatio); 5310 5379 CPUM_ASSERT_WR_MSR_FN(IntelPkgCStConfigControl); 5311 5380 CPUM_ASSERT_WR_MSR_FN(IntelPmgIoCaptureBase); … … 5453 5522 5454 5523 /** 5455 * Gets the bus frequency.5524 * Gets the scalable bus frequency. 5456 5525 * 5457 5526 * The bus frequency is used as a base in several MSRs that gives the CPU and 5458 5527 * other frequency ratios. 5459 5528 * 5460 * @returns Bus frequency in Hz.5529 * @returns Scalable bus frequency in Hz. Will not return CPUM_SBUSFREQ_UNKNOWN. 5461 5530 * @param pVM Pointer to the shared VM structure. 5462 5531 */ 5463 VMMDECL(uint64_t) CPUMGetGuestBusFrequency(PVM pVM) 5464 { 5465 if (CPUMMICROARCH_IS_INTEL_CORE7(pVM->cpum.s.GuestFeatures.enmMicroarch)) 5466 { 5467 return pVM->cpum.s.GuestFeatures.enmMicroarch >= kCpumMicroarch_Intel_Core7_SandyBridge 5468 ? UINT64_C(100000000) /* 100MHz */ 5469 : UINT64_C(133333333); /* 133MHz */ 5470 } 5471 5472 /* 133MHz */ 5473 return UINT64_C(133333333); 5532 VMMDECL(uint64_t) CPUMGetGuestScalableBusFrequency(PVM pVM) 5533 { 5534 uint64_t uFreq = pVM->cpum.s.GuestInfo.uScalableBusFreq; 5535 if (uFreq == CPUM_SBUSFREQ_UNKNOWN) 5536 uFreq = CPUM_SBUSFREQ_100MHZ; 5537 return uFreq; 5474 5538 } 5475 5539 -
trunk/src/VBox/VMM/VMMR3/CPUM.cpp
r50255 r50590 988 988 AssertLogRelRCReturn(rc, rc); 989 989 990 /* 991 * Adjust the scalable bus frequency according to the CPUID information 992 * we're now using. 993 */ 994 if (CPUMMICROARCH_IS_INTEL_CORE7(pVM->cpum.s.GuestFeatures.enmMicroarch)) 995 pCPUM->GuestInfo.uScalableBusFreq = pCPUM->GuestFeatures.enmMicroarch >= kCpumMicroarch_Intel_Core7_SandyBridge 996 ? UINT64_C(100000000) /* 100MHz */ 997 : UINT64_C(133333333); /* 133MHz */ 990 998 991 999 /* -
trunk/src/VBox/VMM/VMMR3/CPUMR3Db.cpp
r50157 r50590 49 49 /** The microarchitecture. */ 50 50 CPUMMICROARCH enmMicroarch; 51 /** Scalable bus frequency used for reporting other frequencies. */ 52 uint64_t uScalableBusFreq; 51 53 /** Flags (TBD). */ 52 54 uint32_t fFlags; … … 668 670 pInfo->iFirstExtCpuIdLeaf = 0; /* Set by caller. */ 669 671 pInfo->uPadding = 0; 672 pInfo->uScalableBusFreq = pEntry->uScalableBusFreq; 670 673 pInfo->paCpuIdLeavesR0 = NIL_RTR0PTR; 671 674 pInfo->paMsrRangesR0 = NIL_RTR0PTR; -
trunk/src/VBox/VMM/VMMR3/cpus/AMD_Athlon_64_3200.h
r49972 r50590 205 205 /*.uStepping = */ 8, 206 206 /*.enmMicroarch = */ kCpumMicroarch_AMD_K8_130nm, 207 /*.uScalableBusFreq = */ CPUM_SBUSFREQ_UNKNOWN, 207 208 /*.fFlags = */ 0, 208 209 /*.cMaxPhysAddrWidth= */ 40, -
trunk/src/VBox/VMM/VMMR3/cpus/AMD_FX_8150_Eight_Core.h
r49995 r50590 364 364 /*.uStepping = */ 2, 365 365 /*.enmMicroarch = */ kCpumMicroarch_AMD_15h_Bulldozer, 366 /*.uScalableBusFreq = */ CPUM_SBUSFREQ_UNKNOWN, 366 367 /*.fFlags = */ 0, 367 368 /*.cMaxPhysAddrWidth= */ 48, -
trunk/src/VBox/VMM/VMMR3/cpus/AMD_Phenom_II_X6_1100T.h
r49995 r50590 253 253 /*.uStepping = */ 0, 254 254 /*.enmMicroarch = */ kCpumMicroarch_AMD_K10, 255 /*.uScalableBusFreq = */ CPUM_SBUSFREQ_UNKNOWN, 255 256 /*.fFlags = */ 0, 256 257 /*.cMaxPhysAddrWidth= */ 48, -
trunk/src/VBox/VMM/VMMR3/cpus/Intel_Core_i5_3570.h
r50584 r50590 64 64 MFX(0x00000006, "IA32_MONITOR_FILTER_LINE_SIZE", Ia32MonitorFilterLineSize, Ia32MonitorFilterLineSize, 0, 0, UINT64_C(0xffffffffffff0000)), /* value=0x40 */ 65 65 MFN(0x00000010, "IA32_TIME_STAMP_COUNTER", Ia32TimestampCounter, Ia32TimestampCounter), /* value=0x4293`b0a3f54a */ 66 M VO(0x00000017, "IA32_PLATFORM_ID", UINT64_C(0x4000000000000)),66 MFV(0x00000017, "IA32_PLATFORM_ID", Ia32PlatformId, ReadOnly, UINT64_C(0x4000000000000)), 67 67 MFX(0x0000001b, "IA32_APIC_BASE", Ia32ApicBase, Ia32ApicBase, UINT32_C(0xfee00c00), 0, UINT64_C(0xfffffff0000002ff)), 68 68 MFX(0x0000002a, "EBL_CR_POWERON", IntelEblCrPowerOn, ReadOnly, 0, 0, 0), /* value=0x0 */ … … 78 78 MFO(0x0000009b, "IA32_SMM_MONITOR_CTL", Ia32SmmMonitorCtl), /* value=0x0 */ 79 79 RSN(0x000000c1, 0x000000c8, "IA32_PMCn", Ia32PmcN, Ia32PmcN, 0x0, ~(uint64_t)UINT32_MAX, 0), 80 MFO(0x000000ce, "MSR_PLATFORM_INFO", IntelPlatformInfo 100MHz), /* value=0x81010'e0012200*/80 MFO(0x000000ce, "MSR_PLATFORM_INFO", IntelPlatformInfo), /* value=0x81010'e0012200*/ 81 81 MFX(0x000000e2, "MSR_PKG_CST_CONFIG_CONTROL", IntelPkgCStConfigControl, IntelPkgCStConfigControl, 0, 0, UINT64_C(0xffffffffe1ffffff)), /* value=0x1e008403 */ 82 82 MFX(0x000000e4, "MSR_PMG_IO_CAPTURE_BASE", IntelPmgIoCaptureBase, IntelPmgIoCaptureBase, 0, 0, UINT64_C(0xfffffffffff80000)), /* value=0x10414 */ … … 99 99 MFX(0x0000017a, "IA32_MCG_STATUS", Ia32McgStatus, Ia32McgStatus, 0, 0, UINT64_C(0xfffffffffffffff8)), /* value=0x0 */ 100 100 RSN(0x00000186, 0x0000018d, "IA32_PERFEVTSELn", Ia32PerfEvtSelN, Ia32PerfEvtSelN, 0x0, 0, UINT64_C(0xffffffff00080000)), 101 MFX(0x00000194, "CLOCK_FLEX_MAX", IntelFlexRatio 100MHz, IntelFlexRatio100MHz, 0x190000, 0x1e00ff, UINT64_C(0xffffffffffe00000)),101 MFX(0x00000194, "CLOCK_FLEX_MAX", IntelFlexRatio, IntelFlexRatio, 0x190000, 0x1e00ff, UINT64_C(0xffffffffffe00000)), 102 102 MFX(0x00000198, "IA32_PERF_STATUS", Ia32PerfStatus, ReadOnly, UINT64_C(0x1d2400001000), 0, 0), /* value=0x1d24`00001000 */ 103 103 MFX(0x00000199, "IA32_PERF_CTL", Ia32PerfCtl, Ia32PerfCtl, 0x1000, 0, 0), /* Might bite. value=0x1000 */ … … 320 320 /*.uStepping = */ 9, 321 321 /*.enmMicroarch = */ kCpumMicroarch_Intel_Core7_IvyBridge, 322 /*.uScalableBusFreq = */ CPUM_SBUSFREQ_100MHZ, 322 323 /*.fFlags = */ 0, 323 324 /*.cMaxPhysAddrWidth= */ 36, -
trunk/src/VBox/VMM/VMMR3/cpus/Intel_Core_i7_3820QM.h
r49922 r50590 64 64 MFX(0x00000006, "IA32_MONITOR_FILTER_LINE_SIZE", Ia32MonitorFilterLineSize, Ia32MonitorFilterLineSize, 0, 0, UINT64_C(0xffffffffffff0000)), /* value=0x40 */ 65 65 MFX(0x00000010, "IA32_TIME_STAMP_COUNTER", Ia32TimestampCounter, Ia32TimestampCounter, 0, 0, 0), 66 M VO(0x00000017, "IA32_PLATFORM_ID", UINT64_C(0x10000000000000)),66 MFV(0x00000017, "IA32_PLATFORM_ID", Ia32PlatformId, ReadOnly, UINT64_C(0x10000000000000)), 67 67 MFX(0x0000001b, "IA32_APIC_BASE", Ia32ApicBase, Ia32ApicBase, UINT32_C(0xfee00900), 0, UINT64_C(0xfffffff0000002ff)), 68 68 MFX(0x0000002a, "EBL_CR_POWERON", IntelEblCrPowerOn, ReadOnly, 0, 0, 0), /* value=0x0 */ … … 362 362 /*.uStepping = */ 9, 363 363 /*.enmMicroarch = */ kCpumMicroarch_Intel_Core7_IvyBridge, 364 /*.uScalableBusFreq = */ CPUM_SBUSFREQ_UNKNOWN, 364 365 /*.fFlags = */ 0, 365 366 /*.cMaxPhysAddrWidth= */ 36, -
trunk/src/VBox/VMM/VMMR3/cpus/Intel_Core_i7_3960X.h
r50584 r50590 73 73 MFX(0x00000006, "IA32_MONITOR_FILTER_LINE_SIZE", Ia32MonitorFilterLineSize, Ia32MonitorFilterLineSize, 0, 0, UINT64_C(0xffffffffffff0000)), /* value=0x40 */ 74 74 MFN(0x00000010, "IA32_TIME_STAMP_COUNTER", Ia32TimestampCounter, Ia32TimestampCounter), /* value=0x177ab4`48466b19 */ 75 M VO(0x00000017, "IA32_PLATFORM_ID", UINT64_C(0x8000000000000)),75 MFV(0x00000017, "IA32_PLATFORM_ID", Ia32PlatformId, ReadOnly, UINT64_C(0x8000000000000)), 76 76 MFX(0x0000001b, "IA32_APIC_BASE", Ia32ApicBase, Ia32ApicBase, UINT32_C(0xfee00800), 0, UINT64_C(0xffffc000000002ff)), 77 77 MFX(0x0000002a, "EBL_CR_POWERON", IntelEblCrPowerOn, ReadOnly, 0, 0, 0), /* value=0x0 */ … … 86 86 MFO(0x0000009b, "IA32_SMM_MONITOR_CTL", Ia32SmmMonitorCtl), /* value=0x0 */ 87 87 RSN(0x000000c1, 0x000000c4, "IA32_PMCn", Ia32PmcN, Ia32PmcN, 0x0, ~(uint64_t)UINT32_MAX, 0), 88 MFO(0x000000ce, "MSR_PLATFORM_INFO", IntelPlatformInfo 100MHz), /* value=0xc00'70012100*/88 MFO(0x000000ce, "MSR_PLATFORM_INFO", IntelPlatformInfo), /* value=0xc00'70012100*/ 89 89 MFX(0x000000e2, "MSR_PKG_CST_CONFIG_CONTROL", IntelPkgCStConfigControl, IntelPkgCStConfigControl, 0, 0, UINT64_C(0xffffffffe1ffffff)), /* value=0x1e008400 */ 90 90 MFX(0x000000e4, "MSR_PMG_IO_CAPTURE_BASE", IntelPmgIoCaptureBase, IntelPmgIoCaptureBase, 0, 0, UINT64_C(0xfffffffffff80000)), /* value=0x20414 */ … … 103 103 MFX(0x0000017f, "I7_SB_ERROR_CONTROL", IntelI7SandyErrorControl, IntelI7SandyErrorControl, 0, 0xc, UINT64_C(0xffffffffffffffe1)), /* value=0x0 */ 104 104 RSN(0x00000186, 0x00000189, "IA32_PERFEVTSELn", Ia32PerfEvtSelN, Ia32PerfEvtSelN, 0x0, 0, UINT64_C(0xffffffff00080000)), 105 MFX(0x00000194, "CLOCK_FLEX_MAX", IntelFlexRatio 100MHz, IntelFlexRatio100MHz, 0xf2100, 0xe0000, UINT64_C(0xfffffffffff00000)),105 MFX(0x00000194, "CLOCK_FLEX_MAX", IntelFlexRatio, IntelFlexRatio, 0xf2100, 0xe0000, UINT64_C(0xfffffffffff00000)), 106 106 MFX(0x00000198, "IA32_PERF_STATUS", Ia32PerfStatus, ReadOnly, UINT64_C(0x288300002400), 0, 0), /* value=0x2883`00002400 */ 107 107 MFX(0x00000199, "IA32_PERF_CTL", Ia32PerfCtl, Ia32PerfCtl, 0x2700, 0, 0), /* Might bite. value=0x2700 */ … … 350 350 /*.uStepping = */ 6, 351 351 /*.enmMicroarch = */ kCpumMicroarch_Intel_Core7_SandyBridge, 352 /*.uScalableBusFreq = */ CPUM_SBUSFREQ_100MHZ, 352 353 /*.fFlags = */ 0, 353 354 /*.cMaxPhysAddrWidth= */ 46, -
trunk/src/VBox/VMM/VMMR3/cpus/Intel_Pentium_4_3_00GHz.h
r49966 r50590 58 58 MFX(0x00000006, "IA32_MONITOR_FILTER_LINE_SIZE", Ia32MonitorFilterLineSize, Ia32MonitorFilterLineSize, 0, UINT64_C(0xffffffffffff0000), 0), /* value=0x40 */ 59 59 MFN(0x00000010, "IA32_TIME_STAMP_COUNTER", Ia32TimestampCounter, Ia32TimestampCounter), /* value=0x1ac`2077a134 */ 60 M VI(0x00000017, "IA32_PLATFORM_ID", UINT64_C(0x12000000000000)),60 MFV(0x00000017, "IA32_PLATFORM_ID", Ia32PlatformId, ReadOnly, UINT64_C(0x12000000000000)), 61 61 MFX(0x0000001b, "IA32_APIC_BASE", Ia32ApicBase, Ia32ApicBase, UINT32_C(0xfee00800), 0x600, UINT64_C(0xffffff00000000ff)), 62 62 MFX(0x0000002a, "P4_EBC_HARD_POWERON", IntelP4EbcHardPowerOn, IntelP4EbcHardPowerOn, 0, UINT64_MAX, 0), /* value=0x0 */ … … 258 258 /*.uStepping = */ 3, 259 259 /*.enmMicroarch = */ kCpumMicroarch_Intel_NB_Prescott2M, 260 /*.uScalableBusFreq = */ CPUM_SBUSFREQ_UNKNOWN, 260 261 /*.fFlags = */ 0, 261 262 /*.cMaxPhysAddrWidth= */ 36, -
trunk/src/VBox/VMM/VMMR3/cpus/Intel_Pentium_M_processor_2_00GHz.h
r49922 r50590 48 48 MFI(0x00000001, "IA32_P5_MC_TYPE", Ia32P5McType), /* value=0x0 */ 49 49 MFX(0x00000010, "IA32_TIME_STAMP_COUNTER", Ia32TimestampCounter, Ia32TimestampCounter, 0, ~(uint64_t)UINT32_MAX, 0), /* value=0x22`4d44782e */ 50 M VO(0x00000017, "IA32_PLATFORM_ID", UINT64_C(0x140000d0248a28)),50 MFV(0x00000017, "IA32_PLATFORM_ID", Ia32PlatformId, ReadOnly, UINT64_C(0x140000d0248a28)), 51 51 MVX(0x00000018, "P6_UNK_0000_0018", 0, 0, 0), 52 52 MFX(0x0000001b, "IA32_APIC_BASE", Ia32ApicBase, Ia32ApicBase, UINT32_C(0xfee00100), UINT64_C(0xffffffff00000600), 0xff), … … 89 89 MFX(0x000000c2, "IA32_PMC1", Ia32PmcN, Ia32PmcN, 0, ~(uint64_t)UINT32_MAX, 0), /* value=0x0 */ 90 90 MVI(0x000000c7, "P6_UNK_0000_00c7", UINT64_C(0x5a000000ac000000)), 91 M VO(0x000000cd, "P6_UNK_0000_00cd", 0),91 MFX(0x000000cd, "MSR_FSB_FREQ", IntelP6FsbFrequency, ReadOnly, 0, 0, 0), 92 92 MVO(0x000000ce, "P6_UNK_0000_00ce", UINT64_C(0x2812140000000000)), 93 93 MFX(0x000000fe, "IA32_MTRRCAP", Ia32MtrrCap, ReadOnly, 0x508, 0, 0), /* value=0x508 */ … … 197 197 /*.uStepping = */ 6, 198 198 /*.enmMicroarch = */ kCpumMicroarch_Intel_P6_M_Dothan, 199 /*.uScalableBusFreq = */ CPUM_SBUSFREQ_UNKNOWN, 199 200 /*.fFlags = */ 0, 200 201 /*.cMaxPhysAddrWidth= */ 32, -
trunk/src/VBox/VMM/VMMR3/cpus/Intel_Xeon_X5482_3_20GHz.h
r49927 r50590 61 61 MFX(0x00000006, "IA32_MONITOR_FILTER_LINE_SIZE", Ia32MonitorFilterLineSize, Ia32MonitorFilterLineSize, 0, 0, UINT64_C(0xffffffffffff0000)), /* value=0x40 */ 62 62 MFN(0x00000010, "IA32_TIME_STAMP_COUNTER", Ia32TimestampCounter, Ia32TimestampCounter), /* value=0x1358`d28c2c60 */ 63 M VO(0x00000017, "IA32_PLATFORM_ID", UINT64_C(0x18000088e40822)),63 MFV(0x00000017, "IA32_PLATFORM_ID", Ia32PlatformId, ReadOnly, UINT64_C(0x18000088e40822)), 64 64 MFX(0x0000001b, "IA32_APIC_BASE", Ia32ApicBase, Ia32ApicBase, UINT32_C(0xfee00800), 0, UINT64_C(0xffffffc0000006ff)), 65 65 MVX(0x00000021, "C2_UNK_0000_0021", 0, 0, UINT64_C(0xffffffffffffffc0)), … … 83 83 RSN(0x000000c1, 0x000000c2, "IA32_PMCn", Ia32PmcN, Ia32PmcN, 0x0, ~(uint64_t)UINT32_MAX, 0), 84 84 MVI(0x000000c7, "P6_UNK_0000_00c7", UINT64_C(0x2300000052000000)), 85 M VO(0x000000cd, "P6_UNK_0000_00cd", 0x806),85 MFX(0x000000cd, "P6_MSR_FSB_FREQ", IntelP6FsbFrequency, ReadOnly, 0x806, 0, 0), 86 86 MVO(0x000000ce, "P6_UNK_0000_00ce", UINT64_C(0x1208227f7f0710)), 87 87 MVO(0x000000cf, "C2_UNK_0000_00cf", 0), … … 226 226 /*.uStepping = */ 6, 227 227 /*.enmMicroarch = */ kCpumMicroarch_Intel_Core2_Penryn, 228 /*.uScalableBusFreq = */ CPUM_SBUSFREQ_400MHZ, 228 229 /*.fFlags = */ 0, 229 230 /*.cMaxPhysAddrWidth= */ 38, -
trunk/src/VBox/VMM/VMMR3/cpus/Quad_Core_AMD_Opteron_2384.h
r49995 r50590 251 251 /*.uStepping = */ 2, 252 252 /*.enmMicroarch = */ kCpumMicroarch_AMD_K10, 253 /*.uScalableBusFreq = */ CPUM_SBUSFREQ_UNKNOWN, 253 254 /*.fFlags = */ 0, 254 255 /*.cMaxPhysAddrWidth= */ 48, -
trunk/src/VBox/VMM/VMMR3/cpus/VIA_QuadCore_L4700_1_2_GHz.h
r49993 r50590 80 80 RSN(0x000000c1, 0x000000c3, "IA32_PMCn", Ia32PmcN, Ia32PmcN, 0x0, UINT64_C(0xffffff0000000000), 0), /* XXX: The range ended earlier than expected! */ 81 81 RVI(0x000000c4, 0x000000cc, "ZERO_0000_00c4_THRU_0000_00cc", 0), 82 M VO(0x000000cd, "P6_UNK_0000_00cd", 0),82 MFX(0x000000cd, "MSR_FSB_FREQ", IntelP6FsbFrequency, ReadOnly, 0, 0, 0), 83 83 RVI(0x000000ce, 0x000000e1, "ZERO_0000_00ce_THRU_0000_00e1", 0), 84 84 MFI(0x000000e2, "MSR_PKG_CST_CONFIG_CONTROL", IntelPkgCStConfigControl), /* value=0x6a204 */ … … 385 385 /*.uStepping = */ 13, 386 386 /*.enmMicroarch = */ kCpumMicroarch_VIA_Isaiah, 387 /*.uScalableBusFreq = */ CPUM_SBUSFREQ_267MHZ, /*??*/ 387 388 /*.fFlags = */ 0, 388 389 /*.cMaxPhysAddrWidth= */ 36, -
trunk/src/VBox/VMM/include/CPUMInternal.h
r50584 r50590 130 130 kCpumMsrRdFn_Ia32P5McType, 131 131 kCpumMsrRdFn_Ia32TimestampCounter, 132 kCpumMsrRdFn_Ia32PlatformId, /**< Takes real CPU value for reference. */ 132 133 kCpumMsrRdFn_Ia32ApicBase, 133 134 kCpumMsrRdFn_Ia32FeatureControl, … … 209 210 kCpumMsrRdFn_IntelP4EbcSoftPowerOn, 210 211 kCpumMsrRdFn_IntelP4EbcFrequencyId, 211 kCpumMsrRdFn_IntelPlatformInfo100MHz, 212 kCpumMsrRdFn_IntelPlatformInfo133MHz, 213 kCpumMsrRdFn_IntelFlexRatio100MHz, /**< Takes real value as reference. */ 214 kCpumMsrRdFn_IntelFlexRatio133MHz, /**< Takes real value as reference. */ 212 kCpumMsrRdFn_IntelP6FsbFrequency, /**< Takes real value as reference. */ 213 kCpumMsrRdFn_IntelPlatformInfo, 214 kCpumMsrRdFn_IntelFlexRatio, /**< Takes real value as reference. */ 215 215 kCpumMsrRdFn_IntelPkgCStConfigControl, 216 216 kCpumMsrRdFn_IntelPmgIoCaptureBase, … … 456 456 kCpumMsrWrFn_IntelP4EbcSoftPowerOn, 457 457 kCpumMsrWrFn_IntelP4EbcFrequencyId, 458 kCpumMsrWrFn_IntelFlexRatio100MHz, 459 kCpumMsrWrFn_IntelFlexRatio133MHz, 458 kCpumMsrWrFn_IntelFlexRatio, 460 459 kCpumMsrWrFn_IntelPkgCStConfigControl, 461 460 kCpumMsrWrFn_IntelPmgIoCaptureBase, … … 746 745 * Set to cCpuIdLeaves if none present. */ 747 746 uint32_t iFirstExtCpuIdLeaf; 747 /** Alignment padding. */ 748 uint32_t uPadding; 748 749 /** How to handle unknown CPUID leaves. */ 749 750 CPUMUKNOWNCPUID enmUnknownCpuIdMethod; … … 751 752 CPUMCPUID DefCpuId; 752 753 753 /** Alignment padding.*/754 uint 32_t uPadding;754 /** Scalable bus frequency used for reporting other frequencies. */ 755 uint64_t uScalableBusFreq; 755 756 756 757 /** Pointer to the MSR ranges (ring-0 pointer). */ -
trunk/src/VBox/VMM/include/CPUMInternal.mac
r49893 r50590 90 90 %endif 91 91 92 .GuestInfo resb RTHCPTR_CB*4 + RTRCPTR_CB*2 + 4*1 092 .GuestInfo resb RTHCPTR_CB*4 + RTRCPTR_CB*2 + 4*12 93 93 .GuestFeatures resb 32 94 94 .HostFeatures resb 32 -
trunk/src/VBox/VMM/tools/VBoxCpuReport.cpp
r50584 r50590 71 71 /** The alternative debug stream. */ 72 72 static PRTSTREAM g_pDebugOut; 73 74 /** Snooping info storage for vbCpuRepGuessScalableBusFrequencyName. */ 75 static uint64_t g_uMsrIntelP6FsbFrequency = UINT64_MAX; 73 76 74 77 … … 694 697 case 0x000000c7: return g_enmMicroarch >= kCpumMicroarch_Intel_Core7_First ? "IA32_PMC6" : "P6_UNK_0000_00c7"; /* P6_M_Dothan. */ 695 698 case 0x000000c8: return g_enmMicroarch >= kCpumMicroarch_Intel_Core7_First ? "IA32_PMC7" : NULL; 696 case 0x000000cd: return " P6_UNK_0000_00cd"; /* P6_M_Dothan. */699 case 0x000000cd: return "MSR_FSB_FREQ"; /* P6_M_Dothan. */ 697 700 case 0x000000ce: return g_enmMicroarch >= kCpumMicroarch_Intel_Core7_First ? "IA32_PLATFORM_INFO" : "P6_UNK_0000_00ce"; /* P6_M_Dothan. */ 698 701 case 0x000000cf: return "C2_UNK_0000_00cf"; /* Core2_Penryn. */ … … 1801 1804 return "Ia32MonitorFilterLineSize"; 1802 1805 case 0x00000010: return "Ia32TimestampCounter"; 1806 case 0x00000017: *pfTakesValue = true; return "Ia32PlatformId"; 1803 1807 case 0x0000001b: return "Ia32ApicBase"; 1804 1808 case 0x0000002a: *pfTakesValue = true; return g_fIntelNetBurst ? "IntelP4EbcHardPowerOn" : "IntelEblCrPowerOn"; … … 1843 1847 return NULL; 1844 1848 1845 case 0x000000ce: return CPUMMICROARCH_IS_INTEL_CORE7(g_enmMicroarch) 1846 ? (g_enmMicroarch >= kCpumMicroarch_Intel_Core7_SandyBridge 1847 ? "IntelPlatformInfo100MHz" : "IntelPlatformInfo133MHz") 1848 : NULL; 1849 1849 case 0x000000cd: *pfTakesValue = true; return "IntelP6FsbFrequency"; 1850 case 0x000000ce: return CPUMMICROARCH_IS_INTEL_CORE7(g_enmMicroarch) ? "IntelPlatformInfo" : NULL; 1850 1851 case 0x000000e2: return "IntelPkgCStConfigControl"; 1851 1852 case 0x000000e3: return "IntelCore2SmmCStMiscInfo"; … … 1882 1883 case 0x00000187: return "Ia32PerfEvtSelN"; 1883 1884 case 0x00000193: return /*g_fIntelNetBurst ? NULL :*/ NULL /* Core2_Penryn. */; 1884 case 0x00000194: 1885 if (g_fIntelNetBurst) 1886 break; 1887 *pfTakesValue = true; 1888 return CPUMMICROARCH_IS_INTEL_CORE7(g_enmMicroarch) && g_enmMicroarch >= kCpumMicroarch_Intel_Core7_SandyBridge 1889 ? "IntelFlexRatio100MHz" : "IntelFlexRatio133MHz"; 1885 case 0x00000194: if (g_fIntelNetBurst) break; *pfTakesValue = true; return "IntelFlexRatio"; 1890 1886 case 0x00000198: *pfTakesValue = true; return "Ia32PerfStatus"; 1891 1887 case 0x00000199: *pfTakesValue = true; return "Ia32PerfCtl"; … … 4097 4093 if (RT_FAILURE(rc)) 4098 4094 return rc; 4095 4096 /* 4097 * A little ugly snooping. 4098 */ 4099 if (uMsr == 0x000000cd && !(fFlags & VBCPUREPMSR_F_WRITE_ONLY)) 4100 g_uMsrIntelP6FsbFrequency = uValue; 4099 4101 } 4100 4102 … … 4316 4318 4317 4319 4320 /** 4321 * Takes a shot a the bus frequency name (last part). 4322 * 4323 * @returns Name suffix. 4324 */ 4325 static const char *vbCpuRepGuessScalableBusFrequencyName(void) 4326 { 4327 if (CPUMMICROARCH_IS_INTEL_CORE7(g_enmMicroarch)) 4328 return g_enmMicroarch >= kCpumMicroarch_Intel_Core7_SandyBridge ? "100MHZ" : "133MHZ"; 4329 4330 if (g_uMsrIntelP6FsbFrequency != UINT64_MAX) 4331 switch (g_uMsrIntelP6FsbFrequency & 0x7) 4332 { 4333 case 5: return "100MHZ"; 4334 case 1: return "133MHZ"; 4335 case 3: return "167MHZ"; 4336 case 2: return "200MHZ"; 4337 case 0: return "267MHZ"; 4338 case 4: return "333MHZ"; 4339 case 6: return "400MHZ"; 4340 } 4341 4342 return "UNKNOWN"; 4343 } 4344 4345 4318 4346 static int produceCpuReport(void) 4319 4347 { … … 4508 4536 " /*.uStepping = */ %u,\n" 4509 4537 " /*.enmMicroarch = */ kCpumMicroarch_%s,\n" 4538 " /*.uScalableBusFreq = */ CPUM_SBUSFREQ_%s,\n" 4510 4539 " /*.fFlags = */ 0,\n" 4511 4540 " /*.cMaxPhysAddrWidth= */ %u,\n" … … 4530 4559 ASMGetCpuStepping(uEax), 4531 4560 CPUMR3MicroarchName(enmMicroarch), 4561 vbCpuRepGuessScalableBusFrequencyName(), 4532 4562 vbCpuRepGetPhysAddrWidth(), 4533 4563 szNameC,
Note:
See TracChangeset
for help on using the changeset viewer.