Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/arch/i386/include Let rnd(4) know how to read the (penti...



details:   https://anonhg.NetBSD.org/src/rev/42dd3a9b60ea
branches:  trunk
changeset: 487280:42dd3a9b60ea
user:      sommerfeld <sommerfeld%NetBSD.org@localhost>
date:      Mon Jun 05 21:15:22 2000 +0000

description:
Let rnd(4) know how to read the (pentium and higher) cycle counter:

If __HAVE_CPU_TIMESTAMP is defined, <machine/rnd.h> exists and defines
two functions:
  1)    u_int32_t cpu_timestamp(void);
returns the 32 low order bits of a reasonably high frequency counter.
  2)    int cpu_havetimestamp(void);
returns non-zero if cpu_timestamp() actually works.

The timestamp counter should run at a frequency greater than 1 MHz
(otherwise, microtime would be sufficient); other than that, the exact
frequency and origin of the counter are unspecified.

diffstat:

 sys/arch/i386/include/rnd.h   |  78 +++++++++++++++++++++++++++++++++++++++++++
 sys/arch/i386/include/types.h |   3 +-
 2 files changed, 80 insertions(+), 1 deletions(-)

diffs (98 lines):

diff -r 2588cee463b8 -r 42dd3a9b60ea sys/arch/i386/include/rnd.h
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/sys/arch/i386/include/rnd.h       Mon Jun 05 21:15:22 2000 +0000
@@ -0,0 +1,78 @@
+/*     $NetBSD: rnd.h,v 1.1 2000/06/05 21:15:22 sommerfeld Exp $       */
+
+/*-
+ * Copyright (c) 2000 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Bill Sommerfeld.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *        This product includes software developed by the NetBSD
+ *        Foundation, Inc. and its contributors.
+ * 4. Neither the name of The NetBSD Foundation nor the names of its
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _I386_RND_H_
+#define        _I386_RND_H_
+
+/*
+ * Machine-specific support for rnd(4)
+ */
+
+#include <machine/cpufunc.h>
+#include <machine/specialreg.h>
+
+#include "opt_cputype.h"
+
+#ifdef _KERNEL
+
+static __inline int
+cpu_hastimestamp(void)
+{
+#if I586_CPU || I686_CPU
+       /*
+        * Note that:
+        * 1) Intel documentation is very specific that code *must* test
+        * the CPU feature flag, even if you "know" that a particular
+        * rev of the hardware supports it.
+        * 2) We know that the TSC is busted on some Cyrix CPU's..
+        */
+       return (cpu_feature & CPUID_TSC) != 0;
+#else
+       return 0;
+#endif
+}
+
+static __inline u_int32_t
+cpu_timestamp(void)
+{
+       return rdtsc();
+}
+
+#endif /* _KERNEL */
+
+#endif /* !_I386_RND_H_ */
diff -r 2588cee463b8 -r 42dd3a9b60ea sys/arch/i386/include/types.h
--- a/sys/arch/i386/include/types.h     Mon Jun 05 20:47:47 2000 +0000
+++ b/sys/arch/i386/include/types.h     Mon Jun 05 21:15:22 2000 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: types.h,v 1.22 2000/02/05 00:07:31 cgd Exp $   */
+/*     $NetBSD: types.h,v 1.23 2000/06/05 21:15:22 sommerfeld Exp $    */
 
 /*-
  * Copyright (c) 1990 The Regents of the University of California.
@@ -77,5 +77,6 @@
 
 #define __HAVE_DEVICE_REGISTER
 #define __HAVE_NWSCONS
+#define __HAVE_CPU_TIMESTAMP
 
 #endif /* _MACHTYPES_H_ */



Home | Main Index | Thread Index | Old Index