#include "cpuid.h"
#include <string.h>
+#include <stdio.h>
enum {
CPU_PROC_BRAND_STRING_INTERNAL0 = 0x80000003,
buf[2] = ecx;
break;
case CPU_PROCINFO_AND_FEATUREBITS:
- buf[0] = eax; /* The so called "signature" of the CPU. */
- buf[1] = edx; /* Feature flags #1. */
- buf[2] = ecx; /* Feature flags #2. */
- buf[3] = ebx; /* Additional feature information. */
+ buf[0] = (eax & 0x0F); /* Stepping */
+ buf[1] = (eax >> 4) & 0x0F; /* Model */
+ buf[2] = (eax >> 8) & 0x0F; /* Family */
+ buf[3] = (eax >> 16) & 0x0F; /* Extended Model. */
+ buf[4] = (eax >> 24) & 0x0F; /* Extended Family. */
+
+ buf[5] = edx; /* Feature flags #1. */
+ buf[6] = ecx; /* Feature flags #2. */
+ buf[7] = ebx; /* Additional feature information. */
break;
case CPU_CACHE_AND_TLBD_INFO:
buf[0] = eax;
* Returns a string into buf.
*
* For CPU_PROCINFO_AND_FEATUREBITS:
- * buf[0]:
- * - 3:0 - Stepping
- * - 7:4 - Model
- * - 11:8 - Family
- * - 13:12 - Processor Type
- * - 19:16 - Extended Model
- * - 27:20 - Extended family
- * buf[1] and buf[2]:
+ * buf[0]: Stepping
+ * buf[1]: Model
+ * buf[2]: Family
+ * buf[3]: Extended Model
+ * buf[4]: Extended Family
+ * buf[5] and buf[6]:
* Feature flags
- * buf[3]:
+ * buf[7]:
* Additional feature information.
*
* For CPU_L1_CACHE_AND_TLB_IDS:
cpuid(CPU_PROC_BRAND_STRING, (uint32_t *)buf);
printf ("Processor Brand: %s\n", buf);
+ uint32_t procinfo[8];
+ cpuid(CPU_PROCINFO_AND_FEATUREBITS, procinfo);
+ printf("Stepping: %d Model: 0x%X Family: %d extended model: %d extended family: %d\n",
+ procinfo[0], procinfo[1], procinfo[2], procinfo[3], procinfo[4]);
+
printf ("Highest extended function supported: %#010x\n", cpuid_highest_ext_func_supported());
uint32_t phys_virt[2];