Browse Source

cpuid: parse additional feature information for pCPU_PROCINFO_AND_FEATUREBITS

Signed-off-by: Ahmed Samy <f.fallen45@gmail.com>
Ahmed Samy 12 years ago
parent
commit
dce6f0fa31
3 changed files with 13 additions and 5 deletions
  1. 6 2
      ccan/cpuid/cpuid.c
  2. 4 2
      ccan/cpuid/cpuid.h
  3. 3 1
      ccan/cpuid/test/run.c

+ 6 - 2
ccan/cpuid/cpuid.c

@@ -29,7 +29,6 @@
 #include "cpuid.h"
 
 #include <string.h>
-#include <stdio.h>
 
 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;

+ 4 - 2
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):

+ 3 - 1
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());