summaryrefslogtreecommitdiff
path: root/drivers/dahdi/voicebus/vpmoct.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/dahdi/voicebus/vpmoct.h')
-rw-r--r--drivers/dahdi/voicebus/vpmoct.h110
1 files changed, 110 insertions, 0 deletions
diff --git a/drivers/dahdi/voicebus/vpmoct.h b/drivers/dahdi/voicebus/vpmoct.h
new file mode 100644
index 0000000..486a80d
--- /dev/null
+++ b/drivers/dahdi/voicebus/vpmoct.h
@@ -0,0 +1,110 @@
+/*
+ * VPMOCT Driver.
+ *
+ * Written by Russ Meyerriecks <rmeyerriecks@digium.com>
+ *
+ * Copyright (C) 2010-2011 Digium, Inc.
+ *
+ * All rights reserved.
+ *
+ */
+
+/*
+ * See http://www.asterisk.org for more information about
+ * the Asterisk project. Please do not directly contact
+ * any of the maintainers of this project for assistance;
+ * the project provides a web site, mailing lists and IRC
+ * channels for your use.
+ *
+ * This program is free software, distributed under the terms of
+ * the GNU General Public License Version 2 as published by the
+ * Free Software Foundation. See the LICENSE file included with
+ * this program for more details.
+ */
+
+#ifndef _VPMOCT_H
+#define _VPMOCT_H
+
+#include <linux/list.h>
+#include <linux/pci.h>
+#include <linux/timer.h>
+#include "dahdi/kernel.h"
+
+#include <stdbool.h>
+
+#define VPMOCT_FIRM_HEADER_LEN 32
+#define VPMOCT_BOOT_RAM_LEN 128
+#define VPMOCT_FLASH_BUF_SECTIONS 4
+#define VPMOCT_MAX_CHUNK 7
+
+/* Bootloader commands */
+#define VPMOCT_BOOT_FLASH_ERASE 0x01
+#define VPMOCT_BOOT_FLASH_COPY 0x02
+#define VPMOCT_BOOT_IMAGE_VALIDATE 0x06
+#define VPMOCT_BOOT_REBOOT 0x07
+#define VPMOCT_BOOT_DECRYPT 0x08
+#define VPMOCT_BOOT_FLASHLOAD 0x10
+
+/* Dual use registers */
+#define VPMOCT_IDENT 0x00
+#define VPMOCT_MAJOR 0x0a
+#define VPMOCT_MINOR 0x0b
+#define VPMOCT_SERIAL 0x90
+#define VPMOCT_SERIAL_SIZE 32
+
+/* Bootloader registers */
+#define VPMOCT_BOOT_ERROR 0x0c
+#define VPMOCT_BOOT_STATUS 0x10
+#define VPMOCT_BOOT_CMD 0x11
+#define VPMOCT_BOOT_LEN 0x14
+#define VPMOCT_BOOT_ADDRESS1 0x18
+#define VPMOCT_BOOT_ADDRESS2 0x1c
+#define VPMOCT_BOOT_RAM 0x20
+
+#define VPMOCT_MODE_BOOTLOADER 0
+#define VPMOCT_MODE_APPLICATION 1
+
+struct vpmoct {
+ struct list_head pending_list;
+ struct list_head active_list;
+ spinlock_t list_lock;
+ struct mutex mutex;
+ unsigned short int mode;
+ struct device *dev;
+ u32 companding;
+ u32 echo;
+ unsigned int preecho_enabled:1;
+ unsigned int echo_update_active:1;
+ unsigned int companding_update_active:1;
+ u8 preecho_timeslot;
+ u8 preecho_buf[8];
+ u8 major;
+ u8 minor;
+};
+
+struct vpmoct_cmd {
+ struct list_head node;
+ u8 address;
+ u8 data[VPMOCT_MAX_CHUNK];
+ u8 command;
+ u8 chunksize;
+ u8 txident;
+ struct completion complete;
+};
+
+static inline bool is_vpmoct_cmd_read(const struct vpmoct_cmd *cmd)
+{
+ return (0x60 == (cmd->command & 0xf0));
+}
+
+struct vpmoct *vpmoct_alloc(void);
+void vpmoct_free(struct vpmoct *vpm);
+int vpmoct_init(struct vpmoct *vpm);
+int vpmoct_echocan_create(struct vpmoct *vpm,
+ int channo,
+ int companding);
+void vpmoct_echocan_free(struct vpmoct *vpm,
+ int channo);
+int vpmoct_preecho_enable(struct vpmoct *vpm, int channo);
+int vpmoct_preecho_disable(struct vpmoct *vpm, int channo);
+#endif