summaryrefslogtreecommitdiff
path: root/drivers/dahdi/dahdi-base.c
diff options
context:
space:
mode:
authorShaun Ruffell <sruffell@digium.com>2011-01-03 18:27:14 +0000
committerShaun Ruffell <sruffell@digium.com>2011-01-03 18:27:14 +0000
commit4feaef9aa00c97ab73238a743436e01f722ae785 (patch)
tree000f8f7d44381a759481d8b49d34266890b2ceec /drivers/dahdi/dahdi-base.c
parent8ee4f5ea96fa8d361b22cb8df13665095c8dee67 (diff)
dahdi: Move DAHDI_SET_DIALPARAMS code into separate function.
Signed-off-by: Shaun Ruffell <sruffell@digium.com> Acked-by: Kinsey Moore <kmoore@digium.com> git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/trunk@9595 a0bf4364-ded3-4de4-8d8a-66a801d63aff
Diffstat (limited to 'drivers/dahdi/dahdi-base.c')
-rw-r--r--drivers/dahdi/dahdi-base.c94
1 files changed, 50 insertions, 44 deletions
diff --git a/drivers/dahdi/dahdi-base.c b/drivers/dahdi/dahdi-base.c
index 1262c7d..342b679 100644
--- a/drivers/dahdi/dahdi-base.c
+++ b/drivers/dahdi/dahdi-base.c
@@ -4431,6 +4431,54 @@ static int dahdi_ioctl_chanconfig(struct file *file, unsigned long data)
return res;
}
+static int dahdi_ioctl_set_dialparams(struct file *file, unsigned long data)
+{
+ unsigned int i;
+ struct dahdi_dialparams tdp;
+ struct dahdi_zone *z;
+
+ if (copy_from_user(&tdp, (void __user *)data, sizeof(tdp)))
+ return -EFAULT;
+
+ if ((tdp.dtmf_tonelen >= 10) && (tdp.dtmf_tonelen <= 4000)) {
+ global_dialparams.dtmf_tonelen = tdp.dtmf_tonelen;
+ }
+ if ((tdp.mfv1_tonelen >= 10) && (tdp.mfv1_tonelen <= 4000)) {
+ global_dialparams.mfv1_tonelen = tdp.mfv1_tonelen;
+ }
+ if ((tdp.mfr2_tonelen >= 10) && (tdp.mfr2_tonelen <= 4000)) {
+ global_dialparams.mfr2_tonelen = tdp.mfr2_tonelen;
+ }
+
+ /* update the lengths in all currently loaded zones */
+ spin_lock(&zone_lock);
+ list_for_each_entry(z, &tone_zones, node) {
+ for (i = 0; i < ARRAY_SIZE(z->dtmf); i++) {
+ z->dtmf[i].tonesamples = global_dialparams.dtmf_tonelen * DAHDI_CHUNKSIZE;
+ }
+
+ /* for MFR1, we only adjust the length of the digits */
+ for (i = DAHDI_TONE_MFR1_0; i <= DAHDI_TONE_MFR1_9; i++) {
+ z->mfr1[i - DAHDI_TONE_MFR1_BASE].tonesamples = global_dialparams.mfv1_tonelen * DAHDI_CHUNKSIZE;
+ }
+
+ for (i = 0; i < ARRAY_SIZE(z->mfr2_fwd); i++) {
+ z->mfr2_fwd[i].tonesamples = global_dialparams.mfr2_tonelen * DAHDI_CHUNKSIZE;
+ }
+
+ for (i = 0; i < ARRAY_SIZE(z->mfr2_rev); i++) {
+ z->mfr2_rev[i].tonesamples = global_dialparams.mfr2_tonelen * DAHDI_CHUNKSIZE;
+ }
+ }
+ spin_unlock(&zone_lock);
+
+ dtmf_silence.tonesamples = global_dialparams.dtmf_tonelen * DAHDI_CHUNKSIZE;
+ mfr1_silence.tonesamples = global_dialparams.mfv1_tonelen * DAHDI_CHUNKSIZE;
+ mfr2_silence.tonesamples = global_dialparams.mfr2_tonelen * DAHDI_CHUNKSIZE;
+
+ return 0;
+}
+
static int dahdi_ctl_ioctl(struct file *file, unsigned int cmd, unsigned long data)
{
/* I/O CTL's for control interface */
@@ -4633,52 +4681,10 @@ static int dahdi_ctl_ioctl(struct file *file, unsigned int cmd, unsigned long da
if (get_user(j, (int __user *) data))
return -EFAULT;
return dahdi_unregister_tone_zone(j);
- case DAHDI_SET_DIALPARAMS:
- {
- struct dahdi_dialparams tdp;
- struct dahdi_zone *z;
-
- if (copy_from_user(&tdp, (void __user *)data, sizeof(tdp)))
- return -EFAULT;
-
- if ((tdp.dtmf_tonelen >= 10) && (tdp.dtmf_tonelen <= 4000)) {
- global_dialparams.dtmf_tonelen = tdp.dtmf_tonelen;
- }
- if ((tdp.mfv1_tonelen >= 10) && (tdp.mfv1_tonelen <= 4000)) {
- global_dialparams.mfv1_tonelen = tdp.mfv1_tonelen;
- }
- if ((tdp.mfr2_tonelen >= 10) && (tdp.mfr2_tonelen <= 4000)) {
- global_dialparams.mfr2_tonelen = tdp.mfr2_tonelen;
- }
- /* update the lengths in all currently loaded zones */
- spin_lock(&zone_lock);
- list_for_each_entry(z, &tone_zones, node) {
- for (i = 0; i < ARRAY_SIZE(z->dtmf); i++) {
- z->dtmf[i].tonesamples = global_dialparams.dtmf_tonelen * DAHDI_CHUNKSIZE;
- }
-
- /* for MFR1, we only adjust the length of the digits */
- for (i = DAHDI_TONE_MFR1_0; i <= DAHDI_TONE_MFR1_9; i++) {
- z->mfr1[i - DAHDI_TONE_MFR1_BASE].tonesamples = global_dialparams.mfv1_tonelen * DAHDI_CHUNKSIZE;
- }
-
- for (i = 0; i < ARRAY_SIZE(z->mfr2_fwd); i++) {
- z->mfr2_fwd[i].tonesamples = global_dialparams.mfr2_tonelen * DAHDI_CHUNKSIZE;
- }
-
- for (i = 0; i < ARRAY_SIZE(z->mfr2_rev); i++) {
- z->mfr2_rev[i].tonesamples = global_dialparams.mfr2_tonelen * DAHDI_CHUNKSIZE;
- }
- }
- spin_unlock(&zone_lock);
-
- dtmf_silence.tonesamples = global_dialparams.dtmf_tonelen * DAHDI_CHUNKSIZE;
- mfr1_silence.tonesamples = global_dialparams.mfv1_tonelen * DAHDI_CHUNKSIZE;
- mfr2_silence.tonesamples = global_dialparams.mfr2_tonelen * DAHDI_CHUNKSIZE;
+ case DAHDI_SET_DIALPARAMS:
+ return dahdi_ioctl_set_dialparams(file, data);
- break;
- }
case DAHDI_GET_DIALPARAMS:
{
struct dahdi_dialparams tdp;