From 759f0c07f020a2d98480fcd92252991c1d101e93 Mon Sep 17 00:00:00 2001 From: Shaun Ruffell Date: Thu, 2 Jun 2011 20:01:49 +0000 Subject: [PATCH] dahdi: Do not allow 'hwec' to be attached to channels that do not have one. This defines a NULL value for the name of an echocan as invalid. This will allow dahdi_genconf to probe for the presence of a hardware echocan on a channel by trying to attach one. If there is not a hardware echocan available DAHDI_ATTACH_ECHOCAN ioctl will return -EINVAL if 'hwec' was specified as the name of the echo canceler now. Signed-off-by: Shaun Ruffell Acked-by: Tzafrir Cohen git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/trunk@9943 a0bf4364-ded3-4de4-8d8a-66a801d63aff --- drivers/dahdi/dahdi-base.c | 5 +++++ drivers/dahdi/wct4xxp/base.c | 3 +-- drivers/dahdi/wctdm24xxp/base.c | 3 +-- drivers/dahdi/wcte12xp/base.c | 3 +-- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/drivers/dahdi/dahdi-base.c b/drivers/dahdi/dahdi-base.c index 2680b71..bded1c0 100644 --- a/drivers/dahdi/dahdi-base.c +++ b/drivers/dahdi/dahdi-base.c @@ -4904,6 +4904,11 @@ static int dahdi_ioctl_attach_echocan(unsigned long data) new = find_echocan(ae.echocan); if (!new) return -EINVAL; + + if (!new->get_name(chan)) { + release_echocan(new); + return -EINVAL; + } } spin_lock_irqsave(&chan->lock, flags); diff --git a/drivers/dahdi/wct4xxp/base.c b/drivers/dahdi/wct4xxp/base.c index f49fa43..2dbb00f 100644 --- a/drivers/dahdi/wct4xxp/base.c +++ b/drivers/dahdi/wct4xxp/base.c @@ -246,7 +246,6 @@ static int altab[] = { static const char *vpm400_name = "VPM400M"; static const char *vpmoct064_name = "VPMOCT064"; static const char *vpmoct128_name = "VPMOCT128"; -static const char *noec_name = "NONE"; #define PORTS_PER_FRAMER 4 @@ -1296,7 +1295,7 @@ static const char *t4_echocan_name(const struct dahdi_chan *chan) else if (wc->numspans == 4) return vpmoct128_name; } - return noec_name; + return NULL; } static int t4_echocan_create(struct dahdi_chan *chan, diff --git a/drivers/dahdi/wctdm24xxp/base.c b/drivers/dahdi/wctdm24xxp/base.c index 8f0d88f..cd0ae98 100644 --- a/drivers/dahdi/wctdm24xxp/base.c +++ b/drivers/dahdi/wctdm24xxp/base.c @@ -162,7 +162,6 @@ static alpha indirect_regs[] = /* names of HWEC modules */ static const char *vpmadt032_name = "VPMADT032"; -static const char *noec_name = "NONE"; /* Undefine to enable Power alarm / Transistor debug -- note: do not enable for normal operation! */ @@ -1872,7 +1871,7 @@ static const char *wctdm_echocan_name(const struct dahdi_chan *chan) struct wctdm *wc = chan->pvt; if (wc->vpmadt032) return vpmadt032_name; - return noec_name; + return NULL; } static int wctdm_echocan_create(struct dahdi_chan *chan, diff --git a/drivers/dahdi/wcte12xp/base.c b/drivers/dahdi/wcte12xp/base.c index 1563855..8864aba 100644 --- a/drivers/dahdi/wcte12xp/base.c +++ b/drivers/dahdi/wcte12xp/base.c @@ -96,7 +96,6 @@ static const struct t1_desc te121 = {"Wildcard TE121"}; /* names of HWEC modules */ static const char *vpmadt032_name = "VPMADT032"; -static const char *noec_name = "NONE"; #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20) static kmem_cache_t *cmd_cache; @@ -1291,7 +1290,7 @@ static const char *t1xxp_echocan_name(const struct dahdi_chan *chan) struct t1 *wc = chan->pvt; if (wc->vpmadt032) return vpmadt032_name; - return noec_name; + return NULL; } static int t1xxp_echocan_create(struct dahdi_chan *chan,