[zaptel-commits] mattf: branch mattf/zaptel-1.4-stackcleanup r4220 - in /team/mattf/zaptel-1.4...

SVN commits to the Zaptel project zaptel-commits at lists.digium.com
Fri May 2 12:28:16 CDT 2008


Author: mattf
Date: Fri May  2 12:28:15 2008
New Revision: 4220

URL: http://svn.digium.com/view/zaptel?view=rev&rev=4220
Log:
Merged revisions 4165-4170,4173,4175-4176,4183-4185,4187,4190-4196,4213,4217 via svnmerge from 
https://origsvn.digium.com/svn/zaptel/branches/1.4

........
r4165 | tzafrir | 2008-04-10 11:15:23 -0500 (Thu, 10 Apr 2008) | 5 lines

Officially bumping xpp version (xpp/.version) to 5566 .

Merged revisions 4164 via svnmerge from 
http://svn.digium.com/svn/zaptel/branches/1.2

........
r4166 | tzafrir | 2008-04-10 13:11:51 -0500 (Thu, 10 Apr 2008) | 2 lines

zaptel_svn_tarball - get a tarball fron an SVN snapshot.

........
r4167 | sruffell | 2008-04-10 16:01:59 -0500 (Thu, 10 Apr 2008) | 2 lines

Fixed typo in makefile which was preventing make from installing the udev rules.

........
r4168 | dbailey | 2008-04-10 17:25:30 -0500 (Thu, 10 Apr 2008) | 3 lines

Correct problem where drivers implementing echocan_with_params was not getting called
to disable the echo canceller

........
r4169 | mattf | 2008-04-11 16:16:47 -0500 (Fri, 11 Apr 2008) | 1 line

Make sure that we disable the echo canceller on the old style echocan() function even if parameters are passed in.
........
r4170 | mattf | 2008-04-11 16:17:55 -0500 (Fri, 11 Apr 2008) | 1 line

Take out part of a commit to the wct4xxp driver that wasn't supposed to go in
........
r4173 | kpfleming | 2008-04-17 07:20:26 -0500 (Thu, 17 Apr 2008) | 6 lines

when processing ZT_SET_DIALPARAMS, don't return an error for out-of-range tone durations, just ignore them (so that applications that don't initialize the entire zt_dialparams structure won't fail to set the ones they do initialize)

(closes issue #12456)
Reported by: fnordian
Tested by: fnordian

........
r4175 | tzafrir | 2008-04-17 09:27:50 -0500 (Thu, 17 Apr 2008) | 5 lines

Avoid a double-free in ztdynamic.c ztdynamic_chanfree.diff from bug #12406 .

Merged revisions 4174 via svnmerge from 
http://svn.digium.com/svn/zaptel/branches/1.2

........
r4176 | jdixon | 2008-04-18 10:19:00 -0500 (Fri, 18 Apr 2008) | 2 lines

Fixed monitoring of zap pseudo channels

........
r4183 | mattf | 2008-04-19 16:54:03 -0500 (Sat, 19 Apr 2008) | 1 line

Partial fix for #9379.  Fixes potential race condition in open and close routines for zaptel devices
........
r4184 | mattf | 2008-04-19 16:56:06 -0500 (Sat, 19 Apr 2008) | 1 line

Remove unintentional svn property addition
........
r4185 | mattf | 2008-04-19 17:05:42 -0500 (Sat, 19 Apr 2008) | 1 line

Fix compiler from complaining
........
r4187 | tzafrir | 2008-04-21 16:27:59 -0500 (Mon, 21 Apr 2008) | 4 lines

Zaptel::Config::Default - don't die if no config file.

(Accidentally left out of the merge from 1.2)

........
r4190 | jdixon | 2008-04-22 17:07:08 -0500 (Tue, 22 Apr 2008) | 2 lines

Fixed problem preventing multiple channels from using multiple CTCSS

........
r4191 | jdixon | 2008-04-22 23:36:22 -0500 (Tue, 22 Apr 2008) | 2 lines

Updated to latest code, fixed bug in serial i/o

........
r4192 | tzafrir | 2008-04-23 04:48:56 -0500 (Wed, 23 Apr 2008) | 2 lines

Bumped into yet another incompatibility.

........
r4193 | tzafrir | 2008-04-23 14:20:53 -0500 (Wed, 23 Apr 2008) | 10 lines

A test for a specific #define in zconfig.h was done by invoking cpp .
Sadly the change of CFLAGS handling in kernel 2.6.24 meant that it is no
longer as easy to invoke cpp on our own. 

Impact: On kernel >= 2.6.24, xpd_bri never got built, even if the
bri_dchan patch was applied.

Fix: use a simpler grep instead. Hopefully noone passes it through other
means. This should hopfully fix issue #12426 .

........
r4194 | sruffell | 2008-04-24 13:17:12 -0500 (Thu, 24 Apr 2008) | 5 lines

Fixes a regression in versions 1.2.25 and 1.4.19 identified by korihor where
the wctdm driver was no longer properly recognizing polarity reversals.

(closes issue #12419)

........
r4195 | qwell | 2008-04-25 13:10:06 -0500 (Fri, 25 Apr 2008) | 1 line

Based on a comment made by moy in #asterisk-dev, and the surrounding code in these functions, I believe that this is what was actually intended in r4130.
........
r4196 | qwell | 2008-04-25 15:47:07 -0500 (Fri, 25 Apr 2008) | 7 lines

Since MF R2 tones are generated continuously, we need to not set the dialing status.

(closes issue #12526)
Reported by: moy
Patches:
      zaptel-mf-dialing-rev4195.patch uploaded by moy (license 222)

........
r4213 | twilson | 2008-05-01 11:46:44 -0500 (Thu, 01 May 2008) | 2 lines

Allow $(ARCH) to be overridden and pass on through $(KMAKE)

........
r4217 | qwell | 2008-05-01 14:37:07 -0500 (Thu, 01 May 2008) | 7 lines

Clarify a message.  Some hardware doesn't provide timing, so this could be confusing.

(closes issue #12459)
Reported by: panderson
Patches:
      zaptel.init.patch uploaded by panderson (license 469)

........

Added:
    team/mattf/zaptel-1.4-stackcleanup/build_tools/zaptel_svn_tarball
      - copied unchanged from r4217, branches/1.4/build_tools/zaptel_svn_tarball
Modified:
    team/mattf/zaptel-1.4-stackcleanup/   (props changed)
    team/mattf/zaptel-1.4-stackcleanup/Makefile
    team/mattf/zaptel-1.4-stackcleanup/README
    team/mattf/zaptel-1.4-stackcleanup/kernel/pciradio.c
    team/mattf/zaptel-1.4-stackcleanup/kernel/wctdm.c
    team/mattf/zaptel-1.4-stackcleanup/kernel/xpp/.version
    team/mattf/zaptel-1.4-stackcleanup/kernel/xpp/Kbuild
    team/mattf/zaptel-1.4-stackcleanup/kernel/xpp/utils/zconf/Zaptel/Config/Defaults.pm
    team/mattf/zaptel-1.4-stackcleanup/kernel/zaptel-base.c
    team/mattf/zaptel-1.4-stackcleanup/kernel/zaptel.h
    team/mattf/zaptel-1.4-stackcleanup/kernel/ztdynamic.c
    team/mattf/zaptel-1.4-stackcleanup/zaptel.init
    team/mattf/zaptel-1.4-stackcleanup/ztcfg.c

Propchange: team/mattf/zaptel-1.4-stackcleanup/
------------------------------------------------------------------------------
Binary property 'branch-1.2-merged' - no diff available.

Propchange: team/mattf/zaptel-1.4-stackcleanup/
------------------------------------------------------------------------------
--- svnmerge-integrated (original)
+++ svnmerge-integrated Fri May  2 12:28:15 2008
@@ -1,1 +1,1 @@
-/branches/1.4:1-4150
+/branches/1.4:1-4219

Modified: team/mattf/zaptel-1.4-stackcleanup/Makefile
URL: http://svn.digium.com/view/zaptel/team/mattf/zaptel-1.4-stackcleanup/Makefile?view=diff&rev=4220&r1=4219&r2=4220
==============================================================================
--- team/mattf/zaptel-1.4-stackcleanup/Makefile (original)
+++ team/mattf/zaptel-1.4-stackcleanup/Makefile Fri May  2 12:28:15 2008
@@ -18,7 +18,9 @@
 PWD:=$(shell pwd)
 endif
 
+ifeq ($(ARCH),)
 ARCH:=$(shell uname -m | sed -e s/i.86/i386/)
+endif
 
 ifeq ($(DEB_HOST_GNU_TYPE),)
 UNAME_M:=$(shell uname -m)
@@ -190,7 +192,7 @@
   UNAME_M=$(UNAME_M) \
   BUILD_TOPDIR_MODULES="$(BUILD_TOPDIR_MODULES)" BUILD_SUBDIR_MODULES="$(BUILD_SUBDIR_MODULES)"
 else
-KMAKE  = $(MAKE) -C $(KSRC) SUBDIRS=$(PWD)/kernel \
+KMAKE  = $(MAKE) -C $(KSRC) ARCH=$(ARCH) SUBDIRS=$(PWD)/kernel \
   HOTPLUG_FIRMWARE=$(HOTPLUG_FIRMWARE) KBUILD_OBJ_M="$(KBUILD_OBJ_M)"
 endif
 KMAKE_INST = $(KMAKE) \
@@ -504,11 +506,11 @@
 		N=$$[$$N+1]; \
 	done
 else # DYNFS
-  ifneq (yes,$(UDEVRULES))
+  ifneq (yes,$(UDEVRULES)) #!UDEVRULES
+	@echo "**** Dynamic filesystem detected -- not creating device nodes"
+  else # UDEVRULES
 	install -d $(DESTDIR)/etc/udev/rules.d
 	build_tools/genudevrules > $(DESTDIR)/etc/udev/rules.d/zaptel.rules
-  else # !UDEVRULES
-	@echo "**** Dynamic filesystem detected -- not creating device nodes"
   endif
 endif
 

Modified: team/mattf/zaptel-1.4-stackcleanup/README
URL: http://svn.digium.com/view/zaptel/team/mattf/zaptel-1.4-stackcleanup/README?view=diff&rev=4220&r1=4219&r2=4220
==============================================================================
--- team/mattf/zaptel-1.4-stackcleanup/README (original)
+++ team/mattf/zaptel-1.4-stackcleanup/README Fri May  2 12:28:15 2008
@@ -644,8 +644,14 @@
 appear slightly confusing in the code, but it is useful for writing code
 that works with both versions of Zaptel. 
 
+
 Past Incompatibilities
 ^^^^^^^^^^^^^^^^^^^^^^
+
+.Zaptel 1.4.10:
+* Semantics of ZT_LOADZONE. Using newer ztcfg with older modules will
+  yield -EINVAL with the kernel message 'Invalid tone (96) defined'
+
 .Zaptel 1.4.8:
 * ZT_GET_PARAMS_V1
 * ZT_SET_PARAMS_V1

Modified: team/mattf/zaptel-1.4-stackcleanup/kernel/pciradio.c
URL: http://svn.digium.com/view/zaptel/team/mattf/zaptel-1.4-stackcleanup/kernel/pciradio.c?view=diff&rev=4220&r1=4219&r2=4220
==============================================================================
--- team/mattf/zaptel-1.4-stackcleanup/kernel/pciradio.c (original)
+++ team/mattf/zaptel-1.4-stackcleanup/kernel/pciradio.c Fri May  2 12:28:15 2008
@@ -1355,8 +1355,9 @@
 				stack.p.index = rad->rxindex;
 				break;
 			}
-			/* wait for done only if in SERIAL_ASCII mode */
-			if (rad->remmode[chan->chanpos - 1] == ZT_RADPAR_REM_SERIAL_ASCII)
+			/* wait for done if in SERIAL_ASCII mode, or if no Rx aftwards */
+			if ((rad->remmode[chan->chanpos - 1] == ZT_RADPAR_REM_SERIAL_ASCII) ||
+				(!stack.p.data))
 			{			
 				/* wait for TX to be done if not already */
 				while(rad->txlen && (rad->txindex < rad->txlen))

Modified: team/mattf/zaptel-1.4-stackcleanup/kernel/wctdm.c
URL: http://svn.digium.com/view/zaptel/team/mattf/zaptel-1.4-stackcleanup/kernel/wctdm.c?view=diff&rev=4220&r1=4219&r2=4220
==============================================================================
--- team/mattf/zaptel-1.4-stackcleanup/kernel/wctdm.c (original)
+++ team/mattf/zaptel-1.4-stackcleanup/kernel/wctdm.c Fri May  2 12:28:15 2008
@@ -909,18 +909,18 @@
 				fxo->battdebounce = battdebounce / MS_PER_CHECK_HOOK;
 			}
 		}
-
-		if (fxo->lastpol >= 0) {
-			if (b < 0) {
-				fxo->lastpol = -1;
-				fxo->polaritydebounce = POLARITY_DEBOUNCE / MS_PER_CHECK_HOOK;
-			}
-		} 
-		if (fxo->lastpol <= 0) {
-			if (b > 0) {
-				fxo->lastpol = 1;
-				fxo->polaritydebounce = POLARITY_DEBOUNCE / MS_PER_CHECK_HOOK;
-			}
+	}
+
+	if (fxo->lastpol >= 0) {
+		if (b < 0) {
+			fxo->lastpol = -1;
+			fxo->polaritydebounce = POLARITY_DEBOUNCE / MS_PER_CHECK_HOOK;
+		}
+	} 
+	if (fxo->lastpol <= 0) {
+		if (b > 0) {
+			fxo->lastpol = 1;
+			fxo->polaritydebounce = POLARITY_DEBOUNCE / MS_PER_CHECK_HOOK;
 		}
 	}
 

Modified: team/mattf/zaptel-1.4-stackcleanup/kernel/xpp/.version
URL: http://svn.digium.com/view/zaptel/team/mattf/zaptel-1.4-stackcleanup/kernel/xpp/.version?view=diff&rev=4220&r1=4219&r2=4220
==============================================================================
--- team/mattf/zaptel-1.4-stackcleanup/kernel/xpp/.version (original)
+++ team/mattf/zaptel-1.4-stackcleanup/kernel/xpp/.version Fri May  2 12:28:15 2008
@@ -1,1 +1,1 @@
-trunk-r5512
+trunk-r5566

Modified: team/mattf/zaptel-1.4-stackcleanup/kernel/xpp/Kbuild
URL: http://svn.digium.com/view/zaptel/team/mattf/zaptel-1.4-stackcleanup/kernel/xpp/Kbuild?view=diff&rev=4220&r1=4219&r2=4220
==============================================================================
--- team/mattf/zaptel-1.4-stackcleanup/kernel/xpp/Kbuild (original)
+++ team/mattf/zaptel-1.4-stackcleanup/kernel/xpp/Kbuild Fri May  2 12:28:15 2008
@@ -20,7 +20,7 @@
 
 obj-m		+= xpp.o xpd_fxs.o xpd_fxo.o xpd_pri.o
 
-HAS_BRISTUFF		:= $(shell cpp $(CPPFLAGS) -dM $(ZAP_KERNEL)/zconfig.h | sed -n 's/^.*CONFIG_ZAPATA_BRI_DCHANS/y/p')
+HAS_BRISTUFF	:= $(shell grep '^[[:space:]]*\#[[:space:]]*define[[:space:]]\+CONFIG_ZAPATA_BRI_DCHANS\>' $(ZAP_KERNEL)/zconfig.h)
 
 # Build only supported modules
 ifneq	(,$(filter y m,$(CONFIG_USB)))

Modified: team/mattf/zaptel-1.4-stackcleanup/kernel/xpp/utils/zconf/Zaptel/Config/Defaults.pm
URL: http://svn.digium.com/view/zaptel/team/mattf/zaptel-1.4-stackcleanup/kernel/xpp/utils/zconf/Zaptel/Config/Defaults.pm?view=diff&rev=4220&r1=4219&r2=4220
==============================================================================
--- team/mattf/zaptel-1.4-stackcleanup/kernel/xpp/utils/zconf/Zaptel/Config/Defaults.pm (original)
+++ team/mattf/zaptel-1.4-stackcleanup/kernel/xpp/utils/zconf/Zaptel/Config/Defaults.pm Fri May  2 12:28:15 2008
@@ -46,7 +46,9 @@
 			}
 		}
 	}
-	die "No default_file" unless $default_file;
+	if (! $default_file) {
+		return ("", ());
+	}
 	my %vars = Zaptel::Config::Defaults::do_source($default_file, @vars);
 	return ($default_file, %vars);
 }

Modified: team/mattf/zaptel-1.4-stackcleanup/kernel/zaptel-base.c
URL: http://svn.digium.com/view/zaptel/team/mattf/zaptel-1.4-stackcleanup/kernel/zaptel-base.c?view=diff&rev=4220&r1=4219&r2=4220
==============================================================================
--- team/mattf/zaptel-1.4-stackcleanup/kernel/zaptel-base.c (original)
+++ team/mattf/zaptel-1.4-stackcleanup/kernel/zaptel-base.c Fri May  2 12:28:15 2008
@@ -995,6 +995,22 @@
 }
 
 
+static inline int hw_echocancel_off(struct zt_chan *chan)
+{
+	struct zt_echocanparams ecp;
+	
+	int ret = -ENODEV;
+	if (chan->span) {
+		if (chan->span->echocan) {
+			ret = chan->span->echocan(chan, 0);
+		} else if (chan->span->echocan_with_params) {
+			memset(&ecp, 0, sizeof(ecp));  /* Sets tap length to 0 */
+			ret = chan->span->echocan_with_params(chan, &ecp, NULL);
+		}
+	}
+	return ret;
+}
+
 static void close_channel(struct zt_chan *chan)
 {
 	unsigned long flags;
@@ -1074,8 +1090,7 @@
 
 	spin_unlock_irqrestore(&chan->lock, flags);
 
-	if (chan->span && chan->span->echocan)
-		chan->span->echocan(chan, 0);
+	hw_echocancel_off(chan);
 
 	if (rxgain)
 		kfree(rxgain);
@@ -1199,7 +1214,6 @@
 		}
 	} else if (chan->digitmode == DIGIT_MODE_MFR2_FWD) {
 		if ((tone >= ZT_TONE_MFR2_FWD_BASE) && (tone <= ZT_TONE_MFR2_FWD_MAX)) {
-			chan->dialing = 1;
 			res = 0;
 			tone -= ZT_TONE_MFR2_FWD_BASE;
 			if (chan->curzone) {
@@ -1220,7 +1234,6 @@
 		}
 	} else if (chan->digitmode == DIGIT_MODE_MFR2_REV) {
 		if ((tone >= ZT_TONE_MFR2_REV_BASE) && (tone <= ZT_TONE_MFR2_REV_MAX)) {
-			chan->dialing = 1;
 			res = 0;
 			tone -= ZT_TONE_MFR2_REV_BASE;
 			if (chan->curzone) {
@@ -2376,8 +2389,7 @@
 	spin_unlock_irqrestore(&chan->lock, flags);
 	set_tone_zone(chan, -1);
 
-	if (chan->span && chan->span->echocan)
-		chan->span->echocan(chan, 0);
+	hw_echocancel_off(chan);
 
 	if (rxgain)
 		kfree(rxgain);
@@ -2447,18 +2459,20 @@
 
 	if (chans[unit] && chans[unit]->sig) {
 		/* Make sure we're not already open, a net device, or a slave device */
-		if (chans[unit]->flags & ZT_FLAG_OPEN) 
-			res = -EBUSY;
-		else if (chans[unit]->flags & ZT_FLAG_NETDEV)
+		if (chans[unit]->flags & ZT_FLAG_NETDEV)
 			res = -EBUSY;
 		else if (chans[unit]->master != chans[unit])
 			res = -EBUSY;
 		else if ((chans[unit]->sig & __ZT_SIG_DACS) == __ZT_SIG_DACS)
 			res = -EBUSY;
-		else {
+		else if (!test_and_set_bit(ZT_FLAGBIT_OPEN, &chans[unit]->flags)) {
 			unsigned long flags;
-			/* Assume everything is going to be okay */
 			res = initialize_channel(chans[unit]);
+			if (res) {
+				/* Reallocbufs must have failed */
+				clear_bit(ZT_FLAGBIT_OPEN, &chans[unit]->flags);
+				return res;
+			}
 			spin_lock_irqsave(&chans[unit]->lock, flags);
 			if (chans[unit]->flags & ZT_FLAG_PSEUDO) 
 				chans[unit]->flags |= ZT_FLAG_AUDIO;
@@ -2471,13 +2485,14 @@
 				if (inc)
 					MOD_INC_USE_COUNT;
 #endif					
-				chans[unit]->flags |= ZT_FLAG_OPEN;
 				spin_unlock_irqrestore(&chans[unit]->lock, flags);
 			} else {
 				spin_unlock_irqrestore(&chans[unit]->lock, flags);
 				close_channel(chans[unit]);
-			}
-		}
+				clear_bit(ZT_FLAGBIT_OPEN, &chans[unit]->flags);
+			}
+		} else
+			res = -EBUSY;
 	} else
 		res = -ENXIO;
 	return res;
@@ -2486,15 +2501,18 @@
 static int zt_specchan_release(struct inode *node, struct file *file, int unit)
 {
 	int res=0;
+	unsigned long flags;
+
 	if (chans[unit]) {
-		unsigned long flags;
+		/* Chan lock protects contents against potentially non atomic accesses.
+		 * So if the pointer setting is not atomic, we should protect */
 		spin_lock_irqsave(&chans[unit]->lock, flags);
-		chans[unit]->flags &= ~ZT_FLAG_OPEN;
+		chans[unit]->file = NULL;
 		spin_unlock_irqrestore(&chans[unit]->lock, flags);
-		chans[unit]->file = NULL;
 		close_channel(chans[unit]);
 		if (chans[unit]->span && chans[unit]->span->close)
 			res = chans[unit]->span->close(chans[unit]);
+		clear_bit(ZT_FLAGBIT_OPEN, &chans[unit]->flags);
 	} else
 		res = -ENXIO;
 #ifndef LINUX26
@@ -2981,7 +2999,7 @@
 		case 'C':
 		case 'D':
 		case 'E':
-		case 'O':
+		case 'F':
 			tone_index = ZT_TONE_MFR2_FWD_10 + (digit - 'A');
 			break;
 		case 'W':
@@ -3038,7 +3056,7 @@
 			chan->digitmode = DIGIT_MODE_MFR1;
 			chan->tonep = 0;
 			break;
-		case 'F':
+		case 'O':
 			chan->digitmode = DIGIT_MODE_MFR2_FWD;
 			chan->tonep = 0;
 			break;
@@ -3523,7 +3541,7 @@
 		printk(KERN_INFO "Dump of Zaptel Channel %d (%s,%d,%d):\n\n",j,
 			mychan->name,mychan->channo,mychan->chanpos);
 		printk(KERN_INFO "flags: %x hex, writechunk: %08lx, readchunk: %08lx\n",
-			mychan->flags, (long) mychan->writechunk, (long) mychan->readchunk);
+			(unsigned int) mychan->flags, (long) mychan->writechunk, (long) mychan->readchunk);
 		printk(KERN_INFO "rxgain: %08lx, txgain: %08lx, gainalloc: %d\n",
 			(long) mychan->rxgain, (long)mychan->txgain, mychan->gainalloc);
 		printk(KERN_INFO "span: %08lx, sig: %x hex, sigcap: %x hex\n",
@@ -3914,14 +3932,16 @@
 
 		if (copy_from_user(&tdp, (struct zt_dialparams *) data, sizeof(tdp)))
 			return -EFAULT;
-		if ((tdp.dtmf_tonelen > 4000) || (tdp.dtmf_tonelen < 10))
-			return -EINVAL;
-		if ((tdp.mfv1_tonelen > 4000) || (tdp.mfv1_tonelen < 10))
-			return -EINVAL;
-		if ((tdp.mfr2_tonelen > 4000) || (tdp.mfr2_tonelen < 10))
-			return -EINVAL;
-
-		global_dialparams = tdp;
+
+		if ((tdp.dtmf_tonelen <= 4000) || (tdp.dtmf_tonelen >= 10)) {
+			global_dialparams.dtmf_tonelen = tdp.dtmf_tonelen;
+		}
+		if ((tdp.mfv1_tonelen <= 4000) || (tdp.mfv1_tonelen >= 10)) {
+			global_dialparams.mfv1_tonelen = tdp.mfv1_tonelen;
+		}
+		if ((tdp.mfr2_tonelen <= 4000) || (tdp.mfr2_tonelen >= 10)) {
+			global_dialparams.mfr2_tonelen = tdp.mfr2_tonelen;
+		}
 
 		/* update the lengths in all currently loaded zones */
 		write_lock(&zone_lock);
@@ -3932,27 +3952,27 @@
 				continue;
 
 			for (i = 0; i < sizeof(z->dtmf) / sizeof(z->dtmf[0]); i++) {
-				z->dtmf[i].tonesamples = tdp.dtmf_tonelen * ZT_CHUNKSIZE;
+				z->dtmf[i].tonesamples = global_dialparams.dtmf_tonelen * ZT_CHUNKSIZE;
 			}
 
 			/* for MFR1, we only adjust the length of the digits */
 			for (i = ZT_TONE_MFR1_0; i <= ZT_TONE_MFR1_9; i++) {
-				z->mfr1[i - ZT_TONE_MFR1_BASE].tonesamples = tdp.mfv1_tonelen * ZT_CHUNKSIZE;
+				z->mfr1[i - ZT_TONE_MFR1_BASE].tonesamples = global_dialparams.mfv1_tonelen * ZT_CHUNKSIZE;
 			}
 
 			for (i = 0; i < sizeof(z->mfr2_fwd) / sizeof(z->mfr2_fwd[0]); i++) {
-				z->mfr2_fwd[i].tonesamples = tdp.mfr2_tonelen * ZT_CHUNKSIZE;
+				z->mfr2_fwd[i].tonesamples = global_dialparams.mfr2_tonelen * ZT_CHUNKSIZE;
 			}
 
 			for (i = 0; i < sizeof(z->mfr2_rev) / sizeof(z->mfr2_rev[0]); i++) {
-				z->mfr2_rev[i].tonesamples = tdp.mfr2_tonelen * ZT_CHUNKSIZE;
+				z->mfr2_rev[i].tonesamples = global_dialparams.mfr2_tonelen * ZT_CHUNKSIZE;
 			}
 		}
 		write_unlock(&zone_lock);
 
-		dtmf_silence.tonesamples = tdp.dtmf_tonelen * ZT_CHUNKSIZE;
-		mfr1_silence.tonesamples = tdp.mfv1_tonelen * ZT_CHUNKSIZE;
-		mfr2_silence.tonesamples = tdp.mfr2_tonelen * ZT_CHUNKSIZE;
+		dtmf_silence.tonesamples = global_dialparams.dtmf_tonelen * ZT_CHUNKSIZE;
+		mfr1_silence.tonesamples = global_dialparams.mfv1_tonelen * ZT_CHUNKSIZE;
+		mfr2_silence.tonesamples = global_dialparams.mfr2_tonelen * ZT_CHUNKSIZE;
 
 		break;
 	}
@@ -4634,8 +4654,7 @@
 		chan->echolastupdate = 0;
 		chan->echotimer = 0;
 		spin_unlock_irqrestore(&chan->lock, flags);
-		if (chan->span && chan->span->echocan)
-			chan->span->echocan(chan, 0);
+		hw_echocancel_off(chan);
 		if (tec)
 			echo_can_free(tec);
 
@@ -4673,14 +4692,10 @@
 	/* attempt to use the span's echo canceler; fall back to built-in
 	   if it fails (but not if an error occurs) */
 	if (chan->span) {
-		if (ecp->param_count) {
-			if (chan->span->echocan_with_params)
-				ret = chan->span->echocan_with_params(chan, ecp, params);
-		} else if (chan->span->echocan) {
+		if (chan->span->echocan_with_params)
+			ret = chan->span->echocan_with_params(chan, ecp, params);
+		else if (chan->span->echocan)
 			ret = chan->span->echocan(chan, ecp->tap_length);
-		} else if (chan->span->echocan_with_params) {
-			ret = chan->span->echocan_with_params(chan, ecp, NULL);
-		}
 	}
 	
 	if (ret == -ENODEV) {
@@ -4790,8 +4805,7 @@
 			/* Disable any native echo cancellation as well */
 			spin_unlock_irqrestore(&chan->lock, flags);
 
-			if (chan->span && chan->span->echocan)
-				chan->span->echocan(chan, 0);
+			hw_echocancel_off(chan);
 
 			if (rxgain)
 				kfree(rxgain);
@@ -4843,8 +4857,8 @@
 					chan->gainalloc = 0;
 					chan->flags &= ~ZT_FLAG_AUDIO;
 					chan->flags |= (ZT_FLAG_PPP | ZT_FLAG_HDLC | ZT_FLAG_FCS);
-					if (chan->span && chan->span->echocan)
-						chan->span->echocan(chan, 0);
+					hw_echocancel_off(chan);
+					
 					if (tec)
 						echo_can_free(tec);
 				} else
@@ -5173,6 +5187,11 @@
 		span->deflaw = ZT_LAW_MULAW;
 	}
 
+	if (span->echocan && span->echocan_with_params) {
+		printk("zaptel: Span %s implements both echocan and echocan_with_params functions, preserving only echocan_with_params, please fix driver!\n", span->name);
+		span->echocan = NULL;
+	}
+
 	for (x=0;x<span->channels;x++) {
 		span->chans[x].span = span;
 		zt_chan_reg(&span->chans[x]); 
@@ -5594,8 +5613,11 @@
 					SCSS(ms->conflast, conf_sums[ms->_confn]);
 					/* Really add in new value */
 					ACSS(conf_sums[ms->_confn], ms->conflast);
-				} else memset(ms->conflast, 0, ZT_CHUNKSIZE * sizeof(short));
-				memcpy(getlin, ms->getlin, ZT_CHUNKSIZE * sizeof(short));
+					memcpy(ms->getlin, getlin, ZT_CHUNKSIZE * sizeof(short));
+				} else {
+					memset(ms->conflast, 0, ZT_CHUNKSIZE * sizeof(short));
+					memcpy(getlin, ms->getlin, ZT_CHUNKSIZE * sizeof(short));
+				}
 				txb[0] = ZT_LIN2X(0, ms);
 				memset(txb + 1, txb[0], ZT_CHUNKSIZE - 1);
 				break;
@@ -6571,7 +6593,7 @@
 				/* Convert back */
 				for(x=0;x<ZT_CHUNKSIZE;x++)
 					rxb[x] = ZT_LIN2X(putlin[x], ms);
-				memcpy(ss->getlin, putlin, ZT_CHUNKSIZE * sizeof(short));
+				memcpy(ss->putlin, putlin, ZT_CHUNKSIZE * sizeof(short));
 				break;
 			   }
 			/* fall through */

Modified: team/mattf/zaptel-1.4-stackcleanup/kernel/zaptel.h
URL: http://svn.digium.com/view/zaptel/team/mattf/zaptel-1.4-stackcleanup/kernel/zaptel.h?view=diff&rev=4220&r1=4219&r2=4220
==============================================================================
--- team/mattf/zaptel-1.4-stackcleanup/kernel/zaptel.h (original)
+++ team/mattf/zaptel-1.4-stackcleanup/kernel/zaptel.h Fri May  2 12:28:15 2008
@@ -1318,7 +1318,7 @@
 	/* Specified by zaptel */
 	int channo;			/* Zaptel Channel number */
 	int chanpos;
-	int flags;
+	unsigned long flags;
 	long rxp1;
 	long rxp2;
 	long rxp3;
@@ -1529,7 +1529,6 @@
 	ZT_RXSIG_INITIAL
 } zt_rxsig_t;
 	
-
 /* Span flags */
 #define ZT_FLAG_REGISTERED		(1 << 0)
 #define ZT_FLAG_RUNNING			(1 << 1)
@@ -1555,6 +1554,30 @@
 #define ZT_FLAG_SIGFREEZE		(1 << 16)	/* Freeze signalling */
 #define ZT_FLAG_NOSTDTXRX		(1 << 17)	/* Do NOT do standard transmit and receive on every interrupt */
 #define ZT_FLAG_LOOPED			(1 << 18)	/* Loopback the receive data from the channel to the transmit */
+
+/* This is a redefinition of the flags from above to allow use of the kernel atomic bit testing and changing routines.
+ * See the above descriptions for ZT_FLAG_....  for documentation about function. */
+enum {
+	ZT_FLAGBIT_REGISTERED = 0,
+	ZT_FLAGBIT_RUNNING    = 1,
+	ZT_FLAGBIT_RBS	      = 12,
+	ZT_FLAGBIT_DTMFDECODE = 2,
+	ZT_FLAGBIT_MFDECODE   = 3,
+	ZT_FLAGBIT_ECHOCANCEL = 4,
+	ZT_FLAGBIT_HDLC	      = 5,
+	ZT_FLAGBIT_NETDEV     = 6,
+	ZT_FLAGBIT_PSEUDO     = 7,
+	ZT_FLAGBIT_CLEAR      = 8,
+	ZT_FLAGBIT_AUDIO      = 9,
+	ZT_FLAGBIT_OPEN	      = 10,
+	ZT_FLAGBIT_FCS	      = 11,
+	ZT_FLAGBIT_LINEAR     = 13,
+	ZT_FLAGBIT_PPP	      = 14,
+	ZT_FLAGBIT_T1PPP      = 15,
+	ZT_FLAGBIT_SIGFREEZE  = 16,
+	ZT_FLAGBIT_NOSTDTXRX  = 17,
+	ZT_FLAGBIT_LOOPED     = 18,
+};
 
 struct zt_span {
 	spinlock_t lock;

Modified: team/mattf/zaptel-1.4-stackcleanup/kernel/ztdynamic.c
URL: http://svn.digium.com/view/zaptel/team/mattf/zaptel-1.4-stackcleanup/kernel/ztdynamic.c?view=diff&rev=4220&r1=4219&r2=4220
==============================================================================
--- team/mattf/zaptel-1.4-stackcleanup/kernel/ztdynamic.c (original)
+++ team/mattf/zaptel-1.4-stackcleanup/kernel/ztdynamic.c Fri May  2 12:28:15 2008
@@ -433,7 +433,7 @@
 		kfree(z->msgbuf);
 
 	/* Free channels */
-	if (z->chans);
+	if (z->chans)
 		vfree(z->chans);
 	/* Free z */
 	kfree(z);

Modified: team/mattf/zaptel-1.4-stackcleanup/zaptel.init
URL: http://svn.digium.com/view/zaptel/team/mattf/zaptel-1.4-stackcleanup/zaptel.init?view=diff&rev=4220&r1=4219&r2=4220
==============================================================================
--- team/mattf/zaptel-1.4-stackcleanup/zaptel.init (original)
+++ team/mattf/zaptel-1.4-stackcleanup/zaptel.init Fri May  2 12:28:15 2008
@@ -200,7 +200,7 @@
 	xpp_startup
 	
 	if [ ! -e /proc/zaptel/1 ]; then
-		echo "No functioning zap hardware found in /proc/zaptel, loading ztdummy"
+		echo "No hardware timing source found in /proc/zaptel, loading ztdummy"
 		modprobe ztdummy 2> /dev/null
 	fi
 

Modified: team/mattf/zaptel-1.4-stackcleanup/ztcfg.c
URL: http://svn.digium.com/view/zaptel/team/mattf/zaptel-1.4-stackcleanup/ztcfg.c?view=diff&rev=4220&r1=4219&r2=4220
==============================================================================
--- team/mattf/zaptel-1.4-stackcleanup/ztcfg.c (original)
+++ team/mattf/zaptel-1.4-stackcleanup/ztcfg.c Fri May  2 12:28:15 2008
@@ -1018,6 +1018,7 @@
 	int x,i,n;
 	struct zt_radio_param p;
 
+	toneindex = 1;
 	bzero(chans, sizeof(chans));
 	res = rad_apply_channels(chans, args);
 	if (res <= 0)




More information about the zaptel-commits mailing list