
/*
 *
 Copyright (c) Eicon Networks, 2002.
 *
 This source file is supplied for the use with
 Eicon Networks range of DIVA Server Adapters.
 *
 Eicon File Revision :    2.1
 *
 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation; either version 2, or (at your option)
 any later version.
 *
 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY OF ANY KIND WHATSOEVER INCLUDING ANY
 implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 See the GNU General Public License for more details.
 *
 You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 *
 */
#ifndef DSP_DEFS_H_
#define DSP_DEFS_H_
#include "dspdids.h"
/*---------------------------------------------------------------------------*/
#define dsp_download_reserve_space(fp, length)
/*****************************************************************************/
/*
 * OS file access abstraction layer
 *
 * I/O functions returns -1 on error, 0 on EOF
 */
struct _OsFileHandle_;
typedef long (*OsFileIo)(struct _OsFileHandle_ *handle,
			 void *buffer,
			 long size);
typedef long (*OsFileSeek)(struct _OsFileHandle_ *handle,
			   long position,
			   int mode);
typedef long (*OsCardLoad)(struct _OsFileHandle_    *handle,
			   long length,
			   void **addr);
typedef struct _OsFileHandle_
{ void       *sysFileDesc;
	unsigned long sysFileSize;
	OsFileIo      sysFileRead;
	OsFileSeek    sysFileSeek;
	void       *sysLoadDesc;
	OsCardLoad    sysCardLoad;
} OsFileHandle;
extern OsFileHandle *OsOpenFile(char *path_name);
extern void          OsCloseFile(OsFileHandle *fp);
/*****************************************************************************/
#define DSP_TELINDUS_FILE "dspdload.bin"
/* special DSP file for BRI cards for Qsig and CornetN because of missing memory */
#define DSP_QSIG_TELINDUS_FILE "dspdqsig.bin"
#define DSP_MDM_TELINDUS_FILE "dspdvmdm.bin"
#define DSP_FAX_TELINDUS_FILE "dspdvfax.bin"
#define DSP_DIRECTORY_ENTRIES 64
#define DSP_MEMORY_TYPE_EXTERNAL_DM         0
#define DSP_MEMORY_TYPE_EXTERNAL_PM         1
#define DSP_MEMORY_TYPE_INTERNAL_DM         2
#define DSP_MEMORY_TYPE_INTERNAL_PM         3
#define DSP_DOWNLOAD_FLAG_BOOTABLE          0x0001
#define DSP_DOWNLOAD_FLAG_2181              0x0002
#define DSP_DOWNLOAD_FLAG_TIMECRITICAL      0x0004
#define DSP_DOWNLOAD_FLAG_COMPAND           0x0008
#define DSP_MEMORY_BLOCK_COUNT              16
#define DSP_SEGMENT_PM_FLAG                 0x0001
#define DSP_SEGMENT_SHARED_FLAG             0x0002
#define DSP_SEGMENT_EXTERNAL_DM             DSP_MEMORY_TYPE_EXTERNAL_DM
#define DSP_SEGMENT_EXTERNAL_PM             DSP_MEMORY_TYPE_EXTERNAL_PM
#define DSP_SEGMENT_INTERNAL_DM             DSP_MEMORY_TYPE_INTERNAL_DM
#define DSP_SEGMENT_INTERNAL_PM             DSP_MEMORY_TYPE_INTERNAL_PM
#define DSP_SEGMENT_FIRST_RELOCATABLE       4
#define DSP_DATA_BLOCK_PM_FLAG              0x0001
#define DSP_DATA_BLOCK_DWORD_FLAG           0x0002
#define DSP_DATA_BLOCK_RESOLVE_FLAG         0x0004
#define DSP_RELOC_NONE                      0x00
#define DSP_RELOC_SEGMENT_MASK              0x3f
#define DSP_RELOC_TYPE_MASK                 0xc0
#define DSP_RELOC_TYPE_0                    0x00  /* relocation of address in DM word / high part of PM word */
#define DSP_RELOC_TYPE_1                    0x40  /* relocation of address in low part of PM data word */
#define DSP_RELOC_TYPE_2                    0x80  /* relocation of address in standard command */
#define DSP_RELOC_TYPE_3                    0xc0  /* relocation of address in call/jump on flag in */
#define DSP_COMBIFILE_FORMAT_IDENTIFICATION_SIZE 48
#define DSP_COMBIFILE_FORMAT_VERSION_BCD    0x0100
#define DSP_FILE_FORMAT_IDENTIFICATION_SIZE 48
#define DSP_FILE_FORMAT_VERSION_BCD         0x0100
typedef struct tag_dsp_combifile_header
{
	char                  format_identification[DSP_COMBIFILE_FORMAT_IDENTIFICATION_SIZE];
	word                  format_version_bcd;
	word                  header_size;
	word                  combifile_description_size;
	word                  directory_entries;
	word                  directory_size;
	word                  download_count;
	word                  usage_mask_size;
} t_dsp_combifile_header;
typedef struct tag_dsp_combifile_directory_entry
{
	word                  card_type_number;
	word                  file_set_number;
} t_dsp_combifile_directory_entry;
typedef struct tag_dsp_file_header
{
	char                  format_identification[DSP_FILE_FORMAT_IDENTIFICATION_SIZE];
	word                  format_version_bcd;
	word                  download_id;
	word                  download_flags;
	word                  required_processing_power;
	word                  interface_channel_count;
	word                  header_size;
	word                  download_description_size;
	word                  memory_block_table_size;
	word                  memory_block_count;
	word                  segment_table_size;
	word                  segment_count;
	word                  symbol_table_size;
	word                  symbol_count;
	word                  total_data_size_dm;
	word                  data_block_count_dm;
	word                  total_data_size_pm;
	word                  data_block_count_pm;
} t_dsp_file_header;
typedef struct tag_dsp_memory_block_desc
{
	word                  alias_memory_block;
	word                  memory_type;
	word                  address;
	word                  size;             /* DSP words */
} t_dsp_memory_block_desc;
typedef struct tag_dsp_segment_desc
{
	word                  memory_block;
	word                  attributes;
	word                  base;
	word                  size;
	word                  alignment;        /* ==0 -> no other legal start address than base */
} t_dsp_segment_desc;
typedef struct tag_dsp_symbol_desc
{
	word                  symbol_id;
	word                  segment;
	word                  offset;
	word                  size;             /* DSP words */
} t_dsp_symbol_desc;
typedef struct tag_dsp_data_block_header
{
	word                  attributes;
	word                  segment;
	word                  offset;
	word                  size;             /* DSP words */
} t_dsp_data_block_header;
typedef struct tag_dsp_download_desc
{
	word                  download_id;
	word                  download_flags;
	word                  required_processing_power;
	word                  interface_channel_count;
	word                  excess_header_size;
	word                  memory_block_count;
	word                  segment_count;
	word                  symbol_count;
	word                  data_block_count_dm;
	word                  data_block_count_pm;
	byte *p_excess_header_data;
	char *p_download_description;
	t_dsp_memory_block_desc *p_memory_block_table;
	t_dsp_segment_desc *p_segment_table;
	t_dsp_symbol_desc *p_symbol_table;
	word *p_data_blocks_dm;
	word *p_data_blocks_pm;
} t_dsp_desc;
typedef struct tag_dsp_portable_download_desc /* be sure to keep native alignment for MAESTRA's */
{
	word                  download_id;
	word                  download_flags;
	word                  required_processing_power;
	word                  interface_channel_count;
	word                  excess_header_size;
	word                  memory_block_count;
	word                  segment_count;
	word                  symbol_count;
	word                  data_block_count_dm;
	word                  data_block_count_pm;
	dword                 p_excess_header_data;
	dword                 p_download_description;
	dword                 p_memory_block_table;
	dword                 p_segment_table;
	dword                 p_symbol_table;
	dword                 p_data_blocks_dm;
	dword                 p_data_blocks_pm;
} t_dsp_portable_desc;
#define DSP_DOWNLOAD_INDEX_KERNEL               0
#define DSP30TX_DOWNLOAD_INDEX_KERNEL           1
#define DSP30RX_DOWNLOAD_INDEX_KERNEL           2
#define DSP_MAX_DOWNLOAD_COUNT                  64
#define DSP_DOWNLOAD_MAX_SEGMENTS         16
#define DSP_UDATA_REQUEST_RECONFIGURE     0
/*
  parameters:
  <word> reconfigure delay (in 8kHz samples)
  <word> reconfigure code
  <byte> reconfigure hdlc preamble flags
*/
#define DSP_RECONFIGURE_TX_FLAG           0x8000
#define DSP_RECONFIGURE_SHORT_TRAIN_FLAG  0x4000
#define DSP_RECONFIGURE_ECHO_PROTECT_FLAG 0x2000
#define DSP_RECONFIGURE_HDLC_FLAG         0x1000
#define DSP_RECONFIGURE_SYNC_FLAG         0x0800
#define DSP_RECONFIGURE_PROTOCOL_MASK     0x00ff
#define DSP_RECONFIGURE_IDLE              0
#define DSP_RECONFIGURE_V25               1
#define DSP_RECONFIGURE_V21_CH2           2
#define DSP_RECONFIGURE_V27_2400          3
#define DSP_RECONFIGURE_V27_4800          4
#define DSP_RECONFIGURE_V29_7200          5
#define DSP_RECONFIGURE_V29_9600          6
#define DSP_RECONFIGURE_V33_12000         7
#define DSP_RECONFIGURE_V33_14400         8
#define DSP_RECONFIGURE_V17_7200          9
#define DSP_RECONFIGURE_V17_9600          10
#define DSP_RECONFIGURE_V17_12000         11
#define DSP_RECONFIGURE_V17_14400         12
/*
  data indications if transparent framer
  <byte> data 0
  <byte> data 1
  ...
  data indications if HDLC framer
  <byte> data 0
  <byte> data 1
  ...
  <byte> CRC 0
  <byte> CRC 1
  <byte> preamble flags
*/
#define DSP_UDATA_INDICATION_SYNC         0
/*
  returns:
  <word> time of sync (sampled from counter at 8kHz)
*/
#define DSP_UDATA_INDICATION_DCD_OFF      1
/*
  returns:
  <word> time of DCD off (sampled from counter at 8kHz)
*/
#define DSP_UDATA_INDICATION_DCD_ON       2
/*
  returns:
  <word> time of DCD on (sampled from counter at 8kHz)
  <byte> connected norm
  <word> connected options
  <dword> connected speed (bit/s)
*/
#define DSP_UDATA_INDICATION_CTS_OFF      3
/*
  returns:
  <word> time of CTS off (sampled from counter at 8kHz)
*/
#define DSP_UDATA_INDICATION_CTS_ON       4
/*
  returns:
  <word> time of CTS on (sampled from counter at 8kHz)
  <byte> connected norm
  <word> connected options
  <dword> connected speed (bit/s)
*/
#define DSP_CONNECTED_NORM_UNSPECIFIED      0
#define DSP_CONNECTED_NORM_V21              1
#define DSP_CONNECTED_NORM_V23              2
#define DSP_CONNECTED_NORM_V22              3
#define DSP_CONNECTED_NORM_V22_BIS          4
#define DSP_CONNECTED_NORM_V32_BIS          5
#define DSP_CONNECTED_NORM_V34              6
#define DSP_CONNECTED_NORM_V8               7
#define DSP_CONNECTED_NORM_BELL_212A        8
#define DSP_CONNECTED_NORM_BELL_103         9
#define DSP_CONNECTED_NORM_V29_LEASED_LINE  10
#define DSP_CONNECTED_NORM_V33_LEASED_LINE  11
#define DSP_CONNECTED_NORM_TFAST            12
#define DSP_CONNECTED_NORM_V21_CH2          13
#define DSP_CONNECTED_NORM_V27_TER          14
#define DSP_CONNECTED_NORM_V29              15
#define DSP_CONNECTED_NORM_V33              16
#define DSP_CONNECTED_NORM_V17              17
#define DSP_CONNECTED_OPTION_TRELLIS        0x0001
/*---------------------------------------------------------------------------*/
extern char *dsp_read_file(OsFileHandle *fp,
			   word card_type_number,
			   word *p_dsp_download_count,
			   t_dsp_desc *p_dsp_download_table,
			   t_dsp_portable_desc *p_dsp_portable_download_table);
/*---------------------------------------------------------------------------*/
#endif /* DSP_DEFS_H_ */
