Commit 0e528772 authored by Ahmed Samy's avatar Ahmed Samy

cpuid: better parser for processor info

Signed-off-by: default avatarAhmed Samy <f.fallen45@gmail.com>
parent efd79fad
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
#include "cpuid.h" #include "cpuid.h"
#include <string.h> #include <string.h>
#include <stdio.h>
enum { enum {
CPU_PROC_BRAND_STRING_INTERNAL0 = 0x80000003, CPU_PROC_BRAND_STRING_INTERNAL0 = 0x80000003,
...@@ -309,10 +310,15 @@ void cpuid(cpuid_t info, uint32_t *buf) ...@@ -309,10 +310,15 @@ void cpuid(cpuid_t info, uint32_t *buf)
buf[2] = ecx; buf[2] = ecx;
break; break;
case CPU_PROCINFO_AND_FEATUREBITS: case CPU_PROCINFO_AND_FEATUREBITS:
buf[0] = eax; /* The so called "signature" of the CPU. */ buf[0] = (eax & 0x0F); /* Stepping */
buf[1] = edx; /* Feature flags #1. */ buf[1] = (eax >> 4) & 0x0F; /* Model */
buf[2] = ecx; /* Feature flags #2. */ buf[2] = (eax >> 8) & 0x0F; /* Family */
buf[3] = ebx; /* Additional feature information. */ 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; break;
case CPU_CACHE_AND_TLBD_INFO: case CPU_CACHE_AND_TLBD_INFO:
buf[0] = eax; buf[0] = eax;
......
...@@ -173,16 +173,14 @@ uint32_t cpuid_highest_ext_func_supported(void); ...@@ -173,16 +173,14 @@ uint32_t cpuid_highest_ext_func_supported(void);
* Returns a string into buf. * Returns a string into buf.
* *
* For CPU_PROCINFO_AND_FEATUREBITS: * For CPU_PROCINFO_AND_FEATUREBITS:
* buf[0]: * buf[0]: Stepping
* - 3:0 - Stepping * buf[1]: Model
* - 7:4 - Model * buf[2]: Family
* - 11:8 - Family * buf[3]: Extended Model
* - 13:12 - Processor Type * buf[4]: Extended Family
* - 19:16 - Extended Model * buf[5] and buf[6]:
* - 27:20 - Extended family
* buf[1] and buf[2]:
* Feature flags * Feature flags
* buf[3]: * buf[7]:
* Additional feature information. * Additional feature information.
* *
* For CPU_L1_CACHE_AND_TLB_IDS: * For CPU_L1_CACHE_AND_TLB_IDS:
......
...@@ -18,6 +18,11 @@ int main(void) ...@@ -18,6 +18,11 @@ int main(void)
cpuid(CPU_PROC_BRAND_STRING, (uint32_t *)buf); cpuid(CPU_PROC_BRAND_STRING, (uint32_t *)buf);
printf ("Processor Brand: %s\n", 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()); printf ("Highest extended function supported: %#010x\n", cpuid_highest_ext_func_supported());
uint32_t phys_virt[2]; uint32_t phys_virt[2];
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment