Commit 7cc24627 authored by Ahmed Samy's avatar Ahmed Samy

cpuid: prefix cpuid_t enums with CPUID_* instead of CPU_*

Signed-off-by: default avatarAhmed Samy <f.fallen45@gmail.com>
parent 92b6e205
...@@ -31,8 +31,8 @@ ...@@ -31,8 +31,8 @@
#include <string.h> #include <string.h>
enum { enum {
CPU_PROC_BRAND_STRING_INTERNAL0 = 0x80000003, CPUID_PROC_BRAND_STRING_INTERNAL0 = 0x80000003,
CPU_PROC_BRAND_STRING_INTERNAL1 = 0x80000004 CPUID_PROC_BRAND_STRING_INTERNAL1 = 0x80000004
}; };
#ifndef _MSC_VER #ifndef _MSC_VER
...@@ -144,7 +144,7 @@ bool cpuid_is_supported(void) ...@@ -144,7 +144,7 @@ bool cpuid_is_supported(void)
bool cpuid_test_feature(cpuid_t feature) bool cpuid_test_feature(cpuid_t feature)
{ {
if (feature > CPU_VIRT_PHYS_ADDR_SIZES || feature < CPU_EXTENDED_PROC_INFO_FEATURE_BITS) if (feature > CPUID_VIRT_PHYS_ADDR_SIZES || feature < CPUID_EXTENDED_PROC_INFO_FEATURE_BITS)
return false; return false;
return (feature <= cpuid_highest_ext_func_supported()); return (feature <= cpuid_highest_ext_func_supported());
...@@ -158,11 +158,11 @@ bool cpuid_has_ecxfeature(int feature) ...@@ -158,11 +158,11 @@ bool cpuid_has_ecxfeature(int feature)
asm volatile( asm volatile(
"cpuid\n\t" "cpuid\n\t"
: "=c" (_ecx) : "=c" (_ecx)
: "a" (CPU_PROCINFO_AND_FEATUREBITS) : "a" (CPUID_PROCINFO_AND_FEATUREBITS)
); );
#elif defined _MSC_VER #elif defined _MSC_VER
__asm { __asm {
mov eax, CPU_PROCINFO_AND_FEATUREBITS mov eax, CPUID_PROCINFO_AND_FEATUREBITS
cpuid cpuid
mov _ecx, ecx mov _ecx, ecx
}; };
...@@ -180,11 +180,11 @@ bool cpuid_has_edxfeature(int feature) ...@@ -180,11 +180,11 @@ bool cpuid_has_edxfeature(int feature)
asm volatile( asm volatile(
"cpuid\n\t" "cpuid\n\t"
: "=d" (_edx) : "=d" (_edx)
: "a" (CPU_PROCINFO_AND_FEATUREBITS) : "a" (CPUID_PROCINFO_AND_FEATUREBITS)
); );
#elif defined _MSC_VER #elif defined _MSC_VER
__asm { __asm {
mov eax, CPU_PROCINFO_AND_FEATUREBITS mov eax, CPUID_PROCINFO_AND_FEATUREBITS
cpuid cpuid
mov _edx, edx mov _edx, edx
}; };
...@@ -223,7 +223,7 @@ cputype_t cpuid_get_cpu_type(void) ...@@ -223,7 +223,7 @@ cputype_t cpuid_get_cpu_type(void)
} u; } u;
uint32_t i; uint32_t i;
___cpuid(CPU_VENDORID, &i, &u.bufu32[0], &u.bufu32[2], &u.bufu32[1]); ___cpuid(CPUID_VENDORID, &i, &u.bufu32[0], &u.bufu32[2], &u.bufu32[1]);
for (i = 0; i < sizeof(cpuids) / sizeof(cpuids[0]); ++i) { for (i = 0; i < sizeof(cpuids) / sizeof(cpuids[0]); ++i) {
if (strncmp(cpuids[i], u.buf, 12) == 0) { if (strncmp(cpuids[i], u.buf, 12) == 0) {
cputype = (cputype_t)i; cputype = (cputype_t)i;
...@@ -254,11 +254,11 @@ uint32_t cpuid_highest_ext_func_supported(void) ...@@ -254,11 +254,11 @@ uint32_t cpuid_highest_ext_func_supported(void)
asm volatile( asm volatile(
"cpuid\n\t" "cpuid\n\t"
: "=a" (highest) : "=a" (highest)
: "a" (CPU_HIGHEST_EXTENDED_FUNCTION_SUPPORTED) : "a" (CPUID_HIGHEST_EXTENDED_FUNCTION_SUPPORTED)
); );
#elif defined _MSC_VER #elif defined _MSC_VER
__asm { __asm {
mov eax, CPU_HIGHEST_EXTENDED_FUNCTION_SUPPORTED mov eax, CPUID_HIGHEST_EXTENDED_FUNCTION_SUPPORTED
cpuid cpuid
mov highest, eax mov highest, eax
}; };
...@@ -273,23 +273,23 @@ void cpuid(cpuid_t info, uint32_t *buf) ...@@ -273,23 +273,23 @@ void cpuid(cpuid_t info, uint32_t *buf)
/* Sanity checks, make sure we're not trying to do something /* Sanity checks, make sure we're not trying to do something
* invalid or we are trying to get information that isn't supported * invalid or we are trying to get information that isn't supported
* by the CPU. */ * by the CPU. */
if (info > CPU_VIRT_PHYS_ADDR_SIZES || (info > CPU_HIGHEST_EXTENDED_FUNCTION_SUPPORTED if (info > CPUID_VIRT_PHYS_ADDR_SIZES || (info > CPUID_HIGHEST_EXTENDED_FUNCTION_SUPPORTED
&& !cpuid_test_feature(info))) && !cpuid_test_feature(info)))
return; return;
if (info == CPU_PROC_BRAND_STRING) { if (info == CPUID_PROC_BRAND_STRING) {
static char cached[48] = { 0 }; static char cached[48] = { 0 };
if (cached[0] == '\0') { if (cached[0] == '\0') {
___cpuid(CPU_PROC_BRAND_STRING, &buf[0], &buf[1], &buf[2], &buf[3]); ___cpuid(CPUID_PROC_BRAND_STRING, &buf[0], &buf[1], &buf[2], &buf[3]);
___cpuid(CPU_PROC_BRAND_STRING_INTERNAL0, &buf[4], &buf[5], &buf[6], &buf[7]); ___cpuid(CPUID_PROC_BRAND_STRING_INTERNAL0, &buf[4], &buf[5], &buf[6], &buf[7]);
___cpuid(CPU_PROC_BRAND_STRING_INTERNAL1, &buf[8], &buf[9], &buf[10], &buf[11]); ___cpuid(CPUID_PROC_BRAND_STRING_INTERNAL1, &buf[8], &buf[9], &buf[10], &buf[11]);
memcpy(cached, buf, sizeof cached); memcpy(cached, buf, sizeof cached);
} else } else
buf = (uint32_t *)cached; buf = (uint32_t *)cached;
return; return;
} else if (info == CPU_HIGHEST_EXTENDED_FUNCTION_SUPPORTED) { } else if (info == CPUID_HIGHEST_EXTENDED_FUNCTION_SUPPORTED) {
*buf = cpuid_highest_ext_func_supported(); *buf = cpuid_highest_ext_func_supported();
return; return;
} }
...@@ -298,12 +298,12 @@ void cpuid(cpuid_t info, uint32_t *buf) ...@@ -298,12 +298,12 @@ void cpuid(cpuid_t info, uint32_t *buf)
___cpuid(info, &eax, &ebx, &ecx, &edx); ___cpuid(info, &eax, &ebx, &ecx, &edx);
switch (info) { switch (info) {
case CPU_VENDORID: case CPUID_VENDORID:
buf[0] = ebx; buf[0] = ebx;
buf[1] = edx; buf[1] = edx;
buf[2] = ecx; buf[2] = ecx;
break; break;
case CPU_PROCINFO_AND_FEATUREBITS: case CPUID_PROCINFO_AND_FEATUREBITS:
buf[0] = (eax & 0x0F); /* Stepping */ buf[0] = (eax & 0x0F); /* Stepping */
buf[1] = (eax >> 4) & 0x0F; /* Model */ buf[1] = (eax >> 4) & 0x0F; /* Model */
buf[2] = (eax >> 8) & 0x0F; /* Family */ buf[2] = (eax >> 8) & 0x0F; /* Family */
...@@ -319,31 +319,31 @@ void cpuid(cpuid_t info, uint32_t *buf) ...@@ -319,31 +319,31 @@ void cpuid(cpuid_t info, uint32_t *buf)
buf[9] = (ebx >> 16) & 0xFF; buf[9] = (ebx >> 16) & 0xFF;
buf[10] = (ebx >> 24) & 0xFF; buf[10] = (ebx >> 24) & 0xFF;
break; break;
case CPU_CACHE_AND_TLBD_INFO: case CPUID_CACHE_AND_TLBD_INFO:
buf[0] = eax; buf[0] = eax;
buf[1] = ebx; buf[1] = ebx;
buf[2] = ecx; buf[2] = ecx;
buf[3] = edx; buf[3] = edx;
break; break;
case CPU_EXTENDED_PROC_INFO_FEATURE_BITS: case CPUID_EXTENDED_PROC_INFO_FEATURE_BITS:
buf[0] = edx; buf[0] = edx;
buf[1] = ecx; buf[1] = ecx;
break; break;
case CPU_L1_CACHE_AND_TLB_IDS: case CPUID_L1_CACHE_AND_TLB_IDS:
buf[0] = eax; buf[0] = eax;
buf[1] = ebx; buf[1] = ebx;
buf[2] = ecx; buf[2] = ecx;
buf[3] = edx; buf[3] = edx;
break; break;
case CPU_EXTENDED_L2_CACHE_FEATURES: case CPUID_EXTENDED_L2_CACHE_FEATURES:
buf[0] = ecx & 0xFF; /* Line size. */ buf[0] = ecx & 0xFF; /* Line size. */
buf[1] = (ecx >> 12) & 0xFF; /* Associativity. */ buf[1] = (ecx >> 12) & 0xFF; /* Associativity. */
buf[2] = ecx >> 16; /* Cache size. */ buf[2] = ecx >> 16; /* Cache size. */
break; break;
case CPU_ADV_POWER_MGT_INFO: case CPUID_ADV_POWER_MGT_INFO:
*buf = edx; *buf = edx;
break; break;
case CPU_VIRT_PHYS_ADDR_SIZES: case CPUID_VIRT_PHYS_ADDR_SIZES:
buf[0] = eax & 0xFF; /* physical. */ buf[0] = eax & 0xFF; /* physical. */
buf[1] = (eax >> 8) & 0xFF; /* virtual. */ buf[1] = (eax >> 8) & 0xFF; /* virtual. */
break; break;
......
...@@ -30,50 +30,50 @@ ...@@ -30,50 +30,50 @@
* *
* This is used as a parameter in cpuid(). * This is used as a parameter in cpuid().
* *
* CPU_VENDORID: * CPUID_VENDORID:
* The CPU's Vendor ID. * The CPU's Vendor ID.
* *
* CPU_PROCINFO_AND_FEATUREBITS: * CPUID_PROCINFO_AND_FEATUREBITS:
* Processor information and feature bits (SSE, etc.). * Processor information and feature bits (SSE, etc.).
* *
* CPU_CACHE_AND_TLBD_INFO * CPUID_CACHE_AND_TLBD_INFO
* Cache and TLBD Information. * Cache and TLBD Information.
* *
* CPU_HIGHEST_EXTENDED_FUNCTION_SUPPORTED: * CPUID_HIGHEST_EXTENDED_FUNCTION_SUPPORTED:
* Highest extended function supported address. * Highest extended function supported address.
* Can be like 0x80000008. * Can be like 0x80000008.
* *
* CPU_EXTENDED_PROC_INFO_FEATURE_BITS: * CPUID_EXTENDED_PROC_INFO_FEATURE_BITS:
* Extended processor information and feature bits (64bit etc.) * Extended processor information and feature bits (64bit etc.)
* *
* CPU_PROC_BRAND_STRING: * CPUID_PROC_BRAND_STRING:
* The Processor's brand string. * The Processor's brand string.
* *
* CPU_L1_CACHE_AND_TLB_IDS: * CPUID_L1_CACHE_AND_TLB_IDS:
* L1 Cache and TLB Identifications. * L1 Cache and TLB Identifications.
* *
* CPU_EXTENDED_L2_CACHE_FEATURES: * CPUID_EXTENDED_L2_CACHE_FEATURES:
* Extended L2 Cache features. * Extended L2 Cache features.
* *
* CPU_ADV_POWER_MGT_INFO: * CPUID_ADV_POWER_MGT_INFO:
* Advaned power management information. * Advaned power management information.
* *
* CPU_VIRT_PHYS_ADDR_SIZES: * CPUID_VIRT_PHYS_ADDR_SIZES:
* Virtual and physical address sizes. * Virtual and physical address sizes.
*/ */
typedef enum cpuid { typedef enum cpuid {
CPU_VENDORID = 0, CPUID_VENDORID = 0,
CPU_PROCINFO_AND_FEATUREBITS = 1, CPUID_PROCINFO_AND_FEATUREBITS = 1,
CPU_CACHE_AND_TLBD_INFO = 2, CPUID_CACHE_AND_TLBD_INFO = 2,
CPU_HIGHEST_EXTENDED_FUNCTION_SUPPORTED = 0x80000000, CPUID_HIGHEST_EXTENDED_FUNCTION_SUPPORTED = 0x80000000,
CPU_EXTENDED_PROC_INFO_FEATURE_BITS = 0x80000001, CPUID_EXTENDED_PROC_INFO_FEATURE_BITS = 0x80000001,
CPU_PROC_BRAND_STRING = 0x80000002, CPUID_PROC_BRAND_STRING = 0x80000002,
CPU_L1_CACHE_AND_TLB_IDS = 0x80000005, CPUID_L1_CACHE_AND_TLB_IDS = 0x80000005,
CPU_EXTENDED_L2_CACHE_FEATURES = 0x80000006, CPUID_EXTENDED_L2_CACHE_FEATURES = 0x80000006,
CPU_ADV_POWER_MGT_INFO = 0x80000007, CPUID_ADV_POWER_MGT_INFO = 0x80000007,
CPU_VIRT_PHYS_ADDR_SIZES = 0x80000008 CPUID_VIRT_PHYS_ADDR_SIZES = 0x80000008
} cpuid_t; } cpuid_t;
enum { enum {
...@@ -193,7 +193,7 @@ bool cpuid_is_supported(void); ...@@ -193,7 +193,7 @@ bool cpuid_is_supported(void);
* Returns the highest extended function supported. * Returns the highest extended function supported.
* *
* This is the same as calling: * This is the same as calling:
* cpuid(CPU_HIGHEST_EEXTENDED_FUNCTION_SUPPORTED, &highest); * cpuid(CPUID_HIGHEST_EEXTENDED_FUNCTION_SUPPORTED, &highest);
* *
* This is made visible to the linker because it's easier to call it * This is made visible to the linker because it's easier to call it
* instead of calling cpuid with less type-checking. cpuid calls this. * instead of calling cpuid with less type-checking. cpuid calls this.
...@@ -208,10 +208,10 @@ uint32_t cpuid_highest_ext_func_supported(void); ...@@ -208,10 +208,10 @@ uint32_t cpuid_highest_ext_func_supported(void);
* This function expects buf to be a valid pointer to a string/int/... * This function expects buf to be a valid pointer to a string/int/...
* depending on the requested information. * depending on the requested information.
* *
* For CPU_VENDOR_ID: * For CPUID_VENDOR_ID:
* Returns a string into buf. * Returns a string into buf.
* *
* For CPU_PROCINFO_AND_FEATUREBITS: * For CPUID_PROCINFO_AND_FEATUREBITS:
* buf[0]: Stepping * buf[0]: Stepping
* buf[1]: Model * buf[1]: Model
* buf[2]: Family * buf[2]: Family
...@@ -224,7 +224,7 @@ uint32_t cpuid_highest_ext_func_supported(void); ...@@ -224,7 +224,7 @@ uint32_t cpuid_highest_ext_func_supported(void);
* buf[9]: Logical Processors * buf[9]: Logical Processors
* buf[10]: Initial APICID * buf[10]: Initial APICID
* *
* For CPU_L1_CACHE_AND_TLB_IDS: * For CPUID_L1_CACHE_AND_TLB_IDS:
* buf[0]: (eax): * buf[0]: (eax):
* - 7..0 Number of times to exec cpuid to get all descriptors. * - 7..0 Number of times to exec cpuid to get all descriptors.
* - 15..8 Instruction TLB: 4K Pages, 4-way set associtive, 128 entries. * - 15..8 Instruction TLB: 4K Pages, 4-way set associtive, 128 entries.
...@@ -241,22 +241,22 @@ uint32_t cpuid_highest_ext_func_supported(void); ...@@ -241,22 +241,22 @@ uint32_t cpuid_highest_ext_func_supported(void);
* - 16..23 Data TLB: 4M Pages, 4-way set associtive, 8 entires. * - 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 * - 24..31 1st-level data cache: 32K, 8-way set associtive, 64 byte line size
* *
* For CPU_HIGHEST_EXTENDED_FUNCTION_SUPPORTED: * For CPUID_HIGHEST_EXTENDED_FUNCTION_SUPPORTED:
* Returns the highest supported function in *buf (expects an integer ofc) * Returns the highest supported function in *buf (expects an integer ofc)
* *
* For CPU_EXTENDED_PROC_INFO_FEATURE_BITS: * For CPUID_EXTENDED_PROC_INFO_FEATURE_BITS:
* Returns them in buf[0] and buf[1]. * Returns them in buf[0] and buf[1].
* *
* For CPU_EXTENDED_L2_CACHE_FEATURES: * For CPUID_EXTENDED_L2_CACHE_FEATURES:
* buf[0]: Line size * buf[0]: Line size
* buf[1]: Associativity * buf[1]: Associativity
* buf[2]: Cache size. * buf[2]: Cache size.
* *
* For CPU_VIRT_PHYS_ADDR_SIZES: * For CPUID_VIRT_PHYS_ADDR_SIZES:
* buf[0]: Physical * buf[0]: Physical
* buf[1]: Virtual * buf[1]: Virtual
* *
* For CPU_PROC_BRAND_STRING: * For CPUID_PROC_BRAND_STRING:
* Have a char array with at least 48 bytes assigned to it. * 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. * Here's a page which will help you parse the data provided by this function.
...@@ -271,8 +271,8 @@ void cpuid(cpuid_t info, uint32_t *buf); ...@@ -271,8 +271,8 @@ void cpuid(cpuid_t info, uint32_t *buf);
* *
* Returns true if feature is supported, false otherwise. * Returns true if feature is supported, false otherwise.
* *
* The feature parameter must be >= CPU_EXTENDED_PROC_INFO_FEATURE_BITS * The feature parameter must be >= CPUID_EXTENDED_PROC_INFO_FEATURE_BITS
* and <= CPU_VIRT_PHYS_ADDR_SIZES. * and <= CPUID_VIRT_PHYS_ADDR_SIZES.
*/ */
bool cpuid_test_feature(cpuid_t feature); bool cpuid_test_feature(cpuid_t feature);
......
...@@ -15,11 +15,11 @@ int main(void) ...@@ -15,11 +15,11 @@ int main(void)
printf ("Vendor ID: %s\n", cputype); printf ("Vendor ID: %s\n", cputype);
char buf[48]; char buf[48];
cpuid(CPU_PROC_BRAND_STRING, (uint32_t *)buf); cpuid(CPUID_PROC_BRAND_STRING, (uint32_t *)buf);
printf ("Processor Brand: %s\n", buf); printf ("Processor Brand: %s\n", buf);
uint32_t procinfo[11]; uint32_t procinfo[11];
cpuid(CPU_PROCINFO_AND_FEATUREBITS, procinfo); cpuid(CPUID_PROCINFO_AND_FEATUREBITS, procinfo);
printf("Stepping: %d Model: 0x%X Family: %d extended model: %d extended family: %d\n", 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]); 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", printf("Brand Index: %d CL Flush Line Size: %d Logical Processors: %d Initial APICID: %d\n",
...@@ -28,15 +28,15 @@ int main(void) ...@@ -28,15 +28,15 @@ int main(void)
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];
cpuid(CPU_VIRT_PHYS_ADDR_SIZES, phys_virt); cpuid(CPUID_VIRT_PHYS_ADDR_SIZES, phys_virt);
printf ("Physical address size: %d\nVirtual address size: %d\n", phys_virt[0], phys_virt[1]); printf ("Physical address size: %d\nVirtual address size: %d\n", phys_virt[0], phys_virt[1]);
uint32_t extfeatures[2]; uint32_t extfeatures[2];
cpuid(CPU_EXTENDED_PROC_INFO_FEATURE_BITS, extfeatures); cpuid(CPUID_EXTENDED_PROC_INFO_FEATURE_BITS, extfeatures);
printf ("Extended processor info and feature bits: %d %d\n", extfeatures[0], extfeatures[1]); printf ("Extended processor info and feature bits: %d %d\n", extfeatures[0], extfeatures[1]);
uint32_t l2c[3]; uint32_t l2c[3];
cpuid(CPU_EXTENDED_L2_CACHE_FEATURES, l2c); cpuid(CPUID_EXTENDED_L2_CACHE_FEATURES, l2c);
printf("L2 Line size: %u bytes\tAssociativity: %02xh\tCache Size: %u KB\n", printf("L2 Line size: %u bytes\tAssociativity: %02xh\tCache Size: %u KB\n",
l2c[0], l2c[1], l2c[2]); l2c[0], l2c[1], l2c[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