summaryrefslogtreecommitdiff
path: root/drivers/dahdi/voicebus/GpakCust.h
diff options
context:
space:
mode:
authorShaun Ruffell <sruffell@digium.com>2009-04-29 17:48:39 +0000
committerShaun Ruffell <sruffell@digium.com>2009-04-29 17:48:39 +0000
commit0eab8786edae3a7cc06d9f37793aefb712358cd3 (patch)
tree7feb878aab3e215b5c2011374fb84b68326a55bd /drivers/dahdi/voicebus/GpakCust.h
parent1b2c87acf7f48bb85c155a026ef20a8f0be21c57 (diff)
voicebus: Move common vpmadt032 interface into voicebus module.
The voicebus library was previously linked into both the wcte12xp and wctdm24xxp drivers. It is now broken out into it's own module and the common parts of the vpmadt032 interface are now located in that module to reduce duplication between the wcte12xp and wctdm24xxp drivers. git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/trunk@6527 a0bf4364-ded3-4de4-8d8a-66a801d63aff
Diffstat (limited to 'drivers/dahdi/voicebus/GpakCust.h')
-rw-r--r--drivers/dahdi/voicebus/GpakCust.h257
1 files changed, 257 insertions, 0 deletions
diff --git a/drivers/dahdi/voicebus/GpakCust.h b/drivers/dahdi/voicebus/GpakCust.h
new file mode 100644
index 0000000..befdabc
--- /dev/null
+++ b/drivers/dahdi/voicebus/GpakCust.h
@@ -0,0 +1,257 @@
+/*
+ * Copyright (c) 2005, Adaptive Digital Technologies, Inc.
+ *
+ * File Name: GpakCust.h
+ *
+ * Description:
+ * This file contains host system dependent definitions and prototypes of
+ * functions to support generic G.PAK API functions. The file is used when
+ * integrating G.PAK API functions in a specific host processor environment.
+ *
+ * Note: This file may need to be modified by the G.PAK system integrator.
+ *
+ * Version: 1.0
+ *
+ * Revision History:
+ * 06/15/05 - Initial release.
+ *
+ * This program has been released under the terms of the GPL version 2 by
+ * permission of Adaptive Digital Technologies, Inc.
+ *
+ */
+
+/*
+ * 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 _GPAKCUST_H /* prevent multiple inclusion */
+#define _GPAKCUST_H
+
+#include <linux/device.h>
+#include <linux/completion.h>
+#include <linux/workqueue.h>
+
+#include "gpakenum.h"
+#include "adt_lec.h"
+
+#define DEBUG_ECHOCAN (1 << 1)
+
+/* Host and DSP system dependent related definitions. */
+#define MAX_DSP_CORES 128 /* maximum number of DSP cores */
+#define MAX_CHANNELS 32 /* maximum number of channels */
+#define MAX_WAIT_LOOPS 50 /* max number of wait delay loops */
+#define DSP_IFBLK_ADDRESS 0x0100 /* DSP address of I/F block pointer */
+#define DOWNLOAD_BLOCK_SIZE 512 /* download block size (DSP words) */
+
+#define VPM150M_MAX_COMMANDS 8
+
+#define __VPM150M_RWPAGE (1 << 4)
+#define __VPM150M_RD (1 << 3)
+#define __VPM150M_WR (1 << 2)
+#define __VPM150M_FIN (1 << 1)
+#define __VPM150M_TX (1 << 0)
+#define __VPM150M_RWPAGE (1 << 4)
+#define __VPM150M_RD (1 << 3)
+#define __VPM150M_WR (1 << 2)
+#define __VPM150M_FIN (1 << 1)
+#define __VPM150M_TX (1 << 0)
+
+/* Some Bit ops for different operations */
+#define VPM150M_SPIRESET 0
+#define VPM150M_HPIRESET 1
+#define VPM150M_SWRESET 2
+#define VPM150M_DTMFDETECT 3
+#define VPM150M_ACTIVE 4
+
+
+struct vpmadt032_cmd {
+ struct list_head node;
+ __le32 address;
+ __le16 data;
+ u8 desc;
+ u8 txident;
+ struct completion complete;
+};
+
+/* Contains the options used when initializing the vpmadt032 module */
+struct vpmadt032_options {
+ int vpmnlptype;
+ int vpmnlpthresh;
+ int vpmnlpmaxsupp;
+ u32 debug;
+ u32 channels;
+};
+
+struct GpakChannelConfig;
+
+#define MAX_CHANNELS_PER_SPAN 32
+struct vpmadt032 {
+ void *context;
+ const struct dahdi_span *span;
+ struct work_struct work;
+ int dspid;
+ struct semaphore sem;
+ unsigned long control;
+ unsigned char curpage;
+ unsigned short version;
+ struct adt_lec_params curecstate[MAX_CHANNELS_PER_SPAN];
+ struct adt_lec_params desiredecstate[MAX_CHANNELS_PER_SPAN];
+ spinlock_t list_lock;
+ /* Commands that are ready to be used. */
+ struct list_head free_cmds;
+ /* Commands that are waiting to be processed. */
+ struct list_head pending_cmds;
+ /* Commands that are currently in progress by the VPM module */
+ struct list_head active_cmds;
+ unsigned char curtone[MAX_CHANNELS_PER_SPAN];
+ struct vpmadt032_options options;
+ void (*setchanconfig_from_state)(struct vpmadt032 *vpm, int channel, struct GpakChannelConfig *chanconfig);
+};
+
+struct voicebus;
+struct dahdi_echocanparams;
+struct dahdi_echocanparam;
+
+char vpmadt032tone_to_zaptone(GpakToneCodes_t tone);
+int vpmadt032_init(struct vpmadt032 *vpm, struct voicebus *vb);
+struct vpmadt032 *vpmadt032_alloc(struct vpmadt032_options *options);
+void vpmadt032_free(struct vpmadt032 *vpm);
+int vpmadt032_echocan_with_params(struct vpmadt032 *vpm, int channo,
+ struct dahdi_echocanparams *ecp, struct dahdi_echocanparam *p);
+
+/* If there is a command ready to go to the VPMADT032, return it, otherwise NULL */
+static inline struct vpmadt032_cmd *vpmadt032_get_ready_cmd(struct vpmadt032 *vpm)
+{
+ unsigned long flags;
+ struct vpmadt032_cmd *cmd;
+
+ spin_lock_irqsave(&vpm->list_lock, flags);
+ if (list_empty(&vpm->pending_cmds)) {
+ spin_unlock_irqrestore(&vpm->list_lock, flags);
+ return NULL;
+ }
+ cmd = list_entry(vpm->pending_cmds.next, struct vpmadt032_cmd, node);
+ list_move_tail(&cmd->node, &vpm->active_cmds);
+ spin_unlock_irqrestore(&vpm->list_lock, flags);
+ return cmd;
+}
+
+int vpmadt032_module_init(void);
+
+typedef __u16 DSP_WORD; /* 16 bit DSP word */
+typedef __u32 DSP_ADDRESS; /* 32 bit DSP address */
+typedef __u32 GPAK_FILE_ID; /* G.PAK Download file identifier */
+
+/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ * gpakReadDspMemory - Read DSP memory.
+ *
+ * FUNCTION
+ * This function reads a contiguous block of words from DSP memory starting at
+ * the specified address.
+ *
+ * RETURNS
+ * nothing
+ *
+ */
+extern void gpakReadDspMemory(
+ unsigned short int DspId, /* DSP Identifier (0 to MAX_DSP_CORES-1) */
+ DSP_ADDRESS DspAddress, /* DSP's memory address of first word */
+ unsigned int NumWords, /* number of contiguous words to read */
+ DSP_WORD *pWordValues /* pointer to array of word values variable */
+ );
+
+
+/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ * gpakWriteDspMemory - Write DSP memory.
+ *
+ * FUNCTION
+ * This function writes a contiguous block of words to DSP memory starting at
+ * the specified address.
+ *
+ * RETURNS
+ * nothing
+ *
+ */
+extern void gpakWriteDspMemory(
+ unsigned short int DspId, /* DSP Identifier (0 to MAX_DSP_CORES-1) */
+ DSP_ADDRESS DspAddress, /* DSP's memory address of first word */
+ unsigned int NumWords, /* number of contiguous words to write */
+ DSP_WORD *pWordValues /* pointer to array of word values to write */
+ );
+
+
+/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ * gpakHostDelay - Delay for a fixed time interval.
+ *
+ * FUNCTION
+ * This function delays for a fixed time interval before returning. The time
+ * interval is the Host Port Interface sampling period when polling a DSP for
+ * replies to command messages.
+ *
+ * RETURNS
+ * nothing
+ *
+ */
+extern void gpakHostDelay(void);
+
+
+/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ * gpakLockAccess - Lock access to the specified DSP.
+ *
+ * FUNCTION
+ * This function aquires exclusive access to the specified DSP.
+ *
+ * RETURNS
+ * nothing
+ *
+ */
+extern void gpakLockAccess(
+ unsigned short int DspId /* DSP Identifier (0 to MAX_DSP_CORES-1) */
+ );
+
+/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ * gpakUnlockAccess - Unlock access to the specified DSP.
+ *
+ * FUNCTION
+ * This function releases exclusive access to the specified DSP.
+ *
+ * RETURNS
+ * nothing
+ *
+ */
+extern void gpakUnlockAccess(
+ unsigned short int DspId /* DSP Identifier (0 to MAX_DSP_CORES-1) */
+ );
+
+/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ * gpakReadFile - Read a block of bytes from a G.PAK Download file.
+ *
+ * FUNCTION
+ * This function reads a contiguous block of bytes from a G.PAK Download file
+ * starting at the current file position.
+ *
+ * RETURNS
+ * The number of bytes read from the file.
+ * -1 indicates an error occurred.
+ * 0 indicates all bytes have been read (end of file)
+ *
+ */
+extern int gpakReadFile(
+ GPAK_FILE_ID FileId, /* G.PAK Download File Identifier */
+ unsigned char *pBuffer, /* pointer to buffer for storing bytes */
+ unsigned int NumBytes /* number of bytes to read */
+ );
+
+
+#endif /* prevent multiple inclusion */
+
+