summaryrefslogtreecommitdiff
path: root/wcte12xp/vpmadt032.h
diff options
context:
space:
mode:
authormspiceland <mspiceland@5390a7c7-147a-4af0-8ec9-7488f05a26cb>2007-12-08 02:20:09 +0000
committermspiceland <mspiceland@5390a7c7-147a-4af0-8ec9-7488f05a26cb>2007-12-08 02:20:09 +0000
commit9b382a61f5645c2b318899968f537393673d2842 (patch)
tree41fd2f65e270ae5807a0f1be8ae139f9369d1b33 /wcte12xp/vpmadt032.h
parentdb7568c489b2d4e99e82a580a4cff49c4201c066 (diff)
Moving wcte12xp driver into a subdirectory and adding support for the Digium TE121 and TE122 cards. These cards support the Digium VPMADT032 module.
git-svn-id: http://svn.digium.com/svn/zaptel/branches/1.4@3356 5390a7c7-147a-4af0-8ec9-7488f05a26cb
Diffstat (limited to 'wcte12xp/vpmadt032.h')
-rw-r--r--wcte12xp/vpmadt032.h119
1 files changed, 119 insertions, 0 deletions
diff --git a/wcte12xp/vpmadt032.h b/wcte12xp/vpmadt032.h
new file mode 100644
index 0000000..ecb045b
--- /dev/null
+++ b/wcte12xp/vpmadt032.h
@@ -0,0 +1,119 @@
+#ifndef _VPM150M_H
+#define _VPM150M_H
+
+#include "../zaptel.h"
+#include "wcte12xp.h"
+#include <linux/pci.h>
+#include <linux/firmware.h>
+#include <linux/list.h>
+
+struct t1_firmware {
+ const struct firmware *fw;
+ unsigned int offset;
+};
+
+/* Host and DSP system dependent related definitions. */
+#define MAX_DSP_CORES 128 /* maximum number of DSP cores */
+//#define MAX_CONFS 1 /* maximum number of conferences */
+//#define MAX_PKT_CHANNELS 8 /* maximum number of packet channels */
+#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 MAX_CIDPAYLOAD_BYTES 512 /* max size of a CID payload (octets) */
+typedef unsigned short DSP_WORD; /* 16 bit DSP word */
+typedef unsigned int DSP_ADDRESS; /* 32 bit DSP address */
+typedef struct t1_firmware* GPAK_FILE_ID; /* G.PAK Download file identifier */
+
+#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_HPI_CONTROL 0x00
+#define VPM150M_HPI_ADDRESS 0x02
+#define VPM150M_HPI_DATA 0x03
+
+#define VPM150M_MAX_COMMANDS 8
+
+/* 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
+#define VPM150M_MAX_DATA 1
+
+struct vpm150m_cmd {
+ unsigned short address;
+ unsigned short data[VPM150M_MAX_DATA];
+ unsigned char ident;
+ unsigned char datalen;
+ unsigned int flags;
+ unsigned char cs_slot;
+};
+
+struct vpm150m {
+ unsigned short dspid;
+ unsigned long control;
+ unsigned char curpage;
+ unsigned short version;
+ struct vpm150m_cmd cmdq[VPM150M_MAX_COMMANDS];
+ spinlock_t lock; /* control access to list of bottom half tasks */
+ struct semaphore sem;
+ struct workqueue_struct *wq;
+ struct work_struct work_dtmf;
+ struct work_struct work_debug;
+ struct work_struct work_echocan;
+ struct list_head worklist;
+ unsigned char curtone[32];
+ unsigned long curdtmfmutestate;
+ unsigned long desireddtmfmutestate;
+ struct t1 *wc;
+};
+
+/* linked list for vpm echocan workqueue*/
+struct vpm150m_workentry {
+ struct list_head list;
+ struct t1 *wc; /* what card are we dealing with? */
+ struct zt_chan *chan; /* what channels are we going to deal with? */
+ int eclen; /* how should we behave? */
+};
+
+extern int debug;
+extern int vpmsupport;
+extern int vpmdtmfsupport;
+extern struct pci_driver te12xp_driver;
+
+void t1_vpm150m_init(struct t1 *wc);
+void vpm150m_cmd_dequeue(struct t1 *wc, volatile unsigned char *writechunk, int whichframe);
+void vpm150m_cmd_decipher(struct t1 *wc, volatile unsigned char *readchunk);
+int vpm150m_config_hw(struct t1 *wc);
+
+/* gpak API functions */
+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 */
+ );
+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 */
+ );
+void gpakHostDelay(void);
+void gpakLockAccess(
+ unsigned short int DspId /* DSP Identifier (0 to MAX_DSP_CORES-1) */
+ );
+void gpakUnlockAccess(
+ unsigned short int DspId /* DSP Identifier (0 to MAX_DSP_CORES-1) */
+ );
+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