summaryrefslogtreecommitdiffstats
path: root/sys/i386
diff options
context:
space:
mode:
Diffstat (limited to 'sys/i386')
-rw-r--r--sys/i386/i386/tsc.c23
-rw-r--r--sys/i386/include/clock.h49
-rw-r--r--sys/i386/isa/clock.c23
3 files changed, 51 insertions, 44 deletions
diff --git a/sys/i386/i386/tsc.c b/sys/i386/i386/tsc.c
index 88942db..b762442 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.16 1994/08/18 22:34:50 wollman Exp $
+ * $Id: clock.c,v 1.17 1994/09/14 23:09:06 ache Exp $
*/
/*
@@ -79,27 +79,6 @@ void
clkintr(frame)
struct clockframe frame;
{
-#ifdef I586_CPU
- /*
- * This resets the CPU cycle counter to zero, to make our
- * job easier in microtime(). Some fancy ifdefs could speed
- * this up for Pentium-only kernels.
- * We want this to be done as close as possible to the actual
- * timer incrementing in hardclock(), because there is a window
- * between the two where the value is no longer valid. Experimentation
- * may reveal a good precompensation to apply in microtime().
- */
- if(pentium_mhz) {
- __asm __volatile("movl $0x10,%%ecx\n"
- "xorl %%eax,%%eax\n"
- "movl %%eax,%%edx\n"
- ".byte 0x0f, 0x30\n"
- "#%0%1"
- : "=m"(frame) /* no outputs */
- : "b"(&frame) /* fake input */
- : "ax", "cx", "dx");
- }
-#endif
hardclock(&frame);
}
diff --git a/sys/i386/include/clock.h b/sys/i386/include/clock.h
new file mode 100644
index 0000000..b7420e4
--- /dev/null
+++ b/sys/i386/include/clock.h
@@ -0,0 +1,49 @@
+/*
+ * Kernel interface to machine-dependent clock driver.
+ * Garrett Wollman, September 1994.
+ * This file is in the public domain.
+ */
+
+#ifndef _MACHINE_CLOCK_H_
+#define _MACHINE_CLOCK_H_ 1
+
+extern int pentium_mhz;
+
+#ifdef I586_CPU
+ /*
+ * This resets the CPU cycle counter to zero, to make our
+ * job easier in microtime(). Some fancy ifdefs could speed
+ * this up for Pentium-only kernels.
+ * We want this to be done as close as possible to the actual
+ * timer incrementing in hardclock(), because there is a window
+ * between the two where the value is no longer valid. Experimentation
+ * may reveal a good precompensation to apply in microtime().
+ */
+#define CPU_CLOCKUPDATE(otime, ntime) \
+ do { \
+ if(pentium_mhz) { \
+ __asm __volatile("cli\n" \
+ "movl (%2),%%eax\n" \
+ "movl %%eax,(%1)\n" \
+ "movl 4(%2),%%eax\n" \
+ "movl %%eax,4(%1)\n" \
+ "movl $0x10,%%ecx\n" \
+ "xorl %%eax,%%eax\n" \
+ "movl %%eax,%%edx\n" \
+ ".byte 0x0f, 0x30\n" \
+ "sti\n" \
+ "#%0%1%2" \
+ : "=m"(*otime) /* no outputs */ \
+ : "c"(otime), "b"(ntime) /* fake input */ \
+ : "ax", "cx", "dx"); \
+ } else { \
+ *(otime) = *(ntime); \
+ } \
+ } while(0)
+
+#else
+#define CPU_CLOCKUPDATE(otime, ntime) \
+ (*(otime) = *(ntime))
+#endif
+
+#endif /* _MACHINE_CLOCK_H_ */
diff --git a/sys/i386/isa/clock.c b/sys/i386/isa/clock.c
index 88942db..b762442 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.16 1994/08/18 22:34:50 wollman Exp $
+ * $Id: clock.c,v 1.17 1994/09/14 23:09:06 ache Exp $
*/
/*
@@ -79,27 +79,6 @@ void
clkintr(frame)
struct clockframe frame;
{
-#ifdef I586_CPU
- /*
- * This resets the CPU cycle counter to zero, to make our
- * job easier in microtime(). Some fancy ifdefs could speed
- * this up for Pentium-only kernels.
- * We want this to be done as close as possible to the actual
- * timer incrementing in hardclock(), because there is a window
- * between the two where the value is no longer valid. Experimentation
- * may reveal a good precompensation to apply in microtime().
- */
- if(pentium_mhz) {
- __asm __volatile("movl $0x10,%%ecx\n"
- "xorl %%eax,%%eax\n"
- "movl %%eax,%%edx\n"
- ".byte 0x0f, 0x30\n"
- "#%0%1"
- : "=m"(frame) /* no outputs */
- : "b"(&frame) /* fake input */
- : "ax", "cx", "dx");
- }
-#endif
hardclock(&frame);
}
OpenPOWER on IntegriCloud