summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAhmed Samy <f.fallen45@gmail.com>2013-09-26 14:13:12 +0000
committerAhmed Samy <f.fallen45@gmail.com>2013-09-26 14:13:12 +0000
commitc9345f68da9df5b5aa499d77cd31dc0bc9fc45d7 (patch)
tree8b19745767b04088e6dc72756d160cde037c3265
parent2df53ae1a1705474cd776d24b03f12818f77b232 (diff)
cpuid: parse CPU L1 cache and TLB identifications
Signed-off-by: Ahmed Samy <f.fallen45@gmail.com>
-rw-r--r--ccan/cpuid/cpuid.c4
-rw-r--r--ccan/cpuid/cpuid.h20
2 files changed, 24 insertions, 0 deletions
diff --git a/ccan/cpuid/cpuid.c b/ccan/cpuid/cpuid.c
index 8b2024cb..6133e13f 100644
--- a/ccan/cpuid/cpuid.c
+++ b/ccan/cpuid/cpuid.c
@@ -260,6 +260,10 @@ void cpuid(cpuid_t info, uint32_t *buf)
buf[1] = ecx;
break;
case CPU_L1_CACHE_AND_TLB_IDS:
+ buf[0] = eax;
+ buf[1] = ebx;
+ buf[2] = ecx;
+ buf[3] = edx;
break;
case CPU_EXTENDED_L2_CACHE_FEATURES:
*buf = ecx;
diff --git a/ccan/cpuid/cpuid.h b/ccan/cpuid/cpuid.h
index 8988949e..305d69aa 100644
--- a/ccan/cpuid/cpuid.h
+++ b/ccan/cpuid/cpuid.h
@@ -182,6 +182,23 @@ uint32_t cpuid_highest_ext_func_supported(void);
* buf[3]:
* Additional feature information.
*
+ * For CPU_L1_CACHE_AND_TLB_IDS:
+ * buf[0]: (eax):
+ * - 7..0 Number of times to exec cpuid to get all descriptors.
+ * - 15..8 Instruction TLB: 4K Pages, 4-way set associtive, 128 entries.
+ * - 23..16 Data TLB: 4k Pages, 4-way set associtive, 128 entries.
+ * - 24..31 Instruction TLB: 4K Pages, 4-way set associtive, 2 entries.
+ * buf[1]: (ebx):
+ * - 7..0 64-byte prefetching
+ * - 8..31 Null descriptor
+ * buf[2]: (ecx):
+ * - 0..31 Null descriptor
+ * buf[3]: (edx):
+ * - 7..0 2nd-level cache, 2M, 8-way set associtive, 64-byte line size
+ * - 15..8 1st-level instruction cache: 32K, 8-way set associtive, 64 byte line size
+ * - 16..23 Data TLB: 4M Pages, 4-way set associtive, 8 entires.
+ * - 24..31 1st-level data cache: 32K, 8-way set associtive, 64 byte line size
+ *
* For CPU_HIGHEST_EXTENDED_FUNCTION_SUPPORTED:
* Returns the highest supported function in *buf (expects an integer ofc)
*
@@ -194,6 +211,9 @@ uint32_t cpuid_highest_ext_func_supported(void);
* For CPU_PROC_BRAND_STRING:
* Have a char array with at least 48 bytes assigned to it.
*
+ * Here's a page which will help you parse the data provided by this function.
+ * http://www.flounder.com/cpuid_explorer2.htm
+ *
* If an invalid flag has been passed a 0xbaadf00d is returned in *buf.
*/
void cpuid(cpuid_t info, uint32_t *buf);