structcpuid_result {
uint32_t eax;
uint32_t ebx;
uint32_t ecx;
uint32_t edx;
};/** Generic CPUID function*/
static inline struct cpuid_result cpuid(unsigned intop)
{structcpuid_result result;
__asmvolatile("mov %%ebx, %%edi;"
"cpuid;"
"mov %%ebx, %%esi;"
"mov %%edi, %%ebx;":"=a"(result.eax),"=S"(result.ebx),"=c"(result.ecx),"=d"(result.edx)
:"0"(op)
:"edi");returnresult;
}static inline unsigned int cpuid_eax(unsigned intop)
{//unsigned int eax, ebx, ecx, edx;
structcpuid_result regs;
regs=cpuid(op);returnregs.eax;
}void get_cpu_vendor(char* cpu_vendor, unsigned int*cpuid_level)
{
unsignedint cpuid_op = 0x00000000;char vendor_name[16] = {'\0'};st