[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Ltib] Zaptel enchancements
From: |
Vadim Lebedev |
Subject: |
[Ltib] Zaptel enchancements |
Date: |
Mon, 01 Dec 2008 19:16:21 +0100 |
User-agent: |
Thunderbird 2.0.0.17 (X11/20080925) |
Hello,
I'm submitting two enchancements to zaptel for ltib,
1) patch allowing usage of Hi res timers on non-intel platforms
2) possibility to build in a setup where kernel kbuild output dir is
different from kernel source dir
(The suggested name for the patch file would be :
zaptel-1.4.11-nonintel-hrt.patch
Thanks
Vadim
diff --exclude CVS -uNr zaptel-1.4.11/build_tools/make_firmware_object
zaptel-1.4.11.modified/build_tools/make_firmware_object
--- zaptel-1.4.11/build_tools/make_firmware_object 1970-01-01
01:00:00.000000000 +0100
+++ zaptel-1.4.11.modified/build_tools/make_firmware_object 2008-10-22
16:36:53.000000000 +0200
@@ -0,0 +1,11 @@
+#!/bin/sh -e
+
+# make an object file from a raw binary firmware file
+# arguments:
+# 1 - firmware file
+# 2 - output file
+
+bfdname=elf32-littlearm
+bfdarch=arm
+
+objcopy -I binary ${1} -B ${bfdarch} -O ${bfdname} ${2} --rename-section
.data=.rodata,alloc,load,data,contents,readonly
diff --exclude CVS -uNr zaptel-1.4.11/build_tools/menuselect-deps
zaptel-1.4.11.modified/build_tools/menuselect-deps
--- zaptel-1.4.11/build_tools/menuselect-deps 1970-01-01 01:00:00.000000000
+0100
+++ zaptel-1.4.11.modified/build_tools/menuselect-deps 2008-10-22
16:36:53.000000000 +0200
@@ -0,0 +1 @@
+LIBNEWT=0
diff --exclude CVS -uNr zaptel-1.4.11/kernel/Module.symvers
zaptel-1.4.11.modified/kernel/Module.symvers
--- zaptel-1.4.11/kernel/Module.symvers 1970-01-01 01:00:00.000000000 +0100
+++ zaptel-1.4.11.modified/kernel/Module.symvers 2008-10-22
16:36:54.000000000 +0200
@@ -0,0 +1,35 @@
+0x4e157cb0 zt_unregister_chardev
/home/vadim/ltib/rpm/BUILD/zaptel-1.4.11/kernel/zaptel EXPORT_SYMBOL
+0x76017abf zt_alarm_channel
/home/vadim/ltib/rpm/BUILD/zaptel-1.4.11/kernel/zaptel EXPORT_SYMBOL
+0x903c8086 zt_qevent_lock
/home/vadim/ltib/rpm/BUILD/zaptel-1.4.11/kernel/zaptel EXPORT_SYMBOL
+0x0eeb9ba6 zt_hdlc_putbuf
/home/vadim/ltib/rpm/BUILD/zaptel-1.4.11/kernel/zaptel EXPORT_SYMBOL
+0x908058a6 zt_hdlc_getbuf
/home/vadim/ltib/rpm/BUILD/zaptel-1.4.11/kernel/zaptel EXPORT_SYMBOL
+0xaa04a3e5 zt_dynamic_unregister
/home/vadim/ltib/rpm/BUILD/zaptel-1.4.11/kernel/ztdynamic EXPORT_SYMBOL
+0x23df12d7 zt_receive
/home/vadim/ltib/rpm/BUILD/zaptel-1.4.11/kernel/zaptel EXPORT_SYMBOL
+0x578d0778 zt_hdlc_finish
/home/vadim/ltib/rpm/BUILD/zaptel-1.4.11/kernel/zaptel EXPORT_SYMBOL
+0xac580846 __zt_lin2mu
/home/vadim/ltib/rpm/BUILD/zaptel-1.4.11/kernel/zaptel EXPORT_SYMBOL
+0xe85559f3 zt_transcoder_alloc
/home/vadim/ltib/rpm/BUILD/zaptel-1.4.11/kernel/zttranscode EXPORT_SYMBOL
+0x2c50781a __zt_lin2a
/home/vadim/ltib/rpm/BUILD/zaptel-1.4.11/kernel/zaptel EXPORT_SYMBOL
+0x5f48c41a zt_set_dynamic_ioctl
/home/vadim/ltib/rpm/BUILD/zaptel-1.4.11/kernel/zaptel EXPORT_SYMBOL
+0x871c4fa7 zt_qevent_nolock
/home/vadim/ltib/rpm/BUILD/zaptel-1.4.11/kernel/zaptel EXPORT_SYMBOL
+0x384295ce zt_register
/home/vadim/ltib/rpm/BUILD/zaptel-1.4.11/kernel/zaptel EXPORT_SYMBOL
+0x0bdb7977 zt_rbsbits
/home/vadim/ltib/rpm/BUILD/zaptel-1.4.11/kernel/zaptel EXPORT_SYMBOL
+0x78269406 zt_transmit
/home/vadim/ltib/rpm/BUILD/zaptel-1.4.11/kernel/zaptel EXPORT_SYMBOL
+0xb539614f zt_transcoder_register
/home/vadim/ltib/rpm/BUILD/zaptel-1.4.11/kernel/zttranscode EXPORT_SYMBOL
+0xf3a8c74f zt_dynamic_register
/home/vadim/ltib/rpm/BUILD/zaptel-1.4.11/kernel/ztdynamic EXPORT_SYMBOL
+0x97fcc220 zt_mf_tone
/home/vadim/ltib/rpm/BUILD/zaptel-1.4.11/kernel/zaptel EXPORT_SYMBOL
+0xaf5f2b1e zt_register_chardev
/home/vadim/ltib/rpm/BUILD/zaptel-1.4.11/kernel/zaptel EXPORT_SYMBOL
+0x06168c74 zt_ec_chunk
/home/vadim/ltib/rpm/BUILD/zaptel-1.4.11/kernel/zaptel EXPORT_SYMBOL
+0x61944157 __zt_mulaw
/home/vadim/ltib/rpm/BUILD/zaptel-1.4.11/kernel/zaptel EXPORT_SYMBOL
+0x61cf3116 zt_dynamic_receive
/home/vadim/ltib/rpm/BUILD/zaptel-1.4.11/kernel/ztdynamic EXPORT_SYMBOL
+0x439adf18 zt_transcode_fops
/home/vadim/ltib/rpm/BUILD/zaptel-1.4.11/kernel/zaptel EXPORT_SYMBOL
+0x8ee80274 zt_alarm_notify
/home/vadim/ltib/rpm/BUILD/zaptel-1.4.11/kernel/zaptel EXPORT_SYMBOL
+0x3b2844db zt_unregister
/home/vadim/ltib/rpm/BUILD/zaptel-1.4.11/kernel/zaptel EXPORT_SYMBOL
+0x52a69a7e zt_hooksig
/home/vadim/ltib/rpm/BUILD/zaptel-1.4.11/kernel/zaptel EXPORT_SYMBOL
+0x3fe8d574 zt_transcoder_unregister
/home/vadim/ltib/rpm/BUILD/zaptel-1.4.11/kernel/zttranscode EXPORT_SYMBOL
+0x84abd26e zt_lboname
/home/vadim/ltib/rpm/BUILD/zaptel-1.4.11/kernel/zaptel EXPORT_SYMBOL
+0xe19fcf20 zt_hdlc_abort
/home/vadim/ltib/rpm/BUILD/zaptel-1.4.11/kernel/zaptel EXPORT_SYMBOL
+0xcfa799c2 zt_transcoder_free
/home/vadim/ltib/rpm/BUILD/zaptel-1.4.11/kernel/zttranscode EXPORT_SYMBOL
+0xf05d3a75 zt_ec_span
/home/vadim/ltib/rpm/BUILD/zaptel-1.4.11/kernel/zaptel EXPORT_SYMBOL
+0x1b29fdb2 zt_init_tone_state
/home/vadim/ltib/rpm/BUILD/zaptel-1.4.11/kernel/zaptel EXPORT_SYMBOL
+0xc5f1e74a zt_transcoder_alert
/home/vadim/ltib/rpm/BUILD/zaptel-1.4.11/kernel/zttranscode EXPORT_SYMBOL
+0x519806d8 __zt_alaw
/home/vadim/ltib/rpm/BUILD/zaptel-1.4.11/kernel/zaptel EXPORT_SYMBOL
diff --exclude CVS -uNr zaptel-1.4.11/kernel/ztdummy.c
zaptel-1.4.11.modified/kernel/ztdummy.c
--- zaptel-1.4.11/kernel/ztdummy.c 2008-02-18 18:32:26.000000000 +0100
+++ zaptel-1.4.11.modified/kernel/ztdummy.c 2008-10-22 16:36:26.000000000
+0200
@@ -54,7 +54,7 @@
* If using an i386 architecture without a PC real-time clock,
* the #define USE_RTC should be commented out.
*/
-#if defined(__i386__) || defined(__x86_64__)
+#if defined(__i386__) || defined(__x86_64__) || defined(__arm__)
#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)
diff --exclude CVS -uNr zaptel-1.4.11/kernel/ztdummy.c~
zaptel-1.4.11.modified/kernel/ztdummy.c~
--- zaptel-1.4.11/kernel/ztdummy.c~ 1970-01-01 01:00:00.000000000 +0100
+++ zaptel-1.4.11.modified/kernel/ztdummy.c~ 2008-02-18 18:32:26.000000000
+0100
@@ -0,0 +1,429 @@
+/*
+ * Dummy Zaptel Driver for Zapata Telephony interface
+ *
+ * Required: usb-uhci module and kernel > 2.4.4 OR kernel > 2.6.0
+ *
+ * Written by Robert Pleh <address@hidden>
+ * 2.6 version by Tony Hoyle
+ * Unified by Mark Spencer <address@hidden>
+ * Converted to use RTC on i386 by Tony Mountifield <address@hidden>
+ *
+ * Converted to use HighResTimers on i386 by Jeffery Palmer <address@hidden>
+ *
+ * Copyright (C) 2002, Hermes Softlab
+ * Copyright (C) 2004, Digium, Inc.
+ *
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * 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
+# define VERSION_CODE(vers,rel,seq) ( ((vers)<<16) | ((rel)<<8) | (seq) )
+#endif
+
+
+#if LINUX_VERSION_CODE < VERSION_CODE(2,4,5)
+# error "This kernel is too old: not supported by this file"
+#endif
+
+/*
+ * NOTE: (only applies to kernel 2.6)
+ * If using an i386 architecture without a PC real-time clock,
+ * the #define USE_RTC should be commented out.
+ */
+#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
+#endif
+#endif
+#endif
+
+#include <linux/kernel.h>
+#include <linux/errno.h>
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/errno.h>
+#include "zaptel.h"
+#ifndef LINUX26
+#include <linux/usb.h>
+#include <linux/pci.h>
+#include <asm/io.h>
+#endif
+#ifdef LINUX26
+#ifdef USE_HIGHRESTIMER
+#include <linux/hrtimer.h>
+#endif
+#ifdef USE_RTC
+#include <linux/rtc.h>
+#endif
+#include <linux/moduleparam.h>
+#endif
+#include "ztdummy.h"
+
+
+static struct ztdummy *ztd;
+
+static int debug = 0;
+
+#ifdef LINUX26
+#ifdef USE_HIGHRESTIMER
+#define CLOCK_SRC "HRtimer"
+struct hrtimer zaptimer;
+#elif defined(USE_RTC)
+#define CLOCK_SRC "RTC"
+static int rtc_rate = 0;
+static int current_rate = 0;
+static int taskletpending = 0;
+static struct tasklet_struct ztd_tlet;
+static void ztd_tasklet(unsigned long data);
+#else /* Linux 2.6, but no RTC or HRTIMER used */
+#define CLOCK_SRC "Linux26"
+/* 2.6 kernel timer stuff */
+static struct timer_list timer;
+#endif
+#else
+#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;
+static int monitor = 0;
+
+/* exported kernel symbols */
+extern int insert_td (uhci_t *s, uhci_desc_t *qh, uhci_desc_t* new, int flags);
+extern int alloc_td (uhci_t *s, uhci_desc_t ** new, int flags);
+extern int insert_td_horizontal (uhci_t *s, uhci_desc_t *td, uhci_desc_t*
new);
+extern int unlink_td (uhci_t *s, uhci_desc_t *element, int phys_unlink);
+extern void fill_td (uhci_desc_t *td, int status, int info, __u32 buffer);
+extern void uhci_interrupt (int irq, void *__uhci, struct pt_regs *regs);
+extern int delete_desc (uhci_t *s, uhci_desc_t *element);
+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
+#ifdef USE_RTC
+static void update_rtc_rate(struct ztdummy *ztd)
+{
+ if (((rtc_rate & (rtc_rate - 1)) != 0) || (rtc_rate > 8192) ||
(rtc_rate < 2)) {
+ printk(KERN_NOTICE "Invalid RTC rate %d specified\n", rtc_rate);
+ rtc_rate = current_rate; /* Set default RTC rate */
+ }
+ if (!rtc_rate || (rtc_rate != current_rate)) {
+ rtc_control(&ztd->rtc_task, RTC_IRQP_SET, current_rate =
(rtc_rate ? rtc_rate : 1024)); /* 1024 Hz */
+ printk(KERN_INFO "ztdummy: RTC rate is %d\n", rtc_rate);
+ ztd->counter = 0;
+ }
+}
+
+static void ztd_tasklet(unsigned long data)
+{
+ if (taskletpending)
+ update_rtc_rate((struct ztdummy *)ztd);
+ taskletpending = 0;
+}
+
+/* rtc_interrupt - called at 1024Hz from hook in RTC handler */
+static void ztdummy_rtc_interrupt(void *private_data)
+{
+ struct ztdummy *ztd = private_data;
+ unsigned long flags;
+
+ /* Is spinlock required here??? */
+ spin_lock_irqsave(&ztd->rtclock, flags);
+ ztd->counter += ZAPTEL_TIME;
+ while (ztd->counter >= current_rate) {
+ ztd->counter -= current_rate;
+ /* Update of RTC IRQ rate isn't possible from interrupt handler
:( */
+ if (!taskletpending && (current_rate != rtc_rate)) {
+ taskletpending = 1;
+ tasklet_hi_schedule(&ztd_tlet);
+ }
+ zt_receive(&ztd->span);
+ zt_transmit(&ztd->span);
+ }
+ spin_unlock_irqrestore(&ztd->rtclock, flags);
+}
+#elif defined(USE_HIGHRESTIMER)
+static enum hrtimer_restart ztdummy_hr_int(struct hrtimer *htmr)
+{
+ unsigned long overrun;
+
+ /* Trigger Zaptel */
+ zt_receive(&ztd->span);
+ zt_transmit(&ztd->span);
+
+ /* Overrun should always return 1, since we are in the timer that
+ * expired.
+ * We should worry if overrun is 2 or more; then we really missed
+ * a tick */
+ overrun = hrtimer_forward(&zaptimer, htmr->expires,
+ ktime_set(0, ZAPTEL_TIME_NS));
+ if(overrun > 1) {
+ if(printk_ratelimit())
+ printk(KERN_NOTICE "ztdummy: HRTimer missed %lu
ticks\n",
+ overrun - 1);
+ }
+
+ if(debug && DEBUG_TICKS) {
+ static int count = 0;
+ /* Printk every 5 seconds, good test to see if timer is
+ * running properly */
+ if (count++ % 5000 == 0)
+ printk(KERN_DEBUG "ztdummy: 5000 ticks from hrtimer\n");
+ }
+
+ /* Always restart the timer */
+ return HRTIMER_RESTART;
+}
+#else
+/* use kernel system tick timer if PC architecture RTC is not available */
+static void ztdummy_timer(unsigned long param)
+{
+ timer.expires = jiffies + 1;
+ add_timer(&timer);
+
+ ztd->counter += ZAPTEL_TIME;
+ while (ztd->counter >= HZ) {
+ ztd->counter -= HZ;
+ zt_receive(&ztd->span);
+ zt_transmit(&ztd->span);
+ }
+}
+#endif
+#else
+static void ztdummy_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+{
+ unsigned short status;
+ unsigned int io_addr = s->io_addr;
+
+ status = inw (io_addr + USBSTS);
+ if (status != 0) { /* interrupt from our USB port */
+ static int check_int = 0;
+ zt_receive(&ztd->span);
+ zt_transmit(&ztd->span);
+ /* TODO: What's the relation between monitor and
+ * DEBUG_TICKS */
+ if (monitor && check_int) {
+ check_int = 1;
+ printk(KERN_NOTICE "ztdummy: interrupt triggered \n");
+ }
+ }
+ return;
+}
+#endif
+
+static int ztdummy_initialize(struct ztdummy *ztd)
+{
+ /* Zapata stuff */
+ sprintf(ztd->span.name, "ZTDUMMY/1");
+ snprintf(ztd->span.desc, sizeof(ztd->span.desc) - 1, "%s (source: "
CLOCK_SRC ") %d", ztd->span.name, 1);
+ sprintf(ztd->chan.name, "ZTDUMMY/%d/%d", 1, 0);
+ zap_copy_string(ztd->span.devicetype, "Zaptel Dummy Timing Driver",
sizeof(ztd->span.devicetype));
+ ztd->chan.chanpos = 1;
+ ztd->span.chans = &ztd->chan;
+ ztd->span.channels = 0; /* no channels on our span */
+ ztd->span.deflaw = ZT_LAW_MULAW;
+ init_waitqueue_head(&ztd->span.maintq);
+ ztd->span.pvt = ztd;
+ ztd->chan.pvt = ztd;
+ if (zt_register(&ztd->span, 0)) {
+ return -1;
+ }
+ return 0;
+}
+
+int init_module(void)
+{
+#ifdef LINUX26
+#ifdef USE_RTC
+ int err;
+#endif
+#else
+ int irq;
+#ifdef DEFINE_SPINLOCK
+ DEFINE_SPINLOCK(mylock);
+#else
+ spinlock_t mylock = SPIN_LOCK_UNLOCKED;
+#endif
+
+ if (uhci_devices==NULL) {
+ printk (KERN_ERR "ztdummy: Uhci_devices pointer error.\n");
+ return -ENODEV;
+ }
+ s=*uhci_devices; /* uhci device */
+ if (s==NULL) {
+ printk (KERN_ERR "ztdummy: No uhci_device found.\n");
+ return -ENODEV;
+ }
+#endif
+
+ ztd = kmalloc(sizeof(struct ztdummy), GFP_KERNEL);
+ if (ztd == NULL) {
+ printk(KERN_ERR "ztdummy: Unable to allocate memory\n");
+ return -ENOMEM;
+ }
+
+ memset(ztd, 0x0, sizeof(struct ztdummy));
+
+ if (ztdummy_initialize(ztd)) {
+ printk(KERN_ERR "ztdummy: Unable to intialize zaptel driver\n");
+ kfree(ztd);
+ return -ENODEV;
+ }
+
+#ifdef LINUX26
+ ztd->counter = 0;
+#ifdef USE_RTC
+ ztd->rtclock = SPIN_LOCK_UNLOCKED;
+ ztd->rtc_task.func = ztdummy_rtc_interrupt;
+ ztd->rtc_task.private_data = ztd;
+ err = rtc_register(&ztd->rtc_task);
+ if (err < 0) {
+ printk(KERN_ERR "ztdummy: Unable to register zaptel rtc
driver\n");
+ zt_unregister(&ztd->span);
+ kfree(ztd);
+ return err;
+ }
+ /* Set default RTC interrupt rate to 1024Hz */
+ if (!rtc_rate)
+ rtc_rate = 1024;
+ update_rtc_rate(ztd);
+ rtc_control(&ztd->rtc_task, RTC_PIE_ON, 0);
+ tasklet_init(&ztd_tlet, ztd_tasklet, 0);
+#elif defined(USE_HIGHRESTIMER)
+ printk(KERN_DEBUG "ztdummy: Trying to load High Resolution Timer\n");
+ hrtimer_init(&zaptimer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
+ printk(KERN_DEBUG "ztdummy: Initialized High Resolution Timer\n");
+
+ /* Set timer callback function */
+ zaptimer.function = ztdummy_hr_int;
+
+ printk(KERN_DEBUG "ztdummy: Starting High Resolution Timer\n");
+ hrtimer_start(&zaptimer, ktime_set(0, ZAPTEL_TIME_NS),
HRTIMER_MODE_REL);
+ printk(KERN_INFO "ztdummy: High Resolution Timer started, good to
go\n");
+#else
+ init_timer(&timer);
+ timer.function = ztdummy_timer;
+ timer.expires = jiffies + 1;
+ add_timer(&timer);
+#endif
+#else
+ irq=s->irq;
+ spin_lock_irq(&mylock);
+ free_irq(s->irq, s); /* remove uhci_interrupt temporaly */
+ if (request_irq (irq, ztdummy_interrupt, ZAP_IRQ_SHARED, "ztdummy",
ztd)) {
+ spin_unlock_irq(&mylock);
+ err("Our request_irq %d failed!",irq);
+ kfree(ztd);
+ return -EIO;
+ } /* we add our handler first, to assure, that our
handler gets called first */
+ if (request_irq (irq, uhci_interrupt, ZAP_IRQ_SHARED,
s->uhci_pci->driver->name, s)) {
+ spin_unlock_irq(&mylock);
+ err("Original request_irq %d failed!",irq);
+ }
+ spin_unlock_irq(&mylock);
+
+ /* add td to usb host controller interrupt queue */
+ alloc_td(s, &td, 0);
+ fill_td(td, TD_CTRL_IOC, 0, 0);
+ insert_td_horizontal(s, s->int_chain[0], td); /* use int_chain[0] to
get 1ms interrupts */
+#endif
+
+ if (debug)
+ printk(KERN_DEBUG "ztdummy: init() finished\n");
+ return 0;
+}
+
+
+void cleanup_module(void)
+{
+#ifdef LINUX26
+#ifdef USE_RTC
+ if (taskletpending) {
+ tasklet_disable(&ztd_tlet);
+ tasklet_kill(&ztd_tlet);
+ }
+ rtc_control(&ztd->rtc_task, RTC_PIE_OFF, 0);
+ rtc_unregister(&ztd->rtc_task);
+#elif defined(USE_HIGHRESTIMER)
+ /* Stop high resolution timer */
+ hrtimer_cancel(&zaptimer);
+#else
+ del_timer(&timer);
+#endif
+#else
+ free_irq(s->irq, ztd); /* disable interrupts */
+#endif
+ zt_unregister(&ztd->span);
+ kfree(ztd);
+#ifndef LINUX26
+ unlink_td(s, td, 1);
+ delete_desc(s, td);
+#endif
+ if (debug)
+ printk("ztdummy: cleanup() finished\n");
+}
+
+
+
+#ifdef LINUX26
+module_param(debug, int, 0600);
+#ifdef USE_RTC
+module_param(rtc_rate, int, 0600);
+#endif
+#else
+MODULE_PARM(debug, "i");
+#endif
+
+#ifndef LINUX26
+MODULE_PARM(monitor, "i");
+#endif
+MODULE_DESCRIPTION("Dummy Zaptel Driver");
+MODULE_AUTHOR("Robert Pleh <address@hidden>");
+#ifdef MODULE_LICENSE
+MODULE_LICENSE("GPL");
+#endif
diff --exclude CVS -uNr zaptel-1.4.11/menuselect.makedeps
zaptel-1.4.11.modified/menuselect.makedeps
--- zaptel-1.4.11/menuselect.makedeps 1970-01-01 01:00:00.000000000 +0100
+++ zaptel-1.4.11.modified/menuselect.makedeps 2008-10-22 16:35:09.000000000
+0200
@@ -0,0 +1,8 @@
+MENUSELECT_DEPENDS_wctc4xxp=ZTTRANSCODE
+MENUSELECT_DEPENDS_ztd-eth=ZTDYNAMIC
+MENUSELECT_DEPENDS_ztd-loc=ZTDYNAMIC
+MENUSELECT_DEPENDS_zttool=LIBNEWT
+MENUSELECT_DEPENDS_FIRMWARE-OCT6114-064=WCT4XXP
+MENUSELECT_DEPENDS_FIRMWARE-OCT6114-128=WCT4XXP
+MENUSELECT_DEPENDS_FIRMWARE-TC400M=WCTC4XXP
+MENUSELECT_DEPENDS_FIRMWARE-VPMADT032=WCTDM24XXP
diff --exclude CVS -uNr zaptel-1.4.11/version.h zaptel-1.4.11.modified/version.h
--- zaptel-1.4.11/version.h 1970-01-01 01:00:00.000000000 +0100
+++ zaptel-1.4.11.modified/version.h 2008-10-22 16:35:09.000000000 +0200
@@ -0,0 +1,6 @@
+/*
+ * version.h
+ * Automatically generated
+ */
+#define ZAPTEL_VERSION "1.4.11"
+
%define base %(echo %{_prefix} | sed -e s,/usr.*$,,)
%define pfx /opt/freescale/rootfs/%{_target_cpu}
Summary : zaptel drivers and utilities
Name : zaptel
Version : 1.4.11
Release : 1
License : GPL
Vendor : Digium
Packager : Vadim Lebedev at mbdsys dot com
Group : Applications/Communication
Source : %{name}-%{version}.tar.gz
Source1 : zaptel_rpm_devices.tmpl
Patch1 : zaptel-1.4.11-cross.patch
Patch2 : zaptel-1.4.11-1224687235.patch
BuildRoot : %{_tmppath}/%{name}
Prefix : %{pfx}
%Description
%{summary}
%Prep
%setup
%patch1 -p1
%patch2 -p1
%Build
./configure --prefix=%{_prefix} --host=$CFGHOST --build=%{_build}
PKG_ZAPTEL_PRECONFIG=${PKG_ZAPTEL_PRECONFIG:-zaptel.menuselect.makeopts}
if [ -f "$PLATFORM_PATH/${PKG_ZAPTEL_PRECONFIG}" ]
then
cp $PLATFORM_PATH/$PKG_ZAPTEL_PRECONFIG menuselect.makeopts
else
if [ -f "$CONFIG_DIR/defaults/$PKG_ZAPTEL_PRECONFIG" ]
then
cp "$CONFIG_DIR/defaults/$PKG_ZAPTEL_PRECONFIG" menuselect.makeopts
fi
fi
if [ -n "$PKG_ZAPTEL_WANT_CF" -o -n "$SCB_WANT_CF" ]
then
make menuconfig HOSTCC='/usr/bin/gcc' HOSTCFLAGS='-B/usr/bin'
HOSTLDFLAGS="-B/usr/bin" HOSTLD=/usr/bin/ld HOSTAR=/usr/bin/ar
cp menuselect.makeopts $PLATFORM_PATH/$PKG_ZAPTEL_PRECONFIG
fi
KSRC_DIR=${PKG_KERNEL_PATH_PRECONFIG:-$RPM_BUILD_DIR/linux}
KBOUT="$(eval echo $PKG_KERNEL_KBUILD_PRECONFIG)"
KBOUT=${KBOUT:-$KSRC_DIR}
KCONF=$KBOUT/.config
if grep -q 'CONFIG_PPC_MERGE=y' $KBOUT/.config
then
LINTARCH=powerpc
fi
if [ ! -f $KBOUT/.config ]
then
cat <<TXT
You need a built unpacked kernel source tree in:
$KBOUT
to build kernel modules
TXT
exit 1
fi
if [ -f $KBOUT/include/config/kernel.release ]
then
KVER=`cat $KBOUT/include/config/kernel.release`
else
KVER="`perl -e '$/ = ""; $_ = <>;
m,VERSION\s*=\s*(\d)\s*PATCHLEVEL\s*=\s*(\d+)\s*SUBLEVEL\s*=\s*(\d+)\s*EXTRAVERSION[
\t]*=[ \t]*(\S*),m; print "$1.$2.$3$4"' $KSRC_DIR/Makefile`"
fi
make HOSTCC='/usr/bin/gcc' HOSTCFLAGS='-B/usr/bin' HOSTLDFLAGS="-B/usr/bin"
HOSTLD=/usr/bin/ld HOSTAR=/usr/bin/ar \
KERNEL_INCLUDE=$KBOUT KCONFIG=$KCONF KSRC=$KBOUT KVERS=$KVER
ARCH=$LINTARCH
%Install
rm -rf $RPM_BUILD_ROOT
KSRC_DIR=${PKG_KERNEL_PATH_PRECONFIG:-$RPM_BUILD_DIR/linux}
KBOUT="$(eval echo $PKG_KERNEL_KBUILD_PRECONFIG)"
KBOUT=${KBOUT:-$KSRC_DIR}
KCONF=$KBOUT/.config
if grep -q 'CONFIG_PPC_MERGE=y' $KBOUT/.config
then
LINTARCH=powerpc
fi
if [ ! -f $KBOUT/.config ]
then
cat <<TXT
You need a built unpacked kernel source tree in:
$KBOUT
to build kernel modules
TXT
exit 1
fi
if [ -f $KBOUT/include/config/kernel.release ]
then
KVER=`cat $KBOUT/include/config/kernel.release`
else
KVER="`perl -e '$/ = ""; $_ = <>;
m,VERSION\s*=\s*(\d)\s*PATCHLEVEL\s*=\s*(\d+)\s*SUBLEVEL\s*=\s*(\d+)\s*EXTRAVERSION[
\t]*=[ \t]*(\S*),m; print "$1.$2.$3$4"' $KSRC_DIR/Makefile`"
fi
make install-modules install-programs ARCH=$LINTARCH
DESTDIR=$RPM_BUILD_ROOT/%{pfx} HOSTCC='/usr/bin/gcc' \
HOSTCFLAGS='-B/usr/bin' HOSTLDFLAGS="-B/usr/bin" HOSTLD=/usr/bin/ld
HOSTAR=/usr/bin/ar \
KERNEL_INLUDE=$KBOUT KSRC=$KSRC_DIR KVERS=$KVER ARCH=$LINTARCH
KCONFIG=$KCONF
#sudo make devices ARCH=$LINTARCH DESTDIR=$RPM_BUILD_ROOT/%{pfx}
HOSTCC='/usr/bin/gcc' HOSTCFLAGS='-B/usr/bin' HOSTLDFLAGS="-B/usr/bin"
HOSTLD=/usr/bin/ld HOSTAR=/usr/bin/ar KSRC=$KSRC_DIR KVERS=$KVER ARCH=$LINTARCH
# create the rpm style device nodes
perl -p -e 's,/pfx,/%{pfx},g' %{SOURCE1} > /tmp/rpm_devices
%Clean
rm -rf $RPM_BUILD_ROOT
%Files -f /tmp/rpm_devices
%defattr(-,root,root)
%{pfx}/*
%changelog
* Wed Jul 16 2008 Vadim Lebedev <address@hidden>
- Initial version
- [Ltib] Zaptel enchancements,
Vadim Lebedev <=