mirror of
git://source.winehq.org/git/wine.git
synced 2024-09-18 09:26:17 +00:00
wineboot: Get the CPU model details with NtQuerySystemInformation(SystemCpuInformation).
This commit is contained in:
parent
c3b1259f75
commit
c50dc0512c
|
@ -522,30 +522,6 @@ static void regs_to_str( int *regs, unsigned int len, WCHAR *buffer )
|
||||||
buffer[i] = 0;
|
buffer[i] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned int get_model( unsigned int reg0, unsigned int *stepping, unsigned int *family )
|
|
||||||
{
|
|
||||||
unsigned int model, family_id = (reg0 & (0x0f << 8)) >> 8;
|
|
||||||
|
|
||||||
model = (reg0 & (0x0f << 4)) >> 4;
|
|
||||||
if (family_id == 6 || family_id == 15) model |= (reg0 & (0x0f << 16)) >> 12;
|
|
||||||
|
|
||||||
*family = family_id;
|
|
||||||
if (family_id == 15) *family += (reg0 & (0xff << 20)) >> 20;
|
|
||||||
|
|
||||||
*stepping = reg0 & 0x0f;
|
|
||||||
return model;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void get_identifier( WCHAR *buf, size_t size, const WCHAR *arch )
|
|
||||||
{
|
|
||||||
unsigned int family, model, stepping;
|
|
||||||
int regs[4] = {0, 0, 0, 0};
|
|
||||||
|
|
||||||
__cpuid( regs, 1 );
|
|
||||||
model = get_model( regs[0], &stepping, &family );
|
|
||||||
swprintf( buf, size, L"%s Family %u Model %u Stepping %u", arch, family, model, stepping );
|
|
||||||
}
|
|
||||||
|
|
||||||
static void get_vendorid( WCHAR *buf )
|
static void get_vendorid( WCHAR *buf )
|
||||||
{
|
{
|
||||||
int tmp, regs[4] = {0, 0, 0, 0};
|
int tmp, regs[4] = {0, 0, 0, 0};
|
||||||
|
@ -560,7 +536,6 @@ static void get_vendorid( WCHAR *buf )
|
||||||
|
|
||||||
#else /* __i386__ || __x86_64__ */
|
#else /* __i386__ || __x86_64__ */
|
||||||
|
|
||||||
static void get_identifier( WCHAR *buf, size_t size, const WCHAR *arch ) { }
|
|
||||||
static void get_vendorid( WCHAR *buf ) { }
|
static void get_vendorid( WCHAR *buf ) { }
|
||||||
|
|
||||||
#endif /* __i386__ || __x86_64__ */
|
#endif /* __i386__ || __x86_64__ */
|
||||||
|
@ -838,13 +813,16 @@ static void create_hardware_registry_keys(void)
|
||||||
|
|
||||||
case PROCESSOR_ARCHITECTURE_AMD64:
|
case PROCESSOR_ARCHITECTURE_AMD64:
|
||||||
arch = L"AMD64";
|
arch = L"AMD64";
|
||||||
get_identifier( id, ARRAY_SIZE(id), !wcscmp(vendorid, L"AuthenticAMD") ? L"AMD64" : L"Intel64" );
|
swprintf( id, ARRAY_SIZE(id), L"%s Family %u Model %u Stepping %u",
|
||||||
|
!wcscmp(vendorid, L"AuthenticAMD") ? L"AMD64" : L"Intel64",
|
||||||
|
sci.ProcessorLevel, HIBYTE(sci.ProcessorRevision), LOBYTE(sci.ProcessorRevision) );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PROCESSOR_ARCHITECTURE_INTEL:
|
case PROCESSOR_ARCHITECTURE_INTEL:
|
||||||
default:
|
default:
|
||||||
arch = L"x86";
|
arch = L"x86";
|
||||||
get_identifier( id, ARRAY_SIZE(id), L"x86" );
|
swprintf( id, ARRAY_SIZE(id), L"x86 Family %u Model %u Stepping %u",
|
||||||
|
sci.ProcessorLevel, HIBYTE(sci.ProcessorRevision), LOBYTE(sci.ProcessorRevision) );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue