diff options
author | Andreas Eversberg <andreas@eversberg.eu> | 2009-05-22 07:04:46 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-05-25 03:51:31 -0400 |
commit | 7cfa153dd709f15188fe84b78ae76387841fe17b (patch) | |
tree | 35df67cef71397759e9fad76fb878fa439f26f45 /drivers/isdn/mISDN | |
parent | a5355c27d26001865a5ac32c868c82a523c275d3 (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.h | 2 | ||||
-rw-r--r-- | drivers/isdn/mISDN/dsp_core.c | 2 | ||||
-rw-r--r-- | drivers/isdn/mISDN/dsp_pipeline.c | 5 | ||||
-rw-r--r-- | drivers/isdn/mISDN/hwchannel.c | 4 |
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); | |||
262 | extern void dsp_pipeline_process_tx(struct dsp_pipeline *pipeline, u8 *data, | 262 | extern void dsp_pipeline_process_tx(struct dsp_pipeline *pipeline, u8 *data, |
263 | int len); | 263 | int len); |
264 | extern void dsp_pipeline_process_rx(struct dsp_pipeline *pipeline, u8 *data, | 264 | extern 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 | ||
350 | void dsp_pipeline_process_rx(struct dsp_pipeline *pipeline, u8 *data, int len) | 350 | void 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) | |||
185 | EXPORT_SYMBOL(recv_Echannel); | 185 | EXPORT_SYMBOL(recv_Echannel); |
186 | 186 | ||
187 | void | 187 | void |
188 | recv_Bchannel(struct bchannel *bch) | 188 | recv_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); |