1
0
Fork 0
mirror of https://github.com/anrieff/libcpuid synced 2024-11-20 23:01:51 +00:00

Support for Nehalem Xeons added

git-svn-id: https://svn.code.sf.net/p/libcpuid/code/HEAD/libcpuid@60 3b4be424-7ac5-41d7-8526-f4ddcb85d872
This commit is contained in:
Veselin Georgiev 2009-08-26 03:57:14 +00:00
parent 8f1f12828d
commit 103bb027c6
5 changed files with 159 additions and 11 deletions

View file

@ -0,0 +1,4 @@
Version 0.1.0:
* Initial public release
Version 0.1.1:
* Support for Intel Nehalem architecture CPUs (Core i7, Xeon i7)

View file

@ -131,3 +131,39 @@ void generic_get_cpu_list(const struct match_entry_t* matchtable, int count,
}
list->num_entries = n;
}
static int xmatch_entry(char c, const char* p)
{
int i, j;
if (c == 0) return -1;
if (c == p[0]) return 1;
if (p[0] == '.') return 1;
if (p[0] == '#' && isdigit(c)) return 1;
if (p[0] == '[') {
j = 1;
while (p[j] && p[j] != ']') j++;
if (!p[j]) return -1;
for (i = 1; i < j; i++)
if (p[i] == c) return j + 1;
}
return -1;
}
int match_pattern(const char* s, const char* p)
{
int i, j, dj, k, n, m;
n = (int) strlen(s);
m = (int) strlen(p);
for (i = 0; i < n; i++) {
if (xmatch_entry(s[i], p)) {
j = 0;
k = 0;
while (j < m && ((dj = xmatch_entry(s[i + k], p + j)) != -1)) {
k++;
j += dj;
}
if (j == m) return i + 1;
}
}
return 0;
}

View file

@ -58,6 +58,18 @@ __attribute__((format(printf, 2, 3)))
void generic_get_cpu_list(const struct match_entry_t* matchtable, int count,
struct cpu_list_t* list);
/*
* Seek for a pattern in `haystack'.
* Pattern may be an fixed string, or contain the special metacharacters
* '.' - match any single character
* '#' - match any digit
* '[<chars>] - match any of the given chars (regex-like ranges are not
* supported)
* Return val: 0 if the pattern is not found. Nonzero if it is found (actually,
* x + 1 where x is the index where the match is found).
*/
int match_pattern(const char* haystack, const char* pattern);
extern libcpuid_warn_fn_t _warn_fun;
extern int _current_verboselevel;

View file

@ -39,6 +39,7 @@ enum _intel_code_t {
XEON_IRWIN,
XEONMP,
XEON_POTOMAC,
XEON_I7,
MOBILE_PENTIUM_M,
CELERON,
MOBILE_CELERON,
@ -239,6 +240,8 @@ const struct match_entry_t cpudb_intel[] = {
{ 6, 10, -1, -1, 26, 1, -1, CORE_Ix , 0, "Intel Core i7" },
{ 6, 10, -1, -1, 26, 4, -1, CORE_Ix , 0, "Bloomfield (Core i7)" },
{ 6, 10, -1, -1, 26, 4, -1, XEON_I7 , 0, "Xeon (Bloomfield)" },
/* Core microarchitecture-based Xeons: */
{ 6, 14, -1, -1, 14, 1, -1, XEON , 0, "Xeon LV" },
@ -521,7 +524,7 @@ static intel_code_t get_brand_code(struct cpu_id_t* data)
intel_code_t code = NO_CODE;
int i, need_matchtable = 1;
const char* bs = data->brand_str;
const char* s, *ixs;
const char* s;
const struct { intel_code_t c; const char *search; } matchtable[] = {
{ XEONMP, "Xeon MP" },
{ XEONMP, "Xeon(TM) MP" },
@ -546,14 +549,11 @@ static intel_code_t get_brand_code(struct cpu_id_t* data)
else if (strstr(bs, "Pentium"))
code = MOBILE_PENTIUM;
}
ixs = strstr(bs, "Core(TM) i");
if (ixs) {
if (ixs[10] == '3' || ixs[10] == '5' || ixs[10] == '7') {
if (match_pattern(bs, "Core(TM) i[357]")) {
/* Core i3, Core i5 or Core i7 */
need_matchtable = 0;
code = CORE_Ix;
}
}
if (need_matchtable) {
for (i = 0; i < COUNT_OF(matchtable); i++)
if (strstr(bs, matchtable[i].search)) {
@ -561,9 +561,12 @@ static intel_code_t get_brand_code(struct cpu_id_t* data)
break;
}
}
if (code == XEON && data->l3_cache > 0)
if (code == XEON) {
if (match_pattern(bs, "W####"))
code = XEON_I7;
else if (data->l3_cache > 0)
code = XEON_IRWIN;
}
if (code == XEONMP && data->l3_cache > 0)
code = XEON_POTOMAC;
if (code == CORE_SOLO) {

View file

@ -3028,3 +3028,96 @@ intel_fn11[3]=00000000 00000000 00000003 00000003
Bloomfield (Core i7)
fpu vme de pse tsc msr pae mce cx8 apic mtrr sep pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe pni dts64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 xd popcnt lm lahf_lm
--------------------------------------------------------------------------------
basic_cpuid[0]=0000000b 756e6547 6c65746e 49656e69
basic_cpuid[1]=000106a5 00100800 009ce3bd bfebfbff
basic_cpuid[2]=55035a01 00f0b2e4 00000000 09ca212c
basic_cpuid[3]=00000000 00000000 00000000 00000000
basic_cpuid[4]=1c004121 01c0003f 0000003f 00000000
basic_cpuid[5]=00000040 00000040 00000003 00001120
basic_cpuid[6]=00000001 00000002 00000001 00000000
basic_cpuid[7]=00000000 00000000 00000000 00000000
basic_cpuid[8]=00000000 00000000 00000000 00000000
basic_cpuid[9]=00000000 00000000 00000000 00000000
basic_cpuid[10]=07300403 00000044 00000000 00000603
basic_cpuid[11]=00000001 00000002 00000100 00000000
basic_cpuid[12]=00000001 00000002 00000100 00000000
basic_cpuid[13]=00000001 00000002 00000100 00000000
basic_cpuid[14]=00000001 00000002 00000100 00000000
basic_cpuid[15]=00000001 00000002 00000100 00000000
basic_cpuid[16]=00000001 00000002 00000100 00000000
basic_cpuid[17]=00000001 00000002 00000100 00000000
basic_cpuid[18]=00000001 00000002 00000100 00000000
basic_cpuid[19]=00000001 00000002 00000100 00000000
basic_cpuid[20]=00000001 00000002 00000100 00000000
basic_cpuid[21]=00000001 00000002 00000100 00000000
basic_cpuid[22]=00000001 00000002 00000100 00000000
basic_cpuid[23]=00000001 00000002 00000100 00000000
basic_cpuid[24]=00000001 00000002 00000100 00000000
basic_cpuid[25]=00000001 00000002 00000100 00000000
basic_cpuid[26]=00000001 00000002 00000100 00000000
basic_cpuid[27]=00000001 00000002 00000100 00000000
basic_cpuid[28]=00000001 00000002 00000100 00000000
basic_cpuid[29]=00000001 00000002 00000100 00000000
basic_cpuid[30]=00000001 00000002 00000100 00000000
basic_cpuid[31]=00000001 00000002 00000100 00000000
ext_cpuid[0]=80000008 00000000 00000000 00000000
ext_cpuid[1]=00000000 00000000 00000001 28100000
ext_cpuid[2]=65746e49 2952286c 6f655820 2952286e
ext_cpuid[3]=55504320 20202020 20202020 57202020
ext_cpuid[4]=30323533 20402020 37362e32 007a4847
ext_cpuid[5]=00000000 00000000 00000000 00000000
ext_cpuid[6]=00000000 00000000 01006040 00000000
ext_cpuid[7]=00000000 00000000 00000000 00000100
ext_cpuid[8]=00003024 00000000 00000000 00000000
ext_cpuid[9]=00000001 00000002 00000100 00000000
ext_cpuid[10]=00000001 00000002 00000100 00000000
ext_cpuid[11]=00000001 00000002 00000100 00000000
ext_cpuid[12]=00000001 00000002 00000100 00000000
ext_cpuid[13]=00000001 00000002 00000100 00000000
ext_cpuid[14]=00000001 00000002 00000100 00000000
ext_cpuid[15]=00000001 00000002 00000100 00000000
ext_cpuid[16]=00000001 00000002 00000100 00000000
ext_cpuid[17]=00000001 00000002 00000100 00000000
ext_cpuid[18]=00000001 00000002 00000100 00000000
ext_cpuid[19]=00000001 00000002 00000100 00000000
ext_cpuid[20]=00000001 00000002 00000100 00000000
ext_cpuid[21]=00000001 00000002 00000100 00000000
ext_cpuid[22]=00000001 00000002 00000100 00000000
ext_cpuid[23]=00000001 00000002 00000100 00000000
ext_cpuid[24]=00000001 00000002 00000100 00000000
ext_cpuid[25]=00000001 00000002 00000100 00000000
ext_cpuid[26]=00000001 00000002 00000100 00000000
ext_cpuid[27]=00000001 00000002 00000100 00000000
ext_cpuid[28]=00000001 00000002 00000100 00000000
ext_cpuid[29]=00000001 00000002 00000100 00000000
ext_cpuid[30]=00000001 00000002 00000100 00000000
ext_cpuid[31]=00000001 00000002 00000100 00000000
intel_fn4[0]=1c004121 01c0003f 0000003f 00000000
intel_fn4[1]=1c004122 00c0003f 0000007f 00000000
intel_fn4[2]=1c004143 01c0003f 000001ff 00000000
intel_fn4[3]=1c03c163 03c0003f 00001fff 00000002
intel_fn11[0]=00000001 00000002 00000100 00000000
intel_fn11[1]=00000004 00000008 00000201 00000000
intel_fn11[2]=00000000 00000000 00000002 00000000
intel_fn11[3]=00000000 00000000 00000003 00000000
--------------------------------------------------------------------------------
6
10
5
6
26
4
8
32
32
256
8192
8
8
16
64
64
64
Xeon (Bloomfield)
fpu vme de pse tsc msr pae mce cx8 apic mtrr sep pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe pni dts64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 xd popcnt lm lahf_lm
--------------------------------------------------------------------------------