summaryrefslogtreecommitdiff
path: root/drivers/dahdi/dahdi-base.c
diff options
context:
space:
mode:
authorKinsey Moore <kmoore@digium.com>2010-12-09 20:19:26 +0000
committerKinsey Moore <kmoore@digium.com>2010-12-09 20:19:26 +0000
commit0a0862817efc1c7a420c155a98c15ac5740513cb (patch)
tree0fbcdd9ff5ed0efbeb663981bb6ff32e6d163159 /drivers/dahdi/dahdi-base.c
parentbee3474ea340a48c48323cb97334bbf8b43f78b3 (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.c26
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,
};