+++ /dev/null
-\r
-#include "core.h"\r
-\r
-void CPU_Identify(DATA_CPUID *id)\r
-{\r
- uint eflags0, eflags1;\r
- uint cpuidbuf[5]; //EAX-EBX-EDX-ECX-0x00000000\r
- uchar s[64];\r
-\r
- cpuidbuf[4] = 0x00000000;\r
-\r
- eflags0 = IO_Load_EFlags();\r
- IO_Store_EFlags(eflags0 | 0x00200000);\r
- eflags1 = IO_Load_EFlags();\r
- IO_Store_EFlags(eflags0);\r
-\r
- if((eflags1 | 0xffdfffff) == 0xffffffff){\r
- id->enable = true;\r
- CPUID(cpuidbuf, 0);\r
- id->max = cpuidbuf[0];\r
- sprintf(id->vendor, "%s", &cpuidbuf[1]);\r
-\r
- if(id->max >= 1){\r
- CPUID(cpuidbuf, 1);\r
- if((cpuidbuf[2] & ~1 << 0) != 0){\r
- id->FPU = true;\r
- } else{\r
- id->FPU = false;\r
- }\r
- if((cpuidbuf[2] & ~(1 << 1)) != 0){\r
- id->VME = true;\r
- } else{\r
- id->VME = false;\r
- }\r
- if((cpuidbuf[2] & ~(1 << 2)) != 0){\r
- id->DE = true;\r
- } else{\r
- id->DE = false;\r
- }\r
- if((cpuidbuf[2] & ~(1 << 3)) != 0){\r
- id->PSE = true;\r
- } else{\r
- id->PSE = false;\r
- }\r
- if((cpuidbuf[2] & ~(1 << 4)) != 0){\r
- id->TSC = true;\r
- } else{\r
- id->TSC = false;\r
- }\r
- if((cpuidbuf[2] & ~(1 << 5)) != 0){\r
- id->MSR = true;\r
- } else{\r
- id->MSR = false;\r
- }\r
- if((cpuidbuf[2] & ~(1 << 6)) != 0){\r
- id->PAE = true;\r
- } else{\r
- id->PAE = false;\r
- }\r
- if((cpuidbuf[2] & ~(1 << 7)) != 0){\r
- id->MCE = true;\r
- } else{\r
- id->MCE = false;\r
- }\r
- if((cpuidbuf[2] & ~(1 << 8)) != 0){\r
- id->CX8 = true;\r
- } else{\r
- id->CX8 = false;\r
- }\r
- if((cpuidbuf[2] & ~(1 << 9)) != 0){\r
- id->APIC = true;\r
- } else{\r
- id->APIC = false;\r
- }\r
- if((cpuidbuf[2] & ~(1 << 11)) != 0){\r
- id->SEP = true;\r
- } else{\r
- id->SEP = false;\r
- }\r
- if((cpuidbuf[2] & ~(1 << 12)) != 0){\r
- id->MTRR = true;\r
- } else{\r
- id->MTRR = false;\r
- }\r
- if((cpuidbuf[2] & ~(1 << 13)) != 0){\r
- id->PGE = true;\r
- } else{\r
- id->PGE = false;\r
- }\r
- if((cpuidbuf[2] & ~(1 << 14)) != 0){\r
- id->MCA = true;\r
- } else{\r
- id->MCA = false;\r
- }\r
- if((cpuidbuf[2] & ~(1 << 15)) != 0){\r
- id->CMOV = true;\r
- } else{\r
- id->CMOV = false;\r
- }\r
- if((cpuidbuf[2] & ~(1 << 16)) != 0){\r
- id->PAT = true;\r
- } else{\r
- id->PAT = false;\r
- }\r
- if((cpuidbuf[2] & ~(1 << 17)) != 0){\r
- id->PSE36 = true;\r
- } else{\r
- id->PSE36 = false;\r
- }\r
- if((cpuidbuf[2] & ~(1 << 18)) != 0){\r
- id->PSN = true;\r
- } else{\r
- id->PSN = false;\r
- }\r
- if((cpuidbuf[2] & ~(1 << 19)) != 0){\r
- id->CLFSH = true;\r
- } else{\r
- id->CLFSH = false;\r
- }\r
- if((cpuidbuf[2] & ~(1 << 21)) != 0){\r
- id->DS = true;\r
- } else{\r
- id->DS = false;\r
- }\r
- if((cpuidbuf[2] & ~(1 << 22)) != 0){\r
- id->ACPI = true;\r
- } else{\r
- id->ACPI = false;\r
- }\r
- if((cpuidbuf[2] & ~(1 << 23)) != 0){\r
- id->MMX = true;\r
- } else{\r
- id->MMX = false;\r
- }\r
- if((cpuidbuf[2] & ~(1 << 24)) != 0){\r
- id->FXSR = true;\r
- } else{\r
- id->FXSR = false;\r
- }\r
- if((cpuidbuf[2] & ~(1 << 25)) != 0){\r
- id->SSE = true;\r
- } else{\r
- id->SSE = false;\r
- }\r
- if((cpuidbuf[2] & ~(1 << 26)) != 0){\r
- id->SSE2 = true;\r
- } else{\r
- id->SSE2 = false;\r
- }\r
- if((cpuidbuf[2] & ~(1 << 27)) != 0){\r
- id->SS = true;\r
- } else{\r
- id->SS = false;\r
- }\r
- if((cpuidbuf[2] & ~(1 << 28)) != 0){\r
- id->HTT = true;\r
- } else{\r
- id->HTT = false;\r
- }\r
- if((cpuidbuf[2] & ~(1 << 29)) != 0){\r
- id->TM = true;\r
- } else{\r
- id->TM = false;\r
- }\r
- if((cpuidbuf[2] & ~(1 << 31)) != 0){\r
- id->PBE = true;\r
- } else{\r
- id->PBE = false;\r
- }\r
-\r
- if((cpuidbuf[3] & ~(1 << 0)) != 0){\r
- id->SSE3 = true;\r
- } else{\r
- id->SSE3 = false;\r
- }\r
- if((cpuidbuf[3] & ~(1 << 3)) != 0){\r
- id->MONITOR = true;\r
- } else{\r
- id->MONITOR = false;\r
- }\r
- if((cpuidbuf[3] & ~(1 << 4)) != 0){\r
- id->DSCPL = true;\r
- } else{\r
- id->DSCPL = false;\r
- }\r
- if((cpuidbuf[3] & ~(1 << 7)) != 0){\r
- id->EST = true;\r
- } else{\r
- id->EST = false;\r
- }\r
- if((cpuidbuf[3] & ~(1 << 8)) != 0){\r
- id->TM2 = true;\r
- } else{\r
- id->TM2 = false;\r
- }\r
- if((cpuidbuf[3] & ~(1 << 10)) != 0){\r
- id->CID = true;\r
- } else{\r
- id->CID = false;\r
- }\r
- if((cpuidbuf[3] & ~(1 << 13)) != 0){\r
- id->CX16 = true;\r
- } else{\r
- id->CX16 = false;\r
- }\r
- if((cpuidbuf[3] & ~(1 << 14)) != 0){\r
- id->xTPR = true;\r
- } else{\r
- id->xTPR = false;\r
- }\r
- }\r
- CPUID(cpuidbuf, 0x80000000);\r
- if(cpuidbuf[0] >= 0x80000000){\r
- id->ext_enable = true;\r
- id->ext_max = cpuidbuf[0];\r
- if(cpuidbuf[0] >= 0x80000004){\r
- CPUID2(&s[0], 0x80000002);\r
- CPUID2(&s[16], 0x80000003);\r
- CPUID2(&s[32], 0x80000004);\r
- sprintf(id->brand_string, "%s", s);\r
- } else{\r
- sprintf(id->brand_string, "Null");\r
- }\r
- } else{\r
- id->ext_enable = false;\r
- id->ext_max = 0;\r
- }\r
- } else{\r
- id->enable = false;\r
- id->max = 0;\r
- sprintf(id->vendor, "Null");\r
- }\r
- return;\r
-}\r