summaryrefslogtreecommitdiff
path: root/zaptel-base.c
diff options
context:
space:
mode:
Diffstat (limited to 'zaptel-base.c')
-rw-r--r--zaptel-base.c85
1 files changed, 48 insertions, 37 deletions
diff --git a/zaptel-base.c b/zaptel-base.c
index c519310..a7686af 100644
--- a/zaptel-base.c
+++ b/zaptel-base.c
@@ -89,38 +89,6 @@
#include <linux/moduleparam.h>
#endif
-#ifdef AGGRESSIVE_SUPPRESSOR
-#define ZAPTEL_ECHO_AGGRESSIVE " (aggressive)"
-#else
-#define ZAPTEL_ECHO_AGGRESSIVE
-#endif
-
-#ifdef __KERNEL__
-/* Echo cancellation */
-#if defined(ECHO_CAN_STEVE)
-#define ZAPTEL_ECHO_CANCELLER "STEVE"
-#include "sec.h"
-#elif defined(ECHO_CAN_STEVE2)
-#define ZAPTEL_ECHO_CANCELLER "STEVE2"
-#include "sec-2.h"
-#elif defined(ECHO_CAN_MARK)
-#define ZAPTEL_ECHO_CANCELLER "MARK"
-#include "mec.h"
-#elif defined(ECHO_CAN_MARK2)
-#define ZAPTEL_ECHO_CANCELLER "MARK2"
-#include "mec2.h"
-#elif defined(ECHO_CAN_KB1)
-#define ZAPTEL_ECHO_CANCELLER "KB1"
-#include "kb1ec.h"
-#elif defined(ECHO_CAN_MG2)
-#define ZAPTEL_ECHO_CANCELLER "MG2"
-#include "mg2ec.h"
-#else
-#define ZAPTEL_ECHO_CANCELLER "MARK3"
-#include "mec3.h"
-#endif
-#endif
-
/* Get helper arithmetic */
#include "arith.h"
#if defined(CONFIG_ZAPTEL_MMX) || defined(ECHO_CAN_FP)
@@ -437,6 +405,31 @@ static struct zt_zone *tone_zones[ZT_TONE_ZONE_MAX];
#define NUM_SIGS 10
+#ifdef AGGRESSIVE_SUPPRESSOR
+#define ZAPTEL_ECHO_AGGRESSIVE " (aggressive)"
+#else
+#define ZAPTEL_ECHO_AGGRESSIVE ""
+#endif
+
+/* Echo cancellation */
+#if defined(ECHO_CAN_HPEC)
+#include "hpec/hpec_zaptel.h"
+#elif defined(ECHO_CAN_STEVE)
+#include "sec.h"
+#elif defined(ECHO_CAN_STEVE2)
+#include "sec-2.h"
+#elif defined(ECHO_CAN_MARK)
+#include "mec.h"
+#elif defined(ECHO_CAN_MARK2)
+#include "mec2.h"
+#elif defined(ECHO_CAN_KB1)
+#include "kb1ec.h"
+#elif defined(ECHO_CAN_MG2)
+#include "mg2ec.h"
+#else
+#include "mec3.h"
+#endif
+
static inline void rotate_sums(void)
{
/* Rotate where we sum and so forth */
@@ -3576,11 +3569,11 @@ static int zt_ctl_ioctl(struct inode *inode, struct file *file, unsigned int cmd
case ZT_GETVERSION:
memset(&vi, 0, sizeof(vi));
strncpy(vi.version, ZAPTEL_VERSION, sizeof(vi.version) - 1);
- strncpy(vi.echo_canceller, ZAPTEL_ECHO_CANCELLER, sizeof(vi.echo_canceller) - 1);
+ echo_can_identify(vi.echo_canceller, sizeof(vi.echo_canceller) - 1);
if (copy_to_user((struct zt_versioninfo *) data, &vi, sizeof(vi)))
return -EFAULT;
break;
- case ZT_MAINT: /* do maintence stuff */
+ case ZT_MAINT: /* do maintenance stuff */
/* get struct from user */
if (copy_from_user(&maint,(struct zt_maintinfo *) data, sizeof(maint)))
return -EFAULT;
@@ -3631,6 +3624,11 @@ static int zt_ctl_ioctl(struct inode *inode, struct file *file, unsigned int cmd
return zt_dynamic_ioctl(cmd, data);
}
return -ENOSYS;
+#if defined(ECHO_CAN_HPEC)
+ case ZT_EC_LICENSE_CHALLENGE:
+ case ZT_EC_LICENSE_RESPONSE:
+ return hpec_license_ioctl(cmd, data);
+#endif /* defined(ECHO_CAN_HPEC) */
default:
return zt_common_ioctl(inode, file, cmd, data, 0);
}
@@ -5704,11 +5702,22 @@ static inline void __zt_ec_chunk(struct zt_chan *ss, unsigned char *rxchunk, con
rxchunk[x] = ZT_LIN2X((int)rxlin, ss);
}
} else {
+#if !defined(ZT_EC_ARRAY_UPDATE)
for (x=0;x<ZT_CHUNKSIZE;x++) {
rxlin = ZT_XLAW(rxchunk[x], ss);
rxlin = echo_can_update(ss->ec, ZT_XLAW(txchunk[x], ss), rxlin);
- rxchunk[x] = ZT_LIN2X((int)rxlin, ss);
+ rxchunk[x] = ZT_LIN2X((int) rxlin, ss);
}
+#else /* defined(ZT_EC_ARRAY_UPDATE) */
+ short rxlins[ZT_CHUNKSIZE], txlins[ZT_CHUNKSIZE];
+ for (x = 0; x < ZT_CHUNKSIZE; x++) {
+ rxlins[x] = ZT_XLAW(rxchunk[x], ss);
+ txlins[x] = ZT_XLAW(txchunk[x], ss);
+ }
+ echo_can_array_update(ss->ec, rxlins, txlins);
+ for (x = 0; x < ZT_CHUNKSIZE; x++)
+ rxchunk[x] = ZT_LIN2X((int) rxlins[x], ss);
+#endif /* defined(ZT_EC_ARRAY_UPDATE) */
}
#if defined(CONFIG_ZAPTEL_MMX) || defined(ECHO_CAN_FP)
kernel_fpu_end();
@@ -7002,8 +7011,8 @@ static int __init zt_init(void) {
mfv1_tones_continuous[i].next = mfv1_tones_continuous + i;
printk(KERN_INFO "Zapata Telephony Interface Registered on major %d\n", ZT_MAJOR);
- printk(KERN_INFO "Zaptel Version: %s Echo Canceller: %s\n", ZAPTEL_VERSION,
- ZAPTEL_ECHO_CANCELLER ZAPTEL_ECHO_AGGRESSIVE);
+ printk(KERN_INFO "Zaptel Version: %s\n", ZAPTEL_VERSION);
+ echo_can_init();
zt_conv_init();
tone_zone_init();
fasthdlc_precalc();
@@ -7060,6 +7069,8 @@ static void __exit zt_cleanup(void) {
#ifdef CONFIG_ZAPTEL_WATCHDOG
watchdog_cleanup();
#endif
+
+ echo_can_shutdown();
}
module_init(zt_init);