[svn-commits] mattf: trunk r2394 - /trunk/wct4xxp/base.c

svn-commits at lists.digium.com svn-commits at lists.digium.com
Wed Apr 4 15:07:04 MST 2007


Author: mattf
Date: Wed Apr  4 17:07:03 2007
New Revision: 2394

URL: http://svn.digium.com/view/zaptel?view=rev&rev=2394
Log:
Make sure we use the fast kernel bitops that are guarunteed atomic.

Modified:
    trunk/wct4xxp/base.c

Modified: trunk/wct4xxp/base.c
URL: http://svn.digium.com/view/zaptel/trunk/wct4xxp/base.c?view=diff&rev=2394&r1=2393&r2=2394
==============================================================================
--- trunk/wct4xxp/base.c (original)
+++ trunk/wct4xxp/base.c Wed Apr  4 17:07:03 2007
@@ -269,9 +269,9 @@
 	int frames_in;
 
 #ifdef VPM_SUPPORT
-	unsigned int dtmfactive;
-	unsigned int dtmfmask;
-	unsigned int dtmfmutemask;
+	unsigned long dtmfactive;
+	unsigned long dtmfmask;
+	unsigned long dtmfmutemask;
 	short dtmfenergy[31];
 	short dtmfdigit[31];
 #endif
@@ -728,11 +728,11 @@
 		if (debug)
 			printk("Got tone %s of '%c' on channel %d of span %d\n",
 				(start ? "START" : "STOP"), tone, channel, span + 1);
-		if ((wc->tspans[span]->dtmfmask & (1 << channel)) && (tone != 'u')) {
+		if (test_bit(channel, &wc->tspans[span]->dtmfmask) && (tone != 'u')) {
 			if (start) {
 				/* The octasic is supposed to mute us, but...  Yah, you
 				   guessed it.  */
-				if (wc->tspans[span]->dtmfmutemask & (1 << channel)) {
+				if (test_bit(channel, &wc->tspans[span]->dtmfmutemask)) {
 					unsigned long flags;
 					struct zt_chan *chan = &wc->tspans[span]->span.chans[channel];
 					int y;
@@ -743,10 +743,10 @@
 					}
 					spin_unlock_irqrestore(&chan->lock, flags);
 				}
-				wc->tspans[span]->dtmfactive |= (1 << channel);
+				set_bit(channel, &wc->tspans[span]->dtmfactive);
 				zt_qevent_lock(&wc->tspans[span]->span.chans[channel], (ZT_EVENT_DTMFDOWN | tone));
 			} else {
-				wc->tspans[span]->dtmfactive &= ~(1 << channel);
+				clear_bit(channel, &wc->tspans[span]->dtmfactive);
 				zt_qevent_lock(&wc->tspans[span]->span.chans[channel], (ZT_EVENT_DTMFUP | tone));
 			}
 		}
@@ -793,15 +793,15 @@
 					energy = ZT_XLAW(energy, ts->chans);
 					ts->dtmfenergy[base] = energy;
 				}
-				ts->dtmfactive |= (1 << base);
+				set_bit(base, &ts->dtmfactive);
 				if (ts->dtmfdigit[base]) {
 					if (ts->dtmfmask & (1 << base))
 						zt_qevent_lock(&ts->span.chans[base], (ZT_EVENT_DTMFUP | ts->dtmfdigit[base]));
 				}
 				ts->dtmfdigit[base] = digit;
-				if (ts->dtmfmask & (1 << base))
+				if (test_bit(base, &ts->dtmfmask))
 					zt_qevent_lock(&ts->span.chans[base], (ZT_EVENT_DTMFDOWN | digit));
-				if (ts->dtmfmutemask & (1 << base)) {
+				if (test_bit(base, &ts->dtmfmutemask)) {
 					/* Mute active receive buffer*/
 					unsigned long flags;
 					struct zt_chan *chan = &ts->span.chans[base];
@@ -837,9 +837,9 @@
 
 				if (!wc->t1e1)
 					base -= 4;
-				ts->dtmfactive &= ~(1 << base);
+				clear_bit(base, &ts->dtmfactive);
 				if (ts->dtmfdigit[base]) {
-					if (ts->dtmfmask & (1 << base))
+					if (test_bit(base, &ts->dtmfmask))
 						zt_qevent_lock(&ts->span.chans[base], (ZT_EVENT_DTMFUP | ts->dtmfdigit[base]));
 				}
 				digit = ts->dtmfdigit[base];
@@ -1152,13 +1152,13 @@
 		if (j && (vpmdtmfsupport == 0))
 			return -ENOSYS;
 		if (j & ZT_TONEDETECT_ON)
-			ts->dtmfmask |= (1 << (chan->chanpos - 1));
+			set_bit(chan->chanpos - 1, &ts->dtmfmask);
 		else
-			ts->dtmfmask &= ~(1 << (chan->chanpos - 1));
+			clear_bit(chan->chanpos - 1, &ts->dtmfmask);
 		if (j & ZT_TONEDETECT_MUTE)
-			ts->dtmfmutemask |= (1 << (chan->chanpos - 1));
+			set_bit(chan->chanpos - 1, &ts->dtmfmutemask);
 		else
-			ts->dtmfmutemask &= ~(1 << (chan->chanpos - 1));
+			clear_bit(chan->chanpos - 1, &ts->dtmfmutemask);
 		if (wc->vpm450m) {
 			channel = (chan->chanpos) << 2;
 			if (!wc->t1e1)
@@ -2165,12 +2165,12 @@
 {
 #ifdef VPM_SUPPORT
 	int y;
-	unsigned int merged;
+	unsigned long merged;
 	merged = ts->dtmfactive & ts->dtmfmutemask;
 	if (merged) {
 		for (y=0;y<ts->span.channels;y++) {
 			/* Mute any DTMFs which are supposed to be muted */
-			if (merged & (1 << y))  {
+			if (test_bit(y, &merged)) {
 				memset(ts->span.chans[y].readchunk, ZT_XLAW(0, (ts->span.chans + y)), ZT_CHUNKSIZE);
 			}
 		}



More information about the svn-commits mailing list