Changeset 44171 in vbox for trunk/src/VBox
- Timestamp:
- Dec 19, 2012 6:05:58 PM (12 years ago)
- svn:sync-xref-src-repo-rev:
- 82881
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR0/HMR0.cpp
r43879 r44171 547 547 * AMD-specific initialization code. 548 548 */ 549 static void hmR0InitAmd(uint32_t u32FeaturesEDX )549 static void hmR0InitAmd(uint32_t u32FeaturesEDX, uint32_t uMaxExtLeaf) 550 550 { 551 551 /* … … 556 556 && (u32FeaturesEDX & X86_CPUID_FEATURE_EDX_MSR) 557 557 && (u32FeaturesEDX & X86_CPUID_FEATURE_EDX_FXSR) 558 && ASMIsValidExtRange(uMaxExtLeaf) 559 && uMaxExtLeaf >= 0x8000000a 558 560 ) 559 561 { … … 571 573 /* Query AMD features. */ 572 574 uint32_t u32Dummy; 573 ASMCpuId(0x8000000 A, &g_HvmR0.svm.u32Rev, &g_HvmR0.uMaxAsid, &u32Dummy, &g_HvmR0.svm.u32Features);575 ASMCpuId(0x8000000a, &g_HvmR0.svm.u32Rev, &g_HvmR0.uMaxAsid, &u32Dummy, &g_HvmR0.svm.u32Features); 574 576 575 577 /* … … 647 649 if (ASMHasCpuId()) 648 650 { 649 uint32_t u32FeaturesECX, u32FeaturesEDX;650 uint32_t u32VendorEBX, u32VendorECX, u32VendorEDX;651 uint32_t u32Dummy;652 653 651 /* Standard features. */ 654 ASMCpuId(0, &u32Dummy, &u32VendorEBX, &u32VendorECX, &u32VendorEDX); 655 ASMCpuId(1, &u32Dummy, &u32Dummy, &u32FeaturesECX, &u32FeaturesEDX); 656 657 /* Query AMD features. */ 658 ASMCpuId(0x80000001, &u32Dummy, &u32Dummy, 659 &g_HvmR0.cpuid.u32AMDFeatureECX, 660 &g_HvmR0.cpuid.u32AMDFeatureEDX); 661 662 /* Go to CPU specific initialization code. */ 663 if ( ( u32VendorEBX == X86_CPUID_VENDOR_INTEL_EBX 664 && u32VendorECX == X86_CPUID_VENDOR_INTEL_ECX 665 && u32VendorEDX == X86_CPUID_VENDOR_INTEL_EDX) 666 || ( u32VendorEBX == X86_CPUID_VENDOR_VIA_EBX 667 && u32VendorECX == X86_CPUID_VENDOR_VIA_ECX 668 && u32VendorEDX == X86_CPUID_VENDOR_VIA_EDX)) 652 uint32_t uMaxLeaf, u32VendorEBX, u32VendorECX, u32VendorEDX; 653 ASMCpuId(0, &uMaxLeaf, &u32VendorEBX, &u32VendorECX, &u32VendorEDX); 654 if (ASMIsValidStdRange(uMaxLeaf)) 669 655 { 670 rc = hmR0InitIntel(u32FeaturesECX, u32FeaturesEDX); 671 if (RT_FAILURE(rc)) 672 return rc; 656 uint32_t u32FeaturesECX, u32FeaturesEDX, u32Dummy; 657 ASMCpuId(1, &u32Dummy, &u32Dummy, &u32FeaturesECX, &u32FeaturesEDX); 658 659 /* Query AMD features. */ 660 uint32_t uMaxExtLeaf = ASMCpuId_EAX(0x80000000); 661 if (ASMIsValidExtRange(uMaxExtLeaf)) 662 ASMCpuId(0x80000001, &u32Dummy, &u32Dummy, 663 &g_HvmR0.cpuid.u32AMDFeatureECX, 664 &g_HvmR0.cpuid.u32AMDFeatureEDX); 665 else 666 g_HvmR0.cpuid.u32AMDFeatureECX = g_HvmR0.cpuid.u32AMDFeatureEDX = 0; 667 668 /* Go to CPU specific initialization code. */ 669 if ( ASMIsIntelCpuEx(u32VendorEBX, u32VendorECX, u32VendorEDX) 670 || ASMIsViaCentaurCpuEx(u32VendorEBX, u32VendorECX, u32VendorEDX)) 671 { 672 rc = hmR0InitIntel(u32FeaturesECX, u32FeaturesEDX); 673 if (RT_FAILURE(rc)) 674 return rc; 675 } 676 else if (ASMIsAmdCpuEx(u32VendorEBX, u32VendorECX, u32VendorEDX)) 677 hmR0InitAmd(u32FeaturesEDX, uMaxExtLeaf); 678 else 679 g_HvmR0.lLastError = VERR_HM_UNKNOWN_CPU; 673 680 } 674 else if ( u32VendorEBX == X86_CPUID_VENDOR_AMD_EBX675 && u32VendorECX == X86_CPUID_VENDOR_AMD_ECX676 && u32VendorEDX == X86_CPUID_VENDOR_AMD_EDX)677 hmR0InitAmd(u32FeaturesEDX);678 681 else 679 682 g_HvmR0.lLastError = VERR_HM_UNKNOWN_CPU;
Note:
See TracChangeset
for help on using the changeset viewer.