summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authordg <dg@FreeBSD.org>1995-12-24 08:10:52 +0000
committerdg <dg@FreeBSD.org>1995-12-24 08:10:52 +0000
commit86c06a33bbd0e32af5fe2e3e99d092f5cf3b66cb (patch)
tree6e21222a077a727e2169f1241364da74f0b74c3e /sys
parent57c9be3bacec37313a865b8605f8cebe630e0905 (diff)
downloadFreeBSD-src-86c06a33bbd0e32af5fe2e3e99d092f5cf3b66cb.zip
FreeBSD-src-86c06a33bbd0e32af5fe2e3e99d092f5cf3b66cb.tar.gz
Add Pentium Pro CPU detection and special handling. For now, all the
optimizations we have for 586s also apply to 686s...this will be fine- tuned in the future as appropriate.
Diffstat (limited to 'sys')
-rw-r--r--sys/amd64/amd64/locore.S17
-rw-r--r--sys/amd64/amd64/locore.s17
-rw-r--r--sys/amd64/amd64/machdep.c53
-rw-r--r--sys/amd64/amd64/support.S16
-rw-r--r--sys/amd64/amd64/support.s16
-rw-r--r--sys/amd64/amd64/tsc.c8
-rw-r--r--sys/amd64/include/clock.h10
-rw-r--r--sys/amd64/include/cputypes.h4
-rw-r--r--sys/amd64/isa/clock.c8
-rw-r--r--sys/i386/i386/locore.s17
-rw-r--r--sys/i386/i386/machdep.c53
-rw-r--r--sys/i386/i386/microtime.s6
-rw-r--r--sys/i386/i386/support.s16
-rw-r--r--sys/i386/i386/tsc.c8
-rw-r--r--sys/i386/include/clock.h10
-rw-r--r--sys/i386/include/cputypes.h4
-rw-r--r--sys/i386/isa/clock.c8
-rw-r--r--sys/isa/atrtc.c8
18 files changed, 159 insertions, 120 deletions
diff --git a/sys/amd64/amd64/locore.S b/sys/amd64/amd64/locore.S
index baf1b4c..fc37327 100644
--- a/sys/amd64/amd64/locore.S
+++ b/sys/amd64/amd64/locore.S
@@ -34,7 +34,7 @@
* SUCH DAMAGE.
*
* from: @(#)locore.s 7.3 (Berkeley) 5/13/91
- * $Id: locore.s,v 1.55 1995/09/15 02:13:18 davidg Exp $
+ * $Id: locore.s,v 1.56 1995/09/16 21:31:55 pst Exp $
*/
/*
@@ -450,10 +450,17 @@ got_common_bi_size:
/* less than Pentium; must be 486 */
movl $CPU_486,_cpu-KERNBASE
- jmp 2f
-
-1: movl $CPU_586,_cpu-KERNBASE
+ jmp 3f
+1:
+ /* a Pentium? */
+ cmpl $5,%eax
+ jne 2f
+ movl $CPU_586,_cpu-KERNBASE
+ jmp 3f
2:
+ /* Greater than Pentium...call it a Pentium Pro */
+ movl $CPU_686,_cpu-KERNBASE
+3:
/*
* Finished with old stack; load new %esp now instead of later so
@@ -760,7 +767,7 @@ reloc_gdt:
* enable write protection and alignment checking on i486 cpus and
* above.
*/
-#if defined(I486_CPU) || defined(I586_CPU)
+#if defined(I486_CPU) || defined(I586_CPU) || defined(I686_CPU)
cmpl $CPUCLASS_386,_cpu_class
je 1f
movl %cr0,%eax /* get control word */
diff --git a/sys/amd64/amd64/locore.s b/sys/amd64/amd64/locore.s
index baf1b4c..fc37327 100644
--- a/sys/amd64/amd64/locore.s
+++ b/sys/amd64/amd64/locore.s
@@ -34,7 +34,7 @@
* SUCH DAMAGE.
*
* from: @(#)locore.s 7.3 (Berkeley) 5/13/91
- * $Id: locore.s,v 1.55 1995/09/15 02:13:18 davidg Exp $
+ * $Id: locore.s,v 1.56 1995/09/16 21:31:55 pst Exp $
*/
/*
@@ -450,10 +450,17 @@ got_common_bi_size:
/* less than Pentium; must be 486 */
movl $CPU_486,_cpu-KERNBASE
- jmp 2f
-
-1: movl $CPU_586,_cpu-KERNBASE
+ jmp 3f
+1:
+ /* a Pentium? */
+ cmpl $5,%eax
+ jne 2f
+ movl $CPU_586,_cpu-KERNBASE
+ jmp 3f
2:
+ /* Greater than Pentium...call it a Pentium Pro */
+ movl $CPU_686,_cpu-KERNBASE
+3:
/*
* Finished with old stack; load new %esp now instead of later so
@@ -760,7 +767,7 @@ reloc_gdt:
* enable write protection and alignment checking on i486 cpus and
* above.
*/
-#if defined(I486_CPU) || defined(I586_CPU)
+#if defined(I486_CPU) || defined(I586_CPU) || defined(I686_CPU)
cmpl $CPUCLASS_386,_cpu_class
je 1f
movl %cr0,%eax /* get control word */
diff --git a/sys/amd64/amd64/machdep.c b/sys/amd64/amd64/machdep.c
index f703c5f..0a1b14d 100644
--- a/sys/amd64/amd64/machdep.c
+++ b/sys/amd64/amd64/machdep.c
@@ -35,7 +35,7 @@
* SUCH DAMAGE.
*
* from: @(#)machdep.c 7.4 (Berkeley) 6/3/91
- * $Id: machdep.c,v 1.161 1995/12/19 14:30:26 davidg Exp $
+ * $Id: machdep.c,v 1.162 1995/12/22 18:17:34 bde Exp $
*/
#include "npx.h"
@@ -479,6 +479,7 @@ static struct cpu_nameclass i386_cpus[] = {
{ "i486DX", CPUCLASS_486 }, /* CPU_486 */
{ "Pentium", CPUCLASS_586 }, /* CPU_586 */
{ "Cy486DLC", CPUCLASS_486 }, /* CPU_486DLC */
+ { "Pentium Pro", CPUCLASS_686 }, /* CPU_686 */
};
static void
@@ -494,12 +495,12 @@ identifycpu()
panic("startup: bad cpu id");
}
-#if defined(I586_CPU)
- if(cpu_class == CPUCLASS_586) {
+#if defined(I586_CPU) || defined(I686_CPU)
+ if (cpu_class == CPUCLASS_586 || cpu_class == CPUCLASS_686) {
calibrate_cyclecounter();
}
#endif
-#if defined(I486_CPU) || defined(I586_CPU)
+#if defined(I486_CPU) || defined(I586_CPU) || defined(I686_CPU)
if (!strcmp(cpu_vendor,"GenuineIntel")) {
if ((cpu_id & 0xf00) > 3) {
cpu_model[0] = '\0';
@@ -512,14 +513,20 @@ identifycpu()
strcpy(cpu_model, "Dual ");
break;
}
- if ((cpu_id & 0xf00) == 0x400) {
+
+ switch (cpu_id & 0xf00) {
+ case 0x400:
strcat(cpu_model, "i486 ");
-#if defined(I586_CPU)
- } else if ((cpu_id & 0xf00) == 0x500) {
+ break;
+ case 0x500:
strcat(cpu_model, "Pentium"); /* nb no space */
-#endif
- } else {
- strcat(cpu_model, "unknown ");
+ break;
+ case 0x600:
+ strcat(cpu_model, "Pentium Pro");
+ break;
+ default:
+ strcat(cpu_model, "unknown");
+ break;
}
switch (cpu_id & 0xff0) {
@@ -540,18 +547,7 @@ identifycpu()
break;
case 0x480:
strcat(cpu_model, "DX4"); break;
-#if defined(I586_CPU)
- case 0x510:
- case 0x520:
- /*
- * We used to do all sorts of nonsense here
- * to print out iCOMP numbers. Since these
- * are meaningless except to Intel
- * marketroids, there seems to be little
- * sense in doing so.
- */
break;
-#endif
}
}
}
@@ -579,11 +575,19 @@ identifycpu()
printf("586");
break;
#endif
+#if defined(I686_CPU)
+ case CPUCLASS_686:
+ printf("%d.%02d-MHz ",
+ ((100 * i586_ctr_rate) >> I586_CTR_RATE_SHIFT) / 100,
+ ((100 * i586_ctr_rate) >> I586_CTR_RATE_SHIFT) % 100);
+ printf("686");
+ break;
+#endif
default:
printf("unknown"); /* will panic below... */
}
printf("-class CPU)\n");
-#if defined(I486_CPU) || defined(I586_CPU)
+#if defined(I486_CPU) || defined(I586_CPU) || defined(I686_CPU)
if(*cpu_vendor)
printf(" Origin = \"%s\"",cpu_vendor);
if(cpu_id)
@@ -606,7 +610,7 @@ identifycpu()
*/
switch (cpu_class) {
case CPUCLASS_286: /* a 286 should not make it this far, anyway */
-#if !defined(I386_CPU) && !defined(I486_CPU) && !defined(I586_CPU)
+#if !defined(I386_CPU) && !defined(I486_CPU) && !defined(I586_CPU) && !defined(I686_CPU)
#error This kernel is not configured for one of the supported CPUs
#endif
#if !defined(I386_CPU)
@@ -618,6 +622,9 @@ identifycpu()
#if !defined(I586_CPU)
case CPUCLASS_586:
#endif
+#if !defined(I686_CPU)
+ case CPUCLASS_586:
+#endif
panic("CPU class not configured");
default:
break;
diff --git a/sys/amd64/amd64/support.S b/sys/amd64/amd64/support.S
index 901369e..3150bbf 100644
--- a/sys/amd64/amd64/support.S
+++ b/sys/amd64/amd64/support.S
@@ -30,7 +30,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: support.s,v 1.26 1995/12/10 03:11:32 bde Exp $
+ * $Id: support.s,v 1.27 1995/12/23 16:46:31 davidg Exp $
*/
#include "assym.s" /* system definitions */
@@ -355,7 +355,7 @@ ENTRY(copyout) /* copyout(from_kernel, to_user, len) */
#if defined(I386_CPU)
-#if defined(I486_CPU) || defined(I586_CPU)
+#if defined(I486_CPU) || defined(I586_CPU) || defined(I686_CPU)
cmpl $CPUCLASS_386,_cpu_class
jne 3f
#endif
@@ -546,10 +546,10 @@ ENTRY(suword)
#if defined(I386_CPU)
-#if defined(I486_CPU) || defined(I586_CPU)
+#if defined(I486_CPU) || defined(I586_CPU) || defined(I686_CPU)
cmpl $CPUCLASS_386,_cpu_class
jne 2f /* we only have to set the right segment selector */
-#endif /* I486_CPU || I586_CPU */
+#endif /* I486_CPU || I586_CPU || I686_CPU */
/* XXX - page boundary crossing is still not handled */
movl %edx,%eax
@@ -588,10 +588,10 @@ ENTRY(susword)
#if defined(I386_CPU)
-#if defined(I486_CPU) || defined(I586_CPU)
+#if defined(I486_CPU) || defined(I586_CPU) || defined(I686_CPU)
cmpl $CPUCLASS_386,_cpu_class
jne 2f
-#endif /* I486_CPU || I586_CPU */
+#endif /* I486_CPU || I586_CPU || I686_CPU */
/* XXX - page boundary crossing is still not handled */
movl %edx,%eax
@@ -631,10 +631,10 @@ ENTRY(subyte)
#if defined(I386_CPU)
-#if defined(I486_CPU) || defined(I586_CPU)
+#if defined(I486_CPU) || defined(I586_CPU) || defined(I686_CPU)
cmpl $CPUCLASS_386,_cpu_class
jne 2f
-#endif /* I486_CPU || I586_CPU */
+#endif /* I486_CPU || I586_CPU || I686_CPU */
movl %edx,%eax
shrl $IDXSHIFT,%edx
diff --git a/sys/amd64/amd64/support.s b/sys/amd64/amd64/support.s
index 901369e..3150bbf 100644
--- a/sys/amd64/amd64/support.s
+++ b/sys/amd64/amd64/support.s
@@ -30,7 +30,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: support.s,v 1.26 1995/12/10 03:11:32 bde Exp $
+ * $Id: support.s,v 1.27 1995/12/23 16:46:31 davidg Exp $
*/
#include "assym.s" /* system definitions */
@@ -355,7 +355,7 @@ ENTRY(copyout) /* copyout(from_kernel, to_user, len) */
#if defined(I386_CPU)
-#if defined(I486_CPU) || defined(I586_CPU)
+#if defined(I486_CPU) || defined(I586_CPU) || defined(I686_CPU)
cmpl $CPUCLASS_386,_cpu_class
jne 3f
#endif
@@ -546,10 +546,10 @@ ENTRY(suword)
#if defined(I386_CPU)
-#if defined(I486_CPU) || defined(I586_CPU)
+#if defined(I486_CPU) || defined(I586_CPU) || defined(I686_CPU)
cmpl $CPUCLASS_386,_cpu_class
jne 2f /* we only have to set the right segment selector */
-#endif /* I486_CPU || I586_CPU */
+#endif /* I486_CPU || I586_CPU || I686_CPU */
/* XXX - page boundary crossing is still not handled */
movl %edx,%eax
@@ -588,10 +588,10 @@ ENTRY(susword)
#if defined(I386_CPU)
-#if defined(I486_CPU) || defined(I586_CPU)
+#if defined(I486_CPU) || defined(I586_CPU) || defined(I686_CPU)
cmpl $CPUCLASS_386,_cpu_class
jne 2f
-#endif /* I486_CPU || I586_CPU */
+#endif /* I486_CPU || I586_CPU || I686_CPU */
/* XXX - page boundary crossing is still not handled */
movl %edx,%eax
@@ -631,10 +631,10 @@ ENTRY(subyte)
#if defined(I386_CPU)
-#if defined(I486_CPU) || defined(I586_CPU)
+#if defined(I486_CPU) || defined(I586_CPU) || defined(I686_CPU)
cmpl $CPUCLASS_386,_cpu_class
jne 2f
-#endif /* I486_CPU || I586_CPU */
+#endif /* I486_CPU || I586_CPU || I686_CPU */
movl %edx,%eax
shrl $IDXSHIFT,%edx
diff --git a/sys/amd64/amd64/tsc.c b/sys/amd64/amd64/tsc.c
index 65668d1..b7c6a2a 100644
--- a/sys/amd64/amd64/tsc.c
+++ b/sys/amd64/amd64/tsc.c
@@ -34,7 +34,7 @@
* SUCH DAMAGE.
*
* from: @(#)clock.c 7.2 (Berkeley) 5/12/91
- * $Id: clock.c,v 1.41 1995/12/14 23:01:51 bde Exp $
+ * $Id: clock.c,v 1.42 1995/12/20 20:57:33 wollman Exp $
*/
/*
@@ -93,7 +93,7 @@
int adjkerntz = 0; /* offset from CMOS clock */
int disable_rtc_set = 0; /* disable resettodr() if != 0 */
u_int idelayed;
-#ifdef I586_CPU
+#if defined(I586_CPU) || defined(I686_CPU)
unsigned i586_ctr_rate;
long long i586_ctr_bias;
long long i586_last_tick;
@@ -280,7 +280,7 @@ getit(void)
return ((high << 8) | low);
}
-#ifdef I586_CPU
+#if defined(I586_CPU) || defined(I686_CPU)
/*
* Figure out how fast the cyclecounter runs. This must be run with
* clock interrupts disabled, but with the timer/counter programmed
@@ -569,7 +569,7 @@ cpu_initclocks()
/* XXX */ (inthand2_t *)clkintr, &clk_imask,
/* unit */ 0);
INTREN(IRQ0);
-#ifdef I586_CPU
+#if defined(I586_CPU) || defined(I686_CPU)
/*
* Finish setting up anti-jitter measures.
*/
diff --git a/sys/amd64/include/clock.h b/sys/amd64/include/clock.h
index 542e628..1f63bfe 100644
--- a/sys/amd64/include/clock.h
+++ b/sys/amd64/include/clock.h
@@ -3,13 +3,13 @@
* Garrett Wollman, September 1994.
* This file is in the public domain.
*
- * $Id: clock.h,v 1.6 1995/11/29 19:57:16 wollman Exp $
+ * $Id: clock.h,v 1.7 1995/12/10 13:38:07 phk Exp $
*/
#ifndef _MACHINE_CLOCK_H_
#define _MACHINE_CLOCK_H_
-#ifdef I586_CPU
+#if defined(I586_CPU) || defined(I686_CPU)
#define I586_CYCLECTR(x) \
__asm __volatile(".byte 0x0f, 0x31" : "=A" (x))
@@ -54,7 +54,7 @@
*/
extern int adjkerntz;
extern int disable_rtc_set;
-#ifdef I586_CPU
+#if defined(I586_CPU) || defined(I686_CPU)
extern unsigned i586_ctr_rate; /* fixed point */
extern long long i586_last_tick;
extern long long i586_ctr_bias;
@@ -63,11 +63,11 @@ extern int timer0_max_count;
extern u_int timer0_overflow_threshold;
extern u_int timer0_prescaler_count;
-#ifdef I586_CPU
+#if defined(I586_CPU) || defined(I686_CPU)
void calibrate_cyclecounter __P((void));
#endif
-#ifdef I586_CPU
+#if defined(I586_CPU) || defined(I686_CPU)
static __inline u_long
cpu_thisticklen(u_long dflt)
{
diff --git a/sys/amd64/include/cputypes.h b/sys/amd64/include/cputypes.h
index 52d8e20..0c5667b 100644
--- a/sys/amd64/include/cputypes.h
+++ b/sys/amd64/include/cputypes.h
@@ -24,7 +24,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $Id: cputypes.h,v 1.2 1993/11/07 17:42:49 wollman Exp $
+ * $Id: cputypes.h,v 1.3 1994/09/04 19:59:23 pst Exp $
*/
#ifndef _MACHINE_CPUTYPES_H_
@@ -38,6 +38,7 @@
#define CPUCLASS_386 1
#define CPUCLASS_486 2
#define CPUCLASS_586 3
+#define CPUCLASS_686 4
/*
* Kinds of Processor
@@ -50,5 +51,6 @@
#define CPU_486 4 /* Intel 80486DX */
#define CPU_586 5 /* Intel P.....m (I hate lawyers; it's TM) */
#define CPU_486DLC 6 /* Cyrix 486DLC */
+#define CPU_686 7 /* Pentium Pro */
#endif /* _MACHINE_CPUTYPES_H_ */
diff --git a/sys/amd64/isa/clock.c b/sys/amd64/isa/clock.c
index 65668d1..b7c6a2a 100644
--- a/sys/amd64/isa/clock.c
+++ b/sys/amd64/isa/clock.c
@@ -34,7 +34,7 @@
* SUCH DAMAGE.
*
* from: @(#)clock.c 7.2 (Berkeley) 5/12/91
- * $Id: clock.c,v 1.41 1995/12/14 23:01:51 bde Exp $
+ * $Id: clock.c,v 1.42 1995/12/20 20:57:33 wollman Exp $
*/
/*
@@ -93,7 +93,7 @@
int adjkerntz = 0; /* offset from CMOS clock */
int disable_rtc_set = 0; /* disable resettodr() if != 0 */
u_int idelayed;
-#ifdef I586_CPU
+#if defined(I586_CPU) || defined(I686_CPU)
unsigned i586_ctr_rate;
long long i586_ctr_bias;
long long i586_last_tick;
@@ -280,7 +280,7 @@ getit(void)
return ((high << 8) | low);
}
-#ifdef I586_CPU
+#if defined(I586_CPU) || defined(I686_CPU)
/*
* Figure out how fast the cyclecounter runs. This must be run with
* clock interrupts disabled, but with the timer/counter programmed
@@ -569,7 +569,7 @@ cpu_initclocks()
/* XXX */ (inthand2_t *)clkintr, &clk_imask,
/* unit */ 0);
INTREN(IRQ0);
-#ifdef I586_CPU
+#if defined(I586_CPU) || defined(I686_CPU)
/*
* Finish setting up anti-jitter measures.
*/
diff --git a/sys/i386/i386/locore.s b/sys/i386/i386/locore.s
index baf1b4c..fc37327 100644
--- a/sys/i386/i386/locore.s
+++ b/sys/i386/i386/locore.s
@@ -34,7 +34,7 @@
* SUCH DAMAGE.
*
* from: @(#)locore.s 7.3 (Berkeley) 5/13/91
- * $Id: locore.s,v 1.55 1995/09/15 02:13:18 davidg Exp $
+ * $Id: locore.s,v 1.56 1995/09/16 21:31:55 pst Exp $
*/
/*
@@ -450,10 +450,17 @@ got_common_bi_size:
/* less than Pentium; must be 486 */
movl $CPU_486,_cpu-KERNBASE
- jmp 2f
-
-1: movl $CPU_586,_cpu-KERNBASE
+ jmp 3f
+1:
+ /* a Pentium? */
+ cmpl $5,%eax
+ jne 2f
+ movl $CPU_586,_cpu-KERNBASE
+ jmp 3f
2:
+ /* Greater than Pentium...call it a Pentium Pro */
+ movl $CPU_686,_cpu-KERNBASE
+3:
/*
* Finished with old stack; load new %esp now instead of later so
@@ -760,7 +767,7 @@ reloc_gdt:
* enable write protection and alignment checking on i486 cpus and
* above.
*/
-#if defined(I486_CPU) || defined(I586_CPU)
+#if defined(I486_CPU) || defined(I586_CPU) || defined(I686_CPU)
cmpl $CPUCLASS_386,_cpu_class
je 1f
movl %cr0,%eax /* get control word */
diff --git a/sys/i386/i386/machdep.c b/sys/i386/i386/machdep.c
index f703c5f..0a1b14d 100644
--- a/sys/i386/i386/machdep.c
+++ b/sys/i386/i386/machdep.c
@@ -35,7 +35,7 @@
* SUCH DAMAGE.
*
* from: @(#)machdep.c 7.4 (Berkeley) 6/3/91
- * $Id: machdep.c,v 1.161 1995/12/19 14:30:26 davidg Exp $
+ * $Id: machdep.c,v 1.162 1995/12/22 18:17:34 bde Exp $
*/
#include "npx.h"
@@ -479,6 +479,7 @@ static struct cpu_nameclass i386_cpus[] = {
{ "i486DX", CPUCLASS_486 }, /* CPU_486 */
{ "Pentium", CPUCLASS_586 }, /* CPU_586 */
{ "Cy486DLC", CPUCLASS_486 }, /* CPU_486DLC */
+ { "Pentium Pro", CPUCLASS_686 }, /* CPU_686 */
};
static void
@@ -494,12 +495,12 @@ identifycpu()
panic("startup: bad cpu id");
}
-#if defined(I586_CPU)
- if(cpu_class == CPUCLASS_586) {
+#if defined(I586_CPU) || defined(I686_CPU)
+ if (cpu_class == CPUCLASS_586 || cpu_class == CPUCLASS_686) {
calibrate_cyclecounter();
}
#endif
-#if defined(I486_CPU) || defined(I586_CPU)
+#if defined(I486_CPU) || defined(I586_CPU) || defined(I686_CPU)
if (!strcmp(cpu_vendor,"GenuineIntel")) {
if ((cpu_id & 0xf00) > 3) {
cpu_model[0] = '\0';
@@ -512,14 +513,20 @@ identifycpu()
strcpy(cpu_model, "Dual ");
break;
}
- if ((cpu_id & 0xf00) == 0x400) {
+
+ switch (cpu_id & 0xf00) {
+ case 0x400:
strcat(cpu_model, "i486 ");
-#if defined(I586_CPU)
- } else if ((cpu_id & 0xf00) == 0x500) {
+ break;
+ case 0x500:
strcat(cpu_model, "Pentium"); /* nb no space */
-#endif
- } else {
- strcat(cpu_model, "unknown ");
+ break;
+ case 0x600:
+ strcat(cpu_model, "Pentium Pro");
+ break;
+ default:
+ strcat(cpu_model, "unknown");
+ break;
}
switch (cpu_id & 0xff0) {
@@ -540,18 +547,7 @@ identifycpu()
break;
case 0x480:
strcat(cpu_model, "DX4"); break;
-#if defined(I586_CPU)
- case 0x510:
- case 0x520:
- /*
- * We used to do all sorts of nonsense here
- * to print out iCOMP numbers. Since these
- * are meaningless except to Intel
- * marketroids, there seems to be little
- * sense in doing so.
- */
break;
-#endif
}
}
}
@@ -579,11 +575,19 @@ identifycpu()
printf("586");
break;
#endif
+#if defined(I686_CPU)
+ case CPUCLASS_686:
+ printf("%d.%02d-MHz ",
+ ((100 * i586_ctr_rate) >> I586_CTR_RATE_SHIFT) / 100,
+ ((100 * i586_ctr_rate) >> I586_CTR_RATE_SHIFT) % 100);
+ printf("686");
+ break;
+#endif
default:
printf("unknown"); /* will panic below... */
}
printf("-class CPU)\n");
-#if defined(I486_CPU) || defined(I586_CPU)
+#if defined(I486_CPU) || defined(I586_CPU) || defined(I686_CPU)
if(*cpu_vendor)
printf(" Origin = \"%s\"",cpu_vendor);
if(cpu_id)
@@ -606,7 +610,7 @@ identifycpu()
*/
switch (cpu_class) {
case CPUCLASS_286: /* a 286 should not make it this far, anyway */
-#if !defined(I386_CPU) && !defined(I486_CPU) && !defined(I586_CPU)
+#if !defined(I386_CPU) && !defined(I486_CPU) && !defined(I586_CPU) && !defined(I686_CPU)
#error This kernel is not configured for one of the supported CPUs
#endif
#if !defined(I386_CPU)
@@ -618,6 +622,9 @@ identifycpu()
#if !defined(I586_CPU)
case CPUCLASS_586:
#endif
+#if !defined(I686_CPU)
+ case CPUCLASS_586:
+#endif
panic("CPU class not configured");
default:
break;
diff --git a/sys/i386/i386/microtime.s b/sys/i386/i386/microtime.s
index 44b7e97..ab644ad 100644
--- a/sys/i386/i386/microtime.s
+++ b/sys/i386/i386/microtime.s
@@ -32,7 +32,7 @@
* SUCH DAMAGE.
*
* from: Steve McCanne's microtime code
- * $Id: microtime.s,v 1.10 1995/10/14 04:53:49 bde Exp $
+ * $Id: microtime.s,v 1.11 1995/11/29 19:57:03 wollman Exp $
*/
#include <machine/asmacros.h>
@@ -44,7 +44,7 @@
ENTRY(microtime)
-#ifdef I586_CPU
+#if defined(I586_CPU) || defined(I686_CPU)
movl _i586_ctr_rate, %ecx
testl %ecx, %ecx
jne pentium_microtime
@@ -175,7 +175,7 @@ common_microtime:
ret
-#ifdef I586_CPU
+#if defined(I586_CPU) || defined(I686_CPU)
ALIGN_TEXT
pentium_microtime:
cli
diff --git a/sys/i386/i386/support.s b/sys/i386/i386/support.s
index 901369e..3150bbf 100644
--- a/sys/i386/i386/support.s
+++ b/sys/i386/i386/support.s
@@ -30,7 +30,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: support.s,v 1.26 1995/12/10 03:11:32 bde Exp $
+ * $Id: support.s,v 1.27 1995/12/23 16:46:31 davidg Exp $
*/
#include "assym.s" /* system definitions */
@@ -355,7 +355,7 @@ ENTRY(copyout) /* copyout(from_kernel, to_user, len) */
#if defined(I386_CPU)
-#if defined(I486_CPU) || defined(I586_CPU)
+#if defined(I486_CPU) || defined(I586_CPU) || defined(I686_CPU)
cmpl $CPUCLASS_386,_cpu_class
jne 3f
#endif
@@ -546,10 +546,10 @@ ENTRY(suword)
#if defined(I386_CPU)
-#if defined(I486_CPU) || defined(I586_CPU)
+#if defined(I486_CPU) || defined(I586_CPU) || defined(I686_CPU)
cmpl $CPUCLASS_386,_cpu_class
jne 2f /* we only have to set the right segment selector */
-#endif /* I486_CPU || I586_CPU */
+#endif /* I486_CPU || I586_CPU || I686_CPU */
/* XXX - page boundary crossing is still not handled */
movl %edx,%eax
@@ -588,10 +588,10 @@ ENTRY(susword)
#if defined(I386_CPU)
-#if defined(I486_CPU) || defined(I586_CPU)
+#if defined(I486_CPU) || defined(I586_CPU) || defined(I686_CPU)
cmpl $CPUCLASS_386,_cpu_class
jne 2f
-#endif /* I486_CPU || I586_CPU */
+#endif /* I486_CPU || I586_CPU || I686_CPU */
/* XXX - page boundary crossing is still not handled */
movl %edx,%eax
@@ -631,10 +631,10 @@ ENTRY(subyte)
#if defined(I386_CPU)
-#if defined(I486_CPU) || defined(I586_CPU)
+#if defined(I486_CPU) || defined(I586_CPU) || defined(I686_CPU)
cmpl $CPUCLASS_386,_cpu_class
jne 2f
-#endif /* I486_CPU || I586_CPU */
+#endif /* I486_CPU || I586_CPU || I686_CPU */
movl %edx,%eax
shrl $IDXSHIFT,%edx
diff --git a/sys/i386/i386/tsc.c b/sys/i386/i386/tsc.c
index 65668d1..b7c6a2a 100644
--- a/sys/i386/i386/tsc.c
+++ b/sys/i386/i386/tsc.c
@@ -34,7 +34,7 @@
* SUCH DAMAGE.
*
* from: @(#)clock.c 7.2 (Berkeley) 5/12/91
- * $Id: clock.c,v 1.41 1995/12/14 23:01:51 bde Exp $
+ * $Id: clock.c,v 1.42 1995/12/20 20:57:33 wollman Exp $
*/
/*
@@ -93,7 +93,7 @@
int adjkerntz = 0; /* offset from CMOS clock */
int disable_rtc_set = 0; /* disable resettodr() if != 0 */
u_int idelayed;
-#ifdef I586_CPU
+#if defined(I586_CPU) || defined(I686_CPU)
unsigned i586_ctr_rate;
long long i586_ctr_bias;
long long i586_last_tick;
@@ -280,7 +280,7 @@ getit(void)
return ((high << 8) | low);
}
-#ifdef I586_CPU
+#if defined(I586_CPU) || defined(I686_CPU)
/*
* Figure out how fast the cyclecounter runs. This must be run with
* clock interrupts disabled, but with the timer/counter programmed
@@ -569,7 +569,7 @@ cpu_initclocks()
/* XXX */ (inthand2_t *)clkintr, &clk_imask,
/* unit */ 0);
INTREN(IRQ0);
-#ifdef I586_CPU
+#if defined(I586_CPU) || defined(I686_CPU)
/*
* Finish setting up anti-jitter measures.
*/
diff --git a/sys/i386/include/clock.h b/sys/i386/include/clock.h
index 542e628..1f63bfe 100644
--- a/sys/i386/include/clock.h
+++ b/sys/i386/include/clock.h
@@ -3,13 +3,13 @@
* Garrett Wollman, September 1994.
* This file is in the public domain.
*
- * $Id: clock.h,v 1.6 1995/11/29 19:57:16 wollman Exp $
+ * $Id: clock.h,v 1.7 1995/12/10 13:38:07 phk Exp $
*/
#ifndef _MACHINE_CLOCK_H_
#define _MACHINE_CLOCK_H_
-#ifdef I586_CPU
+#if defined(I586_CPU) || defined(I686_CPU)
#define I586_CYCLECTR(x) \
__asm __volatile(".byte 0x0f, 0x31" : "=A" (x))
@@ -54,7 +54,7 @@
*/
extern int adjkerntz;
extern int disable_rtc_set;
-#ifdef I586_CPU
+#if defined(I586_CPU) || defined(I686_CPU)
extern unsigned i586_ctr_rate; /* fixed point */
extern long long i586_last_tick;
extern long long i586_ctr_bias;
@@ -63,11 +63,11 @@ extern int timer0_max_count;
extern u_int timer0_overflow_threshold;
extern u_int timer0_prescaler_count;
-#ifdef I586_CPU
+#if defined(I586_CPU) || defined(I686_CPU)
void calibrate_cyclecounter __P((void));
#endif
-#ifdef I586_CPU
+#if defined(I586_CPU) || defined(I686_CPU)
static __inline u_long
cpu_thisticklen(u_long dflt)
{
diff --git a/sys/i386/include/cputypes.h b/sys/i386/include/cputypes.h
index 52d8e20..0c5667b 100644
--- a/sys/i386/include/cputypes.h
+++ b/sys/i386/include/cputypes.h
@@ -24,7 +24,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $Id: cputypes.h,v 1.2 1993/11/07 17:42:49 wollman Exp $
+ * $Id: cputypes.h,v 1.3 1994/09/04 19:59:23 pst Exp $
*/
#ifndef _MACHINE_CPUTYPES_H_
@@ -38,6 +38,7 @@
#define CPUCLASS_386 1
#define CPUCLASS_486 2
#define CPUCLASS_586 3
+#define CPUCLASS_686 4
/*
* Kinds of Processor
@@ -50,5 +51,6 @@
#define CPU_486 4 /* Intel 80486DX */
#define CPU_586 5 /* Intel P.....m (I hate lawyers; it's TM) */
#define CPU_486DLC 6 /* Cyrix 486DLC */
+#define CPU_686 7 /* Pentium Pro */
#endif /* _MACHINE_CPUTYPES_H_ */
diff --git a/sys/i386/isa/clock.c b/sys/i386/isa/clock.c
index 65668d1..b7c6a2a 100644
--- a/sys/i386/isa/clock.c
+++ b/sys/i386/isa/clock.c
@@ -34,7 +34,7 @@
* SUCH DAMAGE.
*
* from: @(#)clock.c 7.2 (Berkeley) 5/12/91
- * $Id: clock.c,v 1.41 1995/12/14 23:01:51 bde Exp $
+ * $Id: clock.c,v 1.42 1995/12/20 20:57:33 wollman Exp $
*/
/*
@@ -93,7 +93,7 @@
int adjkerntz = 0; /* offset from CMOS clock */
int disable_rtc_set = 0; /* disable resettodr() if != 0 */
u_int idelayed;
-#ifdef I586_CPU
+#if defined(I586_CPU) || defined(I686_CPU)
unsigned i586_ctr_rate;
long long i586_ctr_bias;
long long i586_last_tick;
@@ -280,7 +280,7 @@ getit(void)
return ((high << 8) | low);
}
-#ifdef I586_CPU
+#if defined(I586_CPU) || defined(I686_CPU)
/*
* Figure out how fast the cyclecounter runs. This must be run with
* clock interrupts disabled, but with the timer/counter programmed
@@ -569,7 +569,7 @@ cpu_initclocks()
/* XXX */ (inthand2_t *)clkintr, &clk_imask,
/* unit */ 0);
INTREN(IRQ0);
-#ifdef I586_CPU
+#if defined(I586_CPU) || defined(I686_CPU)
/*
* Finish setting up anti-jitter measures.
*/
diff --git a/sys/isa/atrtc.c b/sys/isa/atrtc.c
index 65668d1..b7c6a2a 100644
--- a/sys/isa/atrtc.c
+++ b/sys/isa/atrtc.c
@@ -34,7 +34,7 @@
* SUCH DAMAGE.
*
* from: @(#)clock.c 7.2 (Berkeley) 5/12/91
- * $Id: clock.c,v 1.41 1995/12/14 23:01:51 bde Exp $
+ * $Id: clock.c,v 1.42 1995/12/20 20:57:33 wollman Exp $
*/
/*
@@ -93,7 +93,7 @@
int adjkerntz = 0; /* offset from CMOS clock */
int disable_rtc_set = 0; /* disable resettodr() if != 0 */
u_int idelayed;
-#ifdef I586_CPU
+#if defined(I586_CPU) || defined(I686_CPU)
unsigned i586_ctr_rate;
long long i586_ctr_bias;
long long i586_last_tick;
@@ -280,7 +280,7 @@ getit(void)
return ((high << 8) | low);
}
-#ifdef I586_CPU
+#if defined(I586_CPU) || defined(I686_CPU)
/*
* Figure out how fast the cyclecounter runs. This must be run with
* clock interrupts disabled, but with the timer/counter programmed
@@ -569,7 +569,7 @@ cpu_initclocks()
/* XXX */ (inthand2_t *)clkintr, &clk_imask,
/* unit */ 0);
INTREN(IRQ0);
-#ifdef I586_CPU
+#if defined(I586_CPU) || defined(I686_CPU)
/*
* Finish setting up anti-jitter measures.
*/
OpenPOWER on IntegriCloud