diff options
author | Kinsey Moore <kmoore@digium.com> | 2010-12-09 20:19:26 +0000 |
---|---|---|
committer | Kinsey Moore <kmoore@digium.com> | 2010-12-09 20:19:26 +0000 |
commit | 0a0862817efc1c7a420c155a98c15ac5740513cb (patch) | |
tree | 0fbcdd9ff5ed0efbeb663981bb6ff32e6d163159 /drivers/dahdi/dahdi-base.c | |
parent | bee3474ea340a48c48323cb97334bbf8b43f78b3 (diff) |
dahdi-base, dahdi_echocan_*, wcb4xxp, wct4xxp, wctdm24xxp, wcte12xp, kernel: Allow name of EC factory to vary based on channel
Changed the echocan factory name to a function (get_name) called to get the
name. This allows a factory to return a different name when being called in
reference to a channel such as in the case of hardware echo cancellers. To
further accommodate this change for HWEC, a new echocan_name function was
added to the span ops struct and is used in hwec_factory in dahdi-base for
all cards that support hardware echo cancellation.
Signed-off-by: Kinsey Moore <kmoore@digium.com>
Acked-by: Shaun Ruffell <sruffell@digium.com>
git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/trunk@9524 a0bf4364-ded3-4de4-8d8a-66a801d63aff
Diffstat (limited to 'drivers/dahdi/dahdi-base.c')
-rw-r--r-- | drivers/dahdi/dahdi-base.c | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/drivers/dahdi/dahdi-base.c b/drivers/dahdi/dahdi-base.c index 1f20176..698e37d 100644 --- a/drivers/dahdi/dahdi-base.c +++ b/drivers/dahdi/dahdi-base.c @@ -799,7 +799,7 @@ static int dahdi_proc_read(char *page, char **start, off_t off, int count, int * if (chan->ec_factory) len += snprintf(page+len, count-len, "(EC: %s - %s) ", - chan->ec_factory->name, + chan->ec_factory->get_name(chan), chan->ec_state ? "ACTIVE" : "INACTIVE"); len += snprintf(page+len, count-len, "\n"); @@ -1197,7 +1197,7 @@ retry: read_lock(&ecfactory_list_lock); list_for_each_entry(cur, &ecfactory_list, list) { - if (!strcmp(name_upper, cur->ec->name)) { + if (!strcmp(name_upper, cur->ec->get_name(NULL))) { if (try_module_get(cur->ec->owner)) { read_unlock(&ecfactory_list_lock); kfree(name_upper); @@ -4603,8 +4603,9 @@ static int dahdi_ctl_ioctl(struct file *file, unsigned int cmd, unsigned long da dahdi_copy_string(vi.version, DAHDI_VERSION, sizeof(vi.version)); read_lock(&ecfactory_list_lock); list_for_each_entry(cur, &ecfactory_list, list) { - strncat(vi.echo_canceller + strlen(vi.echo_canceller), cur->ec->name, space); - space -= strlen(cur->ec->name); + strncat(vi.echo_canceller + strlen(vi.echo_canceller), + cur->ec->get_name(NULL), space); + space -= strlen(cur->ec->get_name(NULL)); if (space < 1) { break; } @@ -5478,7 +5479,9 @@ ioctl_echocancel(struct dahdi_chan *chan, struct dahdi_echocanparams *ecp, /* try to get another reference to the module providing this channel's echo canceler */ if (!try_module_get(chan->ec_factory->owner)) { - module_printk(KERN_ERR, "Cannot get a reference to the '%s' echo canceler\n", chan->ec_factory->name); + module_printk(KERN_ERR, "Cannot get a reference to the" + " '%s' echo canceler\n", + chan->ec_factory->get_name(chan)); goto exit_with_free; } @@ -5495,7 +5498,7 @@ ioctl_echocancel(struct dahdi_chan *chan, struct dahdi_echocanparams *ecp, if (!ec) { module_printk(KERN_ERR, "%s failed to allocate an " \ "dahdi_echocan_state instance.\n", - ec_current->name); + ec_current->get_name(chan)); ret = -EFAULT; goto exit_with_free; } @@ -8899,6 +8902,15 @@ int dahdi_unregister_chardev(struct dahdi_chardev *dev) return 0; } +static const char *hwec_def_name = "HWEC"; +static const char *hwec_get_name(const struct dahdi_chan *chan) +{ + if (chan && chan->span && chan->span->ops->echocan_name) + return chan->span->ops->echocan_name(chan); + else + return hwec_def_name; +} + static int hwec_echocan_create(struct dahdi_chan *chan, struct dahdi_echocanparams *ecp, struct dahdi_echocanparam *p, struct dahdi_echocan_state **ec) @@ -8910,7 +8922,7 @@ static int hwec_echocan_create(struct dahdi_chan *chan, } static const struct dahdi_echocan_factory hwec_factory = { - .name = "HWEC", + .get_name = hwec_get_name, .owner = THIS_MODULE, .echocan_create = hwec_echocan_create, }; |