[svn-commits] sruffell: branch linux/sruffell/chan_list r9343 - /linux/team/sruffell/chan_l...
SVN commits to the Digium repositories
svn-commits at lists.digium.com
Fri Sep 17 14:11:51 CDT 2010
Author: sruffell
Date: Fri Sep 17 14:11:41 2010
New Revision: 9343
URL: http://svnview.digium.com/svn/dahdi?view=rev&rev=9343
Log:
dahdi: Group all conditions for skipping channel receive together.
Streamlines the function a bit by grouping the three conditions that
would cause the channel receive to be completely skipped.
Modified:
linux/team/sruffell/chan_list/drivers/dahdi/dahdi-base.c
Modified: linux/team/sruffell/chan_list/drivers/dahdi/dahdi-base.c
URL: http://svnview.digium.com/svn/dahdi/linux/team/sruffell/chan_list/drivers/dahdi/dahdi-base.c?view=diff&rev=9343&r1=9342&r2=9343
==============================================================================
--- linux/team/sruffell/chan_list/drivers/dahdi/dahdi-base.c (original)
+++ linux/team/sruffell/chan_list/drivers/dahdi/dahdi-base.c Fri Sep 17 14:11:41 2010
@@ -1183,7 +1183,7 @@
/* Pull a DAHDI_CHUNKSIZE piece off the queue. Returns
0 on success or -1 on failure. If failed, provides
silence */
-static int __buf_pull(struct confq *q, u_char *data, struct dahdi_chan *c, char *label)
+static int __buf_pull(struct confq *q, u_char *data, struct dahdi_chan *c)
{
int oldoutbuf = q->outbuf;
/* Ain't nuffin to read */
@@ -1254,7 +1254,7 @@
#endif
/* Push something onto the queue, or assume what
is there is valid if data is NULL */
-static int __buf_push(struct confq *q, u_char *data, char *label)
+static int __buf_push(struct confq *q, u_char *data)
{
int oldinbuf = q->inbuf;
if (q->inbuf < 0) {
@@ -8362,7 +8362,7 @@
#endif
if (chan->confmode) {
/* Pull queued data off the conference */
- __buf_pull(&chan->confout, chan->writechunk, chan, "dahdi_real_transmit");
+ __buf_pull(&chan->confout, chan->writechunk, chan);
} else {
__dahdi_transmit_chunk(chan, chan->writechunk);
}
@@ -8448,7 +8448,7 @@
#endif
if (chan->confmode) {
/* Load into queue if we have space */
- __buf_push(&chan->confin, chan->readchunk, "dahdi_real_receive");
+ __buf_push(&chan->confin, chan->readchunk);
} else {
__dahdi_receive_chunk(chan, chan->readchunk);
}
@@ -8565,10 +8565,8 @@
spin_lock(&chan->lock);
data = __buf_peek(&chan->confin);
__dahdi_receive_chunk(chan, data);
- if (data) {
- __buf_pull(&chan->confin, NULL, chan,
- "confreceive");
- }
+ if (data)
+ __buf_pull(&chan->confin, NULL, chan);
spin_unlock(&chan->lock);
}
}
@@ -8619,10 +8617,8 @@
spin_lock(&chan->lock);
data = __buf_pushpeek(&chan->confout);
__dahdi_transmit_chunk(chan, data);
- if (data) {
- __buf_push(&chan->confout, NULL,
- "conftransmit");
- }
+ if (data)
+ __buf_push(&chan->confout, NULL);
spin_unlock(&chan->lock);
}
#ifdef DAHDI_SYNC_TICK
@@ -8770,6 +8766,13 @@
}
}
+static inline bool should_skip_receive(const struct dahdi_chan *const chan)
+{
+ return (unlikely(chan->flags & DAHDI_FLAG_NOSTDTXRX) ||
+ (chan->master != chan) ||
+ is_chan_dacsed(chan));
+}
+
int dahdi_receive(struct dahdi_span *span)
{
unsigned long flags;
@@ -8780,68 +8783,62 @@
#endif
for (x = 0; x < span->channels; x++) {
struct dahdi_chan *const chan = span->chans[x];
+
spin_lock_irqsave(&chan->lock, flags);
- if (unlikely(chan->flags & DAHDI_FLAG_NOSTDTXRX)) {
+ if (should_skip_receive(chan)) {
spin_unlock_irqrestore(&chan->lock, flags);
continue;
}
- if (chan->master == chan) {
- if (is_chan_dacsed(chan)) {
- /* this channel is in DACS mode, there is nothing to do here */
- spin_unlock_irqrestore(&chan->lock, flags);
- continue;
- } else if (chan->nextslave) {
- __receive_from_slaves(chan);
- } else {
- /* Process a normal channel */
- __dahdi_real_receive(chan);
+
+ if (chan->nextslave) {
+ __receive_from_slaves(chan);
+ } else {
+ /* Process a normal channel */
+ __dahdi_real_receive(chan);
+ }
+ if (chan->itimer) {
+ chan->itimer -= DAHDI_CHUNKSIZE;
+ if (chan->itimer <= 0)
+ rbs_itimer_expire(chan);
+ }
+ if (chan->ringdebtimer)
+ chan->ringdebtimer--;
+ if (chan->sig & __DAHDI_SIG_FXS) {
+ if (chan->rxhooksig == DAHDI_RXSIG_RING)
+ chan->ringtrailer = DAHDI_RINGTRAILER;
+ else if (chan->ringtrailer) {
+ chan->ringtrailer -= DAHDI_CHUNKSIZE;
+ /* See if RING trailer is expired */
+ if (!chan->ringtrailer && !chan->ringdebtimer)
+ __qevent(chan, DAHDI_EVENT_RINGOFFHOOK);
}
- if (chan->itimer) {
- chan->itimer -= DAHDI_CHUNKSIZE;
- if (chan->itimer <= 0)
- rbs_itimer_expire(chan);
- }
- if (chan->ringdebtimer)
- chan->ringdebtimer--;
- if (chan->sig & __DAHDI_SIG_FXS) {
- if (chan->rxhooksig == DAHDI_RXSIG_RING)
- chan->ringtrailer = DAHDI_RINGTRAILER;
- else if (chan->ringtrailer) {
- chan->ringtrailer -= DAHDI_CHUNKSIZE;
- /* See if RING trailer is expired */
- if (!chan->ringtrailer && !chan->ringdebtimer)
- __qevent(chan, DAHDI_EVENT_RINGOFFHOOK);
+ }
+ if (chan->pulsetimer) {
+ chan->pulsetimer--;
+ if (chan->pulsetimer <= 0) {
+ if (chan->pulsecount) {
+ if (chan->pulsecount > 12) {
+
+ module_printk(KERN_NOTICE, "Got pulse digit %d on %s???\n",
+ chan->pulsecount,
+ chan->name);
+ } else if (chan->pulsecount > 11) {
+ __qevent(chan, DAHDI_EVENT_PULSEDIGIT | '#');
+ } else if (chan->pulsecount > 10) {
+ __qevent(chan, DAHDI_EVENT_PULSEDIGIT | '*');
+ } else if (chan->pulsecount > 9) {
+ __qevent(chan, DAHDI_EVENT_PULSEDIGIT | '0');
+ } else {
+ __qevent(chan, DAHDI_EVENT_PULSEDIGIT | ('0' +
+ chan->pulsecount));
+ }
+ chan->pulsecount = 0;
}
}
- if (chan->pulsetimer) {
- chan->pulsetimer--;
- if (chan->pulsetimer <= 0) {
- if (chan->pulsecount) {
- if (chan->pulsecount > 12) {
-
- module_printk(KERN_NOTICE, "Got pulse digit %d on %s???\n",
- chan->pulsecount,
- chan->name);
- } else if (chan->pulsecount > 11) {
- __qevent(chan, DAHDI_EVENT_PULSEDIGIT | '#');
- } else if (chan->pulsecount > 10) {
- __qevent(chan, DAHDI_EVENT_PULSEDIGIT | '*');
- } else if (chan->pulsecount > 9) {
- __qevent(chan, DAHDI_EVENT_PULSEDIGIT | '0');
- } else {
- __qevent(chan, DAHDI_EVENT_PULSEDIGIT | ('0' +
- chan->pulsecount));
- }
- chan->pulsecount = 0;
- }
- }
- }
+ }
#ifdef BUFFER_DEBUG
- chan->statcount -= DAHDI_CHUNKSIZE;
-#endif
- spin_unlock_irqrestore(&chan->lock, flags);
- continue;
- }
+ chan->statcount -= DAHDI_CHUNKSIZE;
+#endif
spin_unlock_irqrestore(&chan->lock, flags);
}
More information about the svn-commits
mailing list