VirtualBox

Changeset 54738 in vbox for trunk/include/VBox/vmm


Ignore:
Timestamp:
Mar 12, 2015 9:04:02 PM (10 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
98907
Message:

VMM,REM: CPUID revamp - almost there now.

Location:
trunk/include/VBox/vmm
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/vmm/cpum.h

    r54714 r54738  
    305305/** @name CPUMCPUIDLEAF::fFlags
    306306 * @{ */
    307 /** Indicates that ECX (the sub-leaf indicator) doesn't change when
    308  * requesting the final leaf and all undefined leaves that follows it.
    309  * Observed for 0x0000000b on Intel. */
    310 #define CPUMCPUIDLEAF_F_SUBLEAVES_ECX_UNCHANGED RT_BIT_32(0)
     307/** Indicates working intel leaf 0xb where the lower 8 ECX bits are not modified
     308 * and EDX containing the extended APIC ID. */
     309#define CPUMCPUIDLEAF_F_INTEL_TOPOLOGY_SUBLEAVES    RT_BIT_32(0)
     310/** The leaf contains an APIC ID that needs changing to that of the current CPU. */
     311#define CPUMCPUIDLEAF_F_CONTAINS_APIC_ID            RT_BIT_32(1)
     312/** Mask of the valid flags. */
     313#define CPUMCPUIDLEAF_F_VALID_MASK                  UINT32_C(0x3)
    311314/** @} */
    312315
    313316/**
    314  * Method used to deal with unknown CPUID leafs.
     317 * Method used to deal with unknown CPUID leaves.
    315318 * @remarks Used in patch code.
    316319 */
    317 typedef enum CPUMUKNOWNCPUID
     320typedef enum CPUMUNKNOWNCPUID
    318321{
    319322    /** Invalid zero value. */
    320     CPUMUKNOWNCPUID_INVALID = 0,
     323    CPUMUNKNOWNCPUID_INVALID = 0,
    321324    /** Use given default values (DefCpuId). */
    322     CPUMUKNOWNCPUID_DEFAULTS,
     325    CPUMUNKNOWNCPUID_DEFAULTS,
    323326    /** Return the last standard leaf.
    324327     * Intel Sandy Bridge has been observed doing this. */
    325     CPUMUKNOWNCPUID_LAST_STD_LEAF,
     328    CPUMUNKNOWNCPUID_LAST_STD_LEAF,
    326329    /** Return the last standard leaf, with ecx observed.
    327330     * Intel Sandy Bridge has been observed doing this. */
    328     CPUMUKNOWNCPUID_LAST_STD_LEAF_WITH_ECX,
     331    CPUMUNKNOWNCPUID_LAST_STD_LEAF_WITH_ECX,
    329332    /** The register values are passed thru unmodified. */
    330     CPUMUKNOWNCPUID_PASSTHRU,
     333    CPUMUNKNOWNCPUID_PASSTHRU,
    331334    /** End of valid value. */
    332     CPUMUKNOWNCPUID_END,
     335    CPUMUNKNOWNCPUID_END,
    333336    /** Ensure 32-bit type. */
    334     CPUMUKNOWNCPUID_32BIT_HACK = 0x7fffffff
    335 } CPUMUKNOWNCPUID;
     337    CPUMUNKNOWNCPUID_32BIT_HACK = 0x7fffffff
     338} CPUMUNKNOWNCPUID;
    336339/** Pointer to unknown CPUID leaf method. */
    337 typedef CPUMUKNOWNCPUID *PCPUMUKNOWNCPUID;
     340typedef CPUMUNKNOWNCPUID *PCPUMUNKNOWNCPUID;
    338341
    339342
     
    923926VMMDECL(uint64_t)   CPUMGetGuestDR7(PVMCPU pVCpu);
    924927VMMDECL(int)        CPUMGetGuestDRx(PVMCPU pVCpu, uint32_t iReg, uint64_t *pValue);
    925 VMMDECL(void)       CPUMGetGuestCpuId(PVMCPU pVCpu, uint32_t iLeaf, uint32_t *pEax, uint32_t *pEbx, uint32_t *pEcx, uint32_t *pEdx);
     928VMMDECL(void)       CPUMGetGuestCpuId(PVMCPU pVCpu, uint32_t iLeaf, uint32_t iSubLeaf,
     929                                      uint32_t *pEax, uint32_t *pEbx, uint32_t *pEcx, uint32_t *pEdx);
    926930VMMDECL(uint64_t)   CPUMGetGuestEFER(PVMCPU pVCpu);
    927931VMMDECL(VBOXSTRICTRC)   CPUMQueryGuestMsr(PVMCPU pVCpu, uint32_t idMsr, uint64_t *puValue);
     
    12681272VMMR3DECL(const char *)     CPUMR3MicroarchName(CPUMMICROARCH enmMicroarch);
    12691273VMMR3DECL(int)              CPUMR3CpuIdCollectLeaves(PCPUMCPUIDLEAF *ppaLeaves, uint32_t *pcLeaves);
    1270 VMMR3DECL(int)              CPUMR3CpuIdDetectUnknownLeafMethod(PCPUMUKNOWNCPUID penmUnknownMethod, PCPUMCPUID pDefUnknown);
    1271 VMMR3DECL(const char *)     CPUMR3CpuIdUnknownLeafMethodName(CPUMUKNOWNCPUID enmUnknownMethod);
     1274VMMR3DECL(int)              CPUMR3CpuIdDetectUnknownLeafMethod(PCPUMUNKNOWNCPUID penmUnknownMethod, PCPUMCPUID pDefUnknown);
     1275VMMR3DECL(const char *)     CPUMR3CpuIdUnknownLeafMethodName(CPUMUNKNOWNCPUID enmUnknownMethod);
    12721276VMMR3DECL(CPUMCPUVENDOR)    CPUMR3CpuIdDetectVendorEx(uint32_t uEAX, uint32_t uEBX, uint32_t uECX, uint32_t uEDX);
    12731277VMMR3DECL(const char *)     CPUMR3CpuVendorName(CPUMCPUVENDOR enmVendor);
     
    12811285VMMR3_INT_DECL(RCPTRTYPE(PCCPUMCPUIDLEAF)) CPUMR3GetGuestCpuIdPatmArrayRCPtr(PVM pVM);
    12821286VMMR3_INT_DECL(RCPTRTYPE(PCCPUMCPUIDLEAF)) CPUMR3GetGuestCpuIdPatmArrayEndRCPtr(PVM pVM);
    1283 VMMR3_INT_DECL(CPUMUKNOWNCPUID)            CPUMR3GetGuestCpuIdPatmUnknownLeafMethod(PVM pVM);
     1287VMMR3_INT_DECL(CPUMUNKNOWNCPUID)            CPUMR3GetGuestCpuIdPatmUnknownLeafMethod(PVM pVM);
    12841288/* Legacy: */
    12851289VMMR3_INT_DECL(uint32_t)                   CPUMR3GetGuestCpuIdPatmStdMax(PVM pVM);
  • trunk/include/VBox/vmm/cpum.mac

    r54714 r54738  
    4343    .fFlags             resd    1
    4444endstruc
    45 %define CPUMCPUIDLEAF_F_SUBLEAVES_ECX_UNCHANGED RT_BIT_32(0)
     45%define CPUMCPUIDLEAF_F_INTEL_TOPOLOGY_SUBLEAVES RT_BIT_32(0)
    4646
    4747;;
     
    5656
    5757
    58 ;; @name Method used to deal with unknown CPUID leafs.
     58;; @name Method used to deal with unknown CPUID leaves.
    5959;; @{
    60 %define CPUMUKNOWNCPUID_DEFAULTS                1
    61 %define CPUMUKNOWNCPUID_LAST_STD_LEAF           2
    62 %define CPUMUKNOWNCPUID_LAST_STD_LEAF_WITH_ECX  3
    63 %define CPUMUKNOWNCPUID_PASSTHRU                4
     60%define CPUMUNKNOWNCPUID_DEFAULTS                1
     61%define CPUMUNKNOWNCPUID_LAST_STD_LEAF           2
     62%define CPUMUNKNOWNCPUID_LAST_STD_LEAF_WITH_ECX  3
     63%define CPUMUNKNOWNCPUID_PASSTHRU                4
    6464;; @}
    6565
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