| 1 | #include <cpu.h> |
| 2 | |
| 3 | cpuid_info_t CPUID() { |
| 4 | cpuid_info_t info; |
| 5 | uint32_t ebx; |
| 6 | uint32_t edx; |
| 7 | uint32_t ecx; |
| 8 | |
| 9 | asm volatile("cpuid": "=b"(ebx),"=d"(edx),"=c"(ecx) : "a"(0)); // Get vendor string |
| 10 | for (int i = 0; i < 4; i++) info.vendorString[i] = ebx >> (i * 8) & 0xFF; // Copy string to buffer |
| 11 | for (int i = 0; i < 4; i++) info.vendorString[i+4] = edx >> (i * 8) & 0xFF; |
| 12 | for (int i = 0; i < 4; i++) info.vendorString[i+8] = ecx >> (i * 8) & 0xFF; |
| 13 | |
| 14 | asm volatile("cpuid": "=d"(edx), "=c"(ecx) : "a"(1)); // Get features |
| 15 | info.features_ecx = ecx; |
| 16 | info.features_edx = edx; |
| 17 | return info; |
| 18 | } |