amdcpuid: Redo how we store amd cpuid's
* Ran out of space, so we do AMD chips as VVFFMM * Longer family and model masks work * Plug in any raw hex AMD CPUID and get back Haiku format
This commit is contained in:
+20
-5
@@ -16,7 +16,7 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
|
||||||
#define AMDCPU 0x1100
|
#define AMD_VENDOR 0x110000
|
||||||
|
|
||||||
#define EXT_FAMILY_MASK 0xF00000
|
#define EXT_FAMILY_MASK 0xF00000
|
||||||
#define EXT_MODEL_MASK 0x0F0000
|
#define EXT_MODEL_MASK 0x0F0000
|
||||||
@@ -84,11 +84,26 @@ main(int argc, char *argv[])
|
|||||||
unsigned int extMod = (cpuid & EXT_MODEL_MASK) >> 16;
|
unsigned int extMod = (cpuid & EXT_MODEL_MASK) >> 16;
|
||||||
unsigned int family = (cpuid & FAMILY_MASK) >> 8;
|
unsigned int family = (cpuid & FAMILY_MASK) >> 8;
|
||||||
unsigned int model = (cpuid & MODEL_MASK) >> 4;
|
unsigned int model = (cpuid & MODEL_MASK) >> 4;
|
||||||
|
unsigned int stepping = (cpuid & STEPPING_MASK);
|
||||||
|
|
||||||
if (family == 0xF)
|
unsigned int amdFamily = 0;
|
||||||
printf("model: 0x%lX\n", extFam + (extMod << 4) + model + 0x1100);
|
unsigned int amdModel = 0;
|
||||||
else
|
if (family == 0xF) {
|
||||||
printf("model: 0x%lX\n", (family << 4) + model + 0x1100);
|
amdFamily = extFam + family;
|
||||||
|
amdModel = (extMod << 4) + model;
|
||||||
|
} else {
|
||||||
|
amdFamily = family;
|
||||||
|
amdModel = model;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Haiku AMD cpuid format: VVFFMM
|
||||||
|
unsigned int amdHaiku
|
||||||
|
= AMD_VENDOR + (amdFamily << 8) + amdModel;
|
||||||
|
|
||||||
|
printf("family: 0x%lX\n", amdFamily);
|
||||||
|
printf("model: 0x%lX\n", amdModel);
|
||||||
|
printf("stepping: 0x%lX\n", stepping);
|
||||||
|
printf("Haiku CPUID: 0x%lX\n", amdHaiku);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user