diff options
author | Shaun Ruffell <sruffell@digium.com> | 2011-01-03 18:27:14 +0000 |
---|---|---|
committer | Shaun Ruffell <sruffell@digium.com> | 2011-01-03 18:27:14 +0000 |
commit | 64453a6291a7877d21f58ef9a7b604cc20c9d698 (patch) | |
tree | 000f8f7d44381a759481d8b49d34266890b2ceec /drivers | |
parent | 7b43ad994f6b29b65e109c856f83c5967a222e14 (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')
-rw-r--r-- | drivers/dahdi/dahdi-base.c | 94 |
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; |