aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/isdn/mISDN
diff options
context:
space:
mode:
authorAndreas Eversberg <andreas@eversberg.eu>2009-05-22 07:04:46 -0400
committerDavid S. Miller <davem@davemloft.net>2009-05-25 03:51:31 -0400
commit7cfa153dd709f15188fe84b78ae76387841fe17b (patch)
tree35df67cef71397759e9fad76fb878fa439f26f45 /drivers/isdn/mISDN
parenta5355c27d26001865a5ac32c868c82a523c275d3 (diff)
mISDN: Echo canceler now gets delay information from hardware
Added tx-fifo information for calculation of current delay to sync tx and rx streams for echo canceler. Signed-off-by: Andreas Eversberg <andreas@eversberg.eu> Signed-off-by: Karsten Keil <keil@b1-systems.de> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/isdn/mISDN')
-rw-r--r--drivers/isdn/mISDN/dsp.h2
-rw-r--r--drivers/isdn/mISDN/dsp_core.c2
-rw-r--r--drivers/isdn/mISDN/dsp_pipeline.c5
-rw-r--r--drivers/isdn/mISDN/hwchannel.c4
4 files changed, 7 insertions, 6 deletions
diff --git a/drivers/isdn/mISDN/dsp.h b/drivers/isdn/mISDN/dsp.h
index 0a4a362b89ce..4a1c444d73ac 100644
--- a/drivers/isdn/mISDN/dsp.h
+++ b/drivers/isdn/mISDN/dsp.h
@@ -262,5 +262,5 @@ extern int dsp_pipeline_build(struct dsp_pipeline *pipeline, const char *cfg);
262extern void dsp_pipeline_process_tx(struct dsp_pipeline *pipeline, u8 *data, 262extern void dsp_pipeline_process_tx(struct dsp_pipeline *pipeline, u8 *data,
263 int len); 263 int len);
264extern void dsp_pipeline_process_rx(struct dsp_pipeline *pipeline, u8 *data, 264extern void dsp_pipeline_process_rx(struct dsp_pipeline *pipeline, u8 *data,
265 int len); 265 int len, unsigned int txlen);
266 266
diff --git a/drivers/isdn/mISDN/dsp_core.c b/drivers/isdn/mISDN/dsp_core.c
index 3083338716b2..1c49368e0a90 100644
--- a/drivers/isdn/mISDN/dsp_core.c
+++ b/drivers/isdn/mISDN/dsp_core.c
@@ -710,7 +710,7 @@ dsp_function(struct mISDNchannel *ch, struct sk_buff *skb)
710 /* pipeline */ 710 /* pipeline */
711 if (dsp->pipeline.inuse) 711 if (dsp->pipeline.inuse)
712 dsp_pipeline_process_rx(&dsp->pipeline, skb->data, 712 dsp_pipeline_process_rx(&dsp->pipeline, skb->data,
713 skb->len); 713 skb->len, hh->id);
714 /* change volume if requested */ 714 /* change volume if requested */
715 if (dsp->rx_volume) 715 if (dsp->rx_volume)
716 dsp_change_volume(skb, dsp->rx_volume); 716 dsp_change_volume(skb, dsp->rx_volume);
diff --git a/drivers/isdn/mISDN/dsp_pipeline.c b/drivers/isdn/mISDN/dsp_pipeline.c
index 18cf87c113e7..ac61f198eb32 100644
--- a/drivers/isdn/mISDN/dsp_pipeline.c
+++ b/drivers/isdn/mISDN/dsp_pipeline.c
@@ -347,7 +347,8 @@ void dsp_pipeline_process_tx(struct dsp_pipeline *pipeline, u8 *data, int len)
347 entry->elem->process_tx(entry->p, data, len); 347 entry->elem->process_tx(entry->p, data, len);
348} 348}
349 349
350void dsp_pipeline_process_rx(struct dsp_pipeline *pipeline, u8 *data, int len) 350void dsp_pipeline_process_rx(struct dsp_pipeline *pipeline, u8 *data, int len,
351 unsigned int txlen)
351{ 352{
352 struct dsp_pipeline_entry *entry; 353 struct dsp_pipeline_entry *entry;
353 354
@@ -356,7 +357,7 @@ void dsp_pipeline_process_rx(struct dsp_pipeline *pipeline, u8 *data, int len)
356 357
357 list_for_each_entry_reverse(entry, &pipeline->list, list) 358 list_for_each_entry_reverse(entry, &pipeline->list, list)
358 if (entry->elem->process_rx) 359 if (entry->elem->process_rx)
359 entry->elem->process_rx(entry->p, data, len); 360 entry->elem->process_rx(entry->p, data, len, txlen);
360} 361}
361 362
362 363
diff --git a/drivers/isdn/mISDN/hwchannel.c b/drivers/isdn/mISDN/hwchannel.c
index ab1168a110ae..0481a0cdf6db 100644
--- a/drivers/isdn/mISDN/hwchannel.c
+++ b/drivers/isdn/mISDN/hwchannel.c
@@ -185,13 +185,13 @@ recv_Echannel(struct dchannel *ech, struct dchannel *dch)
185EXPORT_SYMBOL(recv_Echannel); 185EXPORT_SYMBOL(recv_Echannel);
186 186
187void 187void
188recv_Bchannel(struct bchannel *bch) 188recv_Bchannel(struct bchannel *bch, unsigned int id)
189{ 189{
190 struct mISDNhead *hh; 190 struct mISDNhead *hh;
191 191
192 hh = mISDN_HEAD_P(bch->rx_skb); 192 hh = mISDN_HEAD_P(bch->rx_skb);
193 hh->prim = PH_DATA_IND; 193 hh->prim = PH_DATA_IND;
194 hh->id = MISDN_ID_ANY; 194 hh->id = id;
195 if (bch->rcount >= 64) { 195 if (bch->rcount >= 64) {
196 printk(KERN_WARNING "B-channel %p receive queue overflow, " 196 printk(KERN_WARNING "B-channel %p receive queue overflow, "
197 "fushing!\n", bch); 197 "fushing!\n", bch);