[svn-commits] tzafrir: branch 1.2 r3083 - in /branches/1.2: README ztdummy.c

SVN commits to the Digium repositories svn-commits at lists.digium.com
Sat Sep 22 15:51:33 CDT 2007


Author: tzafrir
Date: Sat Sep 22 15:51:33 2007
New Revision: 3083

URL: http://svn.digium.com/view/zaptel?view=rev&rev=3083
Log:
Backport support for high-resolution timers from 1.4. Allows 2.6.22
Fedoras to build again.

Modified:
    branches/1.2/README
    branches/1.2/ztdummy.c

Modified: branches/1.2/README
URL: http://svn.digium.com/view/zaptel/branches/1.2/README?view=diff&rev=3083&r1=3082&r2=3083
==============================================================================
--- branches/1.2/README (original)
+++ branches/1.2/README Sat Sep 22 15:51:33 2007
@@ -74,7 +74,7 @@
   kernel image.
   * On Debian Etch and above and any Ubuntu this is
     +++ linux-headers-`uname -r` +++
-  * On Fedora RHEL and compatibles (e.g. CentOS) this is the
+  * On Fedora, RHEL and compatibles (e.g. CentOS) this is the
     kernel-devel package. Or if you run kernel-smp or kernel-xen, you
     need kernel-smp-devel or kernel-xen-devel, respectively.
   * On SUSE you seem to need the package kernel-source .
@@ -97,8 +97,11 @@
   be selected These can be selected from the "Library Routines" submenu 
   during kernel configuration via "make menuconfig".
 - If you don't have any zaptel hardware, you need ztdummy.
-  * ztdummy on i386/amd64 and later kernels (>= 2.6.15) can (and should)
-    use the system's RTC (Real Time Clock).
+  * ztdummy on i386/x86_64 with kernels >= 2.6.22 can (and should) use 
+    high resolution times (CONFIG_HIGH_RES_TIMERS), and (if available, 
+    the system HPET.
+  * ztdummy on i386/x86_64 and later kernels (>= 2.6.15) can use the 
+    system's RTC (Real Time Clock).
   * Alternatives to that for ztdummy are a UHCI USB controller (USB
     controllers made by Intel or VIA) or a kernel that has HZ=1000
     (default on kernels 2.6.0-2.6.12, optional on newer kernels. Not
@@ -136,7 +139,7 @@
   yum install gcc newt-devel libusb-devel
 
 If the following command produces an error, you need to install
-ithe kernel devel package:
+the kernel devel package:
 
   ls /lib/modules/`uname -r`/build/.config
 
@@ -322,6 +325,12 @@
 of how close it was. Also try running it with the option -v for a
 verbose output.
 
+To check the clock source that is built into ztdummy, you can either
+look at title of its span in /proc/zaptel file for a "source:" in the
+description. Or even run:
+
+  strings zaptel.ko | grep source:
+
 
 Spans and Channels
 ------------------

Modified: branches/1.2/ztdummy.c
URL: http://svn.digium.com/view/zaptel/branches/1.2/ztdummy.c?view=diff&rev=3083&r1=3082&r2=3083
==============================================================================
--- branches/1.2/ztdummy.c (original)
+++ branches/1.2/ztdummy.c Sat Sep 22 15:51:33 2007
@@ -8,6 +8,8 @@
  * Unified by Mark Spencer <markster at digium.com>
  * Converted to use RTC on i386 by Tony Mountifield <tony at softins.co.uk>
  *
+ * Converted to use HighResTimers on i386 by Jeffery Palmer <jeff at triggerinc.com>
+ *
  * Copyright (C) 2002, Hermes Softlab
  * Copyright (C) 2004, Digium, Inc.
  *
@@ -28,6 +30,14 @@
  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  *
  */
+
+/*
+ * To use the high resolution timers, in your kernel CONFIG_HIGH_RES_TIMERS 
+ * needs to be enabled (Processor type and features -> High Resolution 
+ * Timer Support), and optionally HPET (Processor type and features -> 
+ * HPET Timer Support) provides a better clock source.
+ */
+
 #include <linux/version.h>
 
 #ifndef VERSION_CODE
@@ -46,7 +56,12 @@
  */
 #if defined(__i386__) || defined(__x86_64__)
 #if LINUX_VERSION_CODE >= VERSION_CODE(2,6,13)
+/* The symbol hrtimer_forward is only exported as of 2.6.22: */
+#if defined(CONFIG_HIGH_RES_TIMERS) && LINUX_VERSION_CODE >= VERSION_CODE(2,6,22)
+#define USE_HIGHRESTIMER
+#else
 #define USE_RTC
+#endif
 #else
 #if 0
 #define USE_RTC
@@ -70,6 +85,9 @@
 #include <asm/io.h>
 #endif
 #ifdef LINUX26
+#ifdef USE_HIGHRESTIMER
+#include <linux/hrtimer.h>
+#endif
 #ifdef USE_RTC
 #include <linux/rtc.h>
 #endif
@@ -96,8 +114,14 @@
 static int debug = 0;
 
 #ifdef LINUX26
-#ifndef USE_RTC
-/* New 2.6 kernel timer stuff */
+#ifdef USE_HIGHRESTIMER
+#define CLOCK_SRC "HRtimer"
+struct hrtimer zaptimer;
+#elif defined(USE_RTC)
+#define CLOCK_SRC "RTC"
+#else /* Linux 2.6, but no RTC or HRTIMER used */
+#define CLOCK_SRC "Linux26"
+/* 2.6 kernel timer stuff */
 static struct timer_list timer;
 #if HZ != 1000
 #warning This module will not be usable since the kernel HZ setting is not 1000 ticks per second.
@@ -107,6 +131,7 @@
 #if LINUX_VERSION_CODE < VERSION_CODE(2,4,5)
 #  error "This kernel is too old: not supported by this file"
 #endif
+#define CLOCK_SRC "UHCI"
 /* Old UCHI stuff */
 static    uhci_desc_t  *td;
 static    uhci_t *s;
@@ -124,6 +149,15 @@
 extern uhci_t **uhci_devices;
 
 #endif
+
+
+#define ZAPTEL_RATE 1000                     /* zaptel ticks per second */
+#define ZAPTEL_TIME (1000000 / ZAPTEL_RATE)  /* zaptel tick time in us */
+#define ZAPTEL_TIME_NS (ZAPTEL_TIME * 1000)  /* zaptel tick time in ns */
+
+/* Different bits of the debug variable: */
+#define DEBUG_GENERAL (1 << 0)
+#define DEBUG_TICKS   (1 << 1)
 
 
 #ifdef LINUX26
@@ -180,7 +214,7 @@
 {
 	/* Zapata stuff */
 	sprintf(ztd->span.name, "ZTDUMMY/1");
-	sprintf(ztd->span.desc, "%s %d", ztd->span.name, 1);
+	sprintf(ztd->span.desc, "%s (source: " CLOCK_SRC ") %d", ztd->span.name, 1);
 	sprintf(ztd->chan.name, "ZTDUMMY/%d/%d", 1, 0);
 	ztd->chan.chanpos = 1;
 	ztd->span.chans = &ztd->chan;
@@ -220,12 +254,12 @@
     }
 #endif
 
-#if defined(LINUX26) && !defined(USE_RTC)
+#if defined(LINUX26) && !defined(USE_RTC) && !defined(USE_HIGHRESTIMER)
     if (HZ != 1000) {
 	    printk("ztdummy: This module requires the kernel HZ setting to be 1000 ticks per second\n");
 	    return -ENODEV;
     }
-#endif /* defined(LINUX26) && !defined(USE_RTC) */
+#endif /* defined(LINUX26) && !defined(USE_RTC) && !defined(USE_HIGHRESTIMER)*/
 
     ztd = kmalloc(sizeof(struct ztdummy), GFP_KERNEL);
     if (ztd == NULL) {




More information about the svn-commits mailing list