From: Ahmed Samy Date: Thu, 7 Nov 2013 17:14:17 +0000 (+0200) Subject: cpuid: parse additional feature information for pCPU_PROCINFO_AND_FEATUREBITS X-Git-Url: https://git.ozlabs.org/?p=ccan;a=commitdiff_plain;h=dce6f0fa3177fbed4797e13173918309abb3cb5f cpuid: parse additional feature information for pCPU_PROCINFO_AND_FEATUREBITS Signed-off-by: Ahmed Samy --- diff --git a/ccan/cpuid/cpuid.c b/ccan/cpuid/cpuid.c index bc44fcf2..59f73363 100644 --- a/ccan/cpuid/cpuid.c +++ b/ccan/cpuid/cpuid.c @@ -29,7 +29,6 @@ #include "cpuid.h" #include -#include enum { CPU_PROC_BRAND_STRING_INTERNAL0 = 0x80000003, @@ -318,7 +317,12 @@ void cpuid(cpuid_t info, uint32_t *buf) buf[5] = edx; /* Feature flags #1. */ buf[6] = ecx; /* Feature flags #2. */ - buf[7] = ebx; /* Additional feature information. */ + + /* Additional Feature information. */ + buf[7] = ebx & 0xFF; + buf[8] = (ebx >> 8) & 0xFF; + buf[9] = (ebx >> 16) & 0xFF; + buf[10] = (ebx >> 24) & 0xFF; break; case CPU_CACHE_AND_TLBD_INFO: buf[0] = eax; diff --git a/ccan/cpuid/cpuid.h b/ccan/cpuid/cpuid.h index bf6c5113..a581a0e3 100644 --- a/ccan/cpuid/cpuid.h +++ b/ccan/cpuid/cpuid.h @@ -180,8 +180,10 @@ uint32_t cpuid_highest_ext_func_supported(void); * buf[4]: Extended Family * buf[5] and buf[6]: * Feature flags - * buf[7]: - * Additional feature information. + * buf[7]: Brand Index + * buf[8]: CL Flush Line Size + * buf[9]: Logical Processors + * buf[10]: Initial APICID * * For CPU_L1_CACHE_AND_TLB_IDS: * buf[0]: (eax): diff --git a/ccan/cpuid/test/run.c b/ccan/cpuid/test/run.c index 83b90f37..39a7af95 100644 --- a/ccan/cpuid/test/run.c +++ b/ccan/cpuid/test/run.c @@ -18,10 +18,12 @@ int main(void) cpuid(CPU_PROC_BRAND_STRING, (uint32_t *)buf); printf ("Processor Brand: %s\n", buf); - uint32_t procinfo[8]; + uint32_t procinfo[11]; 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("Brand Index: %d CL Flush Line Size: %d Logical Processors: %d Initial APICID: %d\n", + procinfo[7], procinfo[8], procinfo[9], procinfo[10]); printf ("Highest extended function supported: %#010x\n", cpuid_highest_ext_func_supported());