diff options
Diffstat (limited to 'drivers/dahdi/voicebus/GpakCust.h')
-rw-r--r-- | drivers/dahdi/voicebus/GpakCust.h | 257 |
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 */ + + |