Im working on a Linux kernel module in which i need to read the CPUID of a processor to see if a feature is present. The chipset documentation states:
"Accesses to this MSR are supported when either CPUID (EAX=14H, ECX=0):ECX[bit 0] or CPUID.(EAX=14H, ECX=0):ECX[bit2]"
However I am using the following code to read CPUID:
int func()
{
int a, b;
for (a = 0; a < 5; a++)
{
__asm__("cpuid"
:"=a"(b) // EAX into b (output)
:"0"(a) // a into EAX (input)
:"%ebx","%ecx","%edx"); // clobbered registers
printk("The code %i gives %llx\n", a, b);
}
return 0;
}
Adapted from: https://en.wikipedia.org/wiki/CPUID#EAX.3D1:_Processor_Info_and_Feature_Bits
but i have no idea how it works or which values I am reading. Can someone explain to me how this code works and also how i can go about reading the above CPUID registers as well as EAX=80000008h.
Thanks