Extracted CPU identification out of Pulse to be used by Pulse and sysinfo.
Might be better placed in a source file, but sysinfo is currently built very simple, and I was too lazy to change this :-) git-svn-id: file:///srv/svn/repos/haiku/trunk/current@10317 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -0,0 +1,201 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2004, Axel Dörfler, [email protected]. All rights reserved.
|
||||||
|
* Distributed under the terms of the MIT License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Taken from the Pulse application, and extended.
|
||||||
|
* It's used by Pulse and sysinfo.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
const char *get_cpu_vendor_string(enum cpu_types type);
|
||||||
|
const char *get_cpu_model_string(enum cpu_types type);
|
||||||
|
void get_cpu_type(char *vendorBuffer, size_t vendorSize, char *modelBuffer, size_t modelSize);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
const char *
|
||||||
|
get_cpu_vendor_string(enum cpu_types type)
|
||||||
|
{
|
||||||
|
#if __POWERPC__
|
||||||
|
// We're not that nice here
|
||||||
|
return "IBM/Motorola";
|
||||||
|
#endif
|
||||||
|
#if __INTEL__
|
||||||
|
// Determine x86 vendor name
|
||||||
|
switch (type & B_CPU_x86_VENDOR_MASK) {
|
||||||
|
case B_CPU_INTEL_x86:
|
||||||
|
return "Intel";
|
||||||
|
case B_CPU_AMD_x86:
|
||||||
|
return "AMD";
|
||||||
|
case B_CPU_CYRIX_x86:
|
||||||
|
return "Cyrix";
|
||||||
|
case B_CPU_IDT_x86:
|
||||||
|
// IDT was bought by VIA
|
||||||
|
if (((type >> 8) & 0xf) >= 6)
|
||||||
|
return "VIA";
|
||||||
|
return "IDT";
|
||||||
|
case B_CPU_RISE_x86:
|
||||||
|
return "Rise";
|
||||||
|
case B_CPU_TRANSMETA_x86:
|
||||||
|
return "Transmeta";
|
||||||
|
|
||||||
|
default:
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const char *
|
||||||
|
get_cpu_model_string(enum cpu_types type)
|
||||||
|
{
|
||||||
|
// Determine CPU type
|
||||||
|
switch (type) {
|
||||||
|
#if __POWERPC__
|
||||||
|
case B_CPU_PPC_603:
|
||||||
|
return "603";
|
||||||
|
case B_CPU_PPC_603e:
|
||||||
|
return "603e";
|
||||||
|
case B_CPU_PPC_750:
|
||||||
|
return "750";
|
||||||
|
case B_CPU_PPC_604:
|
||||||
|
return "604";
|
||||||
|
case B_CPU_PPC_604e:
|
||||||
|
return "604e";
|
||||||
|
#endif // __POWERPC__
|
||||||
|
#if __INTEL__
|
||||||
|
case B_CPU_x86:
|
||||||
|
return "Unknown x86";
|
||||||
|
|
||||||
|
/* Intel */
|
||||||
|
case B_CPU_INTEL_PENTIUM:
|
||||||
|
case B_CPU_INTEL_PENTIUM75:
|
||||||
|
return "Pentium";
|
||||||
|
case B_CPU_INTEL_PENTIUM_486_OVERDRIVE:
|
||||||
|
case B_CPU_INTEL_PENTIUM75_486_OVERDRIVE:
|
||||||
|
return "Pentium OD";
|
||||||
|
case B_CPU_INTEL_PENTIUM_MMX:
|
||||||
|
case B_CPU_INTEL_PENTIUM_MMX_MODEL_8:
|
||||||
|
return "Pentium MMX";
|
||||||
|
case B_CPU_INTEL_PENTIUM_PRO:
|
||||||
|
return "Pentium Pro";
|
||||||
|
case B_CPU_INTEL_PENTIUM_II_MODEL_3:
|
||||||
|
case B_CPU_INTEL_PENTIUM_II_MODEL_5:
|
||||||
|
return "Pentium II";
|
||||||
|
case B_CPU_INTEL_CELERON:
|
||||||
|
return "Celeron";
|
||||||
|
case B_CPU_INTEL_PENTIUM_III:
|
||||||
|
case B_CPU_INTEL_PENTIUM_III_MODEL_8:
|
||||||
|
case B_CPU_INTEL_PENTIUM_III_MODEL_11:
|
||||||
|
return "Pentium III";
|
||||||
|
case B_CPU_INTEL_PENTIUM_M:
|
||||||
|
return "Pentium M";
|
||||||
|
case B_CPU_INTEL_PENTIUM_IV:
|
||||||
|
case B_CPU_INTEL_PENTIUM_IV_MODEL_1:
|
||||||
|
case B_CPU_INTEL_PENTIUM_IV_MODEL_2:
|
||||||
|
case B_CPU_INTEL_PENTIUM_IV_XEON:
|
||||||
|
return "Pentium 4";
|
||||||
|
|
||||||
|
/* AMD */
|
||||||
|
case B_CPU_AMD_K5_MODEL_0:
|
||||||
|
case B_CPU_AMD_K5_MODEL_1:
|
||||||
|
case B_CPU_AMD_K5_MODEL_2:
|
||||||
|
case B_CPU_AMD_K5_MODEL_3:
|
||||||
|
return "K5";
|
||||||
|
case B_CPU_AMD_K6_MODEL_6:
|
||||||
|
case B_CPU_AMD_K6_MODEL_7:
|
||||||
|
return "K6";
|
||||||
|
case B_CPU_AMD_K6_2:
|
||||||
|
return "K6-2";
|
||||||
|
case B_CPU_AMD_K6_III:
|
||||||
|
case B_CPU_AMD_K6_III_MODEL_2:
|
||||||
|
return "K6-III";
|
||||||
|
case B_CPU_AMD_ATHLON_MODEL_1:
|
||||||
|
case B_CPU_AMD_ATHLON_MODEL_2:
|
||||||
|
case B_CPU_AMD_ATHLON_THUNDERBIRD:
|
||||||
|
return "Athlon";
|
||||||
|
case B_CPU_AMD_ATHLON_XP:
|
||||||
|
case B_CPU_AMD_ATHLON_XP_MODEL_2:
|
||||||
|
case B_CPU_AMD_ATHLON_XP_MODEL_3:
|
||||||
|
case B_CPU_AMD_ATHLON_XP_MODEL_BARTON:
|
||||||
|
return "Athlon XP";
|
||||||
|
case B_CPU_AMD_DURON:
|
||||||
|
return "Duron";
|
||||||
|
case B_CPU_AMD_ATHLON_64:
|
||||||
|
case B_CPU_AMD_ATHLON_64_MODEL_2:
|
||||||
|
case B_CPU_AMD_ATHLON_64_MODEL_3:
|
||||||
|
case B_CPU_AMD_ATHLON_64_MODEL_4:
|
||||||
|
case B_CPU_AMD_ATHLON_64_MODEL_5:
|
||||||
|
case B_CPU_AMD_ATHLON_64_MODEL_6:
|
||||||
|
case B_CPU_AMD_ATHLON_64_MODEL_7:
|
||||||
|
return "Athlon 64";
|
||||||
|
case B_CPU_AMD_OPTERON:
|
||||||
|
return "Opteron";
|
||||||
|
|
||||||
|
/* Transmeta */
|
||||||
|
case B_CPU_TRANSMETA_CRUSOE:
|
||||||
|
return "Crusoe";
|
||||||
|
|
||||||
|
/* IDT/VIA */
|
||||||
|
case B_CPU_IDT_WINCHIP_C6:
|
||||||
|
return "WinChip C6";
|
||||||
|
case B_CPU_IDT_WINCHIP_2:
|
||||||
|
return "WinChip 2";
|
||||||
|
case B_CPU_VIA_EDEN:
|
||||||
|
case B_CPU_VIA_EDEN_EZRA_T:
|
||||||
|
return "Eden";
|
||||||
|
|
||||||
|
/* Cyrix/VIA */
|
||||||
|
case B_CPU_CYRIX_GXm:
|
||||||
|
return "GXm";
|
||||||
|
case B_CPU_CYRIX_6x86MX:
|
||||||
|
return "6x86MX";
|
||||||
|
|
||||||
|
/* Rise */
|
||||||
|
case B_CPU_RISE_mP6:
|
||||||
|
return "mP6";
|
||||||
|
|
||||||
|
/* National Semiconductor */
|
||||||
|
case B_CPU_NATIONAL_GEODE_GX1:
|
||||||
|
return "Geode GX1";
|
||||||
|
#endif // __INTEL__
|
||||||
|
|
||||||
|
default:
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
get_cpu_type(char *vendorBuffer, size_t vendorSize, char *modelBuffer, size_t modelSize)
|
||||||
|
{
|
||||||
|
const char *vendor, *model;
|
||||||
|
system_info info;
|
||||||
|
|
||||||
|
get_system_info(&info);
|
||||||
|
|
||||||
|
vendor = get_cpu_vendor_string(info.cpu_type);
|
||||||
|
if (vendor == NULL)
|
||||||
|
vendor = "Unknown";
|
||||||
|
|
||||||
|
model = get_cpu_model_string(info.cpu_type);
|
||||||
|
if (model == NULL)
|
||||||
|
model = "Unknown";
|
||||||
|
|
||||||
|
#ifdef R5_COMPATIBLE
|
||||||
|
strncpy(vendorBuffer, vendor, vendorSize - 1);
|
||||||
|
vendorBuffer[vendorSize - 1] = '\0';
|
||||||
|
strncpy(modelBuffer, model, modelSize - 1);
|
||||||
|
modelBuffer[modelSize - 1] = '\0';
|
||||||
|
#else
|
||||||
|
strlcpy(vendorBuffer, vendor, vendorSize);
|
||||||
|
strlcpy(modelBuffer, model, modelSize);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user