rev |
line source |
pascal@24043
|
1 --- memtest86+-5.01/cpuid.c
|
pascal@24043
|
2 +++ memtest86+-5.01/cpuid.c
|
pascal@24043
|
3 @@ -14,6 +14,15 @@
|
pascal@24043
|
4 unsigned int *v, dummy[3];
|
pascal@24043
|
5 char *p, *q;
|
pascal@24043
|
6
|
pascal@24043
|
7 + switch (has_cpuid(AC_BIT|CPUID_BIT)) {
|
pascal@24043
|
8 + case 0:
|
pascal@24043
|
9 + cpu_id.vers.bits.family = 3;
|
pascal@24043
|
10 + return;
|
pascal@24043
|
11 + case AC_BIT:
|
pascal@24043
|
12 + cpu_id.vers.bits.family = 4;
|
pascal@24043
|
13 + return;
|
pascal@24043
|
14 + }
|
pascal@24043
|
15 +
|
pascal@24043
|
16 /* Get max std cpuid & vendor ID */
|
pascal@24043
|
17 cpuid(0x0, &cpu_id.max_cpuid, &cpu_id.vend_id.uint32_array[0],
|
pascal@24043
|
18 &cpu_id.vend_id.uint32_array[2], &cpu_id.vend_id.uint32_array[1]);
|
pascal@24043
|
19 --- memtest86+-5.01/cpuid.h
|
pascal@24043
|
20 +++ memtest86+-5.01/cpuid.h
|
pascal@24043
|
21 @@ -11,6 +11,26 @@
|
pascal@24043
|
22
|
pascal@24043
|
23 extern struct cpu_ident cpu_id;
|
pascal@24043
|
24
|
pascal@24043
|
25 +#define AC_BIT (1<<18)
|
pascal@24043
|
26 +#define CPUID_BIT (1<<21)
|
pascal@24043
|
27 +static inline int has_cpuid(int bits)
|
pascal@24043
|
28 +{
|
pascal@24043
|
29 + int eax, edx;
|
pascal@24043
|
30 + asm __volatile__(
|
pascal@24043
|
31 + "pushfl\n\t"
|
pascal@24043
|
32 + "popl %0\n\t"
|
pascal@24043
|
33 + "movl %0,%1\n\t"
|
pascal@24043
|
34 + "xorl %2,%0\n\t"
|
pascal@24043
|
35 + "pushl %0\n\t"
|
pascal@24043
|
36 + "popfl\n\t"
|
pascal@24043
|
37 + "pushfl\n\t"
|
pascal@24043
|
38 + "popl %0\n\t"
|
pascal@24043
|
39 + "pushl %1\n\t"
|
pascal@24043
|
40 + "popfl\n\t"
|
pascal@24043
|
41 + "xorl %1,%0":"=a" (eax),"=d" (edx):"c" (bits));
|
pascal@24043
|
42 + return eax;
|
pascal@24043
|
43 +}
|
pascal@24043
|
44 +
|
pascal@24043
|
45 static inline void __cpuid(unsigned int *eax, unsigned int *ebx,
|
pascal@24043
|
46 unsigned int *ecx, unsigned int *edx)
|
pascal@24043
|
47 {
|
pascal@24043
|
48 --- memtest86+-5.01/init.c
|
pascal@24043
|
49 +++ memtest86+-5.01/init.c
|
pascal@24043
|
50 @@ -77,6 +77,7 @@
|
pascal@24043
|
51 cprint(19, 15, "==> Press F2 to force Multi-Threading (SMP) <==");
|
pascal@24043
|
52 }
|
pascal@24043
|
53
|
pascal@24043
|
54 + if (cpu_id.fid.bits.rdtsc) {
|
pascal@24043
|
55 /* save the starting time */
|
pascal@24043
|
56 asm __volatile__(
|
pascal@24043
|
57 "rdtsc":"=a" (sl),"=d" (sh));
|
pascal@24043
|
58 @@ -122,6 +123,7 @@
|
pascal@24043
|
59 }
|
pascal@24043
|
60
|
pascal@24043
|
61 }
|
pascal@24043
|
62 + }
|
pascal@24043
|
63
|
pascal@24043
|
64 cprint(18, 18, " ");
|
pascal@24043
|
65 cprint(19, 15, " ");
|
pascal@24043
|
66 @@ -321,7 +323,9 @@
|
pascal@24043
|
67 beep(1000);
|
pascal@24043
|
68
|
pascal@24043
|
69 /* Record the start time */
|
pascal@24043
|
70 + if (cpu_id.fid.bits.rdtsc) {
|
pascal@24043
|
71 asm __volatile__ ("rdtsc":"=a" (v->startl),"=d" (v->starth));
|
pascal@24043
|
72 + }
|
pascal@24043
|
73 v->snapl = v->startl;
|
pascal@24043
|
74 v->snaph = v->starth;
|
pascal@24043
|
75 if (l1_cache == 0) { l1_cache = 64; }
|
pascal@24043
|
76 @@ -998,10 +1002,18 @@
|
pascal@24043
|
77 default:
|
pascal@24043
|
78 /* Make a guess at the family */
|
pascal@24043
|
79 switch(cpu_id.vers.bits.family) {
|
pascal@24043
|
80 + case 3:
|
pascal@24043
|
81 + cprint(0, COL_MID, "386");
|
pascal@24043
|
82 + break;
|
pascal@24043
|
83 + case 4:
|
pascal@24043
|
84 + cprint(0, COL_MID, "486");
|
pascal@24043
|
85 + break;
|
pascal@24043
|
86 case 5:
|
pascal@24043
|
87 cprint(0, COL_MID, "586");
|
pascal@24043
|
88 + break;
|
pascal@24043
|
89 case 6:
|
pascal@24043
|
90 cprint(0, COL_MID, "686");
|
pascal@24043
|
91 + break;
|
pascal@24043
|
92 default:
|
pascal@24043
|
93 cprint(0, COL_MID, "Unidentified Processor");
|
pascal@24043
|
94 }
|
pascal@24043
|
95 --- memtest86+-5.01/test.c
|
pascal@24043
|
96 +++ memtest86+-5.01/test.c
|
pascal@24043
|
97 @@ -1501,6 +1501,8 @@
|
pascal@24043
|
98 {
|
pascal@24043
|
99 ulong sh, sl, l, h, t, ip=0;
|
pascal@24043
|
100
|
pascal@24043
|
101 + if (cpu_id.fid.bits.rdtsc == 0) return;
|
pascal@24043
|
102 +
|
pascal@24043
|
103 /* save the starting time */
|
pascal@24043
|
104 asm __volatile__(
|
pascal@24043
|
105 "rdtsc":"=a" (sl),"=d" (sh));
|